From 6cfcc84c1aa255da53073da33db31e45e8ca990c Mon Sep 17 00:00:00 2001 From: Ewald <129623145+MajoorWaldi@users.noreply.github.com> Date: Wed, 22 Apr 2026 10:19:53 +0200 Subject: [PATCH] fix: MFV seed randomize + subgraph widget live sync - sidebarRunButton: add _walkAllNodes() to mirror ComfyUI's native beforeQueued/afterQueued widget cycle on all nodes incl. inner subgraph nodes so control_after_generate (randomize/increment/decrement) is applied correctly on each MFV run - widgetAdapters: _syncWidgetDomElement falls back to cachedDeepestByFrame.widget.inputEl for PromotedWidgetView so typing in the sidebar updates the canvas textarea of subgraph outer widgets in real time - widgetAdapters: spinner step forced to 1 for integer widgets; widget.value restored after callback to bypass step2 snapping --- js/assets/channel-icon.png | Bin 0 -> 4398 bytes js/assets/guides-icon.png | Bin 0 -> 2777 bytes js/components/VideoControls.js | 31 + js/entry.js | 6 +- js/features/panel/panelRuntime.js | 2 +- js/features/viewer/FloatingViewer.impl.js | 310 +- js/features/viewer/floatingViewerMedia.js | 30 +- js/features/viewer/floatingViewerMode.js | 6 +- js/features/viewer/floatingViewerUi.js | 686 +- .../workflowSidebar/NodeWidgetRenderer.js | 235 +- .../workflowSidebar/WorkflowNodesTab.js | 321 + .../viewer/workflowSidebar/WorkflowSidebar.js | 180 +- .../workflowSidebar/sidebarRunButton.js | 109 +- .../viewer/workflowSidebar/widgetAdapters.js | 161 +- ...ting_viewer_media_player_bridge.vitest.mjs | 84 + ...viewer_toolbar_overlay_controls.vitest.mjs | 83 + ...ideo_controls_responsive_layout.vitest.mjs | 50 + js/theme/theme-comfy.css | 769 +- js/vue/components/grid/AssetsGrid.vue | 18 +- .../components/grid/VirtualAssetGridHost.vue | 25 +- js/vue/composables/useGridLoader.js | 6 + .../assets/comfyui-majoor-assetsmanager.css | 2 +- js_dist/chunks/FloatingViewer-BUg810bV.js | 2748 -- js_dist/chunks/FloatingViewer-C4ghYm3b.js | 3444 ++ ...jZbCd.js => LiveStreamTracker-BWRfNIz3.js} | 2 +- .../{entry-CuODMrGh.js => entry-CfyS4_5Z.js} | 28275 ++++++++-------- ...enInfo-CgFRoaPM.js => genInfo-cg-2k0dV.js} | 2 +- ...JokSmes.js => model3dRenderer-B8p2IdLl.js} | 2 +- ...{scopes-B0qS9yvv.js => scopes-BfKBxPqI.js} | 2 +- ...ide-DsvoFFQr.js => sideBySide-Cxerzz-Z.js} | 2 +- js_dist/entry.js | 2 +- 31 files changed, 20435 insertions(+), 17158 deletions(-) create mode 100644 js/assets/channel-icon.png create mode 100644 js/assets/guides-icon.png create mode 100644 js/features/viewer/workflowSidebar/WorkflowNodesTab.js create mode 100644 js/tests/floating_viewer_media_player_bridge.vitest.mjs create mode 100644 js/tests/floating_viewer_toolbar_overlay_controls.vitest.mjs create mode 100644 js/tests/video_controls_responsive_layout.vitest.mjs delete mode 100644 js_dist/chunks/FloatingViewer-BUg810bV.js create mode 100644 js_dist/chunks/FloatingViewer-C4ghYm3b.js rename js_dist/chunks/{LiveStreamTracker-CC4jZbCd.js => LiveStreamTracker-BWRfNIz3.js} (99%) rename js_dist/chunks/{entry-CuODMrGh.js => entry-CfyS4_5Z.js} (87%) rename js_dist/chunks/{genInfo-CgFRoaPM.js => genInfo-cg-2k0dV.js} (99%) rename js_dist/chunks/{model3dRenderer-BJokSmes.js => model3dRenderer-B8p2IdLl.js} (87%) rename js_dist/chunks/{scopes-B0qS9yvv.js => scopes-BfKBxPqI.js} (99%) rename js_dist/chunks/{sideBySide-DsvoFFQr.js => sideBySide-Cxerzz-Z.js} (99%) diff --git a/js/assets/channel-icon.png b/js/assets/channel-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ca8d592a9e0ce5552ceeac40189362937f92a43b GIT binary patch literal 4398 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 { + try { + const width = Number(hostEl?.clientWidth) || Number(controls?.clientWidth) || 0; + let layout = "regular"; + if (width > 0 && width < 560) layout = "stacked"; + else if (width > 0 && width < 860) layout = "compact"; + controls.dataset.mjrLayout = layout; + } catch (e) { + console.debug?.(e); + } + }; + + applyResponsiveLayout(); + + try { + if (typeof ResizeObserver === "function" && hostEl) { + const ro = new ResizeObserver(() => applyResponsiveLayout()); + ro.observe(hostEl); + unsubs.push(() => { + try { + ro.disconnect(); + } catch (e) { + console.debug?.(e); + } + }); + } + } catch (e) { + console.debug?.(e); + } // Must NOT run in capture phase, otherwise it blocks pointerdown on child controls // like the draggable In/Out handles. We stop bubbling instead, and rely on the // window-capture guards below to prevent viewer pan/zoom handlers. diff --git a/js/entry.js b/js/entry.js index 5942dffb..800e30b8 100644 --- a/js/entry.js +++ b/js/entry.js @@ -366,12 +366,12 @@ app.registerExtension({ // 8b. Proactive early fetch — start the first assets page in the background // so the data is ready (or already in-flight) when the user opens the - // sidebar. A 4-second delay lets ComfyUI finish its own startup work - // and the backend DB warm-up to settle before we hit /mjr/am/list. + // sidebar. 800ms lets ComfyUI finish registering extensions before we + // hit /mjr/am/list (was 4000ms — too long, caused visible blank grid). // startEarlyFetch() is a no-op when ComfyUI is executing a prompt. setTimeout(() => { startEarlyFetch(); - }, 4000); + }, 800); // 9. WebSocket / realtime listeners. void setupApiListeners(runtimeApp, executionRuntime).catch((e) => diff --git a/js/features/panel/panelRuntime.js b/js/features/panel/panelRuntime.js index 62f0d6bd..6a51e6c4 100644 --- a/js/features/panel/panelRuntime.js +++ b/js/features/panel/panelRuntime.js @@ -1086,7 +1086,7 @@ async function _mountPanelRuntimeImpl(container, { useComfyThemeUI = true, exter } catch (e) { console.debug?.(e); } _autoLoadTimer = - assetsQueryController?.scheduleAutoLoad?.(initialLoadPromise, 2000) ?? null; + assetsQueryController?.scheduleAutoLoad?.(initialLoadPromise, 300) ?? null; const renderDuration = endTimer("panelRender", "gridRender"); trackGridRender(renderDuration); diff --git a/js/features/viewer/FloatingViewer.impl.js b/js/features/viewer/FloatingViewer.impl.js index ebdb7651..2d228dc6 100644 --- a/js/features/viewer/FloatingViewer.impl.js +++ b/js/features/viewer/FloatingViewer.impl.js @@ -90,7 +90,11 @@ import { disposeFloatingViewerProgressBar } from "./floatingViewerProgress.js"; function _hasSimplePlayerControls(mediaEl) { try { - return !!mediaEl?.classList?.contains("mjr-mfv-simple-player"); + return ( + !!mediaEl?.classList?.contains("mjr-mfv-simple-player") + || !!mediaEl?.classList?.contains("mjr-mfv-player-host") + || !!mediaEl?.querySelector?.(".mjr-video-controls, .mjr-mfv-simple-player-controls") + ); } catch (e) { console.debug?.(e); return false; @@ -183,6 +187,14 @@ export class FloatingViewer { this._progressCurrentNodeId = null; this._docClickHost = null; this._handleDocClick = null; + this._mediaControlHandles = []; + this._layoutObserver = null; + this._channel = "rgb"; + this._exposureEV = 0; + this._gridMode = 0; + this._overlayMaskEnabled = false; + this._overlayMaskOpacity = 0.65; + this._overlayFormat = "image"; } _dispatchControllerAction(methodName, fallbackEventType) { @@ -387,6 +399,223 @@ export class FloatingViewer { this._dragging ? "mjr-mfv-content--grabbing" : "mjr-mfv-content--grab", ); } + this._applyMediaToneControls(); + this._redrawOverlayGuides(); + } + + _ensureToneFilterDefs() { + if (this._toneFilterDefsEl?.isConnected) return this._toneFilterDefsEl; + const svgNs = "http://www.w3.org/2000/svg"; + const svg = document.createElementNS(svgNs, "svg"); + svg.setAttribute("aria-hidden", "true"); + svg.style.position = "absolute"; + svg.style.width = "0"; + svg.style.height = "0"; + svg.style.pointerEvents = "none"; + const defs = document.createElementNS(svgNs, "defs"); + const filters = [ + ["mjr-mfv-ch-r", "1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0"], + ["mjr-mfv-ch-g", "0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0"], + ["mjr-mfv-ch-b", "0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0"], + ["mjr-mfv-ch-a", "0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0"], + ["mjr-mfv-ch-l", "0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0"], + ]; + for (const [id, values] of filters) { + const filter = document.createElementNS(svgNs, "filter"); + filter.setAttribute("id", id); + const matrix = document.createElementNS(svgNs, "feColorMatrix"); + matrix.setAttribute("type", "matrix"); + matrix.setAttribute("values", values); + filter.appendChild(matrix); + defs.appendChild(filter); + } + svg.appendChild(defs); + this.element?.appendChild(svg); + this._toneFilterDefsEl = svg; + return svg; + } + + _applyMediaToneControls() { + this._ensureToneFilterDefs(); + if (!this._contentEl) return; + const channel = String(this._channel || "rgb"); + const exposureScale = Math.pow(2, Number(this._exposureEV) || 0); + const channelFilter = + channel === "rgb" ? "" : `url(#mjr-mfv-ch-${channel})`; + const brightnessFilter = + Math.abs(exposureScale - 1) < 0.0001 ? "" : `brightness(${exposureScale})`; + const filterValue = [channelFilter, brightnessFilter].filter(Boolean).join(" ").trim(); + const mediaEls = this._contentEl.querySelectorAll?.(".mjr-mfv-media") || []; + for (const el of mediaEls) { + try { + el.style.filter = filterValue || ""; + } catch (e) { + console.debug?.(e); + } + } + } + + _getOverlayAspect(format, mediaEl, panelRect) { + try { + const f = String(format || "image"); + if (f === "image") { + const nw = + Number(mediaEl?.videoWidth) + || Number(mediaEl?.naturalWidth) + || Number(panelRect?.width) + || 1; + const nh = + Number(mediaEl?.videoHeight) + || Number(mediaEl?.naturalHeight) + || Number(panelRect?.height) + || 1; + const a = nw / nh; + return Number.isFinite(a) && a > 0 ? a : 1; + } + if (f === "16:9") return 16 / 9; + if (f === "9:16") return 9 / 16; + if (f === "1:1") return 1; + if (f === "4:3") return 4 / 3; + if (f === "2.39") return 2.39; + } catch (e) { + console.debug?.(e); + } + return 1; + } + + _fitAspectInBox(boxW, boxH, aspect) { + try { + const bw = Number(boxW) || 0; + const bh = Number(boxH) || 0; + const a = Number(aspect) || 1; + if (!(bw > 0 && bh > 0 && a > 0)) return { x: 0, y: 0, w: bw, h: bh }; + const boxA = bw / bh; + let w = bw; + let h = bh; + if (a >= boxA) { + h = bw / a; + } else { + w = bh * a; + } + return { x: (bw - w) / 2, y: (bh - h) / 2, w, h }; + } catch (e) { + console.debug?.(e); + return { x: 0, y: 0, w: Number(boxW) || 0, h: Number(boxH) || 0 }; + } + } + + _drawMaskOutside(ctx, canvas, rects, alpha) { + try { + const a = Math.max(0, Math.min(0.92, Number(alpha) || 0)); + if (!(a > 0)) return; + ctx.save(); + ctx.fillStyle = `rgba(0,0,0,${a})`; + ctx.fillRect(0, 0, canvas.width, canvas.height); + ctx.globalCompositeOperation = "destination-out"; + for (const r of rects) { + if (!r || !(r.w > 1 && r.h > 1)) continue; + ctx.fillRect(r.x, r.y, r.w, r.h); + } + ctx.restore(); + } catch (e) { + console.debug?.(e); + } + } + + _redrawOverlayGuides() { + const canvas = this._overlayCanvas; + const host = this._contentEl; + if (!canvas || !host) return; + const ctx = canvas.getContext?.("2d"); + if (!ctx) return; + + const dpr = Math.max(1, Math.min(3, Number(window.devicePixelRatio) || 1)); + const cssW = host.clientWidth || 0; + const cssH = host.clientHeight || 0; + canvas.width = Math.max(1, Math.floor(cssW * dpr)); + canvas.height = Math.max(1, Math.floor(cssH * dpr)); + canvas.style.width = `${cssW}px`; + canvas.style.height = `${cssH}px`; + ctx.clearRect(0, 0, canvas.width, canvas.height); + + if (!(this._gridMode || this._overlayMaskEnabled)) return; + + const hostRect = host.getBoundingClientRect?.(); + if (!hostRect) return; + const panels = Array.from( + host.querySelectorAll?.( + ".mjr-mfv-simple-container, .mjr-mfv-side-panel, .mjr-mfv-grid-cell, .mjr-mfv-ab-layer", + ) || [], + ); + const panelEls = panels.length ? panels : [host]; + const formatRects = []; + + for (const panelEl of panelEls) { + const mediaEl = panelEl.querySelector?.(".mjr-mfv-media"); + if (!mediaEl) continue; + const panelRect = panelEl.getBoundingClientRect?.(); + if (!panelRect?.width || !panelRect?.height) continue; + const baseW = Number(panelRect.width) || 0; + const baseH = Number(panelRect.height) || 0; + const aspect = this._getOverlayAspect(this._overlayFormat, mediaEl, panelRect); + const fit = this._fitAspectInBox(baseW, baseH, aspect); + const centerX = (panelRect.left - hostRect.left) + baseW / 2; + const centerY = (panelRect.top - hostRect.top) + baseH / 2; + const z = Math.max(0.1, Math.min(16, Number(this._zoom) || 1)); + const rectCss = { + x: centerX + fit.x * z - baseW * z / 2 + (Number(this._panX) || 0), + y: centerY + fit.y * z - baseH * z / 2 + (Number(this._panY) || 0), + w: fit.w * z, + h: fit.h * z, + }; + formatRects.push({ + x: rectCss.x * dpr, + y: rectCss.y * dpr, + w: rectCss.w * dpr, + h: rectCss.h * dpr, + }); + } + + if (!formatRects.length) return; + + if (this._overlayMaskEnabled) { + this._drawMaskOutside(ctx, canvas, formatRects, this._overlayMaskOpacity); + ctx.save(); + ctx.setLineDash?.([Math.max(2, 4 * dpr), Math.max(2, 3 * dpr)]); + ctx.strokeStyle = "rgba(255,255,255,0.22)"; + ctx.lineWidth = Math.max(1, Math.floor(dpr)); + for (const r of formatRects) { + ctx.strokeRect(r.x + 0.5, r.y + 0.5, r.w - 1, r.h - 1); + } + ctx.restore(); + } + + if (this._mode !== MFV_MODES.SIMPLE || !this._gridMode) return; + const rect = formatRects[0]; + if (!rect) return; + ctx.save(); + ctx.translate(rect.x, rect.y); + ctx.strokeStyle = "rgba(255,255,255,0.22)"; + ctx.lineWidth = Math.max(2, Math.round(1.25 * dpr)); + const drawLine = (x1, y1, x2, y2) => { + ctx.beginPath(); + ctx.moveTo(Math.round(x1) + 0.5, Math.round(y1) + 0.5); + ctx.lineTo(Math.round(x2) + 0.5, Math.round(y2) + 0.5); + ctx.stroke(); + }; + if (this._gridMode === 1) { + drawLine(rect.w / 3, 0, rect.w / 3, rect.h); + drawLine((2 * rect.w) / 3, 0, (2 * rect.w) / 3, rect.h); + drawLine(0, rect.h / 3, rect.w, rect.h / 3); + drawLine(0, (2 * rect.h) / 3, rect.w, (2 * rect.h) / 3); + } else if (this._gridMode === 2) { + drawLine(rect.w / 2, 0, rect.w / 2, rect.h); + drawLine(0, rect.h / 2, rect.w, rect.h / 2); + } else if (this._gridMode === 3) { + ctx.strokeRect(rect.w * 0.1 + 0.5, rect.h * 0.1 + 0.5, rect.w * 0.8 - 1, rect.h * 0.8 - 1); + ctx.strokeRect(rect.w * 0.05 + 0.5, rect.h * 0.05 + 0.5, rect.w * 0.9 - 1, rect.h * 0.9 - 1); + } + ctx.restore(); } /** @@ -422,6 +651,30 @@ export class FloatingViewer { this._applyTransform(); } + _bindLayoutObserver() { + this._unbindLayoutObserver(); + const target = this._contentEl; + if (!target || typeof ResizeObserver === "undefined") return; + try { + this._layoutObserver = new ResizeObserver(() => { + this._applyTransform(); + }); + this._layoutObserver.observe(target); + } catch (e) { + console.debug?.(e); + this._layoutObserver = null; + } + } + + _unbindLayoutObserver() { + try { + this._layoutObserver?.disconnect?.(); + } catch (e) { + console.debug?.(e); + } + this._layoutObserver = null; + } + /** Bind wheel + pointer events to the clip viewport element. */ _initPanZoom(contentEl) { this._destroyPanZoom(); @@ -434,7 +687,7 @@ export class FloatingViewer { "wheel", (e) => { if (e.target?.closest?.("audio")) return; - if (e.target?.closest?.(".mjr-mfv-simple-player-controls")) return; + if (e.target?.closest?.(".mjr-video-controls, .mjr-mfv-simple-player-controls")) return; if (isModel3DInteractionTarget(e.target)) return; const scrollableAncestor = _findScrollableAncestor(e.target, contentEl); if ( @@ -470,7 +723,7 @@ export class FloatingViewer { // Let native video controls and the AB divider handle their own events. if (e.target?.closest?.("video")) return; if (e.target?.closest?.("audio")) return; - if (e.target?.closest?.(".mjr-mfv-simple-player-controls")) return; + if (e.target?.closest?.(".mjr-video-controls, .mjr-mfv-simple-player-controls")) return; if (e.target?.closest?.(".mjr-mfv-ab-divider")) return; if (isModel3DInteractionTarget(e.target)) return; e.preventDefault(); @@ -521,7 +774,7 @@ export class FloatingViewer { (e) => { if (e.target?.closest?.("video")) return; if (e.target?.closest?.("audio")) return; - if (e.target?.closest?.(".mjr-mfv-simple-player-controls")) return; + if (e.target?.closest?.(".mjr-video-controls, .mjr-mfv-simple-player-controls")) return; if (isModel3DInteractionTarget(e.target)) return; const isNearFit = Math.abs(this._zoom - 1) < 0.05; this._setMfvZoom(isNearFit ? Math.min(4, this._zoom * 4) : 1, e.clientX, e.clientY); @@ -550,6 +803,28 @@ export class FloatingViewer { this._compareSyncAC = null; } + _destroyMediaControls() { + const handles = Array.isArray(this._mediaControlHandles) ? this._mediaControlHandles : []; + for (const handle of handles) { + try { + handle?.destroy?.(); + } catch (e) { + console.debug?.(e); + } + } + this._mediaControlHandles = []; + } + + _trackMediaControls(rootEl) { + try { + const handle = rootEl?._mjrMediaControlsHandle || null; + if (handle?.destroy) this._mediaControlHandles.push(handle); + } catch (e) { + console.debug?.(e); + } + return rootEl; + } + _initCompareSync() { this._destroyCompareSync(); if (!this._contentEl) return; @@ -573,6 +848,8 @@ export class FloatingViewer { // Tear down previous panzoom bindings before clearing DOM. this._destroyPanZoom(); this._destroyCompareSync(); + this._destroyMediaControls(); + const overlayCanvas = this._overlayCanvas || null; this._contentEl.replaceChildren(); this._contentEl.style.overflow = "hidden"; @@ -591,10 +868,15 @@ export class FloatingViewer { break; } + if (overlayCanvas) { + this._contentEl.appendChild(overlayCanvas); + } + if (this._mediaProgressEl) { this._contentEl.appendChild(this._mediaProgressEl); } + this._applyMediaToneControls(); this._applyTransform(); this._initPanZoom(this._contentEl); this._initCompareSync(); @@ -606,7 +888,8 @@ export class FloatingViewer { return; } const mediaKind = _mediaKind(this._mediaA); - const mediaEl = _buildMediaEl(this._mediaA); + const rawMediaEl = _buildMediaEl(this._mediaA); + const mediaEl = this._trackMediaControls?.(rawMediaEl) || rawMediaEl; if (!mediaEl) { this._contentEl.appendChild(_makeEmptyState("Could not load media")); return; @@ -631,8 +914,10 @@ export class FloatingViewer { } _renderAB() { - const elA = this._mediaA ? _buildMediaEl(this._mediaA, { fill: true }) : null; - const elB = this._mediaB ? _buildMediaEl(this._mediaB, { fill: true }) : null; + const rawElA = this._mediaA ? _buildMediaEl(this._mediaA, { fill: true }) : null; + const rawElB = this._mediaB ? _buildMediaEl(this._mediaB, { fill: true }) : null; + const elA = this._trackMediaControls?.(rawElA) || rawElA; + const elB = this._trackMediaControls?.(rawElB) || rawElB; const kindA = this._mediaA ? _mediaKind(this._mediaA) : ""; const kindB = this._mediaB ? _mediaKind(this._mediaB) : ""; @@ -745,8 +1030,10 @@ export class FloatingViewer { } _renderSide() { - const elA = this._mediaA ? _buildMediaEl(this._mediaA) : null; - const elB = this._mediaB ? _buildMediaEl(this._mediaB) : null; + const rawElA = this._mediaA ? _buildMediaEl(this._mediaA) : null; + const rawElB = this._mediaB ? _buildMediaEl(this._mediaB) : null; + const elA = this._trackMediaControls?.(rawElA) || rawElA; + const elB = this._trackMediaControls?.(rawElB) || rawElB; const kindA = this._mediaA ? _mediaKind(this._mediaA) : ""; const kindB = this._mediaB ? _mediaKind(this._mediaB) : ""; @@ -822,7 +1109,8 @@ export class FloatingViewer { cell.className = "mjr-mfv-grid-cell"; if (media) { const kind = _mediaKind(media); - const el = _buildMediaEl(media); + const rawEl = _buildMediaEl(media); + const el = this._trackMediaControls?.(rawEl) || rawEl; if (el) cell.appendChild(el); else cell.appendChild(_makeEmptyState("—")); cell.appendChild( @@ -970,6 +1258,8 @@ export class FloatingViewer { disposeFloatingViewerProgressBar(this); this._destroyPanZoom(); this._destroyCompareSync(); + this._destroyMediaControls(); + this._unbindLayoutObserver(); this._stopEdgeResize(); this._clearPopoutCloseWatch(); try { diff --git a/js/features/viewer/floatingViewerMedia.js b/js/features/viewer/floatingViewerMedia.js index 25442791..69472c68 100644 --- a/js/features/viewer/floatingViewerMedia.js +++ b/js/features/viewer/floatingViewerMedia.js @@ -4,7 +4,9 @@ import { createModel3DMediaElement, MODEL3D_EXTS, } from "./model3dRenderer.js"; +import { mountUnifiedMediaControls } from "./mediaPlayer.js"; import { mountFloatingViewerSimplePlayer } from "./floatingViewerSimplePlayer.js"; +import { readAssetFps, readAssetFrameCount } from "../../utils/mediaFps.js"; const VIDEO_EXTS = new Set([".mp4", ".webm", ".mov", ".avi", ".mkv"]); const AUDIO_EXTS = new Set([".mp3", ".wav", ".flac", ".ogg", ".m4a", ".aac", ".opus", ".wma"]); @@ -128,6 +130,28 @@ export function buildFloatingViewerMediaElement(fileData, { fill = false } = {}) ext === ".webp" && Number(fileData?.duration ?? fileData?.metadata_raw?.duration ?? 0) > 0; + const buildPlayableMediaHost = (mediaEl, mediaKind) => { + const host = document.createElement("div"); + host.className = `mjr-mfv-player-host${fill ? " mjr-mfv-player-host--fill" : ""}`; + host.appendChild(mediaEl); + + const mounted = mountUnifiedMediaControls(mediaEl, { + variant: "viewer", + hostEl: host, + mediaKind, + initialFps: readAssetFps(fileData) || undefined, + initialFrameCount: readAssetFrameCount(fileData) || undefined, + }); + + try { + if (mounted) host._mjrMediaControlsHandle = mounted; + } catch (e) { + console.debug?.(e); + } + + return host; + }; + if (kind === "audio") { const audio = document.createElement("audio"); audio.className = mediaClass; @@ -143,8 +167,7 @@ export function buildFloatingViewerMediaElement(fileData, { fill = false } = {}) console.debug?.(e); } attemptFloatingViewerAutoplay(audio); - const playerRoot = mountFloatingViewerSimplePlayer(audio, fileData, { kind: "audio" }); - return playerRoot || audio; + return buildPlayableMediaHost(audio, "audio"); } if (kind === "video") { @@ -156,8 +179,7 @@ export function buildFloatingViewerMediaElement(fileData, { fill = false } = {}) v.muted = true; v.autoplay = true; v.playsInline = true; - const playerRoot = mountFloatingViewerSimplePlayer(v, fileData, { kind: "video" }); - return playerRoot || v; + return buildPlayableMediaHost(v, "video"); } if (kind === "model3d") { diff --git a/js/features/viewer/floatingViewerMode.js b/js/features/viewer/floatingViewerMode.js index c09b6f34..3f1f3114 100644 --- a/js/features/viewer/floatingViewerMode.js +++ b/js/features/viewer/floatingViewerMode.js @@ -45,8 +45,10 @@ export function updateFloatingViewerPinUI(viewer) { const active = viewer._pinnedSlots.has(slot); btn.classList.toggle("is-pinned", active); btn.setAttribute("aria-pressed", String(active)); - btn.title = active ? `Unpin ${slot}` : `Pin ${slot}`; + btn.title = active ? `Unpin Asset ${slot}` : `Pin Asset ${slot}`; } + // Highlight pin trigger when any slot is pinned + viewer._pinBtn?.classList.toggle("is-on", (viewer._pinnedSlots?.size ?? 0) > 0); } export function updateFloatingViewerModeButtonUI(viewer) { @@ -69,6 +71,8 @@ export function updateFloatingViewerModeButtonUI(viewer) { viewer._modeBtn.title = tooltip; viewer._modeBtn.setAttribute("aria-label", tooltip); viewer._modeBtn.removeAttribute("aria-pressed"); + // Highlight when any comparison mode is active + viewer._modeBtn.classList.toggle("is-on", viewer._mode !== MFV_MODES.SIMPLE); } export function setFloatingViewerLiveActive(viewer, active) { diff --git a/js/features/viewer/floatingViewerUi.js b/js/features/viewer/floatingViewerUi.js index e31b0088..e0af23bd 100644 --- a/js/features/viewer/floatingViewerUi.js +++ b/js/features/viewer/floatingViewerUi.js @@ -22,6 +22,100 @@ import { sanitizePromptForDisplay, } from "../../components/sidebar/parsers/geninfoParser.js"; +// --------------------------------------------------------------------------- +// Toolbar icon-dropdown helper +// --------------------------------------------------------------------------- +function _mkIconDrop(triggerHtml, title, items, viewer) { + const wrap = document.createElement("div"); + wrap.className = "mjr-mfv-idrop"; + + const trigger = document.createElement("button"); + trigger.type = "button"; + trigger.className = "mjr-icon-btn mjr-mfv-idrop-trigger"; + trigger.title = title || ""; + trigger.innerHTML = triggerHtml; + trigger.setAttribute("aria-haspopup", "listbox"); + trigger.setAttribute("aria-expanded", "false"); + wrap.appendChild(trigger); + + const menu = document.createElement("div"); + menu.className = "mjr-mfv-idrop-menu"; + menu.setAttribute("role", "listbox"); + wrap.appendChild(menu); + + // Hidden select: existing event handlers read .value from it and bind "change" + const hiddenSel = document.createElement("select"); + hiddenSel.style.cssText = "position:absolute;opacity:0;pointer-events:none;width:0;height:0;overflow:hidden;"; + wrap.appendChild(hiddenSel); + + const itemEls = []; + for (const item of items) { + const opt = document.createElement("option"); + opt.value = String(item.value); + hiddenSel.appendChild(opt); + + const row = document.createElement("button"); + row.type = "button"; + row.className = "mjr-mfv-idrop-item"; + row.setAttribute("role", "option"); + row.dataset.value = String(item.value); + row.innerHTML = item.html ?? String(item.label ?? item.value); + menu.appendChild(row); + itemEls.push(row); + } + + const _closeMenu = () => { + menu.classList.remove("is-open"); + trigger.setAttribute("aria-expanded", "false"); + }; + + trigger.addEventListener("click", (e) => { + e.stopPropagation(); + const isOpen = menu.classList.contains("is-open"); + // Close all other open icon-dropdowns in this viewer + viewer?.element?.querySelectorAll?.(".mjr-mfv-idrop-menu.is-open").forEach(m => m.classList.remove("is-open")); + if (!isOpen) { + menu.classList.add("is-open"); + trigger.setAttribute("aria-expanded", "true"); + } + }); + + menu.addEventListener("click", (e) => { + const row = e.target.closest(".mjr-mfv-idrop-item"); + if (!row) return; + hiddenSel.value = row.dataset.value; + hiddenSel.dispatchEvent(new Event("change", { bubbles: true })); + itemEls.forEach(i => { + i.classList.toggle("is-selected", i === row); + i.setAttribute("aria-selected", String(i === row)); + }); + _closeMenu(); + }); + + const selectItem = (val) => { + hiddenSel.value = String(val); + itemEls.forEach(i => { + i.classList.toggle("is-selected", i.dataset.value === String(val)); + i.setAttribute("aria-selected", String(i.dataset.value === String(val))); + }); + }; + + return { wrap, trigger, menu, select: hiddenSel, selectItem }; +} + +// Channel letter coloring +const _CH_COLOR = { rgb: "#e0e0e0", r: "#ff5555", g: "#44dd66", b: "#5599ff", a: "#ffffff", l: "#bbbbbb" }; +const _CH_LABEL = { rgb: "RGB", r: "R", g: "G", b: "B", a: "A", l: "L" }; +const _CH_WEIGHT = { rgb: "500", r: "700", g: "700", b: "700", a: "700", l: "400" }; + +function _channelHtml(ch) { + const k = String(ch || "rgb").toLowerCase(); + const color = _CH_COLOR[k] || "#e0e0e0"; + const label = _CH_LABEL[k] || k.toUpperCase(); + const fw = _CH_WEIGHT[k] || "500"; + return `${label}`; +} + export function renderFloatingViewer(viewer) { const el = document.createElement("div"); el.className = "mjr-mfv"; @@ -42,6 +136,9 @@ export function renderFloatingViewer(viewer) { viewer._contentEl = document.createElement("div"); viewer._contentEl.className = "mjr-mfv-content"; viewer._contentWrapper.appendChild(viewer._contentEl); + viewer._overlayCanvas = document.createElement("canvas"); + viewer._overlayCanvas.className = "mjr-mfv-overlay-canvas"; + viewer._contentEl.appendChild(viewer._overlayCanvas); viewer._contentEl.appendChild(buildFloatingViewerMediaProgressOverlay(viewer)); viewer._sidebar = new WorkflowSidebar({ @@ -56,6 +153,7 @@ export function renderFloatingViewer(viewer) { viewer._rebindControlHandlers(); viewer._bindPanelInteractions(); viewer._bindDocumentUiHandlers(); + viewer._bindLayoutObserver?.(); viewer._onSidebarPosChanged = (e) => { if (e?.detail?.key === "viewer.mfvSidebarPosition") { @@ -75,7 +173,7 @@ export function buildFloatingViewerHeader(viewer) { const title = document.createElement("span"); title.className = "mjr-mfv-header-title"; title.id = viewer._titleId; - title.textContent = "〽️ Majoor Viewer Lite"; + title.textContent = "〽️ Majoor Floating Viewer"; const closeBtn = document.createElement("button"); viewer._closeBtn = closeBtn; @@ -93,6 +191,37 @@ export function buildFloatingViewerHeader(viewer) { } export function buildFloatingViewerToolbar(viewer) { + const createMiniSelect = (title, options) => { + const s = document.createElement("select"); + s.className = "mjr-mfv-toolbar-select"; + s.title = title || ""; + for (const option of options || []) { + const opt = document.createElement("option"); + opt.value = String(option.value); + opt.textContent = String(option.label); + s.appendChild(opt); + } + return s; + }; + + const createMiniRange = (title, { min, max, step, value } = {}) => { + const wrap = document.createElement("div"); + wrap.className = "mjr-mfv-toolbar-range"; + const input = document.createElement("input"); + input.type = "range"; + input.min = String(min); + input.max = String(max); + input.step = String(step); + input.value = String(value); + input.title = title || ""; + const out = document.createElement("span"); + out.className = "mjr-mfv-toolbar-range-out"; + out.textContent = Number(value).toFixed(2); + wrap.appendChild(input); + wrap.appendChild(out); + return { wrap, input, out }; + }; + const bar = document.createElement("div"); bar.className = "mjr-mfv-toolbar"; @@ -102,24 +231,448 @@ export function buildFloatingViewerToolbar(viewer) { viewer._updateModeBtnUI(); bar.appendChild(viewer._modeBtn); - viewer._pinGroup = document.createElement("div"); - viewer._pinGroup.className = "mjr-mfv-pin-group"; - viewer._pinGroup.setAttribute("role", "group"); - viewer._pinGroup.setAttribute("aria-label", "Pin References"); + // Pin: icon button + sort-style context menu popover (stays open for multi-toggle) + const pinBtn = document.createElement("button"); + pinBtn.type = "button"; + pinBtn.className = "mjr-icon-btn mjr-mfv-pin-trigger"; + pinBtn.title = "Pin slots A/B/C/D"; + pinBtn.setAttribute("aria-haspopup", "dialog"); + pinBtn.setAttribute("aria-expanded", "false"); + pinBtn.innerHTML = ''; + bar.appendChild(pinBtn); + + const pinPopover = document.createElement("div"); + pinPopover.className = "mjr-mfv-pin-popover"; + viewer.element.appendChild(pinPopover); + + const pinMenuDiv = document.createElement("div"); + pinMenuDiv.className = "mjr-menu"; + pinMenuDiv.style.cssText = "display:grid;gap:4px;"; + pinMenuDiv.setAttribute("role", "group"); + pinMenuDiv.setAttribute("aria-label", "Pin References"); + pinPopover.appendChild(pinMenuDiv); + + viewer._pinGroup = pinMenuDiv; viewer._pinBtns = {}; for (const slot of ["A", "B", "C", "D"]) { const btn = document.createElement("button"); btn.type = "button"; - btn.className = "mjr-mfv-pin-btn"; - btn.textContent = slot; + btn.className = "mjr-menu-item mjr-mfv-pin-btn"; btn.dataset.slot = slot; - btn.title = `Pin ${slot}`; + btn.title = `Pin Asset ${slot}`; btn.setAttribute("aria-pressed", "false"); + + const lbl = document.createElement("span"); + lbl.className = "mjr-menu-item-label"; + lbl.textContent = `Asset ${slot}`; + + const chk = document.createElement("i"); + chk.className = "pi pi-map-marker mjr-menu-item-check"; + chk.style.opacity = "0"; + + btn.appendChild(lbl); + btn.appendChild(chk); + pinMenuDiv.appendChild(btn); viewer._pinBtns[slot] = btn; - viewer._pinGroup.appendChild(btn); } viewer._updatePinUI(); - bar.appendChild(viewer._pinGroup); + viewer._pinBtn = pinBtn; + viewer._pinPopover = pinPopover; + + const _openPinPopover = () => { + const btnRect = pinBtn.getBoundingClientRect(); + const parentRect = viewer.element.getBoundingClientRect(); + pinPopover.style.left = `${btnRect.left - parentRect.left}px`; + pinPopover.style.top = `${btnRect.bottom - parentRect.top + 4}px`; + pinPopover.classList.add("is-open"); + pinBtn.setAttribute("aria-expanded", "true"); + }; + viewer._closePinPopover = () => { + pinPopover.classList.remove("is-open"); + pinBtn.setAttribute("aria-expanded", "false"); + }; + pinBtn.addEventListener("click", (e) => { + e.stopPropagation(); + if (pinPopover.classList.contains("is-open")) { + viewer._closePinPopover(); + } else { + viewer._closeAllToolbarPopovers?.(); + _openPinPopover(); + } + }); + // Note: pinMenuDiv click is handled by rebindFloatingViewerControlHandlers via event delegation. + // Dropdown stays open to allow toggling multiple slots. + + // Guides: icon button + sort-style context menu popover + const guideBtn = document.createElement("button"); + guideBtn.type = "button"; + guideBtn.className = "mjr-icon-btn mjr-mfv-guides-trigger"; + guideBtn.title = "Guides"; + guideBtn.setAttribute("aria-haspopup", "listbox"); + guideBtn.setAttribute("aria-expanded", "false"); + const guideImg = document.createElement("img"); + guideImg.src = new URL("../../assets/guides-icon.png", import.meta.url).href; + guideImg.className = "mjr-mfv-guides-icon"; + guideImg.alt = ""; + guideImg.setAttribute("aria-hidden", "true"); + guideBtn.appendChild(guideImg); + bar.appendChild(guideBtn); + + const guidePopover = document.createElement("div"); + guidePopover.className = "mjr-mfv-guides-popover"; + viewer.element.appendChild(guidePopover); + + const guideMenu = document.createElement("div"); + guideMenu.className = "mjr-menu"; + guideMenu.style.cssText = "display:grid;gap:4px;"; + guidePopover.appendChild(guideMenu); + + const guideHiddenSel = document.createElement("select"); + guideHiddenSel.style.cssText = "position:absolute;opacity:0;pointer-events:none;width:0;height:0;overflow:hidden;"; + guidePopover.appendChild(guideHiddenSel); + + const _GUIDE_OPTS = [ + { value: "0", label: "Off" }, + { value: "1", label: "Thirds" }, + { value: "2", label: "Center" }, + { value: "3", label: "Safe" }, + ]; + const _initGuide = String(viewer._gridMode || 0); + const guideItemEls = []; + for (const opt of _GUIDE_OPTS) { + const optEl = document.createElement("option"); + optEl.value = opt.value; + guideHiddenSel.appendChild(optEl); + + const item = document.createElement("button"); + item.type = "button"; + item.className = "mjr-menu-item"; + item.dataset.value = opt.value; + + const lbl = document.createElement("span"); + lbl.className = "mjr-menu-item-label"; + lbl.textContent = opt.label; + + const chk = document.createElement("i"); + chk.className = "pi pi-check mjr-menu-item-check"; + chk.style.opacity = opt.value === _initGuide ? "1" : "0"; + + item.appendChild(lbl); + item.appendChild(chk); + guideMenu.appendChild(item); + guideItemEls.push(item); + if (opt.value === _initGuide) item.classList.add("is-active"); + } + guideHiddenSel.value = _initGuide; + guideBtn.classList.toggle("is-on", _initGuide !== "0"); + viewer._guidesSelect = guideHiddenSel; + viewer._guideBtn = guideBtn; + viewer._guidePopover = guidePopover; + + const _openGuidePopover = () => { + const btnRect = guideBtn.getBoundingClientRect(); + const parentRect = viewer.element.getBoundingClientRect(); + guidePopover.style.left = `${btnRect.left - parentRect.left}px`; + guidePopover.style.top = `${btnRect.bottom - parentRect.top + 4}px`; + guidePopover.classList.add("is-open"); + guideBtn.setAttribute("aria-expanded", "true"); + }; + viewer._closeGuidePopover = () => { + guidePopover.classList.remove("is-open"); + guideBtn.setAttribute("aria-expanded", "false"); + }; + guideBtn.addEventListener("click", (e) => { + e.stopPropagation(); + if (guidePopover.classList.contains("is-open")) { + viewer._closeGuidePopover(); + } else { + viewer._closeAllToolbarPopovers?.(); + _openGuidePopover(); + } + }); + guideMenu.addEventListener("click", (e) => { + const item = e.target.closest(".mjr-menu-item"); + if (!item) return; + const val = item.dataset.value; + guideHiddenSel.value = val; + guideHiddenSel.dispatchEvent(new Event("change", { bubbles: true })); + guideItemEls.forEach(it => { + const active = it.dataset.value === val; + it.classList.toggle("is-active", active); + it.querySelector(".mjr-menu-item-check").style.opacity = active ? "1" : "0"; + }); + guideBtn.classList.toggle("is-on", val !== "0"); + viewer._closeGuidePopover(); + }); + + // Channel: icon button + sort-style context menu popover + const _initCh = String(viewer._channel || "rgb"); + const chBtn = document.createElement("button"); + chBtn.type = "button"; + chBtn.className = "mjr-icon-btn mjr-mfv-ch-trigger"; + chBtn.title = "Channel"; + chBtn.setAttribute("aria-haspopup", "listbox"); + chBtn.setAttribute("aria-expanded", "false"); + const chImg = document.createElement("img"); + chImg.src = new URL("../../assets/channel-icon.png", import.meta.url).href; + chImg.className = "mjr-mfv-ch-icon"; + chImg.alt = ""; + chImg.setAttribute("aria-hidden", "true"); + chBtn.appendChild(chImg); + bar.appendChild(chBtn); + + const _updateChBtnDisplay = (val) => { + if (!val || val === "rgb") { + chBtn.replaceChildren(chImg); + } else { + const color = _CH_COLOR[val] || "#e0e0e0"; + const weight = _CH_WEIGHT[val] || "500"; + const label = _CH_LABEL[val] || val.toUpperCase(); + const span = document.createElement("span"); + span.className = "mjr-mfv-ch-label"; + span.style.color = color; + span.style.fontWeight = weight; + span.textContent = label; + chBtn.replaceChildren(span); + } + }; + + const chPopover = document.createElement("div"); + chPopover.className = "mjr-mfv-ch-popover"; + viewer.element.appendChild(chPopover); + + const chMenu = document.createElement("div"); + chMenu.className = "mjr-menu"; + chMenu.style.cssText = "display:grid;gap:4px;"; + chPopover.appendChild(chMenu); + + const chHiddenSel = document.createElement("select"); + chHiddenSel.style.cssText = "position:absolute;opacity:0;pointer-events:none;width:0;height:0;overflow:hidden;"; + chPopover.appendChild(chHiddenSel); + + const _CH_OPTS = [ + { value: "rgb", color: "#e0e0e0", weight: "500", label: "RGB" }, + { value: "r", color: "#ff5555", weight: "700", label: "R" }, + { value: "g", color: "#44dd66", weight: "700", label: "G" }, + { value: "b", color: "#5599ff", weight: "700", label: "B" }, + { value: "a", color: "#ffffff", weight: "700", label: "A" }, + { value: "l", color: "#bbbbbb", weight: "400", label: "L" }, + ]; + const chItemEls = []; + for (const opt of _CH_OPTS) { + const optEl = document.createElement("option"); + optEl.value = opt.value; + chHiddenSel.appendChild(optEl); + + const item = document.createElement("button"); + item.type = "button"; + item.className = "mjr-menu-item"; + item.dataset.value = opt.value; + + const lbl = document.createElement("span"); + lbl.className = "mjr-menu-item-label"; + const colored = document.createElement("span"); + colored.textContent = opt.label; + colored.style.color = opt.color; + colored.style.fontWeight = opt.weight; + lbl.appendChild(colored); + + const chk = document.createElement("i"); + chk.className = "pi pi-check mjr-menu-item-check"; + chk.style.opacity = opt.value === _initCh ? "1" : "0"; + + item.appendChild(lbl); + item.appendChild(chk); + chMenu.appendChild(item); + chItemEls.push(item); + if (opt.value === _initCh) item.classList.add("is-active"); + } + chHiddenSel.value = _initCh; + _updateChBtnDisplay(_initCh); + chBtn.classList.toggle("is-on", _initCh !== "rgb"); + viewer._channelSelect = chHiddenSel; + viewer._chBtn = chBtn; + viewer._chPopover = chPopover; + + const _openChPopover = () => { + const btnRect = chBtn.getBoundingClientRect(); + const parentRect = viewer.element.getBoundingClientRect(); + chPopover.style.left = `${btnRect.left - parentRect.left}px`; + chPopover.style.top = `${btnRect.bottom - parentRect.top + 4}px`; + chPopover.classList.add("is-open"); + chBtn.setAttribute("aria-expanded", "true"); + }; + viewer._closeChPopover = () => { + chPopover.classList.remove("is-open"); + chBtn.setAttribute("aria-expanded", "false"); + }; + chBtn.addEventListener("click", (e) => { + e.stopPropagation(); + if (chPopover.classList.contains("is-open")) { + viewer._closeChPopover(); + } else { + viewer._closeAllToolbarPopovers?.(); + _openChPopover(); + } + }); + chMenu.addEventListener("click", (e) => { + const item = e.target.closest(".mjr-menu-item"); + if (!item) return; + const val = item.dataset.value; + chHiddenSel.value = val; + chHiddenSel.dispatchEvent(new Event("change", { bubbles: true })); + chItemEls.forEach(it => { + const active = it.dataset.value === val; + it.classList.toggle("is-active", active); + it.querySelector(".mjr-menu-item-check").style.opacity = active ? "1" : "0"; + }); + _updateChBtnDisplay(val); + chBtn.classList.toggle("is-on", val !== "rgb"); + viewer._closeChPopover(); + }); + + // Mutual exclusion: close all toolbar popovers (called before any one opens) + viewer._closeAllToolbarPopovers = () => { + viewer._closeChPopover?.(); + viewer._closeGuidePopover?.(); + viewer._closePinPopover?.(); + viewer._closeFormatPopover?.(); + viewer._closeGenDropdown?.(); + }; + + viewer._exposureCtl = createMiniRange("Exposure (EV)", { + min: -10, + max: 10, + step: 0.1, + value: Number(viewer._exposureEV || 0), + }); + viewer._exposureCtl.out.textContent = `${Number(viewer._exposureEV || 0).toFixed(1)}EV`; + viewer._exposureCtl.out.title = "Click to reset to 0 EV"; + viewer._exposureCtl.out.style.cursor = "pointer"; + viewer._exposureCtl.wrap.classList.toggle("is-active", (viewer._exposureEV || 0) !== 0); + bar.appendChild(viewer._exposureCtl.wrap); + + // Format mask: single trigger button + popover (format options + opacity slider) + viewer._formatToggle = document.createElement("button"); + viewer._formatToggle.type = "button"; + viewer._formatToggle.className = "mjr-icon-btn mjr-mfv-format-trigger"; + viewer._formatToggle.setAttribute("aria-haspopup", "dialog"); + viewer._formatToggle.setAttribute("aria-expanded", "false"); + viewer._formatToggle.setAttribute("aria-pressed", "false"); + viewer._formatToggle.title = "Format mask"; + viewer._formatToggle.innerHTML = ''; + bar.appendChild(viewer._formatToggle); + + const fmtPopover = document.createElement("div"); + fmtPopover.className = "mjr-mfv-format-popover"; + viewer.element.appendChild(fmtPopover); + + const fmtMenu = document.createElement("div"); + fmtMenu.className = "mjr-menu"; + fmtMenu.style.cssText = "display:grid;gap:4px;"; + fmtPopover.appendChild(fmtMenu); + + const fmtHiddenSel = document.createElement("select"); + fmtHiddenSel.style.cssText = "position:absolute;opacity:0;pointer-events:none;width:0;height:0;overflow:hidden;"; + fmtPopover.appendChild(fmtHiddenSel); + + const _FMT_OPTS = [ + { value: "off", label: "Off" }, + { value: "image",label: "Image" }, + { value: "16:9", label: "16:9" }, + { value: "1:1", label: "1:1" }, + { value: "4:3", label: "4:3" }, + { value: "9:16", label: "9:16" }, + { value: "2.39", label: "2.39" }, + ]; + const fmtItemEls = []; + const _initFmt = viewer._overlayMaskEnabled ? String(viewer._overlayFormat || "image") : "off"; + for (const opt of _FMT_OPTS) { + const optEl = document.createElement("option"); + optEl.value = opt.value; + fmtHiddenSel.appendChild(optEl); + + const item = document.createElement("button"); + item.type = "button"; + item.className = "mjr-menu-item"; + item.dataset.value = opt.value; + + const lbl = document.createElement("span"); + lbl.className = "mjr-menu-item-label"; + lbl.textContent = opt.label; + + const chk = document.createElement("i"); + chk.className = "pi pi-check mjr-menu-item-check"; + chk.style.opacity = opt.value === _initFmt ? "1" : "0"; + + item.appendChild(lbl); + item.appendChild(chk); + fmtMenu.appendChild(item); + fmtItemEls.push(item); + if (opt.value === _initFmt) item.classList.add("is-active"); + } + fmtHiddenSel.value = _initFmt; + + // Separator + opacity slider row + const fmtSep = document.createElement("div"); + fmtSep.className = "mjr-mfv-format-sep"; + fmtPopover.appendChild(fmtSep); + + const fmtSliderRow = document.createElement("div"); + fmtSliderRow.className = "mjr-mfv-format-slider-row"; + fmtPopover.appendChild(fmtSliderRow); + + const fmtSliderLabel = document.createElement("span"); + fmtSliderLabel.className = "mjr-mfv-format-slider-label"; + fmtSliderLabel.textContent = "Opacity"; + fmtSliderRow.appendChild(fmtSliderLabel); + + viewer._maskOpacityCtl = createMiniRange("Mask opacity", { + min: 0, + max: 0.9, + step: 0.01, + value: Number(viewer._overlayMaskOpacity ?? 0.65), + }); + fmtSliderRow.appendChild(viewer._maskOpacityCtl.input); + fmtSliderRow.appendChild(viewer._maskOpacityCtl.out); + + viewer._formatSelect = fmtHiddenSel; + viewer._formatPopover = fmtPopover; + + const _openFmtPopover = () => { + const btnRect = viewer._formatToggle.getBoundingClientRect(); + const parentRect = viewer.element.getBoundingClientRect(); + fmtPopover.style.left = `${btnRect.left - parentRect.left}px`; + fmtPopover.style.top = `${btnRect.bottom - parentRect.top + 4}px`; + fmtPopover.classList.add("is-open"); + viewer._formatToggle.setAttribute("aria-expanded", "true"); + }; + viewer._closeFormatPopover = () => { + fmtPopover.classList.remove("is-open"); + viewer._formatToggle.setAttribute("aria-expanded", "false"); + }; + viewer._formatToggle.addEventListener("click", (e) => { + e.stopPropagation(); + if (fmtPopover.classList.contains("is-open")) { + viewer._closeFormatPopover(); + } else { + viewer._closeAllToolbarPopovers?.(); + _openFmtPopover(); + } + }); + fmtMenu.addEventListener("click", (e) => { + const item = e.target.closest(".mjr-menu-item"); + if (!item) return; + const val = item.dataset.value; + fmtHiddenSel.value = val; + fmtHiddenSel.dispatchEvent(new Event("change", { bubbles: true })); + fmtItemEls.forEach(it => { + const active = it.dataset.value === val; + it.classList.toggle("is-active", active); + it.querySelector(".mjr-menu-item-check").style.opacity = active ? "1" : "0"; + }); + viewer._closeFormatPopover(); + }); const sep = document.createElement("div"); sep.className = "mjr-mfv-toolbar-sep"; @@ -229,11 +782,42 @@ export function buildFloatingViewerToolbar(viewer) { bar.appendChild(viewer._runHandle.el); viewer._handleDocClick = (ev) => { - if (!viewer._genDropdown) return; const target = ev?.target; - if (viewer._genBtn?.contains?.(target)) return; - if (viewer._genDropdown.contains(target)) return; - viewer._closeGenDropdown(); + // Gen dropdown + if (viewer._genDropdown) { + if (!viewer._genBtn?.contains?.(target) && !viewer._genDropdown.contains(target)) { + viewer._closeGenDropdown(); + } + } + // Channel popover + if (viewer._chPopover?.classList?.contains("is-open")) { + if (!viewer._chBtn?.contains?.(target) && !viewer._chPopover.contains(target)) { + viewer._closeChPopover?.(); + } + } + // Guides popover + if (viewer._guidePopover?.classList?.contains("is-open")) { + if (!viewer._guideBtn?.contains?.(target) && !viewer._guidePopover.contains(target)) { + viewer._closeGuidePopover?.(); + } + } + // Pin popover + if (viewer._pinPopover?.classList?.contains("is-open")) { + if (!viewer._pinBtn?.contains?.(target) && !viewer._pinPopover.contains(target)) { + viewer._closePinPopover?.(); + } + } + // Format popover + if (viewer._formatPopover?.classList?.contains("is-open")) { + if (!viewer._formatToggle?.contains?.(target) && !viewer._formatPopover.contains(target)) { + viewer._closeFormatPopover?.(); + } + } + // Icon dropdowns: close if click is outside any .mjr-mfv-idrop + if (!target?.closest?.(".mjr-mfv-idrop")) { + viewer.element?.querySelectorAll?.(".mjr-mfv-idrop-menu.is-open") + .forEach(m => m.classList.remove("is-open")); + } }; viewer._bindDocumentUiHandlers(); @@ -312,6 +896,7 @@ export function rebindFloatingViewerControlHandlers(viewer) { if (viewer._genDropdown?.classList?.contains("is-visible")) { viewer._closeGenDropdown(); } else { + viewer._closeAllToolbarPopovers?.(); viewer._openGenDropdown(); } }, @@ -336,6 +921,79 @@ export function rebindFloatingViewerControlHandlers(viewer) { }, { signal }, ); + + viewer._guidesSelect?.addEventListener( + "change", + () => { + viewer._gridMode = Number(viewer._guidesSelect.value) || 0; + viewer._guideBtn?.classList.toggle("is-on", viewer._gridMode !== 0); + viewer._redrawOverlayGuides?.(); + }, + { signal }, + ); + + viewer._channelSelect?.addEventListener( + "change", + () => { + viewer._channel = String(viewer._channelSelect.value || "rgb"); + viewer._chBtn?.classList.toggle("is-on", viewer._channel !== "rgb"); + viewer._applyMediaToneControls?.(); + }, + { signal }, + ); + + viewer._exposureCtl?.input?.addEventListener( + "input", + () => { + const v = Math.max(-10, Math.min(10, Number(viewer._exposureCtl.input.value) || 0)); + viewer._exposureEV = Math.round(v * 10) / 10; + viewer._exposureCtl.out.textContent = `${viewer._exposureEV.toFixed(1)}EV`; + viewer._exposureCtl.wrap.classList.toggle("is-active", viewer._exposureEV !== 0); + viewer._applyMediaToneControls?.(); + }, + { signal }, + ); + + viewer._exposureCtl?.out?.addEventListener( + "click", + () => { + viewer._exposureEV = 0; + viewer._exposureCtl.input.value = "0"; + viewer._exposureCtl.out.textContent = "0.0EV"; + viewer._exposureCtl.wrap.classList.remove("is-active"); + viewer._applyMediaToneControls?.(); + }, + { signal }, + ); + + viewer._formatSelect?.addEventListener( + "change", + () => { + const val = String(viewer._formatSelect.value || "image"); + if (val === "off") { + viewer._overlayMaskEnabled = false; + } else { + viewer._overlayMaskEnabled = true; + viewer._overlayFormat = val; + } + viewer._formatToggle?.classList.toggle("is-on", Boolean(viewer._overlayMaskEnabled)); + viewer._formatToggle?.setAttribute("aria-pressed", String(Boolean(viewer._overlayMaskEnabled))); + viewer._redrawOverlayGuides?.(); + }, + { signal }, + ); + + viewer._maskOpacityCtl?.input?.addEventListener( + "input", + () => { + const v = Number(viewer._maskOpacityCtl.input.value); + const clamped = Math.max(0, Math.min(0.9, Number.isFinite(v) ? v : 0.65)); + viewer._overlayMaskOpacity = Math.round(clamped * 100) / 100; + viewer._maskOpacityCtl.out.textContent = viewer._overlayMaskOpacity.toFixed(2); + viewer._redrawOverlayGuides?.(); + }, + { signal }, + ); } export function updateFloatingViewerSettingsBtnState(viewer, active) { diff --git a/js/features/viewer/workflowSidebar/NodeWidgetRenderer.js b/js/features/viewer/workflowSidebar/NodeWidgetRenderer.js index 5671e13f..81c42246 100644 --- a/js/features/viewer/workflowSidebar/NodeWidgetRenderer.js +++ b/js/features/viewer/workflowSidebar/NodeWidgetRenderer.js @@ -1,25 +1,77 @@ /** - * NodeWidgetRenderer — renders a single ComfyUI LGraphNode's widgets + * NodeWidgetRenderer renders a single ComfyUI LGraphNode's widgets * as an editable HTML section. */ import { getComfyApp } from "../../../app/comfyApiBridge.js"; import { createWidgetInput } from "./widgetAdapters.js"; -/** Widget types we skip (too complex for a quick-edit sidebar). */ const SKIP_TYPES = new Set(["imageupload", "button", "hidden"]); +// Note nodes store their text in node.properties instead of widgets. +const NOTE_TYPE_RE = /\bnote\b|markdown/i; + +function _isNoteNode(node) { + return NOTE_TYPE_RE.test(String(node?.type || "")); +} + +function _getNoteText(node) { + const props = node?.properties ?? {}; + if (typeof props.text === "string") return props.text; + if (typeof props.value === "string") return props.value; + if (typeof props.markdown === "string") return props.markdown; + const w0 = node?.widgets?.[0]; + if (w0 != null && w0.value != null) return String(w0.value); + return ""; +} + +function _setNoteText(node, value) { + const props = node?.properties; + if (props) { + if ("text" in props) props.text = value; + else if ("value" in props) props.value = value; + else if ("markdown" in props) props.markdown = value; + else props.text = value; + } + const w0 = node?.widgets?.[0]; + if (w0) w0.value = value; +} + +// UUID or long hex hash — not a human-readable type name. +const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; +const HEX_HASH_RE = /^[0-9a-f]{20,}$/i; + +function _getNodeDisplayType(node) { + const type = String(node?.type || ""); + if (UUID_RE.test(type) || HEX_HASH_RE.test(type)) { + return String(node?.title || "Subgraph").trim() || "Subgraph"; + } + return type || `Node #${node?.id}`; +} + export class NodeWidgetRenderer { /** - * @param {object} node LGraphNode instance + * @param {object} node * @param {object} [opts] - * @param {() => void} [opts.onLocate] Custom locate handler (optional) + * @param {() => void} [opts.onLocate] + * @param {boolean} [opts.collapsible] + * @param {boolean} [opts.expanded] + * @param {(expanded: boolean) => void} [opts.onToggle] + * @param {number} [opts.depth] — 0 = top-level, >0 = inside a subgraph */ constructor(node, opts = {}) { this._node = node; this._onLocate = opts.onLocate ?? null; + this._onToggle = typeof opts.onToggle === "function" ? opts.onToggle : null; + this._collapsible = Boolean(opts.collapsible); + this._expanded = opts.expanded !== false; + this._depth = opts.depth ?? 0; this._el = null; - this._inputMap = new Map(); // widgetName → inputEl + this._body = null; + this._toggleBtn = null; + this._inputMap = new Map(); + this._autoFits = []; + this._noteTextarea = null; } get el() { @@ -27,77 +79,174 @@ export class NodeWidgetRenderer { return this._el; } - /** Re-read widget values from the live graph and update inputs. */ syncFromGraph() { + // Note nodes: sync from node.properties.text instead of widgets + if (this._noteTextarea) { + const doc = this._el?.ownerDocument || document; + if (doc?.activeElement !== this._noteTextarea) { + const text = _getNoteText(this._node); + if (this._noteTextarea.value !== text) { + this._noteTextarea.value = text; + this._noteTextarea._mjrAutoFit?.(); + } + } + return; + } if (!this._node?.widgets) return; const doc = this._el?.ownerDocument || document; const activeEl = doc?.activeElement || null; for (const w of this._node.widgets) { const storedInput = this._inputMap.get(w.name); - let input = _resolveSyncInput(storedInput); + const input = _resolveSyncInput(storedInput); if (!input) continue; if (input.type === "checkbox") { const nextChecked = Boolean(w.value); - if (input.checked !== nextChecked) { - input.checked = nextChecked; - } - } else { - const nextValue = w.value != null ? String(w.value) : ""; - if (String(input.value ?? "") === nextValue) continue; - if (activeEl && input === activeEl) continue; - input.value = nextValue; - storedInput?._mjrAutoFit?.(); - input?._mjrAutoFit?.(); + if (input.checked !== nextChecked) input.checked = nextChecked; + continue; } + const nextValue = w.value != null ? String(w.value) : ""; + if (String(input.value ?? "") === nextValue) continue; + if (activeEl && input === activeEl) continue; + input.value = nextValue; + storedInput?._mjrAutoFit?.(); + input?._mjrAutoFit?.(); } } dispose() { this._el?.remove(); this._el = null; + this._autoFits = []; this._inputMap.clear(); } - // ── Private ─────────────────────────────────────────────────────────────── + setExpanded(expanded) { + this._expanded = Boolean(expanded); + this._applyExpandedState(); + // Trigger textarea autofit now that the body is visible + if (this._expanded && this._autoFits?.length) { + requestAnimationFrame(() => { + for (const fn of this._autoFits) fn(); + }); + } + this._onToggle?.(this._expanded); + } _render() { const node = this._node; const section = document.createElement("section"); section.className = "mjr-ws-node"; section.dataset.nodeId = String(node.id ?? ""); + if (this._depth > 0) { + section.dataset.depth = String(this._depth); + section.classList.add("mjr-ws-node--nested"); + } - // Header const header = document.createElement("div"); header.className = "mjr-ws-node-header"; - const title = document.createElement("span"); - title.className = "mjr-ws-node-title"; - title.textContent = node.title || node.type || `Node #${node.id}`; - header.appendChild(title); + if (this._collapsible) { + this._header = header; + const toggleBtn = document.createElement("button"); + toggleBtn.type = "button"; + toggleBtn.className = "mjr-icon-btn mjr-ws-node-toggle"; + toggleBtn.title = this._expanded ? "Collapse node" : "Expand node"; + toggleBtn.addEventListener("click", (event) => { + event.stopPropagation(); + this.setExpanded(!this._expanded); + }); + header.appendChild(toggleBtn); + this._toggleBtn = toggleBtn; + header.addEventListener("click", (event) => { + if (event.target.closest("button")) return; + this.setExpanded(!this._expanded); + }); + header.title = this._expanded ? "Collapse node" : "Expand node"; + } + + const titleWrap = document.createElement("div"); + titleWrap.className = "mjr-ws-node-title-wrap"; + + const typeText = document.createElement("span"); + typeText.className = "mjr-ws-node-type"; + typeText.textContent = _getNodeDisplayType(node); + titleWrap.appendChild(typeText); + + const customTitle = String(node.title || "").trim(); + if (customTitle && customTitle !== node.type) { + const title = document.createElement("span"); + title.className = "mjr-ws-node-title"; + title.textContent = customTitle; + titleWrap.appendChild(title); + } + + header.appendChild(titleWrap); const locateBtn = document.createElement("button"); locateBtn.type = "button"; locateBtn.className = "mjr-icon-btn mjr-ws-locate"; locateBtn.title = "Locate on canvas"; - const locIcon = document.createElement("i"); - locIcon.className = "pi pi-map-marker"; - locIcon.setAttribute("aria-hidden", "true"); - locateBtn.appendChild(locIcon); - locateBtn.addEventListener("click", () => this._locateNode()); + locateBtn.innerHTML = ''; + locateBtn.addEventListener("click", (event) => { + event.stopPropagation(); + this._locateNode(); + }); header.appendChild(locateBtn); section.appendChild(header); - // Widgets const body = document.createElement("div"); body.className = "mjr-ws-node-body"; + // Note nodes store text in node.properties.text — widgets array is empty. + if (_isNoteNode(node)) { + const textarea = document.createElement("textarea"); + textarea.className = "mjr-ws-input mjr-ws-textarea mjr-ws-note-textarea"; + textarea.value = _getNoteText(node); + textarea.rows = 4; + const autoFit = () => { + textarea.style.height = "auto"; + textarea.style.height = textarea.scrollHeight + "px"; + }; + textarea.addEventListener("input", () => { + _setNoteText(node, textarea.value); + // Sync ComfyUI's own DOM element for this widget if it exists. + const w0 = node?.widgets?.[0]; + const domEl = w0?.inputEl ?? w0?.element ?? w0?.el ?? null; + if (domEl != null && "value" in domEl && domEl.value !== textarea.value) { + domEl.value = textarea.value; + } + autoFit(); + try { + const app = getComfyApp(); + const canvas = app?.canvas ?? null; + canvas?.setDirty?.(true, true); + canvas?.draw?.(true, true); + const nodeGraph = node?.graph ?? null; + if (nodeGraph && nodeGraph !== app?.graph) { + nodeGraph.setDirtyCanvas?.(true, true); + nodeGraph.change?.(); + } + app?.graph?.change?.(); + } catch (_) {} + }); + textarea._mjrAutoFit = autoFit; + this._noteTextarea = textarea; + this._autoFits.push(autoFit); + body.appendChild(textarea); + this._body = body; + section.appendChild(body); + this._el = section; + this._applyExpandedState(); + requestAnimationFrame(autoFit); + return section; + } + const widgets = node.widgets ?? []; let hasVisibleWidget = false; for (const w of widgets) { const wType = String(w.type || "").toLowerCase(); if (SKIP_TYPES.has(wType)) continue; - // Skip hidden widgets (ComfyUI uses w.hidden or w.options.hidden) if (w.hidden || w.options?.hidden) continue; hasVisibleWidget = true; @@ -113,11 +262,12 @@ export class NodeWidgetRenderer { const inputWrap = document.createElement("div"); inputWrap.className = "mjr-ws-widget-input"; - const inputEl = createWidgetInput(w, () => { - /* value already written by adapter */ - }); + const inputEl = createWidgetInput(w, () => {}, node); inputWrap.appendChild(inputEl); this._inputMap.set(w.name, inputEl); + // Collect autoFit functions from text wrappers so we can re-run them on expand + const autoFit = inputEl._mjrAutoFit ?? inputEl.querySelector?.("textarea")?._mjrAutoFit; + if (autoFit) this._autoFits.push(autoFit); row.appendChild(label); row.appendChild(inputWrap); @@ -131,10 +281,29 @@ export class NodeWidgetRenderer { body.appendChild(empty); } + this._body = body; section.appendChild(body); + // Assign _el before calling _applyExpandedState so its guard passes. + this._el = section; + this._applyExpandedState(); return section; } + _applyExpandedState() { + if (!this._el || !this._body) return; + this._el.classList.toggle("is-collapsible", this._collapsible); + this._el.classList.toggle("is-collapsed", this._collapsible && !this._expanded); + if (this._toggleBtn) { + const iconClass = this._expanded ? "pi pi-chevron-down" : "pi pi-chevron-right"; + this._toggleBtn.innerHTML = ``; + this._toggleBtn.title = this._expanded ? "Collapse node" : "Expand node"; + this._toggleBtn.setAttribute("aria-expanded", String(this._expanded)); + } + if (this._header) { + this._header.title = this._expanded ? "Collapse node" : "Expand node"; + } + } + _locateNode() { if (this._onLocate) { this._onLocate(); diff --git a/js/features/viewer/workflowSidebar/WorkflowNodesTab.js b/js/features/viewer/workflowSidebar/WorkflowNodesTab.js new file mode 100644 index 00000000..30fdecbf --- /dev/null +++ b/js/features/viewer/workflowSidebar/WorkflowNodesTab.js @@ -0,0 +1,321 @@ +/** + * WorkflowNodesTab lists all workflow nodes and exposes each node's parameters + * inline through a collapsible section. + * + * Subgraph container nodes show an extra toggle to expand/collapse their inner + * nodes as a nested group below the container. + * + * The node list DOM is only rebuilt when the set of nodes actually changes — + * value sync runs every frame without touching the DOM structure. + */ + +import { getComfyApp } from "../../../app/comfyApiBridge.js"; +import { NodeWidgetRenderer } from "./NodeWidgetRenderer.js"; + +export class WorkflowNodesTab { + constructor() { + this._searchQuery = ""; + /** Which node widget panels are open (at most one at a time). */ + this._expandedNodeIds = new Set(); + /** Which subgraph container nodes have their children list open. */ + this._expandedChildrenIds = new Set(); + /** Flat list of every NodeWidgetRenderer currently in the DOM. */ + this._renderers = []; + this._el = this._build(); + this._lastNodeSig = ""; + this._lastSelectedId = ""; + } + + get el() { return this._el; } + + refresh() { + this._maybeRebuildList(); + for (const renderer of this._renderers) renderer.syncFromGraph(); + } + + forceRebuild() { + this._lastNodeSig = ""; + this._maybeRebuildList(); + } + + dispose() { + for (const renderer of this._renderers) renderer.dispose(); + this._renderers = []; + this._el?.remove?.(); + } + + _build() { + const wrap = document.createElement("div"); + wrap.className = "mjr-ws-nodes-tab"; + + const searchWrap = document.createElement("div"); + searchWrap.className = "mjr-ws-search-wrap"; + + const searchIcon = document.createElement("i"); + searchIcon.className = "pi pi-search mjr-ws-search-icon"; + searchIcon.setAttribute("aria-hidden", "true"); + searchWrap.appendChild(searchIcon); + + this._searchInput = document.createElement("input"); + this._searchInput.type = "text"; + this._searchInput.className = "mjr-ws-search"; + this._searchInput.placeholder = "Search nodes..."; + this._searchInput.addEventListener("input", () => { + this._searchQuery = this._searchInput.value; + this.forceRebuild(); + }); + searchWrap.appendChild(this._searchInput); + + const clearBtn = document.createElement("button"); + clearBtn.type = "button"; + clearBtn.className = "mjr-ws-search-clear"; + clearBtn.title = "Clear search"; + clearBtn.innerHTML = ''; + clearBtn.addEventListener("click", () => { + this._searchInput.value = ""; + this._searchQuery = ""; + this.forceRebuild(); + }); + searchWrap.appendChild(clearBtn); + + wrap.appendChild(searchWrap); + + this._list = document.createElement("div"); + this._list.className = "mjr-ws-nodes-list"; + wrap.appendChild(this._list); + + return wrap; + } + + _syncCanvasSelection() { + const selectedIds = _getSelectedNodeIds(); + const selectedId = selectedIds[0] || ""; + if (!selectedId || selectedId === this._lastSelectedId) return; + this._lastSelectedId = selectedId; + for (const renderer of this._renderers) { + if (String(renderer._node?.id ?? "") === selectedId && !renderer._expanded) { + renderer.setExpanded(true); + break; + } + } + } + + _maybeRebuildList() { + const graph = _getGraph(); + const tree = graph ? _buildNodeTree(graph) : []; + const q = (this._searchQuery || "").toLowerCase().trim(); + const filtered = q ? _filterTree(tree, q) : tree; + const sig = _treeSignature(filtered); + + this._syncCanvasSelection(); + + if (sig === this._lastNodeSig) return; + this._lastNodeSig = sig; + + for (const renderer of this._renderers) renderer.dispose(); + this._renderers = []; + this._list.innerHTML = ""; + + if (!filtered.length) { + const empty = document.createElement("div"); + empty.className = "mjr-ws-sidebar-empty"; + empty.textContent = tree.length ? "No nodes match your search" : "No nodes in workflow"; + this._list.appendChild(empty); + return; + } + + this._renderItems(filtered, this._list, 0); + } + + /** + * Recursively render tree items into a container. + * @param {{node: object, children: object[]}[]} items + * @param {HTMLElement} container + * @param {number} depth + */ + _renderItems(items, container, depth) { + for (const { node, children } of items) { + const nodeId = String(node?.id ?? ""); + + const renderer = new NodeWidgetRenderer(node, { + collapsible: true, + expanded: this._expandedNodeIds.has(nodeId), + depth, + onLocate: () => _focusNode(node), + onToggle: (expanded) => { + if (expanded) { + this._expandedNodeIds = new Set([nodeId]); + for (const r of this._renderers) { + if (r !== renderer) r.setExpanded(false); + } + } else { + this._expandedNodeIds.delete(nodeId); + } + }, + }); + this._renderers.push(renderer); + container.appendChild(renderer.el); + + if (children.length > 0) { + const isOpen = this._expandedChildrenIds.has(nodeId); + + const toggleBtn = document.createElement("button"); + toggleBtn.type = "button"; + toggleBtn.className = "mjr-ws-children-toggle"; + if (depth > 0) toggleBtn.classList.add("mjr-ws-children-toggle--nested"); + _setChildrenToggleLabel(toggleBtn, children.length, isOpen); + + const childrenEl = document.createElement("div"); + childrenEl.className = "mjr-ws-children"; + childrenEl.hidden = !isOpen; + + this._renderItems(children, childrenEl, depth + 1); + + toggleBtn.addEventListener("click", () => { + const nowOpen = childrenEl.hidden; + childrenEl.hidden = !nowOpen; + if (nowOpen) this._expandedChildrenIds.add(nodeId); + else this._expandedChildrenIds.delete(nodeId); + _setChildrenToggleLabel(toggleBtn, children.length, nowOpen); + }); + + container.appendChild(toggleBtn); + container.appendChild(childrenEl); + } + } + } +} + +// ── Helpers ─────────────────────────────────────────────────────────────────── + +function _getGraph() { + try { + const app = getComfyApp(); + return app?.graph ?? app?.canvas?.graph ?? null; + } catch { return null; } +} + +function _getSubgraphsFromNode(node) { + const candidates = [ + node?.subgraph, + node?._subgraph, + node?.subgraph?.graph, + node?.subgraph?.lgraph, + node?.properties?.subgraph, + node?.subgraph_instance, + node?.subgraph_instance?.graph, + node?.inner_graph, + node?.subgraph_graph, + ].filter((g) => g && typeof g === "object" && Array.isArray(g.nodes)); + + // Some GROUP-style nodes expose inner nodes directly as node.nodes + // (a different array from the parent graph's nodes). + if ( + Array.isArray(node?.nodes) && + node.nodes.length > 0 && + node.nodes !== node?.graph?.nodes + ) { + candidates.push({ nodes: node.nodes }); + } + + return candidates; +} + +/** + * Build a recursive tree: [{node, children}] from a LiteGraph graph object. + */ +function _buildNodeTree(graph, visited = new Set()) { + if (!graph || visited.has(graph)) return []; + visited.add(graph); + const nodes = Array.isArray(graph.nodes) ? graph.nodes : []; + const result = []; + for (const node of nodes) { + if (!node) continue; + const subgraphs = _getSubgraphsFromNode(node); + const children = subgraphs.flatMap((sg) => _buildNodeTree(sg, visited)); + result.push({ node, children }); + } + return result; +} + +/** + * Recursively filter tree items. A container is kept if it matches OR any child matches. + */ +function _filterTree(items, q) { + const result = []; + for (const { node, children } of items) { + const nodeMatches = + (node.type || "").toLowerCase().includes(q) || + (node.title || "").toLowerCase().includes(q); + const filteredChildren = _filterTree(children, q); + if (nodeMatches || filteredChildren.length > 0) { + result.push({ node, children: filteredChildren }); + } + } + return result; +} + +/** Depth-first signature of all node IDs — encodes both set and tree order. */ +function _treeSignature(items) { + const ids = []; + function collect(arr) { + for (const { node, children } of arr) { + ids.push(node.id); + collect(children); + } + } + collect(items); + return ids.join(","); +} + +function _setChildrenToggleLabel(btn, count, isOpen) { + const icon = isOpen ? "pi-chevron-down" : "pi-chevron-right"; + btn.innerHTML = `${count} inner node${count !== 1 ? "s" : ""}`; + btn.setAttribute("aria-expanded", String(isOpen)); +} + +function _focusNode(node) { + try { + const app = getComfyApp(); + const canvas = app?.canvas; + if (!canvas) return; + + canvas.selectNode?.(node, false); + + if (typeof canvas.centerOnNode === "function") { + canvas.centerOnNode(node); + } else if (node.pos && canvas.ds) { + const canvasEl = canvas.canvas; + const w = canvasEl?.width ?? 800; + const h = canvasEl?.height ?? 600; + const scale = canvas.ds.scale ?? 1; + canvas.ds.offset = [ + -node.pos[0] + w / (2 * scale) - ((node.size?.[0] ?? 100) / 2), + -node.pos[1] + h / (2 * scale) - ((node.size?.[1] ?? 80) / 2), + ]; + canvas.setDirty?.(true, true); + } + + canvas.canvas?.focus?.(); + } catch (e) { + console.debug?.("[MFV] _focusNode", e); + } +} + +function _getSelectedNodeIds() { + try { + const app = getComfyApp(); + const selected = app?.canvas?.selected_nodes ?? app?.canvas?.selectedNodes ?? null; + if (!selected) return []; + if (Array.isArray(selected)) return selected.map((node) => String(node?.id ?? "")).filter(Boolean); + if (selected instanceof Map) { + return Array.from(selected.values()).map((node) => String(node?.id ?? "")).filter(Boolean); + } + if (typeof selected === "object") { + return Object.values(selected).map((node) => String(node?.id ?? "")).filter(Boolean); + } + } catch (e) { + console.debug?.("[MFV] _getSelectedNodeIds", e); + } + return []; +} diff --git a/js/features/viewer/workflowSidebar/WorkflowSidebar.js b/js/features/viewer/workflowSidebar/WorkflowSidebar.js index 33edd593..c13288bc 100644 --- a/js/features/viewer/workflowSidebar/WorkflowSidebar.js +++ b/js/features/viewer/workflowSidebar/WorkflowSidebar.js @@ -1,31 +1,23 @@ /** - * WorkflowSidebar — slide-in panel for the Floating Viewer (MFV). + * WorkflowSidebar is the slide-in panel for the Floating Viewer. * - * Shows editable widgets for the currently selected ComfyUI nodes. - * Reads from `app.canvas.selected_nodes` via comfyApiBridge. - * Writes back via widgetAdapters (widget.value + callback). + * It now exposes a single unified "Nodes" view: each workflow node can be + * expanded inline to reveal editable parameters. */ -import { getComfyApp } from "../../../app/comfyApiBridge.js"; -import { NodeWidgetRenderer } from "./NodeWidgetRenderer.js"; +import { WorkflowNodesTab } from "./WorkflowNodesTab.js"; const LIVE_SYNC_FALLBACK_MS = 16; export class WorkflowSidebar { - /** - * @param {object} opts - * @param {HTMLElement} opts.hostEl The MFV root element to append to - * @param {() => void} [opts.onClose] - */ constructor({ hostEl, onClose } = {}) { this._hostEl = hostEl; this._onClose = onClose ?? null; - /** @type {NodeWidgetRenderer[]} */ - this._renderers = []; this._visible = false; - this._selectionKey = ""; this._liveSyncHandle = null; this._liveSyncMode = ""; + this._resizeCleanup = null; + this._nodesTab = new WorkflowNodesTab(); this._el = this._build(); } @@ -35,7 +27,7 @@ export class WorkflowSidebar { show() { this._visible = true; this._el.classList.add("open"); - this.refresh({ force: true }); + this._nodesTab.refresh(); this._startLiveSync(); } @@ -54,98 +46,63 @@ export class WorkflowSidebar { } } - /** Re-read selected nodes and rebuild widget sections. */ - refresh({ force = false } = {}) { + refresh() { if (!this._visible) return; - const { key, nodes } = _getSelectedNodeSnapshot(); - if (!force && key === this._selectionKey && this._renderers.length === nodes.length) { - this.syncFromGraph({ allowSelectionRefresh: false }); - return; - } - - this._clear(); - this._selectionKey = key; - if (!nodes.length) { - this._showEmpty(); - return; - } - for (const node of nodes) { - const renderer = new NodeWidgetRenderer(node); - this._renderers.push(renderer); - this._body.appendChild(renderer.el); - } - this.syncFromGraph({ allowSelectionRefresh: false }); + this._nodesTab.refresh(); } - /** Sync existing renderers from graph values without full rebuild. */ - syncFromGraph({ allowSelectionRefresh = true } = {}) { + syncFromGraph() { if (!this._visible) return; - const { key } = _getSelectedNodeSnapshot(); - if (allowSelectionRefresh && key !== this._selectionKey) { - this.refresh({ force: true }); - return; - } - for (const r of this._renderers) r.syncFromGraph(); + this._nodesTab.refresh(); } dispose() { this._stopLiveSync(); - this._clear(); + this._disposeResize(); + this._nodesTab?.dispose?.(); + this._nodesTab = null; this._el?.remove(); } - // ── Private ─────────────────────────────────────────────────────────────── - _build() { const panel = document.createElement("div"); panel.className = "mjr-ws-sidebar"; - // Header const header = document.createElement("div"); header.className = "mjr-ws-sidebar-header"; const title = document.createElement("span"); title.className = "mjr-ws-sidebar-title"; - title.textContent = "Node Parameters"; + title.textContent = "Nodes"; header.appendChild(title); const closeBtn = document.createElement("button"); closeBtn.type = "button"; closeBtn.className = "mjr-icon-btn"; closeBtn.title = "Close sidebar"; - const closeIcon = document.createElement("i"); - closeIcon.className = "pi pi-times"; - closeIcon.setAttribute("aria-hidden", "true"); - closeBtn.appendChild(closeIcon); + closeBtn.innerHTML = ''; closeBtn.addEventListener("click", () => { this.hide(); this._onClose?.(); }); header.appendChild(closeBtn); - panel.appendChild(header); - // Scrollable body - this._body = document.createElement("div"); - this._body.className = "mjr-ws-sidebar-body"; + const resizer = document.createElement("div"); + resizer.className = "mjr-ws-sidebar-resizer"; + resizer.setAttribute("role", "separator"); + resizer.setAttribute("aria-orientation", "vertical"); + resizer.setAttribute("aria-hidden", "true"); + panel.appendChild(resizer); + this._bindResize(resizer); + + this._body = this._nodesTab.el; + this._body.classList.add("mjr-ws-sidebar-body"); panel.appendChild(this._body); return panel; } - _clear() { - for (const r of this._renderers) r.dispose(); - this._renderers = []; - if (this._body) this._body.innerHTML = ""; - } - - _showEmpty() { - const empty = document.createElement("div"); - empty.className = "mjr-ws-sidebar-empty"; - empty.textContent = "Select nodes on the canvas to edit their parameters"; - this._body.appendChild(empty); - } - _startLiveSync() { if (this._liveSyncHandle != null) return; const frameHost = _getFrameHost(this._el); @@ -182,38 +139,67 @@ export class WorkflowSidebar { this._liveSyncHandle = null; this._liveSyncMode = ""; } -} -// ── Helpers ─────────────────────────────────────────────────────────────────── + _bindResize(handle) { + if (!handle) return; + const doc = handle.ownerDocument || document; + const win = doc.defaultView || window; + const MIN_WIDTH = 180; -/** - * Read the currently selected nodes from the ComfyUI canvas. - * Supports multiple ComfyUI versions (object, Map, Array). - */ -function _getSelectedNodes() { - try { - const app = getComfyApp(); - const selected = - app?.canvas?.selected_nodes ?? - app?.canvas?.selectedNodes ?? - null; - if (!selected) return []; - if (Array.isArray(selected)) return selected.filter(Boolean); - if (selected instanceof Map) return Array.from(selected.values()).filter(Boolean); - if (typeof selected === "object") return Object.values(selected).filter(Boolean); - } catch (e) { - console.debug?.("[MFV sidebar] _getSelectedNodes error", e); + const onPointerDown = (event) => { + if (event.button !== 0 || !this._el?.classList.contains("open")) return; + const wrapper = this._el.parentElement; + if (!wrapper) return; + const sidebarRect = this._el.getBoundingClientRect(); + const wrapperRect = wrapper.getBoundingClientRect(); + const sidebarPos = wrapper.getAttribute("data-sidebar-pos") || "right"; + const maxWidth = Math.max( + MIN_WIDTH, + Math.floor(wrapperRect.width * (sidebarPos === "bottom" ? 1 : 0.65)), + ); + if (sidebarPos === "bottom") return; + + event.preventDefault(); + event.stopPropagation(); + handle.classList.add("is-dragging"); + this._el.classList.add("is-resizing"); + + const startX = event.clientX; + const startWidth = sidebarRect.width; + + const onPointerMove = (moveEvent) => { + const deltaX = moveEvent.clientX - startX; + const nextWidth = + sidebarPos === "left" ? startWidth - deltaX : startWidth + deltaX; + const clampedWidth = Math.max(MIN_WIDTH, Math.min(maxWidth, nextWidth)); + this._el.style.width = `${Math.round(clampedWidth)}px`; + }; + + const stopResize = () => { + handle.classList.remove("is-dragging"); + this._el.classList.remove("is-resizing"); + win.removeEventListener("pointermove", onPointerMove); + win.removeEventListener("pointerup", stopResize); + win.removeEventListener("pointercancel", stopResize); + }; + + win.addEventListener("pointermove", onPointerMove); + win.addEventListener("pointerup", stopResize); + win.addEventListener("pointercancel", stopResize); + }; + + handle.addEventListener("pointerdown", onPointerDown); + this._resizeCleanup = () => handle.removeEventListener("pointerdown", onPointerDown); } - return []; -} -function _getSelectedNodeSnapshot() { - const nodes = _getSelectedNodes(); - const key = nodes - .map((node) => String(node?.id ?? "")) - .filter(Boolean) - .join("|"); - return { key, nodes }; + _disposeResize() { + try { + this._resizeCleanup?.(); + } catch (e) { + console.debug?.(e); + } + this._resizeCleanup = null; + } } function _getFrameHost(el) { diff --git a/js/features/viewer/workflowSidebar/sidebarRunButton.js b/js/features/viewer/workflowSidebar/sidebarRunButton.js index c5df82c2..9668047b 100644 --- a/js/features/viewer/workflowSidebar/sidebarRunButton.js +++ b/js/features/viewer/workflowSidebar/sidebarRunButton.js @@ -295,6 +295,21 @@ function resolveClientId(api, app) { return ""; } +/** + * Walk all nodes in a ComfyUI graph recursively, including inner nodes of any + * subgraphs, and invoke callback(node) for each. This mirrors the graph-walk + * ComfyUI's native queuePrompt performs before/after serialising the prompt. + */ +function _walkAllNodes(graph, callback) { + for (const node of graph?.nodes ?? []) { + callback(node); + // Recurse into ComfyUI subgraph inner nodes. + if (node.subgraph?.nodes) { + _walkAllNodes(node.subgraph, callback); + } + } +} + /** * Queue the current workflow for execution. * @@ -303,31 +318,61 @@ function resolveClientId(api, app) { * current auth session, same source as the native ComfyUI Queue button). * 2. api.queuePrompt — broader detection via getComfyApi() (window.api, …). * 3. api.fetchApi — direct HTTP via ComfyUI's authenticated fetch helper. - * 4. app.queuePrompt(0) — native ComfyUI app-level path; handles auth tokens - * and CSRF checks natively; no preview-method enrichment on this path. + * 4. app.queuePrompt(0) — native ComfyUI app-level path; handles auth tokens, + * beforeQueued/afterQueued and CSRF natively; used only when no direct API + * path is available (no preview-method enrichment on this path). * 5. fetch (last resort) — raw fetch with credentials:'include' for cookie auth. + * + * Paths 1-3 and 5 manually mirror ComfyUI's beforeQueued/afterQueued widget cycle + * so that control_after_generate (randomize / increment / decrement) is applied + * correctly on every run, including inside subgraph inner nodes. */ async function queueCurrentPrompt() { const app = getComfyApp(); if (!app) throw new Error("ComfyUI app not available"); + // Resolve API references early so we can choose the path before touching + // widget state (beforeQueued must not be called twice for the same run). + const liveApi = (app?.api && typeof app.api.queuePrompt === "function") ? app.api : null; + const api = liveApi ?? getComfyApi(app); + const hasApiPath = Boolean( + (api && typeof api.queuePrompt === "function") || + (api && typeof api.fetchApi === "function"), + ); + + // Path 4: delegate entirely to app.queuePrompt which handles beforeQueued, + // graphToPrompt, afterQueued, and auth internally. Only taken when no direct + // API path is available because it cannot carry MFV preview-method enrichment. + if (!hasApiPath && typeof app.queuePrompt === "function") { + await app.queuePrompt(0); + return { tracked: true }; + } + + // Paths 1-3 and 5: mirror ComfyUI's native beforeQueued cycle. + // ComfyUI's queuePrompt walks ALL nodes (including inner subgraph nodes) and + // calls widget.beforeQueued() before serialising the graph. This is what + // triggers control_after_generate (randomize / increment / decrement) to + // update the seed widget value before graphToPrompt reads it. + const rootGraph = app.rootGraph ?? app.graph; + _walkAllNodes(rootGraph, (node) => { + for (const w of node.widgets ?? []) { + w.beforeQueued?.({ isPartialExecution: false }); + } + }); + const promptData = typeof app.graphToPrompt === "function" ? await app.graphToPrompt() : null; if (!promptData?.output) throw new Error("graphToPrompt returned empty output"); - // Prefer the live app.api reference — this matches the native Queue button's - // auth context and avoids stale cached references when ComfyUI refreshes its - // auth state (e.g. after user logs in or session is renewed). - const liveApi = (app?.api && typeof app.api.queuePrompt === "function") ? app.api : null; - const api = liveApi ?? getComfyApi(app); + let result; if (api && typeof api.queuePrompt === "function") { + // Prefer the live app.api reference — matches the native Queue button's + // auth context and avoids stale cached references after session renewal. await api.queuePrompt(0, enrichPromptDataForMfv(promptData)); - return { tracked: true }; - } - - if (api && typeof api.fetchApi === "function") { + result = { tracked: true }; + } else if (api && typeof api.fetchApi === "function") { const resp = await api.fetchApi("/prompt", { method: "POST", headers: { "Content-Type": "application/json" }, @@ -338,26 +383,30 @@ async function queueCurrentPrompt() { ), }); if (!resp?.ok) throw new Error(`POST /prompt failed (${resp?.status})`); - return { tracked: true }; + result = { tracked: true }; + } else { + const resp = await fetch("/prompt", { + method: "POST", + credentials: "include", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify( + buildPromptRequestBody(promptData, { + clientId: resolveClientId(null, app), + }), + ), + }); + if (!resp.ok) throw new Error(`POST /prompt failed (${resp.status})`); + result = { tracked: false }; } - // Native app-level path: uses ComfyUI's own auth handling (same as the - // native Queue button). No preview-method enrichment on this fallback. - if (typeof app.queuePrompt === "function") { - await app.queuePrompt(0); - return { tracked: true }; - } - - const resp = await fetch("/prompt", { - method: "POST", - credentials: "include", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify( - buildPromptRequestBody(promptData, { - clientId: resolveClientId(null, app), - }), - ), + // Mirror ComfyUI's afterQueued cycle and redraw the canvas so that widget + // displays (e.g. the new seed value) reflect the post-queue state immediately. + _walkAllNodes(rootGraph, (node) => { + for (const w of node.widgets ?? []) { + w.afterQueued?.({ isPartialExecution: false }); + } }); - if (!resp.ok) throw new Error(`POST /prompt failed (${resp.status})`); - return { tracked: false }; + app.canvas?.draw?.(true, true); + + return result; } diff --git a/js/features/viewer/workflowSidebar/widgetAdapters.js b/js/features/viewer/workflowSidebar/widgetAdapters.js index 272c1e5c..2752b83e 100644 --- a/js/features/viewer/workflowSidebar/widgetAdapters.js +++ b/js/features/viewer/workflowSidebar/widgetAdapters.js @@ -11,86 +11,159 @@ import { getComfyApp } from "../../../app/comfyApiBridge.js"; * Create an HTML input element matching a ComfyUI widget type. * @param {object} widget LGraphNode widget ({ name, type, value, options, callback }) * @param {(newValue: unknown) => void} onChange Called when the user edits the input + * @param {object|null} [node] Parent LGraphNode — passed to widget.callback for proper ComfyUI compat * @returns {HTMLElement} */ -export function createWidgetInput(widget, onChange) { +export function createWidgetInput(widget, onChange, node = null) { const type = String(widget?.type || "").toLowerCase(); switch (type) { case "number": - return _numberInput(widget, onChange); + case "int": + case "float": + return _numberInput(widget, onChange, node); case "combo": - return _comboInput(widget, onChange); + return _comboInput(widget, onChange, node); case "text": case "string": case "customtext": - return _textInput(widget, onChange); + return _textInput(widget, onChange, node); case "toggle": - return _toggleInput(widget, onChange); + case "boolean": + return _toggleInput(widget, onChange, node); default: - // Unsupported / complex widget type — show read-only value return _readonlyInput(widget); } } /** - * Write a value into a ComfyUI widget and trigger its callback. - * Returns true on success. + * Write a value into a ComfyUI widget and trigger its callback + canvas repaint. + * @param {object} widget + * @param {unknown} newValue + * @param {object|null} [node] Parent LGraphNode + * @returns {boolean} */ -export function writeWidgetValue(widget, newValue) { +export function writeWidgetValue(widget, newValue, node = null) { if (!widget) return false; const type = String(widget.type || "").toLowerCase(); - if (type === "number") { + if (type === "number" || type === "int" || type === "float") { const n = Number(newValue); if (Number.isNaN(n)) return false; const opts = widget.options ?? {}; const min = opts.min ?? -Infinity; const max = opts.max ?? Infinity; - widget.value = Math.min(max, Math.max(min, n)); - } else if (type === "toggle") { + let clamped = Math.min(max, Math.max(min, n)); + // Round integers + if (type === "int" || opts.precision === 0 || opts.round === 1) { + clamped = Math.round(clamped); + } + widget.value = clamped; + } else if (type === "toggle" || type === "boolean") { widget.value = Boolean(newValue); } else { widget.value = newValue; } - try { widget.callback?.(widget.value); } catch (e) { console.debug?.(e); } + // Sync ComfyUI's own DOM element for this widget. + // customtext/string widgets use widget.inputEl (a textarea positioned on the canvas). + // Without this, the canvas widget DOM shows the old value even though widget.value changed. + // Called AFTER the callback so it reflects the final snapped/clamped value. + try { const app = getComfyApp(); - app?.canvas?.setDirty?.(true, true); + const canvas = app?.canvas ?? null; + const resolvedNode = node ?? widget?.parent ?? null; + // Save value before callback: LiteGraph number callbacks snap widget.value to + // multiples of step2 (e.g. 1025 → 1024 for step2=16). We restore afterwards so + // the sidebar always writes the exact value the user typed/clicked. + const savedValue = widget.value; + // Call with full LiteGraph/ComfyUI signature: (value, canvas, node, event, widget) + widget.callback?.(widget.value, canvas, resolvedNode, null, widget); + // Restore exact value (bypasses step2 snapping while keeping callback side-effects). + if (type === "number" || type === "int" || type === "float") { + widget.value = savedValue; + } + _syncWidgetDomElement(widget); + canvas?.setDirty?.(true, true); + canvas?.draw?.(true, true); + // Notify the node's own graph (may be an inner subgraph graph, different from root). + const nodeGraph = resolvedNode?.graph ?? null; + if (nodeGraph && nodeGraph !== app?.graph) { + nodeGraph.setDirtyCanvas?.(true, true); + nodeGraph.change?.(); + } + // Always notify root graph (triggers ComfyUI workflow tracking). app?.graph?.setDirtyCanvas?.(true, true); - } catch (e) { console.debug?.(e); } + app?.graph?.change?.(); + } catch (e) { console.debug?.("[MFV] writeWidgetValue", e); } return true; } // ── Private builders ────────────────────────────────────────────────────────── -function _numberInput(widget, onChange) { +/** + * Push widget.value into ComfyUI's own DOM element for this widget. + * ComfyUI creates a real textarea/input DOM node for customtext/string widgets + * (widget.inputEl) and positions it on top of the canvas. Updating widget.value + * alone does not refresh that element — we must set its value directly. + */ +function _syncWidgetDomElement(widget) { + const strVal = String(widget.value ?? ""); + // ComfyUI customtext: widget.inputEl is the canvas-overlay textarea. + // For PromotedWidgetView (subgraph exposed widgets), there is no direct inputEl: + // the real DOM textarea lives on cachedDeepestByFrame.widget.inputEl. + const el = widget?.inputEl + ?? widget?.element + ?? widget?.el + ?? widget?.cachedDeepestByFrame?.widget?.inputEl + ?? widget?.cachedDeepestByFrame?.widget?.element + ?? widget?.cachedDeepestByFrame?.widget?.el + ?? null; + if (el != null && "value" in el && el.value !== strVal) { + el.value = strVal; + } +} + +function _numberInput(widget, onChange, node) { const input = document.createElement("input"); input.type = "number"; input.className = "mjr-ws-input"; input.value = widget.value ?? ""; const opts = widget.options ?? {}; + const wtype = String(widget?.type || "").toLowerCase(); + const isInt = wtype === "int" || opts.precision === 0 || opts.round === 1; + if (opts.min != null) input.min = String(opts.min); if (opts.max != null) input.max = String(opts.max); - if (opts.step != null) input.step = String(opts.step); - // Real-time: write on every keystroke (skip invalid partial states like "-" or "."). + + // Arrow step: always 1 for integers so the spinner increments by 1. + // options.step2 (the LiteGraph snap multiplier) is intentionally ignored here + // because writeWidgetValue restores widget.value after the callback, bypassing snap. + if (isInt) { + input.step = "1"; + } else { + const precision = opts.precision; + input.step = precision != null ? String(Math.pow(10, -precision)) : "any"; + } + + // Real-time: write on every keystroke / arrow click. input.addEventListener("input", () => { const raw = input.value; if (raw === "" || raw === "-" || raw === "." || raw.endsWith(".")) return; - writeWidgetValue(widget, raw); + writeWidgetValue(widget, raw, node); onChange?.(widget.value); }); - // On blur/Enter: sync display with possibly-clamped widget value. + // On blur / Enter: snap display to the clamped/rounded widget value. input.addEventListener("change", () => { - if (writeWidgetValue(widget, input.value)) { - input.value = widget.value; + if (writeWidgetValue(widget, input.value, node)) { + input.value = String(widget.value); onChange?.(widget.value); } }); return input; } -function _comboInput(widget, onChange) { +function _comboInput(widget, onChange, node) { const select = document.createElement("select"); select.className = "mjr-ws-input"; let values = widget.options?.values ?? []; @@ -107,14 +180,12 @@ function _comboInput(widget, onChange) { select.appendChild(opt); } select.addEventListener("change", () => { - if (writeWidgetValue(widget, select.value)) onChange?.(widget.value); + if (writeWidgetValue(widget, select.value, node)) onChange?.(widget.value); }); return select; } -function _textInput(widget, onChange) { - const COLLAPSED_MAX = 80; - +function _textInput(widget, onChange, node) { const wrapper = document.createElement("div"); wrapper.className = "mjr-ws-text-wrapper"; @@ -123,56 +194,30 @@ function _textInput(widget, onChange) { textarea.value = widget.value ?? ""; textarea.rows = 2; - const expandBtn = document.createElement("button"); - expandBtn.type = "button"; - expandBtn.className = "mjr-ws-expand-btn"; - expandBtn.textContent = "Expand"; - expandBtn.style.display = "none"; - - let expanded = false; - const autoFit = () => { textarea.style.height = "auto"; - const full = textarea.scrollHeight; - if (expanded) { - textarea.style.height = full + "px"; - textarea.style.maxHeight = "none"; - expandBtn.textContent = "Collapse"; - } else { - textarea.style.height = Math.min(full, COLLAPSED_MAX) + "px"; - textarea.style.maxHeight = COLLAPSED_MAX + "px"; - expandBtn.textContent = "Expand"; - } - expandBtn.style.display = full > COLLAPSED_MAX ? "" : "none"; + textarea.style.height = textarea.scrollHeight + "px"; }; textarea.addEventListener("change", () => { - if (writeWidgetValue(widget, textarea.value)) onChange?.(widget.value); + if (writeWidgetValue(widget, textarea.value, node)) onChange?.(widget.value); }); - // Real-time: write on every keystroke. textarea.addEventListener("input", () => { - writeWidgetValue(widget, textarea.value); + writeWidgetValue(widget, textarea.value, node); onChange?.(widget.value); autoFit(); }); - expandBtn.addEventListener("click", () => { - expanded = !expanded; - autoFit(); - }); - wrapper.appendChild(textarea); - wrapper.appendChild(expandBtn); wrapper._mjrAutoFit = autoFit; textarea._mjrAutoFit = autoFit; - // Initial fit after insertion requestAnimationFrame(autoFit); return wrapper; } -function _toggleInput(widget, onChange) { +function _toggleInput(widget, onChange, node) { const label = document.createElement("label"); label.className = "mjr-ws-toggle-label"; const input = document.createElement("input"); @@ -180,7 +225,7 @@ function _toggleInput(widget, onChange) { input.className = "mjr-ws-checkbox"; input.checked = Boolean(widget.value); input.addEventListener("change", () => { - if (writeWidgetValue(widget, input.checked)) onChange?.(widget.value); + if (writeWidgetValue(widget, input.checked, node)) onChange?.(widget.value); }); label.appendChild(input); return label; diff --git a/js/tests/floating_viewer_media_player_bridge.vitest.mjs b/js/tests/floating_viewer_media_player_bridge.vitest.mjs new file mode 100644 index 00000000..c64e0645 --- /dev/null +++ b/js/tests/floating_viewer_media_player_bridge.vitest.mjs @@ -0,0 +1,84 @@ +// @vitest-environment happy-dom + +import { beforeEach, describe, expect, it, vi } from "vitest"; + +const mountUnifiedMediaControlsMock = vi.fn(() => ({ destroy: vi.fn() })); +const mountFloatingViewerSimplePlayerMock = vi.fn((mediaEl) => mediaEl); + +vi.mock("../api/endpoints.js", () => ({ + buildViewURL: vi.fn((filename) => `/view/${filename}`), + buildAssetViewURL: vi.fn((fileData) => `/asset/${fileData?.filename || ""}`), +})); + +vi.mock("../features/viewer/model3dRenderer.js", () => ({ + MODEL3D_EXTS: new Set(), + createModel3DMediaElement: vi.fn(), +})); + +vi.mock("../features/viewer/mediaPlayer.js", () => ({ + mountUnifiedMediaControls: mountUnifiedMediaControlsMock, +})); + +vi.mock("../features/viewer/floatingViewerSimplePlayer.js", () => ({ + mountFloatingViewerSimplePlayer: mountFloatingViewerSimplePlayerMock, +})); + +vi.mock("../utils/mediaFps.js", () => ({ + readAssetFps: vi.fn(() => 24), + readAssetFrameCount: vi.fn(() => 48), +})); + +describe("floating viewer media player bridge", () => { + beforeEach(() => { + document.body.innerHTML = ""; + mountUnifiedMediaControlsMock.mockClear(); + mountFloatingViewerSimplePlayerMock.mockClear(); + }); + + it("uses unified video controls for video assets", async () => { + const { buildFloatingViewerMediaElement } = await import( + "../features/viewer/floatingViewerMedia.js" + ); + + const root = buildFloatingViewerMediaElement({ + filename: "clip.mp4", + kind: "video", + }); + + expect(root?.classList.contains("mjr-mfv-player-host")).toBe(true); + expect(root?._mjrMediaControlsHandle?.destroy).toBeTypeOf("function"); + expect(root?.querySelector("video")).toBeTruthy(); + expect(mountUnifiedMediaControlsMock).toHaveBeenCalledWith( + expect.any(HTMLVideoElement), + expect.objectContaining({ + variant: "viewer", + mediaKind: "video", + initialFps: 24, + initialFrameCount: 48, + }), + ); + expect(mountFloatingViewerSimplePlayerMock).not.toHaveBeenCalled(); + }); + + it("uses unified video controls for audio assets", async () => { + const { buildFloatingViewerMediaElement } = await import( + "../features/viewer/floatingViewerMedia.js" + ); + + const root = buildFloatingViewerMediaElement({ + filename: "track.mp3", + kind: "audio", + }); + + expect(root?.classList.contains("mjr-mfv-player-host")).toBe(true); + expect(root?.querySelector("audio")).toBeTruthy(); + expect(mountUnifiedMediaControlsMock).toHaveBeenCalledWith( + expect.any(HTMLAudioElement), + expect.objectContaining({ + variant: "viewer", + mediaKind: "audio", + }), + ); + expect(mountFloatingViewerSimplePlayerMock).not.toHaveBeenCalled(); + }); +}); diff --git a/js/tests/floating_viewer_toolbar_overlay_controls.vitest.mjs b/js/tests/floating_viewer_toolbar_overlay_controls.vitest.mjs new file mode 100644 index 00000000..478bae27 --- /dev/null +++ b/js/tests/floating_viewer_toolbar_overlay_controls.vitest.mjs @@ -0,0 +1,83 @@ +// @vitest-environment happy-dom + +import { describe, expect, it, vi } from "vitest"; + +vi.mock("../app/i18n.js", () => ({ + t: (_key, fallback) => fallback || "", +})); + +vi.mock("../app/events.js", () => ({ + EVENTS: {}, +})); + +vi.mock("../app/config.js", () => ({ + APP_CONFIG: {}, +})); + +vi.mock("../utils/tooltipShortcuts.js", () => ({ + appendTooltipHint: vi.fn(), + setTooltipHint: vi.fn(), +})); + +vi.mock("../features/viewer/nodeStream/nodeStreamFeatureFlag.js", () => ({ + NODE_STREAM_FEATURE_ENABLED: false, +})); + +vi.mock("../features/viewer/workflowSidebar/WorkflowSidebar.js", () => ({ + WorkflowSidebar: class { + constructor() { + this.el = document.createElement("div"); + this.isVisible = false; + } + toggle() { + this.isVisible = !this.isVisible; + } + }, +})); + +vi.mock("../features/viewer/workflowSidebar/sidebarRunButton.js", () => ({ + createRunButton: () => ({ el: document.createElement("div") }), +})); + +vi.mock("../features/viewer/floatingViewerProgress.js", () => ({ + buildFloatingViewerMediaProgressOverlay: () => document.createElement("div"), + buildFloatingViewerProgressBar: () => document.createElement("div"), +})); + +vi.mock("../components/sidebar/parsers/geninfoParser.js", () => ({ + normalizeGenerationMetadata: vi.fn((v) => v), + sanitizePromptForDisplay: vi.fn((v) => v), +})); + +describe("floating viewer toolbar overlay controls", () => { + it("renders guides and mask/format controls in the toolbar", async () => { + const { buildFloatingViewerToolbar } = await import("../features/viewer/floatingViewerUi.js"); + + const viewer = { + _channel: "rgb", + _exposureEV: 0, + _gridMode: 0, + _overlayFormat: "image", + _overlayMaskOpacity: 0.65, + _overlayMaskEnabled: false, + _updateModeBtnUI: vi.fn(), + _updatePinUI: vi.fn(), + _updateGenBtnUI: vi.fn(), + _bindDocumentUiHandlers: vi.fn(), + _redrawOverlayGuides: vi.fn(), + }; + + const bar = buildFloatingViewerToolbar(viewer); + + expect(bar.querySelector(".mjr-mfv-toolbar-select")).toBeTruthy(); + expect(viewer._guidesSelect).toBeTruthy(); + expect(viewer._channelSelect).toBeTruthy(); + expect(viewer._exposureCtl?.input).toBeTruthy(); + expect(viewer._formatSelect).toBeTruthy(); + expect(viewer._formatToggle).toBeTruthy(); + expect(viewer._maskOpacityCtl?.input).toBeTruthy(); + expect(viewer._guidesSelect.value).toBe("0"); + expect(viewer._channelSelect.value).toBe("rgb"); + expect(viewer._formatSelect.value).toBe("image"); + }); +}); diff --git a/js/tests/video_controls_responsive_layout.vitest.mjs b/js/tests/video_controls_responsive_layout.vitest.mjs new file mode 100644 index 00000000..f5b9aac0 --- /dev/null +++ b/js/tests/video_controls_responsive_layout.vitest.mjs @@ -0,0 +1,50 @@ +import { Window } from "happy-dom"; +import { describe, expect, it, vi } from "vitest"; + +vi.mock("../app/i18n.js", () => ({ + t: (_key, fallback) => fallback || "", +})); + +describe("video controls responsive layout", () => { + it("switches to stacked layout when the host is narrow", async () => { + const window = new Window(); + globalThis.window = window; + globalThis.document = window.document; + Object.defineProperty(globalThis, "navigator", { + configurable: true, + value: window.navigator, + }); + + const resizeObservers = []; + globalThis.ResizeObserver = class { + constructor(cb) { + this.cb = cb; + resizeObservers.push(this); + } + observe() {} + disconnect() {} + }; + + const { mountVideoControls } = await import("../components/VideoControls.js"); + + const host = document.createElement("div"); + Object.defineProperty(host, "clientWidth", { + configurable: true, + get: () => 520, + }); + const video = document.createElement("video"); + host.appendChild(video); + document.body.appendChild(host); + + const mounted = mountVideoControls(video, { + variant: "viewer", + mediaKind: "video", + hostEl: host, + }); + + resizeObservers[0]?.cb?.(); + + expect(mounted.controlsEl?.dataset?.mjrLayout).toBe("stacked"); + mounted.destroy(); + }); +}); diff --git a/js/theme/theme-comfy.css b/js/theme/theme-comfy.css index adfdae89..00435f39 100644 --- a/js/theme/theme-comfy.css +++ b/js/theme/theme-comfy.css @@ -3270,7 +3270,7 @@ gap: 12px; display: grid; align-items: center; - grid-template-columns: auto 1fr auto auto auto; + grid-template-columns: auto auto 1fr auto auto; } .mjr-video-controls--viewerbar .mjr-video-row--top { @@ -4228,6 +4228,13 @@ body.mjr-mfv-popout-body { border-bottom: 1px solid var(--mjr-border); flex-shrink: 0; min-height: 36px; + flex-wrap: nowrap; + overflow-x: auto; + overflow-y: hidden; + scrollbar-width: none; +} +.mjr-mfv-toolbar::-webkit-scrollbar { + display: none; } .mjr-mfv-toolbar-sep { @@ -4336,7 +4343,199 @@ body.mjr-mfv-popout-body { box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--mjr-accent) 24%, transparent); } -/* ── Icon buttons inside MFV (outside .mjr-assets-manager scope) ─────── */ +/* ── Pin group: now a dropdown menu (display:none by default, flex when .is-open) ── */ +.mjr-mfv-pin-group { + display: none; + flex-direction: column; + gap: 2px; + position: absolute; + top: calc(100% + 4px); + left: 0; + z-index: 10010; + min-width: 70px; + padding: 4px; + background: var(--comfy-menu-bg, #2a2a2a); + border: 1px solid var(--mjr-border, rgba(255,255,255,0.12)); + border-radius: 8px; + box-shadow: 0 8px 24px rgba(0,0,0,0.55); +} +.mjr-mfv-pin-group.is-open { + display: flex; +} +.mjr-mfv-pin-btn { + display: flex; + align-items: center; + justify-content: center; + width: 100%; + height: 30px; + border-radius: 6px; + border: 1px solid transparent; + background: none; + color: var(--content-fg, #ddd); + font-size: 12px; + font-weight: 600; + cursor: pointer; + padding: 0 10px; + text-align: center; + transition: background 120ms ease, border-color 120ms ease, color 120ms ease; +} +.mjr-mfv-pin-btn:hover { + background: rgba(255,255,255,0.08); + border-color: color-mix(in srgb, var(--mjr-accent) 35%, transparent); +} +.mjr-mfv-pin-btn.is-pinned { + border-color: color-mix(in srgb, var(--mjr-accent) 58%, #ffffff 12%); + background: color-mix(in srgb, var(--mjr-surface-2, #333) 42%, var(--mjr-accent, #5fb3ff) 58%); + color: #eef7ff; +} + +/* ── Icon Dropdown component (.mjr-mfv-idrop) ─────────────────────────── */ +.mjr-mfv-idrop { + position: relative; + display: inline-flex; + align-items: center; + flex-shrink: 0; +} + +.mjr-mfv-idrop-menu { + display: none; + flex-direction: column; + gap: 2px; + position: absolute; + top: calc(100% + 4px); + left: 0; + z-index: 10010; + min-width: 110px; + padding: 4px; + background: var(--comfy-menu-bg, #2a2a2a); + border: 1px solid var(--mjr-border, rgba(255,255,255,0.12)); + border-radius: 8px; + box-shadow: 0 8px 24px rgba(0,0,0,0.55); + white-space: nowrap; +} +.mjr-mfv-idrop-menu.is-open { + display: flex; +} + +.mjr-mfv-idrop-item { + display: flex; + align-items: center; + gap: 8px; + width: 100%; + padding: 6px 10px; + background: none; + border: none; + border-radius: 6px; + color: var(--input-text, #ddd); + font-size: 12px; + font-family: inherit; + text-align: left; + cursor: pointer; + white-space: nowrap; + transition: background 0.1s ease; +} +.mjr-mfv-idrop-item:hover { + background: rgba(255,255,255,0.08); +} +.mjr-mfv-idrop-item.is-selected { + background: rgba(95,179,255,0.16); + color: #a8d8ff; +} +.mjr-mfv-idrop-trigger[aria-expanded="true"] { + background: rgba(255,255,255,0.1) !important; + border-color: rgba(255,255,255,0.2) !important; +} +/* Channel trigger: slightly wider to fit "RGB" */ +.mjr-mfv-ch-label { + font-size: 12px; + letter-spacing: 0.04em; + line-height: 1; +} + +/* Toolbar icon-button popovers (channel, guides, pin, format — sort-style context menus) */ +.mjr-mfv-ch-popover, +.mjr-mfv-guides-popover, +.mjr-mfv-pin-popover, +.mjr-mfv-format-popover { + position: absolute; + min-width: 120px; + padding: 6px; + border-radius: var(--radius-lg, 0.5rem); + background: var(--mjr-surface-1, var(--comfy-menu-bg, #2a2a2a)); + border: 1px solid var(--mjr-border, rgba(255,255,255,0.12)); + box-shadow: 0 8px 24px rgba(0,0,0,0.55); + z-index: 10010; + display: none; +} +.mjr-mfv-ch-popover.is-open, +.mjr-mfv-guides-popover.is-open, +.mjr-mfv-pin-popover.is-open, +.mjr-mfv-format-popover.is-open { + display: block; +} +/* Toolbar icon images — ch icon is black (inverted), guides icon is native white */ +.mjr-mfv-ch-icon { + width: 18px; + height: 18px; + filter: invert(1); + opacity: 0.85; + display: block; +} +.mjr-mfv-guides-icon { + width: 18px; + height: 18px; + opacity: 0.85; + display: block; +} +.mjr-mfv-ch-trigger[aria-expanded="true"], +.mjr-mfv-guides-trigger[aria-expanded="true"], +.mjr-mfv-pin-trigger[aria-expanded="true"], +.mjr-mfv-format-trigger[aria-expanded="true"] { + background: rgba(255,255,255,0.1) !important; + border-color: rgba(255,255,255,0.2) !important; +} +/* Pin slot active state */ +.mjr-mfv-pin-popover .mjr-menu-item.is-pinned { + background: rgba(95,179,255,0.16); + color: #a8d8ff; +} +.mjr-mfv-pin-popover .mjr-menu-item.is-pinned .mjr-menu-item-check { + opacity: 1 !important; +} +/* Format popover: separator + opacity slider row */ +.mjr-mfv-format-sep { + height: 1px; + background: var(--mjr-border, rgba(255,255,255,0.1)); + margin: 4px 2px; +} +.mjr-mfv-format-slider-row { + display: flex; + align-items: center; + gap: 6px; + padding: 4px 8px 2px; +} +.mjr-mfv-format-slider-label { + font-size: 11px; + color: var(--input-text, #ddd); + opacity: 0.65; + white-space: nowrap; + flex-shrink: 0; +} +.mjr-mfv-format-popover input[type="range"] { + flex: 1; + min-width: 70px; + accent-color: var(--mjr-accent, #5fb3ff); +} +.mjr-mfv-format-popover .mjr-mfv-toolbar-range-out { + font-size: 11px; + color: var(--input-text, #ddd); + opacity: 0.65; + min-width: 30px; + text-align: right; + flex-shrink: 0; +} + + .mjr-mfv .mjr-icon-btn { width: 30px; height: 30px; @@ -4371,6 +4570,18 @@ body.mjr-mfv-popout-body { opacity: 0.9; } +/* Universal active highlight — any aria-pressed="true" button gets accent glow. + Placed before the colored active classes so they can override with their own color. */ +.mjr-mfv .mjr-icon-btn[aria-pressed="true"] { + border-color: rgba(95, 179, 255, 0.55); + color: var(--mjr-accent, #5fb3ff); + background: color-mix(in srgb, var(--mjr-surface-2, #333) 80%, var(--mjr-accent, #5fb3ff) 15%); + box-shadow: 0 0 0 1px color-mix(in srgb, var(--mjr-accent, #5fb3ff) 25%, transparent); +} +.mjr-mfv .mjr-icon-btn[aria-pressed="true"] .pi { + opacity: 1; +} + .mjr-mfv .mjr-icon-btn.mjr-live-active { border-color: color-mix(in srgb, var(--mjr-status-success) 60%, var(--mjr-border)); color: var(--mjr-status-success); @@ -4681,7 +4892,6 @@ body.mjr-mfv-popout-body { width: 100%; height: 220px; overflow-y: auto; - resize: vertical; min-height: 120px; max-height: 65%; } @@ -4695,6 +4905,53 @@ body.mjr-mfv-popout-body { min-height: 0; } +.mjr-mfv-overlay-canvas { + position: absolute; + inset: 0; + width: 100%; + height: 100%; + pointer-events: none; + z-index: 12; +} + +.mjr-mfv-toolbar-select { + height: 24px; + padding: 0 6px; + border-radius: 6px; + border: 0.8px solid rgba(196, 202, 210, 0.24); + background: linear-gradient(180deg, rgba(210,214,220,0.06), rgba(210,214,220,0.02)); + color: rgba(230,233,238,0.92); + font-size: 11px; + outline: none; +} + +.mjr-mfv-toolbar-range { + display: inline-flex; + align-items: center; + gap: 6px; +} + +.mjr-mfv-toolbar-range input[type="range"] { + width: 72px; + accent-color: rgba(255,255,255,0.85); +} + +.mjr-mfv-toolbar-range-out { + min-width: 30px; + text-align: right; + font-size: 11px; + color: rgba(255,255,255,0.9); +} + +/* EV slider active state (value ≠ 0) */ +.mjr-mfv-toolbar-range.is-active input[type="range"] { + accent-color: #f5c842; +} +.mjr-mfv-toolbar-range.is-active .mjr-mfv-toolbar-range-out { + color: #f5c842; + font-weight: 600; +} + .mjr-mfv-media-progress { position: absolute; top: 10px; @@ -4737,6 +4994,9 @@ body.mjr-mfv-popout-body { /* ── Workflow Sidebar ────────────────────────────────────────────────── */ .mjr-ws-sidebar { + position: relative; + display: flex; + flex-direction: column; width: 0; overflow: hidden; background: var(--mjr-surface-1, #2a2a2a); @@ -4747,17 +5007,12 @@ body.mjr-mfv-popout-body { .mjr-ws-sidebar.open { width: 260px; - overflow-y: auto; - resize: horizontal; + overflow: hidden; min-width: 180px; max-width: 65%; transition: none; } -.mjr-mfv-content-wrapper[data-sidebar-pos="bottom"] .mjr-ws-sidebar { - resize: none; -} - .mjr-ws-sidebar-header { display: flex; align-items: center; @@ -4775,6 +5030,9 @@ body.mjr-mfv-popout-body { opacity: 0.65; } .mjr-ws-sidebar-body { + flex: 1; + min-height: 0; + overflow-y: auto; padding: 0; } .mjr-ws-sidebar-empty { @@ -4785,26 +5043,275 @@ body.mjr-mfv-popout-body { line-height: 1.5; } +/* ── Tab bar ──────────────────────────────────────────────────────────── */ +.mjr-ws-tab-bar { + display: flex; + flex-shrink: 0; + gap: 2px; + padding: 4px 8px; + border-bottom: 1px solid var(--mjr-border, rgba(255, 255, 255, 0.12)); + background: rgba(0, 0, 0, 0.18); +} + +.mjr-ws-tab { + flex: 1; + display: flex; + align-items: center; + justify-content: center; + gap: 5px; + padding: 4px 8px; + border: none; + border-radius: 4px; + background: transparent; + color: rgba(255, 255, 255, 0.45); + font-size: 11px; + font-weight: 500; + cursor: pointer; + transition: background 0.15s, color 0.15s; +} + +.mjr-ws-tab:hover { + background: rgba(255, 255, 255, 0.07); + color: rgba(255, 255, 255, 0.75); +} + +.mjr-ws-tab.is-active { + background: rgba(99, 155, 255, 0.15); + color: #639bff; +} + +/* ── Nodes tab ────────────────────────────────────────────────────────── */ +.mjr-ws-nodes-tab { + display: flex; + flex-direction: column; + flex: 1; + min-height: 0; + overflow: hidden; +} + +.mjr-ws-search-wrap { + position: relative; + display: flex; + align-items: center; + flex-shrink: 0; + padding: 6px 8px; + border-bottom: 1px solid var(--mjr-border, rgba(255, 255, 255, 0.12)); +} + +.mjr-ws-search-icon { + position: absolute; + left: 16px; + font-size: 11px; + color: rgba(255, 255, 255, 0.3); + pointer-events: none; +} + +.mjr-ws-search { + flex: 1; + padding: 4px 28px 4px 26px; + background: rgba(0, 0, 0, 0.35); + border: 1px solid rgba(255, 255, 255, 0.12); + border-radius: 4px; + color: rgba(255, 255, 255, 0.85); + font-size: 11px; + outline: none; +} + +.mjr-ws-search::placeholder { + color: rgba(255, 255, 255, 0.28); +} + +.mjr-ws-search:focus { + border-color: rgba(99, 155, 255, 0.5); +} + +.mjr-ws-search-clear { + position: absolute; + right: 14px; + display: flex; + align-items: center; + justify-content: center; + width: 18px; + height: 18px; + padding: 0; + border: none; + background: transparent; + color: rgba(255, 255, 255, 0.3); + font-size: 10px; + cursor: pointer; + border-radius: 3px; +} + +.mjr-ws-search-clear:hover { + color: rgba(255, 255, 255, 0.7); + background: rgba(255, 255, 255, 0.08); +} + +.mjr-ws-nodes-list { + flex: 1; + overflow-y: auto; + padding: 4px 0; +} + +.mjr-ws-node-row { + display: flex; + align-items: center; + gap: 6px; + padding: 5px 10px 5px 12px; + cursor: pointer; + border-bottom: 1px solid rgba(255, 255, 255, 0.05); + min-height: 32px; + transition: background 0.1s; +} + +.mjr-ws-node-row:hover { + background: rgba(255, 255, 255, 0.06); +} + +.mjr-ws-node-row-type { + flex: 1; + font-size: 11px; + color: rgba(255, 255, 255, 0.78); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.mjr-ws-node-row-title { + font-size: 10px; + color: rgba(255, 255, 255, 0.4); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 80px; + flex-shrink: 0; +} + +.mjr-ws-node-locate { + flex-shrink: 0; + width: 22px; + height: 22px; + display: flex; + align-items: center; + justify-content: center; + padding: 0; + border: none; + background: transparent; + color: rgba(255, 255, 255, 0.3); + font-size: 11px; + border-radius: 3px; + cursor: pointer; + opacity: 0; + transition: opacity 0.1s, color 0.1s, background 0.1s; +} + +.mjr-ws-node-row:hover .mjr-ws-node-locate { + opacity: 1; +} + +.mjr-ws-node-locate:hover { + color: #639bff; + background: rgba(99, 155, 255, 0.15); +} + /* ── Node sections ────────────────────────────────────────────────────── */ .mjr-ws-node { border-bottom: 1px solid var(--mjr-border, rgba(255, 255, 255, 0.12)); } +.mjr-ws-sidebar-resizer { + position: absolute; + top: 0; + bottom: 0; + width: 14px; + z-index: 2; + cursor: ew-resize; + pointer-events: auto; +} + +.mjr-ws-sidebar-resizer::before { + content: ""; + position: absolute; + top: 50%; + left: 50%; + width: 4px; + height: 56px; + transform: translate(-50%, -50%); + border-radius: 999px; + background: rgba(255, 255, 255, 0.18); + box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.06); + opacity: 0; + transition: opacity 0.15s ease, background 0.15s ease; +} + +.mjr-ws-sidebar.open:hover .mjr-ws-sidebar-resizer::before, +.mjr-ws-sidebar.is-resizing .mjr-ws-sidebar-resizer::before, +.mjr-ws-sidebar-resizer.is-dragging::before { + opacity: 1; +} + +.mjr-ws-sidebar.is-resizing .mjr-ws-sidebar-resizer::before, +.mjr-ws-sidebar-resizer:hover::before, +.mjr-ws-sidebar-resizer.is-dragging::before { + background: rgba(255, 255, 255, 0.34); +} + +.mjr-mfv-content-wrapper[data-sidebar-pos="right"] .mjr-ws-sidebar-resizer { + right: 0; +} + +.mjr-mfv-content-wrapper[data-sidebar-pos="left"] .mjr-ws-sidebar-resizer { + left: 0; +} + +.mjr-mfv-content-wrapper[data-sidebar-pos="bottom"] .mjr-ws-sidebar-resizer { + display: none; +} .mjr-ws-node-header { display: flex; align-items: center; - justify-content: space-between; + gap: 8px; padding: 6px 10px; background: color-mix(in srgb, var(--mjr-surface-0, #1e1e1e) 40%, var(--mjr-surface-1, #2a2a2a) 60%); + cursor: default; + user-select: none; + transition: background 0.12s ease; } -.mjr-ws-node-title { +.mjr-ws-node.is-collapsible .mjr-ws-node-header { + cursor: pointer; +} +.mjr-ws-node.is-collapsible .mjr-ws-node-header:hover { + background: color-mix(in srgb, var(--mjr-surface-0, #1e1e1e) 28%, var(--mjr-surface-1, #2a2a2a) 72%); +} +.mjr-ws-node.is-collapsible.is-collapsed .mjr-ws-node-header:hover { + background: color-mix(in srgb, var(--mjr-accent, #5b8af0) 8%, var(--mjr-surface-1, #2a2a2a) 92%); +} +.mjr-ws-node-toggle { + flex: 0 0 auto; +} +.mjr-ws-node-title-wrap { + display: flex; + flex: 1; + min-width: 0; + flex-direction: column; + gap: 1px; +} +.mjr-ws-node-type { font-weight: 600; font-size: 12px; color: var(--content-fg, #ddd); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; - flex: 1; - margin-right: 6px; +} +.mjr-ws-node-title { + font-size: 10px; + color: rgba(255, 255, 255, 0.48); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.mjr-ws-node.is-collapsed .mjr-ws-node-body { + display: none; } .mjr-ws-node-body { display: flex; @@ -4818,7 +5325,51 @@ body.mjr-mfv-popout-body { padding: 4px 0; } -/* ── Widget rows ──────────────────────────────────────────────────────── */ +/* ── Nested nodes (inside subgraphs) ─────────────────────────────────── */ +.mjr-ws-node--nested { + border-left: 2px solid rgba(91, 138, 240, 0.35); +} +.mjr-ws-node--nested .mjr-ws-node-header { + padding-left: 16px; + background: color-mix(in srgb, var(--mjr-accent, #5b8af0) 5%, var(--mjr-surface-1, #2a2a2a) 95%); +} +.mjr-ws-node--nested.is-collapsible .mjr-ws-node-header:hover { + background: color-mix(in srgb, var(--mjr-accent, #5b8af0) 10%, var(--mjr-surface-1, #2a2a2a) 90%); +} + +/* ── Subgraph children group ──────────────────────────────────────────── */ +.mjr-ws-children-toggle { + display: flex; + align-items: center; + gap: 6px; + width: 100%; + padding: 5px 10px 5px 20px; + background: color-mix(in srgb, var(--mjr-accent, #5b8af0) 6%, var(--mjr-surface-0, #1e1e1e) 94%); + border: none; + border-bottom: 1px solid var(--mjr-border, rgba(255, 255, 255, 0.12)); + color: var(--mjr-accent, #5b8af0); + font-size: 11px; + cursor: pointer; + text-align: left; + opacity: 0.8; + transition: opacity 0.1s ease, background 0.1s ease; +} +.mjr-ws-children-toggle--nested { + padding-left: 28px; +} +.mjr-ws-children-toggle:hover { + opacity: 1; + background: color-mix(in srgb, var(--mjr-accent, #5b8af0) 12%, var(--mjr-surface-0, #1e1e1e) 88%); +} +.mjr-ws-children-toggle[aria-expanded="true"] { + opacity: 1; +} +.mjr-ws-children { + border-left: 2px solid rgba(91, 138, 240, 0.25); + margin-left: 6px; +} + + .mjr-ws-widget-row { display: flex; align-items: flex-start; @@ -4864,12 +5415,10 @@ body.mjr-mfv-popout-body { border-color: var(--mjr-accent, #5fb3ff); } .mjr-ws-textarea { - resize: vertical; + resize: none; min-height: 28px; - max-height: 80px; line-height: 1.4; - overflow-y: auto; - transition: max-height 150ms ease; + overflow-y: hidden; } .mjr-ws-text-wrapper { display: flex; @@ -5070,6 +5619,186 @@ body.mjr-mfv-popout-body { font-variant-numeric: tabular-nums; } +.mjr-mfv-player-host { + position: relative; + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; + container-type: inline-size; +} + +.mjr-mfv-player-host .mjr-video-controls { + z-index: 30; +} + +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="compact"], +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] { + left: 8px; + right: 8px; + bottom: 8px; + padding: 8px; + gap: 6px; +} + +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="compact"] .mjr-video-row--top, +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-row--top { + gap: 8px; +} + +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="compact"] .mjr-video-timegroup, +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-timegroup { + justify-content: flex-start; + gap: 6px; +} + +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="compact"] .mjr-video-row--bottom, +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-row--bottom { + flex-wrap: nowrap; + overflow: hidden; + gap: 6px; +} + +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="compact"] .mjr-video-bottom, +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-bottom { + flex-shrink: 1; + flex-wrap: nowrap; +} + +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="compact"] .mjr-video-transport, +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-transport { + flex-wrap: nowrap; +} + +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="compact"] .mjr-video-group, +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-group { + flex-wrap: nowrap; +} + +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="compact"] .mjr-video-seek-wrap, +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-seek-wrap { + min-width: 0; +} + +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="compact"] .mjr-video-bar-timeline, +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-bar-timeline { + display: flex; + flex-wrap: wrap; + align-items: center; +} + +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="compact"] .mjr-video-bar-timeline .mjr-video-seek-wrap, +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-bar-timeline .mjr-video-seek-wrap { + order: -1; + flex: 1 1 100%; + width: 100%; +} + +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="compact"] .mjr-video-bar-timeline .mjr-video-group--in, +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="compact"] .mjr-video-bar-timeline .mjr-video-group--out, +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-bar-timeline .mjr-video-group--in, +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-bar-timeline .mjr-video-group--out { + flex: 0 1 auto; +} + +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="compact"] .mjr-video-range-count, +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="compact"] .mjr-video-frame { + min-width: auto; +} + +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-range-count { + display: none !important; +} + +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-frame { + min-width: auto; + padding: 3px 6px; +} + +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-btn--in, +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-btn--out, +.mjr-mfv-player-host .mjr-video-controls[data-mjr-layout="stacked"] .mjr-video-btn--mark { + min-width: 32px; +} + +@container (max-width: 900px) { + .mjr-mfv-player-host .mjr-video-controls { + left: 8px; + right: 8px; + bottom: 8px; + padding: 8px; + gap: 6px; + } + + .mjr-mfv-player-host .mjr-video-row--top { + gap: 8px; + } + + .mjr-mfv-player-host .mjr-video-timegroup { + justify-content: flex-start; + gap: 6px; + } + + .mjr-mfv-player-host .mjr-video-row--bottom { + flex-wrap: nowrap; + overflow: hidden; + gap: 6px; + } + + .mjr-mfv-player-host .mjr-video-bottom { + flex-shrink: 1; + flex-wrap: nowrap; + } + + .mjr-mfv-player-host .mjr-video-transport { + flex-wrap: nowrap; + } + + .mjr-mfv-player-host .mjr-video-group { + flex-wrap: nowrap; + } + + .mjr-mfv-player-host .mjr-video-seek-wrap { + min-width: 0; + } + + .mjr-mfv-player-host .mjr-video-controls--viewerbar .mjr-video-bar-timeline { + display: flex; + flex-wrap: wrap; + align-items: center; + } + + .mjr-mfv-player-host .mjr-video-controls--viewerbar .mjr-video-bar-timeline .mjr-video-seek-wrap { + order: -1; + flex: 1 1 100%; + width: 100%; + } +} + +@container (max-width: 680px) { + .mjr-mfv-player-host .mjr-video-controls { + padding: 6px; + } + + .mjr-mfv-player-host .mjr-video-btn { + padding: 5px 8px; + font-size: 12px; + } + + .mjr-mfv-player-host .mjr-video-num { + padding: 4px 6px; + font-size: 11px; + } + + .mjr-mfv-player-host .mjr-video-time, + .mjr-mfv-player-host .mjr-video-frame, + .mjr-mfv-player-host .mjr-video-range-count { + font-size: 11px; + } +} + /* ── Settings button active state ─────────────────────────────────────── */ .mjr-mfv-settings-btn.active { border-color: color-mix(in srgb, var(--mjr-accent, #5fb3ff) 55%, var(--mjr-border, rgba(255, 255, 255, 0.12))); @@ -5158,8 +5887,8 @@ body.mjr-mfv-popout-body { position: fixed; top: var(--mjr-mfv-top-offset, 60px); right: 20px; - width: 480px; - height: 380px; + width: 640px; + height: 360px; min-width: 220px; min-height: 160px; /* Always flex; visibility + opacity control show/hide so CSS transitions work. diff --git a/js/vue/components/grid/AssetsGrid.vue b/js/vue/components/grid/AssetsGrid.vue index 7f96c3dd..112ba78c 100644 --- a/js/vue/components/grid/AssetsGrid.vue +++ b/js/vue/components/grid/AssetsGrid.vue @@ -37,6 +37,20 @@ function syncAssetsQueryVisibility() { } } +function onKeepAliveAttached() { + // Re-register the grid container in case the global ref was cleared or + // became stale during the keep-alive detach/reattach cycle. + try { + const container = gridContainerRef.value; + if (container) { + setActiveGridContainer(container); + } + } catch (e) { + console.debug?.(e); + } + syncAssetsQueryVisibility(); +} + function installVisibilityObservers() { try { disposeVisibilityObservers?.(); @@ -143,7 +157,7 @@ onMounted(() => { } installVisibilityObservers(); try { - window.addEventListener("mjr:keepalive-attached", syncAssetsQueryVisibility); + window.addEventListener("mjr:keepalive-attached", onKeepAliveAttached); document.addEventListener("visibilitychange", syncAssetsQueryVisibility); } catch (e) { console.debug?.(e); @@ -182,7 +196,7 @@ onBeforeUnmount(() => { } assetsQueryController = null; try { - window.removeEventListener("mjr:keepalive-attached", syncAssetsQueryVisibility); + window.removeEventListener("mjr:keepalive-attached", onKeepAliveAttached); document.removeEventListener("visibilitychange", syncAssetsQueryVisibility); } catch (e) { console.debug?.(e); diff --git a/js/vue/components/grid/VirtualAssetGridHost.vue b/js/vue/components/grid/VirtualAssetGridHost.vue index 9acf0698..5704ecd3 100644 --- a/js/vue/components/grid/VirtualAssetGridHost.vue +++ b/js/vue/components/grid/VirtualAssetGridHost.vue @@ -1040,19 +1040,22 @@ function _forceVirtualizerMeasure() { function handleKeepAliveAttached() { _forceVirtualizerMeasure(); - if (!isGridVisible()) { - // Le layout du nouveau container n'est pas encore calculé au moment - // où keepalive-attached est dispatché. On reporte sur le prochain - // cycle de rendu pour que le navigateur ait fini la mise en page. + // Le layout du nouveau container n'est pas encore calculé au moment + // où keepalive-attached est dispatché. Double-rAF + setTimeout 150ms + // couvrent les layouts complexes (animations ComfyUI, heavy CSS recalc). + requestAnimationFrame(() => { requestAnimationFrame(() => { - requestAnimationFrame(() => { - _forceVirtualizerMeasure(); - void maybeFillViewport(); - }); + _forceVirtualizerMeasure(); + void maybeFillViewport(); }); - return; - } - void maybeFillViewport(); + }); + // Fallback: certains environnements (animations, heavy reflow) ne + // stabilisent pas les dimensions dans deux frames. Ce setTimeout garantit + // une mesure finale après que le navigateur ait fini la mise en page. + setTimeout(() => { + _forceVirtualizerMeasure(); + void maybeFillViewport(); + }, 150); } function bindInfiniteScroll(element) { diff --git a/js/vue/composables/useGridLoader.js b/js/vue/composables/useGridLoader.js index 8cb3eee7..da397016 100644 --- a/js/vue/composables/useGridLoader.js +++ b/js/vue/composables/useGridLoader.js @@ -723,6 +723,12 @@ export function useGridLoader({ const gridContainer = getGridContainer(); if (!gridContainer || state.loading || state.done) return { ok: true, skipped: true }; if (!canLoadFromHost()) { + // When the grid is empty (initial load or post-reattach) and the host + // isn't measured yet, schedule a single retry so the first page loads + // once the layout settles — prevents a permanent blank grid. + if (!state.assets.length && !state.loading && APP_CONFIG.PREFETCH_NEXT_PAGE) { + scheduleNextPagePrefetch(state.requestId, 400); + } return { ok: true, skipped: true, hidden: true }; } if (isExecutionBusy()) { diff --git a/js_dist/assets/comfyui-majoor-assetsmanager.css b/js_dist/assets/comfyui-majoor-assetsmanager.css index 3c1ead51..b057136d 100644 --- a/js_dist/assets/comfyui-majoor-assetsmanager.css +++ b/js_dist/assets/comfyui-majoor-assetsmanager.css @@ -1 +1 @@ -.mjr-rating-badge[data-v-821bf1b1]{position:absolute;top:6px;right:6px;background:#0000008c;border:1px solid rgba(255,255,255,.12);padding:2px 6px;border-radius:6px;font-size:13px;letter-spacing:1px;display:inline-flex;align-items:center;justify-content:center;pointer-events:none;z-index:10;text-shadow:0 2px 6px rgba(0,0,0,.6);box-shadow:0 6px 18px #00000040;animation:mjr-fade-in-821bf1b1 .2s ease-out}@keyframes mjr-fade-in-821bf1b1{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.mjr-tags-badge[data-v-15044260]{position:absolute;bottom:6px;left:6px;padding:3px 6px;border-radius:4px;background:#000c;font-size:9px;max-width:calc(100% - 56px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;z-index:10;box-shadow:0 2px 4px #0000004d;animation:mjr-fade-in-15044260 .2s ease-out}@keyframes mjr-fade-in-15044260{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.mjr-gentime-badge[data-v-60fe3677]{position:absolute;bottom:6px;right:6px;padding:2px 6px;border-radius:4px;font-size:10px;font-weight:800;letter-spacing:.015em;line-height:1.1;background:#0000008c;border:1px solid rgba(255,255,255,.12);pointer-events:none;z-index:10;box-shadow:0 2px 4px #0000004d;text-shadow:0 1px 2px rgba(0,0,0,.9),0 0 10px color-mix(in srgb,currentColor 35%,transparent);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.mjr-popover-row[data-v-d1ebebd4]{display:grid;grid-template-columns:110px 1fr;gap:8px;align-items:center;margin-bottom:8px}.mjr-popover-row--3col[data-v-d1ebebd4]{grid-template-columns:110px 1fr 1fr}.mjr-popover-label[data-v-d1ebebd4]{font-size:12px;color:var(--mjr-muted, var(--descrip-text, rgba(255, 255, 255, .65)));white-space:nowrap}.mjr-popover-toggle[data-v-d1ebebd4]{display:flex;align-items:center;gap:6px;cursor:pointer;font-size:12px;color:var(--fg-color, #e6edf7)}.mjr-filter-group-toggle[data-v-d1ebebd4]{width:100%;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:0;margin:0 0 10px;border:0;background:transparent;color:inherit;cursor:pointer;text-align:left}.mjr-filter-group-title[data-v-d1ebebd4]{font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.mjr-filter-group-chevron[data-v-d1ebebd4]{font-size:12px;line-height:1;color:var(--mjr-muted, var(--descrip-text, rgba(255, 255, 255, .65)))}.mjr-filter-group-body[data-v-d1ebebd4]{padding-top:2px}.mjr-filter-group[data-v-d1ebebd4]:not(.is-open){padding-bottom:8px}.mjr-filter-group:not(.is-open) .mjr-filter-group-toggle[data-v-d1ebebd4]{margin-bottom:0}.mjr-rating-star[data-v-6d012325]{outline:none}.mjr-rating-star[data-v-6d012325]:hover:not(:disabled){transform:scale(1.2)}.mjr-rating-star[data-v-6d012325]:focus-visible{outline:2px solid var(--focus-outline-color, #4dabf7);outline-offset:2px;border-radius:2px}.mjr-grid-skeleton-layout[data-v-d9ff3613]{display:grid;grid-template-columns:repeat(auto-fill,minmax(132px,1fr));gap:12px}.mjr-grid-skeleton-card[data-v-d9ff3613]{border-radius:12px;border:1px solid rgba(255,255,255,.22);background:#c0c6ce33;overflow:hidden;min-height:146px;box-shadow:0 6px 18px #0000003d}.mjr-grid-skeleton-thumb[data-v-d9ff3613]{aspect-ratio:1 / 1;width:100%;background:linear-gradient(90deg,#9ca2ab85,#dce1e8b8 45%,#9ca2ab85);background-size:240% 100%;animation:mjr-grid-skeleton-shimmer-d9ff3613 1.2s linear infinite}.mjr-grid-skeleton-line[data-v-d9ff3613]{height:10px;margin:8px 10px;border-radius:8px;background:linear-gradient(90deg,#a4aab37a,#d6dbe2b3 45%,#a4aab37a);background-size:240% 100%;animation:mjr-grid-skeleton-shimmer-d9ff3613 1.2s linear infinite}.mjr-grid-skeleton-line--title[data-v-d9ff3613]{width:72%}.mjr-grid-skeleton-line--meta[data-v-d9ff3613]{width:48%;margin-top:2px;margin-bottom:10px}@keyframes mjr-grid-skeleton-shimmer-d9ff3613{0%{background-position:100% 0}to{background-position:-100% 0}} +.mjr-rating-badge[data-v-821bf1b1]{position:absolute;top:6px;right:6px;background:#0000008c;border:1px solid rgba(255,255,255,.12);padding:2px 6px;border-radius:6px;font-size:13px;letter-spacing:1px;display:inline-flex;align-items:center;justify-content:center;pointer-events:none;z-index:10;text-shadow:0 2px 6px rgba(0,0,0,.6);box-shadow:0 6px 18px #00000040;animation:mjr-fade-in-821bf1b1 .2s ease-out}@keyframes mjr-fade-in-821bf1b1{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.mjr-tags-badge[data-v-15044260]{position:absolute;bottom:6px;left:6px;padding:3px 6px;border-radius:4px;background:#000c;font-size:9px;max-width:calc(100% - 56px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;z-index:10;box-shadow:0 2px 4px #0000004d;animation:mjr-fade-in-15044260 .2s ease-out}@keyframes mjr-fade-in-15044260{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.mjr-gentime-badge[data-v-60fe3677]{position:absolute;bottom:6px;right:6px;padding:2px 6px;border-radius:4px;font-size:10px;font-weight:800;letter-spacing:.015em;line-height:1.1;background:#0000008c;border:1px solid rgba(255,255,255,.12);pointer-events:none;z-index:10;box-shadow:0 2px 4px #0000004d;text-shadow:0 1px 2px rgba(0,0,0,.9),0 0 10px color-mix(in srgb,currentColor 35%,transparent);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px)}.mjr-popover-row[data-v-d1ebebd4]{display:grid;grid-template-columns:110px 1fr;gap:8px;align-items:center;margin-bottom:8px}.mjr-popover-row--3col[data-v-d1ebebd4]{grid-template-columns:110px 1fr 1fr}.mjr-popover-label[data-v-d1ebebd4]{font-size:12px;color:var(--mjr-muted, var(--descrip-text, rgba(255, 255, 255, .65)));white-space:nowrap}.mjr-popover-toggle[data-v-d1ebebd4]{display:flex;align-items:center;gap:6px;cursor:pointer;font-size:12px;color:var(--fg-color, #e6edf7)}.mjr-filter-group-toggle[data-v-d1ebebd4]{width:100%;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:0;margin:0 0 10px;border:0;background:transparent;color:inherit;cursor:pointer;text-align:left}.mjr-filter-group-title[data-v-d1ebebd4]{font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.mjr-filter-group-chevron[data-v-d1ebebd4]{font-size:12px;line-height:1;color:var(--mjr-muted, var(--descrip-text, rgba(255, 255, 255, .65)))}.mjr-filter-group-body[data-v-d1ebebd4]{padding-top:2px}.mjr-filter-group[data-v-d1ebebd4]:not(.is-open){padding-bottom:8px}.mjr-filter-group:not(.is-open) .mjr-filter-group-toggle[data-v-d1ebebd4]{margin-bottom:0}.mjr-rating-star[data-v-6d012325]{outline:none}.mjr-rating-star[data-v-6d012325]:hover:not(:disabled){transform:scale(1.2)}.mjr-rating-star[data-v-6d012325]:focus-visible{outline:2px solid var(--focus-outline-color, #4dabf7);outline-offset:2px;border-radius:2px}.mjr-grid-skeleton-layout[data-v-c8da1cb5]{display:grid;grid-template-columns:repeat(auto-fill,minmax(132px,1fr));gap:12px}.mjr-grid-skeleton-card[data-v-c8da1cb5]{border-radius:12px;border:1px solid rgba(255,255,255,.22);background:#c0c6ce33;overflow:hidden;min-height:146px;box-shadow:0 6px 18px #0000003d}.mjr-grid-skeleton-thumb[data-v-c8da1cb5]{aspect-ratio:1 / 1;width:100%;background:linear-gradient(90deg,#9ca2ab85,#dce1e8b8 45%,#9ca2ab85);background-size:240% 100%;animation:mjr-grid-skeleton-shimmer-c8da1cb5 1.2s linear infinite}.mjr-grid-skeleton-line[data-v-c8da1cb5]{height:10px;margin:8px 10px;border-radius:8px;background:linear-gradient(90deg,#a4aab37a,#d6dbe2b3 45%,#a4aab37a);background-size:240% 100%;animation:mjr-grid-skeleton-shimmer-c8da1cb5 1.2s linear infinite}.mjr-grid-skeleton-line--title[data-v-c8da1cb5]{width:72%}.mjr-grid-skeleton-line--meta[data-v-c8da1cb5]{width:48%;margin-top:2px;margin-bottom:10px}@keyframes mjr-grid-skeleton-shimmer-c8da1cb5{0%{background-position:100% 0}to{background-position:-100% 0}} diff --git a/js_dist/chunks/FloatingViewer-BUg810bV.js b/js_dist/chunks/FloatingViewer-BUg810bV.js deleted file mode 100644 index 938335f1..00000000 --- a/js_dist/chunks/FloatingViewer-BUg810bV.js +++ /dev/null @@ -1,2748 +0,0 @@ -import { p as Dt, M as Ut, c as zt, q as $t, t as Wt, A as q, u as w, v as I, x as Z, y as vt, z as Nt, B as Kt, C as Xt, D as Q, E as W, n as qt, s as st, F as dt, G as wt, H as ut, I as pt, d as it, J as Yt, K as Zt } from "./entry-CuODMrGh.js"; -import { ensureViewerMetadataAsset as tt } from "./genInfo-CgFRoaPM.js"; -const E = Object.freeze({ - SIMPLE: "simple", - AB: "ab", - SIDE: "side", - GRID: "grid" -}), rt = 0.25, at = 8, Jt = 8e-4, J = 8, Qt = "C", Ft = "L", It = "K", te = "N", ee = "Esc", et = 30; -function lt(t) { - const e = Number(t); - if (!Number.isFinite(e) || e < 0) return "0:00"; - const n = Math.floor(e), o = Math.floor(n / 3600), i = Math.floor(n % 3600 / 60), s = n % 60; - return o > 0 ? `${o}:${String(i).padStart(2, "0")}:${String(s).padStart(2, "0")}` : `${i}:${String(s).padStart(2, "0")}`; -} -function ht(t) { - var e, n; - try { - const o = (e = t == null ? void 0 : t.play) == null ? void 0 : e.call(t); - o && typeof o.catch == "function" && o.catch(() => { - }); - } catch (o) { - (n = console.debug) == null || n.call(console, o); - } -} -function ne(t, e) { - const n = Math.floor(Number(t) || 0), o = Math.max(0, Math.floor(Number(e) || 0)); - return n < 0 ? 0 : o > 0 && n > o ? o : n; -} -function _t(t, e) { - const n = Number((t == null ? void 0 : t.currentTime) || 0), o = Number(e) > 0 ? Number(e) : et; - return Math.max(0, Math.floor(n * o)); -} -function Lt(t, e) { - const n = Number((t == null ? void 0 : t.duration) || 0), o = Number(e) > 0 ? Number(e) : et; - return !Number.isFinite(n) || n <= 0 ? 0 : Math.max(0, Math.floor(n * o)); -} -function oe(t, e, n) { - var c; - const o = Number(n) > 0 ? Number(n) : et, i = Lt(t, o), l = ne(e, i) / o; - try { - t.currentTime = Math.max(0, l); - } catch (d) { - (c = console.debug) == null || c.call(console, d); - } -} -function se(t) { - return t instanceof HTMLMediaElement; -} -function ie(t, e) { - return String(t || "").toLowerCase() === "video" ? !0 : e instanceof HTMLVideoElement; -} -function re(t, e) { - return String(t || "").toLowerCase() === "audio" ? !0 : e instanceof HTMLAudioElement; -} -function ae(t) { - const e = String(t || "").toLowerCase(); - return e === "gif" || e === "animated-image"; -} -function le(t) { - var e; - try { - const n = Number((t == null ? void 0 : t.naturalWidth) || (t == null ? void 0 : t.width) || 0), o = Number((t == null ? void 0 : t.naturalHeight) || (t == null ? void 0 : t.height) || 0); - if (!(n > 0 && o > 0)) return ""; - const i = document.createElement("canvas"); - i.width = n, i.height = o; - const s = i.getContext("2d"); - return s ? (s.drawImage(t, 0, 0, n, o), i.toDataURL("image/png")) : ""; - } catch (n) { - return (e = console.debug) == null || e.call(console, n), ""; - } -} -function ct(t, e = null, { kind: n = "" } = {}) { - var ft; - if (!t || t._mjrSimplePlayerMounted) return (t == null ? void 0 : t.parentElement) || null; - t._mjrSimplePlayerMounted = !0; - const o = Dt(e) || et, i = se(t), s = ie(n, t), l = re(n, t), c = ae(n), d = document.createElement("div"); - d.className = "mjr-mfv-simple-player", d.tabIndex = 0, d.setAttribute("role", "group"), d.setAttribute("aria-label", "Media player"), l && d.classList.add("is-audio"), c && d.classList.add("is-animated-image"); - const r = document.createElement("div"); - r.className = "mjr-mfv-simple-player-controls"; - const a = document.createElement("input"); - a.type = "range", a.className = "mjr-mfv-simple-player-seek", a.min = "0", a.max = "1000", a.step = "1", a.value = "0", a.setAttribute("aria-label", "Seek"), i || (a.disabled = !0, a.classList.add("is-disabled")); - const u = document.createElement("div"); - u.className = "mjr-mfv-simple-player-row"; - const f = document.createElement("button"); - f.type = "button", f.className = "mjr-icon-btn mjr-mfv-simple-player-btn", f.setAttribute("aria-label", "Play/Pause"); - const m = document.createElement("i"); - m.className = "pi pi-pause", m.setAttribute("aria-hidden", "true"), f.appendChild(m); - const h = document.createElement("button"); - h.type = "button", h.className = "mjr-icon-btn mjr-mfv-simple-player-btn", h.setAttribute("aria-label", "Step back"); - const p = document.createElement("i"); - p.className = "pi pi-step-backward", p.setAttribute("aria-hidden", "true"), h.appendChild(p); - const g = document.createElement("button"); - g.type = "button", g.className = "mjr-icon-btn mjr-mfv-simple-player-btn", g.setAttribute("aria-label", "Step forward"); - const y = document.createElement("i"); - y.className = "pi pi-step-forward", y.setAttribute("aria-hidden", "true"), g.appendChild(y); - const S = document.createElement("div"); - S.className = "mjr-mfv-simple-player-time", S.textContent = "0:00 / 0:00"; - const _ = document.createElement("div"); - _.className = "mjr-mfv-simple-player-frame", _.textContent = "F: 0", s || (_.style.display = "none"); - const C = document.createElement("button"); - C.type = "button", C.className = "mjr-icon-btn mjr-mfv-simple-player-btn", C.setAttribute("aria-label", "Mute/Unmute"); - const A = document.createElement("i"); - if (A.className = "pi pi-volume-up", A.setAttribute("aria-hidden", "true"), C.appendChild(A), s || (h.disabled = !0, g.disabled = !0, h.classList.add("is-disabled"), g.classList.add("is-disabled")), u.appendChild(h), u.appendChild(f), u.appendChild(g), u.appendChild(S), u.appendChild(_), u.appendChild(C), r.appendChild(a), r.appendChild(u), d.appendChild(t), l) { - const b = document.createElement("div"); - b.className = "mjr-mfv-simple-player-audio-backdrop", b.textContent = String((e == null ? void 0 : e.filename) || "Audio"), d.appendChild(b); - } - d.appendChild(r); - try { - t instanceof HTMLMediaElement && (t.controls = !1, t.playsInline = !0, t.loop = !0, t.muted = !0, t.autoplay = !0); - } catch (b) { - (ft = console.debug) == null || ft.call(console, b); - } - const M = c ? String((t == null ? void 0 : t.src) || "") : ""; - let B = !1, T = ""; - const k = () => { - if (i) { - m.className = t.paused ? "pi pi-play" : "pi pi-pause"; - return; - } - if (c) { - m.className = B ? "pi pi-play" : "pi pi-pause"; - return; - } - m.className = "pi pi-play"; - }, R = () => { - if (t instanceof HTMLMediaElement) { - A.className = t.muted ? "pi pi-volume-off" : "pi pi-volume-up"; - return; - } - A.className = "pi pi-volume-off", C.disabled = !0, C.classList.add("is-disabled"); - }, L = () => { - if (!s || !(t instanceof HTMLVideoElement)) return; - const b = _t(t, o), P = Lt(t, o); - _.textContent = P > 0 ? `F: ${b}/${P}` : `F: ${b}`; - }, D = () => { - const b = Math.max(0, Math.min(100, Number(a.value) / 1e3 * 100)); - a.style.setProperty("--mjr-seek-pct", `${b}%`); - }, G = () => { - if (!i) { - S.textContent = c ? "Animated" : "Preview", a.value = "0", D(); - return; - } - const b = Number(t.currentTime || 0), P = Number(t.duration || 0); - if (Number.isFinite(P) && P > 0) { - const x = Math.max(0, Math.min(1, b / P)); - a.value = String(Math.round(x * 1e3)), S.textContent = `${lt(b)} / ${lt(P)}`; - } else - a.value = "0", S.textContent = `${lt(b)} / 0:00`; - D(); - }, K = (b) => { - var P; - try { - (P = b == null ? void 0 : b.stopPropagation) == null || P.call(b); - } catch { - } - }, mt = (b) => { - var P, x; - K(b); - try { - if (i) - t.paused ? ht(t) : (P = t.pause) == null || P.call(t); - else if (c) - if (!B) - T || (T = le(t)), T && (t.src = T), B = !0; - else { - const j = M ? `${M}${M.includes("?") ? "&" : "?"}mjr_anim=${Date.now()}` : t.src; - t.src = j, B = !1; - } - } catch (j) { - (x = console.debug) == null || x.call(console, j); - } - k(); - }, Y = (b, P) => { - var j, V; - if (K(P), !s || !(t instanceof HTMLVideoElement)) return; - try { - (j = t.pause) == null || j.call(t); - } catch (ot) { - (V = console.debug) == null || V.call(console, ot); - } - const x = _t(t, o); - oe(t, x + b, o), k(), L(), G(); - }, Gt = (b) => { - var P; - if (K(b), t instanceof HTMLMediaElement) { - try { - t.muted = !t.muted; - } catch (x) { - (P = console.debug) == null || P.call(console, x); - } - R(); - } - }, Ot = (b) => { - var j; - if (K(b), !i) return; - D(); - const P = Number(t.duration || 0); - if (!Number.isFinite(P) || P <= 0) return; - const x = Math.max(0, Math.min(1, Number(a.value) / 1e3)); - try { - t.currentTime = P * x; - } catch (V) { - (j = console.debug) == null || j.call(console, V); - } - L(), G(); - }, nt = (b) => K(b), Rt = (b) => { - var P, x, j, V; - try { - if ((x = (P = b == null ? void 0 : b.target) == null ? void 0 : P.closest) != null && x.call(P, "button, input, textarea, select")) return; - (j = d.focus) == null || j.call(d, { preventScroll: !0 }); - } catch (ot) { - (V = console.debug) == null || V.call(console, ot); - } - }, Ht = (b) => { - var x, j, V; - const P = String((b == null ? void 0 : b.key) || ""); - if (!(!P || b != null && b.altKey || b != null && b.ctrlKey || b != null && b.metaKey)) { - if (P === " " || P === "Spacebar") { - (x = b.preventDefault) == null || x.call(b), mt(b); - return; - } - if (P === "ArrowLeft") { - if (!s) return; - (j = b.preventDefault) == null || j.call(b), Y(-1, b); - return; - } - if (P === "ArrowRight") { - if (!s) return; - (V = b.preventDefault) == null || V.call(b), Y(1, b); - } - } - }; - return f.addEventListener("click", mt), h.addEventListener("click", (b) => Y(-1, b)), g.addEventListener("click", (b) => Y(1, b)), C.addEventListener("click", Gt), a.addEventListener("input", Ot), r.addEventListener("pointerdown", nt), r.addEventListener("click", nt), r.addEventListener("dblclick", nt), d.addEventListener("pointerdown", Rt), d.addEventListener("keydown", Ht), t instanceof HTMLMediaElement && (t.addEventListener("play", k, { passive: !0 }), t.addEventListener("pause", k, { passive: !0 }), t.addEventListener( - "timeupdate", - () => { - L(), G(); - }, - { passive: !0 } - ), t.addEventListener( - "seeked", - () => { - L(), G(); - }, - { passive: !0 } - ), t.addEventListener( - "loadedmetadata", - () => { - L(), G(); - }, - { passive: !0 } - )), ht(t), k(), R(), L(), G(), d; -} -const ce = /* @__PURE__ */ new Set([".mp4", ".webm", ".mov", ".avi", ".mkv"]), de = /* @__PURE__ */ new Set([".mp3", ".wav", ".flac", ".ogg", ".m4a", ".aac", ".opus", ".wma"]); -function kt(t) { - try { - const e = String(t || "").trim(), n = e.lastIndexOf("."); - return n >= 0 ? e.slice(n).toLowerCase() : ""; - } catch { - return ""; - } -} -function H(t) { - const e = String((t == null ? void 0 : t.kind) || "").toLowerCase(); - if (e === "video") return "video"; - if (e === "audio") return "audio"; - if (e === "model3d") return "model3d"; - const n = kt((t == null ? void 0 : t.filename) || ""); - return n === ".gif" ? "gif" : ce.has(n) ? "video" : de.has(n) ? "audio" : Ut.has(n) ? "model3d" : "image"; -} -function xt(t) { - return t ? t.url ? String(t.url) : t.filename && t.id == null ? $t(t.filename, t.subfolder || "", t.type || "output") : t.filename && Wt(t) || "" : ""; -} -function O(t = "No media — select assets in the grid") { - const e = document.createElement("div"); - return e.className = "mjr-mfv-empty", e.textContent = t, e; -} -function U(t, e) { - const n = document.createElement("div"); - return n.className = `mjr-mfv-label label-${e}`, n.textContent = t, n; -} -function gt(t) { - var e; - if (!(!t || typeof t.play != "function")) - try { - const n = t.play(); - n && typeof n.catch == "function" && n.catch(() => { - }); - } catch (n) { - (e = console.debug) == null || e.call(console, n); - } -} -function ue(t, e) { - var o, i; - let n = t && t.nodeType === 1 ? t : (t == null ? void 0 : t.parentElement) || null; - for (; n && n !== e; ) { - try { - const s = (o = window.getComputedStyle) == null ? void 0 : o.call(window, n), l = /(auto|scroll|overlay)/.test(String((s == null ? void 0 : s.overflowY) || "")), c = /(auto|scroll|overlay)/.test(String((s == null ? void 0 : s.overflowX) || "")); - if (l || c) - return n; - } catch (s) { - (i = console.debug) == null || i.call(console, s); - } - n = n.parentElement || null; - } - return null; -} -function pe(t, e, n) { - if (!t) return !1; - if (Math.abs(Number(n) || 0) >= Math.abs(Number(e) || 0)) { - const s = Number(t.scrollTop || 0), l = Math.max(0, Number(t.scrollHeight || 0) - Number(t.clientHeight || 0)); - if (n < 0 && s > 0 || n > 0 && s < l) return !0; - } - const o = Number(t.scrollLeft || 0), i = Math.max(0, Number(t.scrollWidth || 0) - Number(t.clientWidth || 0)); - return e < 0 && o > 0 || e > 0 && o < i; -} -function me(t) { - var e, n, o, i; - if (t) - try { - const s = (e = t.querySelectorAll) == null ? void 0 : e.call(t, "video, audio"); - if (!s || !s.length) return; - for (const l of s) - try { - (n = l.pause) == null || n.call(l); - } catch (c) { - (o = console.debug) == null || o.call(console, c); - } - } catch (s) { - (i = console.debug) == null || i.call(console, s); - } -} -function z(t, { fill: e = !1 } = {}) { - var d, r; - const n = xt(t); - if (!n) return null; - const o = H(t), i = `mjr-mfv-media mjr-mfv-media--fit-height${e ? " mjr-mfv-media--fill" : ""}`, l = kt((t == null ? void 0 : t.filename) || "") === ".webp" && Number((t == null ? void 0 : t.duration) ?? ((d = t == null ? void 0 : t.metadata_raw) == null ? void 0 : d.duration) ?? 0) > 0; - if (o === "audio") { - const a = document.createElement("audio"); - a.className = i, a.src = n, a.controls = !1, a.autoplay = !0, a.preload = "metadata", a.loop = !0, a.muted = !0; - try { - a.addEventListener("loadedmetadata", () => gt(a), { once: !0 }); - } catch (f) { - (r = console.debug) == null || r.call(console, f); - } - return gt(a), ct(a, t, { kind: "audio" }) || a; - } - if (o === "video") { - const a = document.createElement("video"); - return a.className = i, a.src = n, a.controls = !1, a.loop = !0, a.muted = !0, a.autoplay = !0, a.playsInline = !0, ct(a, t, { kind: "video" }) || a; - } - if (o === "model3d") - return zt(t, n, { - hostClassName: `mjr-model3d-host mjr-mfv-model3d-host${e ? " mjr-mfv-model3d-host--fill" : ""}`, - canvasClassName: `mjr-mfv-media mjr-model3d-render-canvas${e ? " mjr-mfv-media--fill" : ""}`, - hintText: "Rotate: left drag Pan: right drag Zoom: wheel or middle drag", - disableViewerTransform: !0, - pauseDuringExecution: !!q.FLOATING_VIEWER_PAUSE_DURING_EXECUTION - }); - const c = document.createElement("img"); - return c.className = i, c.src = n, c.alt = String((t == null ? void 0 : t.filename) || ""), c.draggable = !1, (o === "gif" || l) && ct(c, t, { - kind: o === "gif" ? "gif" : "animated-image" - }) || c; -} -function jt(t, e, n, o, i, s) { - t.beginPath(), typeof t.roundRect == "function" ? t.roundRect(e, n, o, i, s) : (t.moveTo(e + s, n), t.lineTo(e + o - s, n), t.quadraticCurveTo(e + o, n, e + o, n + s), t.lineTo(e + o, n + i - s), t.quadraticCurveTo(e + o, n + i, e + o - s, n + i), t.lineTo(e + s, n + i), t.quadraticCurveTo(e, n + i, e, n + i - s), t.lineTo(e, n + s), t.quadraticCurveTo(e, n, e + s, n), t.closePath()); -} -function X(t, e, n, o) { - t.save(), t.font = "bold 10px system-ui, sans-serif"; - const i = 5, s = t.measureText(e).width; - t.fillStyle = "rgba(0,0,0,0.58)", jt(t, n, o, s + i * 2, 18, 4), t.fill(), t.fillStyle = "#fff", t.fillText(e, n + i, o + 13), t.restore(); -} -function fe(t, e) { - switch (String((t == null ? void 0 : t.type) || "").toLowerCase()) { - case "number": - return he(t, e); - case "combo": - return _e(t, e); - case "text": - case "string": - case "customtext": - return ge(t, e); - case "toggle": - return be(t, e); - default: - return ye(t); - } -} -function v(t, e) { - var o, i, s, l, c, d, r; - if (!t) return !1; - const n = String(t.type || "").toLowerCase(); - if (n === "number") { - const a = Number(e); - if (Number.isNaN(a)) return !1; - const u = t.options ?? {}, f = u.min ?? -1 / 0, m = u.max ?? 1 / 0; - t.value = Math.min(m, Math.max(f, a)); - } else n === "toggle" ? t.value = !!e : t.value = e; - try { - (o = t.callback) == null || o.call(t, t.value); - } catch (a) { - (i = console.debug) == null || i.call(console, a); - } - try { - const a = w(); - (l = (s = a == null ? void 0 : a.canvas) == null ? void 0 : s.setDirty) == null || l.call(s, !0, !0), (d = (c = a == null ? void 0 : a.graph) == null ? void 0 : c.setDirtyCanvas) == null || d.call(c, !0, !0); - } catch (a) { - (r = console.debug) == null || r.call(console, a); - } - return !0; -} -function he(t, e) { - const n = document.createElement("input"); - n.type = "number", n.className = "mjr-ws-input", n.value = t.value ?? ""; - const o = t.options ?? {}; - return o.min != null && (n.min = String(o.min)), o.max != null && (n.max = String(o.max)), o.step != null && (n.step = String(o.step)), n.addEventListener("input", () => { - const i = n.value; - i === "" || i === "-" || i === "." || i.endsWith(".") || (v(t, i), e == null || e(t.value)); - }), n.addEventListener("change", () => { - v(t, n.value) && (n.value = t.value, e == null || e(t.value)); - }), n; -} -function _e(t, e) { - var i; - const n = document.createElement("select"); - n.className = "mjr-ws-input"; - let o = ((i = t.options) == null ? void 0 : i.values) ?? []; - if (typeof o == "function") - try { - o = o() ?? []; - } catch { - o = []; - } - Array.isArray(o) || (o = []); - for (const s of o) { - const l = document.createElement("option"), c = typeof s == "string" ? s : (s == null ? void 0 : s.content) ?? (s == null ? void 0 : s.value) ?? (s == null ? void 0 : s.text) ?? String(s); - l.value = c, l.textContent = c, c === String(t.value) && (l.selected = !0), n.appendChild(l); - } - return n.addEventListener("change", () => { - v(t, n.value) && (e == null || e(t.value)); - }), n; -} -function ge(t, e) { - const o = document.createElement("div"); - o.className = "mjr-ws-text-wrapper"; - const i = document.createElement("textarea"); - i.className = "mjr-ws-input mjr-ws-textarea", i.value = t.value ?? "", i.rows = 2; - const s = document.createElement("button"); - s.type = "button", s.className = "mjr-ws-expand-btn", s.textContent = "Expand", s.style.display = "none"; - let l = !1; - const c = () => { - i.style.height = "auto"; - const d = i.scrollHeight; - l ? (i.style.height = d + "px", i.style.maxHeight = "none", s.textContent = "Collapse") : (i.style.height = Math.min(d, 80) + "px", i.style.maxHeight = "80px", s.textContent = "Expand"), s.style.display = d > 80 ? "" : "none"; - }; - return i.addEventListener("change", () => { - v(t, i.value) && (e == null || e(t.value)); - }), i.addEventListener("input", () => { - v(t, i.value), e == null || e(t.value), c(); - }), s.addEventListener("click", () => { - l = !l, c(); - }), o.appendChild(i), o.appendChild(s), o._mjrAutoFit = c, i._mjrAutoFit = c, requestAnimationFrame(c), o; -} -function be(t, e) { - const n = document.createElement("label"); - n.className = "mjr-ws-toggle-label"; - const o = document.createElement("input"); - return o.type = "checkbox", o.className = "mjr-ws-checkbox", o.checked = !!t.value, o.addEventListener("change", () => { - v(t, o.checked) && (e == null || e(t.value)); - }), n.appendChild(o), n; -} -function ye(t) { - const e = document.createElement("input"); - return e.type = "text", e.className = "mjr-ws-input mjr-ws-readonly", e.value = t.value != null ? String(t.value) : "", e.readOnly = !0, e.tabIndex = -1, e; -} -const Ce = /* @__PURE__ */ new Set(["imageupload", "button", "hidden"]); -class Se { - /** - * @param {object} node LGraphNode instance - * @param {object} [opts] - * @param {() => void} [opts.onLocate] Custom locate handler (optional) - */ - constructor(e, n = {}) { - this._node = e, this._onLocate = n.onLocate ?? null, this._el = null, this._inputMap = /* @__PURE__ */ new Map(); - } - get el() { - return this._el || (this._el = this._render()), this._el; - } - /** Re-read widget values from the live graph and update inputs. */ - syncFromGraph() { - var o, i, s, l; - if (!((o = this._node) != null && o.widgets)) return; - const e = ((i = this._el) == null ? void 0 : i.ownerDocument) || document, n = (e == null ? void 0 : e.activeElement) || null; - for (const c of this._node.widgets) { - const d = this._inputMap.get(c.name); - let r = Ae(d); - if (r) - if (r.type === "checkbox") { - const a = !!c.value; - r.checked !== a && (r.checked = a); - } else { - const a = c.value != null ? String(c.value) : ""; - if (String(r.value ?? "") === a || n && r === n) continue; - r.value = a, (s = d == null ? void 0 : d._mjrAutoFit) == null || s.call(d), (l = r == null ? void 0 : r._mjrAutoFit) == null || l.call(r); - } - } - } - dispose() { - var e; - (e = this._el) == null || e.remove(), this._el = null, this._inputMap.clear(); - } - // ── Private ─────────────────────────────────────────────────────────────── - _render() { - var a; - const e = this._node, n = document.createElement("section"); - n.className = "mjr-ws-node", n.dataset.nodeId = String(e.id ?? ""); - const o = document.createElement("div"); - o.className = "mjr-ws-node-header"; - const i = document.createElement("span"); - i.className = "mjr-ws-node-title", i.textContent = e.title || e.type || `Node #${e.id}`, o.appendChild(i); - const s = document.createElement("button"); - s.type = "button", s.className = "mjr-icon-btn mjr-ws-locate", s.title = "Locate on canvas"; - const l = document.createElement("i"); - l.className = "pi pi-map-marker", l.setAttribute("aria-hidden", "true"), s.appendChild(l), s.addEventListener("click", () => this._locateNode()), o.appendChild(s), n.appendChild(o); - const c = document.createElement("div"); - c.className = "mjr-ws-node-body"; - const d = e.widgets ?? []; - let r = !1; - for (const u of d) { - const f = String(u.type || "").toLowerCase(); - if (Ce.has(f) || u.hidden || (a = u.options) != null && a.hidden) continue; - r = !0; - const m = f === "text" || f === "string" || f === "customtext", h = document.createElement("div"); - h.className = m ? "mjr-ws-widget-row mjr-ws-widget-row--block" : "mjr-ws-widget-row"; - const p = document.createElement("label"); - p.className = "mjr-ws-widget-label", p.textContent = u.name || ""; - const g = document.createElement("div"); - g.className = "mjr-ws-widget-input"; - const y = fe(u, () => { - }); - g.appendChild(y), this._inputMap.set(u.name, y), h.appendChild(p), h.appendChild(g), c.appendChild(h); - } - if (!r) { - const u = document.createElement("div"); - u.className = "mjr-ws-node-empty", u.textContent = "No editable parameters", c.appendChild(u); - } - return n.appendChild(c), n; - } - _locateNode() { - var n, o, i, s, l, c, d, r; - if (this._onLocate) { - this._onLocate(); - return; - } - const e = this._node; - if (e) - try { - const a = w(), u = a == null ? void 0 : a.canvas; - if (!u) return; - if (typeof u.centerOnNode == "function") - u.centerOnNode(e); - else if (u.ds && e.pos) { - const f = ((n = u.canvas) == null ? void 0 : n.width) || ((o = u.element) == null ? void 0 : o.width) || 800, m = ((i = u.canvas) == null ? void 0 : i.height) || ((s = u.element) == null ? void 0 : s.height) || 600; - u.ds.offset[0] = -e.pos[0] - (((l = e.size) == null ? void 0 : l[0]) || 0) / 2 + f / 2, u.ds.offset[1] = -e.pos[1] - (((c = e.size) == null ? void 0 : c[1]) || 0) / 2 + m / 2, (d = u.setDirty) == null || d.call(u, !0, !0); - } - } catch (a) { - (r = console.debug) == null || r.call(console, "[MFV sidebar] locateNode error", a); - } - } -} -function Ae(t) { - var e, n, o; - return t ? (n = (e = t.classList) == null ? void 0 : e.contains) != null && n.call(e, "mjr-ws-text-wrapper") ? ((o = t.querySelector) == null ? void 0 : o.call(t, "textarea")) ?? t : t : null; -} -const Ee = 16; -class Pe { - /** - * @param {object} opts - * @param {HTMLElement} opts.hostEl The MFV root element to append to - * @param {() => void} [opts.onClose] - */ - constructor({ hostEl: e, onClose: n } = {}) { - this._hostEl = e, this._onClose = n ?? null, this._renderers = [], this._visible = !1, this._selectionKey = "", this._liveSyncHandle = null, this._liveSyncMode = "", this._el = this._build(); - } - get el() { - return this._el; - } - get isVisible() { - return this._visible; - } - show() { - this._visible = !0, this._el.classList.add("open"), this.refresh({ force: !0 }), this._startLiveSync(); - } - hide() { - this._visible = !1, this._el.classList.remove("open"), this._stopLiveSync(); - } - toggle() { - var e; - this._visible ? (this.hide(), (e = this._onClose) == null || e.call(this)) : this.show(); - } - /** Re-read selected nodes and rebuild widget sections. */ - refresh({ force: e = !1 } = {}) { - if (!this._visible) return; - const { key: n, nodes: o } = bt(); - if (!e && n === this._selectionKey && this._renderers.length === o.length) { - this.syncFromGraph({ allowSelectionRefresh: !1 }); - return; - } - if (this._clear(), this._selectionKey = n, !o.length) { - this._showEmpty(); - return; - } - for (const i of o) { - const s = new Se(i); - this._renderers.push(s), this._body.appendChild(s.el); - } - this.syncFromGraph({ allowSelectionRefresh: !1 }); - } - /** Sync existing renderers from graph values without full rebuild. */ - syncFromGraph({ allowSelectionRefresh: e = !0 } = {}) { - if (!this._visible) return; - const { key: n } = bt(); - if (e && n !== this._selectionKey) { - this.refresh({ force: !0 }); - return; - } - for (const o of this._renderers) o.syncFromGraph(); - } - dispose() { - var e; - this._stopLiveSync(), this._clear(), (e = this._el) == null || e.remove(); - } - // ── Private ─────────────────────────────────────────────────────────────── - _build() { - const e = document.createElement("div"); - e.className = "mjr-ws-sidebar"; - const n = document.createElement("div"); - n.className = "mjr-ws-sidebar-header"; - const o = document.createElement("span"); - o.className = "mjr-ws-sidebar-title", o.textContent = "Node Parameters", n.appendChild(o); - const i = document.createElement("button"); - i.type = "button", i.className = "mjr-icon-btn", i.title = "Close sidebar"; - const s = document.createElement("i"); - return s.className = "pi pi-times", s.setAttribute("aria-hidden", "true"), i.appendChild(s), i.addEventListener("click", () => { - var l; - this.hide(), (l = this._onClose) == null || l.call(this); - }), n.appendChild(i), e.appendChild(n), this._body = document.createElement("div"), this._body.className = "mjr-ws-sidebar-body", e.appendChild(this._body), e; - } - _clear() { - for (const e of this._renderers) e.dispose(); - this._renderers = [], this._body && (this._body.innerHTML = ""); - } - _showEmpty() { - const e = document.createElement("div"); - e.className = "mjr-ws-sidebar-empty", e.textContent = "Select nodes on the canvas to edit their parameters", this._body.appendChild(e); - } - _startLiveSync() { - if (this._liveSyncHandle != null) return; - const e = yt(this._el), n = () => { - this._liveSyncHandle = null, this._liveSyncMode = "", this._visible && (this.syncFromGraph(), this._startLiveSync()); - }; - if (typeof e.requestAnimationFrame == "function") { - this._liveSyncMode = "raf", this._liveSyncHandle = e.requestAnimationFrame(n); - return; - } - this._liveSyncMode = "timeout", this._liveSyncHandle = e.setTimeout(n, Ee); - } - _stopLiveSync() { - var n; - if (this._liveSyncHandle == null) return; - const e = yt(this._el); - try { - this._liveSyncMode === "raf" && typeof e.cancelAnimationFrame == "function" ? e.cancelAnimationFrame(this._liveSyncHandle) : typeof e.clearTimeout == "function" && e.clearTimeout(this._liveSyncHandle); - } catch (o) { - (n = console.debug) == null || n.call(console, o); - } - this._liveSyncHandle = null, this._liveSyncMode = ""; - } -} -function Be() { - var t, e, n; - try { - const o = w(), i = ((t = o == null ? void 0 : o.canvas) == null ? void 0 : t.selected_nodes) ?? ((e = o == null ? void 0 : o.canvas) == null ? void 0 : e.selectedNodes) ?? null; - if (!i) return []; - if (Array.isArray(i)) return i.filter(Boolean); - if (i instanceof Map) return Array.from(i.values()).filter(Boolean); - if (typeof i == "object") return Object.values(i).filter(Boolean); - } catch (o) { - (n = console.debug) == null || n.call(console, "[MFV sidebar] _getSelectedNodes error", o); - } - return []; -} -function bt() { - const t = Be(); - return { key: t.map((n) => String((n == null ? void 0 : n.id) ?? "")).filter(Boolean).join("|"), nodes: t }; -} -function yt(t) { - var n; - const e = ((n = t == null ? void 0 : t.ownerDocument) == null ? void 0 : n.defaultView) || null; - return e || (typeof window < "u" ? window : globalThis); -} -const N = Object.freeze({ - IDLE: "idle", - RUNNING: "running", - STOPPING: "stopping", - ERROR: "error" -}), Me = /* @__PURE__ */ new Set(["default", "auto", "latent2rgb", "taesd", "none"]), Ct = "progress-update"; -function Ne() { - const t = document.createElement("div"); - t.className = "mjr-mfv-run-controls"; - const e = document.createElement("button"); - e.type = "button", e.className = "mjr-icon-btn mjr-mfv-run-btn"; - const n = I("tooltip.queuePrompt", "Queue Prompt (Run)"); - e.title = n, e.setAttribute("aria-label", n); - const o = document.createElement("i"); - o.className = "pi pi-play", o.setAttribute("aria-hidden", "true"), e.appendChild(o); - const i = document.createElement("button"); - i.type = "button", i.className = "mjr-icon-btn mjr-mfv-stop-btn"; - const s = document.createElement("i"); - s.className = "pi pi-stop", s.setAttribute("aria-hidden", "true"), i.appendChild(s), t.appendChild(e), t.appendChild(i); - let l = N.IDLE, c = !1, d = !1, r = null; - function a() { - r != null && (clearTimeout(r), r = null); - } - function u(_, { canStop: C = !1 } = {}) { - l = _, e.classList.toggle("running", l === N.RUNNING), e.classList.toggle("stopping", l === N.STOPPING), e.classList.toggle("error", l === N.ERROR), e.disabled = l === N.RUNNING || l === N.STOPPING, i.disabled = !C || l === N.STOPPING, i.classList.toggle("active", C && l !== N.STOPPING), i.classList.toggle("stopping", l === N.STOPPING), l === N.RUNNING || l === N.STOPPING ? o.className = "pi pi-spin pi-spinner" : o.className = "pi pi-play"; - } - function f() { - const _ = I("tooltip.queueStop", "Stop Generation"); - i.title = _, i.setAttribute("aria-label", _); - } - function m(_ = Z.getSnapshot(), { authoritative: C = !1 } = {}) { - const A = Math.max(0, Number(_ == null ? void 0 : _.queue) || 0), M = (_ == null ? void 0 : _.prompt) || null, B = !!(M != null && M.currentlyExecuting), T = !!(M && (M.currentlyExecuting || M.errorDetails)), k = A > 0 || T, R = !!(M != null && M.errorDetails); - C && A === 0 && !M && (c = !1, d = !1); - const L = c || d || B || A > 0; - if ((B || k || A > 0) && (c = !1), R) { - d = !1, a(), u(N.ERROR, { canStop: !1 }); - return; - } - if (d) { - if (!L) { - d = !1, m(_); - return; - } - u(N.STOPPING, { canStop: !1 }); - return; - } - if (c || B || k || A > 0) { - a(), u(N.RUNNING, { canStop: !0 }); - return; - } - a(), u(N.IDLE, { canStop: !1 }); - } - function h() { - c = !1, d = !1, a(), u(N.ERROR, { canStop: !1 }), r = setTimeout(() => { - r = null, m(); - }, 1500); - } - async function p() { - const _ = w(), A = (_ != null && _.api && typeof _.api.interrupt == "function" ? _.api : null) ?? Nt(_); - if (A && typeof A.interrupt == "function") - return await A.interrupt(), { tracked: !0 }; - if (A && typeof A.fetchApi == "function") { - const B = await A.fetchApi("/interrupt", { method: "POST" }); - if (!(B != null && B.ok)) throw new Error(`POST /interrupt failed (${B == null ? void 0 : B.status})`); - return { tracked: !0 }; - } - const M = await fetch("/interrupt", { method: "POST", credentials: "include" }); - if (!M.ok) throw new Error(`POST /interrupt failed (${M.status})`); - return { tracked: !1 }; - } - async function g() { - var _; - if (!(l === N.RUNNING || l === N.STOPPING)) { - c = !0, d = !1, m(); - try { - const C = await Ie(); - C != null && C.tracked || (c = !1), m(); - } catch (C) { - (_ = console.error) == null || _.call(console, "[MFV Run]", C), h(); - } - } - } - async function y() { - var _; - if (l === N.RUNNING) { - d = !0, m(); - try { - const C = await p(); - C != null && C.tracked || (d = !1, c = !1), m(); - } catch (C) { - (_ = console.error) == null || _.call(console, "[MFV Stop]", C), d = !1, m(); - } finally { - } - } - } - f(), i.disabled = !0, e.addEventListener("click", g), i.addEventListener("click", y); - const S = (_) => { - m((_ == null ? void 0 : _.detail) || Z.getSnapshot(), { - authoritative: !0 - }); - }; - return Z.addEventListener(Ct, S), vt({ timeoutMs: 4e3 }).catch((_) => { - var C; - (C = console.debug) == null || C.call(console, _); - }), m(), { - el: t, - dispose() { - a(), e.removeEventListener("click", g), i.removeEventListener("click", y), Z.removeEventListener( - Ct, - S - ); - } - }; -} -function Fe(t = q.MFV_PREVIEW_METHOD) { - const e = String(t || "").trim().toLowerCase(); - return Me.has(e) ? e : "taesd"; -} -function Tt(t, e = q.MFV_PREVIEW_METHOD) { - var i; - const n = Fe(e), o = { - ...(t == null ? void 0 : t.extra_data) || {}, - extra_pnginfo: { - ...((i = t == null ? void 0 : t.extra_data) == null ? void 0 : i.extra_pnginfo) || {} - } - }; - return (t == null ? void 0 : t.workflow) != null && (o.extra_pnginfo.workflow = t.workflow), n !== "default" ? o.preview_method = n : delete o.preview_method, { - ...t, - extra_data: o - }; -} -function St(t, { previewMethod: e = q.MFV_PREVIEW_METHOD, clientId: n = null } = {}) { - const o = Tt(t, e), i = { - prompt: o == null ? void 0 : o.output, - extra_data: (o == null ? void 0 : o.extra_data) || {} - }, s = String(n || "").trim(); - return s && (i.client_id = s), i; -} -function At(t, e) { - const n = [ - t == null ? void 0 : t.clientId, - t == null ? void 0 : t.clientID, - t == null ? void 0 : t.client_id, - e == null ? void 0 : e.clientId, - e == null ? void 0 : e.clientID, - e == null ? void 0 : e.client_id - ]; - for (const o of n) { - const i = String(o || "").trim(); - if (i) return i; - } - return ""; -} -async function Ie() { - const t = w(); - if (!t) throw new Error("ComfyUI app not available"); - const e = typeof t.graphToPrompt == "function" ? await t.graphToPrompt() : null; - if (!(e != null && e.output)) throw new Error("graphToPrompt returned empty output"); - const o = (t != null && t.api && typeof t.api.queuePrompt == "function" ? t.api : null) ?? Nt(t); - if (o && typeof o.queuePrompt == "function") - return await o.queuePrompt(0, Tt(e)), { tracked: !0 }; - if (o && typeof o.fetchApi == "function") { - const s = await o.fetchApi("/prompt", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify( - St(e, { - clientId: At(o, t) - }) - ) - }); - if (!(s != null && s.ok)) throw new Error(`POST /prompt failed (${s == null ? void 0 : s.status})`); - return { tracked: !0 }; - } - if (typeof t.queuePrompt == "function") - return await t.queuePrompt(0), { tracked: !0 }; - const i = await fetch("/prompt", { - method: "POST", - credentials: "include", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify( - St(e, { - clientId: At(null, t) - }) - ) - }); - if (!i.ok) throw new Error(`POST /prompt failed (${i.status})`); - return { tracked: !1 }; -} -function Le(t) { - const e = document.createElement("div"); - return e.className = "mjr-mfv", e.setAttribute("role", "dialog"), e.setAttribute("aria-modal", "false"), e.setAttribute("aria-hidden", "true"), t.element = e, e.appendChild(t._buildHeader()), e.setAttribute("aria-labelledby", t._titleId), e.appendChild(t._buildToolbar()), e.appendChild(Kt(t)), t._contentWrapper = document.createElement("div"), t._contentWrapper.className = "mjr-mfv-content-wrapper", t._applySidebarPosition(), t._contentEl = document.createElement("div"), t._contentEl.className = "mjr-mfv-content", t._contentWrapper.appendChild(t._contentEl), t._contentEl.appendChild(Xt(t)), t._sidebar = new Pe({ - hostEl: e, - onClose: () => t._updateSettingsBtnState(!1) - }), t._contentWrapper.appendChild(t._sidebar.el), e.appendChild(t._contentWrapper), t._rebindControlHandlers(), t._bindPanelInteractions(), t._bindDocumentUiHandlers(), t._onSidebarPosChanged = (n) => { - var o; - ((o = n == null ? void 0 : n.detail) == null ? void 0 : o.key) === "viewer.mfvSidebarPosition" && t._applySidebarPosition(); - }, window.addEventListener("mjr-settings-changed", t._onSidebarPosChanged), t._refresh(), e; -} -function ke(t) { - const e = document.createElement("div"); - e.className = "mjr-mfv-header"; - const n = document.createElement("span"); - n.className = "mjr-mfv-header-title", n.id = t._titleId, n.textContent = "〽️ Majoor Viewer Lite"; - const o = document.createElement("button"); - t._closeBtn = o, o.type = "button", o.className = "mjr-icon-btn mjr-mfv-close-btn", Q(o, I("tooltip.closeViewer", "Close viewer"), ee); - const i = document.createElement("i"); - return i.className = "pi pi-times", i.setAttribute("aria-hidden", "true"), o.appendChild(i), e.appendChild(n), e.appendChild(o), e; -} -function xe(t) { - var u, f; - const e = document.createElement("div"); - e.className = "mjr-mfv-toolbar", t._modeBtn = document.createElement("button"), t._modeBtn.type = "button", t._modeBtn.className = "mjr-icon-btn", t._updateModeBtnUI(), e.appendChild(t._modeBtn), t._pinGroup = document.createElement("div"), t._pinGroup.className = "mjr-mfv-pin-group", t._pinGroup.setAttribute("role", "group"), t._pinGroup.setAttribute("aria-label", "Pin References"), t._pinBtns = {}; - for (const m of ["A", "B", "C", "D"]) { - const h = document.createElement("button"); - h.type = "button", h.className = "mjr-mfv-pin-btn", h.textContent = m, h.dataset.slot = m, h.title = `Pin ${m}`, h.setAttribute("aria-pressed", "false"), t._pinBtns[m] = h, t._pinGroup.appendChild(h); - } - t._updatePinUI(), e.appendChild(t._pinGroup); - const n = document.createElement("div"); - n.className = "mjr-mfv-toolbar-sep", n.setAttribute("aria-hidden", "true"), e.appendChild(n), t._liveBtn = document.createElement("button"), t._liveBtn.type = "button", t._liveBtn.className = "mjr-icon-btn", t._liveBtn.innerHTML = '', t._liveBtn.setAttribute("aria-pressed", "false"), Q( - t._liveBtn, - I("tooltip.liveStreamOff", "Live Stream: OFF — click to follow"), - Ft - ), e.appendChild(t._liveBtn), t._previewBtn = document.createElement("button"), t._previewBtn.type = "button", t._previewBtn.className = "mjr-icon-btn", t._previewBtn.innerHTML = '', t._previewBtn.setAttribute("aria-pressed", "false"), Q( - t._previewBtn, - I( - "tooltip.previewStreamOff", - "KSampler Preview: OFF — click to stream denoising steps" - ), - It - ), e.appendChild(t._previewBtn), t._nodeStreamBtn = document.createElement("button"), t._nodeStreamBtn.type = "button", t._nodeStreamBtn.className = "mjr-icon-btn", t._nodeStreamBtn.innerHTML = '', t._nodeStreamBtn.setAttribute("aria-pressed", "false"), Q( - t._nodeStreamBtn, - I("tooltip.nodeStreamOff", "Node Stream: OFF — click to stream selected node output"), - te - ), e.appendChild(t._nodeStreamBtn), (f = (u = t._nodeStreamBtn).remove) == null || f.call(u), t._nodeStreamBtn = null, t._genBtn = document.createElement("button"), t._genBtn.type = "button", t._genBtn.className = "mjr-icon-btn", t._genBtn.setAttribute("aria-haspopup", "dialog"), t._genBtn.setAttribute("aria-expanded", "false"); - const o = document.createElement("i"); - o.className = "pi pi-info-circle", o.setAttribute("aria-hidden", "true"), t._genBtn.appendChild(o), e.appendChild(t._genBtn), t._updateGenBtnUI(), t._popoutBtn = document.createElement("button"), t._popoutBtn.type = "button", t._popoutBtn.className = "mjr-icon-btn"; - const i = I("tooltip.popOutViewer", "Pop out viewer to separate window"); - t._popoutBtn.title = i, t._popoutBtn.setAttribute("aria-label", i), t._popoutBtn.setAttribute("aria-pressed", "false"); - const s = document.createElement("i"); - s.className = "pi pi-external-link", s.setAttribute("aria-hidden", "true"), t._popoutBtn.appendChild(s), e.appendChild(t._popoutBtn), t._captureBtn = document.createElement("button"), t._captureBtn.type = "button", t._captureBtn.className = "mjr-icon-btn"; - const l = I("tooltip.captureView", "Save view as image"); - t._captureBtn.title = l, t._captureBtn.setAttribute("aria-label", l); - const c = document.createElement("i"); - c.className = "pi pi-download", c.setAttribute("aria-hidden", "true"), t._captureBtn.appendChild(c), e.appendChild(t._captureBtn); - const d = document.createElement("div"); - d.className = "mjr-mfv-toolbar-sep", d.style.marginLeft = "auto", d.setAttribute("aria-hidden", "true"), e.appendChild(d), t._settingsBtn = document.createElement("button"), t._settingsBtn.type = "button", t._settingsBtn.className = "mjr-icon-btn mjr-mfv-settings-btn"; - const r = I("tooltip.nodeParams", "Node Parameters"); - t._settingsBtn.title = r, t._settingsBtn.setAttribute("aria-label", r), t._settingsBtn.setAttribute("aria-pressed", "false"); - const a = document.createElement("i"); - return a.className = "pi pi-sliders-h", a.setAttribute("aria-hidden", "true"), t._settingsBtn.appendChild(a), e.appendChild(t._settingsBtn), t._runHandle = Ne(), e.appendChild(t._runHandle.el), t._handleDocClick = (m) => { - var p, g; - if (!t._genDropdown) return; - const h = m == null ? void 0 : m.target; - (g = (p = t._genBtn) == null ? void 0 : p.contains) != null && g.call(p, h) || t._genDropdown.contains(h) || t._closeGenDropdown(); - }, t._bindDocumentUiHandlers(), e; -} -function je(t) { - var n, o, i, s, l, c, d, r, a, u, f, m; - try { - (n = t._btnAC) == null || n.abort(); - } catch (h) { - (o = console.debug) == null || o.call(console, h); - } - t._btnAC = new AbortController(); - const e = t._btnAC.signal; - (i = t._closeBtn) == null || i.addEventListener( - "click", - () => { - t._dispatchControllerAction("close", W.MFV_CLOSE); - }, - { signal: e } - ), (s = t._modeBtn) == null || s.addEventListener("click", () => t._cycleMode(), { signal: e }), (l = t._pinGroup) == null || l.addEventListener( - "click", - (h) => { - var y, S; - const p = (S = (y = h.target) == null ? void 0 : y.closest) == null ? void 0 : S.call(y, ".mjr-mfv-pin-btn"); - if (!p) return; - const g = p.dataset.slot; - g && (t._pinnedSlots.has(g) ? t._pinnedSlots.delete(g) : t._pinnedSlots.add(g), t._pinnedSlots.has("C") || t._pinnedSlots.has("D") ? t._mode !== E.GRID && t.setMode(E.GRID) : t._pinnedSlots.size > 0 && t._mode === E.SIMPLE && t.setMode(E.AB), t._updatePinUI()); - }, - { signal: e } - ), (c = t._liveBtn) == null || c.addEventListener( - "click", - () => { - t._dispatchControllerAction("toggleLive", W.MFV_LIVE_TOGGLE); - }, - { signal: e } - ), (d = t._previewBtn) == null || d.addEventListener( - "click", - () => { - t._dispatchControllerAction("togglePreview", W.MFV_PREVIEW_TOGGLE); - }, - { signal: e } - ), (r = t._nodeStreamBtn) == null || r.addEventListener( - "click", - () => { - t._dispatchControllerAction("toggleNodeStream", W.MFV_NODESTREAM_TOGGLE); - }, - { signal: e } - ), (a = t._genBtn) == null || a.addEventListener( - "click", - (h) => { - var p, g; - h.stopPropagation(), (g = (p = t._genDropdown) == null ? void 0 : p.classList) != null && g.contains("is-visible") ? t._closeGenDropdown() : t._openGenDropdown(); - }, - { signal: e } - ), (u = t._popoutBtn) == null || u.addEventListener( - "click", - () => { - t._dispatchControllerAction("popOut", W.MFV_POPOUT); - }, - { signal: e } - ), (f = t._captureBtn) == null || f.addEventListener("click", () => t._captureView(), { signal: e }), (m = t._settingsBtn) == null || m.addEventListener( - "click", - () => { - var h, p; - (h = t._sidebar) == null || h.toggle(), t._updateSettingsBtnState(((p = t._sidebar) == null ? void 0 : p.isVisible) ?? !1); - }, - { signal: e } - ); -} -function Te(t, e) { - t._settingsBtn && (t._settingsBtn.classList.toggle("active", !!e), t._settingsBtn.setAttribute("aria-pressed", String(!!e))); -} -function Ve(t) { - var n; - if (!t._contentWrapper) return; - const e = q.MFV_SIDEBAR_POSITION || "right"; - t._contentWrapper.setAttribute("data-sidebar-pos", e), (n = t._sidebar) != null && n.el && t._contentEl && (e === "left" ? t._contentWrapper.insertBefore(t._sidebar.el, t._contentEl) : t._contentWrapper.appendChild(t._sidebar.el)); -} -function Ge(t) { - var e, n, o; - t._closeGenDropdown(); - try { - (n = (e = t._genDropdown) == null ? void 0 : e.remove) == null || n.call(e); - } catch (i) { - (o = console.debug) == null || o.call(console, i); - } - t._genDropdown = null, t._updateGenBtnUI(); -} -function Oe(t) { - var n, o, i; - if (!t._handleDocClick) return; - const e = ((n = t.element) == null ? void 0 : n.ownerDocument) || document; - if (t._docClickHost !== e) { - t._unbindDocumentUiHandlers(); - try { - (o = t._docAC) == null || o.abort(); - } catch (s) { - (i = console.debug) == null || i.call(console, s); - } - t._docAC = new AbortController(), e.addEventListener("click", t._handleDocClick, { signal: t._docAC.signal }), t._docClickHost = e; - } -} -function Re(t) { - var e, n; - try { - (e = t._docAC) == null || e.abort(); - } catch (o) { - (n = console.debug) == null || n.call(console, o); - } - t._docAC = new AbortController(), t._docClickHost = null; -} -function He(t) { - var e, n; - return !!((n = (e = t._genDropdown) == null ? void 0 : e.classList) != null && n.contains("is-visible")); -} -function De(t) { - if (!t.element) return; - t._genDropdown || (t._genDropdown = t._buildGenDropdown(), t.element.appendChild(t._genDropdown)), t._bindDocumentUiHandlers(); - const e = t._genBtn.getBoundingClientRect(), n = t.element.getBoundingClientRect(), o = e.left - n.left, i = e.bottom - n.top + 6; - t._genDropdown.style.left = `${o}px`, t._genDropdown.style.top = `${i}px`, t._genDropdown.classList.add("is-visible"), t._updateGenBtnUI(); -} -function Ue(t) { - t._genDropdown && (t._genDropdown.classList.remove("is-visible"), t._updateGenBtnUI()); -} -function ze(t) { - if (!t._genBtn) return; - const e = t._genInfoSelections.size, n = e > 0, o = t._isGenDropdownOpen(); - t._genBtn.classList.toggle("is-on", n), t._genBtn.classList.toggle("is-open", o); - const i = n ? `Gen Info (${e} field${e > 1 ? "s" : ""} shown)${o ? " — open" : " — click to configure"}` : `Gen Info${o ? " — open" : " — click to show overlay"}`; - t._genBtn.title = i, t._genBtn.setAttribute("aria-label", i), t._genBtn.setAttribute("aria-expanded", String(o)), t._genDropdown ? t._genBtn.setAttribute("aria-controls", t._genDropdownId) : t._genBtn.removeAttribute("aria-controls"); -} -function $e(t) { - const e = document.createElement("div"); - e.className = "mjr-mfv-gen-dropdown", e.id = t._genDropdownId, e.setAttribute("role", "group"), e.setAttribute("aria-label", "Generation info fields"); - const n = [ - ["prompt", "Prompt"], - ["seed", "Seed"], - ["model", "Model"], - ["lora", "LoRA"], - ["sampler", "Sampler"], - ["scheduler", "Scheduler"], - ["cfg", "CFG"], - ["step", "Step"], - ["genTime", "Gen Time"] - ]; - for (const [o, i] of n) { - const s = document.createElement("label"); - s.className = "mjr-mfv-gen-dropdown-row"; - const l = document.createElement("input"); - l.type = "checkbox", l.checked = t._genInfoSelections.has(o), l.addEventListener("change", () => { - l.checked ? t._genInfoSelections.add(o) : t._genInfoSelections.delete(o), t._updateGenBtnUI(), t._refresh(); - }); - const c = document.createElement("span"); - c.textContent = i, s.appendChild(l), s.appendChild(c), e.appendChild(s); - } - return e; -} -function Et(t) { - const e = Number(t); - return !Number.isFinite(e) || e <= 0 ? "" : e >= 60 ? `${(e / 60).toFixed(1)}m` : `${e.toFixed(1)}s`; -} -function We(t) { - const e = String(t || "").trim().toLowerCase(); - if (!e) return 0; - if (e.endsWith("m")) { - const o = Number.parseFloat(e.slice(0, -1)); - return Number.isFinite(o) ? o * 60 : 0; - } - if (e.endsWith("s")) { - const o = Number.parseFloat(e.slice(0, -1)); - return Number.isFinite(o) ? o : 0; - } - const n = Number.parseFloat(e); - return Number.isFinite(n) ? n : 0; -} -function ve(t, e) { - var s, l, c, d; - if (!e) return {}; - try { - const r = e.geninfo ? { geninfo: e.geninfo } : e.metadata || e.metadata_raw || e, a = qt(r) || null, u = { - prompt: "", - seed: "", - model: "", - lora: "", - sampler: "", - scheduler: "", - cfg: "", - step: "", - genTime: "" - }; - if (a && typeof a == "object") { - a.prompt && (u.prompt = st(String(a.prompt))), a.seed != null && (u.seed = String(a.seed)), a.model && (u.model = Array.isArray(a.model) ? a.model.join(", ") : String(a.model)), Array.isArray(a.loras) && (u.lora = a.loras.map( - (m) => typeof m == "string" ? m : (m == null ? void 0 : m.name) || (m == null ? void 0 : m.lora_name) || (m == null ? void 0 : m.model_name) || "" - ).filter(Boolean).join(", ")), a.sampler && (u.sampler = String(a.sampler)), a.scheduler && (u.scheduler = String(a.scheduler)), a.cfg != null && (u.cfg = String(a.cfg)), a.steps != null && (u.step = String(a.steps)), !u.prompt && (r != null && r.prompt) && (u.prompt = st(String(r.prompt || ""))); - const f = e.generation_time_ms ?? ((s = e.metadata_raw) == null ? void 0 : s.generation_time_ms) ?? (r == null ? void 0 : r.generation_time_ms) ?? ((l = r == null ? void 0 : r.geninfo) == null ? void 0 : l.generation_time_ms) ?? 0; - return f && Number.isFinite(Number(f)) && f > 0 && f < 864e5 && (u.genTime = Et(Number(f) / 1e3)), u; - } - } catch (r) { - (c = console.debug) == null || c.call(console, "[MFV] geninfo normalize failed", r); - } - const n = (e == null ? void 0 : e.metadata) || (e == null ? void 0 : e.metadata_raw) || e || {}, o = { - prompt: st(String((n == null ? void 0 : n.prompt) || (n == null ? void 0 : n.positive) || "")), - seed: (n == null ? void 0 : n.seed) != null ? String(n.seed) : "", - model: (n == null ? void 0 : n.checkpoint) || (n == null ? void 0 : n.ckpt_name) || (n == null ? void 0 : n.model) || "", - lora: Array.isArray(n == null ? void 0 : n.loras) ? n.loras.join(", ") : (n == null ? void 0 : n.lora) || "", - sampler: (n == null ? void 0 : n.sampler_name) || (n == null ? void 0 : n.sampler) || "", - scheduler: (n == null ? void 0 : n.scheduler) || "", - cfg: (n == null ? void 0 : n.cfg) != null ? String(n.cfg) : (n == null ? void 0 : n.cfg_scale) != null ? String(n.cfg_scale) : "", - step: (n == null ? void 0 : n.steps) != null ? String(n.steps) : "", - genTime: "" - }, i = e.generation_time_ms ?? ((d = e.metadata_raw) == null ? void 0 : d.generation_time_ms) ?? (n == null ? void 0 : n.generation_time_ms) ?? 0; - return i && Number.isFinite(Number(i)) && i > 0 && i < 864e5 && (o.genTime = Et(Number(i) / 1e3)), o; -} -function Ke(t, e) { - const n = t._getGenFields(e); - if (!n) return null; - const o = document.createDocumentFragment(), i = [ - "prompt", - "seed", - "model", - "lora", - "sampler", - "scheduler", - "cfg", - "step", - "genTime" - ]; - for (const s of i) { - if (!t._genInfoSelections.has(s)) continue; - const l = n[s] != null ? String(n[s]) : ""; - if (!l) continue; - let c = s.charAt(0).toUpperCase() + s.slice(1); - s === "lora" ? c = "LoRA" : s === "cfg" ? c = "CFG" : s === "genTime" && (c = "Gen Time"); - const d = document.createElement("div"); - d.dataset.field = s; - const r = document.createElement("strong"); - if (r.textContent = `${c}: `, d.appendChild(r), s === "prompt") - d.appendChild(document.createTextNode(l)); - else if (s === "genTime") { - const a = We(l); - let u = "#4CAF50"; - a >= 60 ? u = "#FF9800" : a >= 30 ? u = "#FFC107" : a >= 10 && (u = "#8BC34A"); - const f = document.createElement("span"); - f.style.color = u, f.style.fontWeight = "600", f.textContent = l, d.appendChild(f); - } else - d.appendChild(document.createTextNode(l)); - o.appendChild(d); - } - return o.childNodes.length > 0 ? o : null; -} -function Xe(t) { - var e, n, o; - try { - (n = (e = t._controller) == null ? void 0 : e.onModeChanged) == null || n.call(e, t._mode); - } catch (i) { - (o = console.debug) == null || o.call(console, i); - } -} -function qe(t) { - const e = [E.SIMPLE, E.AB, E.SIDE, E.GRID]; - t._mode = e[(e.indexOf(t._mode) + 1) % e.length], t._updateModeBtnUI(), t._refresh(), t._notifyModeChanged(); -} -function we(t, e) { - Object.values(E).includes(e) && (t._mode = e, t._updateModeBtnUI(), t._refresh(), t._notifyModeChanged()); -} -function Ye(t) { - return t._pinnedSlots; -} -function Ze(t) { - if (t._pinBtns) - for (const e of ["A", "B", "C", "D"]) { - const n = t._pinBtns[e]; - if (!n) continue; - const o = t._pinnedSlots.has(e); - n.classList.toggle("is-pinned", o), n.setAttribute("aria-pressed", String(o)), n.title = o ? `Unpin ${e}` : `Pin ${e}`; - } -} -function Je(t) { - if (!t._modeBtn) return; - const e = { - [E.SIMPLE]: { icon: "pi-image", label: "Mode: Simple - click to switch" }, - [E.AB]: { icon: "pi-clone", label: "Mode: A/B Compare - click to switch" }, - [E.SIDE]: { icon: "pi-table", label: "Mode: Side-by-Side - click to switch" }, - [E.GRID]: { - icon: "pi-th-large", - label: "Mode: Grid Compare (up to 4) - click to switch" - } - }, { icon: n = "pi-image", label: o = "" } = e[t._mode] || {}, i = dt(o, Qt), s = document.createElement("i"); - s.className = `pi ${n}`, s.setAttribute("aria-hidden", "true"), t._modeBtn.replaceChildren(s), t._modeBtn.title = i, t._modeBtn.setAttribute("aria-label", i), t._modeBtn.removeAttribute("aria-pressed"); -} -function Qe(t, e) { - if (!t._liveBtn) return; - const n = !!e; - t._liveBtn.classList.toggle("mjr-live-active", n); - const o = n ? I("tooltip.liveStreamOn", "Live Stream: ON — click to disable") : I("tooltip.liveStreamOff", "Live Stream: OFF — click to follow"), i = dt(o, Ft); - t._liveBtn.setAttribute("aria-pressed", String(n)), t._liveBtn.setAttribute("aria-label", i); - const s = document.createElement("i"); - s.className = n ? "pi pi-circle-fill" : "pi pi-circle", s.setAttribute("aria-hidden", "true"), t._liveBtn.replaceChildren(s), t._liveBtn.title = i; -} -function tn(t, e) { - if (t._previewActive = !!e, !t._previewBtn) return; - t._previewBtn.classList.toggle("mjr-preview-active", t._previewActive); - const n = t._previewActive ? I("tooltip.previewStreamOn", "KSampler Preview: ON — streaming denoising steps") : I( - "tooltip.previewStreamOff", - "KSampler Preview: OFF — click to stream denoising steps" - ), o = dt(n, It); - t._previewBtn.setAttribute("aria-pressed", String(t._previewActive)), t._previewBtn.setAttribute("aria-label", o); - const i = document.createElement("i"); - i.className = t._previewActive ? "pi pi-eye" : "pi pi-eye-slash", i.setAttribute("aria-hidden", "true"), t._previewBtn.replaceChildren(i), t._previewBtn.title = o, t._previewActive || t._revokePreviewBlob(); -} -function en(t, e, n = {}) { - if (!e || !(e instanceof Blob)) return; - t._revokePreviewBlob(); - const o = URL.createObjectURL(e); - t._previewBlobUrl = o; - const i = { - url: o, - filename: "preview.jpg", - kind: "image", - _isPreview: !0, - _sourceLabel: (n == null ? void 0 : n.sourceLabel) || null - }; - if (t._mode === E.AB || t._mode === E.SIDE || t._mode === E.GRID) { - const l = t.getPinnedSlots(); - if (t._mode === E.GRID) { - const c = ["A", "B", "C", "D"].find((d) => !l.has(d)) || "A"; - t[`_media${c}`] = i; - } else l.has("B") ? t._mediaA = i : t._mediaB = i; - } else - t._mediaA = i, t._resetMfvZoom(), t._mode !== E.SIMPLE && (t._mode = E.SIMPLE, t._updateModeBtnUI()); - ++t._refreshGen, t._refresh(); -} -function nn(t) { - if (t._previewBlobUrl) { - try { - URL.revokeObjectURL(t._previewBlobUrl); - } catch { - } - t._previewBlobUrl = null; - } -} -function on(t, e) { - { - t._nodeStreamActive = !1; - return; - } -} -const sn = [ - "--border-color", - "--border-default", - "--button-hover-surface", - "--button-surface", - "--comfy-accent", - "--comfy-font", - "--comfy-input-bg", - "--comfy-menu-bg", - "--comfy-menu-secondary-bg", - "--comfy-status-error", - "--comfy-status-success", - "--comfy-status-warning", - "--content-bg", - "--content-fg", - "--descrip-text", - "--destructive-background", - "--font-inter", - "--input-text", - "--interface-menu-surface", - "--interface-panel-hover-surface", - "--interface-panel-selected-surface", - "--interface-panel-surface", - "--modal-card-background", - "--muted-foreground", - "--primary-background", - "--primary-background-hover", - "--radius-lg", - "--radius-md", - "--radius-sm", - "--success-background", - "--warning-background" -]; -function rn() { - var t, e, n, o, i; - try { - const s = typeof window < "u" ? window : globalThis, l = (e = (t = s == null ? void 0 : s.process) == null ? void 0 : t.versions) == null ? void 0 : e.electron; - if (typeof l == "string" && l.trim() || s != null && s.electron || s != null && s.ipcRenderer || s != null && s.electronAPI) - return !0; - const c = String(((n = s == null ? void 0 : s.navigator) == null ? void 0 : n.userAgent) || ((o = globalThis == null ? void 0 : globalThis.navigator) == null ? void 0 : o.userAgent) || ""), d = /\bElectron\//i.test(c), r = /\bCode\//i.test(c); - if (d && !r) - return !0; - } catch (s) { - (i = console.debug) == null || i.call(console, s); - } - return !1; -} -function F(t, e = null, n = "info") { - var i, s; - const o = { - stage: String(t || "unknown"), - detail: e, - ts: Date.now() - }; - try { - const l = typeof window < "u" ? window : globalThis, c = "__MJR_MFV_POPOUT_TRACE__", d = Array.isArray(l[c]) ? l[c] : []; - d.push(o), l[c] = d.slice(-20), l.__MJR_MFV_POPOUT_LAST__ = o; - } catch (l) { - (i = console.debug) == null || i.call(console, l); - } - try { - const l = n === "error" ? console.error : n === "warn" ? console.warn : console.info; - l == null || l("[MFV popout]", o); - } catch (l) { - (s = console.debug) == null || s.call(console, l); - } -} -function Pt(t, ...e) { - return Array.from( - new Set( - [String(t || ""), ...e].join(" ").split(/\s+/).filter(Boolean) - ) - ).join(" "); -} -function Bt(t, e) { - var n; - if (!(!t || !e)) - for (const o of Array.from(t.attributes || [])) { - const i = String((o == null ? void 0 : o.name) || ""); - if (!(!i || i === "class" || i === "style")) - try { - e.setAttribute(i, o.value); - } catch (s) { - (n = console.debug) == null || n.call(console, s); - } - } -} -function Mt(t, e) { - var i, s, l, c, d; - if (!t || !(e != null && e.style)) return; - const n = typeof window < "u" && (window == null ? void 0 : window.getComputedStyle) || (globalThis == null ? void 0 : globalThis.getComputedStyle); - if (typeof n != "function") return; - let o = null; - try { - o = n(t); - } catch (r) { - (i = console.debug) == null || i.call(console, r); - } - if (o) { - for (const r of sn) - try { - const a = String(((s = o.getPropertyValue) == null ? void 0 : s.call(o, r)) || "").trim(); - a && e.style.setProperty(r, a); - } catch (a) { - (l = console.debug) == null || l.call(console, a); - } - try { - const r = String(((c = o.getPropertyValue) == null ? void 0 : c.call(o, "color-scheme")) || "").trim(); - r && (e.style.colorScheme = r); - } catch (r) { - (d = console.debug) == null || d.call(console, r); - } - } -} -function an(t) { - if (!(t != null && t.documentElement) || !(t != null && t.body) || !(document != null && document.documentElement)) return; - const e = document.documentElement, n = document.body, o = t.documentElement, i = t.body; - o.className = Pt( - e.className, - "mjr-mfv-popout-document" - ), i.className = Pt( - n == null ? void 0 : n.className, - "mjr-mfv-popout-body" - ), Bt(e, o), Bt(n, i), Mt(e, o), Mt(n, i), e != null && e.lang && (o.lang = e.lang), e != null && e.dir && (o.dir = e.dir); -} -function Vt(t) { - var n, o, i; - if (!(t != null && t.body)) return null; - try { - const s = (n = t.getElementById) == null ? void 0 : n.call(t, "mjr-mfv-popout-root"); - (o = s == null ? void 0 : s.remove) == null || o.call(s); - } catch (s) { - (i = console.debug) == null || i.call(console, s); - } - const e = t.createElement("div"); - return e.id = "mjr-mfv-popout-root", e.className = "mjr-mfv-popout-root", t.body.appendChild(e), e; -} -function ln(t, e) { - if (!t.element) return; - const n = !!e; - if (t._desktopExpanded === n) return; - const o = t.element; - if (n) { - t._desktopExpandRestore = { - parent: o.parentNode || null, - nextSibling: o.nextSibling || null, - styleAttr: o.getAttribute("style") - }, o.parentNode !== document.body && document.body.appendChild(o), o.classList.add("mjr-mfv--desktop-expanded", "is-visible"), o.setAttribute("aria-hidden", "false"), o.style.position = "fixed", o.style.top = "12px", o.style.left = "12px", o.style.right = "12px", o.style.bottom = "12px", o.style.width = "auto", o.style.height = "auto", o.style.maxWidth = "none", o.style.maxHeight = "none", o.style.minWidth = "320px", o.style.minHeight = "240px", o.style.resize = "none", o.style.margin = "0", o.style.zIndex = "2147483000", t._desktopExpanded = !0, t.isVisible = !0, t._resetGenDropdownForCurrentDocument(), t._rebindControlHandlers(), t._bindPanelInteractions(), t._bindDocumentUiHandlers(), t._updatePopoutBtnUI(), F("electron-in-app-expanded", { isVisible: t.isVisible }); - return; - } - const i = t._desktopExpandRestore; - t._desktopExpanded = !1, o.classList.remove("mjr-mfv--desktop-expanded"), (i == null ? void 0 : i.styleAttr) == null || i.styleAttr === "" ? o.removeAttribute("style") : o.setAttribute("style", i.styleAttr), i != null && i.parent && i.parent.isConnected && (i.nextSibling && i.nextSibling.parentNode === i.parent ? i.parent.insertBefore(o, i.nextSibling) : i.parent.appendChild(o)), t._desktopExpandRestore = null, t._resetGenDropdownForCurrentDocument(), t._rebindControlHandlers(), t._bindPanelInteractions(), t._bindDocumentUiHandlers(), t._updatePopoutBtnUI(), F("electron-in-app-restored", null); -} -function cn(t, e) { - var n; - t._desktopPopoutUnsupported = !0, F( - "electron-in-app-fallback", - { message: (e == null ? void 0 : e.message) || String(e || "unknown error") }, - "warn" - ), t._setDesktopExpanded(!0); - try { - wt( - I( - "toast.popoutElectronInAppFallback", - "Desktop PiP is unavailable here. Viewer expanded inside the app instead." - ), - "warning", - 4500 - ); - } catch (o) { - (n = console.debug) == null || n.call(console, o); - } -} -function dn(t, e, n, o, i) { - return F( - "electron-popup-fallback-attempt", - { reason: (i == null ? void 0 : i.message) || String(i || "unknown") }, - "warn" - ), t._fallbackPopout(e, n, o), t._popoutWindow ? (t._desktopPopoutUnsupported = !1, F("electron-popup-fallback-opened", null), !0) : !1; -} -function un(t) { - var c, d; - if (t._isPopped || !t.element) return; - const e = t.element; - t._stopEdgeResize(); - const n = rn(), o = typeof window < "u" && "documentPictureInPicture" in window, i = String(((c = window == null ? void 0 : window.navigator) == null ? void 0 : c.userAgent) || ((d = globalThis == null ? void 0 : globalThis.navigator) == null ? void 0 : d.userAgent) || ""), s = Math.max(e.offsetWidth || 520, 400), l = Math.max(e.offsetHeight || 420, 300); - if (F("start", { - isElectronHost: n, - hasDocumentPiP: o, - userAgent: i, - width: s, - height: l, - desktopPopoutUnsupported: t._desktopPopoutUnsupported - }), n && t._desktopPopoutUnsupported) { - F("electron-in-app-fallback-reuse", null), t._setDesktopExpanded(!0); - return; - } - if (!(n && (F("electron-popup-request", { width: s, height: l }), t._tryElectronPopupFallback(e, s, l, new Error("Desktop popup requested"))))) { - if (n && "documentPictureInPicture" in window) { - F("electron-pip-request", { width: s, height: l }), window.documentPictureInPicture.requestWindow({ width: s, height: l }).then((r) => { - var h, p, g; - F("electron-pip-opened", { - hasDocument: !!(r != null && r.document) - }), t._popoutWindow = r, t._isPopped = !0, t._popoutRestoreGuard = !1; - try { - (h = t._popoutAC) == null || h.abort(); - } catch (y) { - (p = console.debug) == null || p.call(console, y); - } - t._popoutAC = new AbortController(); - const a = t._popoutAC.signal, u = () => t._schedulePopInFromPopupClose(); - t._popoutCloseHandler = u; - const f = r.document; - f.title = "Majoor Viewer", t._installPopoutStyles(f); - const m = Vt(f); - if (!m) { - t._activateDesktopExpandedFallback(new Error("Popup root creation failed")); - return; - } - try { - const y = typeof f.adoptNode == "function" ? f.adoptNode(e) : e; - m.appendChild(y), F("electron-pip-adopted", { - usedAdoptNode: typeof f.adoptNode == "function" - }); - } catch (y) { - F( - "electron-pip-adopt-failed", - { message: (y == null ? void 0 : y.message) || String(y) }, - "warn" - ), console.warn("[MFV] PiP adoptNode failed", y), t._isPopped = !1, t._popoutWindow = null; - try { - r.close(); - } catch (S) { - (g = console.debug) == null || g.call(console, S); - } - t._activateDesktopExpandedFallback(y); - return; - } - e.classList.add("is-visible"), t.isVisible = !0, t._resetGenDropdownForCurrentDocument(), t._rebindControlHandlers(), t._bindDocumentUiHandlers(), t._updatePopoutBtnUI(), F("electron-pip-ready", { isPopped: t._isPopped }), r.addEventListener("pagehide", u, { - signal: a - }), t._startPopoutCloseWatch(), t._popoutKeydownHandler = (y) => { - var _, C; - const S = String(((_ = y == null ? void 0 : y.target) == null ? void 0 : _.tagName) || "").toLowerCase(); - y != null && y.defaultPrevented || (C = y == null ? void 0 : y.target) != null && C.isContentEditable || S === "input" || S === "textarea" || S === "select" || t._forwardKeydownToController(y); - }, r.addEventListener("keydown", t._popoutKeydownHandler, { - signal: a - }); - }).catch((r) => { - F( - "electron-pip-request-failed", - { message: (r == null ? void 0 : r.message) || String(r) }, - "warn" - ), t._activateDesktopExpandedFallback(r); - }); - return; - } - if (n) { - F("electron-no-pip-api", { hasDocumentPiP: o }), t._activateDesktopExpandedFallback( - new Error("Document Picture-in-Picture unavailable after popup failure") - ); - return; - } - F("browser-fallback-popup", { width: s, height: l }), t._fallbackPopout(e, s, l); - } -} -function pn(t, e, n, o) { - var u, f, m, h; - F("browser-popup-open", { width: n, height: o }); - const i = (window.screenX || window.screenLeft) + Math.round((window.outerWidth - n) / 2), s = (window.screenY || window.screenTop) + Math.round((window.outerHeight - o) / 2), l = `width=${n},height=${o},left=${i},top=${s},resizable=yes,scrollbars=no,toolbar=no,menubar=no,location=no,status=no`, c = window.open("about:blank", "_mjr_viewer", l); - if (!c) { - F("browser-popup-blocked", null, "warn"), console.warn("[MFV] Pop-out blocked — allow popups for this site."); - return; - } - F("browser-popup-opened", { hasDocument: !!(c != null && c.document) }), t._popoutWindow = c, t._isPopped = !0, t._popoutRestoreGuard = !1; - try { - (u = t._popoutAC) == null || u.abort(); - } catch (p) { - (f = console.debug) == null || f.call(console, p); - } - t._popoutAC = new AbortController(); - const d = t._popoutAC.signal, r = () => t._schedulePopInFromPopupClose(); - t._popoutCloseHandler = r; - const a = () => { - let p; - try { - p = c.document; - } catch { - return; - } - if (!p) return; - p.title = "Majoor Viewer", t._installPopoutStyles(p); - const g = Vt(p); - if (g) { - try { - g.appendChild(p.adoptNode(e)); - } catch (y) { - console.warn("[MFV] adoptNode failed", y); - return; - } - e.classList.add("is-visible"), t.isVisible = !0, t._resetGenDropdownForCurrentDocument(), t._rebindControlHandlers(), t._bindDocumentUiHandlers(), t._updatePopoutBtnUI(); - } - }; - try { - a(); - } catch (p) { - (m = console.debug) == null || m.call(console, "[MFV] immediate mount failed, retrying on load", p); - try { - c.addEventListener("load", a, { signal: d }); - } catch (g) { - (h = console.debug) == null || h.call(console, "[MFV] pop-out page load listener failed", g); - } - } - c.addEventListener("beforeunload", r, { signal: d }), c.addEventListener("pagehide", r, { signal: d }), c.addEventListener("unload", r, { signal: d }), t._startPopoutCloseWatch(), t._popoutKeydownHandler = (p) => { - var S, _, C, A; - const g = String(((S = p == null ? void 0 : p.target) == null ? void 0 : S.tagName) || "").toLowerCase(); - if (p != null && p.defaultPrevented || (_ = p == null ? void 0 : p.target) != null && _.isContentEditable || g === "input" || g === "textarea" || g === "select") - return; - if (String((p == null ? void 0 : p.key) || "").toLowerCase() === "v" && (p != null && p.ctrlKey || p != null && p.metaKey) && !(p != null && p.altKey) && !(p != null && p.shiftKey)) { - p.preventDefault(), (C = p.stopPropagation) == null || C.call(p), (A = p.stopImmediatePropagation) == null || A.call(p), t._dispatchControllerAction("toggle", W.MFV_TOGGLE); - return; - } - t._forwardKeydownToController(p); - }, c.addEventListener("keydown", t._popoutKeydownHandler, { signal: d }); -} -function mn(t) { - var e; - if (t._popoutCloseTimer != null) { - try { - window.clearInterval(t._popoutCloseTimer); - } catch (n) { - (e = console.debug) == null || e.call(console, n); - } - t._popoutCloseTimer = null; - } -} -function fn(t) { - t._clearPopoutCloseWatch(), t._popoutCloseTimer = window.setInterval(() => { - if (!t._isPopped) { - t._clearPopoutCloseWatch(); - return; - } - const e = t._popoutWindow; - (!e || e.closed) && (t._clearPopoutCloseWatch(), t._schedulePopInFromPopupClose()); - }, 250); -} -function hn(t) { - !t._isPopped || t._popoutRestoreGuard || (t._popoutRestoreGuard = !0, window.setTimeout(() => { - try { - t.popIn({ closePopupWindow: !1 }); - } finally { - t._popoutRestoreGuard = !1; - } - }, 0)); -} -function _n(t, e) { - var o, i, s; - if (!(e != null && e.head)) return; - try { - for (const l of e.head.querySelectorAll("[data-mjr-popout-cloned-style='1']")) - l.remove(); - } catch (l) { - (o = console.debug) == null || o.call(console, l); - } - an(e); - try { - const l = document.documentElement.style.cssText; - if (l) { - const c = e.createElement("style"); - c.setAttribute("data-mjr-popout-cloned-style", "1"), c.textContent = `:root { ${l} }`, e.head.appendChild(c); - } - } catch (l) { - (i = console.debug) == null || i.call(console, l); - } - for (const l of document.querySelectorAll('link[rel="stylesheet"], style')) - try { - let c = null; - if (l.tagName === "LINK") { - c = e.createElement("link"); - for (const d of Array.from(l.attributes || [])) - (d == null ? void 0 : d.name) !== "href" && c.setAttribute(d.name, d.value); - c.setAttribute("href", l.href || l.getAttribute("href") || ""); - } else - c = e.importNode(l, !0); - c.setAttribute("data-mjr-popout-cloned-style", "1"), e.head.appendChild(c); - } catch (c) { - (s = console.debug) == null || s.call(console, c); - } - const n = e.createElement("style"); - n.setAttribute("data-mjr-popout-cloned-style", "1"), n.textContent = ` - html.mjr-mfv-popout-document { - min-height: 100%; - background: - radial-gradient( - 1200px 420px at 50% 0%, - color-mix(in srgb, var(--primary-background, var(--comfy-accent, #5fb3ff)) 10%, transparent), - transparent 62% - ), - linear-gradient( - 180deg, - color-mix(in srgb, var(--interface-panel-surface, var(--content-bg, #16191f)) 82%, #000 18%), - color-mix(in srgb, var(--interface-menu-surface, var(--comfy-menu-bg, #1f2227)) 84%, #000 16%) - ) !important; - } - body.mjr-mfv-popout-body { - margin: 0 !important; - display: flex !important; - min-height: 100vh !important; - overflow: hidden !important; - background: transparent !important; - } - #mjr-mfv-popout-root, - .mjr-mfv-popout-root { - flex: 1 !important; - min-width: 0 !important; - min-height: 0 !important; - display: flex !important; - isolation: isolate; - } - body.mjr-mfv-popout-body .mjr-mfv { - position: static !important; - width: 100% !important; - height: 100% !important; - min-width: 0 !important; - min-height: 0 !important; - resize: none !important; - border-radius: 0 !important; - display: flex !important; - opacity: 1 !important; - visibility: visible !important; - pointer-events: auto !important; - transform: none !important; - max-width: none !important; - max-height: none !important; - overflow: hidden !important; - } - `, e.head.appendChild(n); -} -function gn(t, { closePopupWindow: e = !0 } = {}) { - var i, s, l, c; - if (t._desktopExpanded) { - t._setDesktopExpanded(!1); - return; - } - if (!t._isPopped || !t.element) return; - const n = t._popoutWindow; - t._clearPopoutCloseWatch(); - try { - (i = t._popoutAC) == null || i.abort(); - } catch (d) { - (s = console.debug) == null || s.call(console, d); - } - t._popoutAC = null, t._popoutCloseHandler = null, t._popoutKeydownHandler = null, t._isPopped = !1; - let o = t.element; - try { - o = (o == null ? void 0 : o.ownerDocument) === document ? o : document.adoptNode(o); - } catch (d) { - (l = console.debug) == null || l.call(console, "[MFV] pop-in adopt failed", d); - } - if (document.body.appendChild(o), t._resetGenDropdownForCurrentDocument(), t._rebindControlHandlers(), t._bindPanelInteractions(), t._bindDocumentUiHandlers(), o.classList.add("is-visible"), o.setAttribute("aria-hidden", "false"), t.isVisible = !0, t._updatePopoutBtnUI(), e) - try { - n == null || n.close(); - } catch (d) { - (c = console.debug) == null || c.call(console, d); - } - t._popoutWindow = null; -} -function bn(t) { - if (!t._popoutBtn) return; - const e = t._isPopped || t._desktopExpanded; - t.element && t.element.classList.toggle("mjr-mfv--popped", e), t._popoutBtn.classList.toggle("mjr-popin-active", e); - const n = t._popoutBtn.querySelector("i") || document.createElement("i"), o = e ? I("tooltip.popInViewer", "Return to floating panel") : I("tooltip.popOutViewer", "Pop out viewer to separate window"); - n.className = e ? "pi pi-sign-in" : "pi pi-external-link", t._popoutBtn.title = o, t._popoutBtn.setAttribute("aria-label", o), t._popoutBtn.setAttribute("aria-pressed", String(e)), t._popoutBtn.contains(n) || t._popoutBtn.replaceChildren(n); -} -function yn(t) { - return { - n: "ns-resize", - s: "ns-resize", - e: "ew-resize", - w: "ew-resize", - ne: "nesw-resize", - nw: "nwse-resize", - se: "nwse-resize", - sw: "nesw-resize" - }[t] || ""; -} -function Cn(t, e, n) { - if (!n) return ""; - const o = t <= n.left + J, i = t >= n.right - J, s = e <= n.top + J, l = e >= n.bottom - J; - return s && o ? "nw" : s && i ? "ne" : l && o ? "sw" : l && i ? "se" : s ? "n" : l ? "s" : o ? "w" : i ? "e" : ""; -} -function Sn(t) { - var e, n; - if (t.element) { - if (((e = t._resizeState) == null ? void 0 : e.pointerId) != null) - try { - t.element.releasePointerCapture(t._resizeState.pointerId); - } catch (o) { - (n = console.debug) == null || n.call(console, o); - } - t._resizeState = null, t.element.classList.remove("mjr-mfv--resizing"), t.element.style.cursor = ""; - } -} -function An(t) { - var e, n; - if (t.element) { - t._stopEdgeResize(); - try { - (e = t._panelAC) == null || e.abort(); - } catch (o) { - (n = console.debug) == null || n.call(console, o); - } - t._panelAC = new AbortController(), t._initEdgeResize(t.element), t._initDrag(t.element.querySelector(".mjr-mfv-header")); - } -} -function En(t, e) { - var c; - if (!e) return; - const n = (d) => { - if (!t.element || t._isPopped) return ""; - const r = t.element.getBoundingClientRect(); - return t._getResizeDirectionFromPoint(d.clientX, d.clientY, r); - }, o = (c = t._panelAC) == null ? void 0 : c.signal, i = (d) => { - var h; - if (d.button !== 0 || !t.element || t._isPopped) return; - const r = n(d); - if (!r) return; - d.preventDefault(), d.stopPropagation(); - const a = t.element.getBoundingClientRect(), u = window.getComputedStyle(t.element), f = Math.max(120, Number.parseFloat(u.minWidth) || 0), m = Math.max(100, Number.parseFloat(u.minHeight) || 0); - t._resizeState = { - pointerId: d.pointerId, - dir: r, - startX: d.clientX, - startY: d.clientY, - startLeft: a.left, - startTop: a.top, - startWidth: a.width, - startHeight: a.height, - minWidth: f, - minHeight: m - }, t.element.style.left = `${Math.round(a.left)}px`, t.element.style.top = `${Math.round(a.top)}px`, t.element.style.right = "auto", t.element.style.bottom = "auto", t.element.classList.add("mjr-mfv--resizing"), t.element.style.cursor = t._resizeCursorForDirection(r); - try { - t.element.setPointerCapture(d.pointerId); - } catch (p) { - (h = console.debug) == null || h.call(console, p); - } - }, s = (d) => { - if (!t.element || t._isPopped) return; - const r = t._resizeState; - if (!r) { - const g = n(d); - t.element.style.cursor = g ? t._resizeCursorForDirection(g) : ""; - return; - } - if (r.pointerId !== d.pointerId) return; - const a = d.clientX - r.startX, u = d.clientY - r.startY; - let f = r.startWidth, m = r.startHeight, h = r.startLeft, p = r.startTop; - r.dir.includes("e") && (f = r.startWidth + a), r.dir.includes("s") && (m = r.startHeight + u), r.dir.includes("w") && (f = r.startWidth - a, h = r.startLeft + a), r.dir.includes("n") && (m = r.startHeight - u, p = r.startTop + u), f < r.minWidth && (r.dir.includes("w") && (h -= r.minWidth - f), f = r.minWidth), m < r.minHeight && (r.dir.includes("n") && (p -= r.minHeight - m), m = r.minHeight), f = Math.min(f, Math.max(r.minWidth, window.innerWidth)), m = Math.min(m, Math.max(r.minHeight, window.innerHeight)), h = Math.min(Math.max(0, h), Math.max(0, window.innerWidth - f)), p = Math.min(Math.max(0, p), Math.max(0, window.innerHeight - m)), t.element.style.width = `${Math.round(f)}px`, t.element.style.height = `${Math.round(m)}px`, t.element.style.left = `${Math.round(h)}px`, t.element.style.top = `${Math.round(p)}px`, t.element.style.right = "auto", t.element.style.bottom = "auto"; - }, l = (d) => { - if (!t.element || !t._resizeState || t._resizeState.pointerId !== d.pointerId) return; - const r = n(d); - t._stopEdgeResize(), r && (t.element.style.cursor = t._resizeCursorForDirection(r)); - }; - e.addEventListener("pointerdown", i, { capture: !0, signal: o }), e.addEventListener("pointermove", s, { signal: o }), e.addEventListener("pointerup", l, { signal: o }), e.addEventListener("pointercancel", l, { signal: o }), e.addEventListener( - "pointerleave", - () => { - !t._resizeState && t.element && (t.element.style.cursor = ""); - }, - { signal: o } - ); -} -function Pn(t, e) { - var i; - if (!e) return; - const n = (i = t._panelAC) == null ? void 0 : i.signal; - let o = null; - e.addEventListener( - "pointerdown", - (s) => { - if (s.button !== 0 || s.target.closest("button") || s.target.closest("select") || t._isPopped || !t.element || t._getResizeDirectionFromPoint( - s.clientX, - s.clientY, - t.element.getBoundingClientRect() - )) return; - s.preventDefault(), e.setPointerCapture(s.pointerId); - try { - o == null || o.abort(); - } catch { - } - o = new AbortController(); - const c = o.signal, d = t.element, r = d.getBoundingClientRect(), a = s.clientX - r.left, u = s.clientY - r.top, f = (h) => { - const p = Math.min( - window.innerWidth - d.offsetWidth, - Math.max(0, h.clientX - a) - ), g = Math.min( - window.innerHeight - d.offsetHeight, - Math.max(0, h.clientY - u) - ); - d.style.left = `${p}px`, d.style.top = `${g}px`, d.style.right = "auto", d.style.bottom = "auto"; - }, m = () => { - try { - o == null || o.abort(); - } catch { - } - }; - e.addEventListener("pointermove", f, { signal: c }), e.addEventListener("pointerup", m, { signal: c }); - }, - n ? { signal: n } : void 0 - ); -} -async function Bn(t, e, n, o, i, s, l, c) { - var m, h, p, g, y; - if (!n) return; - const d = H(n); - let r = null; - if (d === "video" && (r = c instanceof HTMLVideoElement ? c : ((m = t._contentEl) == null ? void 0 : m.querySelector("video")) || null), !r && d === "model3d") { - const S = (n == null ? void 0 : n.id) != null ? String(n.id) : ""; - S && (r = ((p = (h = t._contentEl) == null ? void 0 : h.querySelector) == null ? void 0 : p.call( - h, - `.mjr-model3d-render-canvas[data-mjr-asset-id="${S}"]` - )) || null), r || (r = ((y = (g = t._contentEl) == null ? void 0 : g.querySelector) == null ? void 0 : y.call(g, ".mjr-model3d-render-canvas")) || null); - } - if (!r) { - const S = xt(n); - if (!S) return; - r = await new Promise((_) => { - const C = new Image(); - C.crossOrigin = "anonymous", C.onload = () => _(C), C.onerror = () => _(null), C.src = S; - }); - } - if (!r) return; - const a = r.videoWidth || r.naturalWidth || s, u = r.videoHeight || r.naturalHeight || l; - if (!a || !u) return; - const f = Math.min(s / a, l / u); - e.drawImage( - r, - o + (s - a * f) / 2, - i + (l - u * f) / 2, - a * f, - u * f - ); -} -function Mn(t, e, n, o) { - if (!e || !n || !t._genInfoSelections.size) return 0; - const i = t._getGenFields(n), s = [ - "prompt", - "seed", - "model", - "lora", - "sampler", - "scheduler", - "cfg", - "step", - "genTime" - ], l = 11, c = 16, d = 8, r = Math.max(100, Number(o || 0) - d * 2); - let a = 0; - for (const u of s) { - if (!t._genInfoSelections.has(u)) continue; - const f = i[u] != null ? String(i[u]) : ""; - if (!f) continue; - let m = u.charAt(0).toUpperCase() + u.slice(1); - u === "lora" ? m = "LoRA" : u === "cfg" ? m = "CFG" : u === "genTime" && (m = "Gen Time"); - const h = `${m}: `; - e.font = `bold ${l}px system-ui, sans-serif`; - const p = e.measureText(h).width; - e.font = `${l}px system-ui, sans-serif`; - const g = Math.max(32, r - d * 2 - p); - let y = 0, S = ""; - for (const _ of f.split(" ")) { - const C = S ? S + " " + _ : _; - e.measureText(C).width > g && S ? (y += 1, S = _) : S = C; - } - S && (y += 1), a += y; - } - return a > 0 ? a * c + d * 2 : 0; -} -function Nn(t, e, n, o, i, s, l) { - if (!n || !t._genInfoSelections.size) return; - const c = t._getGenFields(n), d = { - prompt: "#7ec8ff", - seed: "#ffd47a", - model: "#7dda8a", - lora: "#d48cff", - sampler: "#ff9f7a", - scheduler: "#ff7a9f", - cfg: "#7a9fff", - step: "#7affd4", - genTime: "#e0ff7a" - }, r = [ - "prompt", - "seed", - "model", - "lora", - "sampler", - "scheduler", - "cfg", - "step", - "genTime" - ], a = []; - for (const A of r) { - if (!t._genInfoSelections.has(A)) continue; - const M = c[A] != null ? String(c[A]) : ""; - if (!M) continue; - let B = A.charAt(0).toUpperCase() + A.slice(1); - A === "lora" ? B = "LoRA" : A === "cfg" ? B = "CFG" : A === "genTime" && (B = "Gen Time"), a.push({ - label: `${B}: `, - value: M, - color: d[A] || "#ffffff" - }); - } - if (!a.length) return; - const u = 11, f = 16, m = 8, h = Math.max(100, s - m * 2); - e.save(); - const p = []; - for (const { label: A, value: M, color: B } of a) { - e.font = `bold ${u}px system-ui, sans-serif`; - const T = e.measureText(A).width; - e.font = `${u}px system-ui, sans-serif`; - const k = h - m * 2 - T, R = []; - let L = ""; - for (const D of M.split(" ")) { - const G = L ? L + " " + D : D; - e.measureText(G).width > k && L ? (R.push(L), L = D) : L = G; - } - L && R.push(L), p.push({ label: A, labelW: T, lines: R, color: B }); - } - const y = p.reduce((A, M) => A + M.lines.length, 0) * f + m * 2, S = o + m, _ = i + l - y - m; - e.globalAlpha = 0.72, e.fillStyle = "#000", jt(e, S, _, h, y, 6), e.fill(), e.globalAlpha = 1; - let C = _ + m + u; - for (const { label: A, labelW: M, lines: B, color: T } of p) - for (let k = 0; k < B.length; k++) - k === 0 ? (e.font = `bold ${u}px system-ui, sans-serif`, e.fillStyle = T, e.fillText(A, S + m, C), e.font = `${u}px system-ui, sans-serif`, e.fillStyle = "rgba(255,255,255,0.88)", e.fillText(B[k], S + m + M, C)) : (e.font = `${u}px system-ui, sans-serif`, e.fillStyle = "rgba(255,255,255,0.88)", e.fillText(B[k], S + m + M, C)), C += f; - e.restore(); -} -async function Fn(t) { - var d; - if (!t._contentEl) return; - t._captureBtn && (t._captureBtn.disabled = !0, t._captureBtn.setAttribute("aria-label", I("tooltip.capturingView", "Capturing…"))); - const e = t._contentEl.clientWidth || 480, n = t._contentEl.clientHeight || 360; - let o = n; - if (t._mode === E.SIMPLE && t._mediaA && t._genInfoSelections.size) { - const r = document.createElement("canvas"); - r.width = e, r.height = n; - const a = r.getContext("2d"), u = t._estimateGenInfoOverlayHeight(a, t._mediaA, e); - if (u > 0) { - const f = Math.max(n, u + 24); - o = Math.min(f, n * 4); - } - } - const i = document.createElement("canvas"); - i.width = e, i.height = o; - const s = i.getContext("2d"); - s.fillStyle = "#0d0d0d", s.fillRect(0, 0, e, o); - try { - if (t._mode === E.SIMPLE) - t._mediaA && (await t._drawMediaFit(s, t._mediaA, 0, 0, e, n), t._drawGenInfoOverlay(s, t._mediaA, 0, 0, e, o)); - else if (t._mode === E.AB) { - const r = Math.round(t._abDividerX * e), a = t._contentEl.querySelector( - ".mjr-mfv-ab-layer:not(.mjr-mfv-ab-layer--b) video" - ), u = t._contentEl.querySelector(".mjr-mfv-ab-layer--b video"); - t._mediaA && await t._drawMediaFit(s, t._mediaA, 0, 0, e, o, a), t._mediaB && (s.save(), s.beginPath(), s.rect(r, 0, e - r, o), s.clip(), await t._drawMediaFit(s, t._mediaB, 0, 0, e, o, u), s.restore()), s.save(), s.strokeStyle = "rgba(255,255,255,0.88)", s.lineWidth = 2, s.beginPath(), s.moveTo(r, 0), s.lineTo(r, o), s.stroke(), s.restore(), X(s, "A", 8, 8), X(s, "B", r + 8, 8), t._mediaA && t._drawGenInfoOverlay(s, t._mediaA, 0, 0, r, o), t._mediaB && t._drawGenInfoOverlay(s, t._mediaB, r, 0, e - r, o); - } else if (t._mode === E.SIDE) { - const r = Math.floor(e / 2), a = t._contentEl.querySelector(".mjr-mfv-side-panel:first-child video"), u = t._contentEl.querySelector(".mjr-mfv-side-panel:last-child video"); - t._mediaA && (await t._drawMediaFit(s, t._mediaA, 0, 0, r, o, a), t._drawGenInfoOverlay(s, t._mediaA, 0, 0, r, o)), s.fillStyle = "#111", s.fillRect(r, 0, 2, o), t._mediaB && (await t._drawMediaFit(s, t._mediaB, r, 0, r, o, u), t._drawGenInfoOverlay(s, t._mediaB, r, 0, r, o)), X(s, "A", 8, 8), X(s, "B", r + 8, 8); - } else if (t._mode === E.GRID) { - const r = Math.floor(e / 2), a = Math.floor(o / 2), u = 1, f = [ - { media: t._mediaA, label: "A", x: 0, y: 0, w: r - u, h: a - u }, - { - media: t._mediaB, - label: "B", - x: r + u, - y: 0, - w: r - u, - h: a - u - }, - { - media: t._mediaC, - label: "C", - x: 0, - y: a + u, - w: r - u, - h: a - u - }, - { - media: t._mediaD, - label: "D", - x: r + u, - y: a + u, - w: r - u, - h: a - u - } - ], m = t._contentEl.querySelectorAll(".mjr-mfv-grid-cell"); - for (let h = 0; h < f.length; h++) { - const p = f[h], g = ((d = m[h]) == null ? void 0 : d.querySelector("video")) || null; - p.media && (await t._drawMediaFit(s, p.media, p.x, p.y, p.w, p.h, g), t._drawGenInfoOverlay(s, p.media, p.x, p.y, p.w, p.h)), X(s, p.label, p.x + 8, p.y + 8); - } - s.save(), s.fillStyle = "#111", s.fillRect(r - u, 0, u * 2, o), s.fillRect(0, a - u, e, u * 2), s.restore(); - } - } catch (r) { - console.debug("[MFV] capture error:", r); - } - const c = `${{ - [E.AB]: "mfv-ab", - [E.SIDE]: "mfv-side", - [E.GRID]: "mfv-grid" - }[t._mode] ?? "mfv"}-${Date.now()}.png`; - try { - const r = i.toDataURL("image/png"), a = document.createElement("a"); - a.href = r, a.download = c, document.body.appendChild(a), a.click(), setTimeout(() => document.body.removeChild(a), 100); - } catch (r) { - console.warn("[MFV] download failed:", r); - } finally { - t._captureBtn && (t._captureBtn.disabled = !1, t._captureBtn.setAttribute("aria-label", I("tooltip.captureView", "Save view as image"))); - } -} -function In(t, e, { autoMode: n = !1 } = {}) { - if (t._mediaA = e || null, t._resetMfvZoom(), n && t._mode !== E.SIMPLE && (t._mode = E.SIMPLE, t._updateModeBtnUI()), t._mediaA && typeof tt == "function") { - const o = ++t._refreshGen; - (async () => { - var i; - try { - const s = await tt(t._mediaA, { - getAssetMetadata: pt, - getFileMetadataScoped: ut - }); - if (t._refreshGen !== o) return; - s && typeof s == "object" && (t._mediaA = s, t._refresh()); - } catch (s) { - (i = console.debug) == null || i.call(console, "[MFV] metadata enrich error", s); - } - })(); - } else - t._refresh(); -} -function Ln(t, e, n) { - t._mediaA = e || null, t._mediaB = n || null, t._resetMfvZoom(), t._mode === E.SIMPLE && (t._mode = E.AB, t._updateModeBtnUI()); - const o = ++t._refreshGen, i = async (s) => { - if (!s) return s; - try { - return await tt(s, { - getAssetMetadata: pt, - getFileMetadataScoped: ut - }) || s; - } catch { - return s; - } - }; - (async () => { - const [s, l] = await Promise.all([i(t._mediaA), i(t._mediaB)]); - t._refreshGen === o && (t._mediaA = s || null, t._mediaB = l || null, t._refresh()); - })(); -} -function kn(t, e, n, o, i) { - t._mediaA = e || null, t._mediaB = n || null, t._mediaC = o || null, t._mediaD = i || null, t._resetMfvZoom(), t._mode !== E.GRID && (t._mode = E.GRID, t._updateModeBtnUI()); - const s = ++t._refreshGen, l = async (c) => { - if (!c) return c; - try { - return await tt(c, { - getAssetMetadata: pt, - getFileMetadataScoped: ut - }) || c; - } catch { - return c; - } - }; - (async () => { - const [c, d, r, a] = await Promise.all([ - l(t._mediaA), - l(t._mediaB), - l(t._mediaC), - l(t._mediaD) - ]); - t._refreshGen === s && (t._mediaA = c || null, t._mediaB = d || null, t._mediaC = r || null, t._mediaD = a || null, t._refresh()); - })(); -} -function $(t) { - var e, n; - try { - return !!((e = t == null ? void 0 : t.classList) != null && e.contains("mjr-mfv-simple-player")); - } catch (o) { - return (n = console.debug) == null || n.call(console, o), !1; - } -} -let xn = 0; -class Vn { - constructor({ controller: e = null } = {}) { - this._instanceId = ++xn, this._controller = e && typeof e == "object" ? { ...e } : null, this.element = null, this.isVisible = !1, this._contentEl = null, this._closeBtn = null, this._modeBtn = null, this._pinGroup = null, this._pinBtns = null, this._liveBtn = null, this._genBtn = null, this._genDropdown = null, this._captureBtn = null, this._genInfoSelections = /* @__PURE__ */ new Set(["genTime"]), this._mode = E.SIMPLE, this._mediaA = null, this._mediaB = null, this._mediaC = null, this._mediaD = null, this._pinnedSlots = /* @__PURE__ */ new Set(), this._abDividerX = 0.5, this._zoom = 1, this._panX = 0, this._panY = 0, this._panzoomAC = null, this._dragging = !1, this._compareSyncAC = null, this._btnAC = null, this._refreshGen = 0, this._popoutWindow = null, this._popoutBtn = null, this._isPopped = !1, this._desktopExpanded = !1, this._desktopExpandRestore = null, this._desktopPopoutUnsupported = !1, this._popoutCloseHandler = null, this._popoutKeydownHandler = null, this._popoutCloseTimer = null, this._popoutRestoreGuard = !1, this._previewBtn = null, this._previewBlobUrl = null, this._previewActive = !1, this._nodeStreamBtn = null, this._nodeStreamActive = !1, this._docAC = new AbortController(), this._popoutAC = null, this._panelAC = new AbortController(), this._resizeState = null, this._titleId = `mjr-mfv-title-${this._instanceId}`, this._genDropdownId = `mjr-mfv-gen-dropdown-${this._instanceId}`, this._progressEl = null, this._progressNodesEl = null, this._progressStepsEl = null, this._progressTextEl = null, this._mediaProgressEl = null, this._mediaProgressTextEl = null, this._progressUpdateHandler = null, this._progressCurrentNodeId = null, this._docClickHost = null, this._handleDocClick = null; - } - _dispatchControllerAction(e, n) { - var o, i, s; - try { - const l = (o = this._controller) == null ? void 0 : o[e]; - if (typeof l == "function") - return l(); - } catch (l) { - (i = console.debug) == null || i.call(console, l); - } - if (n) - try { - window.dispatchEvent(new Event(n)); - } catch (l) { - (s = console.debug) == null || s.call(console, l); - } - } - _forwardKeydownToController(e) { - var n, o, i; - try { - const s = (n = this._controller) == null ? void 0 : n.handleForwardedKeydown; - if (typeof s == "function") { - s(e); - return; - } - } catch (s) { - (o = console.debug) == null || o.call(console, s); - } - try { - window.dispatchEvent( - new KeyboardEvent("keydown", { - key: e == null ? void 0 : e.key, - code: e == null ? void 0 : e.code, - keyCode: e == null ? void 0 : e.keyCode, - ctrlKey: e == null ? void 0 : e.ctrlKey, - shiftKey: e == null ? void 0 : e.shiftKey, - altKey: e == null ? void 0 : e.altKey, - metaKey: e == null ? void 0 : e.metaKey - }) - ); - } catch (s) { - (i = console.debug) == null || i.call(console, s); - } - } - // ── Build DOM ───────────────────────────────────────────────────────────── - render() { - return Le(this); - } - _buildHeader() { - return ke(this); - } - _buildToolbar() { - return xe(this); - } - _rebindControlHandlers() { - return je(this); - } - _updateSettingsBtnState(e) { - return Te(this, e); - } - _applySidebarPosition() { - return Ve(this); - } - refreshSidebar() { - var e; - (e = this._sidebar) == null || e.refresh(); - } - _resetGenDropdownForCurrentDocument() { - return Ge(this); - } - _bindDocumentUiHandlers() { - return Oe(this); - } - _unbindDocumentUiHandlers() { - return Re(this); - } - _isGenDropdownOpen() { - return He(this); - } - _openGenDropdown() { - return De(this); - } - _closeGenDropdown() { - return Ue(this); - } - _updateGenBtnUI() { - return ze(this); - } - _buildGenDropdown() { - return $e(this); - } - _getGenFields(e) { - return ve(this, e); - } - _buildGenInfoDOM(e) { - return Ke(this, e); - } - _notifyModeChanged() { - return Xe(this); - } - _cycleMode() { - return qe(this); - } - setMode(e) { - return we(this, e); - } - getPinnedSlots() { - return Ye(this); - } - _updatePinUI() { - return Ze(this); - } - _updateModeBtnUI() { - return Je(this); - } - setLiveActive(e) { - return Qe(this, e); - } - setPreviewActive(e) { - return tn(this, e); - } - loadPreviewBlob(e, n = {}) { - return en(this, e, n); - } - _revokePreviewBlob() { - return nn(this); - } - setNodeStreamActive(e) { - return on(this); - } - loadMediaA(e, { autoMode: n = !1 } = {}) { - return In(this, e, { autoMode: n }); - } - /** - * Load two assets for compare modes. - * Auto-switches from SIMPLE → AB on first call. - */ - loadMediaPair(e, n) { - return Ln(this, e, n); - } - /** - * Load up to 4 assets for grid compare mode. - * Auto-switches to GRID mode if not already. - */ - loadMediaQuad(e, n, o, i) { - return kn(this, e, n, o, i); - } - /** Apply current zoom+pan state to all media elements (img/video only — divider/overlays unaffected). */ - _applyTransform() { - if (!this._contentEl) return; - const e = Math.max(rt, Math.min(at, this._zoom)), n = this._contentEl.clientWidth || 0, o = this._contentEl.clientHeight || 0, i = Math.max(0, (e - 1) * n / 2), s = Math.max(0, (e - 1) * o / 2); - this._panX = Math.max(-i, Math.min(i, this._panX)), this._panY = Math.max(-s, Math.min(s, this._panY)); - const l = `translate(${this._panX}px,${this._panY}px) scale(${e})`; - for (const c of this._contentEl.querySelectorAll(".mjr-mfv-media")) - c != null && c._mjrDisableViewerTransform || (c.style.transform = l, c.style.transformOrigin = "center"); - this._contentEl.classList.remove("mjr-mfv-content--grab", "mjr-mfv-content--grabbing"), e > 1.01 && this._contentEl.classList.add( - this._dragging ? "mjr-mfv-content--grabbing" : "mjr-mfv-content--grab" - ); - } - /** - * Set zoom, optionally centered at (clientX, clientY). - * Keeps the image point under the cursor stationary. - */ - _setMfvZoom(e, n, o) { - const i = Math.max(rt, Math.min(at, this._zoom)), s = Math.max(rt, Math.min(at, Number(e) || 1)); - if (n != null && o != null && this._contentEl) { - const l = s / i, c = this._contentEl.getBoundingClientRect(), d = n - (c.left + c.width / 2), r = o - (c.top + c.height / 2); - this._panX = this._panX * l + (1 - l) * d, this._panY = this._panY * l + (1 - l) * r; - } - this._zoom = s, Math.abs(s - 1) < 1e-3 && (this._zoom = 1, this._panX = 0, this._panY = 0), this._applyTransform(); - } - /** Reset zoom and pan to the default 1:1 fit. Called when new media is loaded. */ - _resetMfvZoom() { - this._zoom = 1, this._panX = 0, this._panY = 0, this._applyTransform(); - } - /** Bind wheel + pointer events to the clip viewport element. */ - _initPanZoom(e) { - if (this._destroyPanZoom(), !e) return; - this._panzoomAC = new AbortController(); - const n = { signal: this._panzoomAC.signal }; - e.addEventListener( - "wheel", - (r) => { - var m, h, p, g; - if ((h = (m = r.target) == null ? void 0 : m.closest) != null && h.call(m, "audio") || (g = (p = r.target) == null ? void 0 : p.closest) != null && g.call(p, ".mjr-mfv-simple-player-controls") || it(r.target)) return; - const a = ue(r.target, e); - if (a && pe( - a, - Number(r.deltaX || 0), - Number(r.deltaY || 0) - )) - return; - r.preventDefault(); - const f = 1 - (r.deltaY || r.deltaX || 0) * Jt; - this._setMfvZoom(this._zoom * f, r.clientX, r.clientY); - }, - { ...n, passive: !1 } - ); - let o = !1, i = 0, s = 0, l = 0, c = 0; - e.addEventListener( - "pointerdown", - (r) => { - var a, u, f, m, h, p, g, y, S; - if (!(r.button !== 0 && r.button !== 1) && !(this._zoom <= 1.01) && !((u = (a = r.target) == null ? void 0 : a.closest) != null && u.call(a, "video")) && !((m = (f = r.target) == null ? void 0 : f.closest) != null && m.call(f, "audio")) && !((p = (h = r.target) == null ? void 0 : h.closest) != null && p.call(h, ".mjr-mfv-simple-player-controls")) && !((y = (g = r.target) == null ? void 0 : g.closest) != null && y.call(g, ".mjr-mfv-ab-divider")) && !it(r.target)) { - r.preventDefault(), o = !0, this._dragging = !0, i = r.clientX, s = r.clientY, l = this._panX, c = this._panY; - try { - e.setPointerCapture(r.pointerId); - } catch (_) { - (S = console.debug) == null || S.call(console, _); - } - this._applyTransform(); - } - }, - n - ), e.addEventListener( - "pointermove", - (r) => { - o && (this._panX = l + (r.clientX - i), this._panY = c + (r.clientY - s), this._applyTransform()); - }, - n - ); - const d = (r) => { - var a; - if (o) { - o = !1, this._dragging = !1; - try { - e.releasePointerCapture(r.pointerId); - } catch (u) { - (a = console.debug) == null || a.call(console, u); - } - this._applyTransform(); - } - }; - e.addEventListener("pointerup", d, n), e.addEventListener("pointercancel", d, n), e.addEventListener( - "dblclick", - (r) => { - var u, f, m, h, p, g; - if ((f = (u = r.target) == null ? void 0 : u.closest) != null && f.call(u, "video") || (h = (m = r.target) == null ? void 0 : m.closest) != null && h.call(m, "audio") || (g = (p = r.target) == null ? void 0 : p.closest) != null && g.call(p, ".mjr-mfv-simple-player-controls") || it(r.target)) return; - const a = Math.abs(this._zoom - 1) < 0.05; - this._setMfvZoom(a ? Math.min(4, this._zoom * 4) : 1, r.clientX, r.clientY); - }, - n - ); - } - /** Remove all pan/zoom event listeners. */ - _destroyPanZoom() { - var e, n; - try { - (e = this._panzoomAC) == null || e.abort(); - } catch (o) { - (n = console.debug) == null || n.call(console, o); - } - this._panzoomAC = null, this._dragging = !1; - } - _destroyCompareSync() { - var e, n, o; - try { - (n = (e = this._compareSyncAC) == null ? void 0 : e.abort) == null || n.call(e); - } catch (i) { - (o = console.debug) == null || o.call(console, i); - } - this._compareSyncAC = null; - } - _initCompareSync() { - var e; - if (this._destroyCompareSync(), !!this._contentEl && this._mode !== E.SIMPLE) - try { - const n = Array.from(this._contentEl.querySelectorAll("video, audio")); - if (n.length < 2) return; - const o = n[0] || null, i = n.slice(1); - if (!o || !i.length) return; - this._compareSyncAC = Yt(o, i, { threshold: 0.08 }); - } catch (n) { - (e = console.debug) == null || e.call(console, n); - } - } - // ── Render ──────────────────────────────────────────────────────────────── - _refresh() { - if (this._contentEl) { - switch (this._destroyPanZoom(), this._destroyCompareSync(), this._contentEl.replaceChildren(), this._contentEl.style.overflow = "hidden", this._mode) { - case E.SIMPLE: - this._renderSimple(); - break; - case E.AB: - this._renderAB(); - break; - case E.SIDE: - this._renderSide(); - break; - case E.GRID: - this._renderGrid(); - break; - } - this._mediaProgressEl && this._contentEl.appendChild(this._mediaProgressEl), this._applyTransform(), this._initPanZoom(this._contentEl), this._initCompareSync(); - } - } - _renderSimple() { - if (!this._mediaA) { - this._contentEl.appendChild(O()); - return; - } - const e = H(this._mediaA), n = z(this._mediaA); - if (!n) { - this._contentEl.appendChild(O("Could not load media")); - return; - } - const o = document.createElement("div"); - if (o.className = "mjr-mfv-simple-container", o.appendChild(n), e !== "audio") { - const i = this._buildGenInfoDOM(this._mediaA); - if (i) { - const s = document.createElement("div"); - s.className = "mjr-mfv-geninfo", $(n) && s.classList.add("mjr-mfv-geninfo--above-player"), s.appendChild(i), o.appendChild(s); - } - } - this._contentEl.appendChild(o); - } - _renderAB() { - var p; - const e = this._mediaA ? z(this._mediaA, { fill: !0 }) : null, n = this._mediaB ? z(this._mediaB, { fill: !0 }) : null, o = this._mediaA ? H(this._mediaA) : "", i = this._mediaB ? H(this._mediaB) : ""; - if (!e && !n) { - this._contentEl.appendChild(O("Select 2 assets for A/B compare")); - return; - } - if (!n) { - this._renderSimple(); - return; - } - if (o === "audio" || i === "audio" || o === "model3d" || i === "model3d") { - this._renderSide(); - return; - } - const s = document.createElement("div"); - s.className = "mjr-mfv-ab-container"; - const l = document.createElement("div"); - l.className = "mjr-mfv-ab-layer", e && l.appendChild(e); - const c = document.createElement("div"); - c.className = "mjr-mfv-ab-layer mjr-mfv-ab-layer--b"; - const d = Math.round(this._abDividerX * 100); - c.style.clipPath = `inset(0 0 0 ${d}%)`, c.appendChild(n); - const r = document.createElement("div"); - r.className = "mjr-mfv-ab-divider", r.style.left = `${d}%`; - const a = this._buildGenInfoDOM(this._mediaA); - let u = null; - a && (u = document.createElement("div"), u.className = "mjr-mfv-geninfo-a", $(e) && u.classList.add("mjr-mfv-geninfo--above-player"), u.appendChild(a), u.style.right = `calc(${100 - d}% + 8px)`); - const f = this._buildGenInfoDOM(this._mediaB); - let m = null; - f && (m = document.createElement("div"), m.className = "mjr-mfv-geninfo-b", $(n) && m.classList.add("mjr-mfv-geninfo--above-player"), m.appendChild(f), m.style.left = `calc(${d}% + 8px)`); - let h = null; - r.addEventListener( - "pointerdown", - (g) => { - g.preventDefault(), r.setPointerCapture(g.pointerId); - try { - h == null || h.abort(); - } catch { - } - h = new AbortController(); - const y = h.signal, S = s.getBoundingClientRect(), _ = (A) => { - const M = Math.max(0.02, Math.min(0.98, (A.clientX - S.left) / S.width)); - this._abDividerX = M; - const B = Math.round(M * 100); - c.style.clipPath = `inset(0 0 0 ${B}%)`, r.style.left = `${B}%`, u && (u.style.right = `calc(${100 - B}% + 8px)`), m && (m.style.left = `calc(${B}% + 8px)`); - }, C = () => { - try { - h == null || h.abort(); - } catch { - } - }; - r.addEventListener("pointermove", _, { signal: y }), r.addEventListener("pointerup", C, { signal: y }); - }, - (p = this._panelAC) != null && p.signal ? { signal: this._panelAC.signal } : void 0 - ), s.appendChild(l), s.appendChild(c), s.appendChild(r), u && s.appendChild(u), m && s.appendChild(m), s.appendChild(U("A", "left")), s.appendChild(U("B", "right")), this._contentEl.appendChild(s); - } - _renderSide() { - const e = this._mediaA ? z(this._mediaA) : null, n = this._mediaB ? z(this._mediaB) : null, o = this._mediaA ? H(this._mediaA) : "", i = this._mediaB ? H(this._mediaB) : ""; - if (!e && !n) { - this._contentEl.appendChild(O("Select 2 assets for Side-by-Side")); - return; - } - const s = document.createElement("div"); - s.className = "mjr-mfv-side-container"; - const l = document.createElement("div"); - l.className = "mjr-mfv-side-panel", e ? l.appendChild(e) : l.appendChild(O("—")), l.appendChild(U("A", "left")); - const c = o === "audio" ? null : this._buildGenInfoDOM(this._mediaA); - if (c) { - const a = document.createElement("div"); - a.className = "mjr-mfv-geninfo-a", $(e) && a.classList.add("mjr-mfv-geninfo--above-player"), a.appendChild(c), l.appendChild(a); - } - const d = document.createElement("div"); - d.className = "mjr-mfv-side-panel", n ? d.appendChild(n) : d.appendChild(O("—")), d.appendChild(U("B", "right")); - const r = i === "audio" ? null : this._buildGenInfoDOM(this._mediaB); - if (r) { - const a = document.createElement("div"); - a.className = "mjr-mfv-geninfo-b", $(n) && a.classList.add("mjr-mfv-geninfo--above-player"), a.appendChild(r), d.appendChild(a); - } - s.appendChild(l), s.appendChild(d), this._contentEl.appendChild(s); - } - _renderGrid() { - const e = [ - { media: this._mediaA, label: "A" }, - { media: this._mediaB, label: "B" }, - { media: this._mediaC, label: "C" }, - { media: this._mediaD, label: "D" } - ]; - if (!e.filter((i) => i.media).length) { - this._contentEl.appendChild(O("Select up to 4 assets for Grid Compare")); - return; - } - const o = document.createElement("div"); - o.className = "mjr-mfv-grid-container"; - for (const { media: i, label: s } of e) { - const l = document.createElement("div"); - if (l.className = "mjr-mfv-grid-cell", i) { - const c = H(i), d = z(i); - if (d ? l.appendChild(d) : l.appendChild(O("—")), l.appendChild( - U(s, s === "A" || s === "C" ? "left" : "right") - ), c !== "audio") { - const r = this._buildGenInfoDOM(i); - if (r) { - const a = document.createElement("div"); - a.className = `mjr-mfv-geninfo-${s.toLowerCase()}`, $(d) && a.classList.add("mjr-mfv-geninfo--above-player"), a.appendChild(r), l.appendChild(a); - } - } - } else - l.appendChild(O("—")), l.appendChild( - U(s, s === "A" || s === "C" ? "left" : "right") - ); - o.appendChild(l); - } - this._contentEl.appendChild(o); - } - // ── Visibility ──────────────────────────────────────────────────────────── - show() { - this.element && (this._bindDocumentUiHandlers(), this.element.classList.add("is-visible"), this.element.setAttribute("aria-hidden", "false"), this.isVisible = !0); - } - hide() { - this.element && (this._destroyPanZoom(), this._destroyCompareSync(), this._stopEdgeResize(), this._closeGenDropdown(), me(this.element), this.element.classList.remove("is-visible"), this.element.setAttribute("aria-hidden", "true"), this.isVisible = !1); - } - // ── Pop-out / Pop-in (separate OS window for second monitor) ──────────── - _setDesktopExpanded(e) { - return ln(this, e); - } - _activateDesktopExpandedFallback(e) { - return cn(this, e); - } - _tryElectronPopupFallback(e, n, o, i) { - return dn(this, e, n, o, i); - } - popOut() { - return un(this); - } - _fallbackPopout(e, n, o) { - return pn(this, e, n, o); - } - _clearPopoutCloseWatch() { - return mn(this); - } - _startPopoutCloseWatch() { - return fn(this); - } - _schedulePopInFromPopupClose() { - return hn(this); - } - _installPopoutStyles(e) { - return _n(this, e); - } - popIn(e) { - return gn(this, e); - } - _updatePopoutBtnUI() { - return bn(this); - } - get isPopped() { - return this._isPopped || this._desktopExpanded; - } - _resizeCursorForDirection(e) { - return yn(e); - } - _getResizeDirectionFromPoint(e, n, o) { - return Cn(e, n, o); - } - _stopEdgeResize() { - return Sn(this); - } - _bindPanelInteractions() { - return An(this); - } - _initEdgeResize(e) { - return En(this, e); - } - _initDrag(e) { - return Pn(this, e); - } - async _drawMediaFit(e, n, o, i, s, l, c) { - return Bn(this, e, n, o, i, s, l, c); - } - _estimateGenInfoOverlayHeight(e, n, o) { - return Mn(this, e, n, o); - } - _drawGenInfoOverlay(e, n, o, i, s, l) { - return Nn(this, e, n, o, i, s, l); - } - async _captureView() { - return Fn(this); - } - dispose() { - var e, n, o, i, s, l, c, d, r, a, u, f, m, h, p, g, y, S; - Zt(this), this._destroyPanZoom(), this._destroyCompareSync(), this._stopEdgeResize(), this._clearPopoutCloseWatch(); - try { - (e = this._panelAC) == null || e.abort(), this._panelAC = null; - } catch (_) { - (n = console.debug) == null || n.call(console, _); - } - try { - (o = this._btnAC) == null || o.abort(), this._btnAC = null; - } catch (_) { - (i = console.debug) == null || i.call(console, _); - } - try { - (s = this._docAC) == null || s.abort(), this._docAC = null; - } catch (_) { - (l = console.debug) == null || l.call(console, _); - } - try { - (c = this._popoutAC) == null || c.abort(), this._popoutAC = null; - } catch (_) { - (d = console.debug) == null || d.call(console, _); - } - try { - (r = this._panzoomAC) == null || r.abort(), this._panzoomAC = null; - } catch (_) { - (a = console.debug) == null || a.call(console, _); - } - try { - (f = (u = this._compareSyncAC) == null ? void 0 : u.abort) == null || f.call(u), this._compareSyncAC = null; - } catch (_) { - (m = console.debug) == null || m.call(console, _); - } - try { - this._isPopped && this.popIn(); - } catch (_) { - (h = console.debug) == null || h.call(console, _); - } - this._revokePreviewBlob(), this._onSidebarPosChanged && (window.removeEventListener("mjr-settings-changed", this._onSidebarPosChanged), this._onSidebarPosChanged = null); - try { - (p = this.element) == null || p.remove(); - } catch (_) { - (g = console.debug) == null || g.call(console, _); - } - this.element = null, this._contentEl = null, this._closeBtn = null, this._modeBtn = null, this._pinGroup = null, this._pinBtns = null, this._liveBtn = null, this._nodeStreamBtn = null, this._popoutBtn = null, this._captureBtn = null, this._unbindDocumentUiHandlers(); - try { - (y = this._genDropdown) == null || y.remove(); - } catch (_) { - (S = console.debug) == null || S.call(console, _); - } - this._mediaA = null, this._mediaB = null, this._mediaC = null, this._mediaD = null, this.isVisible = !1; - } -} -export { - Vn as FloatingViewer, - E as MFV_MODES -}; diff --git a/js_dist/chunks/FloatingViewer-C4ghYm3b.js b/js_dist/chunks/FloatingViewer-C4ghYm3b.js new file mode 100644 index 00000000..98a056ff --- /dev/null +++ b/js_dist/chunks/FloatingViewer-C4ghYm3b.js @@ -0,0 +1,3444 @@ +import { p as re, M as Ce, c as Ae, q as Se, t as Ee, u as Me, v as Be, A as pt, x as Z, y as v, z as gt, B as Ne, C as le, D as xe, F as Pe, G as yt, E as st, n as Le, s as St, H as Pt, I as Fe, J as Lt, K as Ft, d as Et, L as Ie, N as Te } from "./entry-CfyS4_5Z.js"; +import { ensureViewerMetadataAsset as Ct } from "./genInfo-cg-2k0dV.js"; +const T = Object.freeze({ + SIMPLE: "simple", + AB: "ab", + SIDE: "side", + GRID: "grid" +}), Mt = 0.25, Bt = 8, ke = 8e-4, bt = 8, je = "C", ce = "L", de = "K", Ge = "N", Ve = "Esc", At = 30; +function Nt(t) { + const e = Number(t); + if (!Number.isFinite(e) || e < 0) return "0:00"; + const n = Math.floor(e), o = Math.floor(n / 3600), s = Math.floor(n % 3600 / 60), i = n % 60; + return o > 0 ? `${o}:${String(s).padStart(2, "0")}:${String(i).padStart(2, "0")}` : `${s}:${String(i).padStart(2, "0")}`; +} +function Xt(t) { + var e, n; + try { + const o = (e = t == null ? void 0 : t.play) == null ? void 0 : e.call(t); + o && typeof o.catch == "function" && o.catch(() => { + }); + } catch (o) { + (n = console.debug) == null || n.call(console, o); + } +} +function Re(t, e) { + const n = Math.floor(Number(t) || 0), o = Math.max(0, Math.floor(Number(e) || 0)); + return n < 0 ? 0 : o > 0 && n > o ? o : n; +} +function Zt(t, e) { + const n = Number((t == null ? void 0 : t.currentTime) || 0), o = Number(e) > 0 ? Number(e) : At; + return Math.max(0, Math.floor(n * o)); +} +function ue(t, e) { + const n = Number((t == null ? void 0 : t.duration) || 0), o = Number(e) > 0 ? Number(e) : At; + return !Number.isFinite(n) || n <= 0 ? 0 : Math.max(0, Math.floor(n * o)); +} +function Oe(t, e, n) { + var l; + const o = Number(n) > 0 ? Number(n) : At, s = ue(t, o), r = Re(e, s) / o; + try { + t.currentTime = Math.max(0, r); + } catch (u) { + (l = console.debug) == null || l.call(console, u); + } +} +function He(t) { + return t instanceof HTMLMediaElement; +} +function De(t, e) { + return String(t || "").toLowerCase() === "video" ? !0 : e instanceof HTMLVideoElement; +} +function ve(t, e) { + return String(t || "").toLowerCase() === "audio" ? !0 : e instanceof HTMLAudioElement; +} +function Ue(t) { + const e = String(t || "").toLowerCase(); + return e === "gif" || e === "animated-image"; +} +function ze(t) { + var e; + try { + const n = Number((t == null ? void 0 : t.naturalWidth) || (t == null ? void 0 : t.width) || 0), o = Number((t == null ? void 0 : t.naturalHeight) || (t == null ? void 0 : t.height) || 0); + if (!(n > 0 && o > 0)) return ""; + const s = document.createElement("canvas"); + s.width = n, s.height = o; + const i = s.getContext("2d"); + return i ? (i.drawImage(t, 0, 0, n, o), s.toDataURL("image/png")) : ""; + } catch (n) { + return (e = console.debug) == null || e.call(console, n), ""; + } +} +function We(t, e = null, { kind: n = "" } = {}) { + var dt; + if (!t || t._mjrSimplePlayerMounted) return (t == null ? void 0 : t.parentElement) || null; + t._mjrSimplePlayerMounted = !0; + const o = re(e) || At, s = He(t), i = De(n, t), r = ve(n, t), l = Ue(n), u = document.createElement("div"); + u.className = "mjr-mfv-simple-player", u.tabIndex = 0, u.setAttribute("role", "group"), u.setAttribute("aria-label", "Media player"), r && u.classList.add("is-audio"), l && u.classList.add("is-animated-image"); + const a = document.createElement("div"); + a.className = "mjr-mfv-simple-player-controls"; + const d = document.createElement("input"); + d.type = "range", d.className = "mjr-mfv-simple-player-seek", d.min = "0", d.max = "1000", d.step = "1", d.value = "0", d.setAttribute("aria-label", "Seek"), s || (d.disabled = !0, d.classList.add("is-disabled")); + const c = document.createElement("div"); + c.className = "mjr-mfv-simple-player-row"; + const f = document.createElement("button"); + f.type = "button", f.className = "mjr-icon-btn mjr-mfv-simple-player-btn", f.setAttribute("aria-label", "Play/Pause"); + const h = document.createElement("i"); + h.className = "pi pi-pause", h.setAttribute("aria-hidden", "true"), f.appendChild(h); + const m = document.createElement("button"); + m.type = "button", m.className = "mjr-icon-btn mjr-mfv-simple-player-btn", m.setAttribute("aria-label", "Step back"); + const p = document.createElement("i"); + p.className = "pi pi-step-backward", p.setAttribute("aria-hidden", "true"), m.appendChild(p); + const g = document.createElement("button"); + g.type = "button", g.className = "mjr-icon-btn mjr-mfv-simple-player-btn", g.setAttribute("aria-label", "Step forward"); + const b = document.createElement("i"); + b.className = "pi pi-step-forward", b.setAttribute("aria-hidden", "true"), g.appendChild(b); + const C = document.createElement("div"); + C.className = "mjr-mfv-simple-player-time", C.textContent = "0:00 / 0:00"; + const _ = document.createElement("div"); + _.className = "mjr-mfv-simple-player-frame", _.textContent = "F: 0", i || (_.style.display = "none"); + const y = document.createElement("button"); + y.type = "button", y.className = "mjr-icon-btn mjr-mfv-simple-player-btn", y.setAttribute("aria-label", "Mute/Unmute"); + const S = document.createElement("i"); + if (S.className = "pi pi-volume-up", S.setAttribute("aria-hidden", "true"), y.appendChild(S), i || (m.disabled = !0, g.disabled = !0, m.classList.add("is-disabled"), g.classList.add("is-disabled")), c.appendChild(m), c.appendChild(f), c.appendChild(g), c.appendChild(C), c.appendChild(_), c.appendChild(y), a.appendChild(d), a.appendChild(c), u.appendChild(t), r) { + const E = document.createElement("div"); + E.className = "mjr-mfv-simple-player-audio-backdrop", E.textContent = String((e == null ? void 0 : e.filename) || "Audio"), u.appendChild(E); + } + u.appendChild(a); + try { + t instanceof HTMLMediaElement && (t.controls = !1, t.playsInline = !0, t.loop = !0, t.muted = !0, t.autoplay = !0); + } catch (E) { + (dt = console.debug) == null || dt.call(console, E); + } + const x = l ? String((t == null ? void 0 : t.src) || "") : ""; + let B = !1, F = ""; + const P = () => { + if (s) { + h.className = t.paused ? "pi pi-play" : "pi pi-pause"; + return; + } + if (l) { + h.className = B ? "pi pi-play" : "pi pi-pause"; + return; + } + h.className = "pi pi-play"; + }, L = () => { + if (t instanceof HTMLMediaElement) { + S.className = t.muted ? "pi pi-volume-off" : "pi pi-volume-up"; + return; + } + S.className = "pi pi-volume-off", y.disabled = !0, y.classList.add("is-disabled"); + }, I = () => { + if (!i || !(t instanceof HTMLVideoElement)) return; + const E = Zt(t, o), j = ue(t, o); + _.textContent = j > 0 ? `F: ${E}/${j}` : `F: ${E}`; + }, V = () => { + const E = Math.max(0, Math.min(100, Number(d.value) / 1e3 * 100)); + d.style.setProperty("--mjr-seek-pct", `${E}%`); + }, U = () => { + if (!s) { + C.textContent = l ? "Animated" : "Preview", d.value = "0", V(); + return; + } + const E = Number(t.currentTime || 0), j = Number(t.duration || 0); + if (Number.isFinite(j) && j > 0) { + const R = Math.max(0, Math.min(1, E / j)); + d.value = String(Math.round(R * 1e3)), C.textContent = `${Nt(E)} / ${Nt(j)}`; + } else + d.value = "0", C.textContent = `${Nt(E)} / 0:00`; + V(); + }, q = (E) => { + var j; + try { + (j = E == null ? void 0 : E.stopPropagation) == null || j.call(E); + } catch { + } + }, tt = (E) => { + var j, R; + q(E); + try { + if (s) + t.paused ? Xt(t) : (j = t.pause) == null || j.call(t); + else if (l) + if (!B) + F || (F = ze(t)), F && (t.src = F), B = !0; + else { + const O = x ? `${x}${x.includes("?") ? "&" : "?"}mjr_anim=${Date.now()}` : t.src; + t.src = O, B = !1; + } + } catch (O) { + (R = console.debug) == null || R.call(console, O); + } + P(); + }, K = (E, j) => { + var O, z; + if (q(j), !i || !(t instanceof HTMLVideoElement)) return; + try { + (O = t.pause) == null || O.call(t); + } catch (w) { + (z = console.debug) == null || z.call(console, w); + } + const R = Zt(t, o); + Oe(t, R + E, o), P(), I(), U(); + }, J = (E) => { + var j; + if (q(E), t instanceof HTMLMediaElement) { + try { + t.muted = !t.muted; + } catch (R) { + (j = console.debug) == null || j.call(console, R); + } + L(); + } + }, at = (E) => { + var O; + if (q(E), !s) return; + V(); + const j = Number(t.duration || 0); + if (!Number.isFinite(j) || j <= 0) return; + const R = Math.max(0, Math.min(1, Number(d.value) / 1e3)); + try { + t.currentTime = j * R; + } catch (z) { + (O = console.debug) == null || O.call(console, z); + } + I(), U(); + }, rt = (E) => q(E), lt = (E) => { + var j, R, O, z; + try { + if ((R = (j = E == null ? void 0 : E.target) == null ? void 0 : j.closest) != null && R.call(j, "button, input, textarea, select")) return; + (O = u.focus) == null || O.call(u, { preventScroll: !0 }); + } catch (w) { + (z = console.debug) == null || z.call(console, w); + } + }, ct = (E) => { + var R, O, z; + const j = String((E == null ? void 0 : E.key) || ""); + if (!(!j || E != null && E.altKey || E != null && E.ctrlKey || E != null && E.metaKey)) { + if (j === " " || j === "Spacebar") { + (R = E.preventDefault) == null || R.call(E), tt(E); + return; + } + if (j === "ArrowLeft") { + if (!i) return; + (O = E.preventDefault) == null || O.call(E), K(-1, E); + return; + } + if (j === "ArrowRight") { + if (!i) return; + (z = E.preventDefault) == null || z.call(E), K(1, E); + } + } + }; + return f.addEventListener("click", tt), m.addEventListener("click", (E) => K(-1, E)), g.addEventListener("click", (E) => K(1, E)), y.addEventListener("click", J), d.addEventListener("input", at), a.addEventListener("pointerdown", rt), a.addEventListener("click", rt), a.addEventListener("dblclick", rt), u.addEventListener("pointerdown", lt), u.addEventListener("keydown", ct), t instanceof HTMLMediaElement && (t.addEventListener("play", P, { passive: !0 }), t.addEventListener("pause", P, { passive: !0 }), t.addEventListener( + "timeupdate", + () => { + I(), U(); + }, + { passive: !0 } + ), t.addEventListener( + "seeked", + () => { + I(), U(); + }, + { passive: !0 } + ), t.addEventListener( + "loadedmetadata", + () => { + I(), U(); + }, + { passive: !0 } + )), Xt(t), P(), L(), I(), U(), u; +} +const Ye = /* @__PURE__ */ new Set([".mp4", ".webm", ".mov", ".avi", ".mkv"]), Qe = /* @__PURE__ */ new Set([".mp3", ".wav", ".flac", ".ogg", ".m4a", ".aac", ".opus", ".wma"]); +function pe(t) { + try { + const e = String(t || "").trim(), n = e.lastIndexOf("."); + return n >= 0 ? e.slice(n).toLowerCase() : ""; + } catch { + return ""; + } +} +function X(t) { + const e = String((t == null ? void 0 : t.kind) || "").toLowerCase(); + if (e === "video") return "video"; + if (e === "audio") return "audio"; + if (e === "model3d") return "model3d"; + const n = pe((t == null ? void 0 : t.filename) || ""); + return n === ".gif" ? "gif" : Ye.has(n) ? "video" : Qe.has(n) ? "audio" : Ce.has(n) ? "model3d" : "image"; +} +function me(t) { + return t ? t.url ? String(t.url) : t.filename && t.id == null ? Se(t.filename, t.subfolder || "", t.type || "output") : t.filename && Ee(t) || "" : ""; +} +function Q(t = "No media — select assets in the grid") { + const e = document.createElement("div"); + return e.className = "mjr-mfv-empty", e.textContent = t, e; +} +function et(t, e) { + const n = document.createElement("div"); + return n.className = `mjr-mfv-label label-${e}`, n.textContent = t, n; +} +function Kt(t) { + var e; + if (!(!t || typeof t.play != "function")) + try { + const n = t.play(); + n && typeof n.catch == "function" && n.catch(() => { + }); + } catch (n) { + (e = console.debug) == null || e.call(console, n); + } +} +function qe(t, e) { + var o, s; + let n = t && t.nodeType === 1 ? t : (t == null ? void 0 : t.parentElement) || null; + for (; n && n !== e; ) { + try { + const i = (o = window.getComputedStyle) == null ? void 0 : o.call(window, n), r = /(auto|scroll|overlay)/.test(String((i == null ? void 0 : i.overflowY) || "")), l = /(auto|scroll|overlay)/.test(String((i == null ? void 0 : i.overflowX) || "")); + if (r || l) + return n; + } catch (i) { + (s = console.debug) == null || s.call(console, i); + } + n = n.parentElement || null; + } + return null; +} +function Xe(t, e, n) { + if (!t) return !1; + if (Math.abs(Number(n) || 0) >= Math.abs(Number(e) || 0)) { + const i = Number(t.scrollTop || 0), r = Math.max(0, Number(t.scrollHeight || 0) - Number(t.clientHeight || 0)); + if (n < 0 && i > 0 || n > 0 && i < r) return !0; + } + const o = Number(t.scrollLeft || 0), s = Math.max(0, Number(t.scrollWidth || 0) - Number(t.clientWidth || 0)); + return e < 0 && o > 0 || e > 0 && o < s; +} +function Ze(t) { + var e, n, o, s; + if (t) + try { + const i = (e = t.querySelectorAll) == null ? void 0 : e.call(t, "video, audio"); + if (!i || !i.length) return; + for (const r of i) + try { + (n = r.pause) == null || n.call(r); + } catch (l) { + (o = console.debug) == null || o.call(console, l); + } + } catch (i) { + (s = console.debug) == null || s.call(console, i); + } +} +function nt(t, { fill: e = !1 } = {}) { + var a, d; + const n = me(t); + if (!n) return null; + const o = X(t), s = `mjr-mfv-media mjr-mfv-media--fit-height${e ? " mjr-mfv-media--fill" : ""}`, r = pe((t == null ? void 0 : t.filename) || "") === ".webp" && Number((t == null ? void 0 : t.duration) ?? ((a = t == null ? void 0 : t.metadata_raw) == null ? void 0 : a.duration) ?? 0) > 0, l = (c, f) => { + var p; + const h = document.createElement("div"); + h.className = `mjr-mfv-player-host${e ? " mjr-mfv-player-host--fill" : ""}`, h.appendChild(c); + const m = Me(c, { + variant: "viewer", + hostEl: h, + mediaKind: f, + initialFps: re(t) || void 0, + initialFrameCount: Be(t) || void 0 + }); + try { + m && (h._mjrMediaControlsHandle = m); + } catch (g) { + (p = console.debug) == null || p.call(console, g); + } + return h; + }; + if (o === "audio") { + const c = document.createElement("audio"); + c.className = s, c.src = n, c.controls = !1, c.autoplay = !0, c.preload = "metadata", c.loop = !0, c.muted = !0; + try { + c.addEventListener("loadedmetadata", () => Kt(c), { once: !0 }); + } catch (f) { + (d = console.debug) == null || d.call(console, f); + } + return Kt(c), l(c, "audio"); + } + if (o === "video") { + const c = document.createElement("video"); + return c.className = s, c.src = n, c.controls = !1, c.loop = !0, c.muted = !0, c.autoplay = !0, c.playsInline = !0, l(c, "video"); + } + if (o === "model3d") + return Ae(t, n, { + hostClassName: `mjr-model3d-host mjr-mfv-model3d-host${e ? " mjr-mfv-model3d-host--fill" : ""}`, + canvasClassName: `mjr-mfv-media mjr-model3d-render-canvas${e ? " mjr-mfv-media--fill" : ""}`, + hintText: "Rotate: left drag Pan: right drag Zoom: wheel or middle drag", + disableViewerTransform: !0, + pauseDuringExecution: !!pt.FLOATING_VIEWER_PAUSE_DURING_EXECUTION + }); + const u = document.createElement("img"); + return u.className = s, u.src = n, u.alt = String((t == null ? void 0 : t.filename) || ""), u.draggable = !1, (o === "gif" || r) && We(u, t, { + kind: o === "gif" ? "gif" : "animated-image" + }) || u; +} +function he(t, e, n, o, s, i) { + t.beginPath(), typeof t.roundRect == "function" ? t.roundRect(e, n, o, s, i) : (t.moveTo(e + i, n), t.lineTo(e + o - i, n), t.quadraticCurveTo(e + o, n, e + o, n + i), t.lineTo(e + o, n + s - i), t.quadraticCurveTo(e + o, n + s, e + o - i, n + s), t.lineTo(e + i, n + s), t.quadraticCurveTo(e, n + s, e, n + s - i), t.lineTo(e, n + i), t.quadraticCurveTo(e, n, e + i, n), t.closePath()); +} +function ut(t, e, n, o) { + t.save(), t.font = "bold 10px system-ui, sans-serif"; + const s = 5, i = t.measureText(e).width; + t.fillStyle = "rgba(0,0,0,0.58)", he(t, n, o, i + s * 2, 18, 4), t.fill(), t.fillStyle = "#fff", t.fillText(e, n + s, o + 13), t.restore(); +} +function Ke(t, e, n = null) { + switch (String((t == null ? void 0 : t.type) || "").toLowerCase()) { + case "number": + case "int": + case "float": + return we(t, e, n); + case "combo": + return $e(t, e, n); + case "text": + case "string": + case "customtext": + return tn(t, e, n); + case "toggle": + case "boolean": + return en(t, e, n); + default: + return nn(t); + } +} +function it(t, e, n = null) { + var s, i, r, l, u, a, d, c, f, h; + if (!t) return !1; + const o = String(t.type || "").toLowerCase(); + if (o === "number" || o === "int" || o === "float") { + const m = Number(e); + if (Number.isNaN(m)) return !1; + const p = t.options ?? {}, g = p.min ?? -1 / 0, b = p.max ?? 1 / 0; + let C = Math.min(b, Math.max(g, m)); + (o === "int" || p.precision === 0 || p.round === 1) && (C = Math.round(C)), t.value = C; + } else o === "toggle" || o === "boolean" ? t.value = !!e : t.value = e; + try { + const m = Z(), p = (m == null ? void 0 : m.canvas) ?? null, g = n ?? (t == null ? void 0 : t.parent) ?? null, b = t.value; + (s = t.callback) == null || s.call(t, t.value, p, g, null, t), (o === "number" || o === "int" || o === "float") && (t.value = b), Je(t), (i = p == null ? void 0 : p.setDirty) == null || i.call(p, !0, !0), (r = p == null ? void 0 : p.draw) == null || r.call(p, !0, !0); + const C = (g == null ? void 0 : g.graph) ?? null; + C && C !== (m == null ? void 0 : m.graph) && ((l = C.setDirtyCanvas) == null || l.call(C, !0, !0), (u = C.change) == null || u.call(C)), (d = (a = m == null ? void 0 : m.graph) == null ? void 0 : a.setDirtyCanvas) == null || d.call(a, !0, !0), (f = (c = m == null ? void 0 : m.graph) == null ? void 0 : c.change) == null || f.call(c); + } catch (m) { + (h = console.debug) == null || h.call(console, "[MFV] writeWidgetValue", m); + } + return !0; +} +function Je(t) { + var o, s, i, r, l, u; + const e = String(t.value ?? ""), n = (t == null ? void 0 : t.inputEl) ?? (t == null ? void 0 : t.element) ?? (t == null ? void 0 : t.el) ?? ((s = (o = t == null ? void 0 : t.cachedDeepestByFrame) == null ? void 0 : o.widget) == null ? void 0 : s.inputEl) ?? ((r = (i = t == null ? void 0 : t.cachedDeepestByFrame) == null ? void 0 : i.widget) == null ? void 0 : r.element) ?? ((u = (l = t == null ? void 0 : t.cachedDeepestByFrame) == null ? void 0 : l.widget) == null ? void 0 : u.el) ?? null; + n != null && "value" in n && n.value !== e && (n.value = e); +} +function we(t, e, n) { + const o = document.createElement("input"); + o.type = "number", o.className = "mjr-ws-input", o.value = t.value ?? ""; + const s = t.options ?? {}, r = String((t == null ? void 0 : t.type) || "").toLowerCase() === "int" || s.precision === 0 || s.round === 1; + if (s.min != null && (o.min = String(s.min)), s.max != null && (o.max = String(s.max)), r) + o.step = "1"; + else { + const l = s.precision; + o.step = l != null ? String(Math.pow(10, -l)) : "any"; + } + return o.addEventListener("input", () => { + const l = o.value; + l === "" || l === "-" || l === "." || l.endsWith(".") || (it(t, l, n), e == null || e(t.value)); + }), o.addEventListener("change", () => { + it(t, o.value, n) && (o.value = String(t.value), e == null || e(t.value)); + }), o; +} +function $e(t, e, n) { + var i; + const o = document.createElement("select"); + o.className = "mjr-ws-input"; + let s = ((i = t.options) == null ? void 0 : i.values) ?? []; + if (typeof s == "function") + try { + s = s() ?? []; + } catch { + s = []; + } + Array.isArray(s) || (s = []); + for (const r of s) { + const l = document.createElement("option"), u = typeof r == "string" ? r : (r == null ? void 0 : r.content) ?? (r == null ? void 0 : r.value) ?? (r == null ? void 0 : r.text) ?? String(r); + l.value = u, l.textContent = u, u === String(t.value) && (l.selected = !0), o.appendChild(l); + } + return o.addEventListener("change", () => { + it(t, o.value, n) && (e == null || e(t.value)); + }), o; +} +function tn(t, e, n) { + const o = document.createElement("div"); + o.className = "mjr-ws-text-wrapper"; + const s = document.createElement("textarea"); + s.className = "mjr-ws-input mjr-ws-textarea", s.value = t.value ?? "", s.rows = 2; + const i = () => { + s.style.height = "auto", s.style.height = s.scrollHeight + "px"; + }; + return s.addEventListener("change", () => { + it(t, s.value, n) && (e == null || e(t.value)); + }), s.addEventListener("input", () => { + it(t, s.value, n), e == null || e(t.value), i(); + }), o.appendChild(s), o._mjrAutoFit = i, s._mjrAutoFit = i, requestAnimationFrame(i), o; +} +function en(t, e, n) { + const o = document.createElement("label"); + o.className = "mjr-ws-toggle-label"; + const s = document.createElement("input"); + return s.type = "checkbox", s.className = "mjr-ws-checkbox", s.checked = !!t.value, s.addEventListener("change", () => { + it(t, s.checked, n) && (e == null || e(t.value)); + }), o.appendChild(s), o; +} +function nn(t) { + const e = document.createElement("input"); + return e.type = "text", e.className = "mjr-ws-input mjr-ws-readonly", e.value = t.value != null ? String(t.value) : "", e.readOnly = !0, e.tabIndex = -1, e; +} +const on = /* @__PURE__ */ new Set(["imageupload", "button", "hidden"]), sn = /\bnote\b|markdown/i; +function an(t) { + return sn.test(String((t == null ? void 0 : t.type) || "")); +} +function Jt(t) { + var o; + const e = (t == null ? void 0 : t.properties) ?? {}; + if (typeof e.text == "string") return e.text; + if (typeof e.value == "string") return e.value; + if (typeof e.markdown == "string") return e.markdown; + const n = (o = t == null ? void 0 : t.widgets) == null ? void 0 : o[0]; + return n != null && n.value != null ? String(n.value) : ""; +} +function rn(t, e) { + var s; + const n = t == null ? void 0 : t.properties; + n && ("text" in n ? n.text = e : "value" in n ? n.value = e : "markdown" in n ? n.markdown = e : n.text = e); + const o = (s = t == null ? void 0 : t.widgets) == null ? void 0 : s[0]; + o && (o.value = e); +} +const ln = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i, cn = /^[0-9a-f]{20,}$/i; +function dn(t) { + const e = String((t == null ? void 0 : t.type) || ""); + return ln.test(e) || cn.test(e) ? String((t == null ? void 0 : t.title) || "Subgraph").trim() || "Subgraph" : e || `Node #${t == null ? void 0 : t.id}`; +} +class un { + /** + * @param {object} node + * @param {object} [opts] + * @param {() => void} [opts.onLocate] + * @param {boolean} [opts.collapsible] + * @param {boolean} [opts.expanded] + * @param {(expanded: boolean) => void} [opts.onToggle] + * @param {number} [opts.depth] — 0 = top-level, >0 = inside a subgraph + */ + constructor(e, n = {}) { + this._node = e, this._onLocate = n.onLocate ?? null, this._onToggle = typeof n.onToggle == "function" ? n.onToggle : null, this._collapsible = !!n.collapsible, this._expanded = n.expanded !== !1, this._depth = n.depth ?? 0, this._el = null, this._body = null, this._toggleBtn = null, this._inputMap = /* @__PURE__ */ new Map(), this._autoFits = [], this._noteTextarea = null; + } + get el() { + return this._el || (this._el = this._render()), this._el; + } + syncFromGraph() { + var o, s, i, r, l, u, a; + if (this._noteTextarea) { + const d = ((o = this._el) == null ? void 0 : o.ownerDocument) || document; + if ((d == null ? void 0 : d.activeElement) !== this._noteTextarea) { + const c = Jt(this._node); + this._noteTextarea.value !== c && (this._noteTextarea.value = c, (i = (s = this._noteTextarea)._mjrAutoFit) == null || i.call(s)); + } + return; + } + if (!((r = this._node) != null && r.widgets)) return; + const e = ((l = this._el) == null ? void 0 : l.ownerDocument) || document, n = (e == null ? void 0 : e.activeElement) || null; + for (const d of this._node.widgets) { + const c = this._inputMap.get(d.name), f = pn(c); + if (!f) continue; + if (f.type === "checkbox") { + const m = !!d.value; + f.checked !== m && (f.checked = m); + continue; + } + const h = d.value != null ? String(d.value) : ""; + String(f.value ?? "") !== h && (n && f === n || (f.value = h, (u = c == null ? void 0 : c._mjrAutoFit) == null || u.call(c), (a = f == null ? void 0 : f._mjrAutoFit) == null || a.call(f))); + } + } + dispose() { + var e; + (e = this._el) == null || e.remove(), this._el = null, this._autoFits = [], this._inputMap.clear(); + } + setExpanded(e) { + var n, o; + this._expanded = !!e, this._applyExpandedState(), this._expanded && ((n = this._autoFits) != null && n.length) && requestAnimationFrame(() => { + for (const s of this._autoFits) s(); + }), (o = this._onToggle) == null || o.call(this, this._expanded); + } + _render() { + var c, f, h; + const e = this._node, n = document.createElement("section"); + n.className = "mjr-ws-node", n.dataset.nodeId = String(e.id ?? ""), this._depth > 0 && (n.dataset.depth = String(this._depth), n.classList.add("mjr-ws-node--nested")); + const o = document.createElement("div"); + if (o.className = "mjr-ws-node-header", this._collapsible) { + this._header = o; + const m = document.createElement("button"); + m.type = "button", m.className = "mjr-icon-btn mjr-ws-node-toggle", m.title = this._expanded ? "Collapse node" : "Expand node", m.addEventListener("click", (p) => { + p.stopPropagation(), this.setExpanded(!this._expanded); + }), o.appendChild(m), this._toggleBtn = m, o.addEventListener("click", (p) => { + p.target.closest("button") || this.setExpanded(!this._expanded); + }), o.title = this._expanded ? "Collapse node" : "Expand node"; + } + const s = document.createElement("div"); + s.className = "mjr-ws-node-title-wrap"; + const i = document.createElement("span"); + i.className = "mjr-ws-node-type", i.textContent = dn(e), s.appendChild(i); + const r = String(e.title || "").trim(); + if (r && r !== e.type) { + const m = document.createElement("span"); + m.className = "mjr-ws-node-title", m.textContent = r, s.appendChild(m); + } + o.appendChild(s); + const l = document.createElement("button"); + l.type = "button", l.className = "mjr-icon-btn mjr-ws-locate", l.title = "Locate on canvas", l.innerHTML = '', l.addEventListener("click", (m) => { + m.stopPropagation(), this._locateNode(); + }), o.appendChild(l), n.appendChild(o); + const u = document.createElement("div"); + if (u.className = "mjr-ws-node-body", an(e)) { + const m = document.createElement("textarea"); + m.className = "mjr-ws-input mjr-ws-textarea mjr-ws-note-textarea", m.value = Jt(e), m.rows = 4; + const p = () => { + m.style.height = "auto", m.style.height = m.scrollHeight + "px"; + }; + return m.addEventListener("input", () => { + var C, _, y, S, x, B, F; + rn(e, m.value); + const g = (C = e == null ? void 0 : e.widgets) == null ? void 0 : C[0], b = (g == null ? void 0 : g.inputEl) ?? (g == null ? void 0 : g.element) ?? (g == null ? void 0 : g.el) ?? null; + b != null && "value" in b && b.value !== m.value && (b.value = m.value), p(); + try { + const P = Z(), L = (P == null ? void 0 : P.canvas) ?? null; + (_ = L == null ? void 0 : L.setDirty) == null || _.call(L, !0, !0), (y = L == null ? void 0 : L.draw) == null || y.call(L, !0, !0); + const I = (e == null ? void 0 : e.graph) ?? null; + I && I !== (P == null ? void 0 : P.graph) && ((S = I.setDirtyCanvas) == null || S.call(I, !0, !0), (x = I.change) == null || x.call(I)), (F = (B = P == null ? void 0 : P.graph) == null ? void 0 : B.change) == null || F.call(B); + } catch { + } + }), m._mjrAutoFit = p, this._noteTextarea = m, this._autoFits.push(p), u.appendChild(m), this._body = u, n.appendChild(u), this._el = n, this._applyExpandedState(), requestAnimationFrame(p), n; + } + const a = e.widgets ?? []; + let d = !1; + for (const m of a) { + const p = String(m.type || "").toLowerCase(); + if (on.has(p) || m.hidden || (c = m.options) != null && c.hidden) continue; + d = !0; + const g = p === "text" || p === "string" || p === "customtext", b = document.createElement("div"); + b.className = g ? "mjr-ws-widget-row mjr-ws-widget-row--block" : "mjr-ws-widget-row"; + const C = document.createElement("label"); + C.className = "mjr-ws-widget-label", C.textContent = m.name || ""; + const _ = document.createElement("div"); + _.className = "mjr-ws-widget-input"; + const y = Ke(m, () => { + }, e); + _.appendChild(y), this._inputMap.set(m.name, y); + const S = y._mjrAutoFit ?? ((h = (f = y.querySelector) == null ? void 0 : f.call(y, "textarea")) == null ? void 0 : h._mjrAutoFit); + S && this._autoFits.push(S), b.appendChild(C), b.appendChild(_), u.appendChild(b); + } + if (!d) { + const m = document.createElement("div"); + m.className = "mjr-ws-node-empty", m.textContent = "No editable parameters", u.appendChild(m); + } + return this._body = u, n.appendChild(u), this._el = n, this._applyExpandedState(), n; + } + _applyExpandedState() { + if (!(!this._el || !this._body)) { + if (this._el.classList.toggle("is-collapsible", this._collapsible), this._el.classList.toggle("is-collapsed", this._collapsible && !this._expanded), this._toggleBtn) { + const e = this._expanded ? "pi pi-chevron-down" : "pi pi-chevron-right"; + this._toggleBtn.innerHTML = ``, this._toggleBtn.title = this._expanded ? "Collapse node" : "Expand node", this._toggleBtn.setAttribute("aria-expanded", String(this._expanded)); + } + this._header && (this._header.title = this._expanded ? "Collapse node" : "Expand node"); + } + } + _locateNode() { + var n, o, s, i, r, l, u, a; + if (this._onLocate) { + this._onLocate(); + return; + } + const e = this._node; + if (e) + try { + const d = Z(), c = d == null ? void 0 : d.canvas; + if (!c) return; + if (typeof c.centerOnNode == "function") + c.centerOnNode(e); + else if (c.ds && e.pos) { + const f = ((n = c.canvas) == null ? void 0 : n.width) || ((o = c.element) == null ? void 0 : o.width) || 800, h = ((s = c.canvas) == null ? void 0 : s.height) || ((i = c.element) == null ? void 0 : i.height) || 600; + c.ds.offset[0] = -e.pos[0] - (((r = e.size) == null ? void 0 : r[0]) || 0) / 2 + f / 2, c.ds.offset[1] = -e.pos[1] - (((l = e.size) == null ? void 0 : l[1]) || 0) / 2 + h / 2, (u = c.setDirty) == null || u.call(c, !0, !0); + } + } catch (d) { + (a = console.debug) == null || a.call(console, "[MFV sidebar] locateNode error", d); + } + } +} +function pn(t) { + var e, n, o; + return t ? (n = (e = t.classList) == null ? void 0 : e.contains) != null && n.call(e, "mjr-ws-text-wrapper") ? ((o = t.querySelector) == null ? void 0 : o.call(t, "textarea")) ?? t : t : null; +} +class mn { + constructor() { + this._searchQuery = "", this._expandedNodeIds = /* @__PURE__ */ new Set(), this._expandedChildrenIds = /* @__PURE__ */ new Set(), this._renderers = [], this._el = this._build(), this._lastNodeSig = "", this._lastSelectedId = ""; + } + get el() { + return this._el; + } + refresh() { + this._maybeRebuildList(); + for (const e of this._renderers) e.syncFromGraph(); + } + forceRebuild() { + this._lastNodeSig = "", this._maybeRebuildList(); + } + dispose() { + var e, n; + for (const o of this._renderers) o.dispose(); + this._renderers = [], (n = (e = this._el) == null ? void 0 : e.remove) == null || n.call(e); + } + _build() { + const e = document.createElement("div"); + e.className = "mjr-ws-nodes-tab"; + const n = document.createElement("div"); + n.className = "mjr-ws-search-wrap"; + const o = document.createElement("i"); + o.className = "pi pi-search mjr-ws-search-icon", o.setAttribute("aria-hidden", "true"), n.appendChild(o), this._searchInput = document.createElement("input"), this._searchInput.type = "text", this._searchInput.className = "mjr-ws-search", this._searchInput.placeholder = "Search nodes...", this._searchInput.addEventListener("input", () => { + this._searchQuery = this._searchInput.value, this.forceRebuild(); + }), n.appendChild(this._searchInput); + const s = document.createElement("button"); + return s.type = "button", s.className = "mjr-ws-search-clear", s.title = "Clear search", s.innerHTML = '', s.addEventListener("click", () => { + this._searchInput.value = "", this._searchQuery = "", this.forceRebuild(); + }), n.appendChild(s), e.appendChild(n), this._list = document.createElement("div"), this._list.className = "mjr-ws-nodes-list", e.appendChild(this._list), e; + } + _syncCanvasSelection() { + var o; + const n = bn()[0] || ""; + if (!(!n || n === this._lastSelectedId)) { + this._lastSelectedId = n; + for (const s of this._renderers) + if (String(((o = s._node) == null ? void 0 : o.id) ?? "") === n && !s._expanded) { + s.setExpanded(!0); + break; + } + } + } + _maybeRebuildList() { + const e = hn(), n = e ? fe(e) : [], o = (this._searchQuery || "").toLowerCase().trim(), s = o ? _e(n, o) : n, i = _n(s); + if (this._syncCanvasSelection(), i !== this._lastNodeSig) { + this._lastNodeSig = i; + for (const r of this._renderers) r.dispose(); + if (this._renderers = [], this._list.innerHTML = "", !s.length) { + const r = document.createElement("div"); + r.className = "mjr-ws-sidebar-empty", r.textContent = n.length ? "No nodes match your search" : "No nodes in workflow", this._list.appendChild(r); + return; + } + this._renderItems(s, this._list, 0); + } + } + /** + * Recursively render tree items into a container. + * @param {{node: object, children: object[]}[]} items + * @param {HTMLElement} container + * @param {number} depth + */ + _renderItems(e, n, o) { + for (const { node: s, children: i } of e) { + const r = String((s == null ? void 0 : s.id) ?? ""), l = new un(s, { + collapsible: !0, + expanded: this._expandedNodeIds.has(r), + depth: o, + onLocate: () => gn(s), + onToggle: (u) => { + if (u) { + this._expandedNodeIds = /* @__PURE__ */ new Set([r]); + for (const a of this._renderers) + a !== l && a.setExpanded(!1); + } else + this._expandedNodeIds.delete(r); + } + }); + if (this._renderers.push(l), n.appendChild(l.el), i.length > 0) { + const u = this._expandedChildrenIds.has(r), a = document.createElement("button"); + a.type = "button", a.className = "mjr-ws-children-toggle", o > 0 && a.classList.add("mjr-ws-children-toggle--nested"), wt(a, i.length, u); + const d = document.createElement("div"); + d.className = "mjr-ws-children", d.hidden = !u, this._renderItems(i, d, o + 1), a.addEventListener("click", () => { + const c = d.hidden; + d.hidden = !c, c ? this._expandedChildrenIds.add(r) : this._expandedChildrenIds.delete(r), wt(a, i.length, c); + }), n.appendChild(a), n.appendChild(d); + } + } + } +} +function hn() { + var t; + try { + const e = Z(); + return (e == null ? void 0 : e.graph) ?? ((t = e == null ? void 0 : e.canvas) == null ? void 0 : t.graph) ?? null; + } catch { + return null; + } +} +function fn(t) { + var n, o, s, i, r; + const e = [ + t == null ? void 0 : t.subgraph, + t == null ? void 0 : t._subgraph, + (n = t == null ? void 0 : t.subgraph) == null ? void 0 : n.graph, + (o = t == null ? void 0 : t.subgraph) == null ? void 0 : o.lgraph, + (s = t == null ? void 0 : t.properties) == null ? void 0 : s.subgraph, + t == null ? void 0 : t.subgraph_instance, + (i = t == null ? void 0 : t.subgraph_instance) == null ? void 0 : i.graph, + t == null ? void 0 : t.inner_graph, + t == null ? void 0 : t.subgraph_graph + ].filter((l) => l && typeof l == "object" && Array.isArray(l.nodes)); + return Array.isArray(t == null ? void 0 : t.nodes) && t.nodes.length > 0 && t.nodes !== ((r = t == null ? void 0 : t.graph) == null ? void 0 : r.nodes) && e.push({ nodes: t.nodes }), e; +} +function fe(t, e = /* @__PURE__ */ new Set()) { + if (!t || e.has(t)) return []; + e.add(t); + const n = Array.isArray(t.nodes) ? t.nodes : [], o = []; + for (const s of n) { + if (!s) continue; + const r = fn(s).flatMap((l) => fe(l, e)); + o.push({ node: s, children: r }); + } + return o; +} +function _e(t, e) { + const n = []; + for (const { node: o, children: s } of t) { + const i = (o.type || "").toLowerCase().includes(e) || (o.title || "").toLowerCase().includes(e), r = _e(s, e); + (i || r.length > 0) && n.push({ node: o, children: r }); + } + return n; +} +function _n(t) { + const e = []; + function n(o) { + for (const { node: s, children: i } of o) + e.push(s.id), n(i); + } + return n(t), e.join(","); +} +function wt(t, e, n) { + const o = n ? "pi-chevron-down" : "pi-chevron-right"; + t.innerHTML = `${e} inner node${e !== 1 ? "s" : ""}`, t.setAttribute("aria-expanded", String(n)); +} +function gn(t) { + var e, n, o, s, i, r, l; + try { + const u = Z(), a = u == null ? void 0 : u.canvas; + if (!a) return; + if ((e = a.selectNode) == null || e.call(a, t, !1), typeof a.centerOnNode == "function") + a.centerOnNode(t); + else if (t.pos && a.ds) { + const d = a.canvas, c = (d == null ? void 0 : d.width) ?? 800, f = (d == null ? void 0 : d.height) ?? 600, h = a.ds.scale ?? 1; + a.ds.offset = [ + -t.pos[0] + c / (2 * h) - (((n = t.size) == null ? void 0 : n[0]) ?? 100) / 2, + -t.pos[1] + f / (2 * h) - (((o = t.size) == null ? void 0 : o[1]) ?? 80) / 2 + ], (s = a.setDirty) == null || s.call(a, !0, !0); + } + (r = (i = a.canvas) == null ? void 0 : i.focus) == null || r.call(i); + } catch (u) { + (l = console.debug) == null || l.call(console, "[MFV] _focusNode", u); + } +} +function bn() { + var t, e, n; + try { + const o = Z(), s = ((t = o == null ? void 0 : o.canvas) == null ? void 0 : t.selected_nodes) ?? ((e = o == null ? void 0 : o.canvas) == null ? void 0 : e.selectedNodes) ?? null; + if (!s) return []; + if (Array.isArray(s)) return s.map((i) => String((i == null ? void 0 : i.id) ?? "")).filter(Boolean); + if (s instanceof Map) + return Array.from(s.values()).map((i) => String((i == null ? void 0 : i.id) ?? "")).filter(Boolean); + if (typeof s == "object") + return Object.values(s).map((i) => String((i == null ? void 0 : i.id) ?? "")).filter(Boolean); + } catch (o) { + (n = console.debug) == null || n.call(console, "[MFV] _getSelectedNodeIds", o); + } + return []; +} +const yn = 16; +class Cn { + constructor({ hostEl: e, onClose: n } = {}) { + this._hostEl = e, this._onClose = n ?? null, this._visible = !1, this._liveSyncHandle = null, this._liveSyncMode = "", this._resizeCleanup = null, this._nodesTab = new mn(), this._el = this._build(); + } + get el() { + return this._el; + } + get isVisible() { + return this._visible; + } + show() { + this._visible = !0, this._el.classList.add("open"), this._nodesTab.refresh(), this._startLiveSync(); + } + hide() { + this._visible = !1, this._el.classList.remove("open"), this._stopLiveSync(); + } + toggle() { + var e; + this._visible ? (this.hide(), (e = this._onClose) == null || e.call(this)) : this.show(); + } + refresh() { + this._visible && this._nodesTab.refresh(); + } + syncFromGraph() { + this._visible && this._nodesTab.refresh(); + } + dispose() { + var e, n, o; + this._stopLiveSync(), this._disposeResize(), (n = (e = this._nodesTab) == null ? void 0 : e.dispose) == null || n.call(e), this._nodesTab = null, (o = this._el) == null || o.remove(); + } + _build() { + const e = document.createElement("div"); + e.className = "mjr-ws-sidebar"; + const n = document.createElement("div"); + n.className = "mjr-ws-sidebar-header"; + const o = document.createElement("span"); + o.className = "mjr-ws-sidebar-title", o.textContent = "Nodes", n.appendChild(o); + const s = document.createElement("button"); + s.type = "button", s.className = "mjr-icon-btn", s.title = "Close sidebar", s.innerHTML = '', s.addEventListener("click", () => { + var r; + this.hide(), (r = this._onClose) == null || r.call(this); + }), n.appendChild(s), e.appendChild(n); + const i = document.createElement("div"); + return i.className = "mjr-ws-sidebar-resizer", i.setAttribute("role", "separator"), i.setAttribute("aria-orientation", "vertical"), i.setAttribute("aria-hidden", "true"), e.appendChild(i), this._bindResize(i), this._body = this._nodesTab.el, this._body.classList.add("mjr-ws-sidebar-body"), e.appendChild(this._body), e; + } + _startLiveSync() { + if (this._liveSyncHandle != null) return; + const e = $t(this._el), n = () => { + this._liveSyncHandle = null, this._liveSyncMode = "", this._visible && (this.syncFromGraph(), this._startLiveSync()); + }; + if (typeof e.requestAnimationFrame == "function") { + this._liveSyncMode = "raf", this._liveSyncHandle = e.requestAnimationFrame(n); + return; + } + this._liveSyncMode = "timeout", this._liveSyncHandle = e.setTimeout(n, yn); + } + _stopLiveSync() { + var n; + if (this._liveSyncHandle == null) return; + const e = $t(this._el); + try { + this._liveSyncMode === "raf" && typeof e.cancelAnimationFrame == "function" ? e.cancelAnimationFrame(this._liveSyncHandle) : typeof e.clearTimeout == "function" && e.clearTimeout(this._liveSyncHandle); + } catch (o) { + (n = console.debug) == null || n.call(console, o); + } + this._liveSyncHandle = null, this._liveSyncMode = ""; + } + _bindResize(e) { + if (!e) return; + const o = (e.ownerDocument || document).defaultView || window, s = 180, i = (r) => { + var g; + if (r.button !== 0 || !((g = this._el) != null && g.classList.contains("open"))) return; + const l = this._el.parentElement; + if (!l) return; + const u = this._el.getBoundingClientRect(), a = l.getBoundingClientRect(), d = l.getAttribute("data-sidebar-pos") || "right", c = Math.max( + s, + Math.floor(a.width * (d === "bottom" ? 1 : 0.65)) + ); + if (d === "bottom") return; + r.preventDefault(), r.stopPropagation(), e.classList.add("is-dragging"), this._el.classList.add("is-resizing"); + const f = r.clientX, h = u.width, m = (b) => { + const C = b.clientX - f, _ = d === "left" ? h - C : h + C, y = Math.max(s, Math.min(c, _)); + this._el.style.width = `${Math.round(y)}px`; + }, p = () => { + e.classList.remove("is-dragging"), this._el.classList.remove("is-resizing"), o.removeEventListener("pointermove", m), o.removeEventListener("pointerup", p), o.removeEventListener("pointercancel", p); + }; + o.addEventListener("pointermove", m), o.addEventListener("pointerup", p), o.addEventListener("pointercancel", p); + }; + e.addEventListener("pointerdown", i), this._resizeCleanup = () => e.removeEventListener("pointerdown", i); + } + _disposeResize() { + var e, n; + try { + (e = this._resizeCleanup) == null || e.call(this); + } catch (o) { + (n = console.debug) == null || n.call(console, o); + } + this._resizeCleanup = null; + } +} +function $t(t) { + var n; + const e = ((n = t == null ? void 0 : t.ownerDocument) == null ? void 0 : n.defaultView) || null; + return e || (typeof window < "u" ? window : globalThis); +} +const H = Object.freeze({ + IDLE: "idle", + RUNNING: "running", + STOPPING: "stopping", + ERROR: "error" +}), An = /* @__PURE__ */ new Set(["default", "auto", "latent2rgb", "taesd", "none"]), te = "progress-update"; +function Sn() { + const t = document.createElement("div"); + t.className = "mjr-mfv-run-controls"; + const e = document.createElement("button"); + e.type = "button", e.className = "mjr-icon-btn mjr-mfv-run-btn"; + const n = v("tooltip.queuePrompt", "Queue Prompt (Run)"); + e.title = n, e.setAttribute("aria-label", n); + const o = document.createElement("i"); + o.className = "pi pi-play", o.setAttribute("aria-hidden", "true"), e.appendChild(o); + const s = document.createElement("button"); + s.type = "button", s.className = "mjr-icon-btn mjr-mfv-stop-btn"; + const i = document.createElement("i"); + i.className = "pi pi-stop", i.setAttribute("aria-hidden", "true"), s.appendChild(i), t.appendChild(e), t.appendChild(s); + let r = H.IDLE, l = !1, u = !1, a = null; + function d() { + a != null && (clearTimeout(a), a = null); + } + function c(_, { canStop: y = !1 } = {}) { + r = _, e.classList.toggle("running", r === H.RUNNING), e.classList.toggle("stopping", r === H.STOPPING), e.classList.toggle("error", r === H.ERROR), e.disabled = r === H.RUNNING || r === H.STOPPING, s.disabled = !y || r === H.STOPPING, s.classList.toggle("active", y && r !== H.STOPPING), s.classList.toggle("stopping", r === H.STOPPING), r === H.RUNNING || r === H.STOPPING ? o.className = "pi pi-spin pi-spinner" : o.className = "pi pi-play"; + } + function f() { + const _ = v("tooltip.queueStop", "Stop Generation"); + s.title = _, s.setAttribute("aria-label", _); + } + function h(_ = gt.getSnapshot(), { authoritative: y = !1 } = {}) { + const S = Math.max(0, Number(_ == null ? void 0 : _.queue) || 0), x = (_ == null ? void 0 : _.prompt) || null, B = !!(x != null && x.currentlyExecuting), F = !!(x && (x.currentlyExecuting || x.errorDetails)), P = S > 0 || F, L = !!(x != null && x.errorDetails); + y && S === 0 && !x && (l = !1, u = !1); + const I = l || u || B || S > 0; + if ((B || P || S > 0) && (l = !1), L) { + u = !1, d(), c(H.ERROR, { canStop: !1 }); + return; + } + if (u) { + if (!I) { + u = !1, h(_); + return; + } + c(H.STOPPING, { canStop: !1 }); + return; + } + if (l || B || P || S > 0) { + d(), c(H.RUNNING, { canStop: !0 }); + return; + } + d(), c(H.IDLE, { canStop: !1 }); + } + function m() { + l = !1, u = !1, d(), c(H.ERROR, { canStop: !1 }), a = setTimeout(() => { + a = null, h(); + }, 1500); + } + async function p() { + const _ = Z(), S = (_ != null && _.api && typeof _.api.interrupt == "function" ? _.api : null) ?? le(_); + if (S && typeof S.interrupt == "function") + return await S.interrupt(), { tracked: !0 }; + if (S && typeof S.fetchApi == "function") { + const B = await S.fetchApi("/interrupt", { method: "POST" }); + if (!(B != null && B.ok)) throw new Error(`POST /interrupt failed (${B == null ? void 0 : B.status})`); + return { tracked: !0 }; + } + const x = await fetch("/interrupt", { method: "POST", credentials: "include" }); + if (!x.ok) throw new Error(`POST /interrupt failed (${x.status})`); + return { tracked: !1 }; + } + async function g() { + var _; + if (!(r === H.RUNNING || r === H.STOPPING)) { + l = !0, u = !1, h(); + try { + const y = await Mn(); + y != null && y.tracked || (l = !1), h(); + } catch (y) { + (_ = console.error) == null || _.call(console, "[MFV Run]", y), m(); + } + } + } + async function b() { + var _; + if (r === H.RUNNING) { + u = !0, h(); + try { + const y = await p(); + y != null && y.tracked || (u = !1, l = !1), h(); + } catch (y) { + (_ = console.error) == null || _.call(console, "[MFV Stop]", y), u = !1, h(); + } finally { + } + } + } + f(), s.disabled = !0, e.addEventListener("click", g), s.addEventListener("click", b); + const C = (_) => { + h((_ == null ? void 0 : _.detail) || gt.getSnapshot(), { + authoritative: !0 + }); + }; + return gt.addEventListener(te, C), Ne({ timeoutMs: 4e3 }).catch((_) => { + var y; + (y = console.debug) == null || y.call(console, _); + }), h(), { + el: t, + dispose() { + d(), e.removeEventListener("click", g), s.removeEventListener("click", b), gt.removeEventListener( + te, + C + ); + } + }; +} +function En(t = pt.MFV_PREVIEW_METHOD) { + const e = String(t || "").trim().toLowerCase(); + return An.has(e) ? e : "taesd"; +} +function ge(t, e = pt.MFV_PREVIEW_METHOD) { + var s; + const n = En(e), o = { + ...(t == null ? void 0 : t.extra_data) || {}, + extra_pnginfo: { + ...((s = t == null ? void 0 : t.extra_data) == null ? void 0 : s.extra_pnginfo) || {} + } + }; + return (t == null ? void 0 : t.workflow) != null && (o.extra_pnginfo.workflow = t.workflow), n !== "default" ? o.preview_method = n : delete o.preview_method, { + ...t, + extra_data: o + }; +} +function ee(t, { previewMethod: e = pt.MFV_PREVIEW_METHOD, clientId: n = null } = {}) { + const o = ge(t, e), s = { + prompt: o == null ? void 0 : o.output, + extra_data: (o == null ? void 0 : o.extra_data) || {} + }, i = String(n || "").trim(); + return i && (s.client_id = i), s; +} +function ne(t, e) { + const n = [ + t == null ? void 0 : t.clientId, + t == null ? void 0 : t.clientID, + t == null ? void 0 : t.client_id, + e == null ? void 0 : e.clientId, + e == null ? void 0 : e.clientID, + e == null ? void 0 : e.client_id + ]; + for (const o of n) { + const s = String(o || "").trim(); + if (s) return s; + } + return ""; +} +function xt(t, e) { + var n; + for (const o of (t == null ? void 0 : t.nodes) ?? []) + e(o), (n = o.subgraph) != null && n.nodes && xt(o.subgraph, e); +} +async function Mn() { + var l, u; + const t = Z(); + if (!t) throw new Error("ComfyUI app not available"); + const n = (t != null && t.api && typeof t.api.queuePrompt == "function" ? t.api : null) ?? le(t); + if (!!!(n && typeof n.queuePrompt == "function" || n && typeof n.fetchApi == "function") && typeof t.queuePrompt == "function") + return await t.queuePrompt(0), { tracked: !0 }; + const s = t.rootGraph ?? t.graph; + xt(s, (a) => { + var d; + for (const c of a.widgets ?? []) + (d = c.beforeQueued) == null || d.call(c, { isPartialExecution: !1 }); + }); + const i = typeof t.graphToPrompt == "function" ? await t.graphToPrompt() : null; + if (!(i != null && i.output)) throw new Error("graphToPrompt returned empty output"); + let r; + if (n && typeof n.queuePrompt == "function") + await n.queuePrompt(0, ge(i)), r = { tracked: !0 }; + else if (n && typeof n.fetchApi == "function") { + const a = await n.fetchApi("/prompt", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify( + ee(i, { + clientId: ne(n, t) + }) + ) + }); + if (!(a != null && a.ok)) throw new Error(`POST /prompt failed (${a == null ? void 0 : a.status})`); + r = { tracked: !0 }; + } else { + const a = await fetch("/prompt", { + method: "POST", + credentials: "include", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify( + ee(i, { + clientId: ne(null, t) + }) + ) + }); + if (!a.ok) throw new Error(`POST /prompt failed (${a.status})`); + r = { tracked: !1 }; + } + return xt(s, (a) => { + var d; + for (const c of a.widgets ?? []) + (d = c.afterQueued) == null || d.call(c, { isPartialExecution: !1 }); + }), (u = (l = t.canvas) == null ? void 0 : l.draw) == null || u.call(l, !0, !0), r; +} +const Bn = { rgb: "#e0e0e0", r: "#ff5555", g: "#44dd66", b: "#5599ff", a: "#ffffff", l: "#bbbbbb" }, Nn = { rgb: "RGB", r: "R", g: "G", b: "B", a: "A", l: "L" }, xn = { rgb: "500", r: "700", g: "700", b: "700", a: "700", l: "400" }; +function Pn(t) { + var n; + const e = document.createElement("div"); + return e.className = "mjr-mfv", e.setAttribute("role", "dialog"), e.setAttribute("aria-modal", "false"), e.setAttribute("aria-hidden", "true"), t.element = e, e.appendChild(t._buildHeader()), e.setAttribute("aria-labelledby", t._titleId), e.appendChild(t._buildToolbar()), e.appendChild(xe(t)), t._contentWrapper = document.createElement("div"), t._contentWrapper.className = "mjr-mfv-content-wrapper", t._applySidebarPosition(), t._contentEl = document.createElement("div"), t._contentEl.className = "mjr-mfv-content", t._contentWrapper.appendChild(t._contentEl), t._overlayCanvas = document.createElement("canvas"), t._overlayCanvas.className = "mjr-mfv-overlay-canvas", t._contentEl.appendChild(t._overlayCanvas), t._contentEl.appendChild(Pe(t)), t._sidebar = new Cn({ + hostEl: e, + onClose: () => t._updateSettingsBtnState(!1) + }), t._contentWrapper.appendChild(t._sidebar.el), e.appendChild(t._contentWrapper), t._rebindControlHandlers(), t._bindPanelInteractions(), t._bindDocumentUiHandlers(), (n = t._bindLayoutObserver) == null || n.call(t), t._onSidebarPosChanged = (o) => { + var s; + ((s = o == null ? void 0 : o.detail) == null ? void 0 : s.key) === "viewer.mfvSidebarPosition" && t._applySidebarPosition(); + }, window.addEventListener("mjr-settings-changed", t._onSidebarPosChanged), t._refresh(), e; +} +function Ln(t) { + const e = document.createElement("div"); + e.className = "mjr-mfv-header"; + const n = document.createElement("span"); + n.className = "mjr-mfv-header-title", n.id = t._titleId, n.textContent = "〽️ Majoor Floating Viewer"; + const o = document.createElement("button"); + t._closeBtn = o, o.type = "button", o.className = "mjr-icon-btn mjr-mfv-close-btn", yt(o, v("tooltip.closeViewer", "Close viewer"), Ve); + const s = document.createElement("i"); + return s.className = "pi pi-times", s.setAttribute("aria-hidden", "true"), o.appendChild(s), e.appendChild(n), e.appendChild(o), e; +} +function Fn(t) { + var It, Tt; + const e = (M, { min: A, max: N, step: k, value: G } = {}) => { + const Y = document.createElement("div"); + Y.className = "mjr-mfv-toolbar-range"; + const W = document.createElement("input"); + W.type = "range", W.min = String(A), W.max = String(N), W.step = String(k), W.value = String(G), W.title = M || ""; + const $ = document.createElement("span"); + return $.className = "mjr-mfv-toolbar-range-out", $.textContent = Number(G).toFixed(2), Y.appendChild(W), Y.appendChild($), { wrap: Y, input: W, out: $ }; + }, n = document.createElement("div"); + n.className = "mjr-mfv-toolbar", t._modeBtn = document.createElement("button"), t._modeBtn.type = "button", t._modeBtn.className = "mjr-icon-btn", t._updateModeBtnUI(), n.appendChild(t._modeBtn); + const o = document.createElement("button"); + o.type = "button", o.className = "mjr-icon-btn mjr-mfv-pin-trigger", o.title = "Pin slots A/B/C/D", o.setAttribute("aria-haspopup", "dialog"), o.setAttribute("aria-expanded", "false"), o.innerHTML = '', n.appendChild(o); + const s = document.createElement("div"); + s.className = "mjr-mfv-pin-popover", t.element.appendChild(s); + const i = document.createElement("div"); + i.className = "mjr-menu", i.style.cssText = "display:grid;gap:4px;", i.setAttribute("role", "group"), i.setAttribute("aria-label", "Pin References"), s.appendChild(i), t._pinGroup = i, t._pinBtns = {}; + for (const M of ["A", "B", "C", "D"]) { + const A = document.createElement("button"); + A.type = "button", A.className = "mjr-menu-item mjr-mfv-pin-btn", A.dataset.slot = M, A.title = `Pin Asset ${M}`, A.setAttribute("aria-pressed", "false"); + const N = document.createElement("span"); + N.className = "mjr-menu-item-label", N.textContent = `Asset ${M}`; + const k = document.createElement("i"); + k.className = "pi pi-map-marker mjr-menu-item-check", k.style.opacity = "0", A.appendChild(N), A.appendChild(k), i.appendChild(A), t._pinBtns[M] = A; + } + t._updatePinUI(), t._pinBtn = o, t._pinPopover = s; + const r = () => { + const M = o.getBoundingClientRect(), A = t.element.getBoundingClientRect(); + s.style.left = `${M.left - A.left}px`, s.style.top = `${M.bottom - A.top + 4}px`, s.classList.add("is-open"), o.setAttribute("aria-expanded", "true"); + }; + t._closePinPopover = () => { + s.classList.remove("is-open"), o.setAttribute("aria-expanded", "false"); + }, o.addEventListener("click", (M) => { + var A; + M.stopPropagation(), s.classList.contains("is-open") ? t._closePinPopover() : ((A = t._closeAllToolbarPopovers) == null || A.call(t), r()); + }); + const l = document.createElement("button"); + l.type = "button", l.className = "mjr-icon-btn mjr-mfv-guides-trigger", l.title = "Guides", l.setAttribute("aria-haspopup", "listbox"), l.setAttribute("aria-expanded", "false"); + const u = document.createElement("img"); + u.src = new URL("data:image/png;base64,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", import.meta.url).href, u.className = "mjr-mfv-guides-icon", u.alt = "", u.setAttribute("aria-hidden", "true"), l.appendChild(u), n.appendChild(l); + const a = document.createElement("div"); + a.className = "mjr-mfv-guides-popover", t.element.appendChild(a); + const d = document.createElement("div"); + d.className = "mjr-menu", d.style.cssText = "display:grid;gap:4px;", a.appendChild(d); + const c = document.createElement("select"); + c.style.cssText = "position:absolute;opacity:0;pointer-events:none;width:0;height:0;overflow:hidden;", a.appendChild(c); + const f = [ + { value: "0", label: "Off" }, + { value: "1", label: "Thirds" }, + { value: "2", label: "Center" }, + { value: "3", label: "Safe" } + ], h = String(t._gridMode || 0), m = []; + for (const M of f) { + const A = document.createElement("option"); + A.value = M.value, c.appendChild(A); + const N = document.createElement("button"); + N.type = "button", N.className = "mjr-menu-item", N.dataset.value = M.value; + const k = document.createElement("span"); + k.className = "mjr-menu-item-label", k.textContent = M.label; + const G = document.createElement("i"); + G.className = "pi pi-check mjr-menu-item-check", G.style.opacity = M.value === h ? "1" : "0", N.appendChild(k), N.appendChild(G), d.appendChild(N), m.push(N), M.value === h && N.classList.add("is-active"); + } + c.value = h, l.classList.toggle("is-on", h !== "0"), t._guidesSelect = c, t._guideBtn = l, t._guidePopover = a; + const p = () => { + const M = l.getBoundingClientRect(), A = t.element.getBoundingClientRect(); + a.style.left = `${M.left - A.left}px`, a.style.top = `${M.bottom - A.top + 4}px`, a.classList.add("is-open"), l.setAttribute("aria-expanded", "true"); + }; + t._closeGuidePopover = () => { + a.classList.remove("is-open"), l.setAttribute("aria-expanded", "false"); + }, l.addEventListener("click", (M) => { + var A; + M.stopPropagation(), a.classList.contains("is-open") ? t._closeGuidePopover() : ((A = t._closeAllToolbarPopovers) == null || A.call(t), p()); + }), d.addEventListener("click", (M) => { + const A = M.target.closest(".mjr-menu-item"); + if (!A) return; + const N = A.dataset.value; + c.value = N, c.dispatchEvent(new Event("change", { bubbles: !0 })), m.forEach((k) => { + const G = k.dataset.value === N; + k.classList.toggle("is-active", G), k.querySelector(".mjr-menu-item-check").style.opacity = G ? "1" : "0"; + }), l.classList.toggle("is-on", N !== "0"), t._closeGuidePopover(); + }); + const g = String(t._channel || "rgb"), b = document.createElement("button"); + b.type = "button", b.className = "mjr-icon-btn mjr-mfv-ch-trigger", b.title = "Channel", b.setAttribute("aria-haspopup", "listbox"), b.setAttribute("aria-expanded", "false"); + const C = document.createElement("img"); + C.src = new URL("data:image/png;base64,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", import.meta.url).href, C.className = "mjr-mfv-ch-icon", C.alt = "", C.setAttribute("aria-hidden", "true"), b.appendChild(C), n.appendChild(b); + const _ = (M) => { + if (!M || M === "rgb") + b.replaceChildren(C); + else { + const A = Bn[M] || "#e0e0e0", N = xn[M] || "500", k = Nn[M] || M.toUpperCase(), G = document.createElement("span"); + G.className = "mjr-mfv-ch-label", G.style.color = A, G.style.fontWeight = N, G.textContent = k, b.replaceChildren(G); + } + }, y = document.createElement("div"); + y.className = "mjr-mfv-ch-popover", t.element.appendChild(y); + const S = document.createElement("div"); + S.className = "mjr-menu", S.style.cssText = "display:grid;gap:4px;", y.appendChild(S); + const x = document.createElement("select"); + x.style.cssText = "position:absolute;opacity:0;pointer-events:none;width:0;height:0;overflow:hidden;", y.appendChild(x); + const B = [ + { value: "rgb", color: "#e0e0e0", weight: "500", label: "RGB" }, + { value: "r", color: "#ff5555", weight: "700", label: "R" }, + { value: "g", color: "#44dd66", weight: "700", label: "G" }, + { value: "b", color: "#5599ff", weight: "700", label: "B" }, + { value: "a", color: "#ffffff", weight: "700", label: "A" }, + { value: "l", color: "#bbbbbb", weight: "400", label: "L" } + ], F = []; + for (const M of B) { + const A = document.createElement("option"); + A.value = M.value, x.appendChild(A); + const N = document.createElement("button"); + N.type = "button", N.className = "mjr-menu-item", N.dataset.value = M.value; + const k = document.createElement("span"); + k.className = "mjr-menu-item-label"; + const G = document.createElement("span"); + G.textContent = M.label, G.style.color = M.color, G.style.fontWeight = M.weight, k.appendChild(G); + const Y = document.createElement("i"); + Y.className = "pi pi-check mjr-menu-item-check", Y.style.opacity = M.value === g ? "1" : "0", N.appendChild(k), N.appendChild(Y), S.appendChild(N), F.push(N), M.value === g && N.classList.add("is-active"); + } + x.value = g, _(g), b.classList.toggle("is-on", g !== "rgb"), t._channelSelect = x, t._chBtn = b, t._chPopover = y; + const P = () => { + const M = b.getBoundingClientRect(), A = t.element.getBoundingClientRect(); + y.style.left = `${M.left - A.left}px`, y.style.top = `${M.bottom - A.top + 4}px`, y.classList.add("is-open"), b.setAttribute("aria-expanded", "true"); + }; + t._closeChPopover = () => { + y.classList.remove("is-open"), b.setAttribute("aria-expanded", "false"); + }, b.addEventListener("click", (M) => { + var A; + M.stopPropagation(), y.classList.contains("is-open") ? t._closeChPopover() : ((A = t._closeAllToolbarPopovers) == null || A.call(t), P()); + }), S.addEventListener("click", (M) => { + const A = M.target.closest(".mjr-menu-item"); + if (!A) return; + const N = A.dataset.value; + x.value = N, x.dispatchEvent(new Event("change", { bubbles: !0 })), F.forEach((k) => { + const G = k.dataset.value === N; + k.classList.toggle("is-active", G), k.querySelector(".mjr-menu-item-check").style.opacity = G ? "1" : "0"; + }), _(N), b.classList.toggle("is-on", N !== "rgb"), t._closeChPopover(); + }), t._closeAllToolbarPopovers = () => { + var M, A, N, k, G; + (M = t._closeChPopover) == null || M.call(t), (A = t._closeGuidePopover) == null || A.call(t), (N = t._closePinPopover) == null || N.call(t), (k = t._closeFormatPopover) == null || k.call(t), (G = t._closeGenDropdown) == null || G.call(t); + }, t._exposureCtl = e("Exposure (EV)", { + min: -10, + max: 10, + step: 0.1, + value: Number(t._exposureEV || 0) + }), t._exposureCtl.out.textContent = `${Number(t._exposureEV || 0).toFixed(1)}EV`, t._exposureCtl.out.title = "Click to reset to 0 EV", t._exposureCtl.out.style.cursor = "pointer", t._exposureCtl.wrap.classList.toggle("is-active", (t._exposureEV || 0) !== 0), n.appendChild(t._exposureCtl.wrap), t._formatToggle = document.createElement("button"), t._formatToggle.type = "button", t._formatToggle.className = "mjr-icon-btn mjr-mfv-format-trigger", t._formatToggle.setAttribute("aria-haspopup", "dialog"), t._formatToggle.setAttribute("aria-expanded", "false"), t._formatToggle.setAttribute("aria-pressed", "false"), t._formatToggle.title = "Format mask", t._formatToggle.innerHTML = '', n.appendChild(t._formatToggle); + const L = document.createElement("div"); + L.className = "mjr-mfv-format-popover", t.element.appendChild(L); + const I = document.createElement("div"); + I.className = "mjr-menu", I.style.cssText = "display:grid;gap:4px;", L.appendChild(I); + const V = document.createElement("select"); + V.style.cssText = "position:absolute;opacity:0;pointer-events:none;width:0;height:0;overflow:hidden;", L.appendChild(V); + const U = [ + { value: "off", label: "Off" }, + { value: "image", label: "Image" }, + { value: "16:9", label: "16:9" }, + { value: "1:1", label: "1:1" }, + { value: "4:3", label: "4:3" }, + { value: "9:16", label: "9:16" }, + { value: "2.39", label: "2.39" } + ], q = [], tt = t._overlayMaskEnabled ? String(t._overlayFormat || "image") : "off"; + for (const M of U) { + const A = document.createElement("option"); + A.value = M.value, V.appendChild(A); + const N = document.createElement("button"); + N.type = "button", N.className = "mjr-menu-item", N.dataset.value = M.value; + const k = document.createElement("span"); + k.className = "mjr-menu-item-label", k.textContent = M.label; + const G = document.createElement("i"); + G.className = "pi pi-check mjr-menu-item-check", G.style.opacity = M.value === tt ? "1" : "0", N.appendChild(k), N.appendChild(G), I.appendChild(N), q.push(N), M.value === tt && N.classList.add("is-active"); + } + V.value = tt; + const K = document.createElement("div"); + K.className = "mjr-mfv-format-sep", L.appendChild(K); + const J = document.createElement("div"); + J.className = "mjr-mfv-format-slider-row", L.appendChild(J); + const at = document.createElement("span"); + at.className = "mjr-mfv-format-slider-label", at.textContent = "Opacity", J.appendChild(at), t._maskOpacityCtl = e("Mask opacity", { + min: 0, + max: 0.9, + step: 0.01, + value: Number(t._overlayMaskOpacity ?? 0.65) + }), J.appendChild(t._maskOpacityCtl.input), J.appendChild(t._maskOpacityCtl.out), t._formatSelect = V, t._formatPopover = L; + const rt = () => { + const M = t._formatToggle.getBoundingClientRect(), A = t.element.getBoundingClientRect(); + L.style.left = `${M.left - A.left}px`, L.style.top = `${M.bottom - A.top + 4}px`, L.classList.add("is-open"), t._formatToggle.setAttribute("aria-expanded", "true"); + }; + t._closeFormatPopover = () => { + L.classList.remove("is-open"), t._formatToggle.setAttribute("aria-expanded", "false"); + }, t._formatToggle.addEventListener("click", (M) => { + var A; + M.stopPropagation(), L.classList.contains("is-open") ? t._closeFormatPopover() : ((A = t._closeAllToolbarPopovers) == null || A.call(t), rt()); + }), I.addEventListener("click", (M) => { + const A = M.target.closest(".mjr-menu-item"); + if (!A) return; + const N = A.dataset.value; + V.value = N, V.dispatchEvent(new Event("change", { bubbles: !0 })), q.forEach((k) => { + const G = k.dataset.value === N; + k.classList.toggle("is-active", G), k.querySelector(".mjr-menu-item-check").style.opacity = G ? "1" : "0"; + }), t._closeFormatPopover(); + }); + const lt = document.createElement("div"); + lt.className = "mjr-mfv-toolbar-sep", lt.setAttribute("aria-hidden", "true"), n.appendChild(lt), t._liveBtn = document.createElement("button"), t._liveBtn.type = "button", t._liveBtn.className = "mjr-icon-btn", t._liveBtn.innerHTML = '', t._liveBtn.setAttribute("aria-pressed", "false"), yt( + t._liveBtn, + v("tooltip.liveStreamOff", "Live Stream: OFF — click to follow"), + ce + ), n.appendChild(t._liveBtn), t._previewBtn = document.createElement("button"), t._previewBtn.type = "button", t._previewBtn.className = "mjr-icon-btn", t._previewBtn.innerHTML = '', t._previewBtn.setAttribute("aria-pressed", "false"), yt( + t._previewBtn, + v( + "tooltip.previewStreamOff", + "KSampler Preview: OFF — click to stream denoising steps" + ), + de + ), n.appendChild(t._previewBtn), t._nodeStreamBtn = document.createElement("button"), t._nodeStreamBtn.type = "button", t._nodeStreamBtn.className = "mjr-icon-btn", t._nodeStreamBtn.innerHTML = '', t._nodeStreamBtn.setAttribute("aria-pressed", "false"), yt( + t._nodeStreamBtn, + v("tooltip.nodeStreamOff", "Node Stream: OFF — click to stream selected node output"), + Ge + ), n.appendChild(t._nodeStreamBtn), (Tt = (It = t._nodeStreamBtn).remove) == null || Tt.call(It), t._nodeStreamBtn = null, t._genBtn = document.createElement("button"), t._genBtn.type = "button", t._genBtn.className = "mjr-icon-btn", t._genBtn.setAttribute("aria-haspopup", "dialog"), t._genBtn.setAttribute("aria-expanded", "false"); + const ct = document.createElement("i"); + ct.className = "pi pi-info-circle", ct.setAttribute("aria-hidden", "true"), t._genBtn.appendChild(ct), n.appendChild(t._genBtn), t._updateGenBtnUI(), t._popoutBtn = document.createElement("button"), t._popoutBtn.type = "button", t._popoutBtn.className = "mjr-icon-btn"; + const dt = v("tooltip.popOutViewer", "Pop out viewer to separate window"); + t._popoutBtn.title = dt, t._popoutBtn.setAttribute("aria-label", dt), t._popoutBtn.setAttribute("aria-pressed", "false"); + const E = document.createElement("i"); + E.className = "pi pi-external-link", E.setAttribute("aria-hidden", "true"), t._popoutBtn.appendChild(E), n.appendChild(t._popoutBtn), t._captureBtn = document.createElement("button"), t._captureBtn.type = "button", t._captureBtn.className = "mjr-icon-btn"; + const j = v("tooltip.captureView", "Save view as image"); + t._captureBtn.title = j, t._captureBtn.setAttribute("aria-label", j); + const R = document.createElement("i"); + R.className = "pi pi-download", R.setAttribute("aria-hidden", "true"), t._captureBtn.appendChild(R), n.appendChild(t._captureBtn); + const O = document.createElement("div"); + O.className = "mjr-mfv-toolbar-sep", O.style.marginLeft = "auto", O.setAttribute("aria-hidden", "true"), n.appendChild(O), t._settingsBtn = document.createElement("button"), t._settingsBtn.type = "button", t._settingsBtn.className = "mjr-icon-btn mjr-mfv-settings-btn"; + const z = v("tooltip.nodeParams", "Node Parameters"); + t._settingsBtn.title = z, t._settingsBtn.setAttribute("aria-label", z), t._settingsBtn.setAttribute("aria-pressed", "false"); + const w = document.createElement("i"); + return w.className = "pi pi-sliders-h", w.setAttribute("aria-hidden", "true"), t._settingsBtn.appendChild(w), n.appendChild(t._settingsBtn), t._runHandle = Sn(), n.appendChild(t._runHandle.el), t._handleDocClick = (M) => { + var N, k, G, Y, W, $, kt, jt, Gt, mt, Vt, Rt, Ot, Ht, ht, Dt, vt, Ut, zt, ft, Wt, Yt, Qt, _t, qt; + const A = M == null ? void 0 : M.target; + t._genDropdown && !((k = (N = t._genBtn) == null ? void 0 : N.contains) != null && k.call(N, A)) && !t._genDropdown.contains(A) && t._closeGenDropdown(), (Y = (G = t._chPopover) == null ? void 0 : G.classList) != null && Y.contains("is-open") && !(($ = (W = t._chBtn) == null ? void 0 : W.contains) != null && $.call(W, A)) && !t._chPopover.contains(A) && ((kt = t._closeChPopover) == null || kt.call(t)), (Gt = (jt = t._guidePopover) == null ? void 0 : jt.classList) != null && Gt.contains("is-open") && !((Vt = (mt = t._guideBtn) == null ? void 0 : mt.contains) != null && Vt.call(mt, A)) && !t._guidePopover.contains(A) && ((Rt = t._closeGuidePopover) == null || Rt.call(t)), (Ht = (Ot = t._pinPopover) == null ? void 0 : Ot.classList) != null && Ht.contains("is-open") && !((Dt = (ht = t._pinBtn) == null ? void 0 : ht.contains) != null && Dt.call(ht, A)) && !t._pinPopover.contains(A) && ((vt = t._closePinPopover) == null || vt.call(t)), (zt = (Ut = t._formatPopover) == null ? void 0 : Ut.classList) != null && zt.contains("is-open") && !((Wt = (ft = t._formatToggle) == null ? void 0 : ft.contains) != null && Wt.call(ft, A)) && !t._formatPopover.contains(A) && ((Yt = t._closeFormatPopover) == null || Yt.call(t)), (Qt = A == null ? void 0 : A.closest) != null && Qt.call(A, ".mjr-mfv-idrop") || (qt = (_t = t.element) == null ? void 0 : _t.querySelectorAll) == null || qt.call(_t, ".mjr-mfv-idrop-menu.is-open").forEach((ye) => ye.classList.remove("is-open")); + }, t._bindDocumentUiHandlers(), n; +} +function In(t) { + var n, o, s, i, r, l, u, a, d, c, f, h, m, p, g, b, C, _, y, S, x; + try { + (n = t._btnAC) == null || n.abort(); + } catch (B) { + (o = console.debug) == null || o.call(console, B); + } + t._btnAC = new AbortController(); + const e = t._btnAC.signal; + (s = t._closeBtn) == null || s.addEventListener( + "click", + () => { + t._dispatchControllerAction("close", st.MFV_CLOSE); + }, + { signal: e } + ), (i = t._modeBtn) == null || i.addEventListener("click", () => t._cycleMode(), { signal: e }), (r = t._pinGroup) == null || r.addEventListener( + "click", + (B) => { + var L, I; + const F = (I = (L = B.target) == null ? void 0 : L.closest) == null ? void 0 : I.call(L, ".mjr-mfv-pin-btn"); + if (!F) return; + const P = F.dataset.slot; + P && (t._pinnedSlots.has(P) ? t._pinnedSlots.delete(P) : t._pinnedSlots.add(P), t._pinnedSlots.has("C") || t._pinnedSlots.has("D") ? t._mode !== T.GRID && t.setMode(T.GRID) : t._pinnedSlots.size > 0 && t._mode === T.SIMPLE && t.setMode(T.AB), t._updatePinUI()); + }, + { signal: e } + ), (l = t._liveBtn) == null || l.addEventListener( + "click", + () => { + t._dispatchControllerAction("toggleLive", st.MFV_LIVE_TOGGLE); + }, + { signal: e } + ), (u = t._previewBtn) == null || u.addEventListener( + "click", + () => { + t._dispatchControllerAction("togglePreview", st.MFV_PREVIEW_TOGGLE); + }, + { signal: e } + ), (a = t._nodeStreamBtn) == null || a.addEventListener( + "click", + () => { + t._dispatchControllerAction("toggleNodeStream", st.MFV_NODESTREAM_TOGGLE); + }, + { signal: e } + ), (d = t._genBtn) == null || d.addEventListener( + "click", + (B) => { + var F, P, L; + B.stopPropagation(), (P = (F = t._genDropdown) == null ? void 0 : F.classList) != null && P.contains("is-visible") ? t._closeGenDropdown() : ((L = t._closeAllToolbarPopovers) == null || L.call(t), t._openGenDropdown()); + }, + { signal: e } + ), (c = t._popoutBtn) == null || c.addEventListener( + "click", + () => { + t._dispatchControllerAction("popOut", st.MFV_POPOUT); + }, + { signal: e } + ), (f = t._captureBtn) == null || f.addEventListener("click", () => t._captureView(), { signal: e }), (h = t._settingsBtn) == null || h.addEventListener( + "click", + () => { + var B, F; + (B = t._sidebar) == null || B.toggle(), t._updateSettingsBtnState(((F = t._sidebar) == null ? void 0 : F.isVisible) ?? !1); + }, + { signal: e } + ), (m = t._guidesSelect) == null || m.addEventListener( + "change", + () => { + var B, F; + t._gridMode = Number(t._guidesSelect.value) || 0, (B = t._guideBtn) == null || B.classList.toggle("is-on", t._gridMode !== 0), (F = t._redrawOverlayGuides) == null || F.call(t); + }, + { signal: e } + ), (p = t._channelSelect) == null || p.addEventListener( + "change", + () => { + var B, F; + t._channel = String(t._channelSelect.value || "rgb"), (B = t._chBtn) == null || B.classList.toggle("is-on", t._channel !== "rgb"), (F = t._applyMediaToneControls) == null || F.call(t); + }, + { signal: e } + ), (b = (g = t._exposureCtl) == null ? void 0 : g.input) == null || b.addEventListener( + "input", + () => { + var F; + const B = Math.max(-10, Math.min(10, Number(t._exposureCtl.input.value) || 0)); + t._exposureEV = Math.round(B * 10) / 10, t._exposureCtl.out.textContent = `${t._exposureEV.toFixed(1)}EV`, t._exposureCtl.wrap.classList.toggle("is-active", t._exposureEV !== 0), (F = t._applyMediaToneControls) == null || F.call(t); + }, + { signal: e } + ), (_ = (C = t._exposureCtl) == null ? void 0 : C.out) == null || _.addEventListener( + "click", + () => { + var B; + t._exposureEV = 0, t._exposureCtl.input.value = "0", t._exposureCtl.out.textContent = "0.0EV", t._exposureCtl.wrap.classList.remove("is-active"), (B = t._applyMediaToneControls) == null || B.call(t); + }, + { signal: e } + ), (y = t._formatSelect) == null || y.addEventListener( + "change", + () => { + var F, P, L; + const B = String(t._formatSelect.value || "image"); + B === "off" ? t._overlayMaskEnabled = !1 : (t._overlayMaskEnabled = !0, t._overlayFormat = B), (F = t._formatToggle) == null || F.classList.toggle("is-on", !!t._overlayMaskEnabled), (P = t._formatToggle) == null || P.setAttribute("aria-pressed", String(!!t._overlayMaskEnabled)), (L = t._redrawOverlayGuides) == null || L.call(t); + }, + { signal: e } + ), (x = (S = t._maskOpacityCtl) == null ? void 0 : S.input) == null || x.addEventListener( + "input", + () => { + var P; + const B = Number(t._maskOpacityCtl.input.value), F = Math.max(0, Math.min(0.9, Number.isFinite(B) ? B : 0.65)); + t._overlayMaskOpacity = Math.round(F * 100) / 100, t._maskOpacityCtl.out.textContent = t._overlayMaskOpacity.toFixed(2), (P = t._redrawOverlayGuides) == null || P.call(t); + }, + { signal: e } + ); +} +function Tn(t, e) { + t._settingsBtn && (t._settingsBtn.classList.toggle("active", !!e), t._settingsBtn.setAttribute("aria-pressed", String(!!e))); +} +function kn(t) { + var n; + if (!t._contentWrapper) return; + const e = pt.MFV_SIDEBAR_POSITION || "right"; + t._contentWrapper.setAttribute("data-sidebar-pos", e), (n = t._sidebar) != null && n.el && t._contentEl && (e === "left" ? t._contentWrapper.insertBefore(t._sidebar.el, t._contentEl) : t._contentWrapper.appendChild(t._sidebar.el)); +} +function jn(t) { + var e, n, o; + t._closeGenDropdown(); + try { + (n = (e = t._genDropdown) == null ? void 0 : e.remove) == null || n.call(e); + } catch (s) { + (o = console.debug) == null || o.call(console, s); + } + t._genDropdown = null, t._updateGenBtnUI(); +} +function Gn(t) { + var n, o, s; + if (!t._handleDocClick) return; + const e = ((n = t.element) == null ? void 0 : n.ownerDocument) || document; + if (t._docClickHost !== e) { + t._unbindDocumentUiHandlers(); + try { + (o = t._docAC) == null || o.abort(); + } catch (i) { + (s = console.debug) == null || s.call(console, i); + } + t._docAC = new AbortController(), e.addEventListener("click", t._handleDocClick, { signal: t._docAC.signal }), t._docClickHost = e; + } +} +function Vn(t) { + var e, n; + try { + (e = t._docAC) == null || e.abort(); + } catch (o) { + (n = console.debug) == null || n.call(console, o); + } + t._docAC = new AbortController(), t._docClickHost = null; +} +function Rn(t) { + var e, n; + return !!((n = (e = t._genDropdown) == null ? void 0 : e.classList) != null && n.contains("is-visible")); +} +function On(t) { + if (!t.element) return; + t._genDropdown || (t._genDropdown = t._buildGenDropdown(), t.element.appendChild(t._genDropdown)), t._bindDocumentUiHandlers(); + const e = t._genBtn.getBoundingClientRect(), n = t.element.getBoundingClientRect(), o = e.left - n.left, s = e.bottom - n.top + 6; + t._genDropdown.style.left = `${o}px`, t._genDropdown.style.top = `${s}px`, t._genDropdown.classList.add("is-visible"), t._updateGenBtnUI(); +} +function Hn(t) { + t._genDropdown && (t._genDropdown.classList.remove("is-visible"), t._updateGenBtnUI()); +} +function Dn(t) { + if (!t._genBtn) return; + const e = t._genInfoSelections.size, n = e > 0, o = t._isGenDropdownOpen(); + t._genBtn.classList.toggle("is-on", n), t._genBtn.classList.toggle("is-open", o); + const s = n ? `Gen Info (${e} field${e > 1 ? "s" : ""} shown)${o ? " — open" : " — click to configure"}` : `Gen Info${o ? " — open" : " — click to show overlay"}`; + t._genBtn.title = s, t._genBtn.setAttribute("aria-label", s), t._genBtn.setAttribute("aria-expanded", String(o)), t._genDropdown ? t._genBtn.setAttribute("aria-controls", t._genDropdownId) : t._genBtn.removeAttribute("aria-controls"); +} +function vn(t) { + const e = document.createElement("div"); + e.className = "mjr-mfv-gen-dropdown", e.id = t._genDropdownId, e.setAttribute("role", "group"), e.setAttribute("aria-label", "Generation info fields"); + const n = [ + ["prompt", "Prompt"], + ["seed", "Seed"], + ["model", "Model"], + ["lora", "LoRA"], + ["sampler", "Sampler"], + ["scheduler", "Scheduler"], + ["cfg", "CFG"], + ["step", "Step"], + ["genTime", "Gen Time"] + ]; + for (const [o, s] of n) { + const i = document.createElement("label"); + i.className = "mjr-mfv-gen-dropdown-row"; + const r = document.createElement("input"); + r.type = "checkbox", r.checked = t._genInfoSelections.has(o), r.addEventListener("change", () => { + r.checked ? t._genInfoSelections.add(o) : t._genInfoSelections.delete(o), t._updateGenBtnUI(), t._refresh(); + }); + const l = document.createElement("span"); + l.textContent = s, i.appendChild(r), i.appendChild(l), e.appendChild(i); + } + return e; +} +function oe(t) { + const e = Number(t); + return !Number.isFinite(e) || e <= 0 ? "" : e >= 60 ? `${(e / 60).toFixed(1)}m` : `${e.toFixed(1)}s`; +} +function Un(t) { + const e = String(t || "").trim().toLowerCase(); + if (!e) return 0; + if (e.endsWith("m")) { + const o = Number.parseFloat(e.slice(0, -1)); + return Number.isFinite(o) ? o * 60 : 0; + } + if (e.endsWith("s")) { + const o = Number.parseFloat(e.slice(0, -1)); + return Number.isFinite(o) ? o : 0; + } + const n = Number.parseFloat(e); + return Number.isFinite(n) ? n : 0; +} +function zn(t, e) { + var i, r, l, u; + if (!e) return {}; + try { + const a = e.geninfo ? { geninfo: e.geninfo } : e.metadata || e.metadata_raw || e, d = Le(a) || null, c = { + prompt: "", + seed: "", + model: "", + lora: "", + sampler: "", + scheduler: "", + cfg: "", + step: "", + genTime: "" + }; + if (d && typeof d == "object") { + d.prompt && (c.prompt = St(String(d.prompt))), d.seed != null && (c.seed = String(d.seed)), d.model && (c.model = Array.isArray(d.model) ? d.model.join(", ") : String(d.model)), Array.isArray(d.loras) && (c.lora = d.loras.map( + (h) => typeof h == "string" ? h : (h == null ? void 0 : h.name) || (h == null ? void 0 : h.lora_name) || (h == null ? void 0 : h.model_name) || "" + ).filter(Boolean).join(", ")), d.sampler && (c.sampler = String(d.sampler)), d.scheduler && (c.scheduler = String(d.scheduler)), d.cfg != null && (c.cfg = String(d.cfg)), d.steps != null && (c.step = String(d.steps)), !c.prompt && (a != null && a.prompt) && (c.prompt = St(String(a.prompt || ""))); + const f = e.generation_time_ms ?? ((i = e.metadata_raw) == null ? void 0 : i.generation_time_ms) ?? (a == null ? void 0 : a.generation_time_ms) ?? ((r = a == null ? void 0 : a.geninfo) == null ? void 0 : r.generation_time_ms) ?? 0; + return f && Number.isFinite(Number(f)) && f > 0 && f < 864e5 && (c.genTime = oe(Number(f) / 1e3)), c; + } + } catch (a) { + (l = console.debug) == null || l.call(console, "[MFV] geninfo normalize failed", a); + } + const n = (e == null ? void 0 : e.metadata) || (e == null ? void 0 : e.metadata_raw) || e || {}, o = { + prompt: St(String((n == null ? void 0 : n.prompt) || (n == null ? void 0 : n.positive) || "")), + seed: (n == null ? void 0 : n.seed) != null ? String(n.seed) : "", + model: (n == null ? void 0 : n.checkpoint) || (n == null ? void 0 : n.ckpt_name) || (n == null ? void 0 : n.model) || "", + lora: Array.isArray(n == null ? void 0 : n.loras) ? n.loras.join(", ") : (n == null ? void 0 : n.lora) || "", + sampler: (n == null ? void 0 : n.sampler_name) || (n == null ? void 0 : n.sampler) || "", + scheduler: (n == null ? void 0 : n.scheduler) || "", + cfg: (n == null ? void 0 : n.cfg) != null ? String(n.cfg) : (n == null ? void 0 : n.cfg_scale) != null ? String(n.cfg_scale) : "", + step: (n == null ? void 0 : n.steps) != null ? String(n.steps) : "", + genTime: "" + }, s = e.generation_time_ms ?? ((u = e.metadata_raw) == null ? void 0 : u.generation_time_ms) ?? (n == null ? void 0 : n.generation_time_ms) ?? 0; + return s && Number.isFinite(Number(s)) && s > 0 && s < 864e5 && (o.genTime = oe(Number(s) / 1e3)), o; +} +function Wn(t, e) { + const n = t._getGenFields(e); + if (!n) return null; + const o = document.createDocumentFragment(), s = [ + "prompt", + "seed", + "model", + "lora", + "sampler", + "scheduler", + "cfg", + "step", + "genTime" + ]; + for (const i of s) { + if (!t._genInfoSelections.has(i)) continue; + const r = n[i] != null ? String(n[i]) : ""; + if (!r) continue; + let l = i.charAt(0).toUpperCase() + i.slice(1); + i === "lora" ? l = "LoRA" : i === "cfg" ? l = "CFG" : i === "genTime" && (l = "Gen Time"); + const u = document.createElement("div"); + u.dataset.field = i; + const a = document.createElement("strong"); + if (a.textContent = `${l}: `, u.appendChild(a), i === "prompt") + u.appendChild(document.createTextNode(r)); + else if (i === "genTime") { + const d = Un(r); + let c = "#4CAF50"; + d >= 60 ? c = "#FF9800" : d >= 30 ? c = "#FFC107" : d >= 10 && (c = "#8BC34A"); + const f = document.createElement("span"); + f.style.color = c, f.style.fontWeight = "600", f.textContent = r, u.appendChild(f); + } else + u.appendChild(document.createTextNode(r)); + o.appendChild(u); + } + return o.childNodes.length > 0 ? o : null; +} +function Yn(t) { + var e, n, o; + try { + (n = (e = t._controller) == null ? void 0 : e.onModeChanged) == null || n.call(e, t._mode); + } catch (s) { + (o = console.debug) == null || o.call(console, s); + } +} +function Qn(t) { + const e = [T.SIMPLE, T.AB, T.SIDE, T.GRID]; + t._mode = e[(e.indexOf(t._mode) + 1) % e.length], t._updateModeBtnUI(), t._refresh(), t._notifyModeChanged(); +} +function qn(t, e) { + Object.values(T).includes(e) && (t._mode = e, t._updateModeBtnUI(), t._refresh(), t._notifyModeChanged()); +} +function Xn(t) { + return t._pinnedSlots; +} +function Zn(t) { + var e, n; + if (t._pinBtns) { + for (const o of ["A", "B", "C", "D"]) { + const s = t._pinBtns[o]; + if (!s) continue; + const i = t._pinnedSlots.has(o); + s.classList.toggle("is-pinned", i), s.setAttribute("aria-pressed", String(i)), s.title = i ? `Unpin Asset ${o}` : `Pin Asset ${o}`; + } + (n = t._pinBtn) == null || n.classList.toggle("is-on", (((e = t._pinnedSlots) == null ? void 0 : e.size) ?? 0) > 0); + } +} +function Kn(t) { + if (!t._modeBtn) return; + const e = { + [T.SIMPLE]: { icon: "pi-image", label: "Mode: Simple - click to switch" }, + [T.AB]: { icon: "pi-clone", label: "Mode: A/B Compare - click to switch" }, + [T.SIDE]: { icon: "pi-table", label: "Mode: Side-by-Side - click to switch" }, + [T.GRID]: { + icon: "pi-th-large", + label: "Mode: Grid Compare (up to 4) - click to switch" + } + }, { icon: n = "pi-image", label: o = "" } = e[t._mode] || {}, s = Pt(o, je), i = document.createElement("i"); + i.className = `pi ${n}`, i.setAttribute("aria-hidden", "true"), t._modeBtn.replaceChildren(i), t._modeBtn.title = s, t._modeBtn.setAttribute("aria-label", s), t._modeBtn.removeAttribute("aria-pressed"), t._modeBtn.classList.toggle("is-on", t._mode !== T.SIMPLE); +} +function Jn(t, e) { + if (!t._liveBtn) return; + const n = !!e; + t._liveBtn.classList.toggle("mjr-live-active", n); + const o = n ? v("tooltip.liveStreamOn", "Live Stream: ON — click to disable") : v("tooltip.liveStreamOff", "Live Stream: OFF — click to follow"), s = Pt(o, ce); + t._liveBtn.setAttribute("aria-pressed", String(n)), t._liveBtn.setAttribute("aria-label", s); + const i = document.createElement("i"); + i.className = n ? "pi pi-circle-fill" : "pi pi-circle", i.setAttribute("aria-hidden", "true"), t._liveBtn.replaceChildren(i), t._liveBtn.title = s; +} +function wn(t, e) { + if (t._previewActive = !!e, !t._previewBtn) return; + t._previewBtn.classList.toggle("mjr-preview-active", t._previewActive); + const n = t._previewActive ? v("tooltip.previewStreamOn", "KSampler Preview: ON — streaming denoising steps") : v( + "tooltip.previewStreamOff", + "KSampler Preview: OFF — click to stream denoising steps" + ), o = Pt(n, de); + t._previewBtn.setAttribute("aria-pressed", String(t._previewActive)), t._previewBtn.setAttribute("aria-label", o); + const s = document.createElement("i"); + s.className = t._previewActive ? "pi pi-eye" : "pi pi-eye-slash", s.setAttribute("aria-hidden", "true"), t._previewBtn.replaceChildren(s), t._previewBtn.title = o, t._previewActive || t._revokePreviewBlob(); +} +function $n(t, e, n = {}) { + if (!e || !(e instanceof Blob)) return; + t._revokePreviewBlob(); + const o = URL.createObjectURL(e); + t._previewBlobUrl = o; + const s = { + url: o, + filename: "preview.jpg", + kind: "image", + _isPreview: !0, + _sourceLabel: (n == null ? void 0 : n.sourceLabel) || null + }; + if (t._mode === T.AB || t._mode === T.SIDE || t._mode === T.GRID) { + const r = t.getPinnedSlots(); + if (t._mode === T.GRID) { + const l = ["A", "B", "C", "D"].find((u) => !r.has(u)) || "A"; + t[`_media${l}`] = s; + } else r.has("B") ? t._mediaA = s : t._mediaB = s; + } else + t._mediaA = s, t._resetMfvZoom(), t._mode !== T.SIMPLE && (t._mode = T.SIMPLE, t._updateModeBtnUI()); + ++t._refreshGen, t._refresh(); +} +function to(t) { + if (t._previewBlobUrl) { + try { + URL.revokeObjectURL(t._previewBlobUrl); + } catch { + } + t._previewBlobUrl = null; + } +} +function eo(t, e) { + { + t._nodeStreamActive = !1; + return; + } +} +const no = [ + "--border-color", + "--border-default", + "--button-hover-surface", + "--button-surface", + "--comfy-accent", + "--comfy-font", + "--comfy-input-bg", + "--comfy-menu-bg", + "--comfy-menu-secondary-bg", + "--comfy-status-error", + "--comfy-status-success", + "--comfy-status-warning", + "--content-bg", + "--content-fg", + "--descrip-text", + "--destructive-background", + "--font-inter", + "--input-text", + "--interface-menu-surface", + "--interface-panel-hover-surface", + "--interface-panel-selected-surface", + "--interface-panel-surface", + "--modal-card-background", + "--muted-foreground", + "--primary-background", + "--primary-background-hover", + "--radius-lg", + "--radius-md", + "--radius-sm", + "--success-background", + "--warning-background" +]; +function oo() { + var t, e, n, o, s; + try { + const i = typeof window < "u" ? window : globalThis, r = (e = (t = i == null ? void 0 : i.process) == null ? void 0 : t.versions) == null ? void 0 : e.electron; + if (typeof r == "string" && r.trim() || i != null && i.electron || i != null && i.ipcRenderer || i != null && i.electronAPI) + return !0; + const l = String(((n = i == null ? void 0 : i.navigator) == null ? void 0 : n.userAgent) || ((o = globalThis == null ? void 0 : globalThis.navigator) == null ? void 0 : o.userAgent) || ""), u = /\bElectron\//i.test(l), a = /\bCode\//i.test(l); + if (u && !a) + return !0; + } catch (i) { + (s = console.debug) == null || s.call(console, i); + } + return !1; +} +function D(t, e = null, n = "info") { + var s, i; + const o = { + stage: String(t || "unknown"), + detail: e, + ts: Date.now() + }; + try { + const r = typeof window < "u" ? window : globalThis, l = "__MJR_MFV_POPOUT_TRACE__", u = Array.isArray(r[l]) ? r[l] : []; + u.push(o), r[l] = u.slice(-20), r.__MJR_MFV_POPOUT_LAST__ = o; + } catch (r) { + (s = console.debug) == null || s.call(console, r); + } + try { + const r = n === "error" ? console.error : n === "warn" ? console.warn : console.info; + r == null || r("[MFV popout]", o); + } catch (r) { + (i = console.debug) == null || i.call(console, r); + } +} +function se(t, ...e) { + return Array.from( + new Set( + [String(t || ""), ...e].join(" ").split(/\s+/).filter(Boolean) + ) + ).join(" "); +} +function ie(t, e) { + var n; + if (!(!t || !e)) + for (const o of Array.from(t.attributes || [])) { + const s = String((o == null ? void 0 : o.name) || ""); + if (!(!s || s === "class" || s === "style")) + try { + e.setAttribute(s, o.value); + } catch (i) { + (n = console.debug) == null || n.call(console, i); + } + } +} +function ae(t, e) { + var s, i, r, l, u; + if (!t || !(e != null && e.style)) return; + const n = typeof window < "u" && (window == null ? void 0 : window.getComputedStyle) || (globalThis == null ? void 0 : globalThis.getComputedStyle); + if (typeof n != "function") return; + let o = null; + try { + o = n(t); + } catch (a) { + (s = console.debug) == null || s.call(console, a); + } + if (o) { + for (const a of no) + try { + const d = String(((i = o.getPropertyValue) == null ? void 0 : i.call(o, a)) || "").trim(); + d && e.style.setProperty(a, d); + } catch (d) { + (r = console.debug) == null || r.call(console, d); + } + try { + const a = String(((l = o.getPropertyValue) == null ? void 0 : l.call(o, "color-scheme")) || "").trim(); + a && (e.style.colorScheme = a); + } catch (a) { + (u = console.debug) == null || u.call(console, a); + } + } +} +function so(t) { + if (!(t != null && t.documentElement) || !(t != null && t.body) || !(document != null && document.documentElement)) return; + const e = document.documentElement, n = document.body, o = t.documentElement, s = t.body; + o.className = se( + e.className, + "mjr-mfv-popout-document" + ), s.className = se( + n == null ? void 0 : n.className, + "mjr-mfv-popout-body" + ), ie(e, o), ie(n, s), ae(e, o), ae(n, s), e != null && e.lang && (o.lang = e.lang), e != null && e.dir && (o.dir = e.dir); +} +function be(t) { + var n, o, s; + if (!(t != null && t.body)) return null; + try { + const i = (n = t.getElementById) == null ? void 0 : n.call(t, "mjr-mfv-popout-root"); + (o = i == null ? void 0 : i.remove) == null || o.call(i); + } catch (i) { + (s = console.debug) == null || s.call(console, i); + } + const e = t.createElement("div"); + return e.id = "mjr-mfv-popout-root", e.className = "mjr-mfv-popout-root", t.body.appendChild(e), e; +} +function io(t, e) { + if (!t.element) return; + const n = !!e; + if (t._desktopExpanded === n) return; + const o = t.element; + if (n) { + t._desktopExpandRestore = { + parent: o.parentNode || null, + nextSibling: o.nextSibling || null, + styleAttr: o.getAttribute("style") + }, o.parentNode !== document.body && document.body.appendChild(o), o.classList.add("mjr-mfv--desktop-expanded", "is-visible"), o.setAttribute("aria-hidden", "false"), o.style.position = "fixed", o.style.top = "12px", o.style.left = "12px", o.style.right = "12px", o.style.bottom = "12px", o.style.width = "auto", o.style.height = "auto", o.style.maxWidth = "none", o.style.maxHeight = "none", o.style.minWidth = "320px", o.style.minHeight = "240px", o.style.resize = "none", o.style.margin = "0", o.style.zIndex = "2147483000", t._desktopExpanded = !0, t.isVisible = !0, t._resetGenDropdownForCurrentDocument(), t._rebindControlHandlers(), t._bindPanelInteractions(), t._bindDocumentUiHandlers(), t._updatePopoutBtnUI(), D("electron-in-app-expanded", { isVisible: t.isVisible }); + return; + } + const s = t._desktopExpandRestore; + t._desktopExpanded = !1, o.classList.remove("mjr-mfv--desktop-expanded"), (s == null ? void 0 : s.styleAttr) == null || s.styleAttr === "" ? o.removeAttribute("style") : o.setAttribute("style", s.styleAttr), s != null && s.parent && s.parent.isConnected && (s.nextSibling && s.nextSibling.parentNode === s.parent ? s.parent.insertBefore(o, s.nextSibling) : s.parent.appendChild(o)), t._desktopExpandRestore = null, t._resetGenDropdownForCurrentDocument(), t._rebindControlHandlers(), t._bindPanelInteractions(), t._bindDocumentUiHandlers(), t._updatePopoutBtnUI(), D("electron-in-app-restored", null); +} +function ao(t, e) { + var n; + t._desktopPopoutUnsupported = !0, D( + "electron-in-app-fallback", + { message: (e == null ? void 0 : e.message) || String(e || "unknown error") }, + "warn" + ), t._setDesktopExpanded(!0); + try { + Fe( + v( + "toast.popoutElectronInAppFallback", + "Desktop PiP is unavailable here. Viewer expanded inside the app instead." + ), + "warning", + 4500 + ); + } catch (o) { + (n = console.debug) == null || n.call(console, o); + } +} +function ro(t, e, n, o, s) { + return D( + "electron-popup-fallback-attempt", + { reason: (s == null ? void 0 : s.message) || String(s || "unknown") }, + "warn" + ), t._fallbackPopout(e, n, o), t._popoutWindow ? (t._desktopPopoutUnsupported = !1, D("electron-popup-fallback-opened", null), !0) : !1; +} +function lo(t) { + var l, u; + if (t._isPopped || !t.element) return; + const e = t.element; + t._stopEdgeResize(); + const n = oo(), o = typeof window < "u" && "documentPictureInPicture" in window, s = String(((l = window == null ? void 0 : window.navigator) == null ? void 0 : l.userAgent) || ((u = globalThis == null ? void 0 : globalThis.navigator) == null ? void 0 : u.userAgent) || ""), i = Math.max(e.offsetWidth || 520, 400), r = Math.max(e.offsetHeight || 420, 300); + if (D("start", { + isElectronHost: n, + hasDocumentPiP: o, + userAgent: s, + width: i, + height: r, + desktopPopoutUnsupported: t._desktopPopoutUnsupported + }), n && t._desktopPopoutUnsupported) { + D("electron-in-app-fallback-reuse", null), t._setDesktopExpanded(!0); + return; + } + if (!(n && (D("electron-popup-request", { width: i, height: r }), t._tryElectronPopupFallback(e, i, r, new Error("Desktop popup requested"))))) { + if (n && "documentPictureInPicture" in window) { + D("electron-pip-request", { width: i, height: r }), window.documentPictureInPicture.requestWindow({ width: i, height: r }).then((a) => { + var m, p, g; + D("electron-pip-opened", { + hasDocument: !!(a != null && a.document) + }), t._popoutWindow = a, t._isPopped = !0, t._popoutRestoreGuard = !1; + try { + (m = t._popoutAC) == null || m.abort(); + } catch (b) { + (p = console.debug) == null || p.call(console, b); + } + t._popoutAC = new AbortController(); + const d = t._popoutAC.signal, c = () => t._schedulePopInFromPopupClose(); + t._popoutCloseHandler = c; + const f = a.document; + f.title = "Majoor Viewer", t._installPopoutStyles(f); + const h = be(f); + if (!h) { + t._activateDesktopExpandedFallback(new Error("Popup root creation failed")); + return; + } + try { + const b = typeof f.adoptNode == "function" ? f.adoptNode(e) : e; + h.appendChild(b), D("electron-pip-adopted", { + usedAdoptNode: typeof f.adoptNode == "function" + }); + } catch (b) { + D( + "electron-pip-adopt-failed", + { message: (b == null ? void 0 : b.message) || String(b) }, + "warn" + ), console.warn("[MFV] PiP adoptNode failed", b), t._isPopped = !1, t._popoutWindow = null; + try { + a.close(); + } catch (C) { + (g = console.debug) == null || g.call(console, C); + } + t._activateDesktopExpandedFallback(b); + return; + } + e.classList.add("is-visible"), t.isVisible = !0, t._resetGenDropdownForCurrentDocument(), t._rebindControlHandlers(), t._bindDocumentUiHandlers(), t._updatePopoutBtnUI(), D("electron-pip-ready", { isPopped: t._isPopped }), a.addEventListener("pagehide", c, { + signal: d + }), t._startPopoutCloseWatch(), t._popoutKeydownHandler = (b) => { + var _, y; + const C = String(((_ = b == null ? void 0 : b.target) == null ? void 0 : _.tagName) || "").toLowerCase(); + b != null && b.defaultPrevented || (y = b == null ? void 0 : b.target) != null && y.isContentEditable || C === "input" || C === "textarea" || C === "select" || t._forwardKeydownToController(b); + }, a.addEventListener("keydown", t._popoutKeydownHandler, { + signal: d + }); + }).catch((a) => { + D( + "electron-pip-request-failed", + { message: (a == null ? void 0 : a.message) || String(a) }, + "warn" + ), t._activateDesktopExpandedFallback(a); + }); + return; + } + if (n) { + D("electron-no-pip-api", { hasDocumentPiP: o }), t._activateDesktopExpandedFallback( + new Error("Document Picture-in-Picture unavailable after popup failure") + ); + return; + } + D("browser-fallback-popup", { width: i, height: r }), t._fallbackPopout(e, i, r); + } +} +function co(t, e, n, o) { + var c, f, h, m; + D("browser-popup-open", { width: n, height: o }); + const s = (window.screenX || window.screenLeft) + Math.round((window.outerWidth - n) / 2), i = (window.screenY || window.screenTop) + Math.round((window.outerHeight - o) / 2), r = `width=${n},height=${o},left=${s},top=${i},resizable=yes,scrollbars=no,toolbar=no,menubar=no,location=no,status=no`, l = window.open("about:blank", "_mjr_viewer", r); + if (!l) { + D("browser-popup-blocked", null, "warn"), console.warn("[MFV] Pop-out blocked — allow popups for this site."); + return; + } + D("browser-popup-opened", { hasDocument: !!(l != null && l.document) }), t._popoutWindow = l, t._isPopped = !0, t._popoutRestoreGuard = !1; + try { + (c = t._popoutAC) == null || c.abort(); + } catch (p) { + (f = console.debug) == null || f.call(console, p); + } + t._popoutAC = new AbortController(); + const u = t._popoutAC.signal, a = () => t._schedulePopInFromPopupClose(); + t._popoutCloseHandler = a; + const d = () => { + let p; + try { + p = l.document; + } catch { + return; + } + if (!p) return; + p.title = "Majoor Viewer", t._installPopoutStyles(p); + const g = be(p); + if (g) { + try { + g.appendChild(p.adoptNode(e)); + } catch (b) { + console.warn("[MFV] adoptNode failed", b); + return; + } + e.classList.add("is-visible"), t.isVisible = !0, t._resetGenDropdownForCurrentDocument(), t._rebindControlHandlers(), t._bindDocumentUiHandlers(), t._updatePopoutBtnUI(); + } + }; + try { + d(); + } catch (p) { + (h = console.debug) == null || h.call(console, "[MFV] immediate mount failed, retrying on load", p); + try { + l.addEventListener("load", d, { signal: u }); + } catch (g) { + (m = console.debug) == null || m.call(console, "[MFV] pop-out page load listener failed", g); + } + } + l.addEventListener("beforeunload", a, { signal: u }), l.addEventListener("pagehide", a, { signal: u }), l.addEventListener("unload", a, { signal: u }), t._startPopoutCloseWatch(), t._popoutKeydownHandler = (p) => { + var C, _, y, S; + const g = String(((C = p == null ? void 0 : p.target) == null ? void 0 : C.tagName) || "").toLowerCase(); + if (p != null && p.defaultPrevented || (_ = p == null ? void 0 : p.target) != null && _.isContentEditable || g === "input" || g === "textarea" || g === "select") + return; + if (String((p == null ? void 0 : p.key) || "").toLowerCase() === "v" && (p != null && p.ctrlKey || p != null && p.metaKey) && !(p != null && p.altKey) && !(p != null && p.shiftKey)) { + p.preventDefault(), (y = p.stopPropagation) == null || y.call(p), (S = p.stopImmediatePropagation) == null || S.call(p), t._dispatchControllerAction("toggle", st.MFV_TOGGLE); + return; + } + t._forwardKeydownToController(p); + }, l.addEventListener("keydown", t._popoutKeydownHandler, { signal: u }); +} +function uo(t) { + var e; + if (t._popoutCloseTimer != null) { + try { + window.clearInterval(t._popoutCloseTimer); + } catch (n) { + (e = console.debug) == null || e.call(console, n); + } + t._popoutCloseTimer = null; + } +} +function po(t) { + t._clearPopoutCloseWatch(), t._popoutCloseTimer = window.setInterval(() => { + if (!t._isPopped) { + t._clearPopoutCloseWatch(); + return; + } + const e = t._popoutWindow; + (!e || e.closed) && (t._clearPopoutCloseWatch(), t._schedulePopInFromPopupClose()); + }, 250); +} +function mo(t) { + !t._isPopped || t._popoutRestoreGuard || (t._popoutRestoreGuard = !0, window.setTimeout(() => { + try { + t.popIn({ closePopupWindow: !1 }); + } finally { + t._popoutRestoreGuard = !1; + } + }, 0)); +} +function ho(t, e) { + var o, s, i; + if (!(e != null && e.head)) return; + try { + for (const r of e.head.querySelectorAll("[data-mjr-popout-cloned-style='1']")) + r.remove(); + } catch (r) { + (o = console.debug) == null || o.call(console, r); + } + so(e); + try { + const r = document.documentElement.style.cssText; + if (r) { + const l = e.createElement("style"); + l.setAttribute("data-mjr-popout-cloned-style", "1"), l.textContent = `:root { ${r} }`, e.head.appendChild(l); + } + } catch (r) { + (s = console.debug) == null || s.call(console, r); + } + for (const r of document.querySelectorAll('link[rel="stylesheet"], style')) + try { + let l = null; + if (r.tagName === "LINK") { + l = e.createElement("link"); + for (const u of Array.from(r.attributes || [])) + (u == null ? void 0 : u.name) !== "href" && l.setAttribute(u.name, u.value); + l.setAttribute("href", r.href || r.getAttribute("href") || ""); + } else + l = e.importNode(r, !0); + l.setAttribute("data-mjr-popout-cloned-style", "1"), e.head.appendChild(l); + } catch (l) { + (i = console.debug) == null || i.call(console, l); + } + const n = e.createElement("style"); + n.setAttribute("data-mjr-popout-cloned-style", "1"), n.textContent = ` + html.mjr-mfv-popout-document { + min-height: 100%; + background: + radial-gradient( + 1200px 420px at 50% 0%, + color-mix(in srgb, var(--primary-background, var(--comfy-accent, #5fb3ff)) 10%, transparent), + transparent 62% + ), + linear-gradient( + 180deg, + color-mix(in srgb, var(--interface-panel-surface, var(--content-bg, #16191f)) 82%, #000 18%), + color-mix(in srgb, var(--interface-menu-surface, var(--comfy-menu-bg, #1f2227)) 84%, #000 16%) + ) !important; + } + body.mjr-mfv-popout-body { + margin: 0 !important; + display: flex !important; + min-height: 100vh !important; + overflow: hidden !important; + background: transparent !important; + } + #mjr-mfv-popout-root, + .mjr-mfv-popout-root { + flex: 1 !important; + min-width: 0 !important; + min-height: 0 !important; + display: flex !important; + isolation: isolate; + } + body.mjr-mfv-popout-body .mjr-mfv { + position: static !important; + width: 100% !important; + height: 100% !important; + min-width: 0 !important; + min-height: 0 !important; + resize: none !important; + border-radius: 0 !important; + display: flex !important; + opacity: 1 !important; + visibility: visible !important; + pointer-events: auto !important; + transform: none !important; + max-width: none !important; + max-height: none !important; + overflow: hidden !important; + } + `, e.head.appendChild(n); +} +function fo(t, { closePopupWindow: e = !0 } = {}) { + var s, i, r, l; + if (t._desktopExpanded) { + t._setDesktopExpanded(!1); + return; + } + if (!t._isPopped || !t.element) return; + const n = t._popoutWindow; + t._clearPopoutCloseWatch(); + try { + (s = t._popoutAC) == null || s.abort(); + } catch (u) { + (i = console.debug) == null || i.call(console, u); + } + t._popoutAC = null, t._popoutCloseHandler = null, t._popoutKeydownHandler = null, t._isPopped = !1; + let o = t.element; + try { + o = (o == null ? void 0 : o.ownerDocument) === document ? o : document.adoptNode(o); + } catch (u) { + (r = console.debug) == null || r.call(console, "[MFV] pop-in adopt failed", u); + } + if (document.body.appendChild(o), t._resetGenDropdownForCurrentDocument(), t._rebindControlHandlers(), t._bindPanelInteractions(), t._bindDocumentUiHandlers(), o.classList.add("is-visible"), o.setAttribute("aria-hidden", "false"), t.isVisible = !0, t._updatePopoutBtnUI(), e) + try { + n == null || n.close(); + } catch (u) { + (l = console.debug) == null || l.call(console, u); + } + t._popoutWindow = null; +} +function _o(t) { + if (!t._popoutBtn) return; + const e = t._isPopped || t._desktopExpanded; + t.element && t.element.classList.toggle("mjr-mfv--popped", e), t._popoutBtn.classList.toggle("mjr-popin-active", e); + const n = t._popoutBtn.querySelector("i") || document.createElement("i"), o = e ? v("tooltip.popInViewer", "Return to floating panel") : v("tooltip.popOutViewer", "Pop out viewer to separate window"); + n.className = e ? "pi pi-sign-in" : "pi pi-external-link", t._popoutBtn.title = o, t._popoutBtn.setAttribute("aria-label", o), t._popoutBtn.setAttribute("aria-pressed", String(e)), t._popoutBtn.contains(n) || t._popoutBtn.replaceChildren(n); +} +function go(t) { + return { + n: "ns-resize", + s: "ns-resize", + e: "ew-resize", + w: "ew-resize", + ne: "nesw-resize", + nw: "nwse-resize", + se: "nwse-resize", + sw: "nesw-resize" + }[t] || ""; +} +function bo(t, e, n) { + if (!n) return ""; + const o = t <= n.left + bt, s = t >= n.right - bt, i = e <= n.top + bt, r = e >= n.bottom - bt; + return i && o ? "nw" : i && s ? "ne" : r && o ? "sw" : r && s ? "se" : i ? "n" : r ? "s" : o ? "w" : s ? "e" : ""; +} +function yo(t) { + var e, n; + if (t.element) { + if (((e = t._resizeState) == null ? void 0 : e.pointerId) != null) + try { + t.element.releasePointerCapture(t._resizeState.pointerId); + } catch (o) { + (n = console.debug) == null || n.call(console, o); + } + t._resizeState = null, t.element.classList.remove("mjr-mfv--resizing"), t.element.style.cursor = ""; + } +} +function Co(t) { + var e, n; + if (t.element) { + t._stopEdgeResize(); + try { + (e = t._panelAC) == null || e.abort(); + } catch (o) { + (n = console.debug) == null || n.call(console, o); + } + t._panelAC = new AbortController(), t._initEdgeResize(t.element), t._initDrag(t.element.querySelector(".mjr-mfv-header")); + } +} +function Ao(t, e) { + var l; + if (!e) return; + const n = (u) => { + if (!t.element || t._isPopped) return ""; + const a = t.element.getBoundingClientRect(); + return t._getResizeDirectionFromPoint(u.clientX, u.clientY, a); + }, o = (l = t._panelAC) == null ? void 0 : l.signal, s = (u) => { + var m; + if (u.button !== 0 || !t.element || t._isPopped) return; + const a = n(u); + if (!a) return; + u.preventDefault(), u.stopPropagation(); + const d = t.element.getBoundingClientRect(), c = window.getComputedStyle(t.element), f = Math.max(120, Number.parseFloat(c.minWidth) || 0), h = Math.max(100, Number.parseFloat(c.minHeight) || 0); + t._resizeState = { + pointerId: u.pointerId, + dir: a, + startX: u.clientX, + startY: u.clientY, + startLeft: d.left, + startTop: d.top, + startWidth: d.width, + startHeight: d.height, + minWidth: f, + minHeight: h + }, t.element.style.left = `${Math.round(d.left)}px`, t.element.style.top = `${Math.round(d.top)}px`, t.element.style.right = "auto", t.element.style.bottom = "auto", t.element.classList.add("mjr-mfv--resizing"), t.element.style.cursor = t._resizeCursorForDirection(a); + try { + t.element.setPointerCapture(u.pointerId); + } catch (p) { + (m = console.debug) == null || m.call(console, p); + } + }, i = (u) => { + if (!t.element || t._isPopped) return; + const a = t._resizeState; + if (!a) { + const g = n(u); + t.element.style.cursor = g ? t._resizeCursorForDirection(g) : ""; + return; + } + if (a.pointerId !== u.pointerId) return; + const d = u.clientX - a.startX, c = u.clientY - a.startY; + let f = a.startWidth, h = a.startHeight, m = a.startLeft, p = a.startTop; + a.dir.includes("e") && (f = a.startWidth + d), a.dir.includes("s") && (h = a.startHeight + c), a.dir.includes("w") && (f = a.startWidth - d, m = a.startLeft + d), a.dir.includes("n") && (h = a.startHeight - c, p = a.startTop + c), f < a.minWidth && (a.dir.includes("w") && (m -= a.minWidth - f), f = a.minWidth), h < a.minHeight && (a.dir.includes("n") && (p -= a.minHeight - h), h = a.minHeight), f = Math.min(f, Math.max(a.minWidth, window.innerWidth)), h = Math.min(h, Math.max(a.minHeight, window.innerHeight)), m = Math.min(Math.max(0, m), Math.max(0, window.innerWidth - f)), p = Math.min(Math.max(0, p), Math.max(0, window.innerHeight - h)), t.element.style.width = `${Math.round(f)}px`, t.element.style.height = `${Math.round(h)}px`, t.element.style.left = `${Math.round(m)}px`, t.element.style.top = `${Math.round(p)}px`, t.element.style.right = "auto", t.element.style.bottom = "auto"; + }, r = (u) => { + if (!t.element || !t._resizeState || t._resizeState.pointerId !== u.pointerId) return; + const a = n(u); + t._stopEdgeResize(), a && (t.element.style.cursor = t._resizeCursorForDirection(a)); + }; + e.addEventListener("pointerdown", s, { capture: !0, signal: o }), e.addEventListener("pointermove", i, { signal: o }), e.addEventListener("pointerup", r, { signal: o }), e.addEventListener("pointercancel", r, { signal: o }), e.addEventListener( + "pointerleave", + () => { + !t._resizeState && t.element && (t.element.style.cursor = ""); + }, + { signal: o } + ); +} +function So(t, e) { + var s; + if (!e) return; + const n = (s = t._panelAC) == null ? void 0 : s.signal; + let o = null; + e.addEventListener( + "pointerdown", + (i) => { + if (i.button !== 0 || i.target.closest("button") || i.target.closest("select") || t._isPopped || !t.element || t._getResizeDirectionFromPoint( + i.clientX, + i.clientY, + t.element.getBoundingClientRect() + )) return; + i.preventDefault(), e.setPointerCapture(i.pointerId); + try { + o == null || o.abort(); + } catch { + } + o = new AbortController(); + const l = o.signal, u = t.element, a = u.getBoundingClientRect(), d = i.clientX - a.left, c = i.clientY - a.top, f = (m) => { + const p = Math.min( + window.innerWidth - u.offsetWidth, + Math.max(0, m.clientX - d) + ), g = Math.min( + window.innerHeight - u.offsetHeight, + Math.max(0, m.clientY - c) + ); + u.style.left = `${p}px`, u.style.top = `${g}px`, u.style.right = "auto", u.style.bottom = "auto"; + }, h = () => { + try { + o == null || o.abort(); + } catch { + } + }; + e.addEventListener("pointermove", f, { signal: l }), e.addEventListener("pointerup", h, { signal: l }); + }, + n ? { signal: n } : void 0 + ); +} +async function Eo(t, e, n, o, s, i, r, l) { + var h, m, p, g, b; + if (!n) return; + const u = X(n); + let a = null; + if (u === "video" && (a = l instanceof HTMLVideoElement ? l : ((h = t._contentEl) == null ? void 0 : h.querySelector("video")) || null), !a && u === "model3d") { + const C = (n == null ? void 0 : n.id) != null ? String(n.id) : ""; + C && (a = ((p = (m = t._contentEl) == null ? void 0 : m.querySelector) == null ? void 0 : p.call( + m, + `.mjr-model3d-render-canvas[data-mjr-asset-id="${C}"]` + )) || null), a || (a = ((b = (g = t._contentEl) == null ? void 0 : g.querySelector) == null ? void 0 : b.call(g, ".mjr-model3d-render-canvas")) || null); + } + if (!a) { + const C = me(n); + if (!C) return; + a = await new Promise((_) => { + const y = new Image(); + y.crossOrigin = "anonymous", y.onload = () => _(y), y.onerror = () => _(null), y.src = C; + }); + } + if (!a) return; + const d = a.videoWidth || a.naturalWidth || i, c = a.videoHeight || a.naturalHeight || r; + if (!d || !c) return; + const f = Math.min(i / d, r / c); + e.drawImage( + a, + o + (i - d * f) / 2, + s + (r - c * f) / 2, + d * f, + c * f + ); +} +function Mo(t, e, n, o) { + if (!e || !n || !t._genInfoSelections.size) return 0; + const s = t._getGenFields(n), i = [ + "prompt", + "seed", + "model", + "lora", + "sampler", + "scheduler", + "cfg", + "step", + "genTime" + ], r = 11, l = 16, u = 8, a = Math.max(100, Number(o || 0) - u * 2); + let d = 0; + for (const c of i) { + if (!t._genInfoSelections.has(c)) continue; + const f = s[c] != null ? String(s[c]) : ""; + if (!f) continue; + let h = c.charAt(0).toUpperCase() + c.slice(1); + c === "lora" ? h = "LoRA" : c === "cfg" ? h = "CFG" : c === "genTime" && (h = "Gen Time"); + const m = `${h}: `; + e.font = `bold ${r}px system-ui, sans-serif`; + const p = e.measureText(m).width; + e.font = `${r}px system-ui, sans-serif`; + const g = Math.max(32, a - u * 2 - p); + let b = 0, C = ""; + for (const _ of f.split(" ")) { + const y = C ? C + " " + _ : _; + e.measureText(y).width > g && C ? (b += 1, C = _) : C = y; + } + C && (b += 1), d += b; + } + return d > 0 ? d * l + u * 2 : 0; +} +function Bo(t, e, n, o, s, i, r) { + if (!n || !t._genInfoSelections.size) return; + const l = t._getGenFields(n), u = { + prompt: "#7ec8ff", + seed: "#ffd47a", + model: "#7dda8a", + lora: "#d48cff", + sampler: "#ff9f7a", + scheduler: "#ff7a9f", + cfg: "#7a9fff", + step: "#7affd4", + genTime: "#e0ff7a" + }, a = [ + "prompt", + "seed", + "model", + "lora", + "sampler", + "scheduler", + "cfg", + "step", + "genTime" + ], d = []; + for (const S of a) { + if (!t._genInfoSelections.has(S)) continue; + const x = l[S] != null ? String(l[S]) : ""; + if (!x) continue; + let B = S.charAt(0).toUpperCase() + S.slice(1); + S === "lora" ? B = "LoRA" : S === "cfg" ? B = "CFG" : S === "genTime" && (B = "Gen Time"), d.push({ + label: `${B}: `, + value: x, + color: u[S] || "#ffffff" + }); + } + if (!d.length) return; + const c = 11, f = 16, h = 8, m = Math.max(100, i - h * 2); + e.save(); + const p = []; + for (const { label: S, value: x, color: B } of d) { + e.font = `bold ${c}px system-ui, sans-serif`; + const F = e.measureText(S).width; + e.font = `${c}px system-ui, sans-serif`; + const P = m - h * 2 - F, L = []; + let I = ""; + for (const V of x.split(" ")) { + const U = I ? I + " " + V : V; + e.measureText(U).width > P && I ? (L.push(I), I = V) : I = U; + } + I && L.push(I), p.push({ label: S, labelW: F, lines: L, color: B }); + } + const b = p.reduce((S, x) => S + x.lines.length, 0) * f + h * 2, C = o + h, _ = s + r - b - h; + e.globalAlpha = 0.72, e.fillStyle = "#000", he(e, C, _, m, b, 6), e.fill(), e.globalAlpha = 1; + let y = _ + h + c; + for (const { label: S, labelW: x, lines: B, color: F } of p) + for (let P = 0; P < B.length; P++) + P === 0 ? (e.font = `bold ${c}px system-ui, sans-serif`, e.fillStyle = F, e.fillText(S, C + h, y), e.font = `${c}px system-ui, sans-serif`, e.fillStyle = "rgba(255,255,255,0.88)", e.fillText(B[P], C + h + x, y)) : (e.font = `${c}px system-ui, sans-serif`, e.fillStyle = "rgba(255,255,255,0.88)", e.fillText(B[P], C + h + x, y)), y += f; + e.restore(); +} +async function No(t) { + var u; + if (!t._contentEl) return; + t._captureBtn && (t._captureBtn.disabled = !0, t._captureBtn.setAttribute("aria-label", v("tooltip.capturingView", "Capturing…"))); + const e = t._contentEl.clientWidth || 480, n = t._contentEl.clientHeight || 360; + let o = n; + if (t._mode === T.SIMPLE && t._mediaA && t._genInfoSelections.size) { + const a = document.createElement("canvas"); + a.width = e, a.height = n; + const d = a.getContext("2d"), c = t._estimateGenInfoOverlayHeight(d, t._mediaA, e); + if (c > 0) { + const f = Math.max(n, c + 24); + o = Math.min(f, n * 4); + } + } + const s = document.createElement("canvas"); + s.width = e, s.height = o; + const i = s.getContext("2d"); + i.fillStyle = "#0d0d0d", i.fillRect(0, 0, e, o); + try { + if (t._mode === T.SIMPLE) + t._mediaA && (await t._drawMediaFit(i, t._mediaA, 0, 0, e, n), t._drawGenInfoOverlay(i, t._mediaA, 0, 0, e, o)); + else if (t._mode === T.AB) { + const a = Math.round(t._abDividerX * e), d = t._contentEl.querySelector( + ".mjr-mfv-ab-layer:not(.mjr-mfv-ab-layer--b) video" + ), c = t._contentEl.querySelector(".mjr-mfv-ab-layer--b video"); + t._mediaA && await t._drawMediaFit(i, t._mediaA, 0, 0, e, o, d), t._mediaB && (i.save(), i.beginPath(), i.rect(a, 0, e - a, o), i.clip(), await t._drawMediaFit(i, t._mediaB, 0, 0, e, o, c), i.restore()), i.save(), i.strokeStyle = "rgba(255,255,255,0.88)", i.lineWidth = 2, i.beginPath(), i.moveTo(a, 0), i.lineTo(a, o), i.stroke(), i.restore(), ut(i, "A", 8, 8), ut(i, "B", a + 8, 8), t._mediaA && t._drawGenInfoOverlay(i, t._mediaA, 0, 0, a, o), t._mediaB && t._drawGenInfoOverlay(i, t._mediaB, a, 0, e - a, o); + } else if (t._mode === T.SIDE) { + const a = Math.floor(e / 2), d = t._contentEl.querySelector(".mjr-mfv-side-panel:first-child video"), c = t._contentEl.querySelector(".mjr-mfv-side-panel:last-child video"); + t._mediaA && (await t._drawMediaFit(i, t._mediaA, 0, 0, a, o, d), t._drawGenInfoOverlay(i, t._mediaA, 0, 0, a, o)), i.fillStyle = "#111", i.fillRect(a, 0, 2, o), t._mediaB && (await t._drawMediaFit(i, t._mediaB, a, 0, a, o, c), t._drawGenInfoOverlay(i, t._mediaB, a, 0, a, o)), ut(i, "A", 8, 8), ut(i, "B", a + 8, 8); + } else if (t._mode === T.GRID) { + const a = Math.floor(e / 2), d = Math.floor(o / 2), c = 1, f = [ + { media: t._mediaA, label: "A", x: 0, y: 0, w: a - c, h: d - c }, + { + media: t._mediaB, + label: "B", + x: a + c, + y: 0, + w: a - c, + h: d - c + }, + { + media: t._mediaC, + label: "C", + x: 0, + y: d + c, + w: a - c, + h: d - c + }, + { + media: t._mediaD, + label: "D", + x: a + c, + y: d + c, + w: a - c, + h: d - c + } + ], h = t._contentEl.querySelectorAll(".mjr-mfv-grid-cell"); + for (let m = 0; m < f.length; m++) { + const p = f[m], g = ((u = h[m]) == null ? void 0 : u.querySelector("video")) || null; + p.media && (await t._drawMediaFit(i, p.media, p.x, p.y, p.w, p.h, g), t._drawGenInfoOverlay(i, p.media, p.x, p.y, p.w, p.h)), ut(i, p.label, p.x + 8, p.y + 8); + } + i.save(), i.fillStyle = "#111", i.fillRect(a - c, 0, c * 2, o), i.fillRect(0, d - c, e, c * 2), i.restore(); + } + } catch (a) { + console.debug("[MFV] capture error:", a); + } + const l = `${{ + [T.AB]: "mfv-ab", + [T.SIDE]: "mfv-side", + [T.GRID]: "mfv-grid" + }[t._mode] ?? "mfv"}-${Date.now()}.png`; + try { + const a = s.toDataURL("image/png"), d = document.createElement("a"); + d.href = a, d.download = l, document.body.appendChild(d), d.click(), setTimeout(() => document.body.removeChild(d), 100); + } catch (a) { + console.warn("[MFV] download failed:", a); + } finally { + t._captureBtn && (t._captureBtn.disabled = !1, t._captureBtn.setAttribute("aria-label", v("tooltip.captureView", "Save view as image"))); + } +} +function xo(t, e, { autoMode: n = !1 } = {}) { + if (t._mediaA = e || null, t._resetMfvZoom(), n && t._mode !== T.SIMPLE && (t._mode = T.SIMPLE, t._updateModeBtnUI()), t._mediaA && typeof Ct == "function") { + const o = ++t._refreshGen; + (async () => { + var s; + try { + const i = await Ct(t._mediaA, { + getAssetMetadata: Ft, + getFileMetadataScoped: Lt + }); + if (t._refreshGen !== o) return; + i && typeof i == "object" && (t._mediaA = i, t._refresh()); + } catch (i) { + (s = console.debug) == null || s.call(console, "[MFV] metadata enrich error", i); + } + })(); + } else + t._refresh(); +} +function Po(t, e, n) { + t._mediaA = e || null, t._mediaB = n || null, t._resetMfvZoom(), t._mode === T.SIMPLE && (t._mode = T.AB, t._updateModeBtnUI()); + const o = ++t._refreshGen, s = async (i) => { + if (!i) return i; + try { + return await Ct(i, { + getAssetMetadata: Ft, + getFileMetadataScoped: Lt + }) || i; + } catch { + return i; + } + }; + (async () => { + const [i, r] = await Promise.all([s(t._mediaA), s(t._mediaB)]); + t._refreshGen === o && (t._mediaA = i || null, t._mediaB = r || null, t._refresh()); + })(); +} +function Lo(t, e, n, o, s) { + t._mediaA = e || null, t._mediaB = n || null, t._mediaC = o || null, t._mediaD = s || null, t._resetMfvZoom(), t._mode !== T.GRID && (t._mode = T.GRID, t._updateModeBtnUI()); + const i = ++t._refreshGen, r = async (l) => { + if (!l) return l; + try { + return await Ct(l, { + getAssetMetadata: Ft, + getFileMetadataScoped: Lt + }) || l; + } catch { + return l; + } + }; + (async () => { + const [l, u, a, d] = await Promise.all([ + r(t._mediaA), + r(t._mediaB), + r(t._mediaC), + r(t._mediaD) + ]); + t._refreshGen === i && (t._mediaA = l || null, t._mediaB = u || null, t._mediaC = a || null, t._mediaD = d || null, t._refresh()); + })(); +} +function ot(t) { + var e, n, o, s; + try { + return !!((e = t == null ? void 0 : t.classList) != null && e.contains("mjr-mfv-simple-player")) || !!((n = t == null ? void 0 : t.classList) != null && n.contains("mjr-mfv-player-host")) || !!((o = t == null ? void 0 : t.querySelector) != null && o.call(t, ".mjr-video-controls, .mjr-mfv-simple-player-controls")); + } catch (i) { + return (s = console.debug) == null || s.call(console, i), !1; + } +} +let Fo = 0; +class ko { + constructor({ controller: e = null } = {}) { + this._instanceId = ++Fo, this._controller = e && typeof e == "object" ? { ...e } : null, this.element = null, this.isVisible = !1, this._contentEl = null, this._closeBtn = null, this._modeBtn = null, this._pinGroup = null, this._pinBtns = null, this._liveBtn = null, this._genBtn = null, this._genDropdown = null, this._captureBtn = null, this._genInfoSelections = /* @__PURE__ */ new Set(["genTime"]), this._mode = T.SIMPLE, this._mediaA = null, this._mediaB = null, this._mediaC = null, this._mediaD = null, this._pinnedSlots = /* @__PURE__ */ new Set(), this._abDividerX = 0.5, this._zoom = 1, this._panX = 0, this._panY = 0, this._panzoomAC = null, this._dragging = !1, this._compareSyncAC = null, this._btnAC = null, this._refreshGen = 0, this._popoutWindow = null, this._popoutBtn = null, this._isPopped = !1, this._desktopExpanded = !1, this._desktopExpandRestore = null, this._desktopPopoutUnsupported = !1, this._popoutCloseHandler = null, this._popoutKeydownHandler = null, this._popoutCloseTimer = null, this._popoutRestoreGuard = !1, this._previewBtn = null, this._previewBlobUrl = null, this._previewActive = !1, this._nodeStreamBtn = null, this._nodeStreamActive = !1, this._docAC = new AbortController(), this._popoutAC = null, this._panelAC = new AbortController(), this._resizeState = null, this._titleId = `mjr-mfv-title-${this._instanceId}`, this._genDropdownId = `mjr-mfv-gen-dropdown-${this._instanceId}`, this._progressEl = null, this._progressNodesEl = null, this._progressStepsEl = null, this._progressTextEl = null, this._mediaProgressEl = null, this._mediaProgressTextEl = null, this._progressUpdateHandler = null, this._progressCurrentNodeId = null, this._docClickHost = null, this._handleDocClick = null, this._mediaControlHandles = [], this._layoutObserver = null, this._channel = "rgb", this._exposureEV = 0, this._gridMode = 0, this._overlayMaskEnabled = !1, this._overlayMaskOpacity = 0.65, this._overlayFormat = "image"; + } + _dispatchControllerAction(e, n) { + var o, s, i; + try { + const r = (o = this._controller) == null ? void 0 : o[e]; + if (typeof r == "function") + return r(); + } catch (r) { + (s = console.debug) == null || s.call(console, r); + } + if (n) + try { + window.dispatchEvent(new Event(n)); + } catch (r) { + (i = console.debug) == null || i.call(console, r); + } + } + _forwardKeydownToController(e) { + var n, o, s; + try { + const i = (n = this._controller) == null ? void 0 : n.handleForwardedKeydown; + if (typeof i == "function") { + i(e); + return; + } + } catch (i) { + (o = console.debug) == null || o.call(console, i); + } + try { + window.dispatchEvent( + new KeyboardEvent("keydown", { + key: e == null ? void 0 : e.key, + code: e == null ? void 0 : e.code, + keyCode: e == null ? void 0 : e.keyCode, + ctrlKey: e == null ? void 0 : e.ctrlKey, + shiftKey: e == null ? void 0 : e.shiftKey, + altKey: e == null ? void 0 : e.altKey, + metaKey: e == null ? void 0 : e.metaKey + }) + ); + } catch (i) { + (s = console.debug) == null || s.call(console, i); + } + } + // ── Build DOM ───────────────────────────────────────────────────────────── + render() { + return Pn(this); + } + _buildHeader() { + return Ln(this); + } + _buildToolbar() { + return Fn(this); + } + _rebindControlHandlers() { + return In(this); + } + _updateSettingsBtnState(e) { + return Tn(this, e); + } + _applySidebarPosition() { + return kn(this); + } + refreshSidebar() { + var e; + (e = this._sidebar) == null || e.refresh(); + } + _resetGenDropdownForCurrentDocument() { + return jn(this); + } + _bindDocumentUiHandlers() { + return Gn(this); + } + _unbindDocumentUiHandlers() { + return Vn(this); + } + _isGenDropdownOpen() { + return Rn(this); + } + _openGenDropdown() { + return On(this); + } + _closeGenDropdown() { + return Hn(this); + } + _updateGenBtnUI() { + return Dn(this); + } + _buildGenDropdown() { + return vn(this); + } + _getGenFields(e) { + return zn(this, e); + } + _buildGenInfoDOM(e) { + return Wn(this, e); + } + _notifyModeChanged() { + return Yn(this); + } + _cycleMode() { + return Qn(this); + } + setMode(e) { + return qn(this, e); + } + getPinnedSlots() { + return Xn(this); + } + _updatePinUI() { + return Zn(this); + } + _updateModeBtnUI() { + return Kn(this); + } + setLiveActive(e) { + return Jn(this, e); + } + setPreviewActive(e) { + return wn(this, e); + } + loadPreviewBlob(e, n = {}) { + return $n(this, e, n); + } + _revokePreviewBlob() { + return to(this); + } + setNodeStreamActive(e) { + return eo(this); + } + loadMediaA(e, { autoMode: n = !1 } = {}) { + return xo(this, e, { autoMode: n }); + } + /** + * Load two assets for compare modes. + * Auto-switches from SIMPLE → AB on first call. + */ + loadMediaPair(e, n) { + return Po(this, e, n); + } + /** + * Load up to 4 assets for grid compare mode. + * Auto-switches to GRID mode if not already. + */ + loadMediaQuad(e, n, o, s) { + return Lo(this, e, n, o, s); + } + /** Apply current zoom+pan state to all media elements (img/video only — divider/overlays unaffected). */ + _applyTransform() { + if (!this._contentEl) return; + const e = Math.max(Mt, Math.min(Bt, this._zoom)), n = this._contentEl.clientWidth || 0, o = this._contentEl.clientHeight || 0, s = Math.max(0, (e - 1) * n / 2), i = Math.max(0, (e - 1) * o / 2); + this._panX = Math.max(-s, Math.min(s, this._panX)), this._panY = Math.max(-i, Math.min(i, this._panY)); + const r = `translate(${this._panX}px,${this._panY}px) scale(${e})`; + for (const l of this._contentEl.querySelectorAll(".mjr-mfv-media")) + l != null && l._mjrDisableViewerTransform || (l.style.transform = r, l.style.transformOrigin = "center"); + this._contentEl.classList.remove("mjr-mfv-content--grab", "mjr-mfv-content--grabbing"), e > 1.01 && this._contentEl.classList.add( + this._dragging ? "mjr-mfv-content--grabbing" : "mjr-mfv-content--grab" + ), this._applyMediaToneControls(), this._redrawOverlayGuides(); + } + _ensureToneFilterDefs() { + var i, r; + if ((i = this._toneFilterDefsEl) != null && i.isConnected) return this._toneFilterDefsEl; + const e = "http://www.w3.org/2000/svg", n = document.createElementNS(e, "svg"); + n.setAttribute("aria-hidden", "true"), n.style.position = "absolute", n.style.width = "0", n.style.height = "0", n.style.pointerEvents = "none"; + const o = document.createElementNS(e, "defs"), s = [ + ["mjr-mfv-ch-r", "1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0"], + ["mjr-mfv-ch-g", "0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0"], + ["mjr-mfv-ch-b", "0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0"], + ["mjr-mfv-ch-a", "0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0"], + ["mjr-mfv-ch-l", "0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0"] + ]; + for (const [l, u] of s) { + const a = document.createElementNS(e, "filter"); + a.setAttribute("id", l); + const d = document.createElementNS(e, "feColorMatrix"); + d.setAttribute("type", "matrix"), d.setAttribute("values", u), a.appendChild(d), o.appendChild(a); + } + return n.appendChild(o), (r = this.element) == null || r.appendChild(n), this._toneFilterDefsEl = n, n; + } + _applyMediaToneControls() { + var l, u, a; + if (this._ensureToneFilterDefs(), !this._contentEl) return; + const e = String(this._channel || "rgb"), n = Math.pow(2, Number(this._exposureEV) || 0), o = e === "rgb" ? "" : `url(#mjr-mfv-ch-${e})`, s = Math.abs(n - 1) < 1e-4 ? "" : `brightness(${n})`, i = [o, s].filter(Boolean).join(" ").trim(), r = ((u = (l = this._contentEl).querySelectorAll) == null ? void 0 : u.call(l, ".mjr-mfv-media")) || []; + for (const d of r) + try { + d.style.filter = i || ""; + } catch (c) { + (a = console.debug) == null || a.call(console, c); + } + } + _getOverlayAspect(e, n, o) { + var s; + try { + const i = String(e || "image"); + if (i === "image") { + const r = Number(n == null ? void 0 : n.videoWidth) || Number(n == null ? void 0 : n.naturalWidth) || Number(o == null ? void 0 : o.width) || 1, l = Number(n == null ? void 0 : n.videoHeight) || Number(n == null ? void 0 : n.naturalHeight) || Number(o == null ? void 0 : o.height) || 1, u = r / l; + return Number.isFinite(u) && u > 0 ? u : 1; + } + if (i === "16:9") return 16 / 9; + if (i === "9:16") return 9 / 16; + if (i === "1:1") return 1; + if (i === "4:3") return 4 / 3; + if (i === "2.39") return 2.39; + } catch (i) { + (s = console.debug) == null || s.call(console, i); + } + return 1; + } + _fitAspectInBox(e, n, o) { + var s; + try { + const i = Number(e) || 0, r = Number(n) || 0, l = Number(o) || 1; + if (!(i > 0 && r > 0 && l > 0)) return { x: 0, y: 0, w: i, h: r }; + const u = i / r; + let a = i, d = r; + return l >= u ? d = i / l : a = r * l, { x: (i - a) / 2, y: (r - d) / 2, w: a, h: d }; + } catch (i) { + return (s = console.debug) == null || s.call(console, i), { x: 0, y: 0, w: Number(e) || 0, h: Number(n) || 0 }; + } + } + _drawMaskOutside(e, n, o, s) { + var i; + try { + const r = Math.max(0, Math.min(0.92, Number(s) || 0)); + if (!(r > 0)) return; + e.save(), e.fillStyle = `rgba(0,0,0,${r})`, e.fillRect(0, 0, n.width, n.height), e.globalCompositeOperation = "destination-out"; + for (const l of o) + !l || !(l.w > 1 && l.h > 1) || e.fillRect(l.x, l.y, l.w, l.h); + e.restore(); + } catch (r) { + (i = console.debug) == null || i.call(console, r); + } + } + _redrawOverlayGuides() { + var h, m, p, g, b, C; + const e = this._overlayCanvas, n = this._contentEl; + if (!e || !n) return; + const o = (h = e.getContext) == null ? void 0 : h.call(e, "2d"); + if (!o) return; + const s = Math.max(1, Math.min(3, Number(window.devicePixelRatio) || 1)), i = n.clientWidth || 0, r = n.clientHeight || 0; + if (e.width = Math.max(1, Math.floor(i * s)), e.height = Math.max(1, Math.floor(r * s)), e.style.width = `${i}px`, e.style.height = `${r}px`, o.clearRect(0, 0, e.width, e.height), !(this._gridMode || this._overlayMaskEnabled)) return; + const l = (m = n.getBoundingClientRect) == null ? void 0 : m.call(n); + if (!l) return; + const u = Array.from( + ((p = n.querySelectorAll) == null ? void 0 : p.call( + n, + ".mjr-mfv-simple-container, .mjr-mfv-side-panel, .mjr-mfv-grid-cell, .mjr-mfv-ab-layer" + )) || [] + ), a = u.length ? u : [n], d = []; + for (const _ of a) { + const y = (g = _.querySelector) == null ? void 0 : g.call(_, ".mjr-mfv-media"); + if (!y) continue; + const S = (b = _.getBoundingClientRect) == null ? void 0 : b.call(_); + if (!(S != null && S.width) || !(S != null && S.height)) continue; + const x = Number(S.width) || 0, B = Number(S.height) || 0, F = this._getOverlayAspect(this._overlayFormat, y, S), P = this._fitAspectInBox(x, B, F), L = S.left - l.left + x / 2, I = S.top - l.top + B / 2, V = Math.max(0.1, Math.min(16, Number(this._zoom) || 1)), U = { + x: L + P.x * V - x * V / 2 + (Number(this._panX) || 0), + y: I + P.y * V - B * V / 2 + (Number(this._panY) || 0), + w: P.w * V, + h: P.h * V + }; + d.push({ + x: U.x * s, + y: U.y * s, + w: U.w * s, + h: U.h * s + }); + } + if (!d.length) return; + if (this._overlayMaskEnabled) { + this._drawMaskOutside(o, e, d, this._overlayMaskOpacity), o.save(), (C = o.setLineDash) == null || C.call(o, [Math.max(2, 4 * s), Math.max(2, 3 * s)]), o.strokeStyle = "rgba(255,255,255,0.22)", o.lineWidth = Math.max(1, Math.floor(s)); + for (const _ of d) + o.strokeRect(_.x + 0.5, _.y + 0.5, _.w - 1, _.h - 1); + o.restore(); + } + if (this._mode !== T.SIMPLE || !this._gridMode) return; + const c = d[0]; + if (!c) return; + o.save(), o.translate(c.x, c.y), o.strokeStyle = "rgba(255,255,255,0.22)", o.lineWidth = Math.max(2, Math.round(1.25 * s)); + const f = (_, y, S, x) => { + o.beginPath(), o.moveTo(Math.round(_) + 0.5, Math.round(y) + 0.5), o.lineTo(Math.round(S) + 0.5, Math.round(x) + 0.5), o.stroke(); + }; + this._gridMode === 1 ? (f(c.w / 3, 0, c.w / 3, c.h), f(2 * c.w / 3, 0, 2 * c.w / 3, c.h), f(0, c.h / 3, c.w, c.h / 3), f(0, 2 * c.h / 3, c.w, 2 * c.h / 3)) : this._gridMode === 2 ? (f(c.w / 2, 0, c.w / 2, c.h), f(0, c.h / 2, c.w, c.h / 2)) : this._gridMode === 3 && (o.strokeRect(c.w * 0.1 + 0.5, c.h * 0.1 + 0.5, c.w * 0.8 - 1, c.h * 0.8 - 1), o.strokeRect(c.w * 0.05 + 0.5, c.h * 0.05 + 0.5, c.w * 0.9 - 1, c.h * 0.9 - 1)), o.restore(); + } + /** + * Set zoom, optionally centered at (clientX, clientY). + * Keeps the image point under the cursor stationary. + */ + _setMfvZoom(e, n, o) { + const s = Math.max(Mt, Math.min(Bt, this._zoom)), i = Math.max(Mt, Math.min(Bt, Number(e) || 1)); + if (n != null && o != null && this._contentEl) { + const r = i / s, l = this._contentEl.getBoundingClientRect(), u = n - (l.left + l.width / 2), a = o - (l.top + l.height / 2); + this._panX = this._panX * r + (1 - r) * u, this._panY = this._panY * r + (1 - r) * a; + } + this._zoom = i, Math.abs(i - 1) < 1e-3 && (this._zoom = 1, this._panX = 0, this._panY = 0), this._applyTransform(); + } + /** Reset zoom and pan to the default 1:1 fit. Called when new media is loaded. */ + _resetMfvZoom() { + this._zoom = 1, this._panX = 0, this._panY = 0, this._applyTransform(); + } + _bindLayoutObserver() { + var n; + this._unbindLayoutObserver(); + const e = this._contentEl; + if (!(!e || typeof ResizeObserver > "u")) + try { + this._layoutObserver = new ResizeObserver(() => { + this._applyTransform(); + }), this._layoutObserver.observe(e); + } catch (o) { + (n = console.debug) == null || n.call(console, o), this._layoutObserver = null; + } + } + _unbindLayoutObserver() { + var e, n, o; + try { + (n = (e = this._layoutObserver) == null ? void 0 : e.disconnect) == null || n.call(e); + } catch (s) { + (o = console.debug) == null || o.call(console, s); + } + this._layoutObserver = null; + } + /** Bind wheel + pointer events to the clip viewport element. */ + _initPanZoom(e) { + if (this._destroyPanZoom(), !e) return; + this._panzoomAC = new AbortController(); + const n = { signal: this._panzoomAC.signal }; + e.addEventListener( + "wheel", + (a) => { + var h, m, p, g; + if ((m = (h = a.target) == null ? void 0 : h.closest) != null && m.call(h, "audio") || (g = (p = a.target) == null ? void 0 : p.closest) != null && g.call(p, ".mjr-video-controls, .mjr-mfv-simple-player-controls") || Et(a.target)) return; + const d = qe(a.target, e); + if (d && Xe( + d, + Number(a.deltaX || 0), + Number(a.deltaY || 0) + )) + return; + a.preventDefault(); + const f = 1 - (a.deltaY || a.deltaX || 0) * ke; + this._setMfvZoom(this._zoom * f, a.clientX, a.clientY); + }, + { ...n, passive: !1 } + ); + let o = !1, s = 0, i = 0, r = 0, l = 0; + e.addEventListener( + "pointerdown", + (a) => { + var d, c, f, h, m, p, g, b, C; + if (!(a.button !== 0 && a.button !== 1) && !(this._zoom <= 1.01) && !((c = (d = a.target) == null ? void 0 : d.closest) != null && c.call(d, "video")) && !((h = (f = a.target) == null ? void 0 : f.closest) != null && h.call(f, "audio")) && !((p = (m = a.target) == null ? void 0 : m.closest) != null && p.call(m, ".mjr-video-controls, .mjr-mfv-simple-player-controls")) && !((b = (g = a.target) == null ? void 0 : g.closest) != null && b.call(g, ".mjr-mfv-ab-divider")) && !Et(a.target)) { + a.preventDefault(), o = !0, this._dragging = !0, s = a.clientX, i = a.clientY, r = this._panX, l = this._panY; + try { + e.setPointerCapture(a.pointerId); + } catch (_) { + (C = console.debug) == null || C.call(console, _); + } + this._applyTransform(); + } + }, + n + ), e.addEventListener( + "pointermove", + (a) => { + o && (this._panX = r + (a.clientX - s), this._panY = l + (a.clientY - i), this._applyTransform()); + }, + n + ); + const u = (a) => { + var d; + if (o) { + o = !1, this._dragging = !1; + try { + e.releasePointerCapture(a.pointerId); + } catch (c) { + (d = console.debug) == null || d.call(console, c); + } + this._applyTransform(); + } + }; + e.addEventListener("pointerup", u, n), e.addEventListener("pointercancel", u, n), e.addEventListener( + "dblclick", + (a) => { + var c, f, h, m, p, g; + if ((f = (c = a.target) == null ? void 0 : c.closest) != null && f.call(c, "video") || (m = (h = a.target) == null ? void 0 : h.closest) != null && m.call(h, "audio") || (g = (p = a.target) == null ? void 0 : p.closest) != null && g.call(p, ".mjr-video-controls, .mjr-mfv-simple-player-controls") || Et(a.target)) return; + const d = Math.abs(this._zoom - 1) < 0.05; + this._setMfvZoom(d ? Math.min(4, this._zoom * 4) : 1, a.clientX, a.clientY); + }, + n + ); + } + /** Remove all pan/zoom event listeners. */ + _destroyPanZoom() { + var e, n; + try { + (e = this._panzoomAC) == null || e.abort(); + } catch (o) { + (n = console.debug) == null || n.call(console, o); + } + this._panzoomAC = null, this._dragging = !1; + } + _destroyCompareSync() { + var e, n, o; + try { + (n = (e = this._compareSyncAC) == null ? void 0 : e.abort) == null || n.call(e); + } catch (s) { + (o = console.debug) == null || o.call(console, s); + } + this._compareSyncAC = null; + } + _destroyMediaControls() { + var n, o; + const e = Array.isArray(this._mediaControlHandles) ? this._mediaControlHandles : []; + for (const s of e) + try { + (n = s == null ? void 0 : s.destroy) == null || n.call(s); + } catch (i) { + (o = console.debug) == null || o.call(console, i); + } + this._mediaControlHandles = []; + } + _trackMediaControls(e) { + var n; + try { + const o = (e == null ? void 0 : e._mjrMediaControlsHandle) || null; + o != null && o.destroy && this._mediaControlHandles.push(o); + } catch (o) { + (n = console.debug) == null || n.call(console, o); + } + return e; + } + _initCompareSync() { + var e; + if (this._destroyCompareSync(), !!this._contentEl && this._mode !== T.SIMPLE) + try { + const n = Array.from(this._contentEl.querySelectorAll("video, audio")); + if (n.length < 2) return; + const o = n[0] || null, s = n.slice(1); + if (!o || !s.length) return; + this._compareSyncAC = Ie(o, s, { threshold: 0.08 }); + } catch (n) { + (e = console.debug) == null || e.call(console, n); + } + } + // ── Render ──────────────────────────────────────────────────────────────── + _refresh() { + if (!this._contentEl) return; + this._destroyPanZoom(), this._destroyCompareSync(), this._destroyMediaControls(); + const e = this._overlayCanvas || null; + switch (this._contentEl.replaceChildren(), this._contentEl.style.overflow = "hidden", this._mode) { + case T.SIMPLE: + this._renderSimple(); + break; + case T.AB: + this._renderAB(); + break; + case T.SIDE: + this._renderSide(); + break; + case T.GRID: + this._renderGrid(); + break; + } + e && this._contentEl.appendChild(e), this._mediaProgressEl && this._contentEl.appendChild(this._mediaProgressEl), this._applyMediaToneControls(), this._applyTransform(), this._initPanZoom(this._contentEl), this._initCompareSync(); + } + _renderSimple() { + var i; + if (!this._mediaA) { + this._contentEl.appendChild(Q()); + return; + } + const e = X(this._mediaA), n = nt(this._mediaA), o = ((i = this._trackMediaControls) == null ? void 0 : i.call(this, n)) || n; + if (!o) { + this._contentEl.appendChild(Q("Could not load media")); + return; + } + const s = document.createElement("div"); + if (s.className = "mjr-mfv-simple-container", s.appendChild(o), e !== "audio") { + const r = this._buildGenInfoDOM(this._mediaA); + if (r) { + const l = document.createElement("div"); + l.className = "mjr-mfv-geninfo", ot(o) && l.classList.add("mjr-mfv-geninfo--above-player"), l.appendChild(r), s.appendChild(l); + } + } + this._contentEl.appendChild(s); + } + _renderAB() { + var b, C, _; + const e = this._mediaA ? nt(this._mediaA, { fill: !0 }) : null, n = this._mediaB ? nt(this._mediaB, { fill: !0 }) : null, o = ((b = this._trackMediaControls) == null ? void 0 : b.call(this, e)) || e, s = ((C = this._trackMediaControls) == null ? void 0 : C.call(this, n)) || n, i = this._mediaA ? X(this._mediaA) : "", r = this._mediaB ? X(this._mediaB) : ""; + if (!o && !s) { + this._contentEl.appendChild(Q("Select 2 assets for A/B compare")); + return; + } + if (!s) { + this._renderSimple(); + return; + } + if (i === "audio" || r === "audio" || i === "model3d" || r === "model3d") { + this._renderSide(); + return; + } + const l = document.createElement("div"); + l.className = "mjr-mfv-ab-container"; + const u = document.createElement("div"); + u.className = "mjr-mfv-ab-layer", o && u.appendChild(o); + const a = document.createElement("div"); + a.className = "mjr-mfv-ab-layer mjr-mfv-ab-layer--b"; + const d = Math.round(this._abDividerX * 100); + a.style.clipPath = `inset(0 0 0 ${d}%)`, a.appendChild(s); + const c = document.createElement("div"); + c.className = "mjr-mfv-ab-divider", c.style.left = `${d}%`; + const f = this._buildGenInfoDOM(this._mediaA); + let h = null; + f && (h = document.createElement("div"), h.className = "mjr-mfv-geninfo-a", ot(o) && h.classList.add("mjr-mfv-geninfo--above-player"), h.appendChild(f), h.style.right = `calc(${100 - d}% + 8px)`); + const m = this._buildGenInfoDOM(this._mediaB); + let p = null; + m && (p = document.createElement("div"), p.className = "mjr-mfv-geninfo-b", ot(s) && p.classList.add("mjr-mfv-geninfo--above-player"), p.appendChild(m), p.style.left = `calc(${d}% + 8px)`); + let g = null; + c.addEventListener( + "pointerdown", + (y) => { + y.preventDefault(), c.setPointerCapture(y.pointerId); + try { + g == null || g.abort(); + } catch { + } + g = new AbortController(); + const S = g.signal, x = l.getBoundingClientRect(), B = (P) => { + const L = Math.max(0.02, Math.min(0.98, (P.clientX - x.left) / x.width)); + this._abDividerX = L; + const I = Math.round(L * 100); + a.style.clipPath = `inset(0 0 0 ${I}%)`, c.style.left = `${I}%`, h && (h.style.right = `calc(${100 - I}% + 8px)`), p && (p.style.left = `calc(${I}% + 8px)`); + }, F = () => { + try { + g == null || g.abort(); + } catch { + } + }; + c.addEventListener("pointermove", B, { signal: S }), c.addEventListener("pointerup", F, { signal: S }); + }, + (_ = this._panelAC) != null && _.signal ? { signal: this._panelAC.signal } : void 0 + ), l.appendChild(u), l.appendChild(a), l.appendChild(c), h && l.appendChild(h), p && l.appendChild(p), l.appendChild(et("A", "left")), l.appendChild(et("B", "right")), this._contentEl.appendChild(l); + } + _renderSide() { + var f, h; + const e = this._mediaA ? nt(this._mediaA) : null, n = this._mediaB ? nt(this._mediaB) : null, o = ((f = this._trackMediaControls) == null ? void 0 : f.call(this, e)) || e, s = ((h = this._trackMediaControls) == null ? void 0 : h.call(this, n)) || n, i = this._mediaA ? X(this._mediaA) : "", r = this._mediaB ? X(this._mediaB) : ""; + if (!o && !s) { + this._contentEl.appendChild(Q("Select 2 assets for Side-by-Side")); + return; + } + const l = document.createElement("div"); + l.className = "mjr-mfv-side-container"; + const u = document.createElement("div"); + u.className = "mjr-mfv-side-panel", o ? u.appendChild(o) : u.appendChild(Q("—")), u.appendChild(et("A", "left")); + const a = i === "audio" ? null : this._buildGenInfoDOM(this._mediaA); + if (a) { + const m = document.createElement("div"); + m.className = "mjr-mfv-geninfo-a", ot(o) && m.classList.add("mjr-mfv-geninfo--above-player"), m.appendChild(a), u.appendChild(m); + } + const d = document.createElement("div"); + d.className = "mjr-mfv-side-panel", s ? d.appendChild(s) : d.appendChild(Q("—")), d.appendChild(et("B", "right")); + const c = r === "audio" ? null : this._buildGenInfoDOM(this._mediaB); + if (c) { + const m = document.createElement("div"); + m.className = "mjr-mfv-geninfo-b", ot(s) && m.classList.add("mjr-mfv-geninfo--above-player"), m.appendChild(c), d.appendChild(m); + } + l.appendChild(u), l.appendChild(d), this._contentEl.appendChild(l); + } + _renderGrid() { + var s; + const e = [ + { media: this._mediaA, label: "A" }, + { media: this._mediaB, label: "B" }, + { media: this._mediaC, label: "C" }, + { media: this._mediaD, label: "D" } + ]; + if (!e.filter((i) => i.media).length) { + this._contentEl.appendChild(Q("Select up to 4 assets for Grid Compare")); + return; + } + const o = document.createElement("div"); + o.className = "mjr-mfv-grid-container"; + for (const { media: i, label: r } of e) { + const l = document.createElement("div"); + if (l.className = "mjr-mfv-grid-cell", i) { + const u = X(i), a = nt(i), d = ((s = this._trackMediaControls) == null ? void 0 : s.call(this, a)) || a; + if (d ? l.appendChild(d) : l.appendChild(Q("—")), l.appendChild( + et(r, r === "A" || r === "C" ? "left" : "right") + ), u !== "audio") { + const c = this._buildGenInfoDOM(i); + if (c) { + const f = document.createElement("div"); + f.className = `mjr-mfv-geninfo-${r.toLowerCase()}`, ot(d) && f.classList.add("mjr-mfv-geninfo--above-player"), f.appendChild(c), l.appendChild(f); + } + } + } else + l.appendChild(Q("—")), l.appendChild( + et(r, r === "A" || r === "C" ? "left" : "right") + ); + o.appendChild(l); + } + this._contentEl.appendChild(o); + } + // ── Visibility ──────────────────────────────────────────────────────────── + show() { + this.element && (this._bindDocumentUiHandlers(), this.element.classList.add("is-visible"), this.element.setAttribute("aria-hidden", "false"), this.isVisible = !0); + } + hide() { + this.element && (this._destroyPanZoom(), this._destroyCompareSync(), this._stopEdgeResize(), this._closeGenDropdown(), Ze(this.element), this.element.classList.remove("is-visible"), this.element.setAttribute("aria-hidden", "true"), this.isVisible = !1); + } + // ── Pop-out / Pop-in (separate OS window for second monitor) ──────────── + _setDesktopExpanded(e) { + return io(this, e); + } + _activateDesktopExpandedFallback(e) { + return ao(this, e); + } + _tryElectronPopupFallback(e, n, o, s) { + return ro(this, e, n, o, s); + } + popOut() { + return lo(this); + } + _fallbackPopout(e, n, o) { + return co(this, e, n, o); + } + _clearPopoutCloseWatch() { + return uo(this); + } + _startPopoutCloseWatch() { + return po(this); + } + _schedulePopInFromPopupClose() { + return mo(this); + } + _installPopoutStyles(e) { + return ho(this, e); + } + popIn(e) { + return fo(this, e); + } + _updatePopoutBtnUI() { + return _o(this); + } + get isPopped() { + return this._isPopped || this._desktopExpanded; + } + _resizeCursorForDirection(e) { + return go(e); + } + _getResizeDirectionFromPoint(e, n, o) { + return bo(e, n, o); + } + _stopEdgeResize() { + return yo(this); + } + _bindPanelInteractions() { + return Co(this); + } + _initEdgeResize(e) { + return Ao(this, e); + } + _initDrag(e) { + return So(this, e); + } + async _drawMediaFit(e, n, o, s, i, r, l) { + return Eo(this, e, n, o, s, i, r, l); + } + _estimateGenInfoOverlayHeight(e, n, o) { + return Mo(this, e, n, o); + } + _drawGenInfoOverlay(e, n, o, s, i, r) { + return Bo(this, e, n, o, s, i, r); + } + async _captureView() { + return No(this); + } + dispose() { + var e, n, o, s, i, r, l, u, a, d, c, f, h, m, p, g, b, C; + Te(this), this._destroyPanZoom(), this._destroyCompareSync(), this._destroyMediaControls(), this._unbindLayoutObserver(), this._stopEdgeResize(), this._clearPopoutCloseWatch(); + try { + (e = this._panelAC) == null || e.abort(), this._panelAC = null; + } catch (_) { + (n = console.debug) == null || n.call(console, _); + } + try { + (o = this._btnAC) == null || o.abort(), this._btnAC = null; + } catch (_) { + (s = console.debug) == null || s.call(console, _); + } + try { + (i = this._docAC) == null || i.abort(), this._docAC = null; + } catch (_) { + (r = console.debug) == null || r.call(console, _); + } + try { + (l = this._popoutAC) == null || l.abort(), this._popoutAC = null; + } catch (_) { + (u = console.debug) == null || u.call(console, _); + } + try { + (a = this._panzoomAC) == null || a.abort(), this._panzoomAC = null; + } catch (_) { + (d = console.debug) == null || d.call(console, _); + } + try { + (f = (c = this._compareSyncAC) == null ? void 0 : c.abort) == null || f.call(c), this._compareSyncAC = null; + } catch (_) { + (h = console.debug) == null || h.call(console, _); + } + try { + this._isPopped && this.popIn(); + } catch (_) { + (m = console.debug) == null || m.call(console, _); + } + this._revokePreviewBlob(), this._onSidebarPosChanged && (window.removeEventListener("mjr-settings-changed", this._onSidebarPosChanged), this._onSidebarPosChanged = null); + try { + (p = this.element) == null || p.remove(); + } catch (_) { + (g = console.debug) == null || g.call(console, _); + } + this.element = null, this._contentEl = null, this._closeBtn = null, this._modeBtn = null, this._pinGroup = null, this._pinBtns = null, this._liveBtn = null, this._nodeStreamBtn = null, this._popoutBtn = null, this._captureBtn = null, this._unbindDocumentUiHandlers(); + try { + (b = this._genDropdown) == null || b.remove(); + } catch (_) { + (C = console.debug) == null || C.call(console, _); + } + this._mediaA = null, this._mediaB = null, this._mediaC = null, this._mediaD = null, this.isVisible = !1; + } +} +export { + ko as FloatingViewer, + T as MFV_MODES +}; diff --git a/js_dist/chunks/LiveStreamTracker-CC4jZbCd.js b/js_dist/chunks/LiveStreamTracker-BWRfNIz3.js similarity index 99% rename from js_dist/chunks/LiveStreamTracker-CC4jZbCd.js rename to js_dist/chunks/LiveStreamTracker-BWRfNIz3.js index 5f634eca..6b6ea37c 100644 --- a/js_dist/chunks/LiveStreamTracker-CC4jZbCd.js +++ b/js_dist/chunks/LiveStreamTracker-BWRfNIz3.js @@ -1,4 +1,4 @@ -import { E as S, w as L, e as s } from "./entry-CuODMrGh.js"; +import { E as S, w as L, e as s } from "./entry-CfyS4_5Z.js"; let l = null, c = null, d = null, m = !1, u = null, g = null, h = 0, _ = 0, f = null; const v = /* @__PURE__ */ new WeakMap(); function k() { diff --git a/js_dist/chunks/entry-CuODMrGh.js b/js_dist/chunks/entry-CfyS4_5Z.js similarity index 87% rename from js_dist/chunks/entry-CuODMrGh.js rename to js_dist/chunks/entry-CfyS4_5Z.js index 4122c281..704877eb 100644 --- a/js_dist/chunks/entry-CuODMrGh.js +++ b/js_dist/chunks/entry-CfyS4_5Z.js @@ -1,6 +1,6 @@ -import { f as rg, r as Ae, e as ze, g as lg, h as Vs, i as Up, j as Kp, u as xe, w as cn, k as Rd, l as ag, s as Ys, o as be, c as Ce, F as Nt, m as Cn, n as Lt, a as ft, t as Ye, p as Dp, q as Dn, v as _n, x as Ep, b as ie, y as fn, z as On, A as Zn, B as Hp, C as xr, D as qp, E as Ko, G as Pp, H as yr, d as Pi, T as ks, I as wo, J as jl, K as Fd, L as vl, M as cg } from "./mjr-vue-vendor-DZo-ZbFS.js"; +import { f as rg, r as We, e as ze, g as lg, h as Vs, i as Bp, j as Up, u as ve, w as dn, k as Rd, l as ag, s as Xs, o as be, c as Ze, F as Nt, m as Zn, n as vt, a as yt, t as Ne, p as Dp, q as Dn, v as _n, x as Hp, b as te, y as Cn, z as Fn, A as An, B as Ep, C as xr, D as qp, E as Uo, G as Pp, H as yr, d as Pi, T as Ns, I as wo, J as jl, K as Od, L as vl, M as cg } from "./mjr-vue-vendor-DZo-ZbFS.js"; import { app as vo } from "../../../scripts/app.js"; -const Oi = "mjrSettings", sg = 1, Od = "mjrMinimapSettings"; +const Fi = "mjrSettings", sg = 1, Fd = "mjrMinimapSettings"; function dg(e) { try { return String(e ?? "").trim(); @@ -26,7 +26,7 @@ function Qp(e = "", t = 16) { throw new Error("Secure token generation requires crypto.getRandomValues()."); return `${String(e || "")}${n}`; } -function Xs(e = "", t = 8) { +function ks(e = "", t = 8) { const n = ug(t); return n ? `${String(e || "")}${n}` : (zd += 1, `${String(e || "")}${Date.now().toString(36)}_${zd.toString(36)}`); } @@ -68,7 +68,7 @@ function $p(e) { function ey(e) { return /^[a-zA-Z]:\//.test(String(e || "")); } -const ty = 200, ny = 0, ct = { +const ty = 200, ny = 0, st = { // Health & Config HEALTH: "/mjr/am/health", HEALTH_COUNTERS: "/mjr/am/health/counters", @@ -164,10 +164,10 @@ const ty = 200, ny = 0, ct = { // Library audit AUDIT: "/mjr/am/audit" }; -function Da(e, t = {}) { +function Ha(e, t = {}) { let n = String(e || ""); - const i = () => n.includes("?") ? "&" : "?", o = (A) => { - n += i() + A; + const i = () => n.includes("?") ? "&" : "?", o = (y) => { + n += i() + y; }, { subfolder: r = null, kind: l = null, @@ -177,21 +177,21 @@ function Da(e, t = {}) { maxSizeMB: d = null, minWidth: u = null, minHeight: I = null, - maxWidth: y = null, - maxHeight: S = null, - workflowType: Z = null, - dateRange: C = null, + maxWidth: A = null, + maxHeight: h = null, + workflowType: S = null, + dateRange: W = null, dateExact: g = null } = t || {}; - return r && o(`subfolder=${encodeURIComponent(String(r))}`), l && o(`kind=${encodeURIComponent(l)}`), a != null && o(`has_workflow=${encodeURIComponent(a ? "true" : "false")}`), c != null && Number(c) > 0 && o(`min_rating=${encodeURIComponent(String(c))}`), s != null && Number(s) > 0 && o(`min_size_mb=${encodeURIComponent(String(s))}`), d != null && Number(d) > 0 && o(`max_size_mb=${encodeURIComponent(String(d))}`), u != null && Number(u) > 0 && o(`min_width=${encodeURIComponent(String(u))}`), I != null && Number(I) > 0 && o(`min_height=${encodeURIComponent(String(I))}`), y != null && Number(y) > 0 && o(`max_width=${encodeURIComponent(String(y))}`), S != null && Number(S) > 0 && o(`max_height=${encodeURIComponent(String(S))}`), Z && o(`workflow_type=${encodeURIComponent(String(Z))}`), C && o(`date_range=${encodeURIComponent(String(C))}`), g && o(`date_exact=${encodeURIComponent(String(g))}`), n; + return r && o(`subfolder=${encodeURIComponent(String(r))}`), l && o(`kind=${encodeURIComponent(l)}`), a != null && o(`has_workflow=${encodeURIComponent(a ? "true" : "false")}`), c != null && Number(c) > 0 && o(`min_rating=${encodeURIComponent(String(c))}`), s != null && Number(s) > 0 && o(`min_size_mb=${encodeURIComponent(String(s))}`), d != null && Number(d) > 0 && o(`max_size_mb=${encodeURIComponent(String(d))}`), u != null && Number(u) > 0 && o(`min_width=${encodeURIComponent(String(u))}`), I != null && Number(I) > 0 && o(`min_height=${encodeURIComponent(String(I))}`), A != null && Number(A) > 0 && o(`max_width=${encodeURIComponent(String(A))}`), h != null && Number(h) > 0 && o(`max_height=${encodeURIComponent(String(h))}`), S && o(`workflow_type=${encodeURIComponent(String(S))}`), W && o(`date_range=${encodeURIComponent(String(W))}`), g && o(`date_exact=${encodeURIComponent(String(g))}`), n; } function ul(e, t = null, n = "output") { const i = String(e || "").trim(); if (!i) return ""; - let o = `${ct.VIEW}?filename=${encodeURIComponent(i)}`; + let o = `${st.VIEW}?filename=${encodeURIComponent(i)}`; return t && (o += `&subfolder=${encodeURIComponent(t)}`), o += `&type=${encodeURIComponent(n)}`, o; } -function Ns(e = {}) { +function Rs(e = {}) { const { q: t = "*", limit: n = ty, @@ -205,54 +205,54 @@ function Ns(e = {}) { minSizeMB: d = null, maxSizeMB: u = null, resolutionCompare: I = null, - minWidth: y = null, - minHeight: S = null, - maxWidth: Z = null, - maxHeight: C = null, + minWidth: A = null, + minHeight: h = null, + maxWidth: S = null, + maxHeight: W = null, workflowType: g = null, - dateRange: A = null, + dateRange: y = null, dateExact: p = null, sort: b = null, includeTotal: L = !0, - groupStacks: h = !1 + groupStacks: C = !1 } = e; - let G = `${ct.LIST}?q=${encodeURIComponent(t)}&limit=${n}&offset=${i}&scope=${encodeURIComponent(o)}`; - return r && (G += `&subfolder=${encodeURIComponent(r)}`), l ? G += `&custom_root_id=${encodeURIComponent(l)}` : String(o || "").toLowerCase() === "custom" && (G += "&browser_mode=1"), G = Da(G, { + let G = `${st.LIST}?q=${encodeURIComponent(t)}&limit=${n}&offset=${i}&scope=${encodeURIComponent(o)}`; + return r && (G += `&subfolder=${encodeURIComponent(r)}`), l ? G += `&custom_root_id=${encodeURIComponent(l)}` : String(o || "").toLowerCase() === "custom" && (G += "&browser_mode=1"), G = Ha(G, { kind: a, hasWorkflow: c, minRating: s, minSizeMB: d, maxSizeMB: u, - minWidth: y, - minHeight: S, - maxWidth: Z, - maxHeight: C, + minWidth: A, + minHeight: h, + maxWidth: S, + maxHeight: W, workflowType: g, - dateRange: A, + dateRange: y, dateExact: p - }), I && (G += `&resolution_compare=${encodeURIComponent(String(I))}`), b && (G += `&sort=${encodeURIComponent(String(b))}`), L === !1 && (G += "&include_total=0"), h && (G += "&group_stacks=1"), G; + }), I && (G += `&resolution_compare=${encodeURIComponent(String(I))}`), b && (G += `&sort=${encodeURIComponent(String(b))}`), L === !1 && (G += "&include_total=0"), C && (G += "&group_stacks=1"), G; } function mg(e, t = "", n = "") { const i = String(e || "").trim(), o = String(n || "").trim(); if (!i || !o) return ""; - let r = `${ct.CUSTOM_VIEW}?root_id=${encodeURIComponent(o)}&filename=${encodeURIComponent(i)}`; + let r = `${st.CUSTOM_VIEW}?root_id=${encodeURIComponent(o)}&filename=${encodeURIComponent(i)}`; return t && (r += `&subfolder=${encodeURIComponent(t)}`), r; } function iy(e) { - return `${ct.BATCH_ZIP_CREATE}/${encodeURIComponent(String(e || ""))}`; + return `${st.BATCH_ZIP_CREATE}/${encodeURIComponent(String(e || ""))}`; } function oy(e) { - return `${ct.STACKS}/${encodeURIComponent(String(e || ""))}`; + return `${st.STACKS}/${encodeURIComponent(String(e || ""))}`; } function ry(e) { return `${oy(e)}/members`; } function ly(e, t = "") { - var u, I, y, S, Z; + var u, I, A, h, S; const n = e && typeof e == "object" ? e : {}, i = String(t || "").trim(); if (!i) return ""; const o = fi((n == null ? void 0 : n.asset_id) ?? (n == null ? void 0 : n.id) ?? null); - let r = `${ct.VIEWER_RESOURCE}?relpath=${encodeURIComponent(i)}`; + let r = `${st.VIEWER_RESOURCE}?relpath=${encodeURIComponent(i)}`; if (o) return `${r}&asset_id=${encodeURIComponent(o)}`; const l = pa( @@ -262,12 +262,12 @@ function ly(e, t = "") { ); if (l) return `${r}&filepath=${encodeURIComponent(l)}`; - const a = String((n == null ? void 0 : n.filename) || (n == null ? void 0 : n.name) || ((y = n == null ? void 0 : n.file_info) == null ? void 0 : y.filename) || "").trim(); + const a = String((n == null ? void 0 : n.filename) || (n == null ? void 0 : n.name) || ((A = n == null ? void 0 : n.file_info) == null ? void 0 : A.filename) || "").trim(); if (!a) return ""; r += `&filename=${encodeURIComponent(a)}`; - const c = String((n == null ? void 0 : n.subfolder) || ((S = n == null ? void 0 : n.file_info) == null ? void 0 : S.subfolder) || "").trim(); + const c = String((n == null ? void 0 : n.subfolder) || ((h = n == null ? void 0 : n.file_info) == null ? void 0 : h.subfolder) || "").trim(); c && (r += `&subfolder=${encodeURIComponent(c)}`); - const s = String((n == null ? void 0 : n.type) || ((Z = n == null ? void 0 : n.file_info) == null ? void 0 : Z.type) || "").trim().toLowerCase(); + const s = String((n == null ? void 0 : n.type) || ((S = n == null ? void 0 : n.file_info) == null ? void 0 : S.type) || "").trim().toLowerCase(); s && s !== "custom" && (r += `&type=${encodeURIComponent(s)}`); const d = String(Mi(n) || (n == null ? void 0 : n.root_id) || (n == null ? void 0 : n.custom_root_id) || "").trim(); return d && (r += `&root_id=${encodeURIComponent(d)}`), r; @@ -281,8 +281,8 @@ function ay(e = {}) { hasWorkflow: r = null, minRating: l = null } = e; - let a = `${ct.DATE_HISTOGRAM}?scope=${encodeURIComponent(t)}&month=${encodeURIComponent(String(i || ""))}`; - return n && (a += `&custom_root_id=${encodeURIComponent(n)}`), Da(a, { + let a = `${st.DATE_HISTOGRAM}?scope=${encodeURIComponent(t)}&month=${encodeURIComponent(String(i || ""))}`; + return n && (a += `&custom_root_id=${encodeURIComponent(n)}`), Ha(a, { subfolder: e.subfolder ?? null, kind: o, hasWorkflow: r, @@ -298,46 +298,46 @@ function ay(e = {}) { dateExact: e.dateExact ?? null }); } -function Ki(e) { - var u, I, y, S, Z; - const t = e == null ? void 0 : e.mtime, n = (C) => !C || !t ? C : `${C}${C.includes("?") ? "&" : "?"}v=${encodeURIComponent(t)}`, i = pa( +function Ui(e) { + var u, I, A, h, S; + const t = e == null ? void 0 : e.mtime, n = (W) => !W || !t ? W : `${W}${W.includes("?") ? "&" : "?"}v=${encodeURIComponent(t)}`, i = pa( String( (e == null ? void 0 : e.filepath) || (e == null ? void 0 : e.path) || (e == null ? void 0 : e.fullpath) || (e == null ? void 0 : e.full_path) || ((u = e == null ? void 0 : e.file_info) == null ? void 0 : u.filepath) || ((I = e == null ? void 0 : e.file_info) == null ? void 0 : I.path) || "" ).trim() ); let o = String( - (e == null ? void 0 : e.filename) || (e == null ? void 0 : e.name) || ((y = e == null ? void 0 : e.file_info) == null ? void 0 : y.filename) || "" - ).trim(), r = String((e == null ? void 0 : e.subfolder) || ((S = e == null ? void 0 : e.file_info) == null ? void 0 : S.subfolder) || "").trim(); - const a = ((C) => { - const g = { type: "", subfolder: "", filename: "" }, A = pa(C); - if (!A) return g; - const p = A.toLowerCase().indexOf("/output/"), b = A.toLowerCase().indexOf("/input/"); + (e == null ? void 0 : e.filename) || (e == null ? void 0 : e.name) || ((A = e == null ? void 0 : e.file_info) == null ? void 0 : A.filename) || "" + ).trim(), r = String((e == null ? void 0 : e.subfolder) || ((h = e == null ? void 0 : e.file_info) == null ? void 0 : h.subfolder) || "").trim(); + const a = ((W) => { + const g = { type: "", subfolder: "", filename: "" }, y = pa(W); + if (!y) return g; + const p = y.toLowerCase().indexOf("/output/"), b = y.toLowerCase().indexOf("/input/"); let L = -1; if (p >= 0 ? (g.type = "output", L = p + 8) : b >= 0 && (g.type = "input", L = b + 7), L >= 0) { - const h = A.slice(L), G = h.lastIndexOf("/"); - G >= 0 ? (g.subfolder = h.slice(0, G), g.filename = h.slice(G + 1)) : g.filename = h; + const C = y.slice(L), G = C.lastIndexOf("/"); + G >= 0 ? (g.subfolder = C.slice(0, G), g.filename = C.slice(G + 1)) : g.filename = C; } else { - const h = $p(A); - g.filename = h.filename; + const C = $p(y); + g.filename = C.filename; } return g; })(i); if (!r && o.includes("/")) { - const C = o.lastIndexOf("/"); - C > 0 && (r = o.slice(0, C), o = o.slice(C + 1)); + const W = o.lastIndexOf("/"); + W > 0 && (r = o.slice(0, W), o = o.slice(W + 1)); } if (!o && a.filename && (o = a.filename), !r && a.subfolder && (r = a.subfolder), !o) return ""; - let c = String((e == null ? void 0 : e.type) || ((Z = e == null ? void 0 : e.file_info) == null ? void 0 : Z.type) || "").toLowerCase().trim(); + let c = String((e == null ? void 0 : e.type) || ((S = e == null ? void 0 : e.file_info) == null ? void 0 : S.type) || "").toLowerCase().trim(); c !== "input" && c !== "output" && c !== "custom" && (c = ""), !c && a.type && (c = a.type), !c && i && (i.includes("/input/") ? c = "input" : i.includes("/output/") && (c = "output")), c || (c = "output"); const s = i.includes("/output/") || i.includes("/input/"), d = ey(r) || r.startsWith("/"); if (i && c !== "custom" && (d || !s)) return n(Ea(i, { inline: !0 })); if (c === "custom") { - const C = String(Mi(e) || "").trim(); - if (C) return n(mg(o, r, C)); + const W = String(Mi(e) || "").trim(); + if (W) return n(mg(o, r, W)); if (i) return n( - `${ct.CUSTOM_VIEW}?filepath=${encodeURIComponent(i)}&browser_mode=1` + `${st.CUSTOM_VIEW}?filepath=${encodeURIComponent(i)}&browser_mode=1` ); const g = a.type || "output"; return n(ul(o, r, g)); @@ -347,11 +347,11 @@ function Ki(e) { function Ea(e, t = {}) { if (!e) return ""; const n = !!(t != null && t.inline); - let i = `${ct.DOWNLOAD}?filepath=${encodeURIComponent(e)}`; + let i = `${st.DOWNLOAD}?filepath=${encodeURIComponent(e)}`; return n && (i += "&preview=1"), i; } function cy(e) { - return e ? `${ct.DOWNLOAD_CLEAN}?filepath=${encodeURIComponent(e)}` : ""; + return e ? `${st.DOWNLOAD_CLEAN}?filepath=${encodeURIComponent(e)}` : ""; } const sy = /* @__PURE__ */ new Set(["POST", "PUT", "DELETE", "PATCH"]), Jd = 2e4, dy = 3e5, uy = 3, my = 400, gy = "/mjr/am/settings/security/bootstrap-token", Iy = "/mjr/am/", Ll = /* @__PURE__ */ new Map(); function gg(e) { @@ -374,7 +374,7 @@ function Ig(e) { return ""; } } -function Jc(e) { +function Tc(e) { return Ig(e).startsWith(Iy); } function $l(e) { @@ -391,7 +391,7 @@ function by(e) { return !1; } } -function Tc(e = {}) { +function Kc(e = {}) { try { const t = Number(e == null ? void 0 : e.timeoutMs); return Number.isFinite(t) ? Math.max(1e3, Math.min(dy, Math.floor(t))) : Jd; @@ -405,11 +405,11 @@ function py(e = {}) { if (typeof AbortController > "u") return { signal: t || void 0, - timeoutMs: Tc(e), + timeoutMs: Kc(e), cleanup: () => { } }; - const n = Tc(e), i = new AbortController(); + const n = Kc(e), i = new AbortController(); let o = null; const r = () => { var c, s; @@ -462,7 +462,7 @@ function py(e = {}) { function yy(e, t, n = {}) { const i = String(e).trim().toUpperCase(), o = String(t || "").trim(); if (!i || !o) return ""; - const r = Tc(n); + const r = Kc(n); return `${i}:${o}:timeout=${r}`; } function fy(e, t) { @@ -480,7 +480,7 @@ function fy(e, t) { }); return Ll.set(n, i), i; } -function hy(e, t, n) { +function Cy(e, t, n) { var i, o; if ($r(t)) try { @@ -494,7 +494,7 @@ function hy(e, t, n) { (o = console.debug) == null || o.call(console, r); } } -function Cy(e, t) { +function hy(e, t) { var n; if (t) try { @@ -507,7 +507,7 @@ async function Zy(e, t, n, i, { ensureWriteAuthToken: o, normalizeWriteAuthFailu var I; const s = e.headers.get("content-type") || ""; if (!s.includes("application/json")) - return !i && $r(n) && Jc(t) && !$l(t) && Number(e.status || 0) === 401 && await o({ force: !0, allowCookieRefresh: !0 }) ? await l(t, { ...a, _authRetryDone: !0 }, c) : { + return !i && $r(n) && Tc(t) && !$l(t) && Number(e.status || 0) === 401 && await o({ force: !0, allowCookieRefresh: !0 }) ? await l(t, { ...a, _authRetryDone: !0 }, c) : { ok: !1, error: `Server returned non-JSON response (${e.status})`, code: "INVALID_RESPONSE", @@ -515,9 +515,9 @@ async function Zy(e, t, n, i, { ensureWriteAuthToken: o, normalizeWriteAuthFailu content_type: s, data: null }; - let d = await e.json().catch((y) => { - var S; - return (S = console.debug) == null || S.call(console, "[MJR API] JSON parse error:", y), null; + let d = await e.json().catch((A) => { + var h; + return (h = console.debug) == null || h.call(console, "[MJR API] JSON parse error:", A), null; }); if (typeof d != "object" || d === null) return { @@ -530,10 +530,10 @@ async function Zy(e, t, n, i, { ensureWriteAuthToken: o, normalizeWriteAuthFailu if (!("status" in d)) try { d.status = e.status; - } catch (y) { - (I = console.debug) == null || I.call(console, y); + } catch (A) { + (I = console.debug) == null || I.call(console, A); } - return !i && $r(n) && !$l(t) && !(d != null && d.ok) && (String((d == null ? void 0 : d.code) || "").toUpperCase() === "AUTH_REQUIRED" || Number((d == null ? void 0 : d.status) || 0) === 401) && await o({ force: !0, allowCookieRefresh: !0 }) ? await l(t, { ...a, _authRetryDone: !0 }, c) : ($r(n) && Jc(t) && !$l(t) && (d = r(d)), d); + return !i && $r(n) && !$l(t) && !(d != null && d.ok) && (String((d == null ? void 0 : d.code) || "").toUpperCase() === "AUTH_REQUIRED" || Number((d == null ? void 0 : d.status) || 0) === 401) && await o({ force: !0, allowCookieRefresh: !0 }) ? await l(t, { ...a, _authRetryDone: !0 }, c) : ($r(n) && Tc(t) && !$l(t) && (d = r(d)), d); } function Ay({ readObsEnabled: e = () => !1, @@ -543,36 +543,36 @@ function Ay({ trackApiCall: o = null } = {}) { async function r(c, s = {}, d = 0) { - var S, Z, C, g, A, p, b; + var h, S, W, g, y, p, b; const u = typeof performance < "u" ? performance.now() : Date.now(), I = py(s); - let y = null; + let A = null; try { - const L = (s.method || "GET").toUpperCase(), h = !!(s != null && s._authRetryDone), G = typeof Headers < "u" ? new Headers(s.headers || {}) : { ...s.headers }; - hy(G, L, !!e()); - let W = t(); - if (!W && $r(L) && Jc(c) && !$l(c)) { + const L = (s.method || "GET").toUpperCase(), C = !!(s != null && s._authRetryDone), G = typeof Headers < "u" ? new Headers(s.headers || {}) : { ...s.headers }; + Cy(G, L, !!e()); + let Z = t(); + if (!Z && $r(L) && Tc(c) && !$l(c)) { try { await n(); } catch (x) { - (S = console.debug) == null || S.call(console, x); + (h = console.debug) == null || h.call(console, x); } - W = t(); + Z = t(); } - Cy(G, W); + hy(G, Z); const f = { ...s, headers: G, signal: I.signal }; try { delete f._authRetryDone, delete f.timeoutMs; } catch (x) { - (Z = console.debug) == null || Z.call(console, x); + (S = console.debug) == null || S.call(console, x); } const X = await fetch(c, f); - return y = await Zy(X, c, L, h, { + return A = await Zy(X, c, L, C, { ensureWriteAuthToken: n, normalizeWriteAuthFailure: i, fetchAPI: r, options: s, retryCount: d - }), y; + }), A; } catch (L) { try { if (String((L == null ? void 0 : L.name) || "") === "AbortError") @@ -583,14 +583,14 @@ function Ay({ data: null, timeout_ms: I.timeoutMs }; - } catch (h) { - (C = console.debug) == null || C.call(console, h); + } catch (C) { + (W = console.debug) == null || W.call(console, C); } if (d < uy && by(L)) { try { await gg(my * (d + 1)); - } catch (h) { - (g = console.debug) == null || g.call(console, h); + } catch (C) { + (g = console.debug) == null || g.call(console, C); } return await r(c, s, d + 1); } @@ -603,10 +603,10 @@ function Ay({ }; } finally { try { - const h = (typeof performance < "u" ? performance.now() : Date.now()) - u; - typeof o == "function" ? o(h, !(y != null && y.ok)) : typeof window < "u" && window.MajoorMetrics && window.MajoorMetrics.trackApiCall(h, !(y != null && y.ok)); + const C = (typeof performance < "u" ? performance.now() : Date.now()) - u; + typeof o == "function" ? o(C, !(A != null && A.ok)) : typeof window < "u" && window.MajoorMetrics && window.MajoorMetrics.trackApiCall(C, !(A != null && A.ok)); } catch (L) { - (A = console.debug) == null || A.call(console, L); + (y = console.debug) == null || y.call(console, L); } try { (p = I.cleanup) == null || p.call(I); @@ -655,13 +655,13 @@ function Wr({ ttlMs: e = 0, maxSize: t = 100, now: n = () => Date.now() } = {}) return 1; } } - function a(u, I, y) { - return u ? y > 0 ? I - Number(u.at || 0) > y : !1 : !0; + function a(u, I, A) { + return u ? A > 0 ? I - Number(u.at || 0) > A : !1 : !0; } function c(u = o(), I = r()) { if (I > 0) - for (const [y, S] of i.entries()) - a(S, u, I) && i.delete(y); + for (const [A, h] of i.entries()) + a(h, u, I) && i.delete(A); } function s() { const u = l(); @@ -676,23 +676,23 @@ function Wr({ ttlMs: e = 0, maxSize: t = 100, now: n = () => Date.now() } = {}) } return { get(u) { - const I = o(), y = r(); - c(I, y); - const S = i.get(u); - if (S) { - if (a(S, I, y)) { + const I = o(), A = r(); + c(I, A); + const h = i.get(u); + if (h) { + if (a(h, I, A)) { i.delete(u); return; } - return S.value; + return h.value; } }, has(u) { return this.get(u) !== void 0; }, - set(u, I, y = {}) { - const S = Number(y == null ? void 0 : y.at), Z = Number.isFinite(S) ? S : o(), C = { value: I, at: Z }; - return i.has(u) ? d(u, C) : i.set(u, C), c(o(), r()), s(), I; + set(u, I, A = {}) { + const h = Number(A == null ? void 0 : A.at), S = Number.isFinite(h) ? h : o(), W = { value: I, at: S }; + return i.has(u) ? d(u, W) : i.set(u, W), c(o(), r()), s(), I; }, delete(u) { return i.delete(u); @@ -719,7 +719,7 @@ const bg = 50; function Li(e) { return !!e && typeof e == "object"; } -function ha(e, t) { +function Ca(e, t) { try { if (!e || typeof e != "object" && typeof e != "function") return null; const n = Object.getOwnPropertyDescriptor(e, t); @@ -740,19 +740,19 @@ function Td(e) { function Wy(e) { return sr(e) && (fa = e), fa; } -function Ca(e) { +function ha(e) { var i, o, r, l, a; if (sr(fa)) return fa; const t = Li(e) ? e : Qn(), n = (t == null ? void 0 : t.api) || ((i = t == null ? void 0 : t.ui) == null ? void 0 : i.api) || ((r = (o = t == null ? void 0 : t.ui) == null ? void 0 : o.app) == null ? void 0 : r.api) || null; if (sr(n)) return n; try { - const c = typeof window < "u" ? ha(window, "api") : null; + const c = typeof window < "u" ? Ca(window, "api") : null; if (sr(c)) return c; } catch (c) { (l = console.debug) == null || l.call(console, c); } try { - const c = typeof globalThis < "u" ? ha(globalThis, "api") : null; + const c = typeof globalThis < "u" ? Ca(globalThis, "api") : null; if (sr(c)) return c; } catch (c) { (a = console.debug) == null || a.call(console, c); @@ -763,13 +763,13 @@ function Qn() { var e, t; if (ea(ya)) return ya; try { - const n = typeof globalThis < "u" ? ha(globalThis, "app") : null; + const n = typeof globalThis < "u" ? Ca(globalThis, "app") : null; if (ea(n)) return n; } catch (n) { (e = console.debug) == null || e.call(console, n); } try { - const n = typeof window < "u" ? ha(window, "app") : null; + const n = typeof window < "u" ? Ca(window, "app") : null; if (ea(n)) return n; } catch (n) { (t = console.debug) == null || t.call(console, n); @@ -790,7 +790,7 @@ function My(e, t) { return null; } } -function Ha(e) { +function qa(e) { var n; const t = Li(e) ? e : Qn(); return (t == null ? void 0 : t.extensionManager) || ((n = t == null ? void 0 : t.ui) == null ? void 0 : n.extensionManager) || null; @@ -798,17 +798,17 @@ function Ha(e) { function pg(e) { return Li(e) && ((e == null ? void 0 : e.sidebarTab) || (e == null ? void 0 : e.sidebarTabStore)) || null; } -function Sy(e) { - const t = Ha(e), n = (t == null ? void 0 : t.toast) || null; +function Gy(e) { + const t = qa(e), n = (t == null ? void 0 : t.toast) || null; return n && typeof n.add == "function" ? n : null; } -function Gy(e) { - const t = Ha(e), n = (t == null ? void 0 : t.dialog) || null; +function Sy(e) { + const t = qa(e), n = (t == null ? void 0 : t.dialog) || null; return n && (typeof n.confirm == "function" || typeof n.prompt == "function") ? n : null; } function xy(e, t) { var a, c, s, d; - const n = Li(e) ? e : Qn(), i = Ha(n), o = pg(i), r = String(t).trim(); + const n = Li(e) ? e : Qn(), i = qa(n), o = pg(i), r = String(t).trim(); if (!i || !r) return !1; const l = [ "activateSidebarTab", @@ -823,8 +823,8 @@ function xy(e, t) { try { if (typeof (u == null ? void 0 : u[I]) == "function") return u[I](r), !0; - } catch (y) { - (a = console.debug) == null || a.call(console, y); + } catch (A) { + (a = console.debug) == null || a.call(console, A); } try { if (String( @@ -839,7 +839,7 @@ function xy(e, t) { } function jy(e, t) { var r; - const n = Ha(e), i = t && typeof t == "object" ? { ...t } : null; + const n = qa(e), i = t && typeof t == "object" ? { ...t } : null; if (!n || !i) return !1; const o = ["registerCommand", "addCommand"]; for (const l of o) @@ -892,7 +892,7 @@ async function Ly({ throw new Error(`waitForComfyApp timeout after ${r}ms`); return null; } -async function hg({ +async function Cg({ app: e = null, timeoutMs: t = 4e3, intervalMs: n = bg, @@ -901,11 +901,11 @@ async function hg({ } = {}) { const r = Date.now(), l = Math.max(0, Number(t) || 0); for (; Date.now() - r < l; ) { - const c = e || Qn(), s = Ca(c); + const c = e || Qn(), s = ha(c); if (s) return s; await yg(n); } - const a = Ca(e || Qn()); + const a = ha(e || Qn()); if (a) return a; if (i && fg("waitForComfyApi", l), o) throw new Error(`waitForComfyApi timeout after ${l}ms`); @@ -913,7 +913,7 @@ async function hg({ } const lr = /* @__PURE__ */ new Map(); let Za = !1, el = null; -function ac() { +function cc() { try { if (typeof window > "u") return null; const e = window.localStorage; @@ -933,7 +933,7 @@ function Bc(e, t, n) { (o = console.debug) == null || o.call(console, l); } } -function Vy() { +function Yy() { var e; if (!Za) try { @@ -947,7 +947,7 @@ function Vy() { } const ni = { get(e) { - const t = ac(); + const t = cc(); if (!t) return null; try { return t.getItem(String(e || "")); @@ -958,7 +958,7 @@ const ni = { set(e, t) { const n = String(e || ""); if (!n) return !1; - const i = ac(); + const i = cc(); if (!i) return !1; const o = ni.get(n); try { @@ -974,7 +974,7 @@ const ni = { const n = String(e || ""); if (!n || typeof t != "function") return () => { }; - Vy(); + Yy(); let i = lr.get(n); return i || (i = /* @__PURE__ */ new Set(), lr.set(n, i)), i.add(t), () => { var o; @@ -988,7 +988,7 @@ const ni = { }, getAll() { var n; - const e = {}, t = ac(); + const e = {}, t = cc(); if (!t) return e; try { const i = Number(t.length || 0) || 0; @@ -1011,10 +1011,10 @@ const ni = { Za = !1, el = null, lr.clear(); } }, Ri = "en-US"; -let Ei = Ri; -const Bd = /* @__PURE__ */ new Set(), Uc = ["mjr_lang", "majoor.lang"], Cg = "mjr_lang_follow_comfy", Ud = 500, Nr = /* @__PURE__ */ new Set(); +let Hi = Ri; +const Kd = /* @__PURE__ */ new Set(), Uc = ["mjr_lang", "majoor.lang"], hg = "mjr_lang_follow_comfy", Bd = 500, kr = /* @__PURE__ */ new Set(); let Rr = null; -const Yy = /* @__PURE__ */ new Set(["ar-SA", "fa-IR", "he-IL"]), Kd = { +const Vy = /* @__PURE__ */ new Set(["ar-SA", "fa-IR", "he-IL"]), Ud = { // French fr: "fr-FR", "fr-fr": "fr-FR", @@ -1144,7 +1144,7 @@ const Yy = /* @__PURE__ */ new Set(["ar-SA", "fa-IR", "he-IL"]), Kd = { "el-gr": "el-GR", el_gr: "el-GR", elgr: "el-GR" -}, En = { +}, Hn = { "en-US": { // --- Settings Categories --- "cat.grid": "Grid", @@ -2138,7 +2138,7 @@ Pour eviter les erreurs de base de donnees avec cette version, supprimez votre i "msg.nightlyUpdateDetail": "Une build nightly plus recente est disponible : https://github.com/MajoorWaldi/ComfyUI-Majoor-AssetsManager/releases/tag/nightly", "tooltip.starGithub": "Ouvrir GitHub et mettre une etoile" } -}, ky = Object.freeze({ +}, Xy = Object.freeze({ "en-US": "English", "fr-FR": "Français", "zh-CN": "Chinese (Simplified)", @@ -2188,32 +2188,32 @@ Pour eviter les erreurs de base de donnees avec cette version, supprimez votre i "ro-RO", "el-GR" ].forEach((e) => { - En[e] || (En[e] = {}); + Hn[e] || (Hn[e] = {}); }); -let Aa = !1, cc = null; -function Xy(e) { +let Aa = !1, sc = null; +function Ny(e) { Aa || (Aa = !0, Object.entries(e || {}).forEach(([t, n]) => { - En[t] = { ...En[t] || {}, ...n || {} }; - }), Rs()); + Hn[t] = { ...Hn[t] || {}, ...n || {} }; + }), Os()); } -function Rs() { - const e = En["en-US"] || {}; - Object.keys(En).forEach((t) => { - t !== "en-US" && (En[t] = { ...e, ...En[t] || {} }); +function Os() { + const e = Hn["en-US"] || {}; + Object.keys(Hn).forEach((t) => { + t !== "en-US" && (Hn[t] = { ...e, ...Hn[t] || {} }); }); } -function Ny() { - return Aa ? Promise.resolve() : (cc || (cc = import("./i18n.generated-CpvCqt87.js").then(({ GENERATED_TRANSLATIONS: e }) => { - Xy(e); +function ky() { + return Aa ? Promise.resolve() : (sc || (sc = import("./i18n.generated-CpvCqt87.js").then(({ GENERATED_TRANSLATIONS: e }) => { + Ny(e); }).catch((e) => { - console.warn("[Majoor i18n] Failed to load generated translations:", e), Rs(); - })), cc); + console.warn("[Majoor i18n] Failed to load generated translations:", e), Os(); + })), sc); } -Rs(); +Os(); function ta(e) { if (!e) return Ri; const t = String(e || "").trim(), n = t.toLowerCase(); - return Kd[n] ? Kd[n] : En[t] ? t : Ri; + return Ud[n] ? Ud[n] : Hn[t] ? t : Ri; } function Ry() { var e; @@ -2227,7 +2227,7 @@ function Ry() { } return ""; } -function Fy(e) { +function Oy(e) { var t; try { ni.set(Uc[0], e), ni.set(Uc[1], e); @@ -2238,17 +2238,17 @@ function Fy(e) { function Zg() { var e; try { - const t = String(ni.get(Cg) || "").trim().toLowerCase(); + const t = String(ni.get(hg) || "").trim().toLowerCase(); return t ? !["0", "false", "no", "off"].includes(t) : !0; } catch (t) { (e = console.debug) == null || e.call(console, t); } return !0; } -function Oy(e) { +function Fy(e) { var t; try { - ni.set(Cg, e ? "1" : "0"); + ni.set(hg, e ? "1" : "0"); } catch (n) { (t = console.debug) == null || t.call(console, n); } @@ -2297,7 +2297,7 @@ function Jy() { var e; try { if (typeof document < "u" && document.documentElement) { - const t = Yy.has(Ei); + const t = Vy.has(Hi); document.documentElement.dir = t ? "rtl" : "ltr"; } } catch (t) { @@ -2310,22 +2310,22 @@ const Wg = (e) => { const l = Ag(e); for (const a of l) { const c = ta(a); - if (En[c]) + if (Hn[c]) return _i(c), !0; } return !1; }; if (t) { if (o()) return; - if (n && En[i]) { + if (n && Hn[i]) { _i(i); return; } - if (En[Ei]) return; + if (Hn[Hi]) return; _i(Ri); return; } - if (n && En[i]) { + if (n && Hn[i]) { _i(i); return; } @@ -2333,7 +2333,7 @@ const Wg = (e) => { const r = zy(); for (const l of r) { const a = ta(l); - if (En[a]) { + if (Hn[a]) { _i(a); return; } @@ -2343,8 +2343,8 @@ const Wg = (e) => { console.warn("[Majoor i18n] Failed to detect language:", t), _i(Ri); } }, _i = (e) => { - En[e] || (console.warn(`[Majoor i18n] Unknown language: ${e}, falling back to ${Ri}`), e = Ri), Ei !== e && (Ei = e, Fy(e), Jy(), e !== Ri && !Aa && Ny().then(() => { - Array.from(Bd).forEach((t) => { + Hn[e] || (console.warn(`[Majoor i18n] Unknown language: ${e}, falling back to ${Ri}`), e = Ri), Hi !== e && (Hi = e, Oy(e), Jy(), e !== Ri && !Aa && ky().then(() => { + Array.from(Kd).forEach((t) => { var n; try { t(e); @@ -2352,7 +2352,7 @@ const Wg = (e) => { (n = console.debug) == null || n.call(console, i); } }); - }), Array.from(Bd).forEach((t) => { + }), Array.from(Kd).forEach((t) => { var n; try { t(e); @@ -2361,7 +2361,7 @@ const Wg = (e) => { } })); }, Wa = (e) => { - Oy(!!e); + Fy(!!e); }, Ty = (e) => { var t, n; try { @@ -2376,7 +2376,7 @@ const Wg = (e) => { const o = Ag(e); for (const r of o) { const l = ta(r); - if (En[l] && l !== Ei) { + if (Hn[l] && l !== Hi) { _i(l); return; } @@ -2390,27 +2390,27 @@ const Wg = (e) => { } catch (i) { (n = console.debug) == null || n.call(console, i); } -}, By = () => Ei, Uy = () => Object.keys(En).map((e) => ({ +}, Ky = () => Hi, By = () => Object.keys(Hn).map((e) => ({ code: e, - name: ky[e] || e + name: Xy[e] || e })), m = (e, t, n) => { var a, c; - const i = En[Ei] || En[Ri], o = En[Ri]; + const i = Hn[Hi] || Hn[Ri], o = Hn[Ri]; let r = i[e] || o[e]; if (!r) { - const s = `${Ei}:${String(e || "")}`; - if (!Nr.has(s)) { - if (Nr.size >= Ud) { - const d = Math.floor(Ud * 0.2), u = Nr.values(); + const s = `${Hi}:${String(e || "")}`; + if (!kr.has(s)) { + if (kr.size >= Bd) { + const d = Math.floor(Bd * 0.2), u = kr.values(); for (let I = 0; I < d; I++) { - const y = u.next().value; - y && Nr.delete(y); + const A = u.next().value; + A && kr.delete(A); } } - Nr.add(s); + kr.add(s); try { console.warn( - `[Majoor i18n] Missing translation key "${e}" for locale "${Ei}"` + `[Majoor i18n] Missing translation key "${e}" for locale "${Hi}"` ); } catch (d) { (a = console.debug) == null || a.call(console, d); @@ -2418,7 +2418,7 @@ const Wg = (e) => { try { typeof window < "u" && typeof window.dispatchEvent == "function" && window.dispatchEvent( new CustomEvent("mjr-i18n-missing-key", { - detail: { key: String(e || ""), locale: Ei } + detail: { key: String(e || ""), locale: Hi } }) ); } catch (d) { @@ -2431,12 +2431,12 @@ const Wg = (e) => { return l && typeof l == "object" && Object.entries(l).forEach(([s, d]) => { r = r.replaceAll(`{${s}}`, String(d)); }), r; -}, wg = "mjr_toast_history_v1", Mg = "mjr_toast_history_last_read_v1", Dd = 60, Sg = "mjr:toast-history-changed"; +}, wg = "mjr_toast_history_v1", Mg = "mjr_toast_history_last_read_v1", Dd = 60, Gg = "mjr:toast-history-changed"; let bi = null; function ri(e) { return String(e || "").trim(); } -function Ky(e) { +function Uy(e) { const t = ri(e).toLowerCase(); return t === "warn" ? "warning" : t === "danger" ? "error" : t || "info"; } @@ -2444,35 +2444,35 @@ function Dy(e) { const t = Number(e); return Number.isFinite(t) ? t : null; } -function Ey(e) { +function Hy(e) { if (!e || typeof e != "object") return null; - const t = Number(e.percent), n = Number.isFinite(t) ? Math.max(0, Math.min(100, Math.round(t))) : null, i = Number(e.current), o = Number(e.total), r = Number.isFinite(i) ? Math.max(0, Math.floor(i)) : null, l = Number.isFinite(o) ? Math.max(0, Math.floor(o)) : null, a = Number(e.indexed), c = Number(e.skipped), s = Number(e.errors), d = Number.isFinite(a) ? Math.max(0, Math.floor(a)) : null, u = Number.isFinite(c) ? Math.max(0, Math.floor(c)) : null, I = Number.isFinite(s) ? Math.max(0, Math.floor(s)) : null, y = ri(e.label); - return n === null && r === null && l === null && d === null && u === null && I === null && !y ? null : { + const t = Number(e.percent), n = Number.isFinite(t) ? Math.max(0, Math.min(100, Math.round(t))) : null, i = Number(e.current), o = Number(e.total), r = Number.isFinite(i) ? Math.max(0, Math.floor(i)) : null, l = Number.isFinite(o) ? Math.max(0, Math.floor(o)) : null, a = Number(e.indexed), c = Number(e.skipped), s = Number(e.errors), d = Number.isFinite(a) ? Math.max(0, Math.floor(a)) : null, u = Number.isFinite(c) ? Math.max(0, Math.floor(c)) : null, I = Number.isFinite(s) ? Math.max(0, Math.floor(s)) : null, A = ri(e.label); + return n === null && r === null && l === null && d === null && u === null && I === null && !A ? null : { percent: n, current: r, total: l, indexed: d, skipped: u, errors: I, - label: y + label: A }; } -function Hy(e, t, n) { +function Ey(e, t, n) { return e && t ? `${e}: ${t}` : t || e || n || ""; } function wa(e, t = "info", n = null) { if (!e || typeof e != "object") return null; const i = ri(e.title || e.summary), o = ri(e.detail), r = ri( - e.message || Hy(i, o, ri(e.fallbackMessage)) + e.message || Ey(i, o, ri(e.fallbackMessage)) ); if (!r) return null; const l = Dy(e.durationMs ?? e.duration ?? n), a = Number(e.createdAt), c = Number.isFinite(a) && a > 0 ? a : Date.now(), s = typeof e.persistent == "boolean" ? e.persistent : !(Number.isFinite(l) && l > 0); return { - id: ri(e.id) || Xs(`th-${c}-`, 4), + id: ri(e.id) || ks(`th-${c}-`, 4), message: r, title: i, detail: o, - type: Ky(e.type || t), + type: Uy(e.type || t), createdAt: c, durationMs: l, persistent: s, @@ -2480,13 +2480,13 @@ function wa(e, t = "info", n = null) { trackId: ri(e.trackId), status: ri(e.status), operation: ri(e.operation), - progress: Ey(e.progress), + progress: Hy(e.progress), forceStore: !!e.forceStore, actionLabel: ri(e.actionLabel), actionUrl: ri(e.actionUrl) }; } -function qa() { +function Pa() { if (bi === null) try { const e = localStorage.getItem(wg), t = e ? JSON.parse(e) : []; @@ -2499,7 +2499,7 @@ function qa() { bi = []; } } -function Gg() { +function Sg() { try { localStorage.setItem(wg, JSON.stringify(bi)); } catch { @@ -2507,7 +2507,7 @@ function Gg() { } function Fs() { try { - window.dispatchEvent(new CustomEvent(Sg)); + window.dispatchEvent(new CustomEvent(Gg)); } catch { } } @@ -2525,7 +2525,7 @@ function xg(e) { } } function jg(e, t, n) { - qa(); + Pa(); const i = wa(e && typeof e == "object" ? e : { message: ri(e), type: t, @@ -2543,13 +2543,13 @@ function jg(e, t, n) { bi.splice(r, 1), i.id = String(l.id || i.id || "").trim() || i.id; } } - bi.unshift(i), bi.length > Dd && (bi = bi.slice(0, Dd)), Gg(), Fs(); + bi.unshift(i), bi.length > Dd && (bi = bi.slice(0, Dd)), Sg(), Fs(); } function Py() { - return qa(), bi.map((e) => ({ ...e })); + return Pa(), bi.map((e) => ({ ...e })); } function Qy() { - qa(); + Pa(); const e = qy(); return bi.filter((t) => t.createdAt > e).length; } @@ -2557,13 +2557,13 @@ function _y() { xg(Date.now()), Fs(); } function $y() { - qa(), bi = [], Gg(), xg(Date.now()), Fs(); + Pa(), bi = [], Sg(), xg(Date.now()), Fs(); } function ef(e) { const t = String(e || "info").trim().toLowerCase(); return t === "warn" ? "warning" : t === "danger" ? "error" : t === "success" || t === "warning" || t === "error" ? t : "info"; } -function Kc(e) { +function Dc(e) { if (typeof e == "string") return e; if (e && typeof e == "object") { const t = String(e.summary || "").trim(), n = String(e.detail || e.message || "").trim(); @@ -2591,7 +2591,7 @@ function vg(e, t, n, i) { actionLabel: String((o == null ? void 0 : o.actionLabel) || "").trim(), actionUrl: String((o == null ? void 0 : o.actionUrl) || "").trim() }; - return e && typeof e == "object" ? (r.title = String((o == null ? void 0 : o.title) || e.summary || "").trim(), r.detail = String((o == null ? void 0 : o.detail) || e.detail || e.message || "").trim(), r.message = Kc(e), r) : (r.title = String((o == null ? void 0 : o.title) || "").trim(), r.detail = String((o == null ? void 0 : o.detail) || "").trim(), r.message = Kc(e), r); + return e && typeof e == "object" ? (r.title = String((o == null ? void 0 : o.title) || e.summary || "").trim(), r.detail = String((o == null ? void 0 : o.detail) || e.detail || e.message || "").trim(), r.message = Dc(e), r) : (r.title = String((o == null ? void 0 : o.title) || "").trim(), r.detail = String((o == null ? void 0 : o.detail) || "").trim(), r.message = Dc(e), r); } function tl(e, t = "info", n, i) { try { @@ -2846,7 +2846,7 @@ function nf(e) { } return t; } -function Ze(e, t = "info", n, i) { +function Ae(e, t = "info", n, i) { var l, a; if (t = ef(t), e = nf(e), n == null && (n = tf(t)), !(i != null && i.noHistory)) try { @@ -2855,7 +2855,7 @@ function Ze(e, t = "info", n, i) { } const o = !(Number.isFinite(Number(n)) && Number(n) > 0), r = Qn(); try { - const c = Sy(r); + const c = Gy(r); if (c && typeof c.add == "function") { let s = t; s === "warning" && (s = "warn"); @@ -2865,8 +2865,8 @@ function Ze(e, t = "info", n, i) { else if (typeof e != "string") try { u = e.message || String(e); - } catch (y) { - (l = console.debug) == null || l.call(console, y); + } catch (A) { + (l = console.debug) == null || l.call(console, A); } const I = { severity: s, summary: d, detail: u }; o || (I.life = n), c.add(I); @@ -2883,26 +2883,26 @@ function Ze(e, t = "info", n, i) { } console.warn("[Majoor Toast] Native toast API unavailable", { type: t, - message: Kc(e), + message: Dc(e), duration: o ? 0 : n }); } -const of = 2e3, rf = 15e3, lf = 8e3, Dc = "__mjr_write_token", dr = "token"; -let Vl = null, ml = null, Ed = null; -const Fo = Wr({ ttlMs: of, maxSize: 1 }); +const of = 2e3, rf = 15e3, lf = 8e3, Hc = "__mjr_write_token", dr = "token"; +let Yl = null, ml = null, Hd = null; +const Oo = Wr({ ttlMs: of, maxSize: 1 }); function af() { var e; try { - return String(((e = sessionStorage == null ? void 0 : sessionStorage.getItem) == null ? void 0 : e.call(sessionStorage, Dc)) || "").trim(); + return String(((e = sessionStorage == null ? void 0 : sessionStorage.getItem) == null ? void 0 : e.call(sessionStorage, Hc)) || "").trim(); } catch { return ""; } } -function Os(e) { +function zs(e) { var n, i; const t = String(e || "").trim(); try { - return t ? (n = sessionStorage == null ? void 0 : sessionStorage.setItem) == null || n.call(sessionStorage, Dc, t) : (i = sessionStorage == null ? void 0 : sessionStorage.removeItem) == null || i.call(sessionStorage, Dc), !0; + return t ? (n = sessionStorage == null ? void 0 : sessionStorage.setItem) == null || n.call(sessionStorage, Hc, t) : (i = sessionStorage == null ? void 0 : sessionStorage.removeItem) == null || i.call(sessionStorage, Hc), !0; } catch { return !1; } @@ -2910,36 +2910,36 @@ function Os(e) { function Lg() { var e, t, n; try { - const i = (e = localStorage == null ? void 0 : localStorage.getItem) == null ? void 0 : e.call(localStorage, Oi), o = i ? JSON.parse(i) : {}, r = o && typeof o == "object" ? o : {}, l = r != null && r.data && typeof r.data == "object" ? r.data : r; - l != null && l.security && typeof l.security == "object" && String(l.security.apiToken || "").trim() && (l.security.apiToken = "", (t = localStorage == null ? void 0 : localStorage.setItem) == null || t.call(localStorage, Oi, JSON.stringify(r))); + const i = (e = localStorage == null ? void 0 : localStorage.getItem) == null ? void 0 : e.call(localStorage, Fi), o = i ? JSON.parse(i) : {}, r = o && typeof o == "object" ? o : {}, l = r != null && r.data && typeof r.data == "object" ? r.data : r; + l != null && l.security && typeof l.security == "object" && String(l.security.apiToken || "").trim() && (l.security.apiToken = "", (t = localStorage == null ? void 0 : localStorage.setItem) == null || t.call(localStorage, Fi, JSON.stringify(r))); } catch (i) { (n = console.debug) == null || n.call(console, i); } } -function Hd() { +function Ed() { var e; try { - Fo.delete(dr); + Oo.delete(dr); } catch (t) { (e = console.debug) == null || e.call(console, t); } - Os(""), Lg(); + zs(""), Lg(); } function Ec() { var i, o, r, l, a; - const e = Fo.get(dr); + const e = Oo.get(dr); if (e !== void 0) return e; const t = Date.now(), n = af(); if (n) - return Fo.set(dr, n, { at: t }), n; + return Oo.set(dr, n, { at: t }), n; try { - const c = (i = localStorage == null ? void 0 : localStorage.getItem) == null ? void 0 : i.call(localStorage, Oi), s = c ? JSON.parse(c) : null, d = s != null && s.data && typeof s.data == "object" ? s.data : s, u = String(((o = d == null ? void 0 : d.security) == null ? void 0 : o.apiToken) || "").trim(); + const c = (i = localStorage == null ? void 0 : localStorage.getItem) == null ? void 0 : i.call(localStorage, Fi), s = c ? JSON.parse(c) : null, d = s != null && s.data && typeof s.data == "object" ? s.data : s, u = String(((o = d == null ? void 0 : d.security) == null ? void 0 : o.apiToken) || "").trim(); if (u) { - Os(u); + zs(u); try { - const I = s && typeof s == "object" ? s : {}, y = I != null && I.data && typeof I.data == "object" ? I.data : I; - y != null && y.security && typeof y.security == "object" && (y.security.apiToken = "", (r = localStorage == null ? void 0 : localStorage.setItem) == null || r.call(localStorage, Oi, JSON.stringify(I)), (l = window == null ? void 0 : window.dispatchEvent) == null || l.call( + const I = s && typeof s == "object" ? s : {}, A = I != null && I.data && typeof I.data == "object" ? I.data : I; + A != null && A.security && typeof A.security == "object" && (A.security.apiToken = "", (r = localStorage == null ? void 0 : localStorage.setItem) == null || r.call(localStorage, Fi, JSON.stringify(I)), (l = window == null ? void 0 : window.dispatchEvent) == null || l.call( window, new CustomEvent("mjr-settings-changed", { detail: { key: "security.apiToken" } @@ -2949,17 +2949,17 @@ function Ec() { (a = console.debug) == null || a.call(console, I); } } - return Fo.set(dr, u, { at: t }), u; + return Oo.set(dr, u, { at: t }), u; } catch { - return Fo.set(dr, "", { at: t }), ""; + return Oo.set(dr, "", { at: t }), ""; } } -function Vg(e) { +function Yg(e) { var n, i; const t = String(e || "").trim(); if (!t) return !1; try { - Fo.set(dr, t), ml = null, Os(t), Lg(); + Oo.set(dr, t), ml = null, zs(t), Lg(); try { (n = window == null ? void 0 : window.dispatchEvent) == null || n.call( window, @@ -2977,9 +2977,9 @@ const cf = /^[A-Za-z0-9._\-~+/]+=*$/; function qd(e) { var n; const t = String(e || "").trim(); - return t ? cf.test(t) ? Vg(t) : ((n = console.debug) == null || n.call(console, "[MJR auth] Rejected malformed security token (invalid characters)"), !1) : !1; + return t ? cf.test(t) ? Yg(t) : ((n = console.debug) == null || n.call(console, "[MJR auth] Rejected malformed security token (invalid characters)"), !1) : !1; } -function Yl(e = {}) { +function Vl(e = {}) { const t = String((e == null ? void 0 : e.code) || "").trim().toUpperCase(), n = String((e == null ? void 0 : e.error) || "").trim(), i = Number((e == null ? void 0 : e.status) || 0) || 0; ml = { code: t, @@ -2988,14 +2988,14 @@ function Yl(e = {}) { at: Date.now() }; } -function Yg() { +function Vg() { const e = ml; if (!e) return null; const t = Date.now() - (Number(e.at || 0) || 0); return t < 0 || t > rf ? (ml = null, null) : e; } function sf(e) { - const t = Yg(), n = String((e == null ? void 0 : e.code) || "").trim().toUpperCase(), i = String((e == null ? void 0 : e.error) || "").trim(), o = String((t == null ? void 0 : t.code) || "").trim().toUpperCase(), r = String((t == null ? void 0 : t.error) || "").trim().toLowerCase(), l = i.toLowerCase(); + const t = Vg(), n = String((e == null ? void 0 : e.code) || "").trim().toUpperCase(), i = String((e == null ? void 0 : e.error) || "").trim(), o = String((t == null ? void 0 : t.code) || "").trim().toUpperCase(), r = String((t == null ? void 0 : t.error) || "").trim().toLowerCase(), l = i.toLowerCase(); return o === "FORBIDDEN" && (r.includes("already configured") || r.includes("rotate-token")) ? m( "toast.writeAuthConfiguredTokenRequired", "Write access requires the Majoor API token already configured on the server. Open Settings -> Security -> API Token and enter the matching token." @@ -3011,11 +3011,11 @@ function df(e) { var o; const t = String(e || "").trim(); if (!t) return; - const n = Date.now(), i = Ed; + const n = Date.now(), i = Hd; if (!(i && i.message === t && n - (Number(i.at || 0) || 0) < lf)) { - Ed = { message: t, at: n }; + Hd = { message: t, at: n }; try { - Ze( + Ae( { summary: m("toast.writeAuthTitle", "Majoor remote write access"), detail: t @@ -3048,7 +3048,7 @@ async function mf() { body: "{}" }); if (!(t.headers.get("content-type") || "").includes("application/json")) - return Yl({ + return Vl({ code: "INVALID_RESPONSE", error: `Bootstrap token request returned non-JSON response (${t.status})`, status: t.status @@ -3058,21 +3058,21 @@ async function mf() { return (l = console.debug) == null || l.call(console, "[MJR auth] JSON parse error:", r), null; }); if (!i || typeof i != "object") - return Yl({ + return Vl({ code: "INVALID_RESPONSE", error: "Bootstrap token response was invalid.", status: t.status }), { ok: !1, token: !1 }; if (!i.ok) - return Yl({ + return Vl({ code: i == null ? void 0 : i.code, error: i == null ? void 0 : i.error, status: t.status }), { ok: !1, token: !1 }; const o = String(((e = i == null ? void 0 : i.data) == null ? void 0 : e.token) || "").trim(); - return o ? { ok: Vg(o), token: !0 } : (ml = null, { ok: !0, token: !1 }); + return o ? { ok: Yg(o), token: !0 } : (ml = null, { ok: !0, token: !1 }); } catch (t) { - return Yl({ + return Vl({ code: "NETWORK_ERROR", error: (t == null ? void 0 : t.message) || "Bootstrap token request failed.", status: 0 @@ -3084,104 +3084,104 @@ async function gf({ force: e = !1, allowCookieRefresh: t = !1 } = {}) { const n = Ec(); if (n && !e) return n; let i = { ok: !1, token: !1 }; - Vl || (Vl = (async () => { + Yl || (Yl = (async () => { try { return await mf(); } finally { - Vl = null; + Yl = null; } })()); try { - i = await Vl || i; + i = await Yl || i; } catch (l) { (r = console.debug) == null || r.call(console, l); } if (e && (i != null && i.ok) && !(i != null && i.token) && n) - Hd(); + Ed(); else if (e && !(i != null && i.ok)) { - const l = Yg(), a = String((l == null ? void 0 : l.code) || "").trim().toUpperCase(); - (!a || !["NETWORK_ERROR", "INVALID_RESPONSE"].includes(a)) && Hd(); + const l = Vg(), a = String((l == null ? void 0 : l.code) || "").trim().toUpperCase(); + (!a || !["NETWORK_ERROR", "INVALID_RESPONSE"].includes(a)) && Ed(); } const o = Ec(); return !o && t && (i != null && i.ok) ? !0 : o; } function Pd() { - Fo.clear(); + Oo.clear(); } async function If(e) { - return !e || typeof e != "string" ? { ok: !1, error: "Missing mode", code: "INVALID_INPUT" } : Et("/mjr/am/settings/probe-backend", { mode: e }); + return !e || typeof e != "string" ? { ok: !1, error: "Missing mode", code: "INVALID_INPUT" } : Dt("/mjr/am/settings/probe-backend", { mode: e }); } async function bf() { - return Ft(ct.SETTINGS_METADATA_FALLBACK); + return Ft(st.SETTINGS_METADATA_FALLBACK); } async function Qd({ image: e, media: t } = {}) { - return Et(ct.SETTINGS_METADATA_FALLBACK, { image: e, media: t }); + return Dt(st.SETTINGS_METADATA_FALLBACK, { image: e, media: t }); } async function pf() { - return Ft(ct.SETTINGS_VECTOR_SEARCH); + return Ft(st.SETTINGS_VECTOR_SEARCH); } async function yf(e = !0) { - return Et(ct.SETTINGS_VECTOR_SEARCH, { enabled: !!e }); + return Dt(st.SETTINGS_VECTOR_SEARCH, { enabled: !!e }); } async function ff() { - return Ft(ct.SETTINGS_EXECUTION_GROUPING); + return Ft(st.SETTINGS_EXECUTION_GROUPING); } -async function hf(e = !0) { - return Et(ct.SETTINGS_EXECUTION_GROUPING, { enabled: !!e }); +async function Cf(e = !0) { + return Dt(st.SETTINGS_EXECUTION_GROUPING, { enabled: !!e }); } -async function Cf() { - return Ft(ct.SETTINGS_HUGGINGFACE); +async function hf() { + return Ft(st.SETTINGS_HUGGINGFACE); } async function Zf(e = "") { - return Et(ct.SETTINGS_HUGGINGFACE, { token: String(e ?? "").trim() }); + return Dt(st.SETTINGS_HUGGINGFACE, { token: String(e ?? "").trim() }); } async function Af() { - return Ft(ct.SETTINGS_AI_LOGGING); + return Ft(st.SETTINGS_AI_LOGGING); } async function Wf(e = !1) { - return Et(ct.SETTINGS_AI_LOGGING, { enabled: !!e }); + return Dt(st.SETTINGS_AI_LOGGING, { enabled: !!e }); } async function wf() { - return Ft(ct.SETTINGS_ROUTE_LOGGING); + return Ft(st.SETTINGS_ROUTE_LOGGING); } async function Mf(e = !1) { - return Et(ct.SETTINGS_ROUTE_LOGGING, { enabled: !!e }); + return Dt(st.SETTINGS_ROUTE_LOGGING, { enabled: !!e }); } -async function Sf() { - return Ft(ct.SETTINGS_STARTUP_LOGGING); +async function Gf() { + return Ft(st.SETTINGS_STARTUP_LOGGING); } -async function Gf(e = !1) { - return Et(ct.SETTINGS_STARTUP_LOGGING, { enabled: !!e }); +async function Sf(e = !1) { + return Dt(st.SETTINGS_STARTUP_LOGGING, { enabled: !!e }); } async function xf() { - return Ft(ct.SETTINGS_LTXAV_RGB_FALLBACK); + return Ft(st.SETTINGS_LTXAV_RGB_FALLBACK); } async function jf(e = !1) { - return Et(ct.SETTINGS_LTXAV_RGB_FALLBACK, { enabled: !!e }); + return Dt(st.SETTINGS_LTXAV_RGB_FALLBACK, { enabled: !!e }); } async function vf() { - return Ft(ct.SETTINGS_OUTPUT_DIRECTORY); + return Ft(st.SETTINGS_OUTPUT_DIRECTORY); } async function Lf(e, t = {}) { const n = String(e ?? "").trim(); - return Et(ct.SETTINGS_OUTPUT_DIRECTORY, { output_directory: n }, t); + return Dt(st.SETTINGS_OUTPUT_DIRECTORY, { output_directory: n }, t); } -async function Vf() { - return Ft(ct.SETTINGS_INDEX_DIRECTORY); +async function Yf() { + return Ft(st.SETTINGS_INDEX_DIRECTORY); } -async function Yf(e, t = {}) { +async function Vf(e, t = {}) { const n = String(e ?? "").trim(); - return Et(ct.SETTINGS_INDEX_DIRECTORY, { index_directory: n }, t); + return Dt(st.SETTINGS_INDEX_DIRECTORY, { index_directory: n }, t); } -async function kg() { +async function Xg() { return Ft("/mjr/am/settings/security"); } -async function Xg(e) { - return Et("/mjr/am/settings/security", e && typeof e == "object" ? e : {}); +async function Ng(e) { + return Dt("/mjr/am/settings/security", e && typeof e == "object" ? e : {}); } -async function kf() { +async function Xf() { var t, n; - const e = await Et("/mjr/am/settings/security/bootstrap-token", {}); + const e = await Dt("/mjr/am/settings/security/bootstrap-token", {}); if (e != null && e.ok) try { const i = String(((t = e == null ? void 0 : e.data) == null ? void 0 : t.token) || "").trim(); @@ -3191,22 +3191,22 @@ async function kf() { } return e; } -async function zs(e) { +async function Js(e) { var t; if (e && typeof e == "object") { const n = String( e.filepath || e.path || ((t = e == null ? void 0 : e.file_info) == null ? void 0 : t.filepath) || "" ).trim(); - return e.id != null ? Et("/mjr/am/open-in-folder", { asset_id: fi(e.id) }) : Et("/mjr/am/open-in-folder", { filepath: n }); + return e.id != null ? Dt("/mjr/am/open-in-folder", { asset_id: fi(e.id) }) : Dt("/mjr/am/open-in-folder", { filepath: n }); } - return Et("/mjr/am/open-in-folder", { asset_id: fi(e) }); + return Dt("/mjr/am/open-in-folder", { asset_id: fi(e) }); } -async function Hr({ op: e = "", path: t = "", name: n = "", destination: i = "", recursive: o = !0 } = {}, r = {}) { +async function Er({ op: e = "", path: t = "", name: n = "", destination: i = "", recursive: o = !0 } = {}, r = {}) { const l = { op: String(e || "").trim().toLowerCase(), path: String(t || "").trim() }; - return n != null && String(n).trim() && (l.name = String(n).trim()), i != null && String(i).trim() && (l.destination = String(i).trim()), l.op === "delete" && (l.recursive = !!o), Et(ct.BROWSER_FOLDER_OP, l, r); + return n != null && String(n).trim() && (l.name = String(n).trim()), i != null && String(i).trim() && (l.destination = String(i).trim()), l.op === "delete" && (l.recursive = !!o), Dt(st.BROWSER_FOLDER_OP, l, r); } async function _d(e = {}) { const t = (r, l) => r == null ? l : !!r, n = String(e.scope || "output").trim().toLowerCase() || "output", i = e.customRootId ?? e.custom_root_id ?? e.rootId ?? e.root_id ?? e.customRoot ?? null, o = { @@ -3237,59 +3237,59 @@ async function _d(e = {}) { background_metadata: t(e.backgroundMetadata ?? e.background_metadata, !0), maintenance_force: t(e.maintenanceForce ?? e.maintenance_force, !1) }; - return i && (o.custom_root_id = String(i)), Et(ct.INDEX_RESET, o); + return i && (o.custom_root_id = String(i)), Dt(st.INDEX_RESET, o); } -async function Xf({ scope: e = "output", customRootId: t = "" } = {}) { +async function Nf({ scope: e = "output", customRootId: t = "" } = {}) { const n = String(e || "output").trim().toLowerCase() || "output", i = String(t || "").trim(), o = { scope: n }; - return i && (o.custom_root_id = i), Et(ct.WATCHER_SCOPE, o); + return i && (o.custom_root_id = i), Dt(st.WATCHER_SCOPE, o); } -async function Ng(e = {}) { - return Ft(ct.WATCHER_STATUS, e); +async function kg(e = {}) { + return Ft(st.WATCHER_STATUS, e); } async function Ma(e = !0) { - return Et(ct.WATCHER_TOGGLE, { enabled: !!e }); + return Dt(st.WATCHER_TOGGLE, { enabled: !!e }); } -async function Nf() { - return Ft(ct.WATCHER_SETTINGS); +async function kf() { + return Ft(st.WATCHER_SETTINGS); } async function $d(e = {}) { - return Et(ct.WATCHER_SETTINGS, e); + return Dt(st.WATCHER_SETTINGS, e); } async function Rf(e = {}) { - return Ft(ct.TOOLS_STATUS, e); + return Ft(st.TOOLS_STATUS, e); } -async function Ff(e = {}) { - return Ft(ct.STATUS, e); +async function Of(e = {}) { + return Ft(st.STATUS, e); } -async function Of() { - return Et("/mjr/am/db/force-delete", {}); +async function Ff() { + return Dt("/mjr/am/db/force-delete", {}); } async function zf(e = {}) { - return Ft(ct.DB_BACKUPS, e); + return Ft(st.DB_BACKUPS, e); } async function Jf() { - return Et(ct.DB_BACKUP_SAVE, {}); + return Dt(st.DB_BACKUP_SAVE, {}); } async function Tf({ name: e = "", useLatest: t = !1 } = {}) { const n = {}; - return e && (n.name = String(e)), t && (n.use_latest = !0), Et(ct.DB_BACKUP_RESTORE, n); + return e && (n.name = String(e)), t && (n.use_latest = !0), Dt(st.DB_BACKUP_RESTORE, n); } -async function Bf(e = 250) { - return Et("/mjr/am/duplicates/analyze", { +async function Kf(e = 250) { + return Dt("/mjr/am/duplicates/analyze", { limit: Math.max(10, Math.min(5e3, Number(e) || 250)) }); } -async function Uf({ scope: e = "output", customRootId: t = "", maxGroups: n = 6, maxPairs: i = 10 } = {}, o = {}) { +async function Bf({ scope: e = "output", customRootId: t = "", maxGroups: n = 6, maxPairs: i = 10 } = {}, o = {}) { let r = `/mjr/am/duplicates/alerts?scope=${encodeURIComponent(String(e || "output"))}`; return t && (r += `&custom_root_id=${encodeURIComponent(String(t))}`), r += `&max_groups=${encodeURIComponent(String(Math.max(1, Number(n) || 6)))}`, r += `&max_pairs=${encodeURIComponent(String(Math.max(1, Number(i) || 10)))}`, Ft(r, o); } -async function Kf(e, t = []) { - return Et("/mjr/am/duplicates/merge-tags", { +async function Uf(e, t = []) { + return Dt("/mjr/am/duplicates/merge-tags", { keep_asset_id: Number(e) || 0, merge_asset_ids: Array.isArray(t) ? t.map((n) => Number(n) || 0).filter((n) => n > 0) : [] }); } -async function Sa(e) { +async function Ga(e) { var o; let t, n; if (e && typeof e == "object") { @@ -3300,11 +3300,11 @@ async function Sa(e) { n = t ? { asset_id: t } : { filepath: r }; } else t = fi(e), n = { asset_id: t }; - const i = await Et("/mjr/am/asset/delete", n); + const i = await Dt("/mjr/am/asset/delete", n); return i != null && i.ok && t && Rg([t]), i; } async function Df(e) { - const t = Array.isArray(e) ? e.map((i) => fi(i)).filter(Boolean) : [], n = await Et("/mjr/am/assets/delete", { ids: t }); + const t = Array.isArray(e) ? e.map((i) => fi(i)).filter(Boolean) : [], n = await Dt("/mjr/am/assets/delete", { ids: t }); return n != null && n.ok && Rg(t), n; } function Rg(e) { @@ -3319,14 +3319,14 @@ function Rg(e) { (t = console.debug) == null || t.call(console, n); } } -async function Js(e, t) { +async function Ts(e, t) { var o, r, l; let n; if (e && typeof e == "object") { n = fi(e.id); const a = String( e.filepath || e.path || ((o = e == null ? void 0 : e.file_info) == null ? void 0 : o.filepath) || "" - ).trim(), c = n ? await Et("/mjr/am/asset/rename", { asset_id: n, new_name: t }) : await Et("/mjr/am/asset/rename", { filepath: a, new_name: t }); + ).trim(), c = n ? await Dt("/mjr/am/asset/rename", { asset_id: n, new_name: t }) : await Dt("/mjr/am/asset/rename", { filepath: a, new_name: t }); if (c != null && c.ok && n) try { const s = await getAssetMetadata(n); @@ -3337,7 +3337,7 @@ async function Js(e, t) { return c; } n = fi(e); - const i = await Et("/mjr/am/asset/rename", { asset_id: n, new_name: t }); + const i = await Dt("/mjr/am/asset/rename", { asset_id: n, new_name: t }); if (i != null && i.ok && n) try { const a = await getAssetMetadata(n); @@ -3347,7 +3347,7 @@ async function Js(e, t) { } return i; } -async function Fg() { +async function Og() { const e = typeof AbortController < "u" ? new AbortController() : null; let t = null; try { @@ -3357,21 +3357,21 @@ async function Fg() { } } async function na(e) { - return Et("/mjr/am/collections", { name: String(e || "").trim() }); -} -async function Ef(e) { - const t = String(e || "").trim(); - return Et(`/mjr/am/collections/${encodeURIComponent(t)}/delete`, {}); -} -async function Ga(e, t) { - const n = String(e || "").trim(), i = Array.isArray(t) ? t : []; - return Et(`/mjr/am/collections/${encodeURIComponent(n)}/add`, { assets: i }); -} -async function Og(e, t) { - const n = String(e || "").trim(), i = Array.isArray(t) ? t : []; - return Et(`/mjr/am/collections/${encodeURIComponent(n)}/remove`, { filepaths: i }); + return Dt("/mjr/am/collections", { name: String(e || "").trim() }); } async function Hf(e) { + const t = String(e || "").trim(); + return Dt(`/mjr/am/collections/${encodeURIComponent(t)}/delete`, {}); +} +async function Sa(e, t) { + const n = String(e || "").trim(), i = Array.isArray(t) ? t : []; + return Dt(`/mjr/am/collections/${encodeURIComponent(n)}/add`, { assets: i }); +} +async function Fg(e, t) { + const n = String(e || "").trim(), i = Array.isArray(t) ? t : []; + return Dt(`/mjr/am/collections/${encodeURIComponent(n)}/remove`, { filepaths: i }); +} +async function Ef(e) { const t = String(e || "").trim(); return Ft(`/mjr/am/collections/${encodeURIComponent(t)}/assets`); } @@ -3379,8 +3379,8 @@ async function zg(e, t = 20) { const n = String(e || "").trim(); if (!n) return { ok: !1, error: "Empty query" }; const i = t && typeof t == "object" ? t : { topK: Number(t) }, o = Math.max(1, Math.min(200, Number((i == null ? void 0 : i.topK) ?? 20) || 20)), r = String((i == null ? void 0 : i.scope) || "").trim(), l = String((i == null ? void 0 : i.customRootId) || "").trim(); - let a = `${ct.VECTOR_SEARCH}?q=${encodeURIComponent(n)}&top_k=${o}`; - return r && (a += `&scope=${encodeURIComponent(r)}`), l && (a += `&custom_root_id=${encodeURIComponent(l)}`), a = Da(a, { + let a = `${st.VECTOR_SEARCH}?q=${encodeURIComponent(n)}&top_k=${o}`; + return r && (a += `&scope=${encodeURIComponent(r)}`), l && (a += `&custom_root_id=${encodeURIComponent(l)}`), a = Ha(a, { subfolder: (i == null ? void 0 : i.subfolder) ?? null, kind: (i == null ? void 0 : i.kind) ?? null, hasWorkflow: (i == null ? void 0 : i.hasWorkflow) ?? null, @@ -3400,28 +3400,28 @@ async function qf(e, t = 20) { const n = String(e || "").trim(); if (!n) return { ok: !1, error: "Missing asset ID" }; const i = t && typeof t == "object" ? t : { topK: Number(t) }, o = Math.max(1, Math.min(200, Number((i == null ? void 0 : i.topK) ?? 20) || 20)), r = String((i == null ? void 0 : i.scope) || "").trim(), l = String((i == null ? void 0 : i.customRootId) || "").trim(); - let a = `${ct.VECTOR_SIMILAR}/${encodeURIComponent(n)}?top_k=${o}`; + let a = `${st.VECTOR_SIMILAR}/${encodeURIComponent(n)}?top_k=${o}`; return r && (a += `&scope=${encodeURIComponent(r)}`), l && (a += `&custom_root_id=${encodeURIComponent(l)}`), Ft(a, { dedupeKey: `vec:${n}:${o}:${r}:${l}` }); } async function Pf(e) { const t = String(e || "").trim(); - return t ? Ft(`${ct.VECTOR_ALIGNMENT}/${encodeURIComponent(t)}`) : { ok: !1, error: "Missing asset ID" }; + return t ? Ft(`${st.VECTOR_ALIGNMENT}/${encodeURIComponent(t)}`) : { ok: !1, error: "Missing asset ID" }; } async function Jg(e) { const t = String(e || "").trim(); - return t ? Et(`${ct.VECTOR_INDEX}/${encodeURIComponent(t)}`, {}) : { ok: !1, error: "Missing asset ID" }; + return t ? Dt(`${st.VECTOR_INDEX}/${encodeURIComponent(t)}`, {}) : { ok: !1, error: "Missing asset ID" }; } async function xa() { - return Ft(ct.VECTOR_STATS); + return Ft(st.VECTOR_STATS); } async function Tg(e = 64, t = {}) { - var b, L, h; + var b, L, C; const n = Math.max(1, Math.min(200, e)), i = typeof (t == null ? void 0 : t.onProgress) == "function" ? t.onProgress : null, o = String((t == null ? void 0 : t.scope) || "").trim().toLowerCase(), r = String((t == null ? void 0 : t.customRootId) ?? (t == null ? void 0 : t.custom_root_id) ?? "").trim(); - let l = `${ct.VECTOR_BACKFILL}?batch_size=${n}&async=1`; + let l = `${st.VECTOR_BACKFILL}?batch_size=${n}&async=1`; o && (l += `&scope=${encodeURIComponent(o)}`), r && (l += `&custom_root_id=${encodeURIComponent(r)}`); - const a = await Et(l, {}, { timeoutMs: 3e4 }); + const a = await Dt(l, {}, { timeoutMs: 3e4 }); if (!(a != null && a.ok)) return a; const c = (a == null ? void 0 : a.data) || {}, s = String((c == null ? void 0 : c.status) || "").toLowerCase(), d = String((c == null ? void 0 : c.backfill_id) || "").trim(); try { @@ -3431,64 +3431,64 @@ async function Tg(e = 64, t = {}) { } if (!d || !["queued", "running", "pending"].includes(s)) return a; - const u = Number(t == null ? void 0 : t.pollIntervalMs), I = Number(t == null ? void 0 : t.pollTimeoutMs), y = Number.isFinite(u) ? Math.max(500, Math.min(1e4, Math.floor(u))) : nh, S = Number.isFinite(I) ? Math.max( + const u = Number(t == null ? void 0 : t.pollIntervalMs), I = Number(t == null ? void 0 : t.pollTimeoutMs), A = Number.isFinite(u) ? Math.max(500, Math.min(1e4, Math.floor(u))) : nC, h = Number.isFinite(I) ? Math.max( 1e4, - Math.min(oh, Math.floor(I)) - ) : ih, Z = Date.now(); - let C = null; - for (; Date.now() - Z < S; ) { - await gg(y); + Math.min(oC, Math.floor(I)) + ) : iC, S = Date.now(); + let W = null; + for (; Date.now() - S < h; ) { + await gg(A); const G = await Ft( - `${ct.VECTOR_BACKFILL_STATUS}?backfill_id=${encodeURIComponent(d)}`, + `${st.VECTOR_BACKFILL_STATUS}?backfill_id=${encodeURIComponent(d)}`, { timeoutMs: 3e4 } ); if (!(G != null && G.ok)) { - C = G; + W = G; continue; } - const W = (G == null ? void 0 : G.data) || {}, f = String((W == null ? void 0 : W.status) || "").toLowerCase(); - C = G; + const Z = (G == null ? void 0 : G.data) || {}, f = String((Z == null ? void 0 : Z.status) || "").toLowerCase(); + W = G; try { - i == null || i(W); + i == null || i(Z); } catch (X) { (L = console.debug) == null || L.call(console, X); } if (f === "succeeded") return { ok: !0, - data: (W == null ? void 0 : W.result) || {}, + data: (Z == null ? void 0 : Z.result) || {}, code: null, status: 200 }; if (f === "failed") return { ok: !1, - error: String((W == null ? void 0 : W.error) || "Vector backfill failed"), - code: String((W == null ? void 0 : W.code) || "DB_ERROR"), - data: W, + error: String((Z == null ? void 0 : Z.error) || "Vector backfill failed"), + code: String((Z == null ? void 0 : Z.code) || "DB_ERROR"), + data: Z, status: 500 }; } const g = await Ft( - `${ct.VECTOR_BACKFILL_STATUS}?backfill_id=${encodeURIComponent(d)}`, + `${st.VECTOR_BACKFILL_STATUS}?backfill_id=${encodeURIComponent(d)}`, { timeoutMs: 3e4 } - ), A = (g == null ? void 0 : g.data) || (C == null ? void 0 : C.data) || {}, p = String((A == null ? void 0 : A.status) || "").toLowerCase(); + ), y = (g == null ? void 0 : g.data) || (W == null ? void 0 : W.data) || {}, p = String((y == null ? void 0 : y.status) || "").toLowerCase(); if (g != null && g.ok && ["queued", "running", "pending"].includes(p)) { try { - i == null || i(A); + i == null || i(y); } catch (G) { - (h = console.debug) == null || h.call(console, G); + (C = console.debug) == null || C.call(console, G); } return { ok: !0, code: "PENDING", status: 202, data: { - ...A, + ...y, pending: !0, timed_out: !0, - poll_timeout_ms: S, - backfill_id: String((A == null ? void 0 : A.backfill_id) || d), + poll_timeout_ms: h, + backfill_id: String((y == null ? void 0 : y.backfill_id) || d), status: p || "running" }, meta: { pending: !0 } @@ -3496,21 +3496,21 @@ async function Tg(e = 64, t = {}) { } return g != null && g.ok && p === "failed" ? { ok: !1, - error: String((A == null ? void 0 : A.error) || "Vector backfill failed"), - code: String((A == null ? void 0 : A.code) || "DB_ERROR"), - data: A, + error: String((y == null ? void 0 : y.error) || "Vector backfill failed"), + code: String((y == null ? void 0 : y.code) || "DB_ERROR"), + data: y, status: 500 } : { ok: !1, - error: `Vector backfill polling timed out after ${S}ms`, + error: `Vector backfill polling timed out after ${h}ms`, code: "TIMEOUT", - data: A || null, + data: y || null, status: 408 }; } async function Qf(e) { const t = String(e || "").trim(); - return t ? Et(`${ct.VECTOR_CAPTION}/${encodeURIComponent(t)}`, {}) : { ok: !1, error: "Missing asset ID" }; + return t ? Dt(`${st.VECTOR_CAPTION}/${encodeURIComponent(t)}`, {}) : { ok: !1, error: "Missing asset ID" }; } async function _f(e, { topK: t = 50, @@ -3525,15 +3525,15 @@ async function _f(e, { minWidth: d = null, minHeight: u = null, maxWidth: I = null, - maxHeight: y = null, - workflowType: S = null, - dateRange: Z = null, - dateExact: C = null + maxHeight: A = null, + workflowType: h = null, + dateRange: S = null, + dateExact: W = null } = {}) { const g = String(e || "").trim(); if (!g) return { ok: !1, error: "Empty query" }; - let A = `${ct.HYBRID_SEARCH}?q=${encodeURIComponent(g)}&top_k=${Math.max(1, Math.min(200, t))}&scope=${encodeURIComponent(n)}`; - return i && (A += `&custom_root_id=${encodeURIComponent(i)}`), A = Da(A, { + let y = `${st.HYBRID_SEARCH}?q=${encodeURIComponent(g)}&top_k=${Math.max(1, Math.min(200, t))}&scope=${encodeURIComponent(n)}`; + return i && (y += `&custom_root_id=${encodeURIComponent(i)}`), y = Ha(y, { subfolder: o, kind: r, hasWorkflow: l, @@ -3543,30 +3543,30 @@ async function _f(e, { minWidth: d, minHeight: u, maxWidth: I, - maxHeight: y, - workflowType: S, - dateRange: Z, - dateExact: C - }), Ft(A, { timeoutMs: 12e4 }); + maxHeight: A, + workflowType: h, + dateRange: S, + dateExact: W + }), Ft(y, { timeoutMs: 12e4 }); } async function $f(e = 8) { - return Et(ct.VECTOR_SUGGEST_COLLECTIONS, { k: Math.max(2, Math.min(20, e)) }); + return Dt(st.VECTOR_SUGGEST_COLLECTIONS, { k: Math.max(2, Math.min(20, e)) }); } -const eh = 3e4, eu = eh, tu = "__MJR_API_CLIENT__", Bg = 2e3, th = 200, nh = 1e3, ih = 30 * 6e4, oh = 720 * 6e4, ho = "settings", nu = "available-tags", qr = Wr({ ttlMs: Bg, maxSize: 1 }), Pr = Wr({ ttlMs: Bg, maxSize: 1 }), Hc = Wr({ ttlMs: () => ch(), maxSize: 1 }), rh = /* @__PURE__ */ new Set(["1", "true", "yes", "on"]), lh = /* @__PURE__ */ new Set(["0", "false", "no", "off"]); -function ah(e, t = !1) { +const eC = 3e4, eu = eC, tu = "__MJR_API_CLIENT__", Kg = 2e3, tC = 200, nC = 1e3, iC = 30 * 6e4, oC = 720 * 6e4, Co = "settings", nu = "available-tags", qr = Wr({ ttlMs: Kg, maxSize: 1 }), Pr = Wr({ ttlMs: Kg, maxSize: 1 }), qc = Wr({ ttlMs: () => cC(), maxSize: 1 }), rC = /* @__PURE__ */ new Set(["1", "true", "yes", "on"]), lC = /* @__PURE__ */ new Set(["0", "false", "no", "off"]); +function aC(e, t = !1) { if (typeof e == "boolean") return e; if (typeof e == "number") return e !== 0; if (typeof e == "string") { const n = e.trim().toLowerCase(); - if (rh.has(n)) return !0; - if (lh.has(n)) return !1; + if (rC.has(n)) return !0; + if (lC.has(n)) return !1; } return !!t; } -function ch() { +function cC() { var e, t, n, i; try { - const o = ((e = localStorage == null ? void 0 : localStorage.getItem) == null ? void 0 : e.call(localStorage, Oi)) || "{}", r = JSON.parse(o), l = ((t = r == null ? void 0 : r.cache) == null ? void 0 : t.tagsTTLms) ?? ((n = r == null ? void 0 : r.cache) == null ? void 0 : n.tagsTTL) ?? ((i = r == null ? void 0 : r.cache) == null ? void 0 : i.tags_ttl_ms) ?? null, a = Number(l); + const o = ((e = localStorage == null ? void 0 : localStorage.getItem) == null ? void 0 : e.call(localStorage, Fi)) || "{}", r = JSON.parse(o), l = ((t = r == null ? void 0 : r.cache) == null ? void 0 : t.tagsTTLms) ?? ((n = r == null ? void 0 : r.cache) == null ? void 0 : n.tagsTTL) ?? ((i = r == null ? void 0 : r.cache) == null ? void 0 : i.tags_ttl_ms) ?? null, a = Number(l); return Number.isFinite(a) ? Math.max(1e3, Math.min(10 * 6e4, Math.floor(a))) : eu; } catch { return eu; @@ -3578,18 +3578,18 @@ function iu() { function ou() { Pr.clear(); } -function qc() { - Hc.clear(); +function Pc() { + qc.clear(); } -function sh(e) { +function sC(e) { return String(e ?? "").trim().toLowerCase() || ""; } -function dh(e) { +function dC(e) { const t = [], n = /* @__PURE__ */ new Set(); for (const i of Array.isArray(e) ? e : []) { const o = String(i ?? "").trim(); if (!o) continue; - const r = sh(o); + const r = sC(o); !r || n.has(r) || (n.add(r), t.push(o)); } return t; @@ -3600,64 +3600,64 @@ try { e && !e[tu] && (e[tu] = { initialized: !0 }, (tg = e.addEventListener) == null || tg.call(e, "storage", (t) => { var n; try { - (t == null ? void 0 : t.key) === Oi && (iu(), ou(), qc(), Pd()); + (t == null ? void 0 : t.key) === Fi && (iu(), ou(), Pc(), Pd()); } catch (i) { (n = console.debug) == null || n.call(console, i); } }), (ng = e.addEventListener) == null || ng.call(e, "mjr-settings-changed", () => { - iu(), ou(), qc(), Pd(); + iu(), ou(), Pc(), Pd(); })); } catch (e) { (ig = console.debug) == null || ig.call(console, e); } -const uh = () => { +const uC = () => { var n, i; - const e = qr.get(ho); + const e = qr.get(Co); if (e !== void 0) return e; const t = Date.now(); try { - const o = (n = localStorage == null ? void 0 : localStorage.getItem) == null ? void 0 : n.call(localStorage, Oi); + const o = (n = localStorage == null ? void 0 : localStorage.getItem) == null ? void 0 : n.call(localStorage, Fi); if (!o) - return qr.set(ho, !1, { at: t }), !1; + return qr.set(Co, !1, { at: t }), !1; const r = JSON.parse(o), l = !!((i = r == null ? void 0 : r.observability) != null && i.enabled); - return qr.set(ho, l, { at: t }), l; + return qr.set(Co, l, { at: t }), l; } catch { - return qr.set(ho, !1, { at: t }), !1; + return qr.set(Co, !1, { at: t }), !1; } -}, Ug = () => { +}, Bg = () => { var n, i; - const e = Pr.get(ho); + const e = Pr.get(Co); if (e !== void 0) return e; const t = Date.now(); try { - const o = (n = localStorage == null ? void 0 : localStorage.getItem) == null ? void 0 : n.call(localStorage, Oi); + const o = (n = localStorage == null ? void 0 : localStorage.getItem) == null ? void 0 : n.call(localStorage, Fi); if (!o) - return Pr.set(ho, !0, { at: t }), !0; - const r = JSON.parse(o), l = (i = r == null ? void 0 : r.ratingTagsSync) == null ? void 0 : i.enabled, a = l == null ? !0 : ah(l, !0); - return Pr.set(ho, a, { at: t }), a; + return Pr.set(Co, !0, { at: t }), !0; + const r = JSON.parse(o), l = (i = r == null ? void 0 : r.ratingTagsSync) == null ? void 0 : i.enabled, a = l == null ? !0 : aC(l, !0); + return Pr.set(Co, a, { at: t }), a; } catch { - return Pr.set(ho, !0, { at: t }), !0; + return Pr.set(Co, !0, { at: t }), !0; } -}, Ts = Ay({ - readObsEnabled: uh, +}, Ks = Ay({ + readObsEnabled: uC, readAuthToken: Ec, ensureWriteAuthToken: gf, normalizeWriteAuthFailure: uf -}), Kg = Ts.fetchAPI; +}), Ug = Ks.fetchAPI; async function Ft(e, t = {}) { - return Ts.get(e, t); + return Ks.get(e, t); } -async function Et(e, t, n = {}) { - return Ts.post(e, t, n); +async function Dt(e, t, n = {}) { + return Ks.post(e, t, n); } -async function Ho(e, t, n = {}) { +async function Eo(e, t, n = {}) { var c; - const i = Ug(), o = e && typeof e == "object" ? e : null, r = o ? o.id : e, l = fi(r), a = { + const i = Bg(), o = e && typeof e == "object" ? e : null, r = o ? o.id : e, l = fi(r), a = { rating: Math.max(0, Math.min(5, Number(t) || 0)) }; - return l ? a.asset_id = l : o && (a.filepath = o.filepath || o.path || ((c = o == null ? void 0 : o.file_info) == null ? void 0 : c.filepath) || "", a.type = o.type || "output", a.root_id = Mi(o)), Kg("/mjr/am/asset/rating", { + return l ? a.asset_id = l : o && (a.filepath = o.filepath || o.path || ((c = o == null ? void 0 : o.file_info) == null ? void 0 : c.filepath) || "", a.type = o.type || "output", a.root_id = Mi(o)), Ug("/mjr/am/asset/rating", { ...n, method: "POST", headers: { @@ -3667,13 +3667,13 @@ async function Ho(e, t, n = {}) { body: JSON.stringify(a) }); } -async function mh(e, t, n = {}) { +async function mC(e, t, n = {}) { var s; - const i = Ug(), o = e && typeof e == "object" ? e : null, r = o ? o.id : e, l = fi(r), a = { + const i = Bg(), o = e && typeof e == "object" ? e : null, r = o ? o.id : e, l = fi(r), a = { tags: Array.isArray(t) ? t : [] }; l ? a.asset_id = l : o && (a.filepath = o.filepath || o.path || ((s = o == null ? void 0 : o.file_info) == null ? void 0 : s.filepath) || "", a.type = o.type || "output", a.root_id = Mi(o)); - const c = await Kg("/mjr/am/asset/tags", { + const c = await Ug("/mjr/am/asset/tags", { ...n, method: "POST", headers: { @@ -3682,16 +3682,16 @@ async function mh(e, t, n = {}) { }, body: JSON.stringify(a) }); - return c != null && c.ok && qc(), c; + return c != null && c.ok && Pc(), c; } -async function gh() { - const e = Hc.get(nu); +async function gC() { + const e = qc.get(nu); if (Array.isArray(e)) return { ok: !0, data: e, error: null, code: "OK", meta: { cached: !0 } }; const t = await Ft("/mjr/am/tags"); if (t != null && t.ok && Array.isArray(t.data)) { - const n = dh(t.data); - return Hc.set(nu, n), { ...t, data: n }; + const n = dC(t.data); + return qc.set(nu, n), { ...t, data: n }; } return t; } @@ -3714,12 +3714,12 @@ async function Bs(e, t = {}) { const n = Array.isArray(e) ? e : [], i = []; for (const o of n) { const r = Number(o); - if (Number.isFinite(r) && (i.push(Math.trunc(r)), i.length >= th)) + if (Number.isFinite(r) && (i.push(Math.trunc(r)), i.length >= tC)) break; } - return i.length ? Et("/mjr/am/assets/batch", { asset_ids: i }, t) : { ok: !0, data: [], error: null, code: "OK" }; + return i.length ? Dt("/mjr/am/assets/batch", { asset_ids: i }, t) : { ok: !0, data: [], error: null, code: "OK" }; } -async function Eg({ +async function Hg({ type: e = "output", filename: t = "", subfolder: n = "", @@ -3732,7 +3732,7 @@ async function Eg({ let I = `/mjr/am/metadata?type=${encodeURIComponent(a)}&filename=${encodeURIComponent(c)}`; return u && (I += `&filepath=${encodeURIComponent(u)}`), s && (I += `&subfolder=${encodeURIComponent(s)}`), d && (I += `&root_id=${encodeURIComponent(d)}`), Ft(I, l); } -async function Ih({ filepath: e = "", root_id: t = "", subfolder: n = "" } = {}, i = {}) { +async function IC({ filepath: e = "", root_id: t = "", subfolder: n = "" } = {}, i = {}) { var d, u; try { if (globalThis.__mjrFolderInfoSupported === !1) @@ -3745,10 +3745,10 @@ async function Ih({ filepath: e = "", root_id: t = "", subfolder: n = "" } = {}, if (globalThis.__mjrFolderInfoSupported == null) { const I = await Ft("/mjr/am/routes"); if (I != null && I.ok && Array.isArray(I.data)) { - const y = I.data.some( - (S) => String((S == null ? void 0 : S.path) || "").trim() === "/mjr/am/folder-info" + const A = I.data.some( + (h) => String((h == null ? void 0 : h.path) || "").trim() === "/mjr/am/folder-info" ); - if (globalThis.__mjrFolderInfoSupported = !!y, !y) + if (globalThis.__mjrFolderInfoSupported = !!A, !A) return { ok: !1, data: null, @@ -3762,7 +3762,7 @@ async function Ih({ filepath: e = "", root_id: t = "", subfolder: n = "" } = {}, (d = console.debug) == null || d.call(console, I); } const o = String(e || "").trim(), r = String(t || "").trim(), l = String(n || "").trim(); - let a = ct.FOLDER_INFO; + let a = st.FOLDER_INFO; const c = []; o ? (c.push(`filepath=${encodeURIComponent(o)}`), c.push("browser_mode=1")) : (r && c.push(`root_id=${encodeURIComponent(r)}`), l && c.push(`subfolder=${encodeURIComponent(l)}`)), c.length && (a += `?${c.join("&")}`); const s = await Ft(a, i); @@ -3773,7 +3773,7 @@ async function Ih({ filepath: e = "", root_id: t = "", subfolder: n = "" } = {}, } return s; } -const Ge = Object.freeze({ +const Se = Object.freeze({ // Debug / diagnostics (opt-in) DEBUG_SAFE_CALL: !1, DEBUG_SAFE_LISTENERS: !1, @@ -3869,12 +3869,12 @@ const Ge = Object.freeze({ // UI safety knobs DELETE_CONFIRMATION: !0, DEBUG_VERBOSE_ERRORS: !1 -}), fe = { - ...Ge +}), he = { + ...Se }; function io(e, ...t) { try { - fe.DEBUG_VERBOSE_ERRORS && console.debug(e, ...t); + he.DEBUG_VERBOSE_ERRORS && console.debug(e, ...t); } catch { } } @@ -3882,19 +3882,19 @@ function ai(e, t = "Majoor", { showToast: n = !1, toastType: i = "error" } = {}) var r, l; const o = (e == null ? void 0 : e.message) || String(e || "Unknown error"); try { - fe.DEBUG_VERBOSE_ERRORS ? console.error(`[Majoor][${t}]`, o, e) : console.debug(`[Majoor][${t}]`, o); + he.DEBUG_VERBOSE_ERRORS ? console.error(`[Majoor][${t}]`, o, e) : console.debug(`[Majoor][${t}]`, o); } catch (a) { (r = console.debug) == null || r.call(console, a); } - if (n && fe.DEBUG_VERBOSE_ERRORS) + if (n && he.DEBUG_VERBOSE_ERRORS) try { - Ze(`${t}: ${o}`, i, 4e3); + Ae(`${t}: ${o}`, i, 4e3); } catch (a) { (l = console.debug) == null || l.call(console, a); } } -let ru = !1, co = null, lu = !1, sc = null; -function bh() { +let ru = !1, co = null, lu = !1, dc = null; +function bC() { var e; try { const t = window == null ? void 0 : window.__MJR_EXECUTION_RUNTIME__; @@ -3904,7 +3904,7 @@ function bh() { } } async function Il(e = {}) { - if (!fe || typeof fe != "object" || !fe.AUTO_SCAN_ON_STARTUP || ru) return; + if (!he || typeof he != "object" || !he.AUTO_SCAN_ON_STARTUP || ru) return; const t = Math.max(0, Number(e == null ? void 0 : e.delayMs) || 0), n = (e == null ? void 0 : e.idleOnly) !== !1; if (t > 0) { co && clearTimeout(co), co = setTimeout(() => { @@ -3912,7 +3912,7 @@ async function Il(e = {}) { }, t); return; } - if (n && !bh()) { + if (n && !bC()) { co && clearTimeout(co), co = setTimeout(() => { co = null, Il({ ...e, delayMs: 0 }); }, 5e3); @@ -3921,7 +3921,7 @@ async function Il(e = {}) { ru = !0; try { io("[Majoor] Starting startup scan of output directory..."); - const i = await Et(ct.SCAN, { + const i = await Dt(st.SCAN, { recursive: !0, incremental: !0, fast: !0, @@ -3938,36 +3938,36 @@ async function Il(e = {}) { console.error("📂 Majoor [❌]: Startup scan error:", i); } } -async function ph() { +async function pC() { var e; try { await Promise.allSettled([ - Ft(ct.HEALTH), - Ft(`${ct.HEALTH_COUNTERS}?scope=output`), - Ft(ct.HEALTH_DB) + Ft(st.HEALTH), + Ft(`${st.HEALTH_COUNTERS}?scope=output`), + Ft(st.HEALTH_DB) ]); } catch (t) { (e = console.debug) == null || e.call(console, t); } } -async function yh(e = {}) { - return lu ? sc || Promise.resolve() : (lu = !0, sc = (async () => { - await ph(), await Il(e); - })(), sc); +async function yC(e = {}) { + return lu ? dc || Promise.resolve() : (lu = !0, dc = (async () => { + await pC(), await Il(e); + })(), dc); } -async function fh() { +async function fC() { try { io("[Majoor] Testing API connection..."); - const e = await Ft(ct.HEALTH); + const e = await Ft(st.HEALTH); e != null && e.ok ? io("[Majoor] API connection successful, health:", e.data.overall) : console.error("📂 Majoor [❌]: API health check failed:", e == null ? void 0 : e.error); } catch (e) { console.error("📂 Majoor [❌]: Failed to connect to API:", e); } } -const hh = async (e, t = "Majoor", n = {}) => { +const CC = async (e, t = "Majoor", n = {}) => { var r, l, a; if ((n == null ? void 0 : n.native) !== !1) { - const c = Hg(); + const c = Eg(); if (c) try { c.show(qg(e, t)); @@ -3995,14 +3995,14 @@ const hh = async (e, t = "Majoor", n = {}) => { const s = new o(); vr(s); const d = () => { - var y; + var A; try { s.close(); - } catch (S) { - (y = console.debug) == null || y.call(console, S); + } catch (h) { + (A = console.debug) == null || A.call(console, h); } c(); - }, u = bn( + }, u = yn( "div", { style: { @@ -4013,7 +4013,7 @@ const hh = async (e, t = "Majoor", n = {}) => { } }, [ - bn( + yn( "div", { style: { @@ -4023,7 +4023,7 @@ const hh = async (e, t = "Majoor", n = {}) => { } }, [ - bn("div", { + yn("div", { textContent: t, style: { fontWeight: "700", @@ -4034,7 +4034,7 @@ const hh = async (e, t = "Majoor", n = {}) => { }) ] ), - bn("div", { + yn("div", { textContent: String(e || ""), style: { fontSize: "22px", @@ -4043,13 +4043,13 @@ const hh = async (e, t = "Majoor", n = {}) => { lineHeight: "1.45" } }), - bn( + yn( "div", { style: { display: "flex", justifyContent: "flex-end", gap: "10px" } }, [ - bn("button", { + yn("button", { textContent: m("dialog.confirm", "Confirm"), onclick: d, style: { @@ -4071,8 +4071,8 @@ const hh = async (e, t = "Majoor", n = {}) => { } catch { try { window.alert(e); - } catch (y) { - (I = console.debug) == null || I.call(console, y); + } catch (A) { + (I = console.debug) == null || I.call(console, A); } c(); } @@ -4108,7 +4108,7 @@ const hh = async (e, t = "Majoor", n = {}) => { (d = console.debug) == null || d.call(console, u); } r(!!s); - }, c = bn( + }, c = yn( "div", { style: { @@ -4119,7 +4119,7 @@ const hh = async (e, t = "Majoor", n = {}) => { } }, [ - bn( + yn( "div", { style: { @@ -4129,7 +4129,7 @@ const hh = async (e, t = "Majoor", n = {}) => { } }, [ - bn("div", { + yn("div", { textContent: t, style: { fontWeight: "700", @@ -4140,7 +4140,7 @@ const hh = async (e, t = "Majoor", n = {}) => { }) ] ), - bn("div", { + yn("div", { textContent: String(e || ""), style: { fontSize: "22px", @@ -4149,13 +4149,13 @@ const hh = async (e, t = "Majoor", n = {}) => { lineHeight: "1.45" } }), - bn( + yn( "div", { style: { display: "flex", justifyContent: "flex-end", gap: "10px" } }, [ - bn("button", { + yn("button", { textContent: m("dialog.cancel", "Cancel"), onclick: () => a(!1), style: { @@ -4168,7 +4168,7 @@ const hh = async (e, t = "Majoor", n = {}) => { cursor: "pointer" } }), - bn("button", { + yn("button", { textContent: m("dialog.confirm", "Confirm"), onclick: () => a(!0), style: { @@ -4195,7 +4195,7 @@ const hh = async (e, t = "Majoor", n = {}) => { } } }); -}, Ch = async (e, t = "Majoor", n = {}) => { +}, hC = async (e, t = "Majoor", n = {}) => { const i = String((n == null ? void 0 : n.yes) || m("dialog.yes", "Yes")), o = String((n == null ? void 0 : n.no) || m("dialog.no", "No")), r = String((n == null ? void 0 : n.cancel) || m("dialog.cancel", "Cancel")), l = jr(); if (!l) try { @@ -4218,11 +4218,11 @@ ${i}=y, ${o}=n, ${r}=c`, var I; try { c.close(); - } catch (y) { - (I = console.debug) == null || I.call(console, y); + } catch (A) { + (I = console.debug) == null || I.call(console, A); } a(u || "cancel"); - }, d = bn( + }, d = yn( "div", { style: { @@ -4236,7 +4236,7 @@ ${i}=y, ${o}=n, ${r}=c`, } }, [ - bn( + yn( "div", { style: { @@ -4246,7 +4246,7 @@ ${i}=y, ${o}=n, ${r}=c`, } }, [ - bn("div", { + yn("div", { textContent: t, style: { fontWeight: "700", @@ -4257,7 +4257,7 @@ ${i}=y, ${o}=n, ${r}=c`, }) ] ), - bn("div", { + yn("div", { textContent: String(e || ""), style: { fontSize: "22px", @@ -4266,7 +4266,7 @@ ${i}=y, ${o}=n, ${r}=c`, lineHeight: "1.45" } }), - bn( + yn( "div", { style: { @@ -4277,7 +4277,7 @@ ${i}=y, ${o}=n, ${r}=c`, } }, [ - bn("button", { + yn("button", { textContent: i, onclick: () => s("yes"), style: { @@ -4290,7 +4290,7 @@ ${i}=y, ${o}=n, ${r}=c`, cursor: "pointer" } }), - bn("button", { + yn("button", { textContent: o, onclick: () => s("no"), style: { @@ -4303,7 +4303,7 @@ ${i}=y, ${o}=n, ${r}=c`, cursor: "pointer" } }), - bn("button", { + yn("button", { textContent: r, onclick: () => s("cancel"), style: { @@ -4326,7 +4326,7 @@ ${i}=y, ${o}=n, ${r}=c`, a("cancel"); } }); -}, Zh = async (e, t = "Majoor", n = []) => { +}, ZC = async (e, t = "Majoor", n = []) => { const i = Array.isArray(n) ? n.filter((r) => r && typeof r == "object").map((r, l) => ({ id: String(r.id || `choice_${l}`), label: String(r.label || r.id || `Choice ${l + 1}`), @@ -4366,7 +4366,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`, r(d ?? null); }, c = (d) => { const u = d.variant === "danger", I = d.variant === "primary"; - return bn("button", { + return yn("button", { textContent: d.label, onclick: () => a(d.id), style: { @@ -4379,7 +4379,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`, cursor: "pointer" } }); - }, s = bn( + }, s = yn( "div", { style: { @@ -4393,7 +4393,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`, } }, [ - bn( + yn( "div", { style: { @@ -4403,7 +4403,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`, } }, [ - bn("div", { + yn("div", { textContent: t, style: { fontWeight: "700", @@ -4414,7 +4414,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`, }) ] ), - bn("div", { + yn("div", { textContent: String(e || ""), style: { fontSize: "22px", @@ -4423,7 +4423,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`, lineHeight: "1.45" } }), - bn( + yn( "div", { style: { @@ -4443,7 +4443,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`, r(null); } }); -}, Vi = async (e, t = "", n = "Majoor") => { +}, Yi = async (e, t = "", n = "Majoor") => { var r; const i = Us(); if (i) @@ -4471,11 +4471,11 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`, var I; try { a.close(); - } catch (y) { - (I = console.debug) == null || I.call(console, y); + } catch (A) { + (I = console.debug) == null || I.call(console, A); } l(u ?? null); - }, s = bn("input", { + }, s = yn("input", { type: "text", value: String(t ?? ""), style: { @@ -4491,7 +4491,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`, onkeydown: (u) => { u.key === "Enter" && c(s.value), u.key === "Escape" && c(null), u.stopPropagation(); } - }), d = bn( + }), d = yn( "div", { style: { @@ -4502,7 +4502,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`, } }, [ - bn("div", { + yn("div", { textContent: n, style: { fontWeight: "600", @@ -4510,7 +4510,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`, color: "rgba(255,255,255,0.95)" } }), - bn("div", { + yn("div", { textContent: String(e || ""), style: { fontSize: "13px", @@ -4520,13 +4520,13 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`, } }), s, - bn( + yn( "div", { style: { display: "flex", justifyContent: "flex-end", gap: "10px" } }, [ - bn("button", { + yn("button", { textContent: m("dialog.cancel", "Cancel"), onclick: () => c(null), style: { @@ -4538,7 +4538,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`, cursor: "pointer" } }), - bn("button", { + yn("button", { textContent: m("dialog.ok", "OK"), onclick: () => c(s.value), style: { @@ -4571,7 +4571,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`, } } }); -}, Pa = () => { +}, Qa = () => { try { const e = Qn(); return (e == null ? void 0 : e.ui) || null; @@ -4581,7 +4581,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`, }, Us = () => { var e, t, n; try { - const i = Qn(), o = Gy(i); + const i = Qn(), o = Sy(i); if (o && typeof o.confirm == "function" && typeof o.prompt == "function") return o; } catch (i) { @@ -4595,10 +4595,10 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`, (n = console.debug) == null || n.call(console, i); } return null; -}, Hg = () => { +}, Eg = () => { var e; try { - const t = Pa(); + const t = Qa(); if (t != null && t.dialog && typeof t.dialog.show == "function") return t.dialog; } catch (t) { @@ -4608,7 +4608,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`, }, qg = (e, t = "Majoor") => { const n = String(e ?? ""), i = String(t ?? "").trim(); return !i || i.toLowerCase() === "majoor" ? n : `${i}

${n}`; -}, Ah = /* @__PURE__ */ new Set([ +}, AC = /* @__PURE__ */ new Set([ "abort", "blur", "change", @@ -4648,7 +4648,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`, "transitionend", "unload", "wheel" -]), Wh = /* @__PURE__ */ new Set([ +]), WC = /* @__PURE__ */ new Set([ "__proto__", "constructor", "prototype", @@ -4659,7 +4659,7 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`, "__defineSetter__", "__lookupGetter__", "__lookupSetter__" -]), wh = /* @__PURE__ */ new Set([ +]), wC = /* @__PURE__ */ new Set([ "id", "name", "value", @@ -4672,12 +4672,12 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`, "htmlFor", "role", "tabIndex" -]), Mh = (e, t = {}, n = []) => { +]), MC = (e, t = {}, n = []) => { const i = document.createElement(e); return Object.entries(t || {}).forEach(([r, l]) => { var c, s; const a = String(r || ""); - if (!(!a || Wh.has(a))) { + if (!(!a || WC.has(a))) { if (r === "style" && l && typeof l == "object") { Object.assign(i.style, l); return; @@ -4689,11 +4689,11 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`, if (a.startsWith("on")) { if (typeof l == "function") { const d = a.slice(2).toLowerCase(); - Ah.has(d) && i.addEventListener(d, l); + AC.has(d) && i.addEventListener(d, l); } return; } - if (wh.has(a)) + if (wC.has(a)) try { i[a] = l; return; @@ -4713,21 +4713,21 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`, i.appendChild(document.createTextNode(String(r))); } }), i; -}, bn = (e, t, n) => { - const i = Pa(); +}, yn = (e, t, n) => { + const i = Qa(); if (i != null && i.$el) try { return i.$el(e, t, n); } catch { } - return Mh(e, t, n); + return MC(e, t, n); }, jr = () => { - const e = Pa(); + const e = Qa(); return (e == null ? void 0 : e.ComfyDialog) || null; -}, Sh = 999999, Gh = 560, xh = 12, vr = (e) => { +}, GC = 999999, SC = 560, xC = 12, vr = (e) => { var t; try { - e.element.style.zIndex = String(Sh), e.element.style.width = `${Gh}px`, e.element.style.padding = "0", e.element.style.backgroundColor = "var(--comfy-menu-bg, #131722)", e.element.style.border = "1px solid rgba(255,255,255,0.14)", e.element.style.borderRadius = `${xh}px`, e.element.style.boxSizing = "border-box", e.element.style.overflow = "hidden", e.element.style.boxShadow = "0 18px 48px rgba(0,0,0,0.48)"; + e.element.style.zIndex = String(GC), e.element.style.width = `${SC}px`, e.element.style.padding = "0", e.element.style.backgroundColor = "var(--comfy-menu-bg, #131722)", e.element.style.border = "1px solid rgba(255,255,255,0.14)", e.element.style.borderRadius = `${xC}px`, e.element.style.boxSizing = "border-box", e.element.style.overflow = "hidden", e.element.style.boxShadow = "0 18px 48px rgba(0,0,0,0.48)"; } catch (n) { (t = console.debug) == null || t.call(console, n); } @@ -4749,27 +4749,27 @@ ${m("dialog.choiceTypeNumber", "Type a number:")}`, } catch (o) { (i = console.debug) == null || i.call(console, o); } -}, jh = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ +}, jC = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ __proto__: null, - $el: bn, - comfyAlert: hh, - comfyChoice: Zh, + $el: yn, + comfyAlert: CC, + comfyChoice: ZC, comfyConfirm: yi, - comfyPrompt: Vi, - comfyYesNoCancel: Ch, + comfyPrompt: Yi, + comfyYesNoCancel: hC, getComfyDialogCtor: jr, - getComfyUi: Pa, + getComfyUi: Qa, getExtensionManagerDialog: Us, - getNativeDialog: Hg, + getNativeDialog: Eg, hideDialogNativeClose: Lr, styleDialog: vr, toNativeDialogMessage: qg -}, Symbol.toStringTag, { value: "Module" })), Pc = "mjr:version-update-available", vh = "__MJR_VERSION_UPDATE_STATE__", Lh = "https://api.github.com/repos/MajoorWaldi/ComfyUI-Majoor-AssetsManager/releases/latest", Vh = "https://api.github.com/repos/MajoorWaldi/ComfyUI-Majoor-AssetsManager/releases/tags/nightly", dc = "majoor_last_update_check", au = "majoor_version_toast_notice_version", cu = "majoor_nightly_release_marker", Yh = 1440 * 60 * 1e3; +}, Symbol.toStringTag, { value: "Module" })), Qc = "mjr:version-update-available", vC = "__MJR_VERSION_UPDATE_STATE__", LC = "https://api.github.com/repos/MajoorWaldi/ComfyUI-Majoor-AssetsManager/releases/latest", YC = "https://api.github.com/repos/MajoorWaldi/ComfyUI-Majoor-AssetsManager/releases/tags/nightly", uc = "majoor_last_update_check", au = "majoor_version_toast_notice_version", cu = "majoor_nightly_release_marker", VC = 1440 * 60 * 1e3; let ia = { available: !1, timestamp: Date.now() }; function Pg(e) { return e ? String(e).trim().replace(/^v/i, "") : ""; } -function kh(e, t) { +function XC(e, t) { const n = String(e || "").trim().toLowerCase(), i = String(t || "").trim().toLowerCase(), r = ["nightly", "dev", "alpha", "experimental"].some((a) => n.includes(a) || i.includes(a)), l = n.includes("+") || n.length > 10 && /^[a-f0-9]+$/i.test(n); return r || l; } @@ -4779,7 +4779,7 @@ function su(e) { return Number.isFinite(n) ? Math.max(0, n) : 0; }); } -function Xh(e, t) { +function NC(e, t) { if (!e || !t) return !1; const n = su(e), i = su(t), o = Math.max(n.length, i.length); for (let r = 0; r < o; r += 1) { @@ -4789,7 +4789,7 @@ function Xh(e, t) { } return !1; } -function Nh(e) { +function kC(e) { var n, i; const t = Math.max(1, Number(e) || 1e4); try { @@ -4828,7 +4828,7 @@ function Nh(e) { } }; } async function Qg(e) { - const { signal: t, cleanup: n } = Nh(1e4), i = await fetch(e, { + const { signal: t, cleanup: n } = kC(1e4), i = await fetch(e, { cache: "no-cache", signal: t, headers: { @@ -4842,12 +4842,12 @@ async function Qg(e) { throw new Error("GitHub release returned invalid payload"); return o; } -async function Rh() { - const e = await Qg(Lh); +async function RC() { + const e = await Qg(LC); return Pg(e.tag_name); } -async function Fh() { - const e = await Qg(Vh); +async function OC() { + const e = await Qg(YC); return String( e.published_at || e.created_at || e.updated_at || e.target_commitish || e.tag_name || "" ).trim(); @@ -4858,27 +4858,27 @@ function so(e) { const t = typeof window < "u" ? window : null; if (t) { try { - t[vh] = ia; + t[vC] = ia; } catch (o) { (n = console.debug) == null || n.call(console, o); } try { - t.dispatchEvent(new CustomEvent(Pc, { detail: ia })); + t.dispatchEvent(new CustomEvent(Qc, { detail: ia })); } catch (o) { (i = console.debug) == null || i.call(console, o); } } } -function Oh() { +function FC() { return ia; } -async function zh({ force: e = !1 } = {}) { +async function zC({ force: e = !1 } = {}) { var r, l, a, c, s; if (typeof window > "u") return null; let t, n; try { - const d = await Ft(ct.VERSION); + const d = await Ft(st.VERSION); if (!(d != null && d.ok)) return so({ available: !1 }), null; t = Pg((r = d.data) == null ? void 0 : r.version), n = String(((l = d.data) == null ? void 0 : l.branch) || "").trim().toLowerCase(); @@ -4888,17 +4888,17 @@ async function zh({ force: e = !1 } = {}) { let i = !1; try { if (!e) { - const d = Number(ni.get(dc) || 0); - Number.isFinite(d) && Date.now() - d < Yh && (i = !0); + const d = Number(ni.get(uc) || 0); + Number.isFinite(d) && Date.now() - d < VC && (i = !0); } } catch { } - if (!t || kh(t, n)) { + if (!t || XC(t, n)) { if (i) return so({ available: !1 }), null; let d; try { - d = await Fh(); + d = await OC(); const u = String( ni.get(cu) || "" ).trim(), I = !!(u && d && u !== d); @@ -4907,7 +4907,7 @@ async function zh({ force: e = !1 } = {}) { current: t || "nightly", latest: "nightly", channel: "nightly" - }), I && Ze( + }), I && Ae( { summary: m("msg.nightlyUpdateTitle", "Majoor Assets Manager"), detail: m( @@ -4920,14 +4920,14 @@ async function zh({ force: e = !1 } = {}) { ), d) try { ni.set(cu, d); - } catch (y) { - (a = console.debug) == null || a.call(console, y); + } catch (A) { + (a = console.debug) == null || a.call(console, A); } } catch (u) { console.warn("Unable to check Majoor nightly updates:", u), so({ available: !1 }); } finally { try { - ni.set(dc, String(Date.now())); + ni.set(uc, String(Date.now())); } catch { } } @@ -4937,16 +4937,16 @@ async function zh({ force: e = !1 } = {}) { return null; let o; try { - o = await Rh(); + o = await RC(); } catch (d) { return console.warn("Unable to check Majoor updates:", d), so({ available: !1 }), null; } finally { try { - ni.set(dc, String(Date.now())); + ni.set(uc, String(Date.now())); } catch { } } - if (!o || !Xh(o, t)) + if (!o || !NC(o, t)) return so({ available: !1 }), null; so({ available: !0, @@ -4957,7 +4957,7 @@ async function zh({ force: e = !1 } = {}) { if (String( ni.get(au) || "" ).trim() !== o) { - Ze( + Ae( { summary: m("msg.newVersionTitle", "Majoor Assets Manager"), detail: m( @@ -4983,7 +4983,7 @@ async function zh({ force: e = !1 } = {}) { } return { current: t, latest: o }; } -function Qc() { +function _c() { const e = "mjr-feed-selection-override"; if (typeof document > "u" || document.getElementById(e)) return; const t = document.createElement("style"); @@ -4999,15 +4999,15 @@ function Qc() { } `, document.head.appendChild(t); } -function Jh({ enabled: e = !0 } = {}) { +function JC({ enabled: e = !0 } = {}) { if (!e) return; const t = "mjr-theme-comfy-css"; if (document.getElementById(t)) { - Qc(); + _c(); return; } try { - const n = new URL("data:text/css;base64,LyoqCiAqIE1ham9vciBBc3NldHMgTWFuYWdlciDigJQgQ29tZnktbGlrZSB0aGVtZSBsYXllcgogKgogKiBSVUxFUzoKICogLSBEbyBOT1QgaGFyZGNvZGUgYSBjdXN0b20gcGFsZXR0ZTsgdXNlIGV4aXN0aW5nIENvbWZ5VUkgQ1NTIHZhcmlhYmxlcyB2aWEgdmFyKC4uLikuCiAqIC0gS2VlcCBldmVyeXRoaW5nIHNjb3BlZCB1bmRlciBgLm1qci1hc3NldHMtbWFuYWdlcmAgdG8gYXZvaWQgbGVha2luZyBzdHlsZXMgdG8gQ29tZnlVSSAoZXhjZXB0IGAubWpyLXBvcG92ZXIqYCB3aGljaCBjYW4gYmUgcG9ydGFsZWQgdG8gYGRvY3VtZW50LmJvZHlgKS4KICovCgoubWpyLWFzc2V0cy1tYW5hZ2VyIHsKICAgIC8qIFR5cG9ncmFwaHkgKi8KICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1jb21meS1mb250LCB2YXIoLS1mb250LWludGVyLCB1aS1zYW5zLXNlcmlmLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sICJTZWdvZSBVSSIsIFJvYm90bywgQXJpYWwsIHNhbnMtc2VyaWYpKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yLCB2YXIoLS1jb250ZW50LWZnLCB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKSkpOwoKICAgIC8qCiAgICAgKiBTdXJmYWNlcyDigJQgcHJpb3JpdHk6IENvbWZ5VUkgdjEuNDIgZGVzaWduLXN5c3RlbSB0b2tlbiDihpIgbGVnYWN5IHRva2VuIOKGkiBoYXJkIGZhbGxiYWNrCiAgICAgKiBOZXcgdG9rZW5zOiAtLWludGVyZmFjZS1wYW5lbC1zdXJmYWNlLCAtLWludGVyZmFjZS1tZW51LXN1cmZhY2UsIC0taW50ZXJmYWNlLXBhbmVsLWhvdmVyLXN1cmZhY2UsCiAgICAgKiAgICAgICAgICAgICAtLW1vZGFsLWNhcmQtYmFja2dyb3VuZCwgLS1idXR0b24tc3VyZmFjZSwgLS1idXR0b24taG92ZXItc3VyZmFjZSwKICAgICAqICAgICAgICAgICAgIC0taW50ZXJmYWNlLXBhbmVsLXNlbGVjdGVkLXN1cmZhY2UsIC0tcHJpbWFyeS1iYWNrZ3JvdW5kLCAtLW11dGVkLWZvcmVncm91bmQsCiAgICAgKiAgICAgICAgICAgICAtLWJvcmRlci1kZWZhdWx0LCAtLXN1Y2Nlc3MtYmFja2dyb3VuZCwgLS13YXJuaW5nLWJhY2tncm91bmQsIC0tZGVzdHJ1Y3RpdmUtYmFja2dyb3VuZAogICAgICovCiAgICAtLW1qci1zdXJmYWNlLTA6IHZhcigtLWludGVyZmFjZS1wYW5lbC1zdXJmYWNlLCB2YXIoLS1jb250ZW50LWJnLCAjMWUxZTFlKSk7CiAgICAtLW1qci1zdXJmYWNlLTE6IHZhcigtLWludGVyZmFjZS1tZW51LXN1cmZhY2UsIHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpKTsKICAgIC0tbWpyLXN1cmZhY2UtMjogdmFyKC0taW50ZXJmYWNlLXBhbmVsLWhvdmVyLXN1cmZhY2UsIHZhcigtLWNvbWZ5LW1lbnUtc2Vjb25kYXJ5LWJnLCAjMzMzKSk7CiAgICAtLW1qci1zdXJmYWNlLTM6IHZhcigtLW1vZGFsLWNhcmQtYmFja2dyb3VuZCwgdmFyKC0tY29tZnktbWVudS1iZywgIzIyMikpOwogICAgLS1tanItYm9yZGVyOiB2YXIoLS1ib3JkZXItZGVmYXVsdCwgdmFyKC0tYm9yZGVyLWNvbG9yLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKSk7CiAgICAtLW1qci1tdXRlZDogdmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCwgdmFyKC0tZGVzY3JpcC10ZXh0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKSk7CiAgICAtLW1qci1hY2NlbnQ6IHZhcigtLXByaW1hcnktYmFja2dyb3VuZCwgdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKSk7CiAgICAtLW1qci1hY2NlbnQtaG92ZXI6IHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1ob3ZlciwgdmFyKC0tY29tZnktYWNjZW50LCAjN2VjOGZmKSk7CiAgICAtLW1qci1idG4tc3VyZmFjZTogdmFyKC0tYnV0dG9uLXN1cmZhY2UsIHZhcigtLW1qci1zdXJmYWNlLTIpKTsKICAgIC0tbWpyLWJ0bi1ob3ZlcjogdmFyKC0tYnV0dG9uLWhvdmVyLXN1cmZhY2UsIHZhcigtLW1qci1zdXJmYWNlLTIpKTsKICAgIC0tbWpyLXNlbGVjdGVkLXN1cmZhY2U6IHZhcigtLWludGVyZmFjZS1wYW5lbC1zZWxlY3RlZC1zdXJmYWNlLCByZ2JhKDk1LCAxNzksIDI1NSwgMC4xNSkpOwoKICAgIC8qIFJhZGlpIOKAlCB1c2UgQ29tZnlVSSBkZXNpZ24tc3lzdGVtIHJhZGl1cyB0b2tlbnMgd2hlbiBhdmFpbGFibGUgKi8KICAgIC0tbWpyLXItc206IHZhcigtLXJhZGl1cy1zbSwgOHB4KTsKICAgIC0tbWpyLXItbWQ6IHZhcigtLXJhZGl1cy1tZCwgMTBweCk7CiAgICAtLW1qci1yLWxnOiB2YXIoLS1yYWRpdXMtbGcsIDEycHgpOwoKICAgIC8qIFNwYWNpbmcgKi8KICAgIC0tbWpyLXBhZC1zbTogOHB4OwogICAgLS1tanItcGFkLW1kOiAxMnB4OwogICAgLS1tanItcGFkLWxnOiAxNnB4OwoKICAgIC8qIFNlbWFudGljIFN0YXR1cyBDb2xvcnMg4oCUIHByZWZlciBDb21meVVJIHYxLjQyIHNlbWFudGljIHRva2VucyAqLwogICAgLS1tanItc3RhdHVzLXN1Y2Nlc3M6IHZhcigtLXN1Y2Nlc3MtYmFja2dyb3VuZCwgdmFyKC0tY29tZnktc3RhdHVzLXN1Y2Nlc3MsICM0Q0FGNTApKTsKICAgIC0tbWpyLXN0YXR1cy13YXJuaW5nOiB2YXIoLS13YXJuaW5nLWJhY2tncm91bmQsIHZhcigtLWNvbWZ5LXN0YXR1cy13YXJuaW5nLCAjRkZBNzI2KSk7CiAgICAtLW1qci1zdGF0dXMtZXJyb3I6IHZhcigtLWRlc3RydWN0aXZlLWJhY2tncm91bmQsIHZhcigtLWNvbWZ5LXN0YXR1cy1lcnJvciwgI2Y0NDMzNikpOwogICAgLS1tanItc3RhdHVzLWluZm86IHZhcigtLWNvbWZ5LXN0YXR1cy1pbmZvLCAjMjE5NkYzKTsKICAgIC0tbWpyLXN0YXR1cy1uZXV0cmFsOiB2YXIoLS1jb21meS1zdGF0dXMtbmV1dHJhbCwgIzllOWU5ZSk7CiAgICAtLW1qci1zdGFyLWFjdGl2ZTogI0ZGRDQ1QTsKCiAgICAvKiBCYWRnZSBjb2xvcnMgKG92ZXJyaWRkZW4gYnkgc2V0dGluZ3MpICovCiAgICAtLW1qci1iYWRnZS1pbWFnZTogIzIxOTZGMzsKICAgIC0tbWpyLWJhZGdlLXZpZGVvOiAjOUMyN0IwOwogICAgLS1tanItYmFkZ2UtYXVkaW86ICNGRjk4MDA7CiAgICAtLW1qci1iYWRnZS1tb2RlbDNkOiAjNENBRjUwOwogICAgLS1tanItY2FyZC1ob3Zlci1jb2xvcjogdmFyKC0taW50ZXJmYWNlLXBhbmVsLWhvdmVyLXN1cmZhY2UsICMzRDNEM0QpOwogICAgLS1tanItY2FyZC1zZWxlY3Rpb24tY29sb3I6IHZhcigtLWludGVyZmFjZS1wYW5lbC1zZWxlY3RlZC1zdXJmYWNlLCAjNEE5MEUyKTsKICAgIC0tbWpyLXJhdGluZy1jb2xvcjogI0ZGOTUwMDsKICAgIC0tbWpyLXRhZy1jb2xvcjogIzRBOTBFMjsKfQoKLyogTWFrZSB0aGUgdGhlbWUgdmlzaWJseSBhcHBseSBldmVuIHdpdGggaW5saW5lIHN0eWxlcyAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyICogewogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKLm1qci1hc3NldHMtbWFuYWdlci5tanItYW0tY29udGFpbmVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgaGVpZ2h0OiAxMDAlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWhlYWRlciB7CiAgICBwYWRkaW5nOiAxNHB4IDE2cHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xKTsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgei1pbmRleDogMjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWhlYWRlci1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBtaW4taGVpZ2h0OiAyOHB4OwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZmxleC13cmFwOiB3cmFwOwogICAgcm93LWdhcDogMTBweDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWhlYWRlci1sZWZ0IHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWhlYWRlci1hY3Rpb25zIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZmxleC13cmFwOiB3cmFwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0taGVhZGVyLXRvb2xzIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgZ2FwOiA4cHg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGFicyB7CiAgICAvKiBRdWV1ZS1saWtlIHRhYnMgKGFjdGl2ZSBwaWxsLCBvdGhlcnMgYXMgdGV4dCkgKi8KICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm9yZGVyOiBub25lOwogICAgcGFkZGluZzogMDsKICAgIGdhcDogMTBweDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgbWluLXdpZHRoOiAwOwogICAgb3ZlcmZsb3cteDogYXV0bzsKICAgIG92ZXJmbG93LXk6IGhpZGRlbjsKICAgIHNjcm9sbGJhci13aWR0aDogbm9uZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRhYnM6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIHdpZHRoOiAwOwogICAgaGVpZ2h0OiAwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGFiIHsKICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSA2NSUsIHRyYW5zcGFyZW50KTsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxMjBtcyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIDEyMG1zIGVhc2UsIGNvbG9yIDEyMG1zIGVhc2UsIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGFiOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHRyYW5zcGFyZW50KTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDcwJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGFiLmlzLWFjdGl2ZSB7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2ZmZik7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLCB0cmFuc3BhcmVudCk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4NSUsIHRyYW5zcGFyZW50KTsKICAgIGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLDAsMCwwLjE4KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWljb24tYnRuIHsKICAgIHdpZHRoOiAyOHB4OwogICAgaGVpZ2h0OiAyOHB4OwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcsIDAuNXJlbSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTIpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgcGFkZGluZzogMDsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxMjBtcyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIDEyMG1zIGVhc2UsIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaWNvbi1idG46aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNDUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLCB2YXIoLS1tanItYWNjZW50KSA4JSk7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pY29uLWJ0bi5tanItY29udGV4dC1hY3RpdmUgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgODUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTUlLCB2YXIoLS1tanItYWNjZW50KSAxMiUpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAzNSUsIHRyYW5zcGFyZW50KTsKfQoKLyogRmxvYXRpbmcgVmlld2VyIGJ1dHRvbiDigJQgdGVhbCBnbG93IHdoZW4gdmlld2VyIGlzIG9wZW4gKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWljb24tYnRuLm1qci1tZnYtYnRuLWFjdGl2ZSB7CiAgICBjb2xvcjogIzRkZDljMDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSg3NywgMjE3LCAxOTIsIDAuNTUpOwogICAgYmFja2dyb3VuZDogcmdiYSg3NywgMjE3LCAxOTIsIDAuMSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSg3NywgMjE3LCAxOTIsIDAuMjUpOwp9Ci5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pY29uLWJ0bi5tanItbWZ2LWJ0bi1hY3RpdmUgLnBpIHsKICAgIG9wYWNpdHk6IDE7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pY29uLWJ0bi5tanItbWVzc2FnZS1idG4gewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgb3ZlcmZsb3c6IHZpc2libGU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pY29uLWJ0bi5tanItbWVzc2FnZS1oYXMtdW5yZWFkIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDc1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDcyJSwgdmFyKC0tbWpyLWFjY2VudCkgMTElKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lc3NhZ2UtYmFkZ2UgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAtNXB4OwogICAgcmlnaHQ6IC02cHg7CiAgICBtaW4td2lkdGg6IDE2cHg7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICBwYWRkaW5nOiAwIDRweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDU1JSwgcmdiYSgyNTUsMjU1LDI1NSwwLjMpKTsKICAgIGJhY2tncm91bmQ6ICNlZjUzNTA7CiAgICBjb2xvcjogI2ZmZjsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjM1KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWljb24tYnRuIC5waSB7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIG9wYWNpdHk6IDAuOTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWljb24tYnRuOmRpc2FibGVkLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYWktY29udHJvbDpkaXNhYmxlZCB7CiAgICBvcGFjaXR5OiAwLjU7CiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgdHJhbnNmb3JtOiBub25lOwogICAgZmlsdGVyOiBncmF5c2NhbGUoMC40NSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4OCUsIHRyYW5zcGFyZW50KSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDkyJSwgdHJhbnNwYXJlbnQpICFpbXBvcnRhbnQ7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkLCByZ2JhKDI1NSwyNTUsMjU1LDAuNikpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1haS1kaXNhYmxlZCAubWpyLWFpLWNvbnRyb2w6aG92ZXIgewogICAgdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1haS1kaXNhYmxlZC1ibG9jayB7CiAgICBvcGFjaXR5OiAwLjU4OwogICAgZmlsdGVyOiBncmF5c2NhbGUoMC40NSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1haS1kaXNhYmxlZC1ibG9jayAubWpyLWFpLWNvbnRyb2wsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1haS1kaXNhYmxlZC1ibG9jayBidXR0b24gewogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi8qIFBvcG92ZXJzIGNhbiBiZSBtb3ZlZCB0byBgZG9jdW1lbnQuYm9keWAgKHBvcnRhbCkgdG8gYXZvaWQgYmVpbmcgY2xpcHBlZC4gKi8KLm1qci1wb3BvdmVyIHsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1jb21meS1mb250LCB2YXIoLS1mb250LWludGVyLCB1aS1zYW5zLXNlcmlmLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sICJTZWdvZSBVSSIsIFJvYm90bywgQXJpYWwsIHNhbnMtc2VyaWYpKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yLCB2YXIoLS1jb250ZW50LWZnLCB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKSkpOwoKICAgIC8qIFByb3ZpZGUgZmFsbGJhY2tzIHdoZW4gb3V0c2lkZSBgLm1qci1hc3NldHMtbWFuYWdlcmAgc2NvcGUgKi8KCSAgICAtLW1qci1zdXJmYWNlLTE6IHZhcigtLWludGVyZmFjZS1tZW51LXN1cmZhY2UsIHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpKTsKCSAgICAtLW1qci1ib3JkZXI6IHZhcigtLWJvcmRlci1kZWZhdWx0LCB2YXIoLS1ib3JkZXItY29sb3IsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpKTsKCSAgICAtLW1qci1tdXRlZDogdmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCwgdmFyKC0tZGVzY3JpcC10ZXh0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKSk7CgkgICAgLS1tanItYWNjZW50OiB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpOwoJICAgIC0tbWpyLXBvcG92ZXItei1pbmRleDogMjE0NzQ4MzY0NzsKCiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICB0b3A6IDA7CiAgICBsZWZ0OiAwOwogICAgbWluLXdpZHRoOiAwOwogICAgd2lkdGg6IG1pbigyODBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIG1heC13aWR0aDogbWluKDM2MHB4LCBjYWxjKDEwMHZ3IC0gMjRweCkpOwogICAgcGFkZGluZzogMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZywgMC41cmVtKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEsIHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHZhcigtLWJvcmRlci1jb2xvciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSkpOwogICAgYm94LXNoYWRvdzogMCAxMnB4IDI4cHggcmdiYSgwLDAsMCwwLjM1KTsKCSAgICB6LWluZGV4OiB2YXIoLS1tanItcG9wb3Zlci16LWluZGV4KTsKICAgIG1pbi1oZWlnaHQ6IDA7CiAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgIHRvdWNoLWFjdGlvbjogcGFuLXk7CiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgewogICAgbWluLXdpZHRoOiAzNDBweDsKICAgIHdpZHRoOiBtaW4oMzYwcHgsIGNhbGMoMTAwdncgLSAyNHB4KSk7CiAgICBwYWRkaW5nOiAxMnB4Owp9CgoubWpyLXNvcnQtcG9wb3ZlciB7CiAgICBtaW4td2lkdGg6IDIyMHB4OwogICAgd2lkdGg6IG1pbigyNjBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIHBhZGRpbmc6IDEwcHg7Cn0KCi5tanItY29sbGVjdGlvbnMtcG9wb3ZlciB7CiAgICBtaW4td2lkdGg6IDI4MHB4OwogICAgd2lkdGg6IG1pbigzMjBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIHBhZGRpbmc6IDEwcHg7Cn0KCi5tanItbWVzc2FnZXMtcG9wb3ZlciB7CiAgICBtaW4td2lkdGg6IDMyMHB4OwogICAgd2lkdGg6IG1pbig0NjBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIHBhZGRpbmc6IDEwcHg7Cn0KCi5tanItbWVzc2FnZXMtaGVhZCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogOHB4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAgbWFyZ2luLWJvdHRvbTogOHB4Owp9CgoubWpyLW1lc3NhZ2VzLXRhYnMgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICBwYWRkaW5nOiAzcHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4OCUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA3NCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1tZXNzYWdlcy10YWIgewogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIGJvcmRlcjogMDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZjFmMWYxKSA3NiUsIHRyYW5zcGFyZW50KTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjE0cyBlYXNlLCBjb2xvciAwLjE0cyBlYXNlLCB0cmFuc2Zvcm0gMC4xNHMgZWFzZTsKfQoKLm1qci1tZXNzYWdlcy10YWI6aG92ZXIsCi5tanItbWVzc2FnZXMtdGFiOmZvY3VzLXZpc2libGUgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDE0JSwgdHJhbnNwYXJlbnQpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNmMWYxZjEpOwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci1tZXNzYWdlcy10YWIuaXMtYWN0aXZlIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAyMiUsIHZhcigtLW1qci1zdXJmYWNlLTIpKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZmZmKTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMzQlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWVzc2FnZXMtcGFuZWxzIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDhweDsKICAgIG1heC1oZWlnaHQ6IG1pbig1MnZoLCA0MjBweCk7Cn0KCi5tanItbWVzc2FnZXMtbGlzdCwKLm1qci1tZXNzYWdlcy1zaG9ydGN1dHMtcGFuZWwgewogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47Cn0KCi5tanItdGFiLWNvdW50LWJhZGdlIHsKICAgIG1pbi13aWR0aDogMTZweDsKICAgIGhlaWdodDogMTZweDsKICAgIHBhZGRpbmc6IDAgNXB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGZvbnQtc2l6ZTogOXB4OwogICAgZm9udC13ZWlnaHQ6IDgwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAyZW07CiAgICBsaW5lLWhlaWdodDogMTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAyOCUsIHZhcigtLW1qci1zdXJmYWNlLTIpKTsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2ZmZikgOTIlLCB0cmFuc3BhcmVudCk7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDQ4JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1lc3NhZ2VzLXRpdGxlIHsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgbWluLXdpZHRoOiAwOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAzZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSA4MiUsIHZhcigtLW1qci1tdXRlZCkpOwp9CgoubWpyLW1lc3NhZ2VzLWFjdGlvbnMgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgIGdhcDogNnB4OwogICAgZmxleC13cmFwOiB3cmFwOwp9CgoubWpyLW1lc3NhZ2VzLW1hcmstcmVhZC1idG4gewogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7Cn0KCi5tanItbWVzc2FnZXMtc3Rhci1saW5rIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2YxZjFmMSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjZjNjODRiIDQyJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsICNmM2M4NGIgMTIlLCB2YXIoLS1tanItc3VyZmFjZS0yKSk7Cn0KCi5tanItbWVzc2FnZXMtc3Rhci1saW5rOmhvdmVyLAoubWpyLW1lc3NhZ2VzLXN0YXItbGluazpmb2N1cy12aXNpYmxlIHsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQoKLm1qci1tZXNzYWdlcy1zdGFyLWljb24gewogICAgY29sb3I6ICNmM2M4NGI7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLm1qci1tZXNzYWdlcy1zdGFyLWxhYmVsIHsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItbWVzc2FnZXMtbGlzdCB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA4cHg7Cn0KCi5tanItbWVzc2FnZXMtZW1wdHkgewogICAgcGFkZGluZzogOHB4IDZweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIG9wYWNpdHk6IDAuNzI7Cn0KCi5tanItbWVzc2FnZS1pdGVtIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDVweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODYlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTglLCB0cmFuc3BhcmVudCk7CiAgICBwYWRkaW5nOiA4cHg7Cn0KCi5tanItbWVzc2FnZS1pdGVtLS11bnJlYWQgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTglLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDI2JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1lc3NhZ2UtaXRlbS0td2FybmluZyB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjZjBiODVhIDYyJSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLW1lc3NhZ2UtaXRlbS0tZXJyb3IgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgI2YzNmI2YiA2MiUsIHZhcigtLW1qci1ib3JkZXIpKTsKfQoKLm1qci1tZXNzYWdlLWl0ZW0tLXN1Y2Nlc3MgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgIzU4YzA3ZCA2MiUsIHZhcigtLW1qci1ib3JkZXIpKTsKfQoKLm1qci1tZXNzYWdlLWl0ZW0taGVhZCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogOHB4Owp9CgoubWpyLW1lc3NhZ2UtaXRlbS10aXRsZS13cmFwIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgbWluLXdpZHRoOiAwOwogICAgZmxleDogMSAxIGF1dG87Cn0KCi5tanItbWVzc2FnZS1pdGVtLWVtb2ppIHsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgZm9udC1zaXplOiAxNnB4OwogICAgbGluZS1oZWlnaHQ6IDE7Cn0KCi5tanItbWVzc2FnZS1pdGVtLXRpdGxlIHsKICAgIG1pbi13aWR0aDogMDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2YxZjFmMSk7Cn0KCi5tanItbWVzc2FnZS1pdGVtLWNhdGVnb3J5IHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDFweCA2cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wM2VtOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDIwJSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZmZmKSA4NiUsIHRyYW5zcGFyZW50KTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItbWVzc2FnZS1pdGVtLW1ldGEgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgb3BhY2l0eTogMC43MjsKfQoKLm1qci1tZXNzYWdlLWl0ZW0tYm9keSB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBvcGFjaXR5OiAwLjkyOwogICAgbGluZS1oZWlnaHQ6IDEuNDU7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwp9CgoubWpyLW1lc3NhZ2UtaXRlbS1hY3Rpb24gewogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKTsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgIHdpZHRoOiBmaXQtY29udGVudDsKfQoKLm1qci1tZXNzYWdlLWl0ZW0tYWN0aW9uOmhvdmVyIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9CgovKiBUb2FzdCBIaXN0b3J5IHRhYiDigJQgdW5yZWFkIGluZGljYXRvciBkb3QgKi8KLm1qci10YWItdW5yZWFkLWRvdCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB3aWR0aDogNnB4OwogICAgaGVpZ2h0OiA2cHg7CiAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKICAgIG1hcmdpbi1sZWZ0OiA1cHg7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgZmxleC1zaHJpbms6IDA7Cn0KCi8qIEhpc3RvcnkgcGFuZWwgKi8KLm1qci1tZXNzYWdlcy1oaXN0b3J5LXBhbmVsIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgbWluLWhlaWdodDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5tanItaGlzdG9yeS1oZWFkIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgcGFkZGluZzogNHB4IDAgNnB4OwogICAgZmxleC1zaHJpbms6IDA7Cn0KCi5tanItaGlzdG9yeS1oZWFkLWxhYmVsIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBvcGFjaXR5OiAwLjYyOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07Cn0KCi5tanItaGlzdG9yeS1jbGVhci1idG4gewogICAgZm9udC1zaXplOiAxMXB4OwogICAgcGFkZGluZzogMnB4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSk7CiAgICBjb2xvcjogaW5oZXJpdDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIG9wYWNpdHk6IDAuNzI7Cn0KCi5tanItaGlzdG9yeS1jbGVhci1idG46aG92ZXIgewogICAgb3BhY2l0eTogMTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAxMiUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1oaXN0b3J5LWxpc3QgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogNHB4OwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47Cn0KCi5tanItaGlzdG9yeS1pdGVtIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZzogNnB4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LDI1NSwyNTUsMC4wOCkpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMiwgcmdiYSgyNTUsMjU1LDI1NSwwLjA0KSk7CiAgICBmb250LXNpemU6IDEycHg7Cn0KCi5tanItaGlzdG9yeS1pdGVtLS1lcnJvciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjZjM2YjZiIDUwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLWhpc3RvcnktaXRlbS0td2FybmluZyB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjZjBiODVhIDUwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLWhpc3RvcnktaXRlbS0tc3VjY2VzcyB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjNThjMDdkIDUwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLWhpc3RvcnktaXRlbS1pY29uIHsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgZm9udC1zaXplOiAxNHB4OwogICAgbGluZS1oZWlnaHQ6IDEuNDsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tY29udGVudCB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA0cHg7Cn0KCi5tanItaGlzdG9yeS1pdGVtLW1zZyB7CiAgICBvcGFjaXR5OiAwLjkyOwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7CiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwp9CgoubWpyLWhpc3RvcnktaXRlbS10aXRsZSB7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgIG9wYWNpdHk6IDAuOTY7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tZGV0YWlsIHsKICAgIG9wYWNpdHk6IDAuODQ7CiAgICBsaW5lLWhlaWdodDogMS40NTsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlOwogICAgd29yZC1icmVhazogYnJlYWstd29yZDsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tbWV0YSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgZmxleC13cmFwOiB3cmFwOwp9CgoubWpyLWhpc3RvcnktaXRlbS10aW1lIHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIG9wYWNpdHk6IDAuNTI7Cn0KCi5tanItaGlzdG9yeS1pdGVtLWNoaXAgewogICAgZm9udC1zaXplOiAxMHB4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBwYWRkaW5nOiAycHggNnB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODIlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMywgdmFyKC0tbWpyLXN1cmZhY2UtMikpIDc4JSwgdHJhbnNwYXJlbnQpOwogICAgb3BhY2l0eTogMC43NjsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tYWN0aW9uIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIHdpZHRoOiBmaXQtY29udGVudDsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tYWN0aW9uOmhvdmVyIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9CgoubWpyLWhpc3RvcnktaXRlbS1wcm9ncmVzcyB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA0cHg7Cn0KCi5tanItaGlzdG9yeS1pdGVtLXByb2dyZXNzLXN1bW1hcnkgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgb3BhY2l0eTogMC43NDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7Cn0KCi5tanItaGlzdG9yeS1pdGVtLXByb2dyZXNzLWJhciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogNnB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc1JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWhpc3RvcnktaXRlbS1wcm9ncmVzcy1maWxsIHsKICAgIGhlaWdodDogMTAwJTsKICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpLCBjb2xvci1taXgoaW4gc3JnYiwgIzU4YzA3ZCA3MiUsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpKSk7Cn0KCi5tanItc2hvcnRjdXQtZ3VpZGUgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogOHB4Owp9CgoubWpyLXNob3J0Y3V0LWd1aWRlLWludHJvIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ1OwogICAgb3BhY2l0eTogMC44NDsKfQoKLm1qci1zaG9ydGN1dC1zZWN0aW9uIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDZweDsKICAgIHBhZGRpbmc6IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODQlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMywgdmFyKC0tbWpyLXN1cmZhY2UtMikpIDcyJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLXNob3J0Y3V0LXNlY3Rpb24tdGl0bGUgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA0ZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZjFmMWYxKSA4OCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1zaG9ydGN1dC1saXN0IHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDZweDsKfQoKLm1qci1zaG9ydGN1dC1yb3cgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDEzMnB4LCAxNjBweCkgbWlubWF4KDAsIDFmcik7CiAgICBnYXA6IDhweDsKICAgIGFsaWduLWl0ZW1zOiBzdGFydDsKfQoKLm1qci1zaG9ydGN1dC1rZXkgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBtaW4taGVpZ2h0OiAyNHB4OwogICAgcGFkZGluZzogM3B4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDM4JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDEyJSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZmZmKSA5MCUsIHRyYW5zcGFyZW50KTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMS4yNTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7Cn0KCi5tanItc2hvcnRjdXQtZGVzYyB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsaW5lLWhlaWdodDogMS40OwogICAgb3BhY2l0eTogMC45MjsKfQoKQG1lZGlhIChtYXgtd2lkdGg6IDU2MHB4KSB7CiAgICAubWpyLXNob3J0Y3V0LXJvdyB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICB9CgogICAgLm1qci1zaG9ydGN1dC1rZXkgewogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgIH0KfQoKLm1qci1maWx0ZXItZ3JvdXAgewogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDg1JSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDcwJSwgdHJhbnNwYXJlbnQpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbWQpOwogICAgcGFkZGluZzogMTBweDsKICAgIG1hcmdpbi1ib3R0b206IDEwcHg7Cn0KCi5tanItZmlsdGVyLWdyb3VwOmxhc3QtY2hpbGQgewogICAgbWFyZ2luLWJvdHRvbTogMDsKfQoKLm1qci1maWx0ZXItZ3JvdXAtdGl0bGUgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjM1cHg7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSA3OCUsIHZhcigtLW1qci1tdXRlZCkpOwogICAgbWFyZ2luLWJvdHRvbTogOHB4Owp9CgoubWpyLXBvcG92ZXItcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgIGZsZXgtd3JhcDogd3JhcDsKfQoKLm1qci1wb3BvdmVyLXJvdzpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1ib3R0b206IDA7Cn0KCi5tanItcG9wb3Zlci1sYWJlbCB7CiAgICB3aWR0aDogNTZweDsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHZhcigtLWRlc2NyaXAtdGV4dCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSkpOwogICAgZm9udC1zaXplOiAxMnB4Owp9CgoubWpyLXBvcG92ZXItdG9nZ2xlIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwp9CgoubWpyLXBvcG92ZXItdG9nZ2xlIGlucHV0W3R5cGU9ImNoZWNrYm94Il0gewogICAgYWNjZW50LWNvbG9yOiB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWhlYWRlci1pY29uIHsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBvcGFjaXR5OiAwLjk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1oZWFkZXItdGl0bGUgewogICAgbWFyZ2luOiAwOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAxZW07Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1jb250ZW50IHsKICAgIGZsZXg6IDE7CiAgICBwYWRkaW5nOiAxNnB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgbWluLWhlaWdodDogMDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWJyb3dzZSB7CiAgICBmbGV4OiAxOwogICAgbWluLWhlaWdodDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc1JSwgdHJhbnNwYXJlbnQpOwogICAgcGFkZGluZy10b3A6IDRweDsKfQoKLyogU2Nyb2xsYmFycyAobWF0Y2ggQ29tZnlVSSBmZWVsKSAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tZ3JpZC1zY3JvbGwgewogICAgbWluLWhlaWdodDogMDsKICAgIGhlaWdodDogMTAwJTsKICAgIG92ZXJmbG93OiBhdXRvOwogICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgIHRvdWNoLWFjdGlvbjogcGFuLXk7CiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47CiAgICBzY3JvbGxiYXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4NSUsIHZhcigtLWNvbnRlbnQtZmcsICNkZGQpKSB0cmFuc3BhcmVudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWdyaWQtc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICB3aWR0aDogMTBweDsKICAgIGhlaWdodDogMTBweDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWdyaWQtc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWdyaWQtc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTUlLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSk7CiAgICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWdyaWQtc2Nyb2xsOmhvdmVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNzAlLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1ncmlkLXNjcm9sbDo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tY3VzdG9tLWNvbnRyb2xzIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMDsKICAgIGdhcDogOHB4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zZWFyY2ggewogICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zZWFyY2ggewogICAgcGFkZGluZy1ib3R0b206IDZweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIG1hcmdpbi1ib3R0b206IDZweDsKfQoKLyogQ2FyZCBNZXRhZGF0YSBDb2xvcnMgKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1ldGEtZHVyYXRpb24gewogICAgY29sb3I6ICNmZmE3MjY7IC8qIE9yYW5nZSBmb3IgZHVyYXRpb24gKi8KICAgIGZvbnQtd2VpZ2h0OiA1MDA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1tZXRhLXJlcyB7CiAgICBjb2xvcjogIzRmYzNmNzsgLyogTGlnaHQgQmx1ZSBmb3IgcmVzb2x1dGlvbiAqLwogICAgZm9udC13ZWlnaHQ6IDUwMDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1ldGEtZGF0ZSB7CiAgICBjb2xvcjogI2I5ZjZjYTsgLyogUGFsZSBHcmVlbiBmb3IgZGF0ZSAqLwogICAgZm9udC1zaXplOiAwLjllbTsKICAgIGZvbnQtd2VpZ2h0OiA1MDA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1tZXRhLXRpbWUgewogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSk7CiAgICBmb250LXNpemU6IDAuOWVtOwp9CgoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXN1bW1hcnkgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBnYXA6IDEwcHg7CiAgICBtYXJnaW46IDAgMCA2cHggMDsKICAgIHBhZGRpbmc6IDAgMCA0cHggMDsKICAgIG1pbi1oZWlnaHQ6IDE2cHg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKTsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNjUlLCB0cmFuc3BhcmVudCk7CiAgICBmbGV4OiAwIDAgYXV0bzsKfQoKLyogVG9hc3RzIChnbG9iYWw6IGNhbiBiZSBtb3VudGVkIHVuZGVyIGRvY3VtZW50LmJvZHkpICovCi5tanItdG9hc3QtY29udGFpbmVyIHsKICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgIHRvcDogMTZweDsKICAgIGxlZnQ6IDUwJTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIHotaW5kZXg6IDEwMDAwMDE7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLm1qci10b2FzdCB7CiAgICAtLW1qci10b2FzdC1zdHJpcDogdmFyKC0tbWpyLXN0YXR1cy1pbmZvLCB2YXIoLS1jb21meS1zdGF0dXMtaW5mbywgIzIxOTZmMykpOwogICAgLS1tanItdG9hc3QtaWNvbi1jb2xvcjogdmFyKC0tbWpyLXN0YXR1cy1pbmZvLCB2YXIoLS1jb21meS1zdGF0dXMtaW5mbywgIzIxOTZmMykpOwogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IsICMzYTNhM2EpOwogICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB2YXIoLS1tanItdG9hc3Qtc3RyaXApOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yLCAjZWZlZmVmKTsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1jb21meS1mb250LCB1aS1zYW5zLXNlcmlmLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sICJTZWdvZSBVSSIsIFJvYm90bywgQXJpYWwsIHNhbnMtc2VyaWYpOwogICAgZm9udC1zaXplOiAxNHB4OwogICAgYm94LXNoYWRvdzogMCA0cHggMTZweCByZ2JhKDAsMCwwLDAuNSk7CiAgICBvcGFjaXR5OiAwOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xNXB4KTsKICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLW91dCwgdHJhbnNmb3JtIDAuMnMgZWFzZS1vdXQ7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMnB4OwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgd2lkdGg6IG1heC1jb250ZW50OwogICAgbWluLXdpZHRoOiBtaW4oMjUwcHgsIGNhbGMoMTAwdncgLSAyNHB4KSk7CiAgICBtYXgtd2lkdGg6IG1pbig0MDBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig0cHgpOwogICAgY3Vyc29yOiBkZWZhdWx0OwogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItdG9hc3QuaXMtdmlzaWJsZSB7CiAgICBvcGFjaXR5OiAxOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwp9CgoubWpyLXRvYXN0LXRleHQgewogICAgZmxleDogMTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7Cn0KCi8qIFRvYXN0IGljb24gc3R5bGluZyAqLwoubWpyLXRvYXN0LXRleHQ6OmJlZm9yZSB7CiAgICBjb250ZW50OiBhdHRyKGRhdGEtaWNvbik7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGNvbG9yOiB2YXIoLS1tanItdG9hc3QtaWNvbi1jb2xvcik7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIG1pbi13aWR0aDogMTZweDsKfQoKLm1qci10b2FzdC1zdWNjZXNzIHsKICAgIC0tbWpyLXRvYXN0LXN0cmlwOiB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MsIHZhcigtLWNvbWZ5LXN0YXR1cy1zdWNjZXNzLCAjNGNhZjUwKSk7CiAgICAtLW1qci10b2FzdC1pY29uLWNvbG9yOiB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MsIHZhcigtLWNvbWZ5LXN0YXR1cy1zdWNjZXNzLCAjNGNhZjUwKSk7Cn0KCi5tanItdG9hc3QtZXJyb3IgewogICAgLS1tanItdG9hc3Qtc3RyaXA6IHZhcigtLW1qci1zdGF0dXMtZXJyb3IsIHZhcigtLWNvbWZ5LXN0YXR1cy1lcnJvciwgI2Y0NDMzNikpOwogICAgLS1tanItdG9hc3QtaWNvbi1jb2xvcjogdmFyKC0tbWpyLXN0YXR1cy1lcnJvciwgdmFyKC0tY29tZnktc3RhdHVzLWVycm9yLCAjZjQ0MzM2KSk7Cn0KCi5tanItdG9hc3Qtd2FybmluZyB7CiAgICAtLW1qci10b2FzdC1zdHJpcDogdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCB2YXIoLS1jb21meS1zdGF0dXMtd2FybmluZywgI2ZmYTcyNikpOwogICAgLS1tanItdG9hc3QtaWNvbi1jb2xvcjogdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCB2YXIoLS1jb21meS1zdGF0dXMtd2FybmluZywgI2ZmYTcyNikpOwp9CgoubWpyLXRvYXN0LWluZm8gewogICAgLS1tanItdG9hc3Qtc3RyaXA6IHZhcigtLW1qci1zdGF0dXMtaW5mbywgdmFyKC0tY29tZnktc3RhdHVzLWluZm8sICMyMTk2ZjMpKTsKICAgIC0tbWpyLXRvYXN0LWljb24tY29sb3I6IHZhcigtLW1qci1zdGF0dXMtaW5mbywgdmFyKC0tY29tZnktc3RhdHVzLWluZm8sICMyMTk2ZjMpKTsKfQoKCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zdW1tYXJ5LXRleHQgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXN1bW1hcnktcmlnaHQgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmbGV4LXdyYXA6IHdyYXA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1jb250ZXh0LXBpbGxzIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNXB4OwogICAgcm93LWdhcDogNHB4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNvbnRleHQtcGlsbCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDZweDsKICAgIHBhZGRpbmc6IDNweCA3cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1NSUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHZhcigtLW1qci1hY2NlbnQpIDEwJSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDE4JSwgdHJhbnNwYXJlbnQpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgZm9udC1zaXplOiAxMC41cHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIG1pbi1oZWlnaHQ6IDIycHg7CiAgICBtYXgtd2lkdGg6IDIyMHB4Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY29udGV4dC1waWxsOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDc1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDUwJSwgdmFyKC0tbWpyLWFjY2VudCkgMTQlKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNvbnRleHQtcGlsbC10ZXh0IHsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvcGFjaXR5OiAwLjkyOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY29udGV4dC1waWxsLXggewogICAgd2lkdGg6IDIwcHg7CiAgICBoZWlnaHQ6IDIwcHg7CiAgICBwYWRkaW5nOiAwOwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc1JSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42NSkpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLCBib3JkZXItY29sb3IgMTIwbXMgZWFzZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNvbnRleHQtcGlsbC14OmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDcwJSwgdmFyKC0tbWpyLWFjY2VudCkgMTAlKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZmZmKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXNlYXJjaC1waWxsIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgaGVpZ2h0OiAxLjc1cmVtOwogICAgcGFkZGluZzogMCAxMHB4OwogICAgd2lkdGg6IDEwMCU7CiAgICBtYXgtd2lkdGg6IG5vbmU7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcsIDAuNXJlbSk7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1pbnB1dC1iZywgcmdiYSgwLCAwLCAwLCAwLjI1KSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc2VhcmNoLXRvb2xzIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgZmxleDogMCAwIGF1dG87Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1wb3BvdmVyLWFuY2hvciB7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgfQoKLm1qci1hZ2VuZGEtaW5wdXQgewogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1pbnB1dC1iZywgcmdiYSgwLCAwLCAwLCAwLjI1KSk7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2RkZCk7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMnMgZWFzZSwgY29sb3IgMC4ycyBlYXNlLCBib3JkZXItY29sb3IgMC4ycyBlYXNlOwp9Ci5tanItYWdlbmRhLWlucHV0Lm1qci1hZ2VuZGEtZmlsbGVkIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKSA0MCUsIHZhcigtLW1qci1zdXJmYWNlLTIpIDYwJSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKSA4MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZmZmKTsKfQoubWpyLWFnZW5kYS1pbnB1dC5tanItYWdlbmRhLWVtcHR5IHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4NSUsIHRyYW5zcGFyZW50IDE1JSk7CiAgICBib3JkZXItY29sb3I6IHZhcigtLW1qci1ib3JkZXIpOwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSk7Cn0KCi5tanItYWdlbmRhLWNvbnRhaW5lciB7CiAgICB3aWR0aDogMTAwJTsKfQoKLm1qci1hZ2VuZGEtY2FsZW5kYXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDhweDsKICAgIHdpZHRoOiAxMDAlOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWFnZW5kYS1oZWFkZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKfQoKLm1qci1hZ2VuZGEtbW9udGggewogICAgZmxleDogMTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLm1qci1hZ2VuZGEtbmF2IHsKICAgIHdpZHRoOiAzMnB4OwogICAgaGVpZ2h0OiAyOHB4OwogICAgcGFkZGluZzogMDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7Cn0KCi5tanItYWdlbmRhLWdyaWQgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDcsIG1pbm1heCgwLCAxZnIpKTsKICAgIGdhcDogNnB4OwogICAgd2lkdGg6IDEwMCU7Cn0KCi5tanItYWdlbmRhLXdlZWtkYXkgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSk7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLm1qci1hZ2VuZGEtZGF5IHsKICAgIGhlaWdodDogMzBweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHRyYW5zcGFyZW50KTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgcGFkZGluZzogMDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLCBib3JkZXItY29sb3IgMTIwbXMgZWFzZSwgdHJhbnNmb3JtIDgwbXMgZWFzZTsKfQoKLm1qci1hZ2VuZGEtZGF5LWJhZGdlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogLTVweDsKICAgIHJpZ2h0OiAtNXB4OwogICAgbWluLXdpZHRoOiAxNnB4OwogICAgaGVpZ2h0OiAxNnB4OwogICAgcGFkZGluZzogMCA0cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6ICNlNTM5MzU7CiAgICBjb2xvcjogI2ZmZjsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCAjZTUzOTM1IDY1JSwgI2ZmZmZmZiAzNSUpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxpbmUtaGVpZ2h0OiAxNHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Owp9CgoubWpyLWFnZW5kYS1kYXk6aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNTUlLCB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKSA0NSUpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDQ1JSwgdmFyKC0tbWpyLWFjY2VudCwgdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKSkgMTAlKTsKfQoKLm1qci1hZ2VuZGEtZGF5OmFjdGl2ZSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTsKfQoKLm1qci1hZ2VuZGEtZGF5LS1ibGFuayB7CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLm1qci1hZ2VuZGEtZGF5LS1oYXMtYXNzZXRzIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpIDgwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpIDE4JSwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODIlKTsKfQoKLm1qci1hZ2VuZGEtZGF5LS1zZWxlY3RlZCB7CiAgICBib3JkZXItY29sb3I6IHZhcigtLW1qci1hY2NlbnQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKSA1NSUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1hZ2VuZGEtZm9vdGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBnYXA6IDhweDsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKfQoKLm1qci1hZ2VuZGEtY2xlYXIsCi5tanItYWdlbmRhLXJlZnJlc2ggewogICAgZmxleDogMTsKfQoKLm1qci1tZW51LAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWVudSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogNHB4Owp9CgoubWpyLW1lbnUtaXRlbSwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lbnUtaXRlbSB7CiAgICBhcHBlYXJhbmNlOiBub25lOwogICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBnYXA6IDEwcHg7CiAgICB3aWR0aDogMTAwJTsKICAgIHBhZGRpbmc6IDhweCAxMHB4OwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDEyMG1zIGVhc2UsIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLCB0cmFuc2Zvcm0gODBtcyBlYXNlOwp9CgoubWpyLW1lbnUtaXRlbTpob3ZlciwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lbnUtaXRlbTpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4MCUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1tZW51LWl0ZW06YWN0aXZlLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWVudS1pdGVtOmFjdGl2ZSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTsKfQoKLm1qci1tZW51LWl0ZW0tbGFiZWwsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1tZW51LWl0ZW0tbGFiZWwgewogICAgZmxleDogMSAxIGF1dG87CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLW1lbnUtaXRlbS1jaGVjaywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lbnUtaXRlbS1jaGVjayB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICB3aWR0aDogMTZweDsKICAgIGZsZXg6IDAgMCAxNnB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgb3BhY2l0eTogMDsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNzIlLCB2YXIoLS1jb250ZW50LWZnKSk7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDEyMG1zIGVhc2UsIGNvbG9yIDEyMG1zIGVhc2U7Cn0KCi5tanItbWVudS1pdGVtIC5waSwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lbnUtaXRlbSAucGkgewogICAgZm9udC1zaXplOiAxM3B4OwogICAgb3BhY2l0eTogMC45Owp9CgoubWpyLWNvbGxlY3Rpb25zLW1lbnUgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogNnB4Owp9CgoubWpyLW1lbnUtaXRlbS1sYWJlbC0taWNvbiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLW1lbnUtaXRlbS1sYWJlbC0taWNvbiAucGkgewogICAgd2lkdGg6IDE2cHg7CiAgICBmbGV4OiAwIDAgMTZweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLm1qci1tZW51LWl0ZW0tcmlnaHQgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgZmxleDogMCAwIGF1dG87CiAgICBtaW4td2lkdGg6IDE2cHg7CiAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7Cn0KCi5tanItbWVudS1pdGVtLWhpbnQgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnKSA2MiUsIHZhcigtLW1qci1tdXRlZCkpOwogICAgb3BhY2l0eTogMC43MjsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItbWVudS1pdGVtLWNoZWNrLS12aXNpYmxlLAoubWpyLW1lbnUtaXRlbS5pcy1hY3RpdmUgLm1qci1tZW51LWl0ZW0tY2hlY2sgewogICAgb3BhY2l0eTogMTsKfQoKLm1qci1tZW51LWRpdmlkZXIgewogICAgaGVpZ2h0OiAxcHg7CiAgICBtYXJnaW46IDRweCAwOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDgwJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW11dGVkIHsKICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgIG9wYWNpdHk6IDAuNzU7Cn0KCi5tanItc3RhdGUtYmxvY2sgewogICAgZm9udC1zaXplOiAxMHB4OwogICAgbGluZS1oZWlnaHQ6IDEuMzU7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkKTsKICAgIGJvcmRlcjogMXB4IGRhc2hlZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODUlLCB0cmFuc3BhcmVudCk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1zbSk7CiAgICBwYWRkaW5nOiA4cHggMTBweDsKICAgIG1hcmdpbjogNHB4IDA7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgNzAlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItc3RhdGUtYmxvY2suaXMtZXJyb3IsCi5tanItY29udGV4dC1tZW51LW5vdGUuaXMtZXJyb3IgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLWVycm9yKSA4MiUsIHZhcigtLWNvbnRlbnQtZmcpKTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtZXJyb3IpIDQ1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLWNvbGxlY3Rpb24tcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDsKICAgIHdpZHRoOiAxMDAlOwp9CgoubWpyLWRlbGV0ZS1idG4gewogICAgd2lkdGg6IDQycHg7CiAgICBmbGV4OiAwIDAgNDJweDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgcGFkZGluZzogMDsKICAgIG1hcmdpbi1sZWZ0OiA2cHg7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA2NSUsIHZhcigtLW1qci1zdGF0dXMtZXJyb3IpIDQ1JSk7Cn0KCi5tanItZGVsZXRlLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA0MCUsIHZhcigtLW1qci1zdGF0dXMtZXJyb3IpIDY1JSk7Cn0KCi5tanItZGVsZXRlLWJ0biAucGkgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLWVycm9yKSA3OCUsIHZhcigtLWNvbnRlbnQtZmcpKTsKfQoKLm1qci1zZWN0aW9uLXRpdGxlIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBwYWRkaW5nOiA2cHggMTBweCAycHg7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuNnB4OwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIG9wYWNpdHk6IDAuODg7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcpIDcyJSwgdmFyKC0tbWpyLW11dGVkKSk7Cn0KCi5tanItc2VjdGlvbi10aXRsZS0tY3lhbiB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsICM2ZmQ0ZmYgNzglLCB2YXIoLS1jb250ZW50LWZnKSk7Cn0KCi5tanItc2VjdGlvbi10aXRsZS0tdmlvbGV0IHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgI2M0OGRmZiA3OCUsIHZhcigtLWNvbnRlbnQtZmcpKTsKfQoKLm1qci1zZWN0aW9uLWhpbnQgewogICAgcGFkZGluZzogMCAxMHB4IDRweDsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcpIDU1JSwgdmFyKC0tbWpyLW11dGVkKSk7Cn0KCi5tanItbWVudS1pdGVtLS1zbWFydCwKLm1qci1tZW51LWl0ZW0tLWNsdXN0ZXIgewogICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9CgoubWpyLW1lbnUtaXRlbS0tY2x1c3RlciB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnKTsKfQoKLm1qci1tZW51LWl0ZW0tLXNtYXJ0IC5waSB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsICM2ZmQ0ZmYgNzQlLCB2YXIoLS1jb250ZW50LWZnKSk7Cn0KCi5tanItbWVudS1pdGVtLS1jbHVzdGVyIC5waSB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsICNjNDhkZmYgNzQlLCB2YXIoLS1jb250ZW50LWZnKSk7Cn0KCi5tanItbWVudS1pdGVtLS1zbWFydDpob3Zlcjpub3QoOmRpc2FibGVkKSwKLm1qci1tZW51LWl0ZW0tLWNsdXN0ZXI6aG92ZXI6bm90KDpkaXNhYmxlZCkgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODAlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTUlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItY2x1c3Rlci1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgIHBhZGRpbmc6IDZweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1zbSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA3MCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1jbHVzdGVyLXRodW1icyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiAzcHg7CiAgICBmbGV4LXNocmluazogMDsKfQoKLm1qci1jbHVzdGVyLXRodW1iIHsKICAgIHdpZHRoOiAyOHB4OwogICAgaGVpZ2h0OiAyOHB4OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICBvcGFjaXR5OiAwLjg1OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDYwJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWNsdXN0ZXItaW5mbyB7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWNsdXN0ZXItbmFtZSB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnKTsKfQoKLm1qci1jbHVzdGVyLWNvdW50IHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZykgNTglLCB2YXIoLS1tanItbXV0ZWQpKTsKfQoKLm1qci1jbHVzdGVyLWNyZWF0ZS1idG4gewogICAgZmxleC1zaHJpbms6IDA7CiAgICBwYWRkaW5nOiAzcHggOHB4OwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTUlLCB0cmFuc3BhcmVudCk7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZyk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDEyMG1zIGVhc2UsIGJhY2tncm91bmQgMTIwbXMgZWFzZSwgb3BhY2l0eSAxMjBtcyBlYXNlOwp9CgoubWpyLWNsdXN0ZXItY3JlYXRlLWJ0bjpkaXNhYmxlZCB7CiAgICBvcGFjaXR5OiAwLjYyOwogICAgY3Vyc29yOiBkZWZhdWx0Owp9CgoubWpyLWNsdXN0ZXItY3JlYXRlLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4MCUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA2MiUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXNlYXJjaC1pY29uIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zZWFyY2gtaWNvbiAucGkgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgbGluZS1oZWlnaHQ6IDE7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zZWFyY2gtcGlsbCAubWpyLWlucHV0IHsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKICAgIGZvbnQtc2l6ZTogMTJweCAhaW1wb3J0YW50OwogICAgbGluZS1oZWlnaHQ6IDEuMiAhaW1wb3J0YW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc2VhcmNoLXBpbGw6Zm9jdXMtd2l0aGluIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDY1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAxOCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWJyb3dzZSB7CiAgICBtYXJnaW4tdG9wOiAwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tZ3JpZC1zY3JvbGwgewogICAgcGFkZGluZy1yaWdodDogNHB4OwogICAgc2Nyb2xsYmFyLWd1dHRlcjogc3RhYmxlOwp9CgoKLyogR3JpZCBsYXlvdXQgKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQgewogICAgZGlzcGxheTogZ3JpZDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIC8qIEF2b2lkIG92ZXJmbG93IHdoZW4gdGhlIHBhbmVsIGJlY29tZXMgbmFycm93ZXIgdGhhbiB0aGUgbWluIGNhcmQgc2l6ZSAqLwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgobWluKDEwMCUsIHZhcigtLW1qci1ncmlkLW1pbi1zaXplLCAxODBweCkpLCAxZnIpKTsKICAgIGdhcDogdmFyKC0tbWpyLWdyaWQtZ2FwLCAxMHB4KTsKICAgIG1hcmdpbi10b3A6IDZweDsKICAgIG1pbi1oZWlnaHQ6IDA7Cn0KCi8qIENhcmQgc2VsZWN0aW9uICsgZm9jdXMgKGtlZXBzIGEgdmlzaWJsZSBpbmRpY2F0b3Igd2hlbiBzaWRlYmFyIGlzIG9wZW4pICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIHsKICAgIG91dGxpbmU6IG5vbmU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkLmlzLXNlbGVjdGVkIHsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgMCAwIDAgM3B4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItY2FyZC1zZWxlY3Rpb24tY29sb3IpIDgwJSwgdmFyKC0tY29udGVudC1mZykpLAogICAgICAgIDAgMCAwIDZweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKSAzMCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAwIDAgMjBweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKSA0MCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAwIDEwcHggMjhweCByZ2JhKDAsMCwwLDAuMjgpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbGcpOwogICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkyKSAhaW1wb3J0YW50OwogICAgei1pbmRleDogMTA7CiAgICBvdXRsaW5lOiAycHggc29saWQgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQ6Zm9jdXMtdmlzaWJsZSB7CiAgICBib3gtc2hhZG93OgogICAgICAgIDAgMCAwIDNweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgODAlLCB2YXIoLS1jb250ZW50LWZnKSksCiAgICAgICAgMCAwIDAgNnB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAzMCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAwIDAgMjBweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNDAlLCB0cmFuc3BhcmVudCksCiAgICAgICAgMCAxMHB4IDI4cHggcmdiYSgwLDAsMCwwLjI4KTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLWxnKTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC45MikgIWltcG9ydGFudDsKICAgIHotaW5kZXg6IDEwOwp9CgpAa2V5ZnJhbWVzIG1qci1saXZlLXBsYWNlaG9sZGVyLXNoZWVuIHsKICAgIDAlIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTU4JSk7CiAgICAgICAgb3BhY2l0eTogMC4xODsKICAgIH0KICAgIDUwJSB7CiAgICAgICAgb3BhY2l0eTogMC4zNDsKICAgIH0KICAgIDEwMCUgewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg1OCUpOwogICAgICAgIG9wYWNpdHk6IDAuMTg7CiAgICB9Cn0KCkBrZXlmcmFtZXMgbWpyLWxpdmUtcGxhY2Vob2xkZXItcHVsc2UgewogICAgMCUsCiAgICAxMDAlIHsKICAgICAgICBib3gtc2hhZG93OgogICAgICAgICAgICAwIDAgMCAxcHggcmdiYSgxMTgsIDIxNCwgMjU1LCAwLjM0KSwKICAgICAgICAgICAgMCAxMHB4IDI0cHggcmdiYSgwLCAwLCAwLCAwLjI0KTsKICAgIH0KICAgIDUwJSB7CiAgICAgICAgYm94LXNoYWRvdzoKICAgICAgICAgICAgMCAwIDAgMXB4IHJnYmEoMTE4LCAyMTQsIDI1NSwgMC41MiksCiAgICAgICAgICAgIDAgMCAwIDRweCByZ2JhKDExOCwgMjE0LCAyNTUsIDAuMTIpLAogICAgICAgICAgICAwIDEycHggMzBweCByZ2JhKDAsIDAsIDAsIDAuMjgpOwogICAgfQp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1saXZlLXBsYWNlaG9sZGVyPSJ0cnVlIl0gewogICAgYW5pbWF0aW9uOiBtanItbGl2ZS1wbGFjZWhvbGRlci1wdWxzZSAxLjlzIGVhc2UtaW4tb3V0IGluZmluaXRlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1saXZlLXBsYWNlaG9sZGVyPSJ0cnVlIl0gLm1qci10aHVtYiB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbGl2ZS1wbGFjZWhvbGRlci13YXNoIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAtOCU7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDE7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgKICAgICAgICAgICAgMTE1ZGVnLAogICAgICAgICAgICByZ2JhKDk4LCAxOTksIDI1NSwgMCkgMCUsCiAgICAgICAgICAgIHJnYmEoOTgsIDE5OSwgMjU1LCAwLjA4KSAzMCUsCiAgICAgICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNCkgNTAlLAogICAgICAgICAgICByZ2JhKDk4LCAxOTksIDI1NSwgMC4xMikgNzAlLAogICAgICAgICAgICByZ2JhKDk4LCAxOTksIDI1NSwgMCkgMTAwJQogICAgICAgICk7CiAgICBhbmltYXRpb246IG1qci1saXZlLXBsYWNlaG9sZGVyLXNoZWVuIDIuMnMgbGluZWFyIGluZmluaXRlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbGl2ZS1waWxsIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNnB4OwogICAgcmlnaHQ6IDZweDsKICAgIHotaW5kZXg6IDEyOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBtaW4taGVpZ2h0OiAyNHB4OwogICAgcGFkZGluZzogMCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTAsIDE0LCAyMCwgMC43OCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDExOCwgMjE0LCAyNTUsIDAuMzQpOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45Nik7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDFlbTsKICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMjQpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWxpdmUtcGlsbC1kb3QgewogICAgd2lkdGg6IDdweDsKICAgIGhlaWdodDogN3B4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiAjNzZkNmZmOwogICAgYm94LXNoYWRvdzogMCAwIDAgNHB4IHJnYmEoMTE4LCAyMTQsIDI1NSwgMC4xNik7CiAgICBmbGV4OiAwIDAgYXV0bzsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItbGl2ZS1wbGFjZWhvbGRlcj0idHJ1ZSJdIC5tanItYXNzZXQtc3RhdHVzLWRvdCB7CiAgICBhbmltYXRpb246IG1qci1saXZlLXBsYWNlaG9sZGVyLXB1bHNlIDEuOXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7Cn0KCi8qIEdyaWQgbG9hZGluZyBvdmVybGF5ICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkLWxvYWRpbmctb3ZlcmxheSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgIzAwMCAzNSUsIHRyYW5zcGFyZW50KTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZmZmKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjNweDsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLWxnKTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDJweCk7Cn0KCkBrZXlmcmFtZXMgbWpyLXNrZWxldG9uLXNoaW1tZXIgewogICAgMCUgewogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDEyMCUgMDsKICAgIH0KICAgIDEwMCUgewogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjAlIDA7CiAgICB9Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkLXNrZWxldG9uLXNoaW1tZXIgewogICAgd2lsbC1jaGFuZ2U6IGJhY2tncm91bmQtcG9zaXRpb247Cn0KCi8qIEdlbmVyaWMgaGVhZGluZ3MgaW5zaWRlIHBhbmVsICovCi5tanItYXNzZXRzLW1hbmFnZXIgaDMsCi5tanItYXNzZXRzLW1hbmFnZXIgaDQgewogICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMWVtOwp9CgovKiBQYW5lbHMgKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXBhbmVsIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1sZyk7CiAgICBib3gtc2hhZG93OiB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtYm94LXNoYWRvdywgMCA4cHggMjRweCByZ2JhKDAsIDAsIDAsIDAuMjUpKTsKfQoKLyogVG9vbGJhciAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdG9vbGJhciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIHBhZGRpbmc6IHZhcigtLW1qci1wYWQtbWQpOwp9CgovKiBCdXR0b25zICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1idG4gewogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMik7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1tZCk7CiAgICBwYWRkaW5nOiA3cHggMTBweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDEyMG1zIGVhc2UsIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLCB0cmFuc2Zvcm0gODBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYnRuOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDcwJSwgdmFyKC0tbWpyLWFjY2VudCkgMTAlKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWJ0bjphY3RpdmUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDFweCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1idG46ZGlzYWJsZWQgewogICAgb3BhY2l0eTogMC41NTsKICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1idG4ubWpyLXByaW1hcnkgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNjAlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMTQlLCB2YXIoLS1tanItc3VyZmFjZS0yKSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1idG4gewogICAgLyogT3ZlcnJpZGUgaW5saW5lIHN0eWxlcyBpZiBwcmVzZW50ICovCiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTIpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbWQpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYnRuOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDcwJSwgdmFyKC0tbWpyLWFjY2VudCkgMTAlKTsKfQoKLyogSW5wdXRzIC8gc2VsZWN0cyAodXNlZCBpbnNpZGUgcG9ydGFsZWQgcG9wb3ZlcnMgdG9vKSAqLwoubWpyLWlucHV0LAoubWpyLXNlbGVjdCwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWlucHV0LAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItc2VsZWN0IHsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LWlucHV0LWJnLCByZ2JhKDAsIDAsIDAsIDAuMjUpKTsKICAgIGNvbG9yOiB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLW1kKTsKICAgIHBhZGRpbmc6IDhweCAxMHB4OwogICAgZm9udC1zaXplOiAxM3B4OwogICAgb3V0bGluZTogbm9uZTsKICAgIHdpZHRoOiAxMDAlOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaW5wdXQ6OnBsYWNlaG9sZGVyIHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLW11dGVkKSA4MCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1pbnB1dDpmb2N1cywKLm1qci1zZWxlY3Q6Zm9jdXMsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pbnB1dDpmb2N1cywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXNlbGVjdDpmb2N1cyB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA2NSUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMjAlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItaW5wdXQsCi5tanItc2VsZWN0LAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaW5wdXQsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1zZWxlY3QgewogICAgLyogT3ZlcnJpZGUgaW5saW5lIHN0eWxlcyBpZiBwcmVzZW50ICovCiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LWlucHV0LWJnLCByZ2JhKDAsIDAsIDAsIDAuMjUpKTsKICAgIGNvbG9yOiB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLW1kKTsKICAgIHBhZGRpbmc6IDhweCAxMHB4Owp9CgovKiBUYWJzOiBvdmVycmlkZGVuIGFib3ZlIHdpdGggcXVldWUtbGlrZSBzdHlsZSAqLwoKLyogUmVtb3ZlZCByZWR1bmRhbnQgdGFiIGRlY2xhcmF0aW9ucyB0aGF0IHdlcmUgdXNpbmcgIWltcG9ydGFudCAqLwoKLyogTXV0ZWQgdGV4dCBoZWxwZXIgKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW11dGVkIHsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQpOwp9CgovKiBHcmlkICsgY2FyZHMgKG92ZXJyaWRlIGlubGluZSBzdHlsZXMgZnJvbSBDYXJkLmpzKSAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyICNtanItYXNzZXRzLWdyaWQgewogICAgZ2FwOiAxMHB4ICFpbXBvcnRhbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xKSAhaW1wb3J0YW50OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcikgIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLWxnKSAhaW1wb3J0YW50OwogICAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50OwogICAgbWluLXdpZHRoOiAwOwogICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDEyMG1zIGVhc2UsIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLCBib3gtc2hhZG93IDEyMG1zIGVhc2UgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQ6aG92ZXIsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKSA1NSUsIHZhcigtLW1qci1ib3JkZXIpKSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWpyLWNhcmQtaG92ZXItY29sb3IpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiAwIDhweCAyMnB4IHJnYmEoMCwgMCwgMCwgMC4yNSkgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgaW1nLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCB2aWRlbywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRodW1iLW1lZGlhIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50OwogICAgb2JqZWN0LWZpdDogY292ZXIgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRodW1iIHsKICAgIHdpZHRoOiAxMDAlOwogICAgYXNwZWN0LXJhdGlvOiAxIC8gMTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA4MCUsIHRyYW5zcGFyZW50KTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi8qIEtlZXAgZ2VuZXJhdGlvbi10aW1lIGJhZGdlIHBpbm5lZCB0byB0aGUgdGh1bWJuYWlsIGNvcm5lciBhY3Jvc3MgZ3JpZC9mZWVkIHZhcmlhbnRzLgogICBUaGUgIWltcG9ydGFudCBvdmVycmlkZXMgYXJlIGludGVudGlvbmFsOiBHZW5UaW1lQmFkZ2UudnVlIHVzZXMgPHN0eWxlIHNjb3BlZD4gd2hvc2UKICAgaGFzaGVkIGNsYXNzIGhhcyB0aGUgc2FtZSBzcGVjaWZpY2l0eSBhcyBnbG9iYWwgc2VsZWN0b3JzLiBXaXRob3V0ICFpbXBvcnRhbnQsIGEKICAgY29uZmxpY3RpbmcgcnVsZSAoZS5nLiBmcm9tIGEgdGhlbWUgZXh0ZW5zaW9uIG9yIGFuIG9sZGVyIG5vbi1zY29wZWQgY29udGV4dCkgdGhhdCBzZXRzCiAgIGxlZnQ6MC90b3A6MCB3b3VsZCB3aW4uIGxlZnQ6YXV0byArIHRvcDphdXRvIGV4cGxpY2l0bHkgY2FuY2VsIGFueSBzdWNoIGFjY2lkZW50YWwgcmVzZXQuICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci10aHVtYiA+IC5tanItZ2VudGltZS1iYWRnZSwKLm1qci1ib3R0b20tZmVlZCAubWpyLXRodW1iID4gLm1qci1nZW50aW1lLWJhZGdlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50OwogICAgcmlnaHQ6IDZweCAhaW1wb3J0YW50OwogICAgYm90dG9tOiA2cHggIWltcG9ydGFudDsKICAgIGxlZnQ6IGF1dG8gIWltcG9ydGFudDsKICAgIHRvcDogYXV0byAhaW1wb3J0YW50OwogICAgei1pbmRleDogMTAgIWltcG9ydGFudDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDJweCA2cHggIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IDRweCAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjUpICFpbXBvcnRhbnQ7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpICFpbXBvcnRhbnQ7CiAgICBmb250LXdlaWdodDogODAwICFpbXBvcnRhbnQ7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMTVlbTsKICAgIHRleHQtc2hhZG93OgogICAgICAgIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuOSksCiAgICAgICAgMCAwIDEwcHggY29sb3ItbWl4KGluIHNyZ2IsIGN1cnJlbnRDb2xvciAzNSUsIHRyYW5zcGFyZW50KTsKfQoKLyogS2VlcCByYXRpbmcvdGFncyBiYWRnZXMgYW5jaG9yZWQgZXZlbiB3aGVuIHNjb3BlZCBWdWUgc3R5bGVzIGFyZSBub3QgYXBwbGllZCBhZnRlciByZWxvYWQuCiAgIERvIG5vdCBmb3JjZSBkaXNwbGF5IGhlcmUgc28gZ3JpZCB2aXNpYmlsaXR5IHRvZ2dsZXMgKC5tanItc2hvdy1iYWRnZXMtKikgc3RpbGwgY29udHJvbCBzaG93L2hpZGUuICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci10aHVtYiA+IC5tanItcmF0aW5nLWJhZGdlLAoubWpyLWJvdHRvbS1mZWVkIC5tanItdGh1bWIgPiAubWpyLXJhdGluZy1iYWRnZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsKICAgIHRvcDogNnB4ICFpbXBvcnRhbnQ7CiAgICByaWdodDogNnB4ICFpbXBvcnRhbnQ7CiAgICBsZWZ0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICBib3R0b206IGF1dG8gIWltcG9ydGFudDsKICAgIHotaW5kZXg6IDEwICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNTUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjI1KTsKICAgIHRleHQtc2hhZG93OiAwIDJweCA2cHggcmdiYSgwLCAwLCAwLCAwLjYpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGh1bWIgPiAubWpyLXRhZ3MtYmFkZ2UsCi5tanItYm90dG9tLWZlZWQgLm1qci10aHVtYiA+IC5tanItdGFncy1iYWRnZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsKICAgIGxlZnQ6IDZweCAhaW1wb3J0YW50OwogICAgYm90dG9tOiA2cHggIWltcG9ydGFudDsKICAgIHJpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICB0b3A6IGF1dG8gIWltcG9ydGFudDsKICAgIHotaW5kZXg6IDEwICFpbXBvcnRhbnQ7CiAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDU2cHgpOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpOwogICAgYm94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRodW1iLXBsYXkgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBkaXNwbGF5OiBncmlkOwogICAgcGxhY2UtaXRlbXM6IGNlbnRlcjsKICAgIGZvbnQtc2l6ZTogMjhweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuOSk7CiAgICB0ZXh0LXNoYWRvdzogMCAwIDEwcHggcmdiYSgwLDAsMCwwLjcpOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDEyMG1zIGVhc2U7Cn0KCi8qIOKUgOKUgOKUgCBIb3ZlciBpbmZvIG92ZXJsYXkgKHBvc2l0aXZlIHByb21wdCArIGdlbiB0aW1lKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgU2xpZGVzIHVwIGZyb20gdGhlIGJvdHRvbSBvZiAubWpyLXRodW1iIG9uIGNhcmQgaG92ZXIuCiAgIHBvaW50ZXItZXZlbnRzOiBub25lICDihpIgbmV2ZXIgYmxvY2tzIHZpZGVvIG1vdXNlZW50ZXIgLyBwbGF5LW9uLWhvdmVyLgogICB6LWluZGV4OiAyICAgICAgICAgICDihpIgc2l0cyBhYm92ZSB0aGUgdGh1bWJuYWlsIGltYWdlLCBiZWxvdyB0aGUgcGxheSBpY29uLgogICBDb250cm9sbGVkIGJ5IHRoZSAubWpyLXNob3ctaG92ZXItaW5mbyBjbGFzcyBvbiB0aGUgZ3JpZCBjb250YWluZXIsIHdoaWNoCiAgIGlzIHRvZ2dsZWQgdmlhIHRoZSAiU2hvdyBwcm9tcHQgb24gaG92ZXIiIHNldHRpbmcuCiAgIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZC1ob3Zlci1pbmZvIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGJvdHRvbTogMDsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIHBhZGRpbmc6IDIycHggOHB4IDdweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHRyYW5zcGFyZW50IDAlLCByZ2JhKDAsIDAsIDAsIDAuNzgpIDEwMCUpOwogICAgY29sb3I6ICNmZmY7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBsaW5lLWhlaWdodDogMS40OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBvcGFjaXR5OiAwOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDVweCk7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDE1MG1zIGVhc2UsIHRyYW5zZm9ybSAxNTBtcyBlYXNlOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDNweDsKICAgIHotaW5kZXg6IDI7Cn0KLyogT25seSByZXZlYWwgb24gaG92ZXIgd2hlbiB0aGUgc2V0dGluZyBpcyBlbmFibGVkIChjbGFzcyBvbiBncmlkIGNvbnRhaW5lcikgKi8KLm1qci1ncmlkLm1qci1zaG93LWhvdmVyLWluZm8gLm1qci1jYXJkOmhvdmVyIC5tanItY2FyZC1ob3Zlci1pbmZvIHsKICAgIG9wYWNpdHk6IDE7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7Cn0KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQtaG92ZXItaW5mbyAubWpyLWhvdmVyLXByb21wdCB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgZGlzcGxheTogLXdlYmtpdC1ib3g7CiAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDI7CiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsOwogICAgd29yZC1icmVhazogYnJlYWstd29yZDsKICAgIG9wYWNpdHk6IDAuOTsKICAgIGZvbnQtc2l6ZTogOS41cHg7Cn0KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQtaG92ZXItaW5mbyAubWpyLWhvdmVyLWdlbnRpbWUgewogICAgY29sb3I6IHJnYmEoMjU1LCAyMTAsIDEyMCwgMC45NSk7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgZm9udC1zaXplOiA5cHg7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMmVtOwp9CkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7CiAgICAubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZC1ob3Zlci1pbmZvIHsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDBtczsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICB9Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkLW1ldGEgewogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBmb250LXNpemU6IDExcHg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkLWZpbGVuYW1lIHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIG1pbi13aWR0aDogMDsKICAgIG1hcmdpbi1ib3R0b206IDJweDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQtZGV0YWlscyB7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICBvcGFjaXR5OiAwLjg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkLWZpbGVuYW1lLXRleHQgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG1pbi13aWR0aDogMDsKfQoKLyogUmF0aW5nICYgVGFncyBFZGl0b3JzICovCkBrZXlmcmFtZXMgZmFkZUluIHsKICAgIGZyb20gewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00cHgpOwogICAgfQogICAgdG8gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgfQp9Ci8qKgogKiBBcmNoaXZlZCBDU1MgU3R5bGVzIC0gUmF0aW5nIGFuZCBUYWdzCiAqIFRoZXNlIHN0eWxlcyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGVtZS1jb21meS5jc3MKICovCgovKiBBbmltYXRpb25zICovCkBrZXlmcmFtZXMgc2xpZGVJblJpZ2h0IHsKICAgIGZyb20gewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgfQogICAgdG8gewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgfQp9CgovKiBQb3BvdmVycyAqLwoubWpyLXJhdGluZy1wb3BvdmVyLAoubWpyLXRhZ3MtcG9wb3ZlciB7CiAgICBhbmltYXRpb246IGZhZGVJbiAwLjJzIGVhc2U7Cn0KCi5tanItcmF0aW5nLXBvcG92ZXIsCi5tanItdGFncy1wb3BvdmVyIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZywgMC41cmVtKTsKICAgIGJveC1zaGFkb3c6IDAgMTJweCAyOHB4IHJnYmEoMCwwLDAsMC4zNSk7CiAgICBwYWRkaW5nOiA4cHg7Cn0KCi8qIFJhdGluZyBFZGl0b3IgKi8KLm1qci1yYXRpbmctZWRpdG9yIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNHB4OwogICAgcGFkZGluZzogMnB4Owp9CgoubWpyLXJhdGluZy1zdGFyIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBmb250LXNpemU6IDIwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBwYWRkaW5nOiA0cHggNnB4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2RkZCk7CiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMTIwbXMgZWFzZSwgYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLCBib3JkZXItY29sb3IgMTIwbXMgZWFzZSwgY29sb3IgMTIwbXMgZWFzZTsKfQoKLm1qci1yYXRpbmctc3Rhcjpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpIDM1JSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbWZ5LW1lbnUtc2Vjb25kYXJ5LWJnLCAjMzMzKSA2NSUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1yYXRpbmctZWRpdG9yIC5tanItcmF0aW5nLXN0YXI6aG92ZXIgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpICFpbXBvcnRhbnQ7Cn0KCi5tanItcmF0aW5nLWVkaXRvciAubWpyLXJhdGluZy1zdGFyOmFjdGl2ZSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTUpICFpbXBvcnRhbnQ7Cn0KCi8qIFRhZ3MgRWRpdG9yICovCi5tanItdGFncy1lZGl0b3IgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDhweDsKICAgIHBhZGRpbmc6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgOTIlLCB0cmFuc3BhcmVudCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLXNtKTsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDIwcHggcmdiYSgwLCAwLCAwLCAwLjM1KTsKICAgIG1pbi13aWR0aDogMjUwcHg7CiAgICBtYXgtd2lkdGg6IG1pbigzNTBweCwgY2FsYygxMDB2dyAtIDIwcHgpKTsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0Owp9CgoubWpyLXRhZ3MtZWRpdG9yLmlzLWRpc2FibGVkIHsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgb3BhY2l0eTogMC43Owp9CgoubWpyLXRhZ3MtZGlzcGxheSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAgZ2FwOiA2cHg7CiAgICBtaW4taGVpZ2h0OiAzMnB4Owp9CgoubWpyLXRhZ3MtZW1wdHkgewogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCk7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7Cn0KCi5tanItdGFnLWNoaXAgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDI0JSwgdHJhbnNwYXJlbnQpOwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDQwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGNvbG9yOiB2YXIoLS1tanItdGFnLWNvbG9yKTsKICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7Cn0KCi5tanItdGFnLWNoaXAtcmVtb3ZlIHsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgYm9yZGVyOiAwOwogICAgYm9yZGVyLXJhZGl1czogMDsKICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICBjb2xvcjogaW5oZXJpdDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIG9wYWNpdHk6IDAuNzsKfQoKLm1qci10YWctY2hpcC1yZW1vdmU6ZGlzYWJsZWQgewogICAgY3Vyc29yOiBkZWZhdWx0Owp9CgoubWpyLXRhZ3MtaW5wdXQtd3JhcCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5tanItdGFnLWlucHV0IHsKICAgIHdpZHRoOiAxMDAlOwogICAgcGFkZGluZzogNnB4IDhweDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA3NSUsIHRyYW5zcGFyZW50KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcpOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci10YWctaW5wdXQ6Zm9jdXMgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDg4JSwgdHJhbnNwYXJlbnQpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHZhcigtLW1qci1hY2NlbnQpICFpbXBvcnRhbnQ7Cn0KCi5tanItdGFnLWNoaXA6aG92ZXIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDM0JSwgdHJhbnNwYXJlbnQpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItdGFnLWNvbG9yKSA2MCUsIHZhcigtLW1qci1ib3JkZXIpKSAhaW1wb3J0YW50Owp9CgoubWpyLXRhZ3MtZHJvcGRvd24gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAxMDAlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgbWFyZ2luLXRvcDogNHB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDkyJSwgdHJhbnNwYXJlbnQpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBtYXgtaGVpZ2h0OiAxNTBweDsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICB6LWluZGV4OiAxMDAwOwp9CgoubWpyLXRhZy1zdWdnZXN0aW9uIHsKICAgIHBhZGRpbmc6IDZweCA4cHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGNvbG9yOiB2YXIoLS1tanItdGFnLWNvbG9yKTsKICAgIGZvbnQtc2l6ZTogMTJweDsKfQoKLm1qci10YWctc3VnZ2VzdGlvbi5pcy1hY3RpdmUsCi5tanItdGFnLXN1Z2dlc3Rpb246aG92ZXIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDI4JSwgdHJhbnNwYXJlbnQpICFpbXBvcnRhbnQ7Cn0KCi8qIEJhZGdlcyBJbnRlcmFjdGl2ZSAqLwoubWpyLXJhdGluZy1iYWRnZSwKLm1qci10YWdzLWJhZGdlIHsKICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7Cn0KCi5tanItcmF0aW5nLWJhZGdlIHsKICAgIGNvbG9yOiB2YXIoLS1tanItcmF0aW5nLWNvbG9yKSAhaW1wb3J0YW50Owp9CgoubWpyLXRhZ3MtYmFkZ2UgewogICAgY29sb3I6IHZhcigtLW1qci10YWctY29sb3IpICFpbXBvcnRhbnQ7Cn0KCi5tanItcmF0aW5nLWJhZGdlOmhvdmVyLAoubWpyLXRhZ3MtYmFkZ2U6aG92ZXIgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KTsKICAgIGJveC1zaGFkb3c6IDAgNHB4IDhweCByZ2JhKDAsIDAsIDAsIDAuNSk7Cn0KCi8qIFNjcm9sbGJhciBmb3IgdGFncyBkcm9wZG93biAqLwoubWpyLXRhZ3MtZHJvcGRvd246Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIHdpZHRoOiA2cHg7Cn0KCi5tanItdGFncy1kcm9wZG93bjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDY1JSwgdHJhbnNwYXJlbnQpOwogICAgYm9yZGVyLXJhZGl1czogM3B4Owp9CgoubWpyLXRhZ3MtZHJvcGRvd246Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItdGFnLWNvbG9yKSA0OCUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKfQoKLm1qci10YWdzLWRyb3Bkb3duOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXRhZy1jb2xvcikgNjUlLCB2YXIoLS1tanItYm9yZGVyKSk7Cn0KCi8qIFNpZGViYXIgKGNhbiBiZSBsZWZ0IG9yIHJpZ2h0KSAqLwoubWpyLXNpZGViYXIgewogICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKfQoKLm1qci1zaWRlYmFyLmlzLW9wZW4gewogICAgLyogQm9yZGVyIGlzIHNldCBkeW5hbWljYWxseSBiYXNlZCBvbiBwb3NpdGlvbiAqLwp9CgoubWpyLXNpZGViYXIgLm1qci1zaWRlYmFyLWhlYWRlciB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0yLCAjMzMzKTsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpKTsKfQoKLm1qci1zaWRlYmFyIC5tanItc2lkZWJhci1jb250ZW50IHsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEsICMyYTJhMmEpOwp9CgoubWpyLXNpZGViYXIgLm1qci1zaWRlYmFyLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIHdpZHRoOiA4cHg7Cn0KCi5tanItc2lkZWJhciAubWpyLXNpZGViYXItY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjMpOwp9CgoubWpyLXNpZGViYXIgLm1qci1zaWRlYmFyLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKfQoKLm1qci1zaWRlYmFyIC5tanItc2lkZWJhci1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7Cn0KCi8qIEN1c3RvbSBSb290cyBQb3BvdmVyIFN0eWxpbmcgKi8KLm1qci1jdXN0b20tcG9wb3ZlciB7CiAgICBtaW4td2lkdGg6IDMwMHB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSwgdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSkpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgdmFyKC0tYm9yZGVyLWNvbG9yLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKSk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcsIDAuNXJlbSk7CiAgICBib3gtc2hhZG93OiAwIDEycHggMjhweCByZ2JhKDAsMCwwLDAuMzUpOwogICAgei1pbmRleDogdmFyKC0tbWpyLXBvcG92ZXItei1pbmRleCk7CiAgICBwYWRkaW5nOiAxMnB4Owp9CgoubWpyLWN1c3RvbS1wb3BvdmVyIC5tanItcG9wb3Zlci1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgZmxleC13cmFwOiB3cmFwOwp9CgoubWpyLWN1c3RvbS1wb3BvdmVyIC5tanItcG9wb3Zlci1yb3c6bGFzdC1jaGlsZCB7CiAgICBtYXJnaW4tYm90dG9tOiAwOwp9CgoubWpyLWN1c3RvbS1wb3BvdmVyIC5tanItcG9wb3Zlci1sYWJlbCB7CiAgICB3aWR0aDogNjBweDsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHZhcigtLWRlc2NyaXAtdGV4dCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSkpOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDUwMDsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLXNlbGVjdCB7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWN1c3RvbS1wb3BvdmVyIC5tanItYnRuIHsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDA7CiAgICBtYXJnaW4tcmlnaHQ6IDVweDsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLWJ0bjpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1yaWdodDogMDsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLWJ0bi5tanItcHJpbWFyeSB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMTglLCB2YXIoLS1tanItc3VyZmFjZS0yKSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA2MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLWJ0bi5tanItcHJpbWFyeTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMjUlLCB2YXIoLS1tanItc3VyZmFjZS0yKSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA4MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKfQoKLm1qci1zaWRlYmFyIC5tanItc2lkZWJhci1zZWN0aW9uIHsKICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7Cn0KCi5tanItc2lkZWJhciAubWpyLXNpZGViYXItc2VjdGlvbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMykgIWltcG9ydGFudDsKfQoKLyogSW5saW5lIFNpZGViYXIgKHdpZHRoLWJhc2VkIHRyYW5zaXRpb25zIGxpa2UgYXJjaGl2ZWQgdmVyc2lvbikgKi8KLm1qci1pbmxpbmUtc2lkZWJhciB7CiAgICB3aWR0aDogMDsKICAgIG1pbi13aWR0aDogMDsKICAgIG1heC13aWR0aDogNDgwcHg7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSwgIzJhMmEyYSk7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIHRyYW5zaXRpb246IHdpZHRoIDAuM3MgZWFzZSwgbWluLXdpZHRoIDAuM3MgZWFzZTsKfQoKLm1qci1pbmxpbmUtc2lkZWJhci5pcy1vcGVuIHsKICAgIHdpZHRoOiA0MDBweDsKICAgIG1pbi13aWR0aDogMjYwcHg7Cn0KCi8qIFNwYWNlIGJldHdlZW4gc2lkZWJhciBhbmQgZ3JpZCAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tYnJvd3NlIHsKICAgIGdhcDogMDsKfQoKLyogQm9yZGVyIGJhc2VkIG9uIHBvc2l0aW9uICovCi5tanItaW5saW5lLXNpZGViYXJbZGF0YS1wb3NpdGlvbj0ibGVmdCJdIHsKICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikpOwp9CgoubWpyLWlubGluZS1zaWRlYmFyW2RhdGEtcG9zaXRpb249InJpZ2h0Il0gewogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpKTsKfQoKLyogU2lkZWJhciBwbGFjZWhvbGRlciAqLwoubWpyLXNpZGViYXItcGxhY2Vob2xkZXIgewogICAgcGFkZGluZzogMjBweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHJnYmEoMjU1LDI1NSwyNTUsMC42NSkpOwogICAgZm9udC1zaXplOiAxNHB4OwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLyogPT09PT09PT09PSBWaWV3ZXIgQ29tcG9uZW50ID09PT09PT09PT0gKi8KLm1qci12aWV3ZXItb3ZlcmxheSB7CiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICB0b3A6IDA7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICBib3R0b206IDA7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOTUpOwogICAgLyogU2l0IGFib3ZlIE1GViAoMTAwMDApIHNvIHRoZSBmdWxsIHZpZXdlciBhbHdheXMgY292ZXJzIHRoZSBmbG9hdGluZyBwYW5lbCAqLwogICAgei1pbmRleDogMTAwMDE7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwp9Ci8qIEZhZGUtaW46IGFuaW1hdGlvbiByZS10cmlnZ2VycyBlYWNoIHRpbWUgSlMgc3dpdGNoZXMgZGlzcGxheSBiYWNrIHRvIGZsZXggKi8KLm1qci12aWV3ZXItb3ZlcmxheVtzdHlsZSo9ImZsZXgiXSB7CiAgICBhbmltYXRpb246IG1qci1mYWRlLWluIDAuMThzIGVhc2Utb3V0Owp9CgpAa2V5ZnJhbWVzIG1qci1mYWRlLWluIHsKICAgIGZyb20geyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHNjYWxlKDAuOTk1KTsgfQogICAgdG8gICB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogc2NhbGUoMSk7IH0KfQoKLm1qci12aWV3ZXItaGVhZGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgcGFkZGluZzogMTJweCAyMHB4OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE3MGRlZywgcmdiYSgyNCwgMjcsIDMzLCAwLjk2KSwgcmdiYSgxNywgMTksIDI1LCAwLjk3KSk7CiAgICBib3JkZXItYm90dG9tOiAwLjhweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMik7CiAgICBjb2xvcjogd2hpdGU7Cn0KCi5tanItdmlld2VyLWZpbGVuYW1lIHsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICBtYXgtd2lkdGg6IDQwMHB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci12aWV3ZXItbW9kZS1idXR0b25zIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBnYXA6IDZweDsKfQoKLm1qci12aWV3ZXItbW9kZS1idXR0b25zIGJ1dHRvbiB7CiAgICBwYWRkaW5nOiA0cHggMTJweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjA2LCAyMTEsIDIxOCwgMC4xKSwgcmdiYSgyMDYsIDIxMSwgMjE4LCAwLjAzKSk7CiAgICBib3JkZXI6IDAuOHB4IHNvbGlkIHJnYmEoMTk2LCAyMDIsIDIxMCwgMC4zKTsKICAgIGNvbG9yOiByZ2JhKDIzMCwgMjMzLCAyMzgsIDAuOTUpOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgdHJhbnNpdGlvbjogYWxsIDAuMTZzOwp9CgoubWpyLXZpZXdlci1tb2RlLWJ1dHRvbnMgYnV0dG9uOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjEwLCAyMTQsIDIyMCwgMC4xNCksIHJnYmEoMjEwLCAyMTQsIDIyMCwgMC4wNikpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIxNCwgMjE4LCAyMjQsIDAuNDIpOwp9CgovKiBWaWV3ZXIgY2xvc2UgYnV0dG9uIHBpbm5lZCB0byBvdmVybGF5IGNvcm5lciAqLwoubWpyLXZpZXdlci1jbG9zZSwKLm1qci12aWV3ZXItZnMgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMjYpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItd2lkdGg6IDAuOHB4ICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIwNiwgMjExLCAyMTgsIDAuMDgpLCByZ2JhKDIwNiwgMjExLCAyMTgsIDAuMDIpKSwKICAgICAgICByZ2JhKDIwLCAyMywgMjksIDAuOTQpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItY2xvc2UgewogICAgY29sb3I6ICNmZmY0ZjQgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMDUsIDgyLCA4MiwgMC41KSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyMDUsIDgyLCA4MiwgMC4zKSwgcmdiYSgyMDUsIDgyLCA4MiwgMC4xMikpLAogICAgICAgIHJnYmEoNTgsIDE4LCAxOCwgMC45NCkgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDIxOSwgMjE5LCAwLjE2KSwgMCAwIDAgMXB4IHJnYmEoMjA1LCA4MiwgODIsIDAuMDgpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLWNsb3NlOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjM1LCAxMTAsIDExMCwgMC4zOCksIHJnYmEoMjM1LCAxMTAsIDExMCwgMC4xNikpLAogICAgICAgIHJnYmEoNzAsIDE4LCAxOCwgMC45NykgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMzUsIDEzOCwgMTM4LCAwLjY0KSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci1mczpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIxMCwgMjE0LCAyMjAsIDAuMTQpLCByZ2JhKDIxMCwgMjE0LCAyMjAsIDAuMDYpKSwKICAgICAgICByZ2JhKDIzLCAyNiwgMzIsIDAuOTUpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjE0LCAyMTgsIDIyNCwgMC4zOCkgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItY2xvc2UgLnBpIHsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgoubWpyLXZpZXdlci1jb250ZW50IHsKICAgIGZsZXg6IDE7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKfQoKLm1qci12aWV3ZXItc2luZ2xlLAoubWpyLXZpZXdlci1hYiwKLm1qci12aWV3ZXItc2lkZWJ5c2lkZSB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKfQoKLm1qci12aWV3ZXItc2luZ2xlIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Cn0KCi5tanItdmlld2VyLXNpbmdsZSBpbWcsCi5tanItdmlld2VyLXNpbmdsZSB2aWRlbyB7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBtYXgtaGVpZ2h0OiAxMDAlOwogICAgb2JqZWN0LWZpdDogY29udGFpbjsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzOwp9CgoubWpyLXZpZXdlci1hYiB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBub25lOwp9CgoubWpyLXZpZXdlci1zaWRlYnlzaWRlIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgZ2FwOiAycHg7Cn0KCi5tanItdmlld2VyLXNpZGVieXNpZGUgPiBkaXYgewogICAgZmxleDogMTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDUpOwp9CgoubWpyLXZpZXdlci1zaWRlYnlzaWRlIGltZywKLm1qci12aWV3ZXItc2lkZWJ5c2lkZSB2aWRlbyB7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBtYXgtaGVpZ2h0OiAxMDAlOwogICAgb2JqZWN0LWZpdDogY29udGFpbjsKfQoKLm1qci12aWV3ZXItZm9vdGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBwYWRkaW5nOiAxMnB4IDIwcHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOCk7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgY29sb3I6IHdoaXRlOwogICAgZ2FwOiAyMHB4Owp9CgoubWpyLXZpZXdlci1mb290ZXIgYnV0dG9uIHsKICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7CiAgICBjb2xvcjogd2hpdGU7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKfQoKLm1qci12aWV3ZXItZm9vdGVyIGJ1dHRvbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7Cn0KCi5tanItdmlld2VyLW5hdiB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTRweDsKfQoKLm1qci12aWV3ZXItbmF2LWJ0biB7CiAgICB3aWR0aDogNDBweCAhaW1wb3J0YW50OwogICAgaGVpZ2h0OiA0MHB4ICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4ICFpbXBvcnRhbnQ7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuNDIpICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMTk0LCAyMDAsIDIwOCwgMC4xOCksIHJnYmEoMTk0LCAyMDAsIDIwOCwgMC4wNykpLAogICAgICAgIHJnYmEoMzQsIDM4LCA0NCwgMC45MikgIWltcG9ydGFudDsKICAgIGNvbG9yOiByZ2JhKDIzNCwgMjM2LCAyNDAsIDAuOTYpICFpbXBvcnRhbnQ7CiAgICBmb250LXNpemU6IDIwcHggIWltcG9ydGFudDsKICAgIGZvbnQtd2VpZ2h0OiA3MDAgIWltcG9ydGFudDsKICAgIGxpbmUtaGVpZ2h0OiAxICFpbXBvcnRhbnQ7CiAgICB0ZXh0LXNoYWRvdzogbm9uZTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjE0cyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIDAuMTRzIGVhc2UsIGJvcmRlci1jb2xvciAwLjE0cyBlYXNlICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLW5hdi1idG46aG92ZXI6bm90KDpkaXNhYmxlZCkgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIxNCwgMjE4LCAyMjQsIDAuNTYpICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjA3LCAyMTIsIDIxOSwgMC4yKSwgcmdiYSgyMDcsIDIxMiwgMjE5LCAwLjEpKSwKICAgICAgICByZ2JhKDM5LCA0MywgNDksIDAuOTQpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKfQoKLm1qci12aWV3ZXItbmF2LWJ0bjphY3RpdmU6bm90KDpkaXNhYmxlZCkgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApIHNjYWxlKDAuOTgpOwogICAgZmlsdGVyOiBub25lOwp9CgoubWpyLXZpZXdlci1uYXYtYnRuOmRpc2FibGVkIHsKICAgIG9wYWNpdHk6IDAuMzQgIWltcG9ydGFudDsKICAgIGZpbHRlcjogZ3JheXNjYWxlKDAuMjUpOwogICAgYm94LXNoYWRvdzogbm9uZTsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci1pbmRleCB7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBtaW4td2lkdGg6IDc0cHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDRlbTsKICAgIGNvbG9yOiByZ2JhKDIyNiwgMjI4LCAyMzMsIDAuOTQpOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgxOTcsIDIwMywgMjExLCAwLjE1KSwgcmdiYSgxOTcsIDIwMywgMjExLCAwLjA2KSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE5NywgMjAzLCAyMTEsIDAuMzQpOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBwYWRkaW5nOiA1cHggMTFweDsKICAgIHRleHQtc2hhZG93OiBub25lOwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpOwp9CgoubWpyLXZpZXdlci1wbGF5ZXJiYXIgewogICAgYm9yZGVyLXJhZGl1czogMThweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTk0LCAyMDAsIDIwOCwgMC4xNik7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgdG9wIGxlZnQsIHJnYmEoOTAsIDE1MCwgMjU1LCAwLjA4KSwgdHJhbnNwYXJlbnQgMzYlKSwKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTYwZGVnLCByZ2JhKDIwLCAyNCwgMzAsIDAuOTQpLCByZ2JhKDEyLCAxNSwgMjEsIDAuOTgpKTsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpLAogICAgICAgIDAgMTZweCAzNnB4IHJnYmEoMCwgMCwgMCwgMC4yMik7CiAgICAvKiBvdmVyZmxvdyBtdXN0IHN0YXkgdmlzaWJsZSBzbyB0aGUgc2VlayBydWxlciB0aWNrcy9sYWJlbHMgKHRvcDotMTZweCAvIHRvcDotMzRweCkKICAgICAgIHRoYXQgYXJlIGFic29sdXRlbHkgcG9zaXRpb25lZCBhYm92ZSB0aGUgc2VlayBiYXIgYXJlIG5vdCBjbGlwcGVkLiAqLwogICAgb3ZlcmZsb3c6IHZpc2libGU7Cn0KCi5tanItdmlld2VyLXRvb2xzIHsKICAgIGFsaWduLWl0ZW1zOiBzdGFydDsKICAgIGp1c3RpZnktY29udGVudDogc3RyZXRjaDsKICAgIGdhcDogOHB4Owp9CgoubWpyLXZpZXdlci1oZWFkZXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgoubWpyLXZpZXdlci1oZWFkZXI6OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMThweDsKICAgIHJpZ2h0OiAxOHB4OwogICAgdG9wOiA0NHB4OwogICAgaGVpZ2h0OiAxcHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHRyYW5zcGFyZW50LCByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpLCB0cmFuc3BhcmVudCk7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIG9wYWNpdHk6IDAuNzsKfQoKLm1qci12aWV3ZXItaGVhZGVyLW1ldGEgewogICAgbWluLWhlaWdodDogMzBweDsKICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjAzNSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDYpOwp9CgoubWpyLXZpZXdlci1oZWFkZXItdG9wIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBwYWRkaW5nLXJpZ2h0OiA4NHB4OwogICAgcGFkZGluZy1sZWZ0OiAxMnB4Owp9CgoubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tbGVmdCB7CiAgICBkaXNwbGF5OiBub25lOwogICAgZmxleDogMSAxIDA7CiAgICBtaW4td2lkdGg6IDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgoubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tY2VudGVyIHsKICAgIG1pbi13aWR0aDogMDsKICAgIGZsZXg6IDEgMSBhdXRvOwp9CgoubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tcmlnaHQgewogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgIGZsZXg6IDEgMSAwOwogICAgbWluLXdpZHRoOiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm1qci12aWV3ZXItdGl0bGUtd3JhcCB7CiAgICB3aWR0aDogYXV0bzsKICAgIG1pbi13aWR0aDogMDsKICAgIG1heC13aWR0aDogbWluKDEwMCUsIGNhbGMoMTAwdncgLSAyMjBweCkpOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogMTJweDsKfQoKLm1qci12aWV3ZXItdGl0bGUtbGluZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5tanItdmlld2VyLWZpbGVuYW1lIHsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMWVtOwogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW46IDAgYXV0bzsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLm1qci12aWV3ZXItYmFkZ2VzIHsKICAgIGdhcDogNHB4Owp9CgoubWpyLXZpZXdlci10aXRsZS1saW5lIC5tanItdmlld2VyLWJhZGdlcyB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGZsZXgtd3JhcDogbm93cmFwOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXZpZXdlci1oZWFkZXItbWV0YS0tbGVmdCB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICB3aWR0aDogZml0LWNvbnRlbnQ7CiAgICBtYXgtd2lkdGg6IDEwMCU7Cn0KCi5tanItdmlld2VyLWhlYWRlci1tZXRhLS1sZWZ0OmVtcHR5IHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5tanItdmlld2VyLWhlYWRlci1tZXRhLS1yaWdodCB7CiAgICBqdXN0aWZ5LXNlbGY6IGVuZDsKICAgIHdpZHRoOiBmaXQtY29udGVudDsKICAgIG1heC13aWR0aDogMTAwJTsKfQoKLm1qci12aWV3ZXItbW9kZS1idXR0b25zIHsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgcGFkZGluZzogM3B4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDQpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjA0KTsKfQoKLm1qci12aWV3ZXItdG9vbHMtZGVjayB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC13cmFwOiBub3dyYXA7CiAgICBnYXA6IDhweDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBtaW4td2lkdGg6IDA7CiAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgb3ZlcmZsb3cteTogaGlkZGVuOwogICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluOwp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtaW4td2lkdGg6IGF1dG87CiAgICBtaW4taGVpZ2h0OiAwOwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4wOCk7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LDI1NSwyNTUsMC4wNSksIHJnYmEoMjU1LDI1NSwyNTUsMC4wMikpLAogICAgICAgIHJnYmEoMTAsIDEyLCAxNiwgMC4yNCk7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjA0KSwKICAgICAgICAwIDZweCAxNnB4IHJnYmEoMCwwLDAsMC4xMik7CiAgICBwYWRkaW5nOiA1cHggNnB4OwogICAgZmxleDogMCAwIGF1dG87Cn0KCi5tanItdmlld2VyLXRvb2xzLXBhbmVsOjpiZWZvcmUgewogICAgY29udGVudDogIiI7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMCAwIGF1dG8gMDsKICAgIGhlaWdodDogMXB4OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCB0cmFuc3BhcmVudCwgcmdiYSgyNTUsMjU1LDI1NSwwLjE2KSwgdHJhbnNwYXJlbnQpOwogICAgb3BhY2l0eTogMC43OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5tanItdmlld2VyLXRvb2xzLXBhbmVsLWhlYWQgewogICAgZGlzcGxheTogbm9uZTsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtaGVhZGluZyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMXB4OwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbC1leWVicm93IHsKICAgIGZvbnQtc2l6ZTogOXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjE0ZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC40Nik7Cn0KCi5tanItdmlld2VyLXRvb2xzLXBhbmVsLXRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMWVtOwogICAgY29sb3I6IHJnYmEoMjQ4LDI1MCwyNTIsMC45Nik7Cn0KCi5tanItdmlld2VyLXRvb2xzLXBhbmVsLWJvZHkgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgIGdhcDogNnB4OwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbFtkYXRhLXBhbmVsPSJncmFkZSJdIC5tanItdmlld2VyLXRvb2xzLXBhbmVsLWJvZHkgewogICAgZGlzcGxheTogZmxleDsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWxbZGF0YS1wYW5lbD0ib3ZlcmxheSJdIC5tanItdmlld2VyLXRvb2xzLXBhbmVsLWJvZHkgewogICAgZGlzcGxheTogZmxleDsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWxbZGF0YS1wYW5lbD0iaW5zcGVjdCJdIC5tanItdmlld2VyLXRvb2xzLXBhbmVsLWJvZHksCi5tanItdmlld2VyLXRvb2xzLXBhbmVsW2RhdGEtcGFuZWw9ImFjdGlvbnMiXSAubWpyLXZpZXdlci10b29scy1wYW5lbC1ib2R5LAoubWpyLXZpZXdlci10b29scy1wYW5lbFtkYXRhLXBhbmVsPSJpbmZvIl0gLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtYm9keSB7CiAgICBkaXNwbGF5OiBmbGV4Owp9CgoubWpyLXZpZXdlci10b29scy1ncm91cCB7CiAgICB3aWR0aDogYXV0bzsKICAgIG1pbi1oZWlnaHQ6IDMwcHg7CiAgICBwYWRkaW5nOiA1cHggN3B4OwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgZ2FwOiA2cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMTIpOwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsMjU1LDI1NSwwLjAzNSksIHJnYmEoMjU1LDI1NSwyNTUsMC4wMikpLAogICAgICAgIHJnYmEoMTAsIDEyLCAxNiwgMC4xOCk7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4wMyk7CiAgICBtaW4td2lkdGg6IGZpdC1jb250ZW50Owp9CgoubWpyLXZpZXdlci10b29scy1ncm91cC1sYWJlbCB7CiAgICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjc1KTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjE1cHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXNpemU6IDEwcHg7Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW3N0eWxlKj0iLS1tanItZ3JvdXAtYWNjZW50Il0gLm1qci12aWV3ZXItdG9vbHMtZ3JvdXAtbGFiZWwgewogICAgY29sb3I6IHJnYmEodmFyKC0tbWpyLWdyb3VwLWFjY2VudCksIDAuOTApOwp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtzdHlsZSo9Ii0tbWpyLWdyb3VwLWFjY2VudCJdIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSh2YXIoLS1tanItZ3JvdXAtYWNjZW50KSwgMC4zNSk7Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9ImNoYW5uZWwiXSAubWpyLXZpZXdlci10b29scy1ncm91cC1sYWJlbCwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iYW5hbHlzaXMiXSAubWpyLXZpZXdlci10b29scy1ncm91cC1sYWJlbCwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1ndWlkZXMiXSAubWpyLXZpZXdlci10b29scy1ncm91cC1sYWJlbCwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1pbnNwZWN0Il0gLm1qci12aWV3ZXItdG9vbHMtZ3JvdXAtbGFiZWwgewogICAgbWluLXdpZHRoOiA0MnB4Owp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbFtkYXRhLXBhbmVsPSJvdmVybGF5Il0gLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1ndWlkZXMiXSB7CiAgICBmbGV4OiAwIDAgYXV0bzsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1ndWlkZXMiXSwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1pbnNwZWN0Il0gewogICAgZmxleC13cmFwOiB3cmFwOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iY2hhbm5lbCJdLAoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJleHBvc3VyZSJdLAoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJnYW1tYSJdLAoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJhbmFseXNpcyJdLAoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJjb21wYXJlIl0sCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9ImF1ZGlvLXZpeiJdIHsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKfQoKLm1qci12aWV3ZXItdG9vbHMtYWN0aW9ucywKLm1qci12aWV3ZXItdG9vbHMtbWV0YSB7CiAgICB3aWR0aDogYXV0bzsKICAgIG1pbi1oZWlnaHQ6IDMwcHg7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgcGFkZGluZzogNXB4IDdweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDYpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjAzKTsKfQoKLm1qci12aWV3ZXItdG9vbHMtYWN0aW9ucyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgIGdhcDogNnB4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXZpZXdlci10b29scy1tZXRhIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZ2FwOiA2cHg7CiAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItdmlld2VyLXRvb2xzLWFjdGlvbi0tcHJpbWFyeSB7CiAgICBtYXJnaW4tbGVmdDogMDsKfQoKLm1qci12aWV3ZXItdG9vbHMtYWN0aW9uICsgLm1qci12aWV3ZXItdG9vbHMtYWN0aW9uIHsKICAgIG1hcmdpbi1sZWZ0OiA0cHg7Cn0KCi5tanItdmlld2VyLXRvb2xzLXNlbGVjdCB7CiAgICBtaW4taGVpZ2h0OiAyNHB4Owp9CgoubWpyLXZpZXdlci10b29scy1yYW5nZS1pbnB1dCB7CiAgICB3aWR0aDogOTJweCAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29scy1yYW5nZSBzcGFuIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKfQoKQG1lZGlhIChtYXgtd2lkdGg6IDE0ODBweCkgewogICAgLm1qci12aWV3ZXItdG9vbHMtZGVjayB7CiAgICAgICAgZ2FwOiA2cHg7CiAgICB9Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiAxMjIwcHgpIHsKICAgIC5tanItdmlld2VyLWhlYWRlci10b3AgewogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiA4NHB4OwogICAgICAgIHBhZGRpbmctbGVmdDogMDsKICAgIH0KCiAgICAubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tY2VudGVyLAogICAgLm1qci12aWV3ZXItaGVhZGVyLWFyZWEtLXJpZ2h0IHsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIH0KCiAgICAubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tY2VudGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4OiAxIDEgMTAwJTsKICAgIH0KCiAgICAubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tcmlnaHQgewogICAgICAgIHBvc2l0aW9uOiBzdGF0aWM7CiAgICAgICAgdHJhbnNmb3JtOiBub25lOwogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4OiAxIDEgMTAwJTsKICAgIH0KCiAgICAubWpyLXZpZXdlci1oZWFkZXItbWV0YS0tcmlnaHQgewogICAgICAgIGp1c3RpZnktc2VsZjogY2VudGVyOwogICAgfQoKICAgIC5tanItdmlld2VyLXRvb2xzLWRlY2sgewogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBvdmVyZmxvdy14OiB2aXNpYmxlOwogICAgfQoKICAgIC5tanItdmlld2VyLXRvb2xzLXBhbmVsLAogICAgLm1qci12aWV3ZXItdG9vbHMtYWN0aW9ucywKICAgIC5tanItdmlld2VyLXRvb2xzLW1ldGEsCiAgICAubWpyLXZpZXdlci10b29scy1wYW5lbC1ib2R5IHsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICB9CgogICAgLm1qci12aWV3ZXItdG9vbHMtbWV0YSB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgfQp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJjb21wYXJlIl1bZGF0YS1hY3RpdmU9IjEiXSB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLW1qci1ncm91cC1hY2NlbnQpLCAwLjEwKTsKICAgIGJvcmRlci1sZWZ0LWNvbG9yOiByZ2JhKHZhcigtLW1qci1ncm91cC1hY2NlbnQpLCAwLjYwKTsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCByZ2JhKHZhcigtLW1qci1ncm91cC1hY2NlbnQpLCAwLjIyKTsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iY29tcGFyZSJdW2RhdGEtYWN0aXZlPSIxIl0gLm1qci12aWV3ZXItdG9vbHMtc2VsZWN0IHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSh2YXIoLS1tanItZ3JvdXAtYWNjZW50KSwgMC42MCk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAycHggcmdiYSh2YXIoLS1tanItZ3JvdXAtYWNjZW50KSwgMC4xOCk7Cn0KCi5tanItdmlld2VyLXRvb2xzLXNlbGVjdDpmb2N1cyB7CiAgICBvdXRsaW5lOiBub25lOwogICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHJnYmEoNjQsMTYwLDI1NSwwLjIyKTsKfQoKLyogTmF0aXZlIGRyb3Bkb3duczogaGludCBkYXJrIFVJIGFuZCBzdHlsZSBvcHRpb25zIHdoZW4gdGhlIGJyb3dzZXIgYWxsb3dzIGl0LiAqLwoubWpyLXZpZXdlci1oZWFkZXIgewogICAgY29sb3Itc2NoZW1lOiBkYXJrOwp9CgoubWpyLXZpZXdlci10b29scy1zZWxlY3QgewogICAgbWluLWhlaWdodDogMjRweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC40NikgIWltcG9ydGFudDsKICAgIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuOTIpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4xNCkgIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IDhweCAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29scy1zZWxlY3Qgb3B0aW9uIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsIHZhcigtLWlucHV0LXRleHQsICNkZGQpKTsKfQoKLm1qci12aWV3ZXItdG9vbHMtcmFuZ2UtaW5wdXQ6Zm9jdXMgewogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci12aWV3ZXItdG9vbC1idG4tLXJlc2V0IHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjIyKSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29sLWJ0biB7CiAgICBtaW4taGVpZ2h0OiAyNHB4ICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmFkaXVzOiA4cHggIWltcG9ydGFudDsKICAgIGJvcmRlci13aWR0aDogMXB4ICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIxMCwyMTQsMjIwLDAuMDc1KSwgcmdiYSgyMTAsMjE0LDIyMCwwLjAyNSkpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMTk2LDIwMiwyMTAsMC4xNikgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjA1KTsKICAgIGZvbnQtc2l6ZTogMTFweCAhaW1wb3J0YW50OwogICAgcGFkZGluZzogMCA4cHggIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbC1idG46aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIyMCwyMjQsMjMwLDAuMjQpICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIyMCwyMjQsMjMwLDAuMSksIHJnYmEoMjIwLDIyNCwyMzAsMC4wMzUpKSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJhbmFseXNpcyJdIC5tanItdmlld2VyLXRvb2wtYnRuW2RhdGEtYWN0aXZlPSIxIl0gewogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDE2NiwgOTIsIDAuMjIpLCByZ2JhKDI1NSwgMTE2LCA2NCwgMC4wOCkpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAxNjAsIDkyLCAwLjM0KSAhaW1wb3J0YW50OwogICAgY29sb3I6IHJnYmEoMjU1LCAyMzYsIDIyNCwgMC45NikgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iYW5hbHlzaXMiXSAubWpyLXZpZXdlci10b29sLWJ0bltkYXRhLWFjdGl2ZT0iMSJdOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAxODAsIDEwOCwgMC4yOCksIHJnYmEoMjU1LCAxMjgsIDcyLCAwLjE0KSkgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDE4NCwgMTE2LCAwLjQ2KSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJvdmVybGF5LWd1aWRlcyJdIC5tanItdmlld2VyLXRvb2wtYnRuW2RhdGEtYWN0aXZlPSIxIl0gewogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSg5MiwgMjE5LCAxODYsIDAuMjIpLCByZ2JhKDQ0LCAxNzAsIDE0NCwgMC4wOCkpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoOTIsIDIxOSwgMTg2LCAwLjM0KSAhaW1wb3J0YW50OwogICAgY29sb3I6IHJnYmEoMjI0LCAyNTUsIDI0OCwgMC45NikgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1ndWlkZXMiXSAubWpyLXZpZXdlci10b29sLWJ0bltkYXRhLWFjdGl2ZT0iMSJdOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMTAyLCAyMzAsIDE5NiwgMC4yOCksIHJnYmEoNTIsIDE4MiwgMTU2LCAwLjE0KSkgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgxMTAsIDIzNiwgMjAyLCAwLjQ2KSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJvdmVybGF5LWluc3BlY3QiXSAubWpyLXZpZXdlci10b29sLWJ0bltkYXRhLWFjdGl2ZT0iMSJdIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMTI0LCAxNjYsIDI1NSwgMC4yMiksIHJnYmEoMTA5LCA4OCwgMjIyLCAwLjA4KSkgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgxMzIsIDE3MCwgMjU1LCAwLjM2KSAhaW1wb3J0YW50OwogICAgY29sb3I6IHJnYmEoMjM2LCAyNDIsIDI1NSwgMC45NykgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1pbnNwZWN0Il0gLm1qci12aWV3ZXItdG9vbC1idG5bZGF0YS1hY3RpdmU9IjEiXTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDEzOCwgMTgwLCAyNTUsIDAuMzApLCByZ2JhKDEyNCwgMTAwLCAyMzIsIDAuMTQpKSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE0OCwgMTg4LCAyNTUsIDAuNDgpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLXRvb2wtYnRuW2RhdGEtYWN0aXZlPSIxIl0gewogICAgZmlsdGVyOiBzYXR1cmF0ZSgxLjEyKSBicmlnaHRuZXNzKDEuMDQpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xMCksCiAgICAgICAgMCAwIDAgMXB4IHJnYmEoMjU1LDI1NSwyNTUsMC4wNiksCiAgICAgICAgMCA4cHggMThweCByZ2JhKDAsMCwwLDAuMTYpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLWhlbHAgewogICAgYm9yZGVyLXJhZGl1czogMTRweCAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgxMywxNywyMiwwLjk2KSwgcmdiYSg4LDExLDE2LDAuOTgpKSAhaW1wb3J0YW50OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzogMCAxOHB4IDM0cHggcmdiYSgwLDAsMCwwLjM0KSAhaW1wb3J0YW50Owp9CgpAbWVkaWEgKG1heC13aWR0aDogMTIyMHB4KSB7CiAgICAubWpyLXZpZXdlci10b29scyB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICB9CgogICAgLm1qci12aWV3ZXItdG9vbHMtYWN0aW9ucyB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgfQoKICAgIC5tanItdmlld2VyLWhlYWRlci10b3AgewogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgICAgIGp1c3RpZnktaXRlbXM6IGNlbnRlcjsKICAgIH0KCiAgICAubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tbGVmdCwKICAgIC5tanItdmlld2VyLWhlYWRlci1hcmVhLS1jZW50ZXIsCiAgICAubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tcmlnaHQgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgfQoKICAgIC5tanItdmlld2VyLWhlYWRlci1tZXRhLS1sZWZ0LAogICAgLm1qci12aWV3ZXItaGVhZGVyLW1ldGEtLXJpZ2h0IHsKICAgICAgICBqdXN0aWZ5LXNlbGY6IGNlbnRlcjsKICAgIH0KCiAgICAubWpyLXZpZXdlci10b29scy1ib2R5IHsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDIyMHB4LCAxZnIpKTsKICAgIH0KfQoKLyogPT09PT09PT09PSBDdXN0b20gVmlkZW8gQ29udHJvbHMgKG5vIG5hdGl2ZSBiYXIpID09PT09PT09PT0gKi8KLm1qci12aWRlby1ob3N0IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLm1qci12aWRlby1jb250cm9scyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAxMnB4OwogICAgcmlnaHQ6IDEycHg7CiAgICBib3R0b206IDEycHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNik7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpOwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTsKICAgIG9wYWNpdHk6IDA7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgZWFzZTsKICAgIHotaW5kZXg6IDU7Cn0KCi5tanItdmlkZW8tcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXZpZGVvLXJvdy0tdG9wIHsKICAgIGdhcDogMTJweDsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIDFmciBhdXRvIGF1dG8gYXV0bzsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tcm93LS10b3AgewogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIGF1dG8gMWZyIGF1dG8gYXV0bzsKfQoKLm1qci12aWRlby1jb250cm9scy0tcHJldmlldyAubWpyLXZpZGVvLXJvdy0tdG9wIHsKICAgIGRpc3BsYXk6IGZsZXg7Cn0KCi5tanItdmlkZW8tcm93LS1ib3R0b20gewogICAgZ2FwOiA4cHg7Cn0KCi5tanItdmlkZW8tZ3JvdXAgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBtaW4td2lkdGg6IDA7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg1KTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIHVzZXItc2VsZWN0OiBub25lOwp9CgoubWpyLXZpZGVvLW51bSB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpOwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgcGFkZGluZzogNXB4IDhweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci12aWRlby1udW06Zm9jdXMgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpOwp9CgoubWpyLXZpZGVvLW51bS0tc3BlZWQgewogICAgY29sb3Itc2NoZW1lOiBkYXJrOwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjYyKTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpOwp9CgoubWpyLXZpZGVvLW51bS0tc3BlZWQgb3B0aW9uIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwp9CgoubWpyLXZpZGVvLWZyYW1lIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CiAgICBtaW4td2lkdGg6IDUycHg7CiAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgIHVzZXItc2VsZWN0OiBub25lOwp9CgoubWpyLXZpZGVvLWZyYW1lLmlzLXN0ZXAgewogICAgY29sb3I6ICNmZmQyNGQ7Cn0KCi5tanItdmlkZW8tYm90dG9tIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmbGV4OiAxOwp9CgoubWpyLXZpZGVvLWJvdHRvbS0tbGVmdCB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7Cn0KCi5tanItdmlkZW8tYm90dG9tLS1yaWdodCB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwp9CgoubWpyLXZpZGVvLXRyYW5zcG9ydCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgZmxleDogMCAwIGF1dG87Cn0KCi8qIFNob3cgY29udHJvbHMgb24gaG92ZXIvZm9jdXMgKHZpZXdlcikuICovCi5tanItdmlkZW8taG9zdDpob3ZlciAubWpyLXZpZGVvLWNvbnRyb2xzLAoubWpyLXZpZGVvLWNvbnRyb2xzOmZvY3VzLXdpdGhpbiB7CiAgICBvcGFjaXR5OiAxOwogICAgcG9pbnRlci1ldmVudHM6IGF1dG87Cn0KCi8qIFByZXZpZXc6IGtlZXAgY29udHJvbHMgdmlzaWJsZSBiZWNhdXNlIHRoZSBhcmVhIGlzIHNtYWxsLiAqLwoubWpyLXZpZGVvLWNvbnRyb2xzLS1wcmV2aWV3IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IGF1dG87CiAgICByaWdodDogMTBweDsKICAgIHRvcDogYXV0bzsKICAgIGJvdHRvbTogMTBweDsKICAgIG9wYWNpdHk6IDE7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm9yZGVyOiBub25lOwogICAgcGFkZGluZzogMDsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgd2lkdGg6IGF1dG87CiAgICBoZWlnaHQ6IGF1dG87CiAgICBiYWNrZHJvcC1maWx0ZXI6IG5vbmU7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogbm9uZTsKfQoKLm1qci12aWRlby1wcmV2aWV3LWJ0biB7CiAgICB3aWR0aDogMzhweDsKICAgIGhlaWdodDogMzhweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjIyKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC40Mik7CiAgICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjkyKTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwp9CgoubWpyLXZpZGVvLXByZXZpZXctYnRuOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC41MCk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4yOCk7Cn0KCi5tanItdmlkZW8tcHJldmlldy1idG4gLnBpIHsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgoubWpyLXZpZGVvLWJ0biB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KTsKICAgIGNvbG9yOiAjZmZmOwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLm1qci12aWRlby1idG46aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKfQoKLm1qci12aWRlby1idG4uaXMtb24gewogICAgYmFja2dyb3VuZDogcmdiYSg2NCwgMTYwLCAyNTUsIDAuMjUpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDY0LCAxNjAsIDI1NSwgMC41NSk7Cn0KCi5tanItdmlkZW8tYnRuLS1pbiB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoNzAsIDI1NSwgMTIwLCAwLjU1KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzAsIDI1NSwgMTIwLCAwLjEyKTsKfQoKLm1qci12aWRlby1idG4tLWluOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzAsIDI1NSwgMTIwLCAwLjE4KTsKfQoKLm1qci12aWRlby1idG4tLW91dCB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCA3MCwgNzAsIDAuNTUpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDcwLCA3MCwgMC4xMCk7Cn0KCi5tanItdmlkZW8tYnRuLS1vdXQ6aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDcwLCA3MCwgMC4xNik7Cn0KCi5tanItdmlkZW8tdGltZSB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgbWluLXdpZHRoOiA5MnB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItdmlkZW8tdGltZWdyb3VwIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICBnYXA6IDEwcHg7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItdmlkZW8tcmFuZ2UtY291bnQgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6IHJnYmEoNjQsIDE5MCwgMjU1LCAwLjkyKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoNjQsIDE5MCwgMjU1LCAwLjEwKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNjQsIDE5MCwgMjU1LCAwLjI1KTsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgcGFkZGluZzogMXB4IDhweDsKICAgIGxpbmUtaGVpZ2h0OiAxNnB4OwogICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsKICAgIHVzZXItc2VsZWN0OiBub25lOwp9CgoubWpyLXZpZGVvLXJhbmdlIHsKICAgIGFjY2VudC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwp9CgoubWpyLXZpZGVvLXJhbmdlLS1zZWVrIHsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDgwcHg7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAxOwogICAgLyogV2UgZHJhdyBvdXIgb3duIHBsYXloZWFkL21hcmtlcnM7IGhpZGUgdGhlIG5hdGl2ZSB0aHVtYiAiZG90Ii4gKi8KICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAgIGFwcGVhcmFuY2U6IG5vbmU7Cn0KCi5tanItdmlkZW8tcmFuZ2UtLXNlZWs6Oi13ZWJraXQtc2xpZGVyLXRodW1iIHsKICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICB3aWR0aDogMDsKICAgIGhlaWdodDogMDsKICAgIGJvcmRlcjogMDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm94LXNoYWRvdzogbm9uZTsKfQoKLm1qci12aWRlby1yYW5nZS0tc2Vlazo6LW1vei1yYW5nZS10aHVtYiB7CiAgICB3aWR0aDogMDsKICAgIGhlaWdodDogMDsKICAgIGJvcmRlcjogMDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm94LXNoYWRvdzogbm9uZTsKfQoKLm1qci12aWRlby1zZWVrLXdyYXAgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWluLXdpZHRoOiA4MHB4OwogICAgZmxleDogMTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwp9CgoubWpyLXZpZGVvLXNlZWstem9uZXMgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgdG9wOiA1MCU7CiAgICBoZWlnaHQ6IDEwcHg7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDI7Cn0KCi5tanItdmlkZW8tc2Vlay16b25lIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMDsKICAgIGJvdHRvbTogMDsKfQoKLyogMC4uSW46IHRyaW1tZWQtb3V0IHJhbmdlLiAqLwoubWpyLXZpZGVvLXNlZWstem9uZS0tbGVmdFRyaW0gewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDcwLCA3MCwgMC4xOCk7Cn0KCi8qIEluLi5PdXQ6IHNlbGVjdGVkIHBsYXliYWNrIHJhbmdlIGhpZ2hsaWdodC4gKi8KLm1qci12aWRlby1zZWVrLXpvbmUtLXNlbGVjdGVkIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoNjQsIDE5MCwgMjU1LCAwLjU1KTsKfQoKLm1qci12aWRlby1zZWVrLXpvbmVzLmlzLWZ1bGxyYW5nZSAubWpyLXZpZGVvLXNlZWstem9uZS0tc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKfQoKLyogT3V0Li5FbmQ6IHNob3cgb3V0LW9mLXJhbmdlIGZyYW1lcyBhcyBhIGRpZmZlcmVudCBjb2xvci4gKi8KLm1qci12aWRlby1zZWVrLXpvbmUtLXJpZ2h0VHJpbSB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgNzAsIDcwLCAwLjIwKTsKfQoKLm1qci12aWRlby1zZWVrLW92ZXJsYXkgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgdG9wOiA1MCU7CiAgICBoZWlnaHQ6IDA7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDM7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiA1MCU7CiAgICB3aWR0aDogMTZweDsKICAgIGhlaWdodDogMzJweDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgY3Vyc29yOiBldy1yZXNpemU7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIHRvdWNoLWFjdGlvbjogbm9uZTsKICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgei1pbmRleDogNDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpOwogICAgYm94LXNoYWRvdzogMCA0cHggMTBweCByZ2JhKDAsMCwwLDAuMzUpOwp9CgoubWpyLXZpZGVvLXNlZWstaGFuZGxlOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMCk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNCk7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLWluOjphZnRlciwKLm1qci12aWRlby1zZWVrLWhhbmRsZS0tb3V0OjphZnRlciB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDUwJTsKICAgIHRvcDogNTAlOwogICAgd2lkdGg6IDJweDsKICAgIGhlaWdodDogMThweDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDcwLCA3MCwgMC45NSk7CiAgICBib3JkZXItcmFkaXVzOiAycHg7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLWluOjphZnRlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDcwLCAyNTUsIDEyMCwgMC45NSk7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLWluOjpiZWZvcmUsCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLW91dDo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogNTAlOwogICAgd2lkdGg6IDA7CiAgICBoZWlnaHQ6IDA7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLWluOjpiZWZvcmUgewogICAgdG9wOiA0cHg7CiAgICBib3JkZXItbGVmdDogNXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYm9yZGVyLXJpZ2h0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItYm90dG9tOiA2cHggc29saWQgcmdiYSg3MCwgMjU1LCAxMjAsIDAuOTUpOwp9CgoubWpyLXZpZGVvLXNlZWstaGFuZGxlLS1vdXQ6OmJlZm9yZSB7CiAgICBib3R0b206IDRweDsKICAgIGJvcmRlci1sZWZ0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItcmlnaHQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJvcmRlci10b3A6IDZweCBzb2xpZCByZ2JhKDI1NSwgNzAsIDcwLCAwLjk1KTsKfQoKLm1qci12aWRlby1zZWVrLXRpY2tzIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIHRvcDogLTE2cHg7CiAgICBoZWlnaHQ6IDEycHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEwKTsKICAgIG9wYWNpdHk6IDAuOTsKfQoKLm1qci12aWRlby1zZWVrLWxhYmVscyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICB0b3A6IC0zNHB4OwogICAgaGVpZ2h0OiAxNHB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBsaW5lLWhlaWdodDogMTRweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuNzIpOwogICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsKICAgIHRleHQtc2hhZG93OiAwIDFweCAwIHJnYmEoMCwwLDAsMC41NSk7Cn0KCi5tanItdmlkZW8tc2Vlay1sYWJlbCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoubWpyLXZpZGVvLXNlZWstcGxheWhlYWQtbGFiZWwgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAxMnB4OwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgcGFkZGluZzogMXB4IDZweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjU1KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xNCk7CiAgICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjkyKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGxpbmUtaGVpZ2h0OiAxNHB4OwogICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoubWpyLXZpZGVvLXNlZWstbWFyayB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IC0xMHB4OwogICAgd2lkdGg6IDE0cHg7CiAgICBoZWlnaHQ6IDIwcHg7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgIGN1cnNvcjogZXctcmVzaXplOwogICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICB0b3VjaC1hY3Rpb246IG5vbmU7CiAgICB6LWluZGV4OiA0OwogICAgLS1tanItbWFyay1jb2xvcjogcmdiYSgyNTUsIDcwLCA3MCwgMC45NSk7Cn0KCi5tanItdmlkZW8tc2Vlay1tYXJrLS1pbiB7CiAgICAtLW1qci1tYXJrLWNvbG9yOiByZ2JhKDcwLCAyNTUsIDEyMCwgMC45NSk7Cn0KCi5tanItdmlkZW8tc2Vlay1tYXJrOjpiZWZvcmUgewogICAgY29udGVudDogIiI7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiA1MCU7CiAgICB0b3A6IDA7CiAgICBib3R0b206IDA7CiAgICB3aWR0aDogMnB4OwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLW1hcmstY29sb3IpOwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHJnYmEoMCwwLDAsMC4zNSk7Cn0KCi5tanItdmlkZW8tc2Vlay1tYXJrOjphZnRlciB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogLTVweDsKICAgIGxlZnQ6IDUwJTsKICAgIHdpZHRoOiAwOwogICAgaGVpZ2h0OiAwOwogICAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJvcmRlci1yaWdodDogNXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYm9yZGVyLWJvdHRvbTogNnB4IHNvbGlkIHZhcigtLW1qci1tYXJrLWNvbG9yKTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKfQoKLm1qci12aWRlby1zZWVrLW1hcmstLWluOjphZnRlciB7CiAgICBib3JkZXItYm90dG9tLWNvbG9yOiB2YXIoLS1tanItbWFyay1jb2xvcik7Cn0KCi5tanItdmlkZW8tc2Vlay1tYXJrLS1vdXQ6OmFmdGVyIHsKICAgIHRvcDogYXV0bzsKICAgIGJvdHRvbTogLTVweDsKICAgIGJvcmRlci1ib3R0b206IG5vbmU7CiAgICBib3JkZXItdG9wOiA2cHggc29saWQgdmFyKC0tbWpyLW1hcmstY29sb3IpOwp9CgoubWpyLXZpZGVvLXNlZWstcGxheWhlYWQgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAtMTJweDsKICAgIHdpZHRoOiAycHg7CiAgICBoZWlnaHQ6IDI0cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjAwLCA3MCwgMC45NSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgwLDAsMCwwLjM1KTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMXB4KTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIHsKICAgIHBvc2l0aW9uOiBzdGF0aWM7CiAgICBsZWZ0OiBhdXRvOwogICAgcmlnaHQ6IGF1dG87CiAgICBib3R0b206IGF1dG87CiAgICBvcGFjaXR5OiAxOwogICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICB3aWR0aDogMTAwJTsKICAgIG1heC13aWR0aDogbm9uZTsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDE0cHg7CiAgICBib3JkZXItcmFkaXVzOiAxOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxOTYsIDIwMiwgMjEwLCAwLjEyKTsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCB0b3AgbGVmdCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzKSwgdHJhbnNwYXJlbnQgMzQlKSwKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDE5OCwgMjAzLCAyMTAsIDAuMDI1KSwgcmdiYSgxOTgsIDIwMywgMjEwLCAwLjAwOCkpLAogICAgICAgIGxpbmVhci1ncmFkaWVudCgxNjVkZWcsIHJnYmEoMTgsIDIyLCAyOCwgMC44MiksIHJnYmEoMTIsIDE1LCAyMSwgMC45KSk7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSwKICAgICAgICAwIDEwcHggMzBweCByZ2JhKDAsIDAsIDAsIDAuMTQpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBub25lOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IG5vbmU7CiAgICBnYXA6IDEycHg7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJ0biB7CiAgICBtaW4taGVpZ2h0OiAzOHB4OwogICAgcGFkZGluZzogOHB4IDEycHg7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyMTAsIDIxNCwgMjIwLCAwLjA3KSwgcmdiYSgyMTAsIDIxNCwgMjIwLCAwLjAyKSk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMTk0LCAyMDEsIDIwOCwgMC4xOCk7CiAgICBib3JkZXItd2lkdGg6IDFweDsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjEycyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIDAuMTJzIGVhc2UsIGJvcmRlci1jb2xvciAwLjEycyBlYXNlLCBib3gtc2hhZG93IDAuMTJzIGVhc2U7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJ0bjpob3ZlciB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjIwLCAyMjQsIDIzMCwgMC4yNik7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSwKICAgICAgICAwIDhweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xNCk7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJ0bi5pcy1vbiB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDEwMCwgMTcwLCAyNTUsIDAuMiksIHJnYmEoMTAwLCAxNzAsIDI1NSwgMC4wOCkpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDEyMCwgMTg2LCAyNTUsIDAuNDIpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHJnYmEoMTIwLCAxODYsIDI1NSwgMC4xMikgaW5zZXQ7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJ0biAucGkgewogICAgZm9udC1zaXplOiAxNHB4OwogICAgbGluZS1oZWlnaHQ6IDE7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1oZWFkLAoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1iYXItYWN0aW9ucyB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKSBhdXRvIG1pbm1heCgwLCAxZnIpOwogICAgZ2FwOiAxMnB4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLXN0YXR1cywKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLXNpZGUgewogICAgbWluLXdpZHRoOiAwOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBmbGV4LXdyYXA6IHdyYXA7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1jZW50ZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLWhlYWQgewogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLXNpZGUtLXJpZ2h0IHsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci10aW1lbGluZSB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIG1pbm1heCgwLCAxZnIpIGF1dG87CiAgICBnYXA6IDEycHg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgYm9yZGVyLXJhZGl1czogMTZweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1tZWRpYS1iYWRnZSB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIG1pbi1oZWlnaHQ6IDI4cHg7CiAgICBwYWRkaW5nOiAwIDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzgsIDIyNCwgMTk2LCAwLjEyKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNzgsIDIyNCwgMTk2LCAwLjIyKTsKICAgIGNvbG9yOiByZ2JhKDIyMCwgMjQ3LCAyNDEsIDAuOTYpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby10aW1lZ3JvdXAgewogICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nOiA1cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0NSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby10aW1lLAoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1mcmFtZSB7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgY29sb3I6IHJnYmEoMjI4LCAyMzAsIDIzNCwgMC45Mik7CiAgICB0ZXh0LXNoYWRvdzogbm9uZTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tZnJhbWUgewogICAgbWluLXdpZHRoOiA5NHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgcGFkZGluZzogNXB4IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNDUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tdGltZSB7CiAgICBtaW4td2lkdGg6IGF1dG87CiAgICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1yYW5nZS0tc2VlayB7CiAgICBoZWlnaHQ6IDIycHg7CiAgICBhY2NlbnQtY29sb3I6IHJnYmEoMjE0LCAyMTgsIDIyNCwgMC45Mik7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXJhbmdlLWNvdW50IHsKICAgIGNvbG9yOiByZ2JhKDIyMiwgMjI1LCAyMzAsIDAuOTUpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE5NCwgMjAxLCAyMDksIDAuMjYpOwogICAgYm9yZGVyLXdpZHRoOiAwLjhweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTk0LCAyMDEsIDIwOSwgMC4wOCk7CiAgICB0ZXh0LXNoYWRvdzogbm9uZTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tZ3JvdXAgewogICAgbWluLWhlaWdodDogMzZweDsKICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzNSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1ncm91cC0tYWRqdXN0LWxlZnQsCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWdyb3VwLS1hZGp1c3QtcmlnaHQsCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWdyb3VwLS1zcGVlZCB7CiAgICBnYXA6IDhweDsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tbnVtIHsKICAgIG1pbi1oZWlnaHQ6IDM0cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYmFja2dyb3VuZDogcmdiYSg5LCAxMiwgMTYsIDAuNTUpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXRyYW5zcG9ydCB7CiAgICBnYXA6IDEwcHg7CiAgICBwYWRkaW5nOiA2cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNDUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYnRuLS1wbGF5IHsKICAgIG1pbi13aWR0aDogODhweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXNlZWstd3JhcCB7CiAgICBtaW4taGVpZ2h0OiA0NHB4Owp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1zZWVrLXpvbmVzIHsKICAgIGhlaWdodDogMTJweDsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tc2Vlay1oYW5kbGUgewogICAgd2lkdGg6IDE4cHg7CiAgICBoZWlnaHQ6IDM0cHg7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXZvbHVtZS13cmFwIHsKICAgIHBhZGRpbmc6IDAgNHB4Owp9CgoubWpyLXZpZGVvLXJhbmdlLS12b2x1bWUgewogICAgd2lkdGg6IDkwcHg7Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiA5ODBweCkgewogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLWhlYWQsCiAgICAubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1iYXItYWN0aW9ucywKICAgIC5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci10aW1lbGluZSB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICB9CgogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLWNlbnRlciwKICAgIC5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1zaWRlLS1yaWdodCB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICB9CgogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLXRpbWVsaW5lIHsKICAgICAgICBnYXA6IDEwcHg7CiAgICB9CgogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tdHJhbnNwb3J0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTZweDsKICAgIH0KfQoKLyogPT09PT09PT09PSBDb250ZXh0IE1lbnUgQ29tcG9uZW50ID09PT09PT09PT0gKi8KLm1qci1jb250ZXh0LW1lbnUgewogICAgcG9zaXRpb246IGZpeGVkOwogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktbWVudS1iZyk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpOwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICBtaW4td2lkdGg6IDIwMHB4OwogICAgLyogQWJvdmUgdmlld2VyIG92ZXJsYXkgKDEwMDAxKSBhbmQgTUZWIGRpYWxvZyAoMTAwMDApICovCiAgICB6LWluZGV4OiAxMDAwMjsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBwYWRkaW5nOiA0cHggMDsKICAgIGFuaW1hdGlvbjogbWpyLWNvbnRleHQtbWVudS1pbiAwLjE1cyBlYXNlLW91dDsKfQoKLm1qci1jb250ZXh0LW1lbnUsCi5tanItY29udGV4dC1tZW51ICogewogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKQGtleWZyYW1lcyBtanItY29udGV4dC1tZW51LWluIHsKICAgIGZyb20gewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01cHgpOwogICAgfQogICAgdG8gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgfQp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtIHsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICBwYWRkaW5nOiA4cHggMTRweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgd2lkdGg6IDEwMCU7CiAgICBib3JkZXI6IDA7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3gtc2hhZG93OiBub25lOwogICAgbWFyZ2luOiAwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgIGxldHRlci1zcGFjaW5nOiBub3JtYWw7CiAgICBsaW5lLWhlaWdodDogMS4zNTsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXM7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbTo6LW1vei1mb2N1cy1pbm5lciB7CiAgICBib3JkZXI6IDA7CiAgICBwYWRkaW5nOiAwOwp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtOmhvdmVyLAoubWpyLWNvbnRleHQtbWVudS1pdGVtOmZvY3VzLXZpc2libGUgewogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktaW5wdXQtYmcpOwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy1kaXNhYmxlZCB7CiAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICBvcGFjaXR5OiAwLjQ1Owp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtLmlzLWRpc2FibGVkOmhvdmVyLAoubWpyLWNvbnRleHQtbWVudS1pdGVtLmlzLWRpc2FibGVkOmZvY3VzLXZpc2libGUgewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCi5tanItY29udGV4dC1tZW51LXNlcGFyYXRvciB7CiAgICBoZWlnaHQ6IDFweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJvcmRlci1jb2xvcik7CiAgICBtYXJnaW46IDRweCAwOwp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtLWxlZnQsCi5tanItY29udGV4dC1tZW51LWl0ZW0tcmlnaHQgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4Owp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtLWxlZnQgewogICAgZmxleDogMSAxIGF1dG87CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItY29udGV4dC1tZW51LWl0ZW0tcmlnaHQgewogICAgZmxleDogMCAwIGF1dG87CiAgICBtYXJnaW4tbGVmdDogMTZweDsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS1sZWZ0IGkgewogICAgd2lkdGg6IDE2cHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBvcGFjaXR5OiAwLjgyOwp9CgoubWpyLWNvbnRleHQtbWVudS1oaW50IHsKICAgIG9wYWNpdHk6IDAuNTg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoubWpyLWNvbnRleHQtbWVudS1zdWJtZW51LWFycm93IHsKICAgIG9wYWNpdHk6IDAuNzI7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLm1qci1hZGQtdG8tY29sbGVjdGlvbi1tZW51IHsKICAgIG1pbi13aWR0aDogMjYwcHg7CiAgICBtYXgtd2lkdGg6IG1pbigzNjBweCwgY2FsYygxMDB2dyAtIDE2cHgpKTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMnB4KTsKfQoKLm1qci1jb250ZXh0LW1lbnUtdGl0bGUgewogICAgcGFkZGluZzogOHB4IDE0cHggMTBweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBjb2xvcjogdmFyKC0tZmctY29sb3IpOwogICAgb3BhY2l0eTogMC45MjsKfQoKLm1qci1jb250ZXh0LW1lbnUtbm90ZSB7CiAgICBwYWRkaW5nOiAxMHB4IDE0cHg7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcpIDcyJSwgdmFyKC0tbWpyLW11dGVkKSk7CiAgICBsaW5lLWhlaWdodDogMS40NTsKfQoKLm1qci1ncmlkLXBvcG92ZXIsCi5tanItdmlld2VyLXBvcG92ZXIgewogICAgbWluLXdpZHRoOiAyNTBweDsKICAgIG1heC13aWR0aDogbWluKDM2MHB4LCBjYWxjKDEwMHZ3IC0gMTZweCkpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLXNtKTsKICAgIGJveC1zaGFkb3c6IDAgMTJweCAyOHB4IHJnYmEoMCwgMCwgMCwgMC4zNSk7Cn0KCkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7CiAgICAubWpyLXZpZXdlci1vdmVybGF5ICosCiAgICAubWpyLXZpZGVvLWNvbnRyb2xzLAogICAgLm1qci1jb250ZXh0LW1lbnUgewogICAgICAgIGFuaW1hdGlvbjogbm9uZSAhaW1wb3J0YW50OwogICAgICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDsKICAgICAgICBzY3JvbGwtYmVoYXZpb3I6IGF1dG8gIWltcG9ydGFudDsKICAgIH0KfQoKLyogSGlkZSBoZWFkZXIgKHRvb2xiYXIpIHdoZW4gdmlld2VyIG92ZXJsYXkgaXMgaW4gZnVsbHNjcmVlbiAqLwoubWpyLXZpZXdlci1vdmVybGF5OmZ1bGxzY3JlZW4gLm1qci12aWV3ZXItaGVhZGVyIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAogICBNYWpvb3IgRmxvYXRpbmcgVmlld2VyIChNRlYpIOKAlCBwb3J0YWxlZCB0byBkb2N1bWVudC5ib2R5CiAgIFJlZGVjbGFyZXMgQ1NTIHZhcmlhYmxlcyBzbyB0aGUgcGFuZWwgd29ya3Mgb3V0c2lkZSAubWpyLWFzc2V0cy1tYW5hZ2VyCiAgIChzYW1lIHBhdHRlcm4gYXMgLm1qci1wb3BvdmVyKQogICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi8KCi5tanItbWZ2IHsKICAgIC0tbWpyLXN1cmZhY2UtMDogdmFyKC0tY29udGVudC1iZywgIzFlMWUxZSk7CiAgICAtLW1qci1zdXJmYWNlLTE6IHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpOwogICAgLS1tanItc3VyZmFjZS0yOiB2YXIoLS1jb21meS1tZW51LXNlY29uZGFyeS1iZywgIzMzMyk7CiAgICAtLW1qci1ib3JkZXI6IHZhcigtLWJvcmRlci1jb2xvciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7CiAgICAtLW1qci1tdXRlZDogdmFyKC0tZGVzY3JpcC10ZXh0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKTsKICAgIC0tbWpyLWFjY2VudDogdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKTsKICAgIC0tbWpyLXN0YXR1cy1zdWNjZXNzOiB2YXIoLS1jb21meS1zdGF0dXMtc3VjY2VzcywgIzRDQUY1MCk7CgogICAgZm9udC1mYW1pbHk6IHZhcigtLWNvbWZ5LWZvbnQsIHVpLXNhbnMtc2VyaWYsIHN5c3RlbS11aSwgLWFwcGxlLXN5c3RlbSwgIlNlZ29lIFVJIiwgUm9ib3RvLCBBcmlhbCwgc2Fucy1zZXJpZik7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBsaW5lLWhlaWdodDogMS4zNTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKSk7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwoKICAgIC8qIFZpc3VhbCBjaHJvbWUgKi8KICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBib3gtc2hhZG93OiAwIDhweCAzMnB4IHJnYmEoMCwgMCwgMCwgMC41NSksIDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMyk7Cn0KCi5tanItbWZ2ICogewogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKaHRtbC5tanItbWZ2LXBvcG91dC1kb2N1bWVudCB7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIHJhZGlhbC1ncmFkaWVudCgKICAgICAgICAgICAgMTIwMHB4IDQyMHB4IGF0IDUwJSAwJSwKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLXByaW1hcnktYmFja2dyb3VuZCwgdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKSkgMTAlLCB0cmFuc3BhcmVudCksCiAgICAgICAgICAgIHRyYW5zcGFyZW50IDYyJQogICAgICAgICksCiAgICAgICAgbGluZWFyLWdyYWRpZW50KAogICAgICAgICAgICAxODBkZWcsCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtc3VyZmFjZSwgdmFyKC0tY29udGVudC1iZywgIzE2MTkxZikpIDgyJSwgIzAwMCAxOCUpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0taW50ZXJmYWNlLW1lbnUtc3VyZmFjZSwgdmFyKC0tY29tZnktbWVudS1iZywgIzFmMjIyNykpIDg0JSwgIzAwMCAxNiUpCiAgICAgICAgKTsKfQoKYm9keS5tanItbWZ2LXBvcG91dC1ib2R5IHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9CgojbWpyLW1mdi1wb3BvdXQtcm9vdCwKLm1qci1tZnYtcG9wb3V0LXJvb3QgewogICAgaXNvbGF0aW9uOiBpc29sYXRlOwp9CgovKiDilIDilIAgSGVhZGVyIChkcmFnIGhhbmRsZSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5tanItbWZ2LWhlYWRlciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSk7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBjdXJzb3I6IG1vdmU7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgZ2FwOiA2cHg7CiAgICBtaW4taGVpZ2h0OiAzNHB4Owp9CgoubWpyLW1mdi1oZWFkZXItdGl0bGUgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIG9wYWNpdHk6IDAuNzg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICBmbGV4OiAxOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMjhweDsKfQoKLyog4pSA4pSAIFRvb2xiYXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5tanItbWZ2LXRvb2xiYXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDRweDsKICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgNTAlLCB2YXIoLS1tanItc3VyZmFjZS0xKSA1MCUpOwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgZmxleC1zaHJpbms6IDA7CiAgICBtaW4taGVpZ2h0OiAzNnB4Owp9CgoubWpyLW1mdi10b29sYmFyLXNlcCB7CiAgICB3aWR0aDogMXB4OwogICAgaGVpZ2h0OiAxOHB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLWJvcmRlcik7CiAgICBtYXJnaW46IDAgM3B4OwogICAgZmxleC1zaHJpbms6IDA7Cn0KCi5tanItbWZ2LXByb2dyZXNzIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBoZWlnaHQ6IDIycHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgNzIlLCAjMDAwIDI4JSk7CiAgICBmbGV4LXNocmluazogMDsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKLm1qci1tZnYtcHJvZ3Jlc3MuaXMtY2xpY2thYmxlIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKfQoKLm1qci1tZnYtcHJvZ3Jlc3MuaXMtY2xpY2thYmxlOmhvdmVyIHsKICAgIGZpbHRlcjogYnJpZ2h0bmVzcygxLjAzKTsKfQoKLm1qci1tZnYtcHJvZ3Jlc3MtYmFyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDA7CiAgICB3aWR0aDogMCU7CiAgICB0cmFuc2l0aW9uOiB3aWR0aCA3MG1zIGVhc2UtaW4tb3V0Owp9CgoubWpyLW1mdi1wcm9ncmVzcy1iYXItLW5vZGVzIHsKICAgIHRvcDogMDsKICAgIGhlaWdodDogNTAlOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcykgNjglLCAjMGIzNTEzIDMyJSk7Cn0KCi5tanItbWZ2LXByb2dyZXNzLWJhci0tc3RlcHMgewogICAgdG9wOiA1MCU7CiAgICBoZWlnaHQ6IDUwJTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA2NCUsICMwYjIzNDAgMzYlKTsKfQoKLm1qci1tZnYtcHJvZ3Jlc3MuaXMtZXJyb3IgLm1qci1tZnYtcHJvZ3Jlc3MtYmFyLS1ub2RlcywKLm1qci1tZnYtcHJvZ3Jlc3MuaXMtZXJyb3IgLm1qci1tZnYtcHJvZ3Jlc3MtYmFyLS1zdGVwcyB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgI2Q5NTM0ZiA3OCUsICM0YTE0MTQgMjIlKTsKfQoKLm1qci1tZnYtcHJvZ3Jlc3Mtb3ZlcmxheSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xOCksIHJnYmEoMCwgMCwgMCwgMC4xOCkpOwogICAgbWl4LWJsZW5kLW1vZGU6IHNjcmVlbjsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoubWpyLW1mdi1wcm9ncmVzcy10ZXh0IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDI7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGhlaWdodDogMTAwJTsKICAgIHBhZGRpbmc6IDAgOHB4OwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIHRleHQtc2hhZG93OiAwIDAgMnB4IHJnYmEoMCwgMCwgMCwgMC45KTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cn0KCi5tanItbWZ2LXBpbi1ncm91cCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiAycHg7CiAgICBmbGV4LXNocmluazogMDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7Cn0KLm1qci1tZnYtcGluLWJ0biB7CiAgICB3aWR0aDogMjZweDsKICAgIGhlaWdodDogMjZweDsKICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMik7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgcGFkZGluZzogMDsKICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLCBib3JkZXItY29sb3IgMTIwbXMgZWFzZSwgY29sb3IgMTIwbXMgZWFzZSwgYm94LXNoYWRvdyAxMjBtcyBlYXNlOwp9Ci5tanItbWZ2LXBpbi1idG46aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNDUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLCB2YXIoLS1tanItYWNjZW50KSA4JSk7Cn0KLm1qci1tZnYtcGluLWJ0bi5pcy1waW5uZWQgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTglLCAjZmZmZmZmIDEyJSk7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNDIlLCB2YXIoLS1tanItYWNjZW50KSA1OCUpOwogICAgY29sb3I6ICNlZWY3ZmY7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDI0JSwgdHJhbnNwYXJlbnQpOwp9CgovKiDilIDilIAgSWNvbiBidXR0b25zIGluc2lkZSBNRlYgKG91dHNpZGUgLm1qci1hc3NldHMtbWFuYWdlciBzY29wZSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5tanItbWZ2IC5tanItaWNvbi1idG4gewogICAgd2lkdGg6IDMwcHg7CiAgICBoZWlnaHQ6IDMwcHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGJvcmRlci1yYWRpdXM6IDdweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMik7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBwYWRkaW5nOiAwOwogICAgZmxleC1zaHJpbms6IDA7CiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMTIwbXMgZWFzZSwgYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLCBib3JkZXItY29sb3IgMTIwbXMgZWFzZSwgY29sb3IgMTIwbXMgZWFzZSwgYm94LXNoYWRvdyAxMjBtcyBlYXNlOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDQ1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDgwJSwgdmFyKC0tbWpyLWFjY2VudCkgOCUpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuOmZvY3VzLXZpc2libGUgewogICAgb3V0bGluZTogbm9uZTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU4JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAyNCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1tZnYgLm1qci1pY29uLWJ0biAucGkgewogICAgZm9udC1zaXplOiAxM3B4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBvcGFjaXR5OiAwLjk7Cn0KCi5tanItbWZ2IC5tanItaWNvbi1idG4ubWpyLWxpdmUtYWN0aXZlIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcykgNjAlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBjb2xvcjogdmFyKC0tbWpyLXN0YXR1cy1zdWNjZXNzKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4MCUsIHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcykgMTIlKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy1zdWNjZXNzKSAyNSUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1tZnYgLm1qci1pY29uLWJ0bi5tanItbGl2ZS1hY3RpdmUgLnBpIHsKICAgIG9wYWNpdHk6IDE7Cn0KCi5tanItbWZ2IC5tanItaWNvbi1idG4ubWpyLXByZXZpZXctYWN0aXZlIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDYwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgY29sb3I6IHZhcigtLW1qci1hY2NlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDgwJSwgdmFyKC0tbWpyLWFjY2VudCkgMTIlKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMjUlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWZ2IC5tanItaWNvbi1idG4ubWpyLXByZXZpZXctYWN0aXZlIC5waSB7CiAgICBvcGFjaXR5OiAxOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuLm1qci1ub2Rlc3RyZWFtLWFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZjk4MDApIDYwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgY29sb3I6IHZhcigtLW1qci1zdGF0dXMtd2FybmluZywgI2ZmOTgwMCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLCB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZjk4MDApIDEyJSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtd2FybmluZywgI2ZmOTgwMCkgMjUlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWZ2IC5tanItaWNvbi1idG4ubWpyLW5vZGVzdHJlYW0tYWN0aXZlIC5waSB7CiAgICBvcGFjaXR5OiAxOwp9CgovKiBQb3AtaW4gbW9kZSAodmlld2VyIHBvcHBlZCBvdXQpOiByYWlzZSBidXR0b24gY29udHJhc3QvYnJpZ2h0bmVzcyAqLwoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgewogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAgIDE4MGRlZywKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDkyJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSksCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA5MiUsIHJnYmEoMCwgMCwgMCwgMC4xOCkpCiAgICAgICAgKTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc0JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KSk7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KSwKICAgICAgICAwIDI0cHggNTZweCByZ2JhKDAsIDAsIDAsIDAuNDIpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1tZnYtaGVhZGVyIHsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KAogICAgICAgICAgICAxODBkZWcsCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4OCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgOTAlLCByZ2JhKDAsIDAsIDAsIDAuMjQpKQogICAgICAgICk7CiAgICBib3JkZXItYm90dG9tLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNzglLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpKTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItbWZ2LWhlYWRlci10aXRsZSB7CiAgICBvcGFjaXR5OiAwLjk4OwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZWVmNGZmKSA5NCUsICNmZmZmZmYgNiUpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1tZnYtdG9vbGJhciB7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgKICAgICAgICAgICAgMTgwZGVnLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgODglLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpKSwKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDkwJSwgcmdiYSgwLCAwLCAwLCAwLjI0KSkKICAgICAgICApOwogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc4JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi10b29sYmFyLXNlcCB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNzglLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItbWZ2LXByb2dyZXNzIHsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KAogICAgICAgICAgICAxODBkZWcsCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA4MiUsICMwYTExMTggMTglKSwKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDkyJSwgIzAwMCA4JSkKICAgICAgICApOwogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc4JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1wcm9ncmVzcy10ZXh0IHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2VlZjRmZikgOTQlLCAjZmZmZmZmIDYlKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItbWZ2LWNvbnRlbnQgewogICAgYmFja2dyb3VuZDoKICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IHRvcCwgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDEwJSwgdHJhbnNwYXJlbnQpIDAlLCB0cmFuc3BhcmVudCA0MiUpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA4MiUsICMwMDAgMTglKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItaWNvbi1idG4gewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNzYlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpKTsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KAogICAgICAgICAgICAxODBkZWcsCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4NiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgOTIlLCByZ2JhKDAsIDAsIDAsIDAuMTgpKQogICAgICAgICk7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcsICNkZGQpIDkyJSwgI2ZmZmZmZiA4JSkgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpLAogICAgICAgIDAgOHB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjE4KTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItaWNvbi1idG46aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTIlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgKICAgICAgICAgICAgMTgwZGVnLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTglLCB2YXIoLS1tanItYWNjZW50KSA0MiUpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgNjIlLCB2YXIoLS1tanItYWNjZW50KSAzOCUpCiAgICAgICAgKTsKICAgIGNvbG9yOiAjZjRmOGZmICFpbXBvcnRhbnQ7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLWljb24tYnRuIC5waSB7CiAgICBvcGFjaXR5OiAxOwogICAgY29sb3I6IGluaGVyaXQgIWltcG9ydGFudDsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItaWNvbi1idG4ubWpyLWxpdmUtYWN0aXZlIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcykgNjAlLCAjZmZmZmZmIDQwJSk7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgKICAgICAgICAgICAgMTgwZGVnLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy1zdWNjZXNzKSA2MiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy1zdWNjZXNzKSAzNiUsIHZhcigtLW1qci1zdXJmYWNlLTEpIDY0JSkKICAgICAgICApOwogICAgY29sb3I6ICNmZmZmZmYgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpLAogICAgICAgIDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy1zdWNjZXNzKSAyNCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAwIDAgMThweCByZ2JhKDc2LCAxNzUsIDgwLCAwLjE4KTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItaWNvbi1idG4ubWpyLXByZXZpZXctYWN0aXZlIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU4JSwgI2ZmZmZmZiA0MiUpOwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAgIDE4MGRlZywKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDYyJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSksCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAzNiUsIHZhcigtLW1qci1zdXJmYWNlLTEpIDY0JSkKICAgICAgICApOwogICAgY29sb3I6ICNmZmZmZmYgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpLAogICAgICAgIDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMjQlLCB0cmFuc3BhcmVudCksCiAgICAgICAgMCAwIDE4cHggcmdiYSg5NSwgMTc5LCAyNTUsIDAuMTgpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1pY29uLWJ0bi5tanItbm9kZXN0cmVhbS1hY3RpdmUgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCAjZmY5ODAwKSA1OCUsICNmZmZmZmYgNDIlKTsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KAogICAgICAgICAgICAxODBkZWcsCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZjk4MDApIDYyJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSksCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZjk4MDApIDM2JSwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgNjQlKQogICAgICAgICk7CiAgICBjb2xvcjogI2ZmZmZmZiAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiksCiAgICAgICAgMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZjk4MDApIDI0JSwgdHJhbnNwYXJlbnQpLAogICAgICAgIDAgMCAxOHB4IHJnYmEoMjU1LCAxNTIsIDAsIDAuMTgpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1tZnYtcGluLWJ0biB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3NiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNikpOwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAgIDE4MGRlZywKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDg0JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSksCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA5MiUsIHJnYmEoMCwgMCwgMCwgMC4xOCkpCiAgICAgICAgKTsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2RkZCkgOTIlLCAjZmZmZmZmIDglKTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItbWZ2LXBpbi1idG46aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTIlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgKICAgICAgICAgICAgMTgwZGVnLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTYlLCB2YXIoLS1tanItYWNjZW50KSA0NCUpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgNjQlLCB2YXIoLS1tanItYWNjZW50KSAzNiUpCiAgICAgICAgKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItbWZ2LXBpbi1idG4uaXMtcGlubmVkIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU4JSwgI2ZmZmZmZiA0MiUpOwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAgIDE4MGRlZywKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDYyJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSksCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAzNiUsIHZhcigtLW1qci1zdXJmYWNlLTEpIDY0JSkKICAgICAgICApOwogICAgY29sb3I6ICNmZmZmZmY7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLXNpZGViYXIgewogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAgIDE4MGRlZywKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDk0JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSksCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA5NCUsIHJnYmEoMCwgMCwgMCwgMC4xOCkpCiAgICAgICAgKTsKICAgIGJvcmRlci1sZWZ0LWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNzglLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpKTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDFweCAwIDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJsZWZ0Il0gLm1qci13cy1zaWRlYmFyIHsKICAgIGJvcmRlci1yaWdodC1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc4JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLXNpZGViYXItaGVhZGVyIHsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KAogICAgICAgICAgICAxODBkZWcsCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4NCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSkpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgOTIlLCByZ2JhKDAsIDAsIDAsIDAuMTgpKQogICAgICAgICk7CiAgICBib3JkZXItYm90dG9tLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNzYlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItd3Mtc2lkZWJhci10aXRsZSB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcsICNlZWY0ZmYpIDgyJSwgdmFyKC0tbWpyLW11dGVkKSAxOCUpOwogICAgb3BhY2l0eTogMC44ODsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItd3Mtbm9kZSB7CiAgICBib3JkZXItYm90dG9tLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNzIlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItd3Mtbm9kZS1oZWFkZXIgewogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDApKSwKICAgICAgICBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAgIDE4MGRlZywKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDg2JSwgdmFyKC0tbWpyLWFjY2VudCkgMTQlKSwKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDg2JSwgcmdiYSgwLCAwLCAwLCAwLjE0KSkKICAgICAgICApOwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy1ub2RlLXRpdGxlIHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2VlZjRmZikgOTQlLCAjZmZmZmZmIDYlKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItd3Mtd2lkZ2V0LWxhYmVsLAoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy1zaWRlYmFyLWVtcHR5LAoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy1ub2RlLWVtcHR5IHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLW11dGVkKSA4NCUsICNmZmZmZmYgMTYlKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItd3MtaW5wdXQgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDc0JSwgIzA1MDcwYSAyNiUpOwogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNzQlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpKTsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItd3MtaW5wdXQ6Zm9jdXMgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTglLCAjZmZmZmZmIDEwJSk7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSwKICAgICAgICAwIDAgMCAycHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDE4JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuLm1qci1wb3Bpbi1hY3RpdmUgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTglLCAjZmZmZmZmIDQyJSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNDUlLCB2YXIoLS1tanItYWNjZW50KSA1NSUpOwogICAgY29sb3I6ICNlZWY3ZmY7Cn0KCi8qIOKUgOKUgCBDb250ZW50IHdyYXBwZXIgKGhvcml6b250YWwgZmxleDogY29udGVudCArIHNpZGViYXIpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoubWpyLW1mdi1jb250ZW50LXdyYXBwZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXg6IDE7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLyog4pSA4pSAIFNpZGViYXIgcG9zaXRpb24gdmFyaWFudHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJsZWZ0Il0gewogICAgZmxleC1kaXJlY3Rpb246IHJvdzsKfQoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0ibGVmdCJdIC5tanItd3Mtc2lkZWJhciB7CiAgICBib3JkZXItbGVmdDogbm9uZTsKICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwp9Ci5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSB7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwp9Ci5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLXdzLXNpZGViYXIgewogICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMDsKICAgIHRyYW5zaXRpb246IGhlaWdodCAwLjJzIGVhc2UsIHdpZHRoIDBzOwp9Ci5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLXdzLXNpZGViYXIub3BlbiB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMjIwcHg7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgcmVzaXplOiB2ZXJ0aWNhbDsKICAgIG1pbi1oZWlnaHQ6IDEyMHB4OwogICAgbWF4LWhlaWdodDogNjUlOwp9CgovKiDilIDilIAgQ29udGVudCBhcmVhIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoubWpyLW1mdi1jb250ZW50IHsKICAgIGZsZXg6IDE7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgYmFja2dyb3VuZDogIzBkMGQwZDsKICAgIG1pbi1oZWlnaHQ6IDA7Cn0KCi5tanItbWZ2LW1lZGlhLXByb2dyZXNzIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMTBweDsKICAgIGxlZnQ6IDEwcHg7CiAgICB6LWluZGV4OiA2OwogICAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4KTsKICAgIHBhZGRpbmc6IDVweCA5cHg7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KSkgODglLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgcmdiYSg1LCA4LCAxNCwgMC44NikgODYlLCB2YXIoLS1tanItc3VyZmFjZS0wLCAjMTExKSAxNCUpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNmNWY3ZmEpOwogICAgYm94LXNoYWRvdzogMCAycHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMjgpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBvcGFjaXR5OiAwOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00cHgpOwogICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE2cyBlYXNlLCB0cmFuc2Zvcm0gMC4xNnMgZWFzZTsKfQoKLm1qci1tZnYtbWVkaWEtcHJvZ3Jlc3MuaXMtdmlzaWJsZSB7CiAgICBvcGFjaXR5OiAxOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwp9CgoubWpyLW1mdi1tZWRpYS1wcm9ncmVzcy5pcy1lcnJvciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLWVycm9yLCAjZmY1YzdhKSA3MiUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCByZ2JhKDYwLCAxMCwgMTgsIDAuOSkgODIlLCB2YXIoLS1tanItc3VyZmFjZS0wLCAjMTExKSAxOCUpOwp9CgoubWpyLW1mdi1tZWRpYS1wcm9ncmVzcy10ZXh0IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBsaW5lLWhlaWdodDogMS4yOwp9CgovKiDilIDilIAgV29ya2Zsb3cgU2lkZWJhciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLm1qci13cy1zaWRlYmFyIHsKICAgIHdpZHRoOiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEsICMyYTJhMmEpOwogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIHRyYW5zaXRpb246IHdpZHRoIDAuMnMgZWFzZTsKICAgIGZsZXgtc2hyaW5rOiAwOwp9CgoubWpyLXdzLXNpZGViYXIub3BlbiB7CiAgICB3aWR0aDogMjYwcHg7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgcmVzaXplOiBob3Jpem9udGFsOwogICAgbWluLXdpZHRoOiAxODBweDsKICAgIG1heC13aWR0aDogNjUlOwogICAgdHJhbnNpdGlvbjogbm9uZTsKfQoKLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImJvdHRvbSJdIC5tanItd3Mtc2lkZWJhciB7CiAgICByZXNpemU6IG5vbmU7Cn0KCi5tanItd3Mtc2lkZWJhci1oZWFkZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgbWluLWhlaWdodDogMzRweDsKfQoubWpyLXdzLXNpZGViYXItdGl0bGUgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7CiAgICBvcGFjaXR5OiAwLjY1Owp9Ci5tanItd3Mtc2lkZWJhci1ib2R5IHsKICAgIHBhZGRpbmc6IDA7Cn0KLm1qci13cy1zaWRlYmFyLWVtcHR5IHsKICAgIHBhZGRpbmc6IDI0cHggMTZweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgbGluZS1oZWlnaHQ6IDEuNTsKfQoKLyog4pSA4pSAIE5vZGUgc2VjdGlvbnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5tanItd3Mtbm9kZSB7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7Cn0KLm1qci13cy1ub2RlLWhlYWRlciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTAsICMxZTFlMWUpIDQwJSwgdmFyKC0tbWpyLXN1cmZhY2UtMSwgIzJhMmEyYSkgNjAlKTsKfQoubWpyLXdzLW5vZGUtdGl0bGUgewogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICBmbGV4OiAxOwogICAgbWFyZ2luLXJpZ2h0OiA2cHg7Cn0KLm1qci13cy1ub2RlLWJvZHkgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDRweDsKICAgIHBhZGRpbmc6IDZweCAxMHB4Owp9Ci5tanItd3Mtbm9kZS1lbXB0eSB7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpOwogICAgcGFkZGluZzogNHB4IDA7Cn0KCi8qIOKUgOKUgCBXaWRnZXQgcm93cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLm1qci13cy13aWRnZXQtcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgIGdhcDogOHB4Owp9Ci5tanItd3Mtd2lkZ2V0LXJvdy0tYmxvY2sgewogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMnB4Owp9Ci5tanItd3Mtd2lkZ2V0LXJvdy0tYmxvY2sgLm1qci13cy13aWRnZXQtbGFiZWwgewogICAgZmxleDogbm9uZTsKICAgIHBhZGRpbmctdG9wOiAwOwp9Ci5tanItd3Mtd2lkZ2V0LXJvdy0tYmxvY2sgLm1qci13cy13aWRnZXQtaW5wdXQgewogICAgd2lkdGg6IDEwMCU7Cn0KLm1qci13cy13aWRnZXQtbGFiZWwgewogICAgZmxleDogMCAwIDgwcHg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBjb2xvcjogdmFyKC0tZGVzY3JpcC10ZXh0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTUpKTsKICAgIHBhZGRpbmctdG9wOiA1cHg7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwp9Ci5tanItd3Mtd2lkZ2V0LWlucHV0IHsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDA7Cn0KLm1qci13cy1pbnB1dCB7CiAgICB3aWR0aDogMTAwJTsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LWlucHV0LWJnLCAjMjIyKTsKICAgIGNvbG9yOiB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgcGFkZGluZzogNHB4IDZweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgb3V0bGluZTogbm9uZTsKICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAxMjBtcyBlYXNlOwp9Ci5tanItd3MtaW5wdXQ6Zm9jdXMgewogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKfQoubWpyLXdzLXRleHRhcmVhIHsKICAgIHJlc2l6ZTogdmVydGljYWw7CiAgICBtaW4taGVpZ2h0OiAyOHB4OwogICAgbWF4LWhlaWdodDogODBweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgdHJhbnNpdGlvbjogbWF4LWhlaWdodCAxNTBtcyBlYXNlOwp9Ci5tanItd3MtdGV4dC13cmFwcGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAycHg7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiAwOwp9Ci5tanItd3MtdGV4dC13cmFwcGVyIC5tanItd3MtdGV4dGFyZWEgewogICAgd2lkdGg6IDEwMCU7Cn0KLm1qci13cy1leHBhbmQtYnRuIHsKICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kOwogICAgYmFja2dyb3VuZDogbm9uZTsKICAgIGJvcmRlcjogbm9uZTsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHBhZGRpbmc6IDAgNHB4OwogICAgb3BhY2l0eTogMC44Owp9Ci5tanItd3MtZXhwYW5kLWJ0bjpob3ZlciB7CiAgICBvcGFjaXR5OiAxOwogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0KLm1qci13cy1yZWFkb25seSB7CiAgICBvcGFjaXR5OiAwLjU7CiAgICBjdXJzb3I6IGRlZmF1bHQ7Cn0KLm1qci13cy1jaGVja2JveCB7CiAgICBhY2NlbnQtY29sb3I6IHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpOwogICAgd2lkdGg6IDE2cHg7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICBtYXJnaW4tdG9wOiA0cHg7Cn0KLm1qci13cy10b2dnbGUtbGFiZWwgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7Cn0KCi8qIOKUgOKUgCBMb2NhdGUgYnV0dG9uIGluc2lkZSBub2RlIGhlYWRlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLm1qci13cy1sb2NhdGUgewogICAgd2lkdGg6IDI0cHggIWltcG9ydGFudDsKICAgIGhlaWdodDogMjRweCAhaW1wb3J0YW50OwogICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgb3BhY2l0eTogMC41Owp9Ci5tanItd3MtbG9jYXRlOmhvdmVyIHsKICAgIG9wYWNpdHk6IDE7Cn0KCi8qIOKUgOKUgCBSdW4gYnV0dG9uIHN0YXRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoubWpyLW1mdi1ydW4tY29udHJvbHMgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA0cHg7Cn0KLm1qci1tZnYtcnVuLWJ0biAucGkgeyBjb2xvcjogdmFyKC0tbWpyLXN0YXR1cy1zdWNjZXNzLCAjNENBRjUwKTsgfQoubWpyLW1mdi1ydW4tYnRuLnJ1bm5pbmcgLnBpIHsgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSk7IH0KLm1qci1tZnYtcnVuLWJ0bi5zdG9wcGluZyAucGkgeyBjb2xvcjogdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCAjRkZBNzI2KTsgfQoubWpyLW1mdi1ydW4tYnRuLmVycm9yIC5waSB7IGNvbG9yOiAjZjQ0MzM2OyB9CgoubWpyLW1mdi1zdG9wLWJ0biAucGkgeyBjb2xvcjogI2VmNTM1MDsgfQoubWpyLW1mdi1zdG9wLWJ0bi5hY3RpdmUgLnBpIHsgY29sb3I6ICNmZjhhNjU7IH0KLm1qci1tZnYtc3RvcC1idG4uc3RvcHBpbmcgLnBpIHsgY29sb3I6IHZhcigtLW1qci1zdGF0dXMtd2FybmluZywgI0ZGQTcyNik7IH0KCi8qIOKUgOKUgCBGbG9hdGluZyBWaWV3ZXIgc2ltcGxlIHZpZGVvIHBsYXllciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLm1qci1tZnYtc2ltcGxlLXBsYXllciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLmlzLWF1ZGlvIHsKICAgIGJhY2tncm91bmQ6IHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgMjAlIDIwJSwgcmdiYSg5NSwgMTc5LCAyNTUsIDAuMiksIHJnYmEoMTgsIDIwLCAyOCwgMC45NSkpOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLWF1ZGlvLWJhY2tkcm9wIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMnB4OwogICAgdGV4dC1zaGFkb3c6IDAgMnB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjQ1KTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgcGFkZGluZzogMThweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci1jb250cm9scyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAxMnB4OwogICAgcmlnaHQ6IDEycHg7CiAgICBib3R0b206IDEycHg7CiAgICB6LWluZGV4OiAzMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nOiA5cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDE0cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHRvcCwgcmdiYSgxMCwgMTAsIDE0LCAwLjc2KSwgcmdiYSgxNiwgMTYsIDI0LCAwLjU1KSk7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTsKICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLXJvdyB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci1zZWVrIHsKICAgIC0tbWpyLXNlZWstcGN0OiAwJTsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogNnB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBvdXRsaW5lOiBub25lOwogICAgYm9yZGVyOiBub25lOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIHRvIHJpZ2h0LAogICAgICAgICNmZjJmNTIgMCUsCiAgICAgICAgI2ZmMmY1MiB2YXIoLS1tanItc2Vlay1wY3QpLAogICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNCkgdmFyKC0tbWpyLXNlZWstcGN0KSwKICAgICAgICByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjQpIDEwMCUKICAgICk7CiAgICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItc2Vlazo6LXdlYmtpdC1zbGlkZXItdGh1bWIgewogICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgd2lkdGg6IDEycHg7CiAgICBoZWlnaHQ6IDEycHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zNSk7CiAgICBiYWNrZ3JvdW5kOiAjZmYyZjUyOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLXNlZWs6Oi1tb3otcmFuZ2UtdGh1bWIgewogICAgd2lkdGg6IDEycHg7CiAgICBoZWlnaHQ6IDEycHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zNSk7CiAgICBiYWNrZ3JvdW5kOiAjZmYyZjUyOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLWJ0biB7CiAgICB3aWR0aDogMzBweDsKICAgIGhlaWdodDogMzBweDsKICAgIG1pbi13aWR0aDogMzBweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIyKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7Cn0KCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItYnRuIC5waSB7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk1KTsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci1idG4uaXMtZGlzYWJsZWQsCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItc2Vlay5pcy1kaXNhYmxlZCB7CiAgICBvcGFjaXR5OiAwLjQ1OwogICAgY3Vyc29yOiBkZWZhdWx0Owp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLXRpbWUgewogICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkyKTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7Cn0KCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItZnJhbWUgewogICAgbWFyZ2luLXJpZ2h0OiAycHg7CiAgICBwYWRkaW5nOiAzcHggOHB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwp9CgovKiDilIDilIAgU2V0dGluZ3MgYnV0dG9uIGFjdGl2ZSBzdGF0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLm1qci1tZnYtc2V0dGluZ3MtYnRuLmFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKSA1NSUsIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpKTsKICAgIGJhY2tncm91bmQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yLCAjMzMzKSA3MCUsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpIDE4JSk7Cn0KLm1qci1tZnYtc2V0dGluZ3MtYnRuLmFjdGl2ZSAucGkgewogICAgY29sb3I6IHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpOwp9CgovKiDilIDilIAgQ2xvc2UgYnV0dG9uIChyZWQpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoubWpyLW1mdiAubWpyLW1mdi1jbG9zZS1idG4gewogICAgY29sb3I6ICNlODUwNTA7Cn0KLm1qci1tZnYgLm1qci1tZnYtY2xvc2UtYnRuOmhvdmVyIHsKICAgIGNvbG9yOiAjZmY2YjZiOwogICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyMzIsIDgwLCA4MCwgMC4xNSk7Cn0KCi8qIOKUgOKUgCBFbXB0eSBzdGF0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLm1qci1tZnYtZW1wdHkgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHBhZGRpbmc6IDEycHg7Cn0KCi8qIOKUgOKUgCBDb21wYXJlIGxhYmVscyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLm1qci1tZnYtbGFiZWwgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiA4cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNTgpOwogICAgY29sb3I6ICNmZmY7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgcGFkZGluZzogMnB4IDdweDsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgei1pbmRleDogMjA7CiAgICBsZXR0ZXItc3BhY2luZzogMC40cHg7Cn0KCi5tanItbWZ2LWxhYmVsLmxhYmVsLWxlZnQgIHsgbGVmdDogOHB4OyB9Ci5tanItbWZ2LWxhYmVsLmxhYmVsLXJpZ2h0IHsgcmlnaHQ6IDhweDsgfQoKLyog4pSA4pSAIEFCIGRpdmlkZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5tanItbWZ2LWFiLWRpdmlkZXIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAwOwogICAgYm90dG9tOiAwOwogICAgd2lkdGg6IDAuNXB4OwogICAgY3Vyc29yOiBjb2wtcmVzaXplOwogICAgei1pbmRleDogMTA7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODgpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMC41cHggcmdiYSgwLCAwLCAwLCAwLjQpLCAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAxMDBtcyBlYXNlOwp9CgoubWpyLW1mdi1hYi1kaXZpZGVyOjpiZWZvcmUgewogICAgY29udGVudDogIiI7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDA7CiAgICBib3R0b206IDA7CiAgICBsZWZ0OiA1MCU7CiAgICB3aWR0aDogMTJweDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKfQoKLm1qci1tZnYtYWItZGl2aWRlcjpob3ZlciwKLm1qci1tZnYtYWItZGl2aWRlcjphY3RpdmUgewogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7Cn0KCi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAogICBNRlYgR2VvbWV0cnkgJiBMYXlvdXQgQ2xhc3NlcyAocmVwbGFjZXMgaW5saW5lIHN0eWxlcyBpbiBGbG9hdGluZ1ZpZXdlci5qcykKICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovCgovKiBNYWluIE1GViBjb250YWluZXIgZ2VvbWV0cnkgKi8KLm1qci1tZnYgewogICAgcG9zaXRpb246IGZpeGVkOwogICAgdG9wOiB2YXIoLS1tanItbWZ2LXRvcC1vZmZzZXQsIDYwcHgpOwogICAgcmlnaHQ6IDIwcHg7CiAgICB3aWR0aDogNDgwcHg7CiAgICBoZWlnaHQ6IDM4MHB4OwogICAgbWluLXdpZHRoOiAyMjBweDsKICAgIG1pbi1oZWlnaHQ6IDE2MHB4OwogICAgLyogQWx3YXlzIGZsZXg7IHZpc2liaWxpdHkgKyBvcGFjaXR5IGNvbnRyb2wgc2hvdy9oaWRlIHNvIENTUyB0cmFuc2l0aW9ucyB3b3JrLgogICAgICAgcG9pbnRlci1ldmVudHM6bm9uZSB3aGlsZSBoaWRkZW4gcHJldmVudHMgYWNjaWRlbnRhbCBpbnRlcmFjdGlvbi4gKi8KICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgcmVzaXplOiBib3RoOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHotaW5kZXg6IDEwMDAwOwogICAgLyogSGlkZGVuIHN0YXRlICovCiAgICBvcGFjaXR5OiAwOwogICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTZweCkgc2NhbGUoMC45OCk7CiAgICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgcmlnaHQ7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMThzIGVhc2Utb3V0LAogICAgICAgICAgICAgICAgdHJhbnNmb3JtIDAuMThzIGVhc2Utb3V0LAogICAgICAgICAgICAgICAgdmlzaWJpbGl0eSAwcyBsaW5lYXIgMC4xOHM7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXJlc2l6aW5nIHsKICAgIHVzZXItc2VsZWN0OiBub25lOwp9CgoubWpyLW1mdi5pcy12aXNpYmxlIHsKICAgIG9wYWNpdHk6IDE7CiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwogICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgc2NhbGUoMSk7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMThzIGVhc2Utb3V0LAogICAgICAgICAgICAgICAgdHJhbnNmb3JtIDAuMThzIGVhc2Utb3V0LAogICAgICAgICAgICAgICAgdmlzaWJpbGl0eSAwcyBsaW5lYXIgMHM7Cn0KCgovKiBNZWRpYSBlbGVtZW50cyAoaW1nL3ZpZGVvKSBzaXppbmcgdmFyaWFudHMgKi8KLm1qci1tZnYtbWVkaWEgewogICAgZGlzcGxheTogYmxvY2s7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIG1heC1oZWlnaHQ6IDEwMCU7CiAgICBvYmplY3QtZml0OiBjb250YWluOwogICAgb2JqZWN0LXBvc2l0aW9uOiBjZW50ZXI7Cn0KCi5tanItbWZ2LW1lZGlhLS1maXQtaGVpZ2h0IHsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgbWF4LXdpZHRoOiAxMDAlOwogICAgbWF4LWhlaWdodDogMTAwJTsKICAgIG9iamVjdC1maXQ6IGNvbnRhaW47CiAgICBvYmplY3QtcG9zaXRpb246IGNlbnRlcjsKfQoKLm1qci1tZnYtbWVkaWEtLWZpbGwgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBtYXgtaGVpZ2h0OiAxMDAlOwogICAgb2JqZWN0LWZpdDogY29udGFpbjsKICAgIG9iamVjdC1wb3NpdGlvbjogY2VudGVyOwogICAgZGlzcGxheTogYmxvY2s7Cn0KCi8qIEF1ZGlvIGNhcmQgaW5zaWRlIE1GViAqLwoubWpyLW1mdi1hdWRpby1jYXJkIHsKICAgIHdpZHRoOiBtaW4oOTIlLCA1NjBweCk7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMTBweDsKICAgIHBhZGRpbmc6IDEycHg7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxNjBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNiksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMikpOwogICAgYm94LXNoYWRvdzogMCA2cHggMTZweCByZ2JhKDAsIDAsIDAsIDAuMzUpOwp9CgoubWpyLW1mdi1hdWRpby1oZWFkIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItbWZ2LWF1ZGlvLWljb24gewogICAgY29sb3I6IHZhcigtLW1qci1iYWRnZS1hdWRpbywgI0ZGOTgwMCk7CiAgICBvcGFjaXR5OiAwLjk1Owp9CgoubWpyLW1mdi1hdWRpby10aXRsZSB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKfQoKLm1qci1tZnYtYXVkaW8tcGxheWVyIHsKICAgIHdpZHRoOiAxMDAlOwp9CgoubWpyLW1mdi1zaWRlLXBhbmVsIC5tanItbWZ2LWF1ZGlvLWNhcmQsCi5tanItbWZ2LWFiLWxheWVyIC5tanItbWZ2LWF1ZGlvLWNhcmQsCi5tanItbWZ2LWdyaWQtY2VsbCAubWpyLW1mdi1hdWRpby1jYXJkIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4KTsKfQoKLyogVmlkZW8gZWxlbWVudCBzcGVjaWZpYyBzdHlsZXMgKi8KLm1qci1tZnYtbWVkaWEtdmlkZW8gewogICAgLyogSW5oZXJpdHMgZnJvbSAubWpyLW1mdi1tZWRpYSBvciAubWpyLW1mdi1tZWRpYS0tZmlsbCAqLwp9CgovKiBHZW4gaW5mbyBvdmVybGF5IOKAlCBhbGwgbW9kZXMgc2hhcmUgYmFzZSBsYXlvdXQgKi8KLm1qci1tZnYtZ2VuaW5mbywKLm1qci1tZnYtZ2VuaW5mby1hLAoubWpyLW1mdi1nZW5pbmZvLWIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogOHB4OwogICAgcmlnaHQ6IDhweDsKICAgIGJvdHRvbTogOHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjY1KTsKICAgIGNvbG9yOiAjZmZmOwogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBtYXgtaGVpZ2h0OiA0MCU7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgb3ZlcnNjcm9sbC1iZWhhdmlvci15OiBjb250YWluOwogICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgdG91Y2gtYWN0aW9uOiBwYW4teTsKICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOwogICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC40KTsKfQoKLyogS2VlcCBHZW4gSW5mbyBhYm92ZSBjdXN0b20gc2ltcGxlLXBsYXllciBjb250cm9scyB3aGVuIHByZXNlbnQuICovCi5tanItbWZ2LWdlbmluZm8ubWpyLW1mdi1nZW5pbmZvLS1hYm92ZS1wbGF5ZXIsCi5tanItbWZ2LWdlbmluZm8tYS5tanItbWZ2LWdlbmluZm8tLWFib3ZlLXBsYXllciwKLm1qci1tZnYtZ2VuaW5mby1iLm1qci1tZnYtZ2VuaW5mby0tYWJvdmUtcGxheWVyIHsKICAgIHRvcDogOHB4OwogICAgYm90dG9tOiBhdXRvOwogICAgbWF4LWhlaWdodDogbWluKDQ1JSwgY2FsYygxMDAlIC0gMTI0cHgpKTsKfQoKLyogRmFsbGJhY2s6IHdoZW4gc2ltcGxlLXBsYXllciBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIGdlbmluZm8gb3ZlcmxheSwKICAgbW92ZSBpdCB1cCBldmVuIGlmIHRoZSBtb2RpZmllciBjbGFzcyB3YXMgbm90IGF0dGFjaGVkLiAqLwoubWpyLW1mdi1zaW1wbGUtcGxheWVyICsgLm1qci1tZnYtZ2VuaW5mbywKLm1qci1tZnYtc2ltcGxlLXBsYXllciArIC5tanItbWZ2LWdlbmluZm8tYSwKLm1qci1tZnYtc2ltcGxlLXBsYXllciArIC5tanItbWZ2LWdlbmluZm8tYiB7CiAgICB0b3A6IDhweDsKICAgIGJvdHRvbTogYXV0bzsKICAgIG1heC1oZWlnaHQ6IG1pbig0NSUsIGNhbGMoMTAwJSAtIDEyNHB4KSk7Cn0KCi8qIEFCIG1vZGUgb3ZlcmxheXMgYXJlIGF0dGFjaGVkIGF0IGNvbnRhaW5lciBsZXZlbDsgc2hpZnQgdGhlbSB3aGVuIEFCIGxheWVycyB1c2Ugc2ltcGxlLXBsYXllci4gKi8KLm1qci1tZnYtYWItY29udGFpbmVyOmhhcygubWpyLW1mdi1hYi1sYXllciAubWpyLW1mdi1zaW1wbGUtcGxheWVyKSAubWpyLW1mdi1nZW5pbmZvLWEsCi5tanItbWZ2LWFiLWNvbnRhaW5lcjpoYXMoLm1qci1tZnYtYWItbGF5ZXIgLm1qci1tZnYtc2ltcGxlLXBsYXllcikgLm1qci1tZnYtZ2VuaW5mby1iIHsKICAgIHRvcDogOHB4OwogICAgYm90dG9tOiBhdXRvOwogICAgbWF4LWhlaWdodDogbWluKDQ1JSwgY2FsYygxMDAlIC0gMTI0cHgpKTsKfQoKLyogU2hhcmVkIHN0eWxlIGZvciBhbGwgZ2VuIGluZm8gb3ZlcmxheSB2YXJpYW50cyAqLwoubWpyLW1mdi1nZW5pbmZvIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1hIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1iIHN0cm9uZyB7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbWFyZ2luLXJpZ2h0OiA0cHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk1KTsgLyogZGVmYXVsdCDigJQgb3ZlcnJpZGRlbiBwZXIgZmllbGQgYmVsb3cgKi8KfQoKLyogUGVyLWZpZWxkIGxhYmVsIGNvbG9ycyAqLwoubWpyLW1mdi1nZW5pbmZvIFtkYXRhLWZpZWxkPSJwcm9tcHQiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYSBbZGF0YS1maWVsZD0icHJvbXB0Il0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgW2RhdGEtZmllbGQ9InByb21wdCJdIHN0cm9uZyB7IGNvbG9yOiAjN2VjOGZmOyB9IC8qIGJsdWUgICDigJQgUHJvbXB0ICovCgoubWpyLW1mdi1nZW5pbmZvIFtkYXRhLWZpZWxkPSJzZWVkIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWEgW2RhdGEtZmllbGQ9InNlZWQiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYiBbZGF0YS1maWVsZD0ic2VlZCJdIHN0cm9uZyAgIHsgY29sb3I6ICNmZmQ0N2E7IH0gLyogYW1iZXIgIOKAlCBTZWVkICAgKi8KCi5tanItbWZ2LWdlbmluZm8gW2RhdGEtZmllbGQ9Im1vZGVsIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWEgW2RhdGEtZmllbGQ9Im1vZGVsIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgW2RhdGEtZmllbGQ9Im1vZGVsIl0gc3Ryb25nICB7IGNvbG9yOiAjN2RkYThhOyB9IC8qIGdyZWVuICDigJQgTW9kZWwgICovCgoubWpyLW1mdi1nZW5pbmZvIFtkYXRhLWZpZWxkPSJsb3JhIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWEgW2RhdGEtZmllbGQ9ImxvcmEiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYiBbZGF0YS1maWVsZD0ibG9yYSJdIHN0cm9uZyAgIHsgY29sb3I6ICNkNDhjZmY7IH0gLyogdmlvbGV0IOKAlCBMb1JBICAgKi8KCi5tanItbWZ2LWdlbmluZm8gW2RhdGEtZmllbGQ9InNhbXBsZXIiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYSBbZGF0YS1maWVsZD0ic2FtcGxlciJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1iIFtkYXRhLWZpZWxkPSJzYW1wbGVyIl0gc3Ryb25nIHsgY29sb3I6ICNmZjlmN2E7IH0gLyogb3JhbmdlIOKAlCBTYW1wbGVyICovCgoubWpyLW1mdi1nZW5pbmZvIFtkYXRhLWZpZWxkPSJzY2hlZHVsZXIiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYSBbZGF0YS1maWVsZD0ic2NoZWR1bGVyIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgW2RhdGEtZmllbGQ9InNjaGVkdWxlciJdIHN0cm9uZyB7IGNvbG9yOiAjZmY3YTlmOyB9IC8qIHBpbmsgICDigJQgU2NoZWR1bGVyICovCgoubWpyLW1mdi1nZW5pbmZvIFtkYXRhLWZpZWxkPSJjZmciXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYSBbZGF0YS1maWVsZD0iY2ZnIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgW2RhdGEtZmllbGQ9ImNmZyJdIHN0cm9uZyAgICB7IGNvbG9yOiAjN2E5ZmZmOyB9IC8qIGluZGlnbyDigJQgQ0ZHICovCgoubWpyLW1mdi1nZW5pbmZvIFtkYXRhLWZpZWxkPSJzdGVwIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWEgW2RhdGEtZmllbGQ9InN0ZXAiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYiBbZGF0YS1maWVsZD0ic3RlcCJdIHN0cm9uZyAgIHsgY29sb3I6ICM3YWZmZDQ7IH0gLyogdGVhbCAgIOKAlCBTdGVwICovCgoubWpyLW1mdi1nZW5pbmZvIFtkYXRhLWZpZWxkPSJnZW5UaW1lIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWEgW2RhdGEtZmllbGQ9ImdlblRpbWUiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYiBbZGF0YS1maWVsZD0iZ2VuVGltZSJdIHN0cm9uZyB7IGNvbG9yOiAjZTBmZjdhOyB9IC8qIGxpbWUgICDigJQgR2VuIFRpbWUgKi8KCi5tanItbWZ2LWdlbmluZm8gZGl2LAoubWpyLW1mdi1nZW5pbmZvLWEgZGl2LAoubWpyLW1mdi1nZW5pbmZvLWIgZGl2IHsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgbWFyZ2luLWJvdHRvbTogM3B4Owp9CgoubWpyLW1mdi1nZW5pbmZvIGRpdjpsYXN0LWNoaWxkLAoubWpyLW1mdi1nZW5pbmZvLWEgZGl2Omxhc3QtY2hpbGQsCi5tanItbWZ2LWdlbmluZm8tYiBkaXY6bGFzdC1jaGlsZCB7CiAgICBtYXJnaW4tYm90dG9tOiAwOwp9CgoKLyogU2ltcGxlIG1vZGUgY29udGFpbmVyICovCi5tanItbWZ2LXNpbXBsZS1jb250YWluZXIgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLyogQUIgbW9kZSBjb250YWluZXIgKi8KLm1qci1tZnYtYWItY29udGFpbmVyIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJhY2tncm91bmQ6ICMwMDA7Cn0KCi8qIEFCIG1vZGUgbGF5ZXJzICovCi5tanItbWZ2LWFiLWxheWVyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKfQoKLm1qci1tZnYtYWItbGF5ZXItLWIgewogICAgLyogY2xpcC1wYXRoIGFwcGxpZWQgaW5saW5lIGZvciBkeW5hbWljIGRpdmlkZXIgcG9zaXRpb24gKi8KfQoKLyogU2lkZS1ieS1zaWRlIG1vZGUgY29udGFpbmVyICovCi5tanItbWZ2LXNpZGUtY29udGFpbmVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGdhcDogMnB4OwogICAgYmFja2dyb3VuZDogIzExMTsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi8qIFNpZGUtYnktc2lkZSBoYWxmIHBhbmVscyAqLwoubWpyLW1mdi1zaWRlLXBhbmVsIHsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGJhY2tncm91bmQ6ICMwZDBkMGQ7Cn0KCi8qIEdyaWQgY29tcGFyZSAoMsOXMikgY29udGFpbmVyICovCi5tanItbWZ2LWdyaWQtY29udGFpbmVyIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7CiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDFmciAxZnI7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGdhcDogMnB4OwogICAgYmFja2dyb3VuZDogIzExMTsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi8qIEdyaWQgY2VsbHMgKi8KLm1qci1tZnYtZ3JpZC1jZWxsIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYmFja2dyb3VuZDogIzBkMGQwZDsKICAgIG1pbi13aWR0aDogMDsKICAgIG1pbi1oZWlnaHQ6IDA7Cn0KCi8qIEdlbiBpbmZvIG92ZXJsYXlzIGZvciBncmlkIGNlbGxzIEMgYW5kIEQgKi8KLm1qci1tZnYtZ2VuaW5mby1jLAoubWpyLW1mdi1nZW5pbmZvLWQgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogOHB4OwogICAgcmlnaHQ6IDhweDsKICAgIGJvdHRvbTogOHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjY1KTsKICAgIGNvbG9yOiAjZmZmOwogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBtYXgtaGVpZ2h0OiA0MCU7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgb3ZlcnNjcm9sbC1iZWhhdmlvci15OiBjb250YWluOwogICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgdG91Y2gtYWN0aW9uOiBwYW4teTsKICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOwogICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC40KTsKfQoKLm1qci1tZnYtZ2VuaW5mby1jIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1kIHN0cm9uZyB7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbWFyZ2luLXJpZ2h0OiA0cHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk1KTsKfQoKLyogUGVyLWZpZWxkIGxhYmVsIGNvbG9ycyBmb3IgQy9EIGdlbiBpbmZvIG92ZXJsYXlzICovCi5tanItbWZ2LWdlbmluZm8tYyBbZGF0YS1maWVsZD0icHJvbXB0Il0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgW2RhdGEtZmllbGQ9InByb21wdCJdIHN0cm9uZyB7IGNvbG9yOiAjN2VjOGZmOyB9Ci5tanItbWZ2LWdlbmluZm8tYyBbZGF0YS1maWVsZD0ic2VlZCJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1kIFtkYXRhLWZpZWxkPSJzZWVkIl0gc3Ryb25nICAgeyBjb2xvcjogI2ZmZDQ3YTsgfQoubWpyLW1mdi1nZW5pbmZvLWMgW2RhdGEtZmllbGQ9Im1vZGVsIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgW2RhdGEtZmllbGQ9Im1vZGVsIl0gc3Ryb25nICB7IGNvbG9yOiAjN2RkYThhOyB9Ci5tanItbWZ2LWdlbmluZm8tYyBbZGF0YS1maWVsZD0ibG9yYSJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1kIFtkYXRhLWZpZWxkPSJsb3JhIl0gc3Ryb25nICAgeyBjb2xvcjogI2Q0OGNmZjsgfQoubWpyLW1mdi1nZW5pbmZvLWMgW2RhdGEtZmllbGQ9InNhbXBsZXIiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tZCBbZGF0YS1maWVsZD0ic2FtcGxlciJdIHN0cm9uZyB7IGNvbG9yOiAjZmY5ZjdhOyB9Ci5tanItbWZ2LWdlbmluZm8tYyBbZGF0YS1maWVsZD0ic2NoZWR1bGVyIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgW2RhdGEtZmllbGQ9InNjaGVkdWxlciJdIHN0cm9uZyB7IGNvbG9yOiAjZmY3YTlmOyB9Ci5tanItbWZ2LWdlbmluZm8tYyBbZGF0YS1maWVsZD0iY2ZnIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgW2RhdGEtZmllbGQ9ImNmZyJdIHN0cm9uZyAgICAgeyBjb2xvcjogIzdhOWZmZjsgfQoubWpyLW1mdi1nZW5pbmZvLWMgW2RhdGEtZmllbGQ9InN0ZXAiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tZCBbZGF0YS1maWVsZD0ic3RlcCJdIHN0cm9uZyAgICB7IGNvbG9yOiAjN2FmZmQ0OyB9CgovKiBHZW4gaW5mbyBhY3RpdmUgc3RhdGUg4oCUIGJ1dHRvbiBnbG93cyB3aGVuIGF0IGxlYXN0IG9uZSBmaWVsZCBpcyBzZWxlY3RlZCAqLwoubWpyLW1mdiAubWpyLWljb24tYnRuLmlzLW9uIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSh2YXIoLS1tanItZ3JvdXAtYWNjZW50LCA5NSwgMTc5LCAyNTUpLCAwLjU1KTsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yLCAjMzMzKSA4MCUsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpIDE1JSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpIDI1JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuLmlzLW9wZW4gewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZikgNjIlLCAjZmZmZmZmIDEyJSk7CiAgICBjb2xvcjogI2VlZjdmZjsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoOTUsIDE3OSwgMjU1LCAwLjI4KSwgcmdiYSg5NSwgMTc5LCAyNTUsIDAuMTQpKTsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAwIDAgMXB4IHJnYmEoMjU1LDI1NSwyNTUsMC4wOCksCiAgICAgICAgMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKSAyNiUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItaWNvbi1idG4uaXMtb3BlbiB7CiAgICBjb2xvcjogI2ZmZmZmZiAhaW1wb3J0YW50Owp9CgovKiBHZW4gaW5mbyBkcm9wZG93biBwYW5lbCAqLwoubWpyLW1mdi1nZW4tZHJvcGRvd24gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgei1pbmRleDogMTAwMDE7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSwgIzJhMmEyYSkgOTYlLCB0cmFuc3BhcmVudCk7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICBwYWRkaW5nOiA2cHggNHB4OwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxOTYsIDIwMiwgMjEwLCAwLjE4KTsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDI0cHggcmdiYSgwLCAwLCAwLCAwLjU1KSwgMCAycHggNnB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBtaW4td2lkdGg6IDE1MHB4OwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDhweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig4cHgpOwp9CgoubWpyLW1mdi1nZW4tZHJvcGRvd246OmJlZm9yZSB7CiAgICBjb250ZW50OiAiR0VOIElORk8iOwogICAgZGlzcGxheTogYmxvY2s7CiAgICBmb250LXNpemU6IDlweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC44cHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjM1KTsKICAgIHBhZGRpbmc6IDJweCAxMHB4IDZweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMSk7CiAgICBtYXJnaW4tYm90dG9tOiA0cHg7Cn0KCi5tanItbWZ2LWdlbi1kcm9wZG93bi5pcy12aXNpYmxlIHsKICAgIGRpc3BsYXk6IGJsb2NrOwp9CgoubWpyLW1mdi1nZW4tZHJvcGRvd24tcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBwYWRkaW5nOiA1cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMTAwbXMgZWFzZTsKICAgIHVzZXItc2VsZWN0OiBub25lOwp9CgoubWpyLW1mdi1nZW4tZHJvcGRvd24tcm93OmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNyk7Cn0KCi5tanItbWZ2LWdlbi1kcm9wZG93bi1yb3cgaW5wdXRbdHlwZT0iY2hlY2tib3giXSB7CiAgICB3aWR0aDogMTNweDsKICAgIGhlaWdodDogMTNweDsKICAgIGFjY2VudC1jb2xvcjogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmbGV4LXNocmluazogMDsKfQoKLyogVHJhbnNmb3JtIGZvciBwYW4vem9vbSAtIGFwcGxpZWQgaW5saW5lIGZvciBkeW5hbWljIHZhbHVlcyAqLwoubWpyLW1mdi1tZWRpYS0tdHJhbnNmb3JtIHsKICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjsKfQoKLyogQ3Vyc29yIGZlZWRiYWNrIGZvciBwYW4vem9vbSBpbnRlcmFjdGlvbnMgKi8KLm1qci1tZnYtY29udGVudC0tZ3JhYiB7CiAgICBjdXJzb3I6IGdyYWI7Cn0KCi5tanItbWZ2LWNvbnRlbnQtLWdyYWJiaW5nIHsKICAgIGN1cnNvcjogZ3JhYmJpbmc7Cn0KCi8qIFNpZGViYXIgdGFiIGJ1dHRvbjogYWxsb3cgMi1saW5lIGxhYmVsIHZpYSBcbiBpbiBsYWJlbCBzdHJpbmcgKi8KLm1ham9vci1hc3NldHMtdGFiLWJ1dHRvbiAuc2lkZS1iYXItYnV0dG9uLWxhYmVsIHsKICAgIHdoaXRlLXNwYWNlOiBwcmUtbGluZTsKfQoKLyogQm90dG9tLXBhbmVsIGdlbmVyYXRlZCBmZWVkOiBjb21wYWN0IGNhcmRzIHdpdGggb25seSB0aGUgZ2VuZXJhdGlvbi10aW1lIHBpbGwgKi8KLm1qci1ib3R0b20tZmVlZCB7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWFtLWdyaWQtc2Nyb2xsIHsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgbWluLWhlaWdodDogMDsKICAgIGhlaWdodDogMTAwJTsKICAgIG92ZXJmbG93OiBhdXRvOwogICAgc2Nyb2xsYmFyLWd1dHRlcjogc3RhYmxlOwogICAgb3ZlcnNjcm9sbC1iZWhhdmlvci15OiBjb250YWluOwogICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgdG91Y2gtYWN0aW9uOiBwYW4teTsKICAgIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoOwogICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluOwogICAgc2Nyb2xsYmFyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMiwgIzJmMzU0MCkgNzAlLCAjN2Y4ZWEzIDMwJSkgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTAsICMxNjE5MWYpIDg4JSwgIzAwMCAxMiUpOwp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItYW0tZ3JpZC1zY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyLAoubWpyLWZlZWQtZ3JvdXAtcG9wb3Zlci1ncmlkOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICB3aWR0aDogMTBweDsKICAgIGhlaWdodDogMTBweDsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWFtLWdyaWQtc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiwKLm1qci1mZWVkLWdyb3VwLXBvcG92ZXItZ3JpZDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIsICMyZjM1NDApIDcwJSwgIzdmOGVhMyAzMCUpOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7Cn0KCi5tanItYm90dG9tLWZlZWQgLm1qci1hbS1ncmlkLXNjcm9sbDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2ssCi5tanItZmVlZC1ncm91cC1wb3BvdmVyLWdyaWQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wLCAjMTYxOTFmKSA4OCUsICMwMDAgMTIlKTsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4Owp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZCB7CiAgICBnYXA6IDZweCAhaW1wb3J0YW50OwogICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50OwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgobWluKDEwMCUsIDEzMnB4KSwgMWZyKSkgIWltcG9ydGFudDsKICAgIG1pbi1oZWlnaHQ6IDA7CiAgICBoZWlnaHQ6IGF1dG87CiAgICBhbGlnbi1jb250ZW50OiBzdGFydDsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWNhcmQsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkIHsKICAgIGJvcmRlci1yYWRpdXM6IDEycHggIWltcG9ydGFudDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgOTIlLCAjMDAwIDglKSAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzogMCA2cHggMThweCByZ2JhKDAsIDAsIDAsIDAuMjIpICFpbXBvcnRhbnQ7CiAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWNhcmQ6aG92ZXIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KSAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzogMCAxMHB4IDI0cHggcmdiYSgwLCAwLCAwLCAwLjI4KSAhaW1wb3J0YW50OwoKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmQuaXMtc2VsZWN0ZWQgewogICAgYm94LXNoYWRvdzoKICAgICAgICAwIDAgMCAzcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1jYXJkLXNlbGVjdGlvbi1jb2xvcikgODAlLCB2YXIoLS1jb250ZW50LWZnKSksCiAgICAgICAgMCAwIDAgNnB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItY2FyZC1zZWxlY3Rpb24tY29sb3IpIDMwJSwgdHJhbnNwYXJlbnQpLAogICAgICAgIDAgMCAyMHB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItY2FyZC1zZWxlY3Rpb24tY29sb3IpIDQwJSwgdHJhbnNwYXJlbnQpLAogICAgICAgIDAgMTBweCAyOHB4IHJnYmEoMCwwLDAsMC4yOCkgIWltcG9ydGFudDsKICAgIG91dGxpbmU6IDJweCBzb2xpZCB2YXIoLS1tanItY2FyZC1zZWxlY3Rpb24tY29sb3IpICFpbXBvcnRhbnQ7CiAgICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50Owp9Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIHsKICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci10aHVtYiB7CiAgICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50OwogICAgaXNvbGF0aW9uOiBpc29sYXRlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci10aHVtYjo6YmVmb3JlLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci10aHVtYjo6YWZ0ZXIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iOjpiZWZvcmUsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iOjphZnRlciB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgei1pbmRleDogLTE7CiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMTQwbXMgZWFzZSwgb3BhY2l0eSAxNDBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci10aHVtYjo6YmVmb3JlLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci10aHVtYjo6YmVmb3JlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDVweCwgNXB4KSBzY2FsZSgwLjk4NSk7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMCksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMykpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xLCAjMjAyNDJiKSA4NCUsICMwMDAgMTYlKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7CiAgICBib3gtc2hhZG93OiAwIDhweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xNik7CiAgICBvcGFjaXR5OiAwLjk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iOjphZnRlciwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIC5tanItdGh1bWI6OmFmdGVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDEwcHgsIDEwcHgpIHNjYWxlKDAuOTcpOwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDIpKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCwgIzE2MTkxZikgODIlLCAjMDAwIDE4JSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwogICAgYm94LXNoYWRvdzogMCAxMnB4IDIycHggcmdiYSgwLCAwLCAwLCAwLjE0KTsKICAgIG9wYWNpdHk6IDAuNzU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTpob3ZlciAubWpyLXRodW1iOjpiZWZvcmUsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTpob3ZlciAubWpyLXRodW1iOjpiZWZvcmUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoNnB4LCA2cHgpIHNjYWxlKDAuOTg1KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOmhvdmVyIC5tanItdGh1bWI6OmFmdGVyLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl06aG92ZXIgLm1qci10aHVtYjo6YWZ0ZXIgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTJweCwgMTJweCkgc2NhbGUoMC45Nyk7Cn0KCi5tanItYm90dG9tLWZlZWQgLm1qci10aHVtYiB7CiAgICBhc3BlY3QtcmF0aW86IDAuOTUgLyAxICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgNzIlLCAjMDAwIDI4JSkgIWltcG9ydGFudDsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLXRodW1iLXBsYXkgewogICAgYmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCBjZW50ZXIsIHJnYmEoMCwgMCwgMCwgMC4xOCksIHJnYmEoMCwgMCwgMCwgMC4wNCkgMzglLCB0cmFuc3BhcmVudCA3MCUpOwp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItYmFkZ2UtZXh0LAoubWpyLWJvdHRvbS1mZWVkIC5tanItYmFkZ2UtcmF0aW5nLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYmFkZ2UtdGFncyB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTIpOwogICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIGxlZnQ7Cn0KCi8qIOKUgOKUgCBGZWVkIGNhcmQgaW5mbzogZGVmYXVsdCBoaWRkZW4sIHRvZ2dsZWQgdmlhIG1qci1mZWVkLXNob3ctKiBjbGFzc2VzIG9uIC5tanItZ3JpZCDilIDilIAgKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLWNhcmQtaW5mbyB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiA0cHggNnB4ICFpbXBvcnRhbnQ7CiAgICBtaW4td2lkdGg6IDA7Cn0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1pbmZvIC5tanItY2FyZC1pbmZvIHsKICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7Cn0KCi8qIEZlZWQgZmlsZW5hbWUgKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLWNhcmQtZmlsZW5hbWUgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1maWxlbmFtZSAubWpyLWNhcmQtZmlsZW5hbWUgeyBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OyB9CgovKiBGZWVkIGRpbWVuc2lvbnMgLyBkdXJhdGlvbiAqLwoubWpyLWJvdHRvbS1mZWVkIC5tanItbWV0YS1yZXMsCi5tanItYm90dG9tLWZlZWQgLm1qci1tZXRhLWR1cmF0aW9uIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9Ci5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctZGltZW5zaW9ucyAubWpyLW1ldGEtcmVzLAoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZC5tanItZmVlZC1zaG93LWRpbWVuc2lvbnMgLm1qci1tZXRhLWR1cmF0aW9uIHsgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7IH0KCi8qIEZlZWQgZGF0ZS90aW1lICovCi5tanItYm90dG9tLWZlZWQgLm1qci1tZXRhLWRhdGUsCi5tanItYm90dG9tLWZlZWQgLm1qci1tZXRhLXRpbWUtdmFsIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9Ci5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctZGF0ZSAubWpyLW1ldGEtZGF0ZSwKLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1kYXRlIC5tanItbWV0YS10aW1lLXZhbCB7IGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50OyB9CgovKiBGZWVkIGdlbmVyYXRpb24gdGltZSBiYWRnZSAqLwoubWpyLWJvdHRvbS1mZWVkIC5tanItbWV0YS1nZW50aW1lIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9Ci5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctZ2VudGltZSAubWpyLW1ldGEtZ2VudGltZSB7IGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7IH0KCi8qIEZlZWQgd29ya2Zsb3cgZG90ICovCi5tanItYm90dG9tLWZlZWQgLm1qci1jYXJkLWRvdC13cmFwcGVyIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9Ci5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctZG90IC5tanItY2FyZC1kb3Qtd3JhcHBlciB7IGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7IH0KCi8qIEZlZWQgYmFkZ2VzICovCi5tanItYm90dG9tLWZlZWQgLm1qci1iYWRnZS1leHQgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1iYWRnZXMtZXh0IC5tanItYmFkZ2UtZXh0IHsgZGlzcGxheTogZmxleCAhaW1wb3J0YW50OyB9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItYmFkZ2UtcmF0aW5nIHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9Ci5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctYmFkZ2VzLXJhdGluZyAubWpyLWJhZGdlLXJhdGluZyB7IGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsgfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWJhZGdlLXRhZ3MgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1iYWRnZXMtdGFncyAubWpyLWJhZGdlLXRhZ3MgeyBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7IH0KCi8qIEZlZWQgbWV0YSByb3cgc3R5bGluZyDigJQgZmxleCBsYXlvdXQgc28gdmlzaWJsZSBpdGVtcyBzdGF5IHNlcGFyYXRlZCAqLwoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZC1tZXRhLXJvdyB7CiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7CiAgICBmbGV4LXdyYXA6IG5vd3JhcCAhaW1wb3J0YW50OwogICAgYWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50OwogICAgZ2FwOiA1cHggIWltcG9ydGFudDsKICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDsKICAgIG1pbi13aWR0aDogMCAhaW1wb3J0YW50OwogICAgcGFkZGluZy1yaWdodDogMCAhaW1wb3J0YW50OwogICAgbGluZS1oZWlnaHQ6IDEuMyAhaW1wb3J0YW50OwogICAgb3BhY2l0eTogMC43OCAhaW1wb3J0YW50OwogICAgZm9udC1zaXplOiAwLjhlbSAhaW1wb3J0YW50OwogICAgLyogdGV4dC1vdmVyZmxvdyBlbGxpcHNpcyBkb2Vzbid0IGFwcGx5IG9uIGEgZmxleCBjb250YWluZXIgaXRzZWxmICovCn0KLyogRWFjaCBtZXRhIHNwYW4gdHJ1bmNhdGVzIGluZGl2aWR1YWxseSBpZiB0b28gbG9uZyAqLwoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZC1tZXRhLXJvdyA+IHNwYW4gewogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIG1pbi13aWR0aDogMDsKICAgIGZsZXgtc2hyaW5rOiAxOwp9Ci8qIEdlbnRpbWUgYmFkZ2UgYW5kIHRpbWUgdmFsdWUgc2hvdWxkIHN0YXkgdmlzaWJsZSAoZG9uJ3Qgc2hyaW5rIGF3YXkpICovCi5tanItYm90dG9tLWZlZWQgLm1qci1jYXJkLW1ldGEtcm93ID4gLm1qci1tZXRhLWdlbnRpbWUsCi5tanItYm90dG9tLWZlZWQgLm1qci1jYXJkLW1ldGEtcm93ID4gLm1qci1tZXRhLXRpbWUtdmFsIHsKICAgIGZsZXgtc2hyaW5rOiAwOwp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZC5tanItZmVlZC1zaG93LWdlbnRpbWUgLm1qci1tZXRhLWdlbnRpbWUgewogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogM3B4OwogICAgcGFkZGluZzogM3B4IDdweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgxMCwgMTQsIDIwLCAwLjc0KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjIyKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA4MDAgIWltcG9ydGFudDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAxNWVtOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45OCk7CiAgICB0ZXh0LXNoYWRvdzoKICAgICAgICAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjkpLAogICAgICAgIDAgMCAxMHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNik7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7Cn0KCi8qIOKUgOKUgCBBdWRpbyAvIDNEIHBsYWNlaG9sZGVyIHRodW1ibmFpbHMgaW4gdGhlIGZlZWQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCgovKiBBdWRpbyBjYXJkcyBzaG93IHRoZSB3YXZlZm9ybSBzcHJpdGU7IGdpdmUgaXQgYSBkaXN0aW5jdCBiYWNrZ3JvdW5kIHNvIGl0CiAgIGRvZXNuJ3QgbG9vayBsaWtlIGEgYnJva2VuIGltYWdlIHBsYWNlaG9sZGVyIGluIHRoZSBmZWVkLiAqLwoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1raW5kPSJhdWRpbyJdIC5tanItdGh1bWIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWV4dD0ibXAzIl0gLm1qci10aHVtYiwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZXh0PSJ3YXYiXSAubWpyLXRodW1iLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1leHQ9Im9nZyJdIC5tanItdGh1bWIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWV4dD0iZmxhYyJdIC5tanItdGh1bWIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDYwJSwgIzFhMWYyYiA0MCUpICFpbXBvcnRhbnQ7Cn0KCi8qIDNEIG1vZGVsIGNhcmRzIHVzZSBhbiBpY29uIHBsYWNlaG9sZGVyIOKAlCBhZGQgYSBzdWJ0bGUgZ3JhZGllbnQgc28gdGhleSByZWFkCiAgIGFzIGludGVudGlvbmFsIHJhdGhlciB0aGFuIG1pc3NpbmcuICovCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWtpbmQ9Im1vZGVsM2QiXSAubWpyLXRodW1iLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1leHQ9ImdsYiJdIC5tanItdGh1bWIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWV4dD0iZ2x0ZiJdIC5tanItdGh1bWIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWV4dD0ib2JqIl0gLm1qci10aHVtYiwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZXh0PSJmYngiXSAubWpyLXRodW1iIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA1MCUsICMwZDExMTcgNTAlKSAhaW1wb3J0YW50Owp9CgovKiDilIDilIAgRmVlZCBncm91cCBidXR0b24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCgoubWpyLWJvdHRvbS1mZWVkIC5tanItZmVlZC1ncm91cC1idXR0b24gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAzNHB4OwogICAgcmlnaHQ6IDZweDsKICAgIHotaW5kZXg6IDExOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDRweDsKICAgIG1pbi13aWR0aDogMjhweDsKICAgIG1pbi1oZWlnaHQ6IDI4cHg7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgxMCwgMTQsIDIwLCAwLjc0KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTYpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4yNCk7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMTIwbXMgZWFzZSwgdHJhbnNmb3JtIDgwbXMgZWFzZTsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWZlZWQtZ3JvdXAtYnV0dG9uOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTgsIDI0LCAzNCwgMC45KTsKfQoKLm1qci1mZWVkLWdyb3VwLWJ1dHRvbi1pY29uIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIG9wYWNpdHk6IDAuOTsKfQoKLm1qci1mZWVkLWdyb3VwLWJ1dHRvbi1jb3VudCB7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGluZS1oZWlnaHQ6IDE7Cn0KCi8qIOKUgOKUgCBGZWVkIGdyb3VwIHBvcG92ZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCgoubWpyLWZlZWQtZ3JvdXAtcG9wb3ZlciB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1tZW51LWJnLCAjMjIyKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvciwgIzNhM2EzYSk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1sZywgOHB4KTsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDI4cHggcmdiYSgwLCAwLCAwLCAwLjQ1KTsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5tanItZmVlZC1ncm91cC1wb3BvdmVyLXRpdGxlIHsKICAgIHBhZGRpbmc6IDhweCAxMHB4IDRweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwogICAgbWFyZ2luLWJvdHRvbTogOHB4Owp9CgoubWpyLWZlZWQtZ3JvdXAtcG9wb3Zlci1ncmlkIHsKICAgIHBhZGRpbmc6IDRweCA4cHggMTBweDsKICAgIG1heC1oZWlnaHQ6IDM2MHB4OwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICBzY3JvbGxiYXItZ3V0dGVyOiBzdGFibGU7CiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47CiAgICBzY3JvbGxiYXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yLCAjMmYzNTQwKSA3MCUsICM3ZjhlYTMgMzAlKSBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCwgIzE2MTkxZikgODglLCAjMDAwIDEyJSk7Cn0KCi5tanItZmVlZC1ncm91cC1idXR0b24taWNvbiwKLm1qci1mZWVkLWdyb3VwLWJ1dHRvbi1jb3VudCB7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLm1qci1mZWVkLWdyb3VwLW1lbWJlci1jYXJkIHsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1mZWVkLWdyb3VwLW1lbWJlci1jYXJkIC5tanItdGh1bWIgewogICAgYXNwZWN0LXJhdGlvOiAxIC8gMSAhaW1wb3J0YW50Owp9CgoubWpyLWZlZWQtZ3JvdXAtbWVtYmVyLWNhcmQgLm1qci1jYXJkLWluZm8gewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItc3RhY2stZ3JvdXAtYnV0dG9uIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMzRweDsKICAgIHJpZ2h0OiA2cHg7CiAgICB6LWluZGV4OiAxMTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBtaW4td2lkdGg6IDI4cHg7CiAgICBtaW4taGVpZ2h0OiAyOHB4OwogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTAsIDE0LCAyMCwgMC43NCk7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk2KTsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4yNCk7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMTIwbXMgZWFzZSwgdHJhbnNmb3JtIDgwbXMgZWFzZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXN0YWNrLWdyb3VwLWJ1dHRvbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDE4LCAyNCwgMzQsIDAuOSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1zdGFjay1ncm91cC1idXR0b24gPiAqIHsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoubWpyLWZpbG1zdHJpcDo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgd2lkdGg6IDRweDsKICAgIGhlaWdodDogNHB4Owp9CgoubWpyLWZpbG1zdHJpcDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCi5tanItZmlsbXN0cmlwOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCk7Cn0KCi5tanItZmlsbXN0cmlwOmhvdmVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjIpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItc3RhY2stZ3JvdXAtYnV0dG9uLWNvdW50IHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLyog4pSA4pSAIER1cGxpY2F0ZSBzdGFjayBidXR0b24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi8qIFNob3dzIG9uIHRoZSBwcmltYXJ5IGNhcmQgd2hlbiBzYW1lLWZpbGVuYW1lIGR1cGxpY2F0ZXMgZXhpc3QuICAgICAgICAgICAgICovCi8qIFBvc2l0aW9uZWQgYXQgYm90dG9tLXJpZ2h0IHRvIG5vdCBvdmVybGFwIHRoZSBzdGFjay1ncm91cCBidXR0b24gKHRvcC1yaWdodCkuICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1kdXAtc3RhY2stYnV0dG9uIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGJvdHRvbTogMzBweDsKICAgIHJpZ2h0OiA2cHg7CiAgICB6LWluZGV4OiAxMTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBtaW4td2lkdGg6IDI4cHg7CiAgICBtaW4taGVpZ2h0OiAyOHB4OwogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAxODAsIDAsIDAuMzgpOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDMwLCAxOCwgMCwgMC44Mik7CiAgICBjb2xvcjogcmdiYSgyNTUsIDIwMCwgNjAsIDAuOTYpOwogICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4zMik7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cywgdHJhbnNmb3JtIDgwbXMgZWFzZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWR1cC1zdGFjay1idXR0b246aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSg1MCwgMzAsIDAsIDAuOTQpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMTgwLCAwLCAwLjYpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZHVwLXN0YWNrLWJ1dHRvbiA+ICogewogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1kdXAtc3RhY2stY291bnQgewogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1kdXAtc3RhY2tlZD0idHJ1ZSJdIC5tanItZHVwLXN0YWNrLWJ1dHRvbiB7CiAgICBib3gtc2hhZG93OgogICAgICAgIDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMzIpLAogICAgICAgIDAgMCAwIDFweCByZ2JhKDI1NSwgMTgwLCAwLCAwLjIpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci1zdGFjay1ncm91cC1idXR0b24sCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLWZlZWQtZ3JvdXAtYnV0dG9uIHsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4yNCksCiAgICAgICAgMCAwIDAgMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTpob3ZlciwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZHVwLXN0YWNrZWQ9InRydWUiXTpob3ZlciB7CiAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDsKfQoKLyog4pSA4pSAIFZpc3VhbCBzdGFja2luZyBlZmZlY3Qg4oCUIGxheWVyZWQgY2FyZHMgYmVoaW5kIHRoZSBtYWluIGNhcmQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi8qIENyZWF0ZXMgcHNldWRvLWVsZW1lbnQgImNhcmRzIiBvZmZzZXQgYmVoaW5kIHRoZSBwcmltYXJ5IGNhcmQgdG8gdmlzdWFsbHkgICAgKi8KLyogY29tbXVuaWNhdGUgdGhhdCB0aGlzIGNhcmQgcmVwcmVzZW50cyBhIGdyb3VwIG9mIG11bHRpcGxlIGltYWdlcy4gICAgICAgICAgICAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgei1pbmRleDogMTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOjpiZWZvcmUsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTo6YWZ0ZXIgewogICAgY29udGVudDogIiI7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1tZW51LWJnLCAjMWExYTJlKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IC0xOwogICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDE4MG1zIGVhc2UsIG9wYWNpdHkgMTgwbXMgZWFzZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOjpiZWZvcmUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoM3B4LCAzcHgpIHJvdGF0ZSgxZGVnKTsKICAgIG9wYWNpdHk6IDAuNDU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTo6YWZ0ZXIgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoNnB4LCA2cHgpIHJvdGF0ZSgyLjJkZWcpOwogICAgb3BhY2l0eTogMC4yNTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOmhvdmVyOjpiZWZvcmUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoNHB4LCA0cHgpIHJvdGF0ZSgxLjVkZWcpOwogICAgb3BhY2l0eTogMC41NTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOmhvdmVyOjphZnRlciB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg4cHgsIDhweCkgcm90YXRlKDNkZWcpOwogICAgb3BhY2l0eTogMC4zNTsKfQoKLm1qci1zdGFjay1ncm91cC1wb3BvdmVyIHsKICAgIHdpZHRoOiBtaW4oNDQwcHgsIDkydncpOwp9CgoubWpyLXN0YWNrLWdyb3VwLW1lbWJlci1jYXJkIHsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1zdGFjay1ncm91cC1tZW1iZXItY2FyZCAubWpyLXRodW1iIHsKICAgIGFzcGVjdC1yYXRpbzogMSAvIDEgIWltcG9ydGFudDsKfQoKLm1qci1zdGFjay1ncm91cC1tZW1iZXItY2FyZCAubWpyLWNhcmQtaW5mbyB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogKiBMaWdodCBtb2RlIG92ZXJyaWRlcyAoQ29tZnlVSSB2MS40MisgaW1wcm92ZWQgbGlnaHQgdGhlbWUpCiAqIFVzZXMgQ29tZnlVSSBkYXRhLXRoZW1lIGF0dHJpYnV0ZSB3aGVuIHNldCwgd2l0aAogKiBwcmVmZXJzLWNvbG9yLXNjaGVtZSBhcyBhIGZhbGxiYWNrIGZvciBvbGRlciB2ZXJzaW9ucy4KICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgovKiBDb21meVVJIHNldHMgZGF0YS10aGVtZT0ibGlnaHQiIG9uIDxodG1sPiBvciA8Ym9keT4gKi8KOmlzKFtkYXRhLXRoZW1lPSJsaWdodCJdLCBbZGF0YS1jb2xvci1zY2hlbWU9ImxpZ2h0Il0pIC5tanItYXNzZXRzLW1hbmFnZXIsCjppcyhbZGF0YS10aGVtZT0ibGlnaHQiXSwgW2RhdGEtY29sb3Itc2NoZW1lPSJsaWdodCJdKSAubWpyLXBvcG92ZXIgewogICAgLS1tanItc3VyZmFjZS0wOiB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtc3VyZmFjZSwgI2YwZjBmMCk7CiAgICAtLW1qci1zdXJmYWNlLTE6IHZhcigtLWludGVyZmFjZS1tZW51LXN1cmZhY2UsICNmYWZhZmEpOwogICAgLS1tanItc3VyZmFjZS0yOiB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtaG92ZXItc3VyZmFjZSwgI2U4ZThlOCk7CiAgICAtLW1qci1zdXJmYWNlLTM6IHZhcigtLW1vZGFsLWNhcmQtYmFja2dyb3VuZCwgI2ZmZmZmZik7CiAgICAtLW1qci1ib3JkZXI6IHZhcigtLWJvcmRlci1kZWZhdWx0LCByZ2JhKDAsIDAsIDAsIDAuMTQpKTsKICAgIC0tbWpyLW11dGVkOiB2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuNTUpKTsKICAgIC0tbWpyLWNhcmQtaG92ZXItY29sb3I6IHZhcigtLWludGVyZmFjZS1wYW5lbC1ob3Zlci1zdXJmYWNlLCAjZTBlMGUwKTsKfQoKQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIHsKICAgIC8qIEZhbGxiYWNrOiBvbmx5IGFwcGx5IGlmIENvbWZ5VUkgaGFzbid0IHNldCBhbiBleHBsaWNpdCBkYXRhLXRoZW1lICovCiAgICAubWpyLWFzc2V0cy1tYW5hZ2VyOm5vdChbZGF0YS10aGVtZS1hcHBsaWVkXSksCiAgICAubWpyLXBvcG92ZXI6bm90KFtkYXRhLXRoZW1lLWFwcGxpZWRdKSB7CiAgICAgICAgLS1tanItc3VyZmFjZS0wOiB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtc3VyZmFjZSwgI2YwZjBmMCk7CiAgICAgICAgLS1tanItc3VyZmFjZS0xOiB2YXIoLS1pbnRlcmZhY2UtbWVudS1zdXJmYWNlLCAjZmFmYWZhKTsKICAgICAgICAtLW1qci1zdXJmYWNlLTI6IHZhcigtLWludGVyZmFjZS1wYW5lbC1ob3Zlci1zdXJmYWNlLCAjZThlOGU4KTsKICAgICAgICAtLW1qci1zdXJmYWNlLTM6IHZhcigtLW1vZGFsLWNhcmQtYmFja2dyb3VuZCwgI2ZmZmZmZik7CiAgICAgICAgLS1tanItYm9yZGVyOiB2YXIoLS1ib3JkZXItZGVmYXVsdCwgcmdiYSgwLCAwLCAwLCAwLjE0KSk7CiAgICAgICAgLS1tanItbXV0ZWQ6IHZhcigtLW11dGVkLWZvcmVncm91bmQsIHJnYmEoMCwgMCwgMCwgMC41NSkpOwogICAgICAgIC0tbWpyLWNhcmQtaG92ZXItY29sb3I6IHZhcigtLWludGVyZmFjZS1wYW5lbC1ob3Zlci1zdXJmYWNlLCAjZTBlMGUwKTsKICAgIH0KfQoKLyog4pSA4pSA4pSAIFNrZWxldG9uIGxvYWRlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCgoubWpyLWNhcmQtc2tlbGV0b24gewogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSwgIzJhMmEyYSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCAjM2EzYTNhKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLWxnLCA4cHgpOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIC8qIE1hdGNoIC5tanItdGh1bWIgYXNwZWN0IHJhdGlvIHNvIHNrZWxldG9ucyBoYXZlIHRoZSBzYW1lIGZvb3RwcmludCBhcyByZWFsIGNhcmRzLiAqLwogICAgYXNwZWN0LXJhdGlvOiAxIC8gMTsKfQoKLyogU2hpbW1lciBzd2VlcCAqLwoubWpyLWNhcmQtc2tlbGV0b246OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICcnOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgOTBkZWcsCiAgICAgICAgdHJhbnNwYXJlbnQgMCUsCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIsICMzYTNhM2EpIDgwJSwgdHJhbnNwYXJlbnQpIDUwJSwKICAgICAgICB0cmFuc3BhcmVudCAxMDAlCiAgICApOwogICAgYW5pbWF0aW9uOiBtanItc2hpbW1lciAxLjRzIGVhc2UtaW4tb3V0IGluZmluaXRlOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTsKfQoKQGtleWZyYW1lcyBtanItc2hpbW1lciB7CiAgICBmcm9tIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTsgfQogICAgdG8gICB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTsgfQp9CgpAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkgewogICAgLm1qci1jYXJkLXNrZWxldG9uOjphZnRlciB7IGFuaW1hdGlvbjogbm9uZTsgfQp9CgovKiDilIDilIDilIAgUmVzcG9uc2l2ZSBzdW1tYXJ5IGJhciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCi8qCiAqIEVuYWJsZSBjb250YWluZXIgcXVlcmllcyBvbiB0aGUgc3VtbWFyeSBiYXIgc28gY2hpbGRyZW4gY2FuIHJlc3BvbmQgdG8gaXRzCiAqIGFjdHVhbCByZW5kZXJlZCB3aWR0aCAoZS5nLiB3aGVuIHRoZSBwYW5lbCBpcyBkb2NrZWQgaW4gYSBuYXJyb3cgc2lkZWJhcikuCiAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc3VtbWFyeSB7CiAgICBjb250YWluZXItdHlwZTogaW5saW5lLXNpemU7CiAgICBjb250YWluZXItbmFtZTogbWpyLXN1bW1hcnktYmFyOwp9CgovKiBCZWxvdyB+MzgwIHB4OiBoaWRlIHRoZSBwaWxscy9yaWdodCBzZWN0aW9uIHRvIHByZXZlbnQgb3ZlcmZsb3cuICovCkBjb250YWluZXIgbWpyLXN1bW1hcnktYmFyIChtYXgtd2lkdGg6IDM4MHB4KSB7CiAgICAubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc3VtbWFyeS1yaWdodCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KICAgIC5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zdW1tYXJ5LXRleHQgewogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgIH0KfQo=", import.meta.url).toString(), i = document.createElement("link"); + const n = new URL("data:text/css;base64,LyoqCiAqIE1ham9vciBBc3NldHMgTWFuYWdlciDigJQgQ29tZnktbGlrZSB0aGVtZSBsYXllcgogKgogKiBSVUxFUzoKICogLSBEbyBOT1QgaGFyZGNvZGUgYSBjdXN0b20gcGFsZXR0ZTsgdXNlIGV4aXN0aW5nIENvbWZ5VUkgQ1NTIHZhcmlhYmxlcyB2aWEgdmFyKC4uLikuCiAqIC0gS2VlcCBldmVyeXRoaW5nIHNjb3BlZCB1bmRlciBgLm1qci1hc3NldHMtbWFuYWdlcmAgdG8gYXZvaWQgbGVha2luZyBzdHlsZXMgdG8gQ29tZnlVSSAoZXhjZXB0IGAubWpyLXBvcG92ZXIqYCB3aGljaCBjYW4gYmUgcG9ydGFsZWQgdG8gYGRvY3VtZW50LmJvZHlgKS4KICovCgoubWpyLWFzc2V0cy1tYW5hZ2VyIHsKICAgIC8qIFR5cG9ncmFwaHkgKi8KICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1jb21meS1mb250LCB2YXIoLS1mb250LWludGVyLCB1aS1zYW5zLXNlcmlmLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sICJTZWdvZSBVSSIsIFJvYm90bywgQXJpYWwsIHNhbnMtc2VyaWYpKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yLCB2YXIoLS1jb250ZW50LWZnLCB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKSkpOwoKICAgIC8qCiAgICAgKiBTdXJmYWNlcyDigJQgcHJpb3JpdHk6IENvbWZ5VUkgdjEuNDIgZGVzaWduLXN5c3RlbSB0b2tlbiDihpIgbGVnYWN5IHRva2VuIOKGkiBoYXJkIGZhbGxiYWNrCiAgICAgKiBOZXcgdG9rZW5zOiAtLWludGVyZmFjZS1wYW5lbC1zdXJmYWNlLCAtLWludGVyZmFjZS1tZW51LXN1cmZhY2UsIC0taW50ZXJmYWNlLXBhbmVsLWhvdmVyLXN1cmZhY2UsCiAgICAgKiAgICAgICAgICAgICAtLW1vZGFsLWNhcmQtYmFja2dyb3VuZCwgLS1idXR0b24tc3VyZmFjZSwgLS1idXR0b24taG92ZXItc3VyZmFjZSwKICAgICAqICAgICAgICAgICAgIC0taW50ZXJmYWNlLXBhbmVsLXNlbGVjdGVkLXN1cmZhY2UsIC0tcHJpbWFyeS1iYWNrZ3JvdW5kLCAtLW11dGVkLWZvcmVncm91bmQsCiAgICAgKiAgICAgICAgICAgICAtLWJvcmRlci1kZWZhdWx0LCAtLXN1Y2Nlc3MtYmFja2dyb3VuZCwgLS13YXJuaW5nLWJhY2tncm91bmQsIC0tZGVzdHJ1Y3RpdmUtYmFja2dyb3VuZAogICAgICovCiAgICAtLW1qci1zdXJmYWNlLTA6IHZhcigtLWludGVyZmFjZS1wYW5lbC1zdXJmYWNlLCB2YXIoLS1jb250ZW50LWJnLCAjMWUxZTFlKSk7CiAgICAtLW1qci1zdXJmYWNlLTE6IHZhcigtLWludGVyZmFjZS1tZW51LXN1cmZhY2UsIHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpKTsKICAgIC0tbWpyLXN1cmZhY2UtMjogdmFyKC0taW50ZXJmYWNlLXBhbmVsLWhvdmVyLXN1cmZhY2UsIHZhcigtLWNvbWZ5LW1lbnUtc2Vjb25kYXJ5LWJnLCAjMzMzKSk7CiAgICAtLW1qci1zdXJmYWNlLTM6IHZhcigtLW1vZGFsLWNhcmQtYmFja2dyb3VuZCwgdmFyKC0tY29tZnktbWVudS1iZywgIzIyMikpOwogICAgLS1tanItYm9yZGVyOiB2YXIoLS1ib3JkZXItZGVmYXVsdCwgdmFyKC0tYm9yZGVyLWNvbG9yLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKSk7CiAgICAtLW1qci1tdXRlZDogdmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCwgdmFyKC0tZGVzY3JpcC10ZXh0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKSk7CiAgICAtLW1qci1hY2NlbnQ6IHZhcigtLXByaW1hcnktYmFja2dyb3VuZCwgdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKSk7CiAgICAtLW1qci1hY2NlbnQtaG92ZXI6IHZhcigtLXByaW1hcnktYmFja2dyb3VuZC1ob3ZlciwgdmFyKC0tY29tZnktYWNjZW50LCAjN2VjOGZmKSk7CiAgICAtLW1qci1idG4tc3VyZmFjZTogdmFyKC0tYnV0dG9uLXN1cmZhY2UsIHZhcigtLW1qci1zdXJmYWNlLTIpKTsKICAgIC0tbWpyLWJ0bi1ob3ZlcjogdmFyKC0tYnV0dG9uLWhvdmVyLXN1cmZhY2UsIHZhcigtLW1qci1zdXJmYWNlLTIpKTsKICAgIC0tbWpyLXNlbGVjdGVkLXN1cmZhY2U6IHZhcigtLWludGVyZmFjZS1wYW5lbC1zZWxlY3RlZC1zdXJmYWNlLCByZ2JhKDk1LCAxNzksIDI1NSwgMC4xNSkpOwoKICAgIC8qIFJhZGlpIOKAlCB1c2UgQ29tZnlVSSBkZXNpZ24tc3lzdGVtIHJhZGl1cyB0b2tlbnMgd2hlbiBhdmFpbGFibGUgKi8KICAgIC0tbWpyLXItc206IHZhcigtLXJhZGl1cy1zbSwgOHB4KTsKICAgIC0tbWpyLXItbWQ6IHZhcigtLXJhZGl1cy1tZCwgMTBweCk7CiAgICAtLW1qci1yLWxnOiB2YXIoLS1yYWRpdXMtbGcsIDEycHgpOwoKICAgIC8qIFNwYWNpbmcgKi8KICAgIC0tbWpyLXBhZC1zbTogOHB4OwogICAgLS1tanItcGFkLW1kOiAxMnB4OwogICAgLS1tanItcGFkLWxnOiAxNnB4OwoKICAgIC8qIFNlbWFudGljIFN0YXR1cyBDb2xvcnMg4oCUIHByZWZlciBDb21meVVJIHYxLjQyIHNlbWFudGljIHRva2VucyAqLwogICAgLS1tanItc3RhdHVzLXN1Y2Nlc3M6IHZhcigtLXN1Y2Nlc3MtYmFja2dyb3VuZCwgdmFyKC0tY29tZnktc3RhdHVzLXN1Y2Nlc3MsICM0Q0FGNTApKTsKICAgIC0tbWpyLXN0YXR1cy13YXJuaW5nOiB2YXIoLS13YXJuaW5nLWJhY2tncm91bmQsIHZhcigtLWNvbWZ5LXN0YXR1cy13YXJuaW5nLCAjRkZBNzI2KSk7CiAgICAtLW1qci1zdGF0dXMtZXJyb3I6IHZhcigtLWRlc3RydWN0aXZlLWJhY2tncm91bmQsIHZhcigtLWNvbWZ5LXN0YXR1cy1lcnJvciwgI2Y0NDMzNikpOwogICAgLS1tanItc3RhdHVzLWluZm86IHZhcigtLWNvbWZ5LXN0YXR1cy1pbmZvLCAjMjE5NkYzKTsKICAgIC0tbWpyLXN0YXR1cy1uZXV0cmFsOiB2YXIoLS1jb21meS1zdGF0dXMtbmV1dHJhbCwgIzllOWU5ZSk7CiAgICAtLW1qci1zdGFyLWFjdGl2ZTogI0ZGRDQ1QTsKCiAgICAvKiBCYWRnZSBjb2xvcnMgKG92ZXJyaWRkZW4gYnkgc2V0dGluZ3MpICovCiAgICAtLW1qci1iYWRnZS1pbWFnZTogIzIxOTZGMzsKICAgIC0tbWpyLWJhZGdlLXZpZGVvOiAjOUMyN0IwOwogICAgLS1tanItYmFkZ2UtYXVkaW86ICNGRjk4MDA7CiAgICAtLW1qci1iYWRnZS1tb2RlbDNkOiAjNENBRjUwOwogICAgLS1tanItY2FyZC1ob3Zlci1jb2xvcjogdmFyKC0taW50ZXJmYWNlLXBhbmVsLWhvdmVyLXN1cmZhY2UsICMzRDNEM0QpOwogICAgLS1tanItY2FyZC1zZWxlY3Rpb24tY29sb3I6IHZhcigtLWludGVyZmFjZS1wYW5lbC1zZWxlY3RlZC1zdXJmYWNlLCAjNEE5MEUyKTsKICAgIC0tbWpyLXJhdGluZy1jb2xvcjogI0ZGOTUwMDsKICAgIC0tbWpyLXRhZy1jb2xvcjogIzRBOTBFMjsKfQoKLyogTWFrZSB0aGUgdGhlbWUgdmlzaWJseSBhcHBseSBldmVuIHdpdGggaW5saW5lIHN0eWxlcyAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyICogewogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKLm1qci1hc3NldHMtbWFuYWdlci5tanItYW0tY29udGFpbmVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgaGVpZ2h0OiAxMDAlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWhlYWRlciB7CiAgICBwYWRkaW5nOiAxNHB4IDE2cHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xKTsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgei1pbmRleDogMjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWhlYWRlci1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBtaW4taGVpZ2h0OiAyOHB4OwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZmxleC13cmFwOiB3cmFwOwogICAgcm93LWdhcDogMTBweDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWhlYWRlci1sZWZ0IHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWhlYWRlci1hY3Rpb25zIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZmxleC13cmFwOiB3cmFwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0taGVhZGVyLXRvb2xzIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgZ2FwOiA4cHg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGFicyB7CiAgICAvKiBRdWV1ZS1saWtlIHRhYnMgKGFjdGl2ZSBwaWxsLCBvdGhlcnMgYXMgdGV4dCkgKi8KICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm9yZGVyOiBub25lOwogICAgcGFkZGluZzogMDsKICAgIGdhcDogMTBweDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgbWluLXdpZHRoOiAwOwogICAgb3ZlcmZsb3cteDogYXV0bzsKICAgIG92ZXJmbG93LXk6IGhpZGRlbjsKICAgIHNjcm9sbGJhci13aWR0aDogbm9uZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRhYnM6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIHdpZHRoOiAwOwogICAgaGVpZ2h0OiAwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGFiIHsKICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSA2NSUsIHRyYW5zcGFyZW50KTsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxMjBtcyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIDEyMG1zIGVhc2UsIGNvbG9yIDEyMG1zIGVhc2UsIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGFiOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHRyYW5zcGFyZW50KTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDcwJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGFiLmlzLWFjdGl2ZSB7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2ZmZik7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLCB0cmFuc3BhcmVudCk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4NSUsIHRyYW5zcGFyZW50KTsKICAgIGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLDAsMCwwLjE4KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWljb24tYnRuIHsKICAgIHdpZHRoOiAyOHB4OwogICAgaGVpZ2h0OiAyOHB4OwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcsIDAuNXJlbSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTIpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgcGFkZGluZzogMDsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxMjBtcyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIDEyMG1zIGVhc2UsIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaWNvbi1idG46aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNDUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLCB2YXIoLS1tanItYWNjZW50KSA4JSk7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pY29uLWJ0bi5tanItY29udGV4dC1hY3RpdmUgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgODUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTUlLCB2YXIoLS1tanItYWNjZW50KSAxMiUpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAzNSUsIHRyYW5zcGFyZW50KTsKfQoKLyogRmxvYXRpbmcgVmlld2VyIGJ1dHRvbiDigJQgdGVhbCBnbG93IHdoZW4gdmlld2VyIGlzIG9wZW4gKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWljb24tYnRuLm1qci1tZnYtYnRuLWFjdGl2ZSB7CiAgICBjb2xvcjogIzRkZDljMDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSg3NywgMjE3LCAxOTIsIDAuNTUpOwogICAgYmFja2dyb3VuZDogcmdiYSg3NywgMjE3LCAxOTIsIDAuMSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSg3NywgMjE3LCAxOTIsIDAuMjUpOwp9Ci5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pY29uLWJ0bi5tanItbWZ2LWJ0bi1hY3RpdmUgLnBpIHsKICAgIG9wYWNpdHk6IDE7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pY29uLWJ0bi5tanItbWVzc2FnZS1idG4gewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgb3ZlcmZsb3c6IHZpc2libGU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pY29uLWJ0bi5tanItbWVzc2FnZS1oYXMtdW5yZWFkIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDc1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDcyJSwgdmFyKC0tbWpyLWFjY2VudCkgMTElKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lc3NhZ2UtYmFkZ2UgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAtNXB4OwogICAgcmlnaHQ6IC02cHg7CiAgICBtaW4td2lkdGg6IDE2cHg7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICBwYWRkaW5nOiAwIDRweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDU1JSwgcmdiYSgyNTUsMjU1LDI1NSwwLjMpKTsKICAgIGJhY2tncm91bmQ6ICNlZjUzNTA7CiAgICBjb2xvcjogI2ZmZjsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjM1KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWljb24tYnRuIC5waSB7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIG9wYWNpdHk6IDAuOTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWljb24tYnRuOmRpc2FibGVkLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYWktY29udHJvbDpkaXNhYmxlZCB7CiAgICBvcGFjaXR5OiAwLjU7CiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgdHJhbnNmb3JtOiBub25lOwogICAgZmlsdGVyOiBncmF5c2NhbGUoMC40NSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4OCUsIHRyYW5zcGFyZW50KSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDkyJSwgdHJhbnNwYXJlbnQpICFpbXBvcnRhbnQ7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkLCByZ2JhKDI1NSwyNTUsMjU1LDAuNikpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1haS1kaXNhYmxlZCAubWpyLWFpLWNvbnRyb2w6aG92ZXIgewogICAgdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1haS1kaXNhYmxlZC1ibG9jayB7CiAgICBvcGFjaXR5OiAwLjU4OwogICAgZmlsdGVyOiBncmF5c2NhbGUoMC40NSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1haS1kaXNhYmxlZC1ibG9jayAubWpyLWFpLWNvbnRyb2wsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1haS1kaXNhYmxlZC1ibG9jayBidXR0b24gewogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi8qIFBvcG92ZXJzIGNhbiBiZSBtb3ZlZCB0byBgZG9jdW1lbnQuYm9keWAgKHBvcnRhbCkgdG8gYXZvaWQgYmVpbmcgY2xpcHBlZC4gKi8KLm1qci1wb3BvdmVyIHsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1jb21meS1mb250LCB2YXIoLS1mb250LWludGVyLCB1aS1zYW5zLXNlcmlmLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sICJTZWdvZSBVSSIsIFJvYm90bywgQXJpYWwsIHNhbnMtc2VyaWYpKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yLCB2YXIoLS1jb250ZW50LWZnLCB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKSkpOwoKICAgIC8qIFByb3ZpZGUgZmFsbGJhY2tzIHdoZW4gb3V0c2lkZSBgLm1qci1hc3NldHMtbWFuYWdlcmAgc2NvcGUgKi8KCSAgICAtLW1qci1zdXJmYWNlLTE6IHZhcigtLWludGVyZmFjZS1tZW51LXN1cmZhY2UsIHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpKTsKCSAgICAtLW1qci1ib3JkZXI6IHZhcigtLWJvcmRlci1kZWZhdWx0LCB2YXIoLS1ib3JkZXItY29sb3IsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpKTsKCSAgICAtLW1qci1tdXRlZDogdmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCwgdmFyKC0tZGVzY3JpcC10ZXh0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKSk7CgkgICAgLS1tanItYWNjZW50OiB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpOwoJICAgIC0tbWpyLXBvcG92ZXItei1pbmRleDogMjE0NzQ4MzY0NzsKCiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICB0b3A6IDA7CiAgICBsZWZ0OiAwOwogICAgbWluLXdpZHRoOiAwOwogICAgd2lkdGg6IG1pbigyODBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIG1heC13aWR0aDogbWluKDM2MHB4LCBjYWxjKDEwMHZ3IC0gMjRweCkpOwogICAgcGFkZGluZzogMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZywgMC41cmVtKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEsIHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHZhcigtLWJvcmRlci1jb2xvciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSkpOwogICAgYm94LXNoYWRvdzogMCAxMnB4IDI4cHggcmdiYSgwLDAsMCwwLjM1KTsKCSAgICB6LWluZGV4OiB2YXIoLS1tanItcG9wb3Zlci16LWluZGV4KTsKICAgIG1pbi1oZWlnaHQ6IDA7CiAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgIHRvdWNoLWFjdGlvbjogcGFuLXk7CiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgewogICAgbWluLXdpZHRoOiAzNDBweDsKICAgIHdpZHRoOiBtaW4oMzYwcHgsIGNhbGMoMTAwdncgLSAyNHB4KSk7CiAgICBwYWRkaW5nOiAxMnB4Owp9CgoubWpyLXNvcnQtcG9wb3ZlciB7CiAgICBtaW4td2lkdGg6IDIyMHB4OwogICAgd2lkdGg6IG1pbigyNjBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIHBhZGRpbmc6IDEwcHg7Cn0KCi5tanItY29sbGVjdGlvbnMtcG9wb3ZlciB7CiAgICBtaW4td2lkdGg6IDI4MHB4OwogICAgd2lkdGg6IG1pbigzMjBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIHBhZGRpbmc6IDEwcHg7Cn0KCi5tanItbWVzc2FnZXMtcG9wb3ZlciB7CiAgICBtaW4td2lkdGg6IDMyMHB4OwogICAgd2lkdGg6IG1pbig0NjBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIHBhZGRpbmc6IDEwcHg7Cn0KCi5tanItbWVzc2FnZXMtaGVhZCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogOHB4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAgbWFyZ2luLWJvdHRvbTogOHB4Owp9CgoubWpyLW1lc3NhZ2VzLXRhYnMgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICBwYWRkaW5nOiAzcHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4OCUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA3NCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1tZXNzYWdlcy10YWIgewogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIGJvcmRlcjogMDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZjFmMWYxKSA3NiUsIHRyYW5zcGFyZW50KTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjE0cyBlYXNlLCBjb2xvciAwLjE0cyBlYXNlLCB0cmFuc2Zvcm0gMC4xNHMgZWFzZTsKfQoKLm1qci1tZXNzYWdlcy10YWI6aG92ZXIsCi5tanItbWVzc2FnZXMtdGFiOmZvY3VzLXZpc2libGUgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDE0JSwgdHJhbnNwYXJlbnQpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNmMWYxZjEpOwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci1tZXNzYWdlcy10YWIuaXMtYWN0aXZlIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAyMiUsIHZhcigtLW1qci1zdXJmYWNlLTIpKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZmZmKTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMzQlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWVzc2FnZXMtcGFuZWxzIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDhweDsKICAgIG1heC1oZWlnaHQ6IG1pbig1MnZoLCA0MjBweCk7Cn0KCi5tanItbWVzc2FnZXMtbGlzdCwKLm1qci1tZXNzYWdlcy1zaG9ydGN1dHMtcGFuZWwgewogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47Cn0KCi5tanItdGFiLWNvdW50LWJhZGdlIHsKICAgIG1pbi13aWR0aDogMTZweDsKICAgIGhlaWdodDogMTZweDsKICAgIHBhZGRpbmc6IDAgNXB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGZvbnQtc2l6ZTogOXB4OwogICAgZm9udC13ZWlnaHQ6IDgwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAyZW07CiAgICBsaW5lLWhlaWdodDogMTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAyOCUsIHZhcigtLW1qci1zdXJmYWNlLTIpKTsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2ZmZikgOTIlLCB0cmFuc3BhcmVudCk7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDQ4JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1lc3NhZ2VzLXRpdGxlIHsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgbWluLXdpZHRoOiAwOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAzZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSA4MiUsIHZhcigtLW1qci1tdXRlZCkpOwp9CgoubWpyLW1lc3NhZ2VzLWFjdGlvbnMgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgIGdhcDogNnB4OwogICAgZmxleC13cmFwOiB3cmFwOwp9CgoubWpyLW1lc3NhZ2VzLW1hcmstcmVhZC1idG4gewogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7Cn0KCi5tanItbWVzc2FnZXMtc3Rhci1saW5rIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2YxZjFmMSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjZjNjODRiIDQyJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsICNmM2M4NGIgMTIlLCB2YXIoLS1tanItc3VyZmFjZS0yKSk7Cn0KCi5tanItbWVzc2FnZXMtc3Rhci1saW5rOmhvdmVyLAoubWpyLW1lc3NhZ2VzLXN0YXItbGluazpmb2N1cy12aXNpYmxlIHsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQoKLm1qci1tZXNzYWdlcy1zdGFyLWljb24gewogICAgY29sb3I6ICNmM2M4NGI7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLm1qci1tZXNzYWdlcy1zdGFyLWxhYmVsIHsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItbWVzc2FnZXMtbGlzdCB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA4cHg7Cn0KCi5tanItbWVzc2FnZXMtZW1wdHkgewogICAgcGFkZGluZzogOHB4IDZweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIG9wYWNpdHk6IDAuNzI7Cn0KCi5tanItbWVzc2FnZS1pdGVtIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDVweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODYlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTglLCB0cmFuc3BhcmVudCk7CiAgICBwYWRkaW5nOiA4cHg7Cn0KCi5tanItbWVzc2FnZS1pdGVtLS11bnJlYWQgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTglLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDI2JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1lc3NhZ2UtaXRlbS0td2FybmluZyB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjZjBiODVhIDYyJSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLW1lc3NhZ2UtaXRlbS0tZXJyb3IgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgI2YzNmI2YiA2MiUsIHZhcigtLW1qci1ib3JkZXIpKTsKfQoKLm1qci1tZXNzYWdlLWl0ZW0tLXN1Y2Nlc3MgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgIzU4YzA3ZCA2MiUsIHZhcigtLW1qci1ib3JkZXIpKTsKfQoKLm1qci1tZXNzYWdlLWl0ZW0taGVhZCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogOHB4Owp9CgoubWpyLW1lc3NhZ2UtaXRlbS10aXRsZS13cmFwIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgbWluLXdpZHRoOiAwOwogICAgZmxleDogMSAxIGF1dG87Cn0KCi5tanItbWVzc2FnZS1pdGVtLWVtb2ppIHsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgZm9udC1zaXplOiAxNnB4OwogICAgbGluZS1oZWlnaHQ6IDE7Cn0KCi5tanItbWVzc2FnZS1pdGVtLXRpdGxlIHsKICAgIG1pbi13aWR0aDogMDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2YxZjFmMSk7Cn0KCi5tanItbWVzc2FnZS1pdGVtLWNhdGVnb3J5IHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDFweCA2cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wM2VtOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDIwJSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZmZmKSA4NiUsIHRyYW5zcGFyZW50KTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItbWVzc2FnZS1pdGVtLW1ldGEgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgb3BhY2l0eTogMC43MjsKfQoKLm1qci1tZXNzYWdlLWl0ZW0tYm9keSB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBvcGFjaXR5OiAwLjkyOwogICAgbGluZS1oZWlnaHQ6IDEuNDU7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwp9CgoubWpyLW1lc3NhZ2UtaXRlbS1hY3Rpb24gewogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKTsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgIHdpZHRoOiBmaXQtY29udGVudDsKfQoKLm1qci1tZXNzYWdlLWl0ZW0tYWN0aW9uOmhvdmVyIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9CgovKiBUb2FzdCBIaXN0b3J5IHRhYiDigJQgdW5yZWFkIGluZGljYXRvciBkb3QgKi8KLm1qci10YWItdW5yZWFkLWRvdCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB3aWR0aDogNnB4OwogICAgaGVpZ2h0OiA2cHg7CiAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKICAgIG1hcmdpbi1sZWZ0OiA1cHg7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgZmxleC1zaHJpbms6IDA7Cn0KCi8qIEhpc3RvcnkgcGFuZWwgKi8KLm1qci1tZXNzYWdlcy1oaXN0b3J5LXBhbmVsIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgbWluLWhlaWdodDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5tanItaGlzdG9yeS1oZWFkIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgcGFkZGluZzogNHB4IDAgNnB4OwogICAgZmxleC1zaHJpbms6IDA7Cn0KCi5tanItaGlzdG9yeS1oZWFkLWxhYmVsIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBvcGFjaXR5OiAwLjYyOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07Cn0KCi5tanItaGlzdG9yeS1jbGVhci1idG4gewogICAgZm9udC1zaXplOiAxMXB4OwogICAgcGFkZGluZzogMnB4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSk7CiAgICBjb2xvcjogaW5oZXJpdDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIG9wYWNpdHk6IDAuNzI7Cn0KCi5tanItaGlzdG9yeS1jbGVhci1idG46aG92ZXIgewogICAgb3BhY2l0eTogMTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAxMiUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1oaXN0b3J5LWxpc3QgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogNHB4OwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47Cn0KCi5tanItaGlzdG9yeS1pdGVtIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZzogNnB4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LDI1NSwyNTUsMC4wOCkpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMiwgcmdiYSgyNTUsMjU1LDI1NSwwLjA0KSk7CiAgICBmb250LXNpemU6IDEycHg7Cn0KCi5tanItaGlzdG9yeS1pdGVtLS1lcnJvciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjZjM2YjZiIDUwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLWhpc3RvcnktaXRlbS0td2FybmluZyB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjZjBiODVhIDUwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLWhpc3RvcnktaXRlbS0tc3VjY2VzcyB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjNThjMDdkIDUwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLWhpc3RvcnktaXRlbS1pY29uIHsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgZm9udC1zaXplOiAxNHB4OwogICAgbGluZS1oZWlnaHQ6IDEuNDsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tY29udGVudCB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA0cHg7Cn0KCi5tanItaGlzdG9yeS1pdGVtLW1zZyB7CiAgICBvcGFjaXR5OiAwLjkyOwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7CiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwp9CgoubWpyLWhpc3RvcnktaXRlbS10aXRsZSB7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgIG9wYWNpdHk6IDAuOTY7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tZGV0YWlsIHsKICAgIG9wYWNpdHk6IDAuODQ7CiAgICBsaW5lLWhlaWdodDogMS40NTsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlOwogICAgd29yZC1icmVhazogYnJlYWstd29yZDsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tbWV0YSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgZmxleC13cmFwOiB3cmFwOwp9CgoubWpyLWhpc3RvcnktaXRlbS10aW1lIHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIG9wYWNpdHk6IDAuNTI7Cn0KCi5tanItaGlzdG9yeS1pdGVtLWNoaXAgewogICAgZm9udC1zaXplOiAxMHB4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBwYWRkaW5nOiAycHggNnB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODIlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMywgdmFyKC0tbWpyLXN1cmZhY2UtMikpIDc4JSwgdHJhbnNwYXJlbnQpOwogICAgb3BhY2l0eTogMC43NjsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tYWN0aW9uIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIHdpZHRoOiBmaXQtY29udGVudDsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tYWN0aW9uOmhvdmVyIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9CgoubWpyLWhpc3RvcnktaXRlbS1wcm9ncmVzcyB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA0cHg7Cn0KCi5tanItaGlzdG9yeS1pdGVtLXByb2dyZXNzLXN1bW1hcnkgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgb3BhY2l0eTogMC43NDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7Cn0KCi5tanItaGlzdG9yeS1pdGVtLXByb2dyZXNzLWJhciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogNnB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc1JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWhpc3RvcnktaXRlbS1wcm9ncmVzcy1maWxsIHsKICAgIGhlaWdodDogMTAwJTsKICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpLCBjb2xvci1taXgoaW4gc3JnYiwgIzU4YzA3ZCA3MiUsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpKSk7Cn0KCi5tanItc2hvcnRjdXQtZ3VpZGUgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogOHB4Owp9CgoubWpyLXNob3J0Y3V0LWd1aWRlLWludHJvIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ1OwogICAgb3BhY2l0eTogMC44NDsKfQoKLm1qci1zaG9ydGN1dC1zZWN0aW9uIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDZweDsKICAgIHBhZGRpbmc6IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODQlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMywgdmFyKC0tbWpyLXN1cmZhY2UtMikpIDcyJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLXNob3J0Y3V0LXNlY3Rpb24tdGl0bGUgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA0ZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZjFmMWYxKSA4OCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1zaG9ydGN1dC1saXN0IHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDZweDsKfQoKLm1qci1zaG9ydGN1dC1yb3cgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDEzMnB4LCAxNjBweCkgbWlubWF4KDAsIDFmcik7CiAgICBnYXA6IDhweDsKICAgIGFsaWduLWl0ZW1zOiBzdGFydDsKfQoKLm1qci1zaG9ydGN1dC1rZXkgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBtaW4taGVpZ2h0OiAyNHB4OwogICAgcGFkZGluZzogM3B4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDM4JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDEyJSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZmZmKSA5MCUsIHRyYW5zcGFyZW50KTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMS4yNTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7Cn0KCi5tanItc2hvcnRjdXQtZGVzYyB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsaW5lLWhlaWdodDogMS40OwogICAgb3BhY2l0eTogMC45MjsKfQoKQG1lZGlhIChtYXgtd2lkdGg6IDU2MHB4KSB7CiAgICAubWpyLXNob3J0Y3V0LXJvdyB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICB9CgogICAgLm1qci1zaG9ydGN1dC1rZXkgewogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgIH0KfQoKLm1qci1maWx0ZXItZ3JvdXAgewogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDg1JSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDcwJSwgdHJhbnNwYXJlbnQpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbWQpOwogICAgcGFkZGluZzogMTBweDsKICAgIG1hcmdpbi1ib3R0b206IDEwcHg7Cn0KCi5tanItZmlsdGVyLWdyb3VwOmxhc3QtY2hpbGQgewogICAgbWFyZ2luLWJvdHRvbTogMDsKfQoKLm1qci1maWx0ZXItZ3JvdXAtdGl0bGUgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjM1cHg7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSA3OCUsIHZhcigtLW1qci1tdXRlZCkpOwogICAgbWFyZ2luLWJvdHRvbTogOHB4Owp9CgoubWpyLXBvcG92ZXItcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgIGZsZXgtd3JhcDogd3JhcDsKfQoKLm1qci1wb3BvdmVyLXJvdzpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1ib3R0b206IDA7Cn0KCi5tanItcG9wb3Zlci1sYWJlbCB7CiAgICB3aWR0aDogNTZweDsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHZhcigtLWRlc2NyaXAtdGV4dCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSkpOwogICAgZm9udC1zaXplOiAxMnB4Owp9CgoubWpyLXBvcG92ZXItdG9nZ2xlIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwp9CgoubWpyLXBvcG92ZXItdG9nZ2xlIGlucHV0W3R5cGU9ImNoZWNrYm94Il0gewogICAgYWNjZW50LWNvbG9yOiB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWhlYWRlci1pY29uIHsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBvcGFjaXR5OiAwLjk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1oZWFkZXItdGl0bGUgewogICAgbWFyZ2luOiAwOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAxZW07Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1jb250ZW50IHsKICAgIGZsZXg6IDE7CiAgICBwYWRkaW5nOiAxNnB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgbWluLWhlaWdodDogMDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWJyb3dzZSB7CiAgICBmbGV4OiAxOwogICAgbWluLWhlaWdodDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc1JSwgdHJhbnNwYXJlbnQpOwogICAgcGFkZGluZy10b3A6IDRweDsKfQoKLyogU2Nyb2xsYmFycyAobWF0Y2ggQ29tZnlVSSBmZWVsKSAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tZ3JpZC1zY3JvbGwgewogICAgbWluLWhlaWdodDogMDsKICAgIGhlaWdodDogMTAwJTsKICAgIG92ZXJmbG93OiBhdXRvOwogICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgIHRvdWNoLWFjdGlvbjogcGFuLXk7CiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47CiAgICBzY3JvbGxiYXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4NSUsIHZhcigtLWNvbnRlbnQtZmcsICNkZGQpKSB0cmFuc3BhcmVudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWdyaWQtc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICB3aWR0aDogMTBweDsKICAgIGhlaWdodDogMTBweDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWdyaWQtc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWdyaWQtc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTUlLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSk7CiAgICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWdyaWQtc2Nyb2xsOmhvdmVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNzAlLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1ncmlkLXNjcm9sbDo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tY3VzdG9tLWNvbnRyb2xzIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMDsKICAgIGdhcDogOHB4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zZWFyY2ggewogICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zZWFyY2ggewogICAgcGFkZGluZy1ib3R0b206IDZweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIG1hcmdpbi1ib3R0b206IDZweDsKfQoKLyogQ2FyZCBNZXRhZGF0YSBDb2xvcnMgKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1ldGEtZHVyYXRpb24gewogICAgY29sb3I6ICNmZmE3MjY7IC8qIE9yYW5nZSBmb3IgZHVyYXRpb24gKi8KICAgIGZvbnQtd2VpZ2h0OiA1MDA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1tZXRhLXJlcyB7CiAgICBjb2xvcjogIzRmYzNmNzsgLyogTGlnaHQgQmx1ZSBmb3IgcmVzb2x1dGlvbiAqLwogICAgZm9udC13ZWlnaHQ6IDUwMDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1ldGEtZGF0ZSB7CiAgICBjb2xvcjogI2I5ZjZjYTsgLyogUGFsZSBHcmVlbiBmb3IgZGF0ZSAqLwogICAgZm9udC1zaXplOiAwLjllbTsKICAgIGZvbnQtd2VpZ2h0OiA1MDA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1tZXRhLXRpbWUgewogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSk7CiAgICBmb250LXNpemU6IDAuOWVtOwp9CgoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXN1bW1hcnkgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBnYXA6IDEwcHg7CiAgICBtYXJnaW46IDAgMCA2cHggMDsKICAgIHBhZGRpbmc6IDAgMCA0cHggMDsKICAgIG1pbi1oZWlnaHQ6IDE2cHg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKTsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNjUlLCB0cmFuc3BhcmVudCk7CiAgICBmbGV4OiAwIDAgYXV0bzsKfQoKLyogVG9hc3RzIChnbG9iYWw6IGNhbiBiZSBtb3VudGVkIHVuZGVyIGRvY3VtZW50LmJvZHkpICovCi5tanItdG9hc3QtY29udGFpbmVyIHsKICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgIHRvcDogMTZweDsKICAgIGxlZnQ6IDUwJTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIHotaW5kZXg6IDEwMDAwMDE7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLm1qci10b2FzdCB7CiAgICAtLW1qci10b2FzdC1zdHJpcDogdmFyKC0tbWpyLXN0YXR1cy1pbmZvLCB2YXIoLS1jb21meS1zdGF0dXMtaW5mbywgIzIxOTZmMykpOwogICAgLS1tanItdG9hc3QtaWNvbi1jb2xvcjogdmFyKC0tbWpyLXN0YXR1cy1pbmZvLCB2YXIoLS1jb21meS1zdGF0dXMtaW5mbywgIzIxOTZmMykpOwogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IsICMzYTNhM2EpOwogICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB2YXIoLS1tanItdG9hc3Qtc3RyaXApOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yLCAjZWZlZmVmKTsKICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1jb21meS1mb250LCB1aS1zYW5zLXNlcmlmLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sICJTZWdvZSBVSSIsIFJvYm90bywgQXJpYWwsIHNhbnMtc2VyaWYpOwogICAgZm9udC1zaXplOiAxNHB4OwogICAgYm94LXNoYWRvdzogMCA0cHggMTZweCByZ2JhKDAsMCwwLDAuNSk7CiAgICBvcGFjaXR5OiAwOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xNXB4KTsKICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLW91dCwgdHJhbnNmb3JtIDAuMnMgZWFzZS1vdXQ7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMnB4OwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgd2lkdGg6IG1heC1jb250ZW50OwogICAgbWluLXdpZHRoOiBtaW4oMjUwcHgsIGNhbGMoMTAwdncgLSAyNHB4KSk7CiAgICBtYXgtd2lkdGg6IG1pbig0MDBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig0cHgpOwogICAgY3Vyc29yOiBkZWZhdWx0OwogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItdG9hc3QuaXMtdmlzaWJsZSB7CiAgICBvcGFjaXR5OiAxOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwp9CgoubWpyLXRvYXN0LXRleHQgewogICAgZmxleDogMTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7Cn0KCi8qIFRvYXN0IGljb24gc3R5bGluZyAqLwoubWpyLXRvYXN0LXRleHQ6OmJlZm9yZSB7CiAgICBjb250ZW50OiBhdHRyKGRhdGEtaWNvbik7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGNvbG9yOiB2YXIoLS1tanItdG9hc3QtaWNvbi1jb2xvcik7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIG1pbi13aWR0aDogMTZweDsKfQoKLm1qci10b2FzdC1zdWNjZXNzIHsKICAgIC0tbWpyLXRvYXN0LXN0cmlwOiB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MsIHZhcigtLWNvbWZ5LXN0YXR1cy1zdWNjZXNzLCAjNGNhZjUwKSk7CiAgICAtLW1qci10b2FzdC1pY29uLWNvbG9yOiB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MsIHZhcigtLWNvbWZ5LXN0YXR1cy1zdWNjZXNzLCAjNGNhZjUwKSk7Cn0KCi5tanItdG9hc3QtZXJyb3IgewogICAgLS1tanItdG9hc3Qtc3RyaXA6IHZhcigtLW1qci1zdGF0dXMtZXJyb3IsIHZhcigtLWNvbWZ5LXN0YXR1cy1lcnJvciwgI2Y0NDMzNikpOwogICAgLS1tanItdG9hc3QtaWNvbi1jb2xvcjogdmFyKC0tbWpyLXN0YXR1cy1lcnJvciwgdmFyKC0tY29tZnktc3RhdHVzLWVycm9yLCAjZjQ0MzM2KSk7Cn0KCi5tanItdG9hc3Qtd2FybmluZyB7CiAgICAtLW1qci10b2FzdC1zdHJpcDogdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCB2YXIoLS1jb21meS1zdGF0dXMtd2FybmluZywgI2ZmYTcyNikpOwogICAgLS1tanItdG9hc3QtaWNvbi1jb2xvcjogdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCB2YXIoLS1jb21meS1zdGF0dXMtd2FybmluZywgI2ZmYTcyNikpOwp9CgoubWpyLXRvYXN0LWluZm8gewogICAgLS1tanItdG9hc3Qtc3RyaXA6IHZhcigtLW1qci1zdGF0dXMtaW5mbywgdmFyKC0tY29tZnktc3RhdHVzLWluZm8sICMyMTk2ZjMpKTsKICAgIC0tbWpyLXRvYXN0LWljb24tY29sb3I6IHZhcigtLW1qci1zdGF0dXMtaW5mbywgdmFyKC0tY29tZnktc3RhdHVzLWluZm8sICMyMTk2ZjMpKTsKfQoKCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zdW1tYXJ5LXRleHQgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXN1bW1hcnktcmlnaHQgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmbGV4LXdyYXA6IHdyYXA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1jb250ZXh0LXBpbGxzIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNXB4OwogICAgcm93LWdhcDogNHB4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNvbnRleHQtcGlsbCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDZweDsKICAgIHBhZGRpbmc6IDNweCA3cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1NSUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHZhcigtLW1qci1hY2NlbnQpIDEwJSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDE4JSwgdHJhbnNwYXJlbnQpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgZm9udC1zaXplOiAxMC41cHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIG1pbi1oZWlnaHQ6IDIycHg7CiAgICBtYXgtd2lkdGg6IDIyMHB4Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY29udGV4dC1waWxsOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDc1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDUwJSwgdmFyKC0tbWpyLWFjY2VudCkgMTQlKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNvbnRleHQtcGlsbC10ZXh0IHsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvcGFjaXR5OiAwLjkyOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY29udGV4dC1waWxsLXggewogICAgd2lkdGg6IDIwcHg7CiAgICBoZWlnaHQ6IDIwcHg7CiAgICBwYWRkaW5nOiAwOwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc1JSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42NSkpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLCBib3JkZXItY29sb3IgMTIwbXMgZWFzZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNvbnRleHQtcGlsbC14OmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDcwJSwgdmFyKC0tbWpyLWFjY2VudCkgMTAlKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZmZmKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXNlYXJjaC1waWxsIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgaGVpZ2h0OiAxLjc1cmVtOwogICAgcGFkZGluZzogMCAxMHB4OwogICAgd2lkdGg6IDEwMCU7CiAgICBtYXgtd2lkdGg6IG5vbmU7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcsIDAuNXJlbSk7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1pbnB1dC1iZywgcmdiYSgwLCAwLCAwLCAwLjI1KSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc2VhcmNoLXRvb2xzIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgZmxleDogMCAwIGF1dG87Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1wb3BvdmVyLWFuY2hvciB7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgfQoKLm1qci1hZ2VuZGEtaW5wdXQgewogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1pbnB1dC1iZywgcmdiYSgwLCAwLCAwLCAwLjI1KSk7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2RkZCk7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMnMgZWFzZSwgY29sb3IgMC4ycyBlYXNlLCBib3JkZXItY29sb3IgMC4ycyBlYXNlOwp9Ci5tanItYWdlbmRhLWlucHV0Lm1qci1hZ2VuZGEtZmlsbGVkIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKSA0MCUsIHZhcigtLW1qci1zdXJmYWNlLTIpIDYwJSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKSA4MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZmZmKTsKfQoubWpyLWFnZW5kYS1pbnB1dC5tanItYWdlbmRhLWVtcHR5IHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4NSUsIHRyYW5zcGFyZW50IDE1JSk7CiAgICBib3JkZXItY29sb3I6IHZhcigtLW1qci1ib3JkZXIpOwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSk7Cn0KCi5tanItYWdlbmRhLWNvbnRhaW5lciB7CiAgICB3aWR0aDogMTAwJTsKfQoKLm1qci1hZ2VuZGEtY2FsZW5kYXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDhweDsKICAgIHdpZHRoOiAxMDAlOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWFnZW5kYS1oZWFkZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKfQoKLm1qci1hZ2VuZGEtbW9udGggewogICAgZmxleDogMTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLm1qci1hZ2VuZGEtbmF2IHsKICAgIHdpZHRoOiAzMnB4OwogICAgaGVpZ2h0OiAyOHB4OwogICAgcGFkZGluZzogMDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7Cn0KCi5tanItYWdlbmRhLWdyaWQgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDcsIG1pbm1heCgwLCAxZnIpKTsKICAgIGdhcDogNnB4OwogICAgd2lkdGg6IDEwMCU7Cn0KCi5tanItYWdlbmRhLXdlZWtkYXkgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSk7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLm1qci1hZ2VuZGEtZGF5IHsKICAgIGhlaWdodDogMzBweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHRyYW5zcGFyZW50KTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgcGFkZGluZzogMDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLCBib3JkZXItY29sb3IgMTIwbXMgZWFzZSwgdHJhbnNmb3JtIDgwbXMgZWFzZTsKfQoKLm1qci1hZ2VuZGEtZGF5LWJhZGdlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogLTVweDsKICAgIHJpZ2h0OiAtNXB4OwogICAgbWluLXdpZHRoOiAxNnB4OwogICAgaGVpZ2h0OiAxNnB4OwogICAgcGFkZGluZzogMCA0cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6ICNlNTM5MzU7CiAgICBjb2xvcjogI2ZmZjsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCAjZTUzOTM1IDY1JSwgI2ZmZmZmZiAzNSUpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxpbmUtaGVpZ2h0OiAxNHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Owp9CgoubWpyLWFnZW5kYS1kYXk6aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNTUlLCB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKSA0NSUpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDQ1JSwgdmFyKC0tbWpyLWFjY2VudCwgdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKSkgMTAlKTsKfQoKLm1qci1hZ2VuZGEtZGF5OmFjdGl2ZSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTsKfQoKLm1qci1hZ2VuZGEtZGF5LS1ibGFuayB7CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLm1qci1hZ2VuZGEtZGF5LS1oYXMtYXNzZXRzIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpIDgwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpIDE4JSwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODIlKTsKfQoKLm1qci1hZ2VuZGEtZGF5LS1zZWxlY3RlZCB7CiAgICBib3JkZXItY29sb3I6IHZhcigtLW1qci1hY2NlbnQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKSA1NSUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1hZ2VuZGEtZm9vdGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBnYXA6IDhweDsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKfQoKLm1qci1hZ2VuZGEtY2xlYXIsCi5tanItYWdlbmRhLXJlZnJlc2ggewogICAgZmxleDogMTsKfQoKLm1qci1tZW51LAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWVudSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogNHB4Owp9CgoubWpyLW1lbnUtaXRlbSwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lbnUtaXRlbSB7CiAgICBhcHBlYXJhbmNlOiBub25lOwogICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBnYXA6IDEwcHg7CiAgICB3aWR0aDogMTAwJTsKICAgIHBhZGRpbmc6IDhweCAxMHB4OwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDEyMG1zIGVhc2UsIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLCB0cmFuc2Zvcm0gODBtcyBlYXNlOwp9CgoubWpyLW1lbnUtaXRlbTpob3ZlciwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lbnUtaXRlbTpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4MCUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1tZW51LWl0ZW06YWN0aXZlLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWVudS1pdGVtOmFjdGl2ZSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTsKfQoKLm1qci1tZW51LWl0ZW0tbGFiZWwsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1tZW51LWl0ZW0tbGFiZWwgewogICAgZmxleDogMSAxIGF1dG87CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLW1lbnUtaXRlbS1jaGVjaywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lbnUtaXRlbS1jaGVjayB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICB3aWR0aDogMTZweDsKICAgIGZsZXg6IDAgMCAxNnB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgb3BhY2l0eTogMDsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNzIlLCB2YXIoLS1jb250ZW50LWZnKSk7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDEyMG1zIGVhc2UsIGNvbG9yIDEyMG1zIGVhc2U7Cn0KCi5tanItbWVudS1pdGVtIC5waSwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lbnUtaXRlbSAucGkgewogICAgZm9udC1zaXplOiAxM3B4OwogICAgb3BhY2l0eTogMC45Owp9CgoubWpyLWNvbGxlY3Rpb25zLW1lbnUgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogNnB4Owp9CgoubWpyLW1lbnUtaXRlbS1sYWJlbC0taWNvbiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLW1lbnUtaXRlbS1sYWJlbC0taWNvbiAucGkgewogICAgd2lkdGg6IDE2cHg7CiAgICBmbGV4OiAwIDAgMTZweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLm1qci1tZW51LWl0ZW0tcmlnaHQgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgZmxleDogMCAwIGF1dG87CiAgICBtaW4td2lkdGg6IDE2cHg7CiAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7Cn0KCi5tanItbWVudS1pdGVtLWhpbnQgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnKSA2MiUsIHZhcigtLW1qci1tdXRlZCkpOwogICAgb3BhY2l0eTogMC43MjsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItbWVudS1pdGVtLWNoZWNrLS12aXNpYmxlLAoubWpyLW1lbnUtaXRlbS5pcy1hY3RpdmUgLm1qci1tZW51LWl0ZW0tY2hlY2sgewogICAgb3BhY2l0eTogMTsKfQoKLm1qci1tZW51LWRpdmlkZXIgewogICAgaGVpZ2h0OiAxcHg7CiAgICBtYXJnaW46IDRweCAwOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDgwJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW11dGVkIHsKICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgIG9wYWNpdHk6IDAuNzU7Cn0KCi5tanItc3RhdGUtYmxvY2sgewogICAgZm9udC1zaXplOiAxMHB4OwogICAgbGluZS1oZWlnaHQ6IDEuMzU7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkKTsKICAgIGJvcmRlcjogMXB4IGRhc2hlZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODUlLCB0cmFuc3BhcmVudCk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1zbSk7CiAgICBwYWRkaW5nOiA4cHggMTBweDsKICAgIG1hcmdpbjogNHB4IDA7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgNzAlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItc3RhdGUtYmxvY2suaXMtZXJyb3IsCi5tanItY29udGV4dC1tZW51LW5vdGUuaXMtZXJyb3IgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLWVycm9yKSA4MiUsIHZhcigtLWNvbnRlbnQtZmcpKTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtZXJyb3IpIDQ1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLWNvbGxlY3Rpb24tcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDsKICAgIHdpZHRoOiAxMDAlOwp9CgoubWpyLWRlbGV0ZS1idG4gewogICAgd2lkdGg6IDQycHg7CiAgICBmbGV4OiAwIDAgNDJweDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgcGFkZGluZzogMDsKICAgIG1hcmdpbi1sZWZ0OiA2cHg7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA2NSUsIHZhcigtLW1qci1zdGF0dXMtZXJyb3IpIDQ1JSk7Cn0KCi5tanItZGVsZXRlLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA0MCUsIHZhcigtLW1qci1zdGF0dXMtZXJyb3IpIDY1JSk7Cn0KCi5tanItZGVsZXRlLWJ0biAucGkgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLWVycm9yKSA3OCUsIHZhcigtLWNvbnRlbnQtZmcpKTsKfQoKLm1qci1zZWN0aW9uLXRpdGxlIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBwYWRkaW5nOiA2cHggMTBweCAycHg7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuNnB4OwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIG9wYWNpdHk6IDAuODg7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcpIDcyJSwgdmFyKC0tbWpyLW11dGVkKSk7Cn0KCi5tanItc2VjdGlvbi10aXRsZS0tY3lhbiB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsICM2ZmQ0ZmYgNzglLCB2YXIoLS1jb250ZW50LWZnKSk7Cn0KCi5tanItc2VjdGlvbi10aXRsZS0tdmlvbGV0IHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgI2M0OGRmZiA3OCUsIHZhcigtLWNvbnRlbnQtZmcpKTsKfQoKLm1qci1zZWN0aW9uLWhpbnQgewogICAgcGFkZGluZzogMCAxMHB4IDRweDsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcpIDU1JSwgdmFyKC0tbWpyLW11dGVkKSk7Cn0KCi5tanItbWVudS1pdGVtLS1zbWFydCwKLm1qci1tZW51LWl0ZW0tLWNsdXN0ZXIgewogICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9CgoubWpyLW1lbnUtaXRlbS0tY2x1c3RlciB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnKTsKfQoKLm1qci1tZW51LWl0ZW0tLXNtYXJ0IC5waSB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsICM2ZmQ0ZmYgNzQlLCB2YXIoLS1jb250ZW50LWZnKSk7Cn0KCi5tanItbWVudS1pdGVtLS1jbHVzdGVyIC5waSB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsICNjNDhkZmYgNzQlLCB2YXIoLS1jb250ZW50LWZnKSk7Cn0KCi5tanItbWVudS1pdGVtLS1zbWFydDpob3Zlcjpub3QoOmRpc2FibGVkKSwKLm1qci1tZW51LWl0ZW0tLWNsdXN0ZXI6aG92ZXI6bm90KDpkaXNhYmxlZCkgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODAlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTUlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItY2x1c3Rlci1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgIHBhZGRpbmc6IDZweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1zbSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA3MCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1jbHVzdGVyLXRodW1icyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiAzcHg7CiAgICBmbGV4LXNocmluazogMDsKfQoKLm1qci1jbHVzdGVyLXRodW1iIHsKICAgIHdpZHRoOiAyOHB4OwogICAgaGVpZ2h0OiAyOHB4OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICBvcGFjaXR5OiAwLjg1OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDYwJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWNsdXN0ZXItaW5mbyB7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWNsdXN0ZXItbmFtZSB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnKTsKfQoKLm1qci1jbHVzdGVyLWNvdW50IHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZykgNTglLCB2YXIoLS1tanItbXV0ZWQpKTsKfQoKLm1qci1jbHVzdGVyLWNyZWF0ZS1idG4gewogICAgZmxleC1zaHJpbms6IDA7CiAgICBwYWRkaW5nOiAzcHggOHB4OwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTUlLCB0cmFuc3BhcmVudCk7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZyk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDEyMG1zIGVhc2UsIGJhY2tncm91bmQgMTIwbXMgZWFzZSwgb3BhY2l0eSAxMjBtcyBlYXNlOwp9CgoubWpyLWNsdXN0ZXItY3JlYXRlLWJ0bjpkaXNhYmxlZCB7CiAgICBvcGFjaXR5OiAwLjYyOwogICAgY3Vyc29yOiBkZWZhdWx0Owp9CgoubWpyLWNsdXN0ZXItY3JlYXRlLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4MCUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA2MiUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXNlYXJjaC1pY29uIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zZWFyY2gtaWNvbiAucGkgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgbGluZS1oZWlnaHQ6IDE7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zZWFyY2gtcGlsbCAubWpyLWlucHV0IHsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKICAgIGZvbnQtc2l6ZTogMTJweCAhaW1wb3J0YW50OwogICAgbGluZS1oZWlnaHQ6IDEuMiAhaW1wb3J0YW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc2VhcmNoLXBpbGw6Zm9jdXMtd2l0aGluIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDY1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAxOCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWJyb3dzZSB7CiAgICBtYXJnaW4tdG9wOiAwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tZ3JpZC1zY3JvbGwgewogICAgcGFkZGluZy1yaWdodDogNHB4OwogICAgc2Nyb2xsYmFyLWd1dHRlcjogc3RhYmxlOwp9CgoKLyogR3JpZCBsYXlvdXQgKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQgewogICAgZGlzcGxheTogZ3JpZDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIC8qIEF2b2lkIG92ZXJmbG93IHdoZW4gdGhlIHBhbmVsIGJlY29tZXMgbmFycm93ZXIgdGhhbiB0aGUgbWluIGNhcmQgc2l6ZSAqLwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgobWluKDEwMCUsIHZhcigtLW1qci1ncmlkLW1pbi1zaXplLCAxODBweCkpLCAxZnIpKTsKICAgIGdhcDogdmFyKC0tbWpyLWdyaWQtZ2FwLCAxMHB4KTsKICAgIG1hcmdpbi10b3A6IDZweDsKICAgIG1pbi1oZWlnaHQ6IDA7Cn0KCi8qIENhcmQgc2VsZWN0aW9uICsgZm9jdXMgKGtlZXBzIGEgdmlzaWJsZSBpbmRpY2F0b3Igd2hlbiBzaWRlYmFyIGlzIG9wZW4pICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIHsKICAgIG91dGxpbmU6IG5vbmU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkLmlzLXNlbGVjdGVkIHsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgMCAwIDAgM3B4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItY2FyZC1zZWxlY3Rpb24tY29sb3IpIDgwJSwgdmFyKC0tY29udGVudC1mZykpLAogICAgICAgIDAgMCAwIDZweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKSAzMCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAwIDAgMjBweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKSA0MCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAwIDEwcHggMjhweCByZ2JhKDAsMCwwLDAuMjgpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbGcpOwogICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkyKSAhaW1wb3J0YW50OwogICAgei1pbmRleDogMTA7CiAgICBvdXRsaW5lOiAycHggc29saWQgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQ6Zm9jdXMtdmlzaWJsZSB7CiAgICBib3gtc2hhZG93OgogICAgICAgIDAgMCAwIDNweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgODAlLCB2YXIoLS1jb250ZW50LWZnKSksCiAgICAgICAgMCAwIDAgNnB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAzMCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAwIDAgMjBweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNDAlLCB0cmFuc3BhcmVudCksCiAgICAgICAgMCAxMHB4IDI4cHggcmdiYSgwLDAsMCwwLjI4KTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLWxnKTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC45MikgIWltcG9ydGFudDsKICAgIHotaW5kZXg6IDEwOwp9CgpAa2V5ZnJhbWVzIG1qci1saXZlLXBsYWNlaG9sZGVyLXNoZWVuIHsKICAgIDAlIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTU4JSk7CiAgICAgICAgb3BhY2l0eTogMC4xODsKICAgIH0KICAgIDUwJSB7CiAgICAgICAgb3BhY2l0eTogMC4zNDsKICAgIH0KICAgIDEwMCUgewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg1OCUpOwogICAgICAgIG9wYWNpdHk6IDAuMTg7CiAgICB9Cn0KCkBrZXlmcmFtZXMgbWpyLWxpdmUtcGxhY2Vob2xkZXItcHVsc2UgewogICAgMCUsCiAgICAxMDAlIHsKICAgICAgICBib3gtc2hhZG93OgogICAgICAgICAgICAwIDAgMCAxcHggcmdiYSgxMTgsIDIxNCwgMjU1LCAwLjM0KSwKICAgICAgICAgICAgMCAxMHB4IDI0cHggcmdiYSgwLCAwLCAwLCAwLjI0KTsKICAgIH0KICAgIDUwJSB7CiAgICAgICAgYm94LXNoYWRvdzoKICAgICAgICAgICAgMCAwIDAgMXB4IHJnYmEoMTE4LCAyMTQsIDI1NSwgMC41MiksCiAgICAgICAgICAgIDAgMCAwIDRweCByZ2JhKDExOCwgMjE0LCAyNTUsIDAuMTIpLAogICAgICAgICAgICAwIDEycHggMzBweCByZ2JhKDAsIDAsIDAsIDAuMjgpOwogICAgfQp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1saXZlLXBsYWNlaG9sZGVyPSJ0cnVlIl0gewogICAgYW5pbWF0aW9uOiBtanItbGl2ZS1wbGFjZWhvbGRlci1wdWxzZSAxLjlzIGVhc2UtaW4tb3V0IGluZmluaXRlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1saXZlLXBsYWNlaG9sZGVyPSJ0cnVlIl0gLm1qci10aHVtYiB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbGl2ZS1wbGFjZWhvbGRlci13YXNoIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAtOCU7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDE7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgKICAgICAgICAgICAgMTE1ZGVnLAogICAgICAgICAgICByZ2JhKDk4LCAxOTksIDI1NSwgMCkgMCUsCiAgICAgICAgICAgIHJnYmEoOTgsIDE5OSwgMjU1LCAwLjA4KSAzMCUsCiAgICAgICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNCkgNTAlLAogICAgICAgICAgICByZ2JhKDk4LCAxOTksIDI1NSwgMC4xMikgNzAlLAogICAgICAgICAgICByZ2JhKDk4LCAxOTksIDI1NSwgMCkgMTAwJQogICAgICAgICk7CiAgICBhbmltYXRpb246IG1qci1saXZlLXBsYWNlaG9sZGVyLXNoZWVuIDIuMnMgbGluZWFyIGluZmluaXRlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbGl2ZS1waWxsIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNnB4OwogICAgcmlnaHQ6IDZweDsKICAgIHotaW5kZXg6IDEyOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBtaW4taGVpZ2h0OiAyNHB4OwogICAgcGFkZGluZzogMCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTAsIDE0LCAyMCwgMC43OCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDExOCwgMjE0LCAyNTUsIDAuMzQpOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45Nik7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDFlbTsKICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMjQpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWxpdmUtcGlsbC1kb3QgewogICAgd2lkdGg6IDdweDsKICAgIGhlaWdodDogN3B4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiAjNzZkNmZmOwogICAgYm94LXNoYWRvdzogMCAwIDAgNHB4IHJnYmEoMTE4LCAyMTQsIDI1NSwgMC4xNik7CiAgICBmbGV4OiAwIDAgYXV0bzsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItbGl2ZS1wbGFjZWhvbGRlcj0idHJ1ZSJdIC5tanItYXNzZXQtc3RhdHVzLWRvdCB7CiAgICBhbmltYXRpb246IG1qci1saXZlLXBsYWNlaG9sZGVyLXB1bHNlIDEuOXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7Cn0KCi8qIEdyaWQgbG9hZGluZyBvdmVybGF5ICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkLWxvYWRpbmctb3ZlcmxheSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgIzAwMCAzNSUsIHRyYW5zcGFyZW50KTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZmZmKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjNweDsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLWxnKTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDJweCk7Cn0KCkBrZXlmcmFtZXMgbWpyLXNrZWxldG9uLXNoaW1tZXIgewogICAgMCUgewogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDEyMCUgMDsKICAgIH0KICAgIDEwMCUgewogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjAlIDA7CiAgICB9Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkLXNrZWxldG9uLXNoaW1tZXIgewogICAgd2lsbC1jaGFuZ2U6IGJhY2tncm91bmQtcG9zaXRpb247Cn0KCi8qIEdlbmVyaWMgaGVhZGluZ3MgaW5zaWRlIHBhbmVsICovCi5tanItYXNzZXRzLW1hbmFnZXIgaDMsCi5tanItYXNzZXRzLW1hbmFnZXIgaDQgewogICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMWVtOwp9CgovKiBQYW5lbHMgKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXBhbmVsIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1sZyk7CiAgICBib3gtc2hhZG93OiB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtYm94LXNoYWRvdywgMCA4cHggMjRweCByZ2JhKDAsIDAsIDAsIDAuMjUpKTsKfQoKLyogVG9vbGJhciAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdG9vbGJhciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIHBhZGRpbmc6IHZhcigtLW1qci1wYWQtbWQpOwp9CgovKiBCdXR0b25zICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1idG4gewogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMik7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1tZCk7CiAgICBwYWRkaW5nOiA3cHggMTBweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDEyMG1zIGVhc2UsIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLCB0cmFuc2Zvcm0gODBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYnRuOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDcwJSwgdmFyKC0tbWpyLWFjY2VudCkgMTAlKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWJ0bjphY3RpdmUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDFweCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1idG46ZGlzYWJsZWQgewogICAgb3BhY2l0eTogMC41NTsKICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1idG4ubWpyLXByaW1hcnkgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNjAlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMTQlLCB2YXIoLS1tanItc3VyZmFjZS0yKSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1idG4gewogICAgLyogT3ZlcnJpZGUgaW5saW5lIHN0eWxlcyBpZiBwcmVzZW50ICovCiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTIpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbWQpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYnRuOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDcwJSwgdmFyKC0tbWpyLWFjY2VudCkgMTAlKTsKfQoKLyogSW5wdXRzIC8gc2VsZWN0cyAodXNlZCBpbnNpZGUgcG9ydGFsZWQgcG9wb3ZlcnMgdG9vKSAqLwoubWpyLWlucHV0LAoubWpyLXNlbGVjdCwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWlucHV0LAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItc2VsZWN0IHsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LWlucHV0LWJnLCByZ2JhKDAsIDAsIDAsIDAuMjUpKTsKICAgIGNvbG9yOiB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLW1kKTsKICAgIHBhZGRpbmc6IDhweCAxMHB4OwogICAgZm9udC1zaXplOiAxM3B4OwogICAgb3V0bGluZTogbm9uZTsKICAgIHdpZHRoOiAxMDAlOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaW5wdXQ6OnBsYWNlaG9sZGVyIHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLW11dGVkKSA4MCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1pbnB1dDpmb2N1cywKLm1qci1zZWxlY3Q6Zm9jdXMsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pbnB1dDpmb2N1cywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXNlbGVjdDpmb2N1cyB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA2NSUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMjAlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItaW5wdXQsCi5tanItc2VsZWN0LAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaW5wdXQsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1zZWxlY3QgewogICAgLyogT3ZlcnJpZGUgaW5saW5lIHN0eWxlcyBpZiBwcmVzZW50ICovCiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LWlucHV0LWJnLCByZ2JhKDAsIDAsIDAsIDAuMjUpKTsKICAgIGNvbG9yOiB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLW1kKTsKICAgIHBhZGRpbmc6IDhweCAxMHB4Owp9CgovKiBUYWJzOiBvdmVycmlkZGVuIGFib3ZlIHdpdGggcXVldWUtbGlrZSBzdHlsZSAqLwoKLyogUmVtb3ZlZCByZWR1bmRhbnQgdGFiIGRlY2xhcmF0aW9ucyB0aGF0IHdlcmUgdXNpbmcgIWltcG9ydGFudCAqLwoKLyogTXV0ZWQgdGV4dCBoZWxwZXIgKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW11dGVkIHsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQpOwp9CgovKiBHcmlkICsgY2FyZHMgKG92ZXJyaWRlIGlubGluZSBzdHlsZXMgZnJvbSBDYXJkLmpzKSAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyICNtanItYXNzZXRzLWdyaWQgewogICAgZ2FwOiAxMHB4ICFpbXBvcnRhbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xKSAhaW1wb3J0YW50OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcikgIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLWxnKSAhaW1wb3J0YW50OwogICAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50OwogICAgbWluLXdpZHRoOiAwOwogICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDEyMG1zIGVhc2UsIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLCBib3gtc2hhZG93IDEyMG1zIGVhc2UgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQ6aG92ZXIsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKSA1NSUsIHZhcigtLW1qci1ib3JkZXIpKSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWpyLWNhcmQtaG92ZXItY29sb3IpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiAwIDhweCAyMnB4IHJnYmEoMCwgMCwgMCwgMC4yNSkgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgaW1nLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCB2aWRlbywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRodW1iLW1lZGlhIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50OwogICAgb2JqZWN0LWZpdDogY292ZXIgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRodW1iIHsKICAgIHdpZHRoOiAxMDAlOwogICAgYXNwZWN0LXJhdGlvOiAxIC8gMTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA4MCUsIHRyYW5zcGFyZW50KTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi8qIEtlZXAgZ2VuZXJhdGlvbi10aW1lIGJhZGdlIHBpbm5lZCB0byB0aGUgdGh1bWJuYWlsIGNvcm5lciBhY3Jvc3MgZ3JpZC9mZWVkIHZhcmlhbnRzLgogICBUaGUgIWltcG9ydGFudCBvdmVycmlkZXMgYXJlIGludGVudGlvbmFsOiBHZW5UaW1lQmFkZ2UudnVlIHVzZXMgPHN0eWxlIHNjb3BlZD4gd2hvc2UKICAgaGFzaGVkIGNsYXNzIGhhcyB0aGUgc2FtZSBzcGVjaWZpY2l0eSBhcyBnbG9iYWwgc2VsZWN0b3JzLiBXaXRob3V0ICFpbXBvcnRhbnQsIGEKICAgY29uZmxpY3RpbmcgcnVsZSAoZS5nLiBmcm9tIGEgdGhlbWUgZXh0ZW5zaW9uIG9yIGFuIG9sZGVyIG5vbi1zY29wZWQgY29udGV4dCkgdGhhdCBzZXRzCiAgIGxlZnQ6MC90b3A6MCB3b3VsZCB3aW4uIGxlZnQ6YXV0byArIHRvcDphdXRvIGV4cGxpY2l0bHkgY2FuY2VsIGFueSBzdWNoIGFjY2lkZW50YWwgcmVzZXQuICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci10aHVtYiA+IC5tanItZ2VudGltZS1iYWRnZSwKLm1qci1ib3R0b20tZmVlZCAubWpyLXRodW1iID4gLm1qci1nZW50aW1lLWJhZGdlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50OwogICAgcmlnaHQ6IDZweCAhaW1wb3J0YW50OwogICAgYm90dG9tOiA2cHggIWltcG9ydGFudDsKICAgIGxlZnQ6IGF1dG8gIWltcG9ydGFudDsKICAgIHRvcDogYXV0byAhaW1wb3J0YW50OwogICAgei1pbmRleDogMTAgIWltcG9ydGFudDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDJweCA2cHggIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IDRweCAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjUpICFpbXBvcnRhbnQ7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpICFpbXBvcnRhbnQ7CiAgICBmb250LXdlaWdodDogODAwICFpbXBvcnRhbnQ7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMTVlbTsKICAgIHRleHQtc2hhZG93OgogICAgICAgIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuOSksCiAgICAgICAgMCAwIDEwcHggY29sb3ItbWl4KGluIHNyZ2IsIGN1cnJlbnRDb2xvciAzNSUsIHRyYW5zcGFyZW50KTsKfQoKLyogS2VlcCByYXRpbmcvdGFncyBiYWRnZXMgYW5jaG9yZWQgZXZlbiB3aGVuIHNjb3BlZCBWdWUgc3R5bGVzIGFyZSBub3QgYXBwbGllZCBhZnRlciByZWxvYWQuCiAgIERvIG5vdCBmb3JjZSBkaXNwbGF5IGhlcmUgc28gZ3JpZCB2aXNpYmlsaXR5IHRvZ2dsZXMgKC5tanItc2hvdy1iYWRnZXMtKikgc3RpbGwgY29udHJvbCBzaG93L2hpZGUuICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci10aHVtYiA+IC5tanItcmF0aW5nLWJhZGdlLAoubWpyLWJvdHRvbS1mZWVkIC5tanItdGh1bWIgPiAubWpyLXJhdGluZy1iYWRnZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsKICAgIHRvcDogNnB4ICFpbXBvcnRhbnQ7CiAgICByaWdodDogNnB4ICFpbXBvcnRhbnQ7CiAgICBsZWZ0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICBib3R0b206IGF1dG8gIWltcG9ydGFudDsKICAgIHotaW5kZXg6IDEwICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNTUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjI1KTsKICAgIHRleHQtc2hhZG93OiAwIDJweCA2cHggcmdiYSgwLCAwLCAwLCAwLjYpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGh1bWIgPiAubWpyLXRhZ3MtYmFkZ2UsCi5tanItYm90dG9tLWZlZWQgLm1qci10aHVtYiA+IC5tanItdGFncy1iYWRnZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsKICAgIGxlZnQ6IDZweCAhaW1wb3J0YW50OwogICAgYm90dG9tOiA2cHggIWltcG9ydGFudDsKICAgIHJpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICB0b3A6IGF1dG8gIWltcG9ydGFudDsKICAgIHotaW5kZXg6IDEwICFpbXBvcnRhbnQ7CiAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDU2cHgpOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpOwogICAgYm94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRodW1iLXBsYXkgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBkaXNwbGF5OiBncmlkOwogICAgcGxhY2UtaXRlbXM6IGNlbnRlcjsKICAgIGZvbnQtc2l6ZTogMjhweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuOSk7CiAgICB0ZXh0LXNoYWRvdzogMCAwIDEwcHggcmdiYSgwLDAsMCwwLjcpOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDEyMG1zIGVhc2U7Cn0KCi8qIOKUgOKUgOKUgCBIb3ZlciBpbmZvIG92ZXJsYXkgKHBvc2l0aXZlIHByb21wdCArIGdlbiB0aW1lKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgU2xpZGVzIHVwIGZyb20gdGhlIGJvdHRvbSBvZiAubWpyLXRodW1iIG9uIGNhcmQgaG92ZXIuCiAgIHBvaW50ZXItZXZlbnRzOiBub25lICDihpIgbmV2ZXIgYmxvY2tzIHZpZGVvIG1vdXNlZW50ZXIgLyBwbGF5LW9uLWhvdmVyLgogICB6LWluZGV4OiAyICAgICAgICAgICDihpIgc2l0cyBhYm92ZSB0aGUgdGh1bWJuYWlsIGltYWdlLCBiZWxvdyB0aGUgcGxheSBpY29uLgogICBDb250cm9sbGVkIGJ5IHRoZSAubWpyLXNob3ctaG92ZXItaW5mbyBjbGFzcyBvbiB0aGUgZ3JpZCBjb250YWluZXIsIHdoaWNoCiAgIGlzIHRvZ2dsZWQgdmlhIHRoZSAiU2hvdyBwcm9tcHQgb24gaG92ZXIiIHNldHRpbmcuCiAgIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZC1ob3Zlci1pbmZvIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGJvdHRvbTogMDsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIHBhZGRpbmc6IDIycHggOHB4IDdweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHRyYW5zcGFyZW50IDAlLCByZ2JhKDAsIDAsIDAsIDAuNzgpIDEwMCUpOwogICAgY29sb3I6ICNmZmY7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBsaW5lLWhlaWdodDogMS40OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBvcGFjaXR5OiAwOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDVweCk7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDE1MG1zIGVhc2UsIHRyYW5zZm9ybSAxNTBtcyBlYXNlOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDNweDsKICAgIHotaW5kZXg6IDI7Cn0KLyogT25seSByZXZlYWwgb24gaG92ZXIgd2hlbiB0aGUgc2V0dGluZyBpcyBlbmFibGVkIChjbGFzcyBvbiBncmlkIGNvbnRhaW5lcikgKi8KLm1qci1ncmlkLm1qci1zaG93LWhvdmVyLWluZm8gLm1qci1jYXJkOmhvdmVyIC5tanItY2FyZC1ob3Zlci1pbmZvIHsKICAgIG9wYWNpdHk6IDE7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7Cn0KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQtaG92ZXItaW5mbyAubWpyLWhvdmVyLXByb21wdCB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgZGlzcGxheTogLXdlYmtpdC1ib3g7CiAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDI7CiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsOwogICAgd29yZC1icmVhazogYnJlYWstd29yZDsKICAgIG9wYWNpdHk6IDAuOTsKICAgIGZvbnQtc2l6ZTogOS41cHg7Cn0KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQtaG92ZXItaW5mbyAubWpyLWhvdmVyLWdlbnRpbWUgewogICAgY29sb3I6IHJnYmEoMjU1LCAyMTAsIDEyMCwgMC45NSk7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgZm9udC1zaXplOiA5cHg7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMmVtOwp9CkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7CiAgICAubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZC1ob3Zlci1pbmZvIHsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDBtczsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICB9Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkLW1ldGEgewogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBmb250LXNpemU6IDExcHg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkLWZpbGVuYW1lIHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIG1pbi13aWR0aDogMDsKICAgIG1hcmdpbi1ib3R0b206IDJweDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQtZGV0YWlscyB7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICBvcGFjaXR5OiAwLjg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkLWZpbGVuYW1lLXRleHQgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG1pbi13aWR0aDogMDsKfQoKLyogUmF0aW5nICYgVGFncyBFZGl0b3JzICovCkBrZXlmcmFtZXMgZmFkZUluIHsKICAgIGZyb20gewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00cHgpOwogICAgfQogICAgdG8gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgfQp9Ci8qKgogKiBBcmNoaXZlZCBDU1MgU3R5bGVzIC0gUmF0aW5nIGFuZCBUYWdzCiAqIFRoZXNlIHN0eWxlcyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGVtZS1jb21meS5jc3MKICovCgovKiBBbmltYXRpb25zICovCkBrZXlmcmFtZXMgc2xpZGVJblJpZ2h0IHsKICAgIGZyb20gewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgfQogICAgdG8gewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgfQp9CgovKiBQb3BvdmVycyAqLwoubWpyLXJhdGluZy1wb3BvdmVyLAoubWpyLXRhZ3MtcG9wb3ZlciB7CiAgICBhbmltYXRpb246IGZhZGVJbiAwLjJzIGVhc2U7Cn0KCi5tanItcmF0aW5nLXBvcG92ZXIsCi5tanItdGFncy1wb3BvdmVyIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZywgMC41cmVtKTsKICAgIGJveC1zaGFkb3c6IDAgMTJweCAyOHB4IHJnYmEoMCwwLDAsMC4zNSk7CiAgICBwYWRkaW5nOiA4cHg7Cn0KCi8qIFJhdGluZyBFZGl0b3IgKi8KLm1qci1yYXRpbmctZWRpdG9yIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNHB4OwogICAgcGFkZGluZzogMnB4Owp9CgoubWpyLXJhdGluZy1zdGFyIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBmb250LXNpemU6IDIwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBwYWRkaW5nOiA0cHggNnB4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2RkZCk7CiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMTIwbXMgZWFzZSwgYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLCBib3JkZXItY29sb3IgMTIwbXMgZWFzZSwgY29sb3IgMTIwbXMgZWFzZTsKfQoKLm1qci1yYXRpbmctc3Rhcjpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpIDM1JSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbWZ5LW1lbnUtc2Vjb25kYXJ5LWJnLCAjMzMzKSA2NSUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1yYXRpbmctZWRpdG9yIC5tanItcmF0aW5nLXN0YXI6aG92ZXIgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpICFpbXBvcnRhbnQ7Cn0KCi5tanItcmF0aW5nLWVkaXRvciAubWpyLXJhdGluZy1zdGFyOmFjdGl2ZSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTUpICFpbXBvcnRhbnQ7Cn0KCi8qIFRhZ3MgRWRpdG9yICovCi5tanItdGFncy1lZGl0b3IgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDhweDsKICAgIHBhZGRpbmc6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgOTIlLCB0cmFuc3BhcmVudCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLXNtKTsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDIwcHggcmdiYSgwLCAwLCAwLCAwLjM1KTsKICAgIG1pbi13aWR0aDogMjUwcHg7CiAgICBtYXgtd2lkdGg6IG1pbigzNTBweCwgY2FsYygxMDB2dyAtIDIwcHgpKTsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0Owp9CgoubWpyLXRhZ3MtZWRpdG9yLmlzLWRpc2FibGVkIHsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgb3BhY2l0eTogMC43Owp9CgoubWpyLXRhZ3MtZGlzcGxheSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAgZ2FwOiA2cHg7CiAgICBtaW4taGVpZ2h0OiAzMnB4Owp9CgoubWpyLXRhZ3MtZW1wdHkgewogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCk7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7Cn0KCi5tanItdGFnLWNoaXAgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDI0JSwgdHJhbnNwYXJlbnQpOwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDQwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGNvbG9yOiB2YXIoLS1tanItdGFnLWNvbG9yKTsKICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7Cn0KCi5tanItdGFnLWNoaXAtcmVtb3ZlIHsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgYm9yZGVyOiAwOwogICAgYm9yZGVyLXJhZGl1czogMDsKICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICBjb2xvcjogaW5oZXJpdDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIG9wYWNpdHk6IDAuNzsKfQoKLm1qci10YWctY2hpcC1yZW1vdmU6ZGlzYWJsZWQgewogICAgY3Vyc29yOiBkZWZhdWx0Owp9CgoubWpyLXRhZ3MtaW5wdXQtd3JhcCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5tanItdGFnLWlucHV0IHsKICAgIHdpZHRoOiAxMDAlOwogICAgcGFkZGluZzogNnB4IDhweDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA3NSUsIHRyYW5zcGFyZW50KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcpOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci10YWctaW5wdXQ6Zm9jdXMgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDg4JSwgdHJhbnNwYXJlbnQpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHZhcigtLW1qci1hY2NlbnQpICFpbXBvcnRhbnQ7Cn0KCi5tanItdGFnLWNoaXA6aG92ZXIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDM0JSwgdHJhbnNwYXJlbnQpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItdGFnLWNvbG9yKSA2MCUsIHZhcigtLW1qci1ib3JkZXIpKSAhaW1wb3J0YW50Owp9CgoubWpyLXRhZ3MtZHJvcGRvd24gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAxMDAlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgbWFyZ2luLXRvcDogNHB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDkyJSwgdHJhbnNwYXJlbnQpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBtYXgtaGVpZ2h0OiAxNTBweDsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICB6LWluZGV4OiAxMDAwOwp9CgoubWpyLXRhZy1zdWdnZXN0aW9uIHsKICAgIHBhZGRpbmc6IDZweCA4cHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGNvbG9yOiB2YXIoLS1tanItdGFnLWNvbG9yKTsKICAgIGZvbnQtc2l6ZTogMTJweDsKfQoKLm1qci10YWctc3VnZ2VzdGlvbi5pcy1hY3RpdmUsCi5tanItdGFnLXN1Z2dlc3Rpb246aG92ZXIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDI4JSwgdHJhbnNwYXJlbnQpICFpbXBvcnRhbnQ7Cn0KCi8qIEJhZGdlcyBJbnRlcmFjdGl2ZSAqLwoubWpyLXJhdGluZy1iYWRnZSwKLm1qci10YWdzLWJhZGdlIHsKICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7Cn0KCi5tanItcmF0aW5nLWJhZGdlIHsKICAgIGNvbG9yOiB2YXIoLS1tanItcmF0aW5nLWNvbG9yKSAhaW1wb3J0YW50Owp9CgoubWpyLXRhZ3MtYmFkZ2UgewogICAgY29sb3I6IHZhcigtLW1qci10YWctY29sb3IpICFpbXBvcnRhbnQ7Cn0KCi5tanItcmF0aW5nLWJhZGdlOmhvdmVyLAoubWpyLXRhZ3MtYmFkZ2U6aG92ZXIgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KTsKICAgIGJveC1zaGFkb3c6IDAgNHB4IDhweCByZ2JhKDAsIDAsIDAsIDAuNSk7Cn0KCi8qIFNjcm9sbGJhciBmb3IgdGFncyBkcm9wZG93biAqLwoubWpyLXRhZ3MtZHJvcGRvd246Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIHdpZHRoOiA2cHg7Cn0KCi5tanItdGFncy1kcm9wZG93bjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDY1JSwgdHJhbnNwYXJlbnQpOwogICAgYm9yZGVyLXJhZGl1czogM3B4Owp9CgoubWpyLXRhZ3MtZHJvcGRvd246Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItdGFnLWNvbG9yKSA0OCUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKfQoKLm1qci10YWdzLWRyb3Bkb3duOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXRhZy1jb2xvcikgNjUlLCB2YXIoLS1tanItYm9yZGVyKSk7Cn0KCi8qIFNpZGViYXIgKGNhbiBiZSBsZWZ0IG9yIHJpZ2h0KSAqLwoubWpyLXNpZGViYXIgewogICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKfQoKLm1qci1zaWRlYmFyLmlzLW9wZW4gewogICAgLyogQm9yZGVyIGlzIHNldCBkeW5hbWljYWxseSBiYXNlZCBvbiBwb3NpdGlvbiAqLwp9CgoubWpyLXNpZGViYXIgLm1qci1zaWRlYmFyLWhlYWRlciB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0yLCAjMzMzKTsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpKTsKfQoKLm1qci1zaWRlYmFyIC5tanItc2lkZWJhci1jb250ZW50IHsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEsICMyYTJhMmEpOwp9CgoubWpyLXNpZGViYXIgLm1qci1zaWRlYmFyLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIHdpZHRoOiA4cHg7Cn0KCi5tanItc2lkZWJhciAubWpyLXNpZGViYXItY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjMpOwp9CgoubWpyLXNpZGViYXIgLm1qci1zaWRlYmFyLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKfQoKLm1qci1zaWRlYmFyIC5tanItc2lkZWJhci1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7Cn0KCi8qIEN1c3RvbSBSb290cyBQb3BvdmVyIFN0eWxpbmcgKi8KLm1qci1jdXN0b20tcG9wb3ZlciB7CiAgICBtaW4td2lkdGg6IDMwMHB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSwgdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSkpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgdmFyKC0tYm9yZGVyLWNvbG9yLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKSk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcsIDAuNXJlbSk7CiAgICBib3gtc2hhZG93OiAwIDEycHggMjhweCByZ2JhKDAsMCwwLDAuMzUpOwogICAgei1pbmRleDogdmFyKC0tbWpyLXBvcG92ZXItei1pbmRleCk7CiAgICBwYWRkaW5nOiAxMnB4Owp9CgoubWpyLWN1c3RvbS1wb3BvdmVyIC5tanItcG9wb3Zlci1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgZmxleC13cmFwOiB3cmFwOwp9CgoubWpyLWN1c3RvbS1wb3BvdmVyIC5tanItcG9wb3Zlci1yb3c6bGFzdC1jaGlsZCB7CiAgICBtYXJnaW4tYm90dG9tOiAwOwp9CgoubWpyLWN1c3RvbS1wb3BvdmVyIC5tanItcG9wb3Zlci1sYWJlbCB7CiAgICB3aWR0aDogNjBweDsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHZhcigtLWRlc2NyaXAtdGV4dCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSkpOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDUwMDsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLXNlbGVjdCB7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWN1c3RvbS1wb3BvdmVyIC5tanItYnRuIHsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDA7CiAgICBtYXJnaW4tcmlnaHQ6IDVweDsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLWJ0bjpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1yaWdodDogMDsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLWJ0bi5tanItcHJpbWFyeSB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMTglLCB2YXIoLS1tanItc3VyZmFjZS0yKSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA2MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLWJ0bi5tanItcHJpbWFyeTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMjUlLCB2YXIoLS1tanItc3VyZmFjZS0yKSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA4MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKfQoKLm1qci1zaWRlYmFyIC5tanItc2lkZWJhci1zZWN0aW9uIHsKICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7Cn0KCi5tanItc2lkZWJhciAubWpyLXNpZGViYXItc2VjdGlvbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMykgIWltcG9ydGFudDsKfQoKLyogSW5saW5lIFNpZGViYXIgKHdpZHRoLWJhc2VkIHRyYW5zaXRpb25zIGxpa2UgYXJjaGl2ZWQgdmVyc2lvbikgKi8KLm1qci1pbmxpbmUtc2lkZWJhciB7CiAgICB3aWR0aDogMDsKICAgIG1pbi13aWR0aDogMDsKICAgIG1heC13aWR0aDogNDgwcHg7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSwgIzJhMmEyYSk7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIHRyYW5zaXRpb246IHdpZHRoIDAuM3MgZWFzZSwgbWluLXdpZHRoIDAuM3MgZWFzZTsKfQoKLm1qci1pbmxpbmUtc2lkZWJhci5pcy1vcGVuIHsKICAgIHdpZHRoOiA0MDBweDsKICAgIG1pbi13aWR0aDogMjYwcHg7Cn0KCi8qIFNwYWNlIGJldHdlZW4gc2lkZWJhciBhbmQgZ3JpZCAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tYnJvd3NlIHsKICAgIGdhcDogMDsKfQoKLyogQm9yZGVyIGJhc2VkIG9uIHBvc2l0aW9uICovCi5tanItaW5saW5lLXNpZGViYXJbZGF0YS1wb3NpdGlvbj0ibGVmdCJdIHsKICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikpOwp9CgoubWpyLWlubGluZS1zaWRlYmFyW2RhdGEtcG9zaXRpb249InJpZ2h0Il0gewogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpKTsKfQoKLyogU2lkZWJhciBwbGFjZWhvbGRlciAqLwoubWpyLXNpZGViYXItcGxhY2Vob2xkZXIgewogICAgcGFkZGluZzogMjBweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHJnYmEoMjU1LDI1NSwyNTUsMC42NSkpOwogICAgZm9udC1zaXplOiAxNHB4OwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLyogPT09PT09PT09PSBWaWV3ZXIgQ29tcG9uZW50ID09PT09PT09PT0gKi8KLm1qci12aWV3ZXItb3ZlcmxheSB7CiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICB0b3A6IDA7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICBib3R0b206IDA7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOTUpOwogICAgLyogU2l0IGFib3ZlIE1GViAoMTAwMDApIHNvIHRoZSBmdWxsIHZpZXdlciBhbHdheXMgY292ZXJzIHRoZSBmbG9hdGluZyBwYW5lbCAqLwogICAgei1pbmRleDogMTAwMDE7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwp9Ci8qIEZhZGUtaW46IGFuaW1hdGlvbiByZS10cmlnZ2VycyBlYWNoIHRpbWUgSlMgc3dpdGNoZXMgZGlzcGxheSBiYWNrIHRvIGZsZXggKi8KLm1qci12aWV3ZXItb3ZlcmxheVtzdHlsZSo9ImZsZXgiXSB7CiAgICBhbmltYXRpb246IG1qci1mYWRlLWluIDAuMThzIGVhc2Utb3V0Owp9CgpAa2V5ZnJhbWVzIG1qci1mYWRlLWluIHsKICAgIGZyb20geyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHNjYWxlKDAuOTk1KTsgfQogICAgdG8gICB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogc2NhbGUoMSk7IH0KfQoKLm1qci12aWV3ZXItaGVhZGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgcGFkZGluZzogMTJweCAyMHB4OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE3MGRlZywgcmdiYSgyNCwgMjcsIDMzLCAwLjk2KSwgcmdiYSgxNywgMTksIDI1LCAwLjk3KSk7CiAgICBib3JkZXItYm90dG9tOiAwLjhweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMik7CiAgICBjb2xvcjogd2hpdGU7Cn0KCi5tanItdmlld2VyLWZpbGVuYW1lIHsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICBtYXgtd2lkdGg6IDQwMHB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci12aWV3ZXItbW9kZS1idXR0b25zIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBnYXA6IDZweDsKfQoKLm1qci12aWV3ZXItbW9kZS1idXR0b25zIGJ1dHRvbiB7CiAgICBwYWRkaW5nOiA0cHggMTJweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjA2LCAyMTEsIDIxOCwgMC4xKSwgcmdiYSgyMDYsIDIxMSwgMjE4LCAwLjAzKSk7CiAgICBib3JkZXI6IDAuOHB4IHNvbGlkIHJnYmEoMTk2LCAyMDIsIDIxMCwgMC4zKTsKICAgIGNvbG9yOiByZ2JhKDIzMCwgMjMzLCAyMzgsIDAuOTUpOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgdHJhbnNpdGlvbjogYWxsIDAuMTZzOwp9CgoubWpyLXZpZXdlci1tb2RlLWJ1dHRvbnMgYnV0dG9uOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjEwLCAyMTQsIDIyMCwgMC4xNCksIHJnYmEoMjEwLCAyMTQsIDIyMCwgMC4wNikpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIxNCwgMjE4LCAyMjQsIDAuNDIpOwp9CgovKiBWaWV3ZXIgY2xvc2UgYnV0dG9uIHBpbm5lZCB0byBvdmVybGF5IGNvcm5lciAqLwoubWpyLXZpZXdlci1jbG9zZSwKLm1qci12aWV3ZXItZnMgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMjYpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItd2lkdGg6IDAuOHB4ICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIwNiwgMjExLCAyMTgsIDAuMDgpLCByZ2JhKDIwNiwgMjExLCAyMTgsIDAuMDIpKSwKICAgICAgICByZ2JhKDIwLCAyMywgMjksIDAuOTQpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItY2xvc2UgewogICAgY29sb3I6ICNmZmY0ZjQgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMDUsIDgyLCA4MiwgMC41KSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyMDUsIDgyLCA4MiwgMC4zKSwgcmdiYSgyMDUsIDgyLCA4MiwgMC4xMikpLAogICAgICAgIHJnYmEoNTgsIDE4LCAxOCwgMC45NCkgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDIxOSwgMjE5LCAwLjE2KSwgMCAwIDAgMXB4IHJnYmEoMjA1LCA4MiwgODIsIDAuMDgpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLWNsb3NlOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjM1LCAxMTAsIDExMCwgMC4zOCksIHJnYmEoMjM1LCAxMTAsIDExMCwgMC4xNikpLAogICAgICAgIHJnYmEoNzAsIDE4LCAxOCwgMC45NykgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMzUsIDEzOCwgMTM4LCAwLjY0KSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci1mczpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIxMCwgMjE0LCAyMjAsIDAuMTQpLCByZ2JhKDIxMCwgMjE0LCAyMjAsIDAuMDYpKSwKICAgICAgICByZ2JhKDIzLCAyNiwgMzIsIDAuOTUpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjE0LCAyMTgsIDIyNCwgMC4zOCkgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItY2xvc2UgLnBpIHsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgoubWpyLXZpZXdlci1jb250ZW50IHsKICAgIGZsZXg6IDE7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKfQoKLm1qci12aWV3ZXItc2luZ2xlLAoubWpyLXZpZXdlci1hYiwKLm1qci12aWV3ZXItc2lkZWJ5c2lkZSB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKfQoKLm1qci12aWV3ZXItc2luZ2xlIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Cn0KCi5tanItdmlld2VyLXNpbmdsZSBpbWcsCi5tanItdmlld2VyLXNpbmdsZSB2aWRlbyB7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBtYXgtaGVpZ2h0OiAxMDAlOwogICAgb2JqZWN0LWZpdDogY29udGFpbjsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzOwp9CgoubWpyLXZpZXdlci1hYiB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBub25lOwp9CgoubWpyLXZpZXdlci1zaWRlYnlzaWRlIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgZ2FwOiAycHg7Cn0KCi5tanItdmlld2VyLXNpZGVieXNpZGUgPiBkaXYgewogICAgZmxleDogMTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDUpOwp9CgoubWpyLXZpZXdlci1zaWRlYnlzaWRlIGltZywKLm1qci12aWV3ZXItc2lkZWJ5c2lkZSB2aWRlbyB7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBtYXgtaGVpZ2h0OiAxMDAlOwogICAgb2JqZWN0LWZpdDogY29udGFpbjsKfQoKLm1qci12aWV3ZXItZm9vdGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBwYWRkaW5nOiAxMnB4IDIwcHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOCk7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgY29sb3I6IHdoaXRlOwogICAgZ2FwOiAyMHB4Owp9CgoubWpyLXZpZXdlci1mb290ZXIgYnV0dG9uIHsKICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7CiAgICBjb2xvcjogd2hpdGU7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKfQoKLm1qci12aWV3ZXItZm9vdGVyIGJ1dHRvbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7Cn0KCi5tanItdmlld2VyLW5hdiB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTRweDsKfQoKLm1qci12aWV3ZXItbmF2LWJ0biB7CiAgICB3aWR0aDogNDBweCAhaW1wb3J0YW50OwogICAgaGVpZ2h0OiA0MHB4ICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4ICFpbXBvcnRhbnQ7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuNDIpICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMTk0LCAyMDAsIDIwOCwgMC4xOCksIHJnYmEoMTk0LCAyMDAsIDIwOCwgMC4wNykpLAogICAgICAgIHJnYmEoMzQsIDM4LCA0NCwgMC45MikgIWltcG9ydGFudDsKICAgIGNvbG9yOiByZ2JhKDIzNCwgMjM2LCAyNDAsIDAuOTYpICFpbXBvcnRhbnQ7CiAgICBmb250LXNpemU6IDIwcHggIWltcG9ydGFudDsKICAgIGZvbnQtd2VpZ2h0OiA3MDAgIWltcG9ydGFudDsKICAgIGxpbmUtaGVpZ2h0OiAxICFpbXBvcnRhbnQ7CiAgICB0ZXh0LXNoYWRvdzogbm9uZTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjE0cyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIDAuMTRzIGVhc2UsIGJvcmRlci1jb2xvciAwLjE0cyBlYXNlICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLW5hdi1idG46aG92ZXI6bm90KDpkaXNhYmxlZCkgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIxNCwgMjE4LCAyMjQsIDAuNTYpICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjA3LCAyMTIsIDIxOSwgMC4yKSwgcmdiYSgyMDcsIDIxMiwgMjE5LCAwLjEpKSwKICAgICAgICByZ2JhKDM5LCA0MywgNDksIDAuOTQpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKfQoKLm1qci12aWV3ZXItbmF2LWJ0bjphY3RpdmU6bm90KDpkaXNhYmxlZCkgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApIHNjYWxlKDAuOTgpOwogICAgZmlsdGVyOiBub25lOwp9CgoubWpyLXZpZXdlci1uYXYtYnRuOmRpc2FibGVkIHsKICAgIG9wYWNpdHk6IDAuMzQgIWltcG9ydGFudDsKICAgIGZpbHRlcjogZ3JheXNjYWxlKDAuMjUpOwogICAgYm94LXNoYWRvdzogbm9uZTsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci1pbmRleCB7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBtaW4td2lkdGg6IDc0cHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDRlbTsKICAgIGNvbG9yOiByZ2JhKDIyNiwgMjI4LCAyMzMsIDAuOTQpOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgxOTcsIDIwMywgMjExLCAwLjE1KSwgcmdiYSgxOTcsIDIwMywgMjExLCAwLjA2KSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE5NywgMjAzLCAyMTEsIDAuMzQpOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBwYWRkaW5nOiA1cHggMTFweDsKICAgIHRleHQtc2hhZG93OiBub25lOwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpOwp9CgoubWpyLXZpZXdlci1wbGF5ZXJiYXIgewogICAgYm9yZGVyLXJhZGl1czogMThweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTk0LCAyMDAsIDIwOCwgMC4xNik7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgdG9wIGxlZnQsIHJnYmEoOTAsIDE1MCwgMjU1LCAwLjA4KSwgdHJhbnNwYXJlbnQgMzYlKSwKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTYwZGVnLCByZ2JhKDIwLCAyNCwgMzAsIDAuOTQpLCByZ2JhKDEyLCAxNSwgMjEsIDAuOTgpKTsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpLAogICAgICAgIDAgMTZweCAzNnB4IHJnYmEoMCwgMCwgMCwgMC4yMik7CiAgICAvKiBvdmVyZmxvdyBtdXN0IHN0YXkgdmlzaWJsZSBzbyB0aGUgc2VlayBydWxlciB0aWNrcy9sYWJlbHMgKHRvcDotMTZweCAvIHRvcDotMzRweCkKICAgICAgIHRoYXQgYXJlIGFic29sdXRlbHkgcG9zaXRpb25lZCBhYm92ZSB0aGUgc2VlayBiYXIgYXJlIG5vdCBjbGlwcGVkLiAqLwogICAgb3ZlcmZsb3c6IHZpc2libGU7Cn0KCi5tanItdmlld2VyLXRvb2xzIHsKICAgIGFsaWduLWl0ZW1zOiBzdGFydDsKICAgIGp1c3RpZnktY29udGVudDogc3RyZXRjaDsKICAgIGdhcDogOHB4Owp9CgoubWpyLXZpZXdlci1oZWFkZXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgoubWpyLXZpZXdlci1oZWFkZXI6OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMThweDsKICAgIHJpZ2h0OiAxOHB4OwogICAgdG9wOiA0NHB4OwogICAgaGVpZ2h0OiAxcHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHRyYW5zcGFyZW50LCByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpLCB0cmFuc3BhcmVudCk7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIG9wYWNpdHk6IDAuNzsKfQoKLm1qci12aWV3ZXItaGVhZGVyLW1ldGEgewogICAgbWluLWhlaWdodDogMzBweDsKICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjAzNSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDYpOwp9CgoubWpyLXZpZXdlci1oZWFkZXItdG9wIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBwYWRkaW5nLXJpZ2h0OiA4NHB4OwogICAgcGFkZGluZy1sZWZ0OiAxMnB4Owp9CgoubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tbGVmdCB7CiAgICBkaXNwbGF5OiBub25lOwogICAgZmxleDogMSAxIDA7CiAgICBtaW4td2lkdGg6IDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgoubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tY2VudGVyIHsKICAgIG1pbi13aWR0aDogMDsKICAgIGZsZXg6IDEgMSBhdXRvOwp9CgoubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tcmlnaHQgewogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgIGZsZXg6IDEgMSAwOwogICAgbWluLXdpZHRoOiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm1qci12aWV3ZXItdGl0bGUtd3JhcCB7CiAgICB3aWR0aDogYXV0bzsKICAgIG1pbi13aWR0aDogMDsKICAgIG1heC13aWR0aDogbWluKDEwMCUsIGNhbGMoMTAwdncgLSAyMjBweCkpOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogMTJweDsKfQoKLm1qci12aWV3ZXItdGl0bGUtbGluZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5tanItdmlld2VyLWZpbGVuYW1lIHsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMWVtOwogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW46IDAgYXV0bzsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLm1qci12aWV3ZXItYmFkZ2VzIHsKICAgIGdhcDogNHB4Owp9CgoubWpyLXZpZXdlci10aXRsZS1saW5lIC5tanItdmlld2VyLWJhZGdlcyB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGZsZXgtd3JhcDogbm93cmFwOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXZpZXdlci1oZWFkZXItbWV0YS0tbGVmdCB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICB3aWR0aDogZml0LWNvbnRlbnQ7CiAgICBtYXgtd2lkdGg6IDEwMCU7Cn0KCi5tanItdmlld2VyLWhlYWRlci1tZXRhLS1sZWZ0OmVtcHR5IHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5tanItdmlld2VyLWhlYWRlci1tZXRhLS1yaWdodCB7CiAgICBqdXN0aWZ5LXNlbGY6IGVuZDsKICAgIHdpZHRoOiBmaXQtY29udGVudDsKICAgIG1heC13aWR0aDogMTAwJTsKfQoKLm1qci12aWV3ZXItbW9kZS1idXR0b25zIHsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgcGFkZGluZzogM3B4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDQpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjA0KTsKfQoKLm1qci12aWV3ZXItdG9vbHMtZGVjayB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC13cmFwOiBub3dyYXA7CiAgICBnYXA6IDhweDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBtaW4td2lkdGg6IDA7CiAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgb3ZlcmZsb3cteTogaGlkZGVuOwogICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluOwp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtaW4td2lkdGg6IGF1dG87CiAgICBtaW4taGVpZ2h0OiAwOwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4wOCk7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LDI1NSwyNTUsMC4wNSksIHJnYmEoMjU1LDI1NSwyNTUsMC4wMikpLAogICAgICAgIHJnYmEoMTAsIDEyLCAxNiwgMC4yNCk7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjA0KSwKICAgICAgICAwIDZweCAxNnB4IHJnYmEoMCwwLDAsMC4xMik7CiAgICBwYWRkaW5nOiA1cHggNnB4OwogICAgZmxleDogMCAwIGF1dG87Cn0KCi5tanItdmlld2VyLXRvb2xzLXBhbmVsOjpiZWZvcmUgewogICAgY29udGVudDogIiI7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMCAwIGF1dG8gMDsKICAgIGhlaWdodDogMXB4OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCB0cmFuc3BhcmVudCwgcmdiYSgyNTUsMjU1LDI1NSwwLjE2KSwgdHJhbnNwYXJlbnQpOwogICAgb3BhY2l0eTogMC43OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5tanItdmlld2VyLXRvb2xzLXBhbmVsLWhlYWQgewogICAgZGlzcGxheTogbm9uZTsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtaGVhZGluZyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMXB4OwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbC1leWVicm93IHsKICAgIGZvbnQtc2l6ZTogOXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjE0ZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC40Nik7Cn0KCi5tanItdmlld2VyLXRvb2xzLXBhbmVsLXRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMWVtOwogICAgY29sb3I6IHJnYmEoMjQ4LDI1MCwyNTIsMC45Nik7Cn0KCi5tanItdmlld2VyLXRvb2xzLXBhbmVsLWJvZHkgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgIGdhcDogNnB4OwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbFtkYXRhLXBhbmVsPSJncmFkZSJdIC5tanItdmlld2VyLXRvb2xzLXBhbmVsLWJvZHkgewogICAgZGlzcGxheTogZmxleDsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWxbZGF0YS1wYW5lbD0ib3ZlcmxheSJdIC5tanItdmlld2VyLXRvb2xzLXBhbmVsLWJvZHkgewogICAgZGlzcGxheTogZmxleDsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWxbZGF0YS1wYW5lbD0iaW5zcGVjdCJdIC5tanItdmlld2VyLXRvb2xzLXBhbmVsLWJvZHksCi5tanItdmlld2VyLXRvb2xzLXBhbmVsW2RhdGEtcGFuZWw9ImFjdGlvbnMiXSAubWpyLXZpZXdlci10b29scy1wYW5lbC1ib2R5LAoubWpyLXZpZXdlci10b29scy1wYW5lbFtkYXRhLXBhbmVsPSJpbmZvIl0gLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtYm9keSB7CiAgICBkaXNwbGF5OiBmbGV4Owp9CgoubWpyLXZpZXdlci10b29scy1ncm91cCB7CiAgICB3aWR0aDogYXV0bzsKICAgIG1pbi1oZWlnaHQ6IDMwcHg7CiAgICBwYWRkaW5nOiA1cHggN3B4OwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgZ2FwOiA2cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMTIpOwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsMjU1LDI1NSwwLjAzNSksIHJnYmEoMjU1LDI1NSwyNTUsMC4wMikpLAogICAgICAgIHJnYmEoMTAsIDEyLCAxNiwgMC4xOCk7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4wMyk7CiAgICBtaW4td2lkdGg6IGZpdC1jb250ZW50Owp9CgoubWpyLXZpZXdlci10b29scy1ncm91cC1sYWJlbCB7CiAgICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjc1KTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjE1cHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXNpemU6IDEwcHg7Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW3N0eWxlKj0iLS1tanItZ3JvdXAtYWNjZW50Il0gLm1qci12aWV3ZXItdG9vbHMtZ3JvdXAtbGFiZWwgewogICAgY29sb3I6IHJnYmEodmFyKC0tbWpyLWdyb3VwLWFjY2VudCksIDAuOTApOwp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtzdHlsZSo9Ii0tbWpyLWdyb3VwLWFjY2VudCJdIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSh2YXIoLS1tanItZ3JvdXAtYWNjZW50KSwgMC4zNSk7Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9ImNoYW5uZWwiXSAubWpyLXZpZXdlci10b29scy1ncm91cC1sYWJlbCwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iYW5hbHlzaXMiXSAubWpyLXZpZXdlci10b29scy1ncm91cC1sYWJlbCwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1ndWlkZXMiXSAubWpyLXZpZXdlci10b29scy1ncm91cC1sYWJlbCwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1pbnNwZWN0Il0gLm1qci12aWV3ZXItdG9vbHMtZ3JvdXAtbGFiZWwgewogICAgbWluLXdpZHRoOiA0MnB4Owp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbFtkYXRhLXBhbmVsPSJvdmVybGF5Il0gLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1ndWlkZXMiXSB7CiAgICBmbGV4OiAwIDAgYXV0bzsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1ndWlkZXMiXSwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1pbnNwZWN0Il0gewogICAgZmxleC13cmFwOiB3cmFwOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iY2hhbm5lbCJdLAoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJleHBvc3VyZSJdLAoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJnYW1tYSJdLAoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJhbmFseXNpcyJdLAoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJjb21wYXJlIl0sCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9ImF1ZGlvLXZpeiJdIHsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKfQoKLm1qci12aWV3ZXItdG9vbHMtYWN0aW9ucywKLm1qci12aWV3ZXItdG9vbHMtbWV0YSB7CiAgICB3aWR0aDogYXV0bzsKICAgIG1pbi1oZWlnaHQ6IDMwcHg7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgcGFkZGluZzogNXB4IDdweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDYpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjAzKTsKfQoKLm1qci12aWV3ZXItdG9vbHMtYWN0aW9ucyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgIGdhcDogNnB4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXZpZXdlci10b29scy1tZXRhIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZ2FwOiA2cHg7CiAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItdmlld2VyLXRvb2xzLWFjdGlvbi0tcHJpbWFyeSB7CiAgICBtYXJnaW4tbGVmdDogMDsKfQoKLm1qci12aWV3ZXItdG9vbHMtYWN0aW9uICsgLm1qci12aWV3ZXItdG9vbHMtYWN0aW9uIHsKICAgIG1hcmdpbi1sZWZ0OiA0cHg7Cn0KCi5tanItdmlld2VyLXRvb2xzLXNlbGVjdCB7CiAgICBtaW4taGVpZ2h0OiAyNHB4Owp9CgoubWpyLXZpZXdlci10b29scy1yYW5nZS1pbnB1dCB7CiAgICB3aWR0aDogOTJweCAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29scy1yYW5nZSBzcGFuIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKfQoKQG1lZGlhIChtYXgtd2lkdGg6IDE0ODBweCkgewogICAgLm1qci12aWV3ZXItdG9vbHMtZGVjayB7CiAgICAgICAgZ2FwOiA2cHg7CiAgICB9Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiAxMjIwcHgpIHsKICAgIC5tanItdmlld2VyLWhlYWRlci10b3AgewogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiA4NHB4OwogICAgICAgIHBhZGRpbmctbGVmdDogMDsKICAgIH0KCiAgICAubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tY2VudGVyLAogICAgLm1qci12aWV3ZXItaGVhZGVyLWFyZWEtLXJpZ2h0IHsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIH0KCiAgICAubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tY2VudGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4OiAxIDEgMTAwJTsKICAgIH0KCiAgICAubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tcmlnaHQgewogICAgICAgIHBvc2l0aW9uOiBzdGF0aWM7CiAgICAgICAgdHJhbnNmb3JtOiBub25lOwogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4OiAxIDEgMTAwJTsKICAgIH0KCiAgICAubWpyLXZpZXdlci1oZWFkZXItbWV0YS0tcmlnaHQgewogICAgICAgIGp1c3RpZnktc2VsZjogY2VudGVyOwogICAgfQoKICAgIC5tanItdmlld2VyLXRvb2xzLWRlY2sgewogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBvdmVyZmxvdy14OiB2aXNpYmxlOwogICAgfQoKICAgIC5tanItdmlld2VyLXRvb2xzLXBhbmVsLAogICAgLm1qci12aWV3ZXItdG9vbHMtYWN0aW9ucywKICAgIC5tanItdmlld2VyLXRvb2xzLW1ldGEsCiAgICAubWpyLXZpZXdlci10b29scy1wYW5lbC1ib2R5IHsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICB9CgogICAgLm1qci12aWV3ZXItdG9vbHMtbWV0YSB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgfQp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJjb21wYXJlIl1bZGF0YS1hY3RpdmU9IjEiXSB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLW1qci1ncm91cC1hY2NlbnQpLCAwLjEwKTsKICAgIGJvcmRlci1sZWZ0LWNvbG9yOiByZ2JhKHZhcigtLW1qci1ncm91cC1hY2NlbnQpLCAwLjYwKTsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCByZ2JhKHZhcigtLW1qci1ncm91cC1hY2NlbnQpLCAwLjIyKTsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iY29tcGFyZSJdW2RhdGEtYWN0aXZlPSIxIl0gLm1qci12aWV3ZXItdG9vbHMtc2VsZWN0IHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSh2YXIoLS1tanItZ3JvdXAtYWNjZW50KSwgMC42MCk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAycHggcmdiYSh2YXIoLS1tanItZ3JvdXAtYWNjZW50KSwgMC4xOCk7Cn0KCi5tanItdmlld2VyLXRvb2xzLXNlbGVjdDpmb2N1cyB7CiAgICBvdXRsaW5lOiBub25lOwogICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHJnYmEoNjQsMTYwLDI1NSwwLjIyKTsKfQoKLyogTmF0aXZlIGRyb3Bkb3duczogaGludCBkYXJrIFVJIGFuZCBzdHlsZSBvcHRpb25zIHdoZW4gdGhlIGJyb3dzZXIgYWxsb3dzIGl0LiAqLwoubWpyLXZpZXdlci1oZWFkZXIgewogICAgY29sb3Itc2NoZW1lOiBkYXJrOwp9CgoubWpyLXZpZXdlci10b29scy1zZWxlY3QgewogICAgbWluLWhlaWdodDogMjRweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC40NikgIWltcG9ydGFudDsKICAgIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuOTIpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4xNCkgIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IDhweCAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29scy1zZWxlY3Qgb3B0aW9uIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsIHZhcigtLWlucHV0LXRleHQsICNkZGQpKTsKfQoKLm1qci12aWV3ZXItdG9vbHMtcmFuZ2UtaW5wdXQ6Zm9jdXMgewogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci12aWV3ZXItdG9vbC1idG4tLXJlc2V0IHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjIyKSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29sLWJ0biB7CiAgICBtaW4taGVpZ2h0OiAyNHB4ICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmFkaXVzOiA4cHggIWltcG9ydGFudDsKICAgIGJvcmRlci13aWR0aDogMXB4ICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIxMCwyMTQsMjIwLDAuMDc1KSwgcmdiYSgyMTAsMjE0LDIyMCwwLjAyNSkpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMTk2LDIwMiwyMTAsMC4xNikgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjA1KTsKICAgIGZvbnQtc2l6ZTogMTFweCAhaW1wb3J0YW50OwogICAgcGFkZGluZzogMCA4cHggIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbC1idG46aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIyMCwyMjQsMjMwLDAuMjQpICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIyMCwyMjQsMjMwLDAuMSksIHJnYmEoMjIwLDIyNCwyMzAsMC4wMzUpKSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJhbmFseXNpcyJdIC5tanItdmlld2VyLXRvb2wtYnRuW2RhdGEtYWN0aXZlPSIxIl0gewogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDE2NiwgOTIsIDAuMjIpLCByZ2JhKDI1NSwgMTE2LCA2NCwgMC4wOCkpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAxNjAsIDkyLCAwLjM0KSAhaW1wb3J0YW50OwogICAgY29sb3I6IHJnYmEoMjU1LCAyMzYsIDIyNCwgMC45NikgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iYW5hbHlzaXMiXSAubWpyLXZpZXdlci10b29sLWJ0bltkYXRhLWFjdGl2ZT0iMSJdOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAxODAsIDEwOCwgMC4yOCksIHJnYmEoMjU1LCAxMjgsIDcyLCAwLjE0KSkgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDE4NCwgMTE2LCAwLjQ2KSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJvdmVybGF5LWd1aWRlcyJdIC5tanItdmlld2VyLXRvb2wtYnRuW2RhdGEtYWN0aXZlPSIxIl0gewogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSg5MiwgMjE5LCAxODYsIDAuMjIpLCByZ2JhKDQ0LCAxNzAsIDE0NCwgMC4wOCkpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoOTIsIDIxOSwgMTg2LCAwLjM0KSAhaW1wb3J0YW50OwogICAgY29sb3I6IHJnYmEoMjI0LCAyNTUsIDI0OCwgMC45NikgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1ndWlkZXMiXSAubWpyLXZpZXdlci10b29sLWJ0bltkYXRhLWFjdGl2ZT0iMSJdOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMTAyLCAyMzAsIDE5NiwgMC4yOCksIHJnYmEoNTIsIDE4MiwgMTU2LCAwLjE0KSkgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgxMTAsIDIzNiwgMjAyLCAwLjQ2KSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJvdmVybGF5LWluc3BlY3QiXSAubWpyLXZpZXdlci10b29sLWJ0bltkYXRhLWFjdGl2ZT0iMSJdIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMTI0LCAxNjYsIDI1NSwgMC4yMiksIHJnYmEoMTA5LCA4OCwgMjIyLCAwLjA4KSkgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgxMzIsIDE3MCwgMjU1LCAwLjM2KSAhaW1wb3J0YW50OwogICAgY29sb3I6IHJnYmEoMjM2LCAyNDIsIDI1NSwgMC45NykgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1pbnNwZWN0Il0gLm1qci12aWV3ZXItdG9vbC1idG5bZGF0YS1hY3RpdmU9IjEiXTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDEzOCwgMTgwLCAyNTUsIDAuMzApLCByZ2JhKDEyNCwgMTAwLCAyMzIsIDAuMTQpKSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE0OCwgMTg4LCAyNTUsIDAuNDgpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLXRvb2wtYnRuW2RhdGEtYWN0aXZlPSIxIl0gewogICAgZmlsdGVyOiBzYXR1cmF0ZSgxLjEyKSBicmlnaHRuZXNzKDEuMDQpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xMCksCiAgICAgICAgMCAwIDAgMXB4IHJnYmEoMjU1LDI1NSwyNTUsMC4wNiksCiAgICAgICAgMCA4cHggMThweCByZ2JhKDAsMCwwLDAuMTYpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLWhlbHAgewogICAgYm9yZGVyLXJhZGl1czogMTRweCAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgxMywxNywyMiwwLjk2KSwgcmdiYSg4LDExLDE2LDAuOTgpKSAhaW1wb3J0YW50OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzogMCAxOHB4IDM0cHggcmdiYSgwLDAsMCwwLjM0KSAhaW1wb3J0YW50Owp9CgpAbWVkaWEgKG1heC13aWR0aDogMTIyMHB4KSB7CiAgICAubWpyLXZpZXdlci10b29scyB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICB9CgogICAgLm1qci12aWV3ZXItdG9vbHMtYWN0aW9ucyB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgfQoKICAgIC5tanItdmlld2VyLWhlYWRlci10b3AgewogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgICAgIGp1c3RpZnktaXRlbXM6IGNlbnRlcjsKICAgIH0KCiAgICAubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tbGVmdCwKICAgIC5tanItdmlld2VyLWhlYWRlci1hcmVhLS1jZW50ZXIsCiAgICAubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tcmlnaHQgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgfQoKICAgIC5tanItdmlld2VyLWhlYWRlci1tZXRhLS1sZWZ0LAogICAgLm1qci12aWV3ZXItaGVhZGVyLW1ldGEtLXJpZ2h0IHsKICAgICAgICBqdXN0aWZ5LXNlbGY6IGNlbnRlcjsKICAgIH0KCiAgICAubWpyLXZpZXdlci10b29scy1ib2R5IHsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDIyMHB4LCAxZnIpKTsKICAgIH0KfQoKLyogPT09PT09PT09PSBDdXN0b20gVmlkZW8gQ29udHJvbHMgKG5vIG5hdGl2ZSBiYXIpID09PT09PT09PT0gKi8KLm1qci12aWRlby1ob3N0IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLm1qci12aWRlby1jb250cm9scyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAxMnB4OwogICAgcmlnaHQ6IDEycHg7CiAgICBib3R0b206IDEycHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNik7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpOwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTsKICAgIG9wYWNpdHk6IDA7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgZWFzZTsKICAgIHotaW5kZXg6IDU7Cn0KCi5tanItdmlkZW8tcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXZpZGVvLXJvdy0tdG9wIHsKICAgIGdhcDogMTJweDsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIGF1dG8gMWZyIGF1dG8gYXV0bzsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tcm93LS10b3AgewogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIGF1dG8gMWZyIGF1dG8gYXV0bzsKfQoKLm1qci12aWRlby1jb250cm9scy0tcHJldmlldyAubWpyLXZpZGVvLXJvdy0tdG9wIHsKICAgIGRpc3BsYXk6IGZsZXg7Cn0KCi5tanItdmlkZW8tcm93LS1ib3R0b20gewogICAgZ2FwOiA4cHg7Cn0KCi5tanItdmlkZW8tZ3JvdXAgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBtaW4td2lkdGg6IDA7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg1KTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIHVzZXItc2VsZWN0OiBub25lOwp9CgoubWpyLXZpZGVvLW51bSB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpOwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgcGFkZGluZzogNXB4IDhweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci12aWRlby1udW06Zm9jdXMgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzgpOwp9CgoubWpyLXZpZGVvLW51bS0tc3BlZWQgewogICAgY29sb3Itc2NoZW1lOiBkYXJrOwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjYyKTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpOwp9CgoubWpyLXZpZGVvLW51bS0tc3BlZWQgb3B0aW9uIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwp9CgoubWpyLXZpZGVvLWZyYW1lIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CiAgICBtaW4td2lkdGg6IDUycHg7CiAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgIHVzZXItc2VsZWN0OiBub25lOwp9CgoubWpyLXZpZGVvLWZyYW1lLmlzLXN0ZXAgewogICAgY29sb3I6ICNmZmQyNGQ7Cn0KCi5tanItdmlkZW8tYm90dG9tIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmbGV4OiAxOwp9CgoubWpyLXZpZGVvLWJvdHRvbS0tbGVmdCB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7Cn0KCi5tanItdmlkZW8tYm90dG9tLS1yaWdodCB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwp9CgoubWpyLXZpZGVvLXRyYW5zcG9ydCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgZmxleDogMCAwIGF1dG87Cn0KCi8qIFNob3cgY29udHJvbHMgb24gaG92ZXIvZm9jdXMgKHZpZXdlcikuICovCi5tanItdmlkZW8taG9zdDpob3ZlciAubWpyLXZpZGVvLWNvbnRyb2xzLAoubWpyLXZpZGVvLWNvbnRyb2xzOmZvY3VzLXdpdGhpbiB7CiAgICBvcGFjaXR5OiAxOwogICAgcG9pbnRlci1ldmVudHM6IGF1dG87Cn0KCi8qIFByZXZpZXc6IGtlZXAgY29udHJvbHMgdmlzaWJsZSBiZWNhdXNlIHRoZSBhcmVhIGlzIHNtYWxsLiAqLwoubWpyLXZpZGVvLWNvbnRyb2xzLS1wcmV2aWV3IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IGF1dG87CiAgICByaWdodDogMTBweDsKICAgIHRvcDogYXV0bzsKICAgIGJvdHRvbTogMTBweDsKICAgIG9wYWNpdHk6IDE7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm9yZGVyOiBub25lOwogICAgcGFkZGluZzogMDsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgd2lkdGg6IGF1dG87CiAgICBoZWlnaHQ6IGF1dG87CiAgICBiYWNrZHJvcC1maWx0ZXI6IG5vbmU7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogbm9uZTsKfQoKLm1qci12aWRlby1wcmV2aWV3LWJ0biB7CiAgICB3aWR0aDogMzhweDsKICAgIGhlaWdodDogMzhweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjIyKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC40Mik7CiAgICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjkyKTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwp9CgoubWpyLXZpZGVvLXByZXZpZXctYnRuOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC41MCk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4yOCk7Cn0KCi5tanItdmlkZW8tcHJldmlldy1idG4gLnBpIHsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgoubWpyLXZpZGVvLWJ0biB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KTsKICAgIGNvbG9yOiAjZmZmOwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLm1qci12aWRlby1idG46aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKfQoKLm1qci12aWRlby1idG4uaXMtb24gewogICAgYmFja2dyb3VuZDogcmdiYSg2NCwgMTYwLCAyNTUsIDAuMjUpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDY0LCAxNjAsIDI1NSwgMC41NSk7Cn0KCi5tanItdmlkZW8tYnRuLS1pbiB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoNzAsIDI1NSwgMTIwLCAwLjU1KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzAsIDI1NSwgMTIwLCAwLjEyKTsKfQoKLm1qci12aWRlby1idG4tLWluOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzAsIDI1NSwgMTIwLCAwLjE4KTsKfQoKLm1qci12aWRlby1idG4tLW91dCB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCA3MCwgNzAsIDAuNTUpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDcwLCA3MCwgMC4xMCk7Cn0KCi5tanItdmlkZW8tYnRuLS1vdXQ6aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDcwLCA3MCwgMC4xNik7Cn0KCi5tanItdmlkZW8tdGltZSB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgbWluLXdpZHRoOiA5MnB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItdmlkZW8tdGltZWdyb3VwIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICBnYXA6IDEwcHg7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItdmlkZW8tcmFuZ2UtY291bnQgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6IHJnYmEoNjQsIDE5MCwgMjU1LCAwLjkyKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoNjQsIDE5MCwgMjU1LCAwLjEwKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNjQsIDE5MCwgMjU1LCAwLjI1KTsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgcGFkZGluZzogMXB4IDhweDsKICAgIGxpbmUtaGVpZ2h0OiAxNnB4OwogICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsKICAgIHVzZXItc2VsZWN0OiBub25lOwp9CgoubWpyLXZpZGVvLXJhbmdlIHsKICAgIGFjY2VudC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwp9CgoubWpyLXZpZGVvLXJhbmdlLS1zZWVrIHsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDgwcHg7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAxOwogICAgLyogV2UgZHJhdyBvdXIgb3duIHBsYXloZWFkL21hcmtlcnM7IGhpZGUgdGhlIG5hdGl2ZSB0aHVtYiAiZG90Ii4gKi8KICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAgIGFwcGVhcmFuY2U6IG5vbmU7Cn0KCi5tanItdmlkZW8tcmFuZ2UtLXNlZWs6Oi13ZWJraXQtc2xpZGVyLXRodW1iIHsKICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICB3aWR0aDogMDsKICAgIGhlaWdodDogMDsKICAgIGJvcmRlcjogMDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm94LXNoYWRvdzogbm9uZTsKfQoKLm1qci12aWRlby1yYW5nZS0tc2Vlazo6LW1vei1yYW5nZS10aHVtYiB7CiAgICB3aWR0aDogMDsKICAgIGhlaWdodDogMDsKICAgIGJvcmRlcjogMDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm94LXNoYWRvdzogbm9uZTsKfQoKLm1qci12aWRlby1zZWVrLXdyYXAgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWluLXdpZHRoOiA4MHB4OwogICAgZmxleDogMTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwp9CgoubWpyLXZpZGVvLXNlZWstem9uZXMgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgdG9wOiA1MCU7CiAgICBoZWlnaHQ6IDEwcHg7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDI7Cn0KCi5tanItdmlkZW8tc2Vlay16b25lIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMDsKICAgIGJvdHRvbTogMDsKfQoKLyogMC4uSW46IHRyaW1tZWQtb3V0IHJhbmdlLiAqLwoubWpyLXZpZGVvLXNlZWstem9uZS0tbGVmdFRyaW0gewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDcwLCA3MCwgMC4xOCk7Cn0KCi8qIEluLi5PdXQ6IHNlbGVjdGVkIHBsYXliYWNrIHJhbmdlIGhpZ2hsaWdodC4gKi8KLm1qci12aWRlby1zZWVrLXpvbmUtLXNlbGVjdGVkIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoNjQsIDE5MCwgMjU1LCAwLjU1KTsKfQoKLm1qci12aWRlby1zZWVrLXpvbmVzLmlzLWZ1bGxyYW5nZSAubWpyLXZpZGVvLXNlZWstem9uZS0tc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKfQoKLyogT3V0Li5FbmQ6IHNob3cgb3V0LW9mLXJhbmdlIGZyYW1lcyBhcyBhIGRpZmZlcmVudCBjb2xvci4gKi8KLm1qci12aWRlby1zZWVrLXpvbmUtLXJpZ2h0VHJpbSB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgNzAsIDcwLCAwLjIwKTsKfQoKLm1qci12aWRlby1zZWVrLW92ZXJsYXkgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgdG9wOiA1MCU7CiAgICBoZWlnaHQ6IDA7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDM7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiA1MCU7CiAgICB3aWR0aDogMTZweDsKICAgIGhlaWdodDogMzJweDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgY3Vyc29yOiBldy1yZXNpemU7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIHRvdWNoLWFjdGlvbjogbm9uZTsKICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgei1pbmRleDogNDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpOwogICAgYm94LXNoYWRvdzogMCA0cHggMTBweCByZ2JhKDAsMCwwLDAuMzUpOwp9CgoubWpyLXZpZGVvLXNlZWstaGFuZGxlOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMCk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNCk7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLWluOjphZnRlciwKLm1qci12aWRlby1zZWVrLWhhbmRsZS0tb3V0OjphZnRlciB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDUwJTsKICAgIHRvcDogNTAlOwogICAgd2lkdGg6IDJweDsKICAgIGhlaWdodDogMThweDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDcwLCA3MCwgMC45NSk7CiAgICBib3JkZXItcmFkaXVzOiAycHg7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLWluOjphZnRlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDcwLCAyNTUsIDEyMCwgMC45NSk7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLWluOjpiZWZvcmUsCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLW91dDo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogNTAlOwogICAgd2lkdGg6IDA7CiAgICBoZWlnaHQ6IDA7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLWluOjpiZWZvcmUgewogICAgdG9wOiA0cHg7CiAgICBib3JkZXItbGVmdDogNXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYm9yZGVyLXJpZ2h0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItYm90dG9tOiA2cHggc29saWQgcmdiYSg3MCwgMjU1LCAxMjAsIDAuOTUpOwp9CgoubWpyLXZpZGVvLXNlZWstaGFuZGxlLS1vdXQ6OmJlZm9yZSB7CiAgICBib3R0b206IDRweDsKICAgIGJvcmRlci1sZWZ0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItcmlnaHQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJvcmRlci10b3A6IDZweCBzb2xpZCByZ2JhKDI1NSwgNzAsIDcwLCAwLjk1KTsKfQoKLm1qci12aWRlby1zZWVrLXRpY2tzIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIHRvcDogLTE2cHg7CiAgICBoZWlnaHQ6IDEycHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEwKTsKICAgIG9wYWNpdHk6IDAuOTsKfQoKLm1qci12aWRlby1zZWVrLWxhYmVscyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICB0b3A6IC0zNHB4OwogICAgaGVpZ2h0OiAxNHB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBsaW5lLWhlaWdodDogMTRweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuNzIpOwogICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsKICAgIHRleHQtc2hhZG93OiAwIDFweCAwIHJnYmEoMCwwLDAsMC41NSk7Cn0KCi5tanItdmlkZW8tc2Vlay1sYWJlbCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoubWpyLXZpZGVvLXNlZWstcGxheWhlYWQtbGFiZWwgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAxMnB4OwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgcGFkZGluZzogMXB4IDZweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjU1KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xNCk7CiAgICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjkyKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGxpbmUtaGVpZ2h0OiAxNHB4OwogICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoubWpyLXZpZGVvLXNlZWstbWFyayB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IC0xMHB4OwogICAgd2lkdGg6IDE0cHg7CiAgICBoZWlnaHQ6IDIwcHg7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgIGN1cnNvcjogZXctcmVzaXplOwogICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICB0b3VjaC1hY3Rpb246IG5vbmU7CiAgICB6LWluZGV4OiA0OwogICAgLS1tanItbWFyay1jb2xvcjogcmdiYSgyNTUsIDcwLCA3MCwgMC45NSk7Cn0KCi5tanItdmlkZW8tc2Vlay1tYXJrLS1pbiB7CiAgICAtLW1qci1tYXJrLWNvbG9yOiByZ2JhKDcwLCAyNTUsIDEyMCwgMC45NSk7Cn0KCi5tanItdmlkZW8tc2Vlay1tYXJrOjpiZWZvcmUgewogICAgY29udGVudDogIiI7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiA1MCU7CiAgICB0b3A6IDA7CiAgICBib3R0b206IDA7CiAgICB3aWR0aDogMnB4OwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLW1hcmstY29sb3IpOwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHJnYmEoMCwwLDAsMC4zNSk7Cn0KCi5tanItdmlkZW8tc2Vlay1tYXJrOjphZnRlciB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogLTVweDsKICAgIGxlZnQ6IDUwJTsKICAgIHdpZHRoOiAwOwogICAgaGVpZ2h0OiAwOwogICAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJvcmRlci1yaWdodDogNXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYm9yZGVyLWJvdHRvbTogNnB4IHNvbGlkIHZhcigtLW1qci1tYXJrLWNvbG9yKTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKfQoKLm1qci12aWRlby1zZWVrLW1hcmstLWluOjphZnRlciB7CiAgICBib3JkZXItYm90dG9tLWNvbG9yOiB2YXIoLS1tanItbWFyay1jb2xvcik7Cn0KCi5tanItdmlkZW8tc2Vlay1tYXJrLS1vdXQ6OmFmdGVyIHsKICAgIHRvcDogYXV0bzsKICAgIGJvdHRvbTogLTVweDsKICAgIGJvcmRlci1ib3R0b206IG5vbmU7CiAgICBib3JkZXItdG9wOiA2cHggc29saWQgdmFyKC0tbWpyLW1hcmstY29sb3IpOwp9CgoubWpyLXZpZGVvLXNlZWstcGxheWhlYWQgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAtMTJweDsKICAgIHdpZHRoOiAycHg7CiAgICBoZWlnaHQ6IDI0cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjAwLCA3MCwgMC45NSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgwLDAsMCwwLjM1KTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMXB4KTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIHsKICAgIHBvc2l0aW9uOiBzdGF0aWM7CiAgICBsZWZ0OiBhdXRvOwogICAgcmlnaHQ6IGF1dG87CiAgICBib3R0b206IGF1dG87CiAgICBvcGFjaXR5OiAxOwogICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICB3aWR0aDogMTAwJTsKICAgIG1heC13aWR0aDogbm9uZTsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDE0cHg7CiAgICBib3JkZXItcmFkaXVzOiAxOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxOTYsIDIwMiwgMjEwLCAwLjEyKTsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCB0b3AgbGVmdCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzKSwgdHJhbnNwYXJlbnQgMzQlKSwKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDE5OCwgMjAzLCAyMTAsIDAuMDI1KSwgcmdiYSgxOTgsIDIwMywgMjEwLCAwLjAwOCkpLAogICAgICAgIGxpbmVhci1ncmFkaWVudCgxNjVkZWcsIHJnYmEoMTgsIDIyLCAyOCwgMC44MiksIHJnYmEoMTIsIDE1LCAyMSwgMC45KSk7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSwKICAgICAgICAwIDEwcHggMzBweCByZ2JhKDAsIDAsIDAsIDAuMTQpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBub25lOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IG5vbmU7CiAgICBnYXA6IDEycHg7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJ0biB7CiAgICBtaW4taGVpZ2h0OiAzOHB4OwogICAgcGFkZGluZzogOHB4IDEycHg7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyMTAsIDIxNCwgMjIwLCAwLjA3KSwgcmdiYSgyMTAsIDIxNCwgMjIwLCAwLjAyKSk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMTk0LCAyMDEsIDIwOCwgMC4xOCk7CiAgICBib3JkZXItd2lkdGg6IDFweDsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjEycyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIDAuMTJzIGVhc2UsIGJvcmRlci1jb2xvciAwLjEycyBlYXNlLCBib3gtc2hhZG93IDAuMTJzIGVhc2U7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJ0bjpob3ZlciB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjIwLCAyMjQsIDIzMCwgMC4yNik7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSwKICAgICAgICAwIDhweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xNCk7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJ0bi5pcy1vbiB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDEwMCwgMTcwLCAyNTUsIDAuMiksIHJnYmEoMTAwLCAxNzAsIDI1NSwgMC4wOCkpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDEyMCwgMTg2LCAyNTUsIDAuNDIpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHJnYmEoMTIwLCAxODYsIDI1NSwgMC4xMikgaW5zZXQ7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJ0biAucGkgewogICAgZm9udC1zaXplOiAxNHB4OwogICAgbGluZS1oZWlnaHQ6IDE7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1oZWFkLAoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1iYXItYWN0aW9ucyB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKSBhdXRvIG1pbm1heCgwLCAxZnIpOwogICAgZ2FwOiAxMnB4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLXN0YXR1cywKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLXNpZGUgewogICAgbWluLXdpZHRoOiAwOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBmbGV4LXdyYXA6IHdyYXA7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1jZW50ZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLWhlYWQgewogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLXNpZGUtLXJpZ2h0IHsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci10aW1lbGluZSB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIG1pbm1heCgwLCAxZnIpIGF1dG87CiAgICBnYXA6IDEycHg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgYm9yZGVyLXJhZGl1czogMTZweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1tZWRpYS1iYWRnZSB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIG1pbi1oZWlnaHQ6IDI4cHg7CiAgICBwYWRkaW5nOiAwIDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzgsIDIyNCwgMTk2LCAwLjEyKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNzgsIDIyNCwgMTk2LCAwLjIyKTsKICAgIGNvbG9yOiByZ2JhKDIyMCwgMjQ3LCAyNDEsIDAuOTYpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby10aW1lZ3JvdXAgewogICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nOiA1cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0NSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby10aW1lLAoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1mcmFtZSB7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgY29sb3I6IHJnYmEoMjI4LCAyMzAsIDIzNCwgMC45Mik7CiAgICB0ZXh0LXNoYWRvdzogbm9uZTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tZnJhbWUgewogICAgbWluLXdpZHRoOiA5NHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgcGFkZGluZzogNXB4IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNDUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tdGltZSB7CiAgICBtaW4td2lkdGg6IGF1dG87CiAgICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1yYW5nZS0tc2VlayB7CiAgICBoZWlnaHQ6IDIycHg7CiAgICBhY2NlbnQtY29sb3I6IHJnYmEoMjE0LCAyMTgsIDIyNCwgMC45Mik7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXJhbmdlLWNvdW50IHsKICAgIGNvbG9yOiByZ2JhKDIyMiwgMjI1LCAyMzAsIDAuOTUpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE5NCwgMjAxLCAyMDksIDAuMjYpOwogICAgYm9yZGVyLXdpZHRoOiAwLjhweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTk0LCAyMDEsIDIwOSwgMC4wOCk7CiAgICB0ZXh0LXNoYWRvdzogbm9uZTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tZ3JvdXAgewogICAgbWluLWhlaWdodDogMzZweDsKICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzNSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1ncm91cC0tYWRqdXN0LWxlZnQsCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWdyb3VwLS1hZGp1c3QtcmlnaHQsCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWdyb3VwLS1zcGVlZCB7CiAgICBnYXA6IDhweDsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tbnVtIHsKICAgIG1pbi1oZWlnaHQ6IDM0cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYmFja2dyb3VuZDogcmdiYSg5LCAxMiwgMTYsIDAuNTUpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXRyYW5zcG9ydCB7CiAgICBnYXA6IDEwcHg7CiAgICBwYWRkaW5nOiA2cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNDUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYnRuLS1wbGF5IHsKICAgIG1pbi13aWR0aDogODhweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXNlZWstd3JhcCB7CiAgICBtaW4taGVpZ2h0OiA0NHB4Owp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1zZWVrLXpvbmVzIHsKICAgIGhlaWdodDogMTJweDsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tc2Vlay1oYW5kbGUgewogICAgd2lkdGg6IDE4cHg7CiAgICBoZWlnaHQ6IDM0cHg7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXZvbHVtZS13cmFwIHsKICAgIHBhZGRpbmc6IDAgNHB4Owp9CgoubWpyLXZpZGVvLXJhbmdlLS12b2x1bWUgewogICAgd2lkdGg6IDkwcHg7Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiA5ODBweCkgewogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLWhlYWQsCiAgICAubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1iYXItYWN0aW9ucywKICAgIC5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci10aW1lbGluZSB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICB9CgogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLWNlbnRlciwKICAgIC5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1zaWRlLS1yaWdodCB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICB9CgogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLXRpbWVsaW5lIHsKICAgICAgICBnYXA6IDEwcHg7CiAgICB9CgogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tdHJhbnNwb3J0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTZweDsKICAgIH0KfQoKLyogPT09PT09PT09PSBDb250ZXh0IE1lbnUgQ29tcG9uZW50ID09PT09PT09PT0gKi8KLm1qci1jb250ZXh0LW1lbnUgewogICAgcG9zaXRpb246IGZpeGVkOwogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktbWVudS1iZyk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpOwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICBtaW4td2lkdGg6IDIwMHB4OwogICAgLyogQWJvdmUgdmlld2VyIG92ZXJsYXkgKDEwMDAxKSBhbmQgTUZWIGRpYWxvZyAoMTAwMDApICovCiAgICB6LWluZGV4OiAxMDAwMjsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBwYWRkaW5nOiA0cHggMDsKICAgIGFuaW1hdGlvbjogbWpyLWNvbnRleHQtbWVudS1pbiAwLjE1cyBlYXNlLW91dDsKfQoKLm1qci1jb250ZXh0LW1lbnUsCi5tanItY29udGV4dC1tZW51ICogewogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKQGtleWZyYW1lcyBtanItY29udGV4dC1tZW51LWluIHsKICAgIGZyb20gewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01cHgpOwogICAgfQogICAgdG8gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgfQp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtIHsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICBwYWRkaW5nOiA4cHggMTRweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgd2lkdGg6IDEwMCU7CiAgICBib3JkZXI6IDA7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3gtc2hhZG93OiBub25lOwogICAgbWFyZ2luOiAwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgIGxldHRlci1zcGFjaW5nOiBub3JtYWw7CiAgICBsaW5lLWhlaWdodDogMS4zNTsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXM7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbTo6LW1vei1mb2N1cy1pbm5lciB7CiAgICBib3JkZXI6IDA7CiAgICBwYWRkaW5nOiAwOwp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtOmhvdmVyLAoubWpyLWNvbnRleHQtbWVudS1pdGVtOmZvY3VzLXZpc2libGUgewogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktaW5wdXQtYmcpOwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy1kaXNhYmxlZCB7CiAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICBvcGFjaXR5OiAwLjQ1Owp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtLmlzLWRpc2FibGVkOmhvdmVyLAoubWpyLWNvbnRleHQtbWVudS1pdGVtLmlzLWRpc2FibGVkOmZvY3VzLXZpc2libGUgewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCi5tanItY29udGV4dC1tZW51LXNlcGFyYXRvciB7CiAgICBoZWlnaHQ6IDFweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLWJvcmRlci1jb2xvcik7CiAgICBtYXJnaW46IDRweCAwOwp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtLWxlZnQsCi5tanItY29udGV4dC1tZW51LWl0ZW0tcmlnaHQgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4Owp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtLWxlZnQgewogICAgZmxleDogMSAxIGF1dG87CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItY29udGV4dC1tZW51LWl0ZW0tcmlnaHQgewogICAgZmxleDogMCAwIGF1dG87CiAgICBtYXJnaW4tbGVmdDogMTZweDsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS1sZWZ0IGkgewogICAgd2lkdGg6IDE2cHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBvcGFjaXR5OiAwLjgyOwp9CgoubWpyLWNvbnRleHQtbWVudS1oaW50IHsKICAgIG9wYWNpdHk6IDAuNTg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoubWpyLWNvbnRleHQtbWVudS1zdWJtZW51LWFycm93IHsKICAgIG9wYWNpdHk6IDAuNzI7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLm1qci1hZGQtdG8tY29sbGVjdGlvbi1tZW51IHsKICAgIG1pbi13aWR0aDogMjYwcHg7CiAgICBtYXgtd2lkdGg6IG1pbigzNjBweCwgY2FsYygxMDB2dyAtIDE2cHgpKTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMnB4KTsKfQoKLm1qci1jb250ZXh0LW1lbnUtdGl0bGUgewogICAgcGFkZGluZzogOHB4IDE0cHggMTBweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBjb2xvcjogdmFyKC0tZmctY29sb3IpOwogICAgb3BhY2l0eTogMC45MjsKfQoKLm1qci1jb250ZXh0LW1lbnUtbm90ZSB7CiAgICBwYWRkaW5nOiAxMHB4IDE0cHg7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcpIDcyJSwgdmFyKC0tbWpyLW11dGVkKSk7CiAgICBsaW5lLWhlaWdodDogMS40NTsKfQoKLm1qci1ncmlkLXBvcG92ZXIsCi5tanItdmlld2VyLXBvcG92ZXIgewogICAgbWluLXdpZHRoOiAyNTBweDsKICAgIG1heC13aWR0aDogbWluKDM2MHB4LCBjYWxjKDEwMHZ3IC0gMTZweCkpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLXNtKTsKICAgIGJveC1zaGFkb3c6IDAgMTJweCAyOHB4IHJnYmEoMCwgMCwgMCwgMC4zNSk7Cn0KCkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7CiAgICAubWpyLXZpZXdlci1vdmVybGF5ICosCiAgICAubWpyLXZpZGVvLWNvbnRyb2xzLAogICAgLm1qci1jb250ZXh0LW1lbnUgewogICAgICAgIGFuaW1hdGlvbjogbm9uZSAhaW1wb3J0YW50OwogICAgICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDsKICAgICAgICBzY3JvbGwtYmVoYXZpb3I6IGF1dG8gIWltcG9ydGFudDsKICAgIH0KfQoKLyogSGlkZSBoZWFkZXIgKHRvb2xiYXIpIHdoZW4gdmlld2VyIG92ZXJsYXkgaXMgaW4gZnVsbHNjcmVlbiAqLwoubWpyLXZpZXdlci1vdmVybGF5OmZ1bGxzY3JlZW4gLm1qci12aWV3ZXItaGVhZGVyIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAogICBNYWpvb3IgRmxvYXRpbmcgVmlld2VyIChNRlYpIOKAlCBwb3J0YWxlZCB0byBkb2N1bWVudC5ib2R5CiAgIFJlZGVjbGFyZXMgQ1NTIHZhcmlhYmxlcyBzbyB0aGUgcGFuZWwgd29ya3Mgb3V0c2lkZSAubWpyLWFzc2V0cy1tYW5hZ2VyCiAgIChzYW1lIHBhdHRlcm4gYXMgLm1qci1wb3BvdmVyKQogICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi8KCi5tanItbWZ2IHsKICAgIC0tbWpyLXN1cmZhY2UtMDogdmFyKC0tY29udGVudC1iZywgIzFlMWUxZSk7CiAgICAtLW1qci1zdXJmYWNlLTE6IHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpOwogICAgLS1tanItc3VyZmFjZS0yOiB2YXIoLS1jb21meS1tZW51LXNlY29uZGFyeS1iZywgIzMzMyk7CiAgICAtLW1qci1ib3JkZXI6IHZhcigtLWJvcmRlci1jb2xvciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7CiAgICAtLW1qci1tdXRlZDogdmFyKC0tZGVzY3JpcC10ZXh0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKTsKICAgIC0tbWpyLWFjY2VudDogdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKTsKICAgIC0tbWpyLXN0YXR1cy1zdWNjZXNzOiB2YXIoLS1jb21meS1zdGF0dXMtc3VjY2VzcywgIzRDQUY1MCk7CgogICAgZm9udC1mYW1pbHk6IHZhcigtLWNvbWZ5LWZvbnQsIHVpLXNhbnMtc2VyaWYsIHN5c3RlbS11aSwgLWFwcGxlLXN5c3RlbSwgIlNlZ29lIFVJIiwgUm9ib3RvLCBBcmlhbCwgc2Fucy1zZXJpZik7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBsaW5lLWhlaWdodDogMS4zNTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKSk7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwoKICAgIC8qIFZpc3VhbCBjaHJvbWUgKi8KICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBib3gtc2hhZG93OiAwIDhweCAzMnB4IHJnYmEoMCwgMCwgMCwgMC41NSksIDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMyk7Cn0KCi5tanItbWZ2ICogewogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKaHRtbC5tanItbWZ2LXBvcG91dC1kb2N1bWVudCB7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIHJhZGlhbC1ncmFkaWVudCgKICAgICAgICAgICAgMTIwMHB4IDQyMHB4IGF0IDUwJSAwJSwKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLXByaW1hcnktYmFja2dyb3VuZCwgdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKSkgMTAlLCB0cmFuc3BhcmVudCksCiAgICAgICAgICAgIHRyYW5zcGFyZW50IDYyJQogICAgICAgICksCiAgICAgICAgbGluZWFyLWdyYWRpZW50KAogICAgICAgICAgICAxODBkZWcsCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtc3VyZmFjZSwgdmFyKC0tY29udGVudC1iZywgIzE2MTkxZikpIDgyJSwgIzAwMCAxOCUpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0taW50ZXJmYWNlLW1lbnUtc3VyZmFjZSwgdmFyKC0tY29tZnktbWVudS1iZywgIzFmMjIyNykpIDg0JSwgIzAwMCAxNiUpCiAgICAgICAgKTsKfQoKYm9keS5tanItbWZ2LXBvcG91dC1ib2R5IHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9CgojbWpyLW1mdi1wb3BvdXQtcm9vdCwKLm1qci1tZnYtcG9wb3V0LXJvb3QgewogICAgaXNvbGF0aW9uOiBpc29sYXRlOwp9CgovKiDilIDilIAgSGVhZGVyIChkcmFnIGhhbmRsZSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5tanItbWZ2LWhlYWRlciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSk7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBjdXJzb3I6IG1vdmU7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgZ2FwOiA2cHg7CiAgICBtaW4taGVpZ2h0OiAzNHB4Owp9CgoubWpyLW1mdi1oZWFkZXItdGl0bGUgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIG9wYWNpdHk6IDAuNzg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICBmbGV4OiAxOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMjhweDsKfQoKLyog4pSA4pSAIFRvb2xiYXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5tanItbWZ2LXRvb2xiYXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDRweDsKICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgNTAlLCB2YXIoLS1tanItc3VyZmFjZS0xKSA1MCUpOwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgZmxleC1zaHJpbms6IDA7CiAgICBtaW4taGVpZ2h0OiAzNnB4OwogICAgZmxleC13cmFwOiBub3dyYXA7CiAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgb3ZlcmZsb3cteTogaGlkZGVuOwogICAgc2Nyb2xsYmFyLXdpZHRoOiBub25lOwp9Ci5tanItbWZ2LXRvb2xiYXI6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5tanItbWZ2LXRvb2xiYXItc2VwIHsKICAgIHdpZHRoOiAxcHg7CiAgICBoZWlnaHQ6IDE4cHg7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItYm9yZGVyKTsKICAgIG1hcmdpbjogMCAzcHg7CiAgICBmbGV4LXNocmluazogMDsKfQoKLm1qci1tZnYtcHJvZ3Jlc3MgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGhlaWdodDogMjJweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA3MiUsICMwMDAgMjglKTsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgY3Vyc29yOiBkZWZhdWx0Owp9CgoubWpyLW1mdi1wcm9ncmVzcy5pcy1jbGlja2FibGUgewogICAgY3Vyc29yOiBwb2ludGVyOwp9CgoubWpyLW1mdi1wcm9ncmVzcy5pcy1jbGlja2FibGU6aG92ZXIgewogICAgZmlsdGVyOiBicmlnaHRuZXNzKDEuMDMpOwp9CgoubWpyLW1mdi1wcm9ncmVzcy1iYXIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHdpZHRoOiAwJTsKICAgIHRyYW5zaXRpb246IHdpZHRoIDcwbXMgZWFzZS1pbi1vdXQ7Cn0KCi5tanItbWZ2LXByb2dyZXNzLWJhci0tbm9kZXMgewogICAgdG9wOiAwOwogICAgaGVpZ2h0OiA1MCU7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy1zdWNjZXNzKSA2OCUsICMwYjM1MTMgMzIlKTsKfQoKLm1qci1tZnYtcHJvZ3Jlc3MtYmFyLS1zdGVwcyB7CiAgICB0b3A6IDUwJTsKICAgIGhlaWdodDogNTAlOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDY0JSwgIzBiMjM0MCAzNiUpOwp9CgoubWpyLW1mdi1wcm9ncmVzcy5pcy1lcnJvciAubWpyLW1mdi1wcm9ncmVzcy1iYXItLW5vZGVzLAoubWpyLW1mdi1wcm9ncmVzcy5pcy1lcnJvciAubWpyLW1mdi1wcm9ncmVzcy1iYXItLXN0ZXBzIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCAjZDk1MzRmIDc4JSwgIzRhMTQxNCAyMiUpOwp9CgoubWpyLW1mdi1wcm9ncmVzcy1vdmVybGF5IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KSwgcmdiYSgwLCAwLCAwLCAwLjE4KSk7CiAgICBtaXgtYmxlbmQtbW9kZTogc2NyZWVuOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5tanItbWZ2LXByb2dyZXNzLXRleHQgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgei1pbmRleDogMjsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgaGVpZ2h0OiAxMDAlOwogICAgcGFkZGluZzogMCA4cHg7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgdGV4dC1zaGFkb3c6IDAgMCAycHggcmdiYSgwLCAwLCAwLCAwLjkpOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKfQoKLm1qci1tZnYtcGluLWdyb3VwIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBnYXA6IDJweDsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKfQoubWpyLW1mdi1waW4tYnRuIHsKICAgIHdpZHRoOiAyNnB4OwogICAgaGVpZ2h0OiAyNnB4OwogICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0yKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBwYWRkaW5nOiAwOwogICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDEyMG1zIGVhc2UsIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLCBjb2xvciAxMjBtcyBlYXNlLCBib3gtc2hhZG93IDEyMG1zIGVhc2U7Cn0KLm1qci1tZnYtcGluLWJ0bjpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA0NSUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJhY2tncm91bmQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4MCUsIHZhcigtLW1qci1hY2NlbnQpIDglKTsKfQoubWpyLW1mdi1waW4tYnRuLmlzLXBpbm5lZCB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1OCUsICNmZmZmZmYgMTIlKTsKICAgIGJhY2tncm91bmQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA0MiUsIHZhcigtLW1qci1hY2NlbnQpIDU4JSk7CiAgICBjb2xvcjogI2VlZjdmZjsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMjQlLCB0cmFuc3BhcmVudCk7Cn0KCi8qIOKUgOKUgCBQaW4gZ3JvdXA6IG5vdyBhIGRyb3Bkb3duIG1lbnUgKGRpc3BsYXk6bm9uZSBieSBkZWZhdWx0LCBmbGV4IHdoZW4gLmlzLW9wZW4pIOKUgOKUgCAqLwoubWpyLW1mdi1waW4tZ3JvdXAgewogICAgZGlzcGxheTogbm9uZTsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDJweDsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogY2FsYygxMDAlICsgNHB4KTsKICAgIGxlZnQ6IDA7CiAgICB6LWluZGV4OiAxMDAxMDsKICAgIG1pbi13aWR0aDogNzBweDsKICAgIHBhZGRpbmc6IDRweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSk7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBib3gtc2hhZG93OiAwIDhweCAyNHB4IHJnYmEoMCwwLDAsMC41NSk7Cn0KLm1qci1tZnYtcGluLWdyb3VwLmlzLW9wZW4gewogICAgZGlzcGxheTogZmxleDsKfQoubWpyLW1mdi1waW4tYnRuIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMzBweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYmFja2dyb3VuZDogbm9uZTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBwYWRkaW5nOiAwIDEwcHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDEyMG1zIGVhc2UsIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLCBjb2xvciAxMjBtcyBlYXNlOwp9Ci5tanItbWZ2LXBpbi1idG46aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA4KTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDM1JSwgdHJhbnNwYXJlbnQpOwp9Ci5tanItbWZ2LXBpbi1idG4uaXMtcGlubmVkIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU4JSwgI2ZmZmZmZiAxMiUpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIsICMzMzMpIDQyJSwgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZikgNTglKTsKICAgIGNvbG9yOiAjZWVmN2ZmOwp9CgovKiDilIDilIAgSWNvbiBEcm9wZG93biBjb21wb25lbnQgKC5tanItbWZ2LWlkcm9wKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLm1qci1tZnYtaWRyb3AgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZmxleC1zaHJpbms6IDA7Cn0KCi5tanItbWZ2LWlkcm9wLW1lbnUgewogICAgZGlzcGxheTogbm9uZTsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDJweDsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogY2FsYygxMDAlICsgNHB4KTsKICAgIGxlZnQ6IDA7CiAgICB6LWluZGV4OiAxMDAxMDsKICAgIG1pbi13aWR0aDogMTEwcHg7CiAgICBwYWRkaW5nOiA0cHg7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1tZW51LWJnLCAjMmEyYTJhKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikpOwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgYm94LXNoYWRvdzogMCA4cHggMjRweCByZ2JhKDAsMCwwLDAuNTUpOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoubWpyLW1mdi1pZHJvcC1tZW51LmlzLW9wZW4gewogICAgZGlzcGxheTogZmxleDsKfQoKLm1qci1tZnYtaWRyb3AtaXRlbSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgd2lkdGg6IDEwMCU7CiAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICBib3JkZXI6IG5vbmU7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2RkZCk7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzIGVhc2U7Cn0KLm1qci1tZnYtaWRyb3AtaXRlbTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpOwp9Ci5tanItbWZ2LWlkcm9wLWl0ZW0uaXMtc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogcmdiYSg5NSwxNzksMjU1LDAuMTYpOwogICAgY29sb3I6ICNhOGQ4ZmY7Cn0KLm1qci1tZnYtaWRyb3AtdHJpZ2dlclthcmlhLWV4cGFuZGVkPSJ0cnVlIl0gewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjEpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4yKSAhaW1wb3J0YW50Owp9Ci8qIENoYW5uZWwgdHJpZ2dlcjogc2xpZ2h0bHkgd2lkZXIgdG8gZml0ICJSR0IiICovCi5tanItbWZ2LWNoLWxhYmVsIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA0ZW07CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLyogVG9vbGJhciBpY29uLWJ1dHRvbiBwb3BvdmVycyAoY2hhbm5lbCwgZ3VpZGVzLCBwaW4sIGZvcm1hdCDigJQgc29ydC1zdHlsZSBjb250ZXh0IG1lbnVzKSAqLwoubWpyLW1mdi1jaC1wb3BvdmVyLAoubWpyLW1mdi1ndWlkZXMtcG9wb3ZlciwKLm1qci1tZnYtcGluLXBvcG92ZXIsCi5tanItbWZ2LWZvcm1hdC1wb3BvdmVyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIG1pbi13aWR0aDogMTIwcHg7CiAgICBwYWRkaW5nOiA2cHg7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcsIDAuNXJlbSk7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xLCB2YXIoLS1jb21meS1tZW51LWJnLCAjMmEyYTJhKSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpKTsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDI0cHggcmdiYSgwLDAsMCwwLjU1KTsKICAgIHotaW5kZXg6IDEwMDEwOwogICAgZGlzcGxheTogbm9uZTsKfQoubWpyLW1mdi1jaC1wb3BvdmVyLmlzLW9wZW4sCi5tanItbWZ2LWd1aWRlcy1wb3BvdmVyLmlzLW9wZW4sCi5tanItbWZ2LXBpbi1wb3BvdmVyLmlzLW9wZW4sCi5tanItbWZ2LWZvcm1hdC1wb3BvdmVyLmlzLW9wZW4gewogICAgZGlzcGxheTogYmxvY2s7Cn0KLyogVG9vbGJhciBpY29uIGltYWdlcyDigJQgY2ggaWNvbiBpcyBibGFjayAoaW52ZXJ0ZWQpLCBndWlkZXMgaWNvbiBpcyBuYXRpdmUgd2hpdGUgKi8KLm1qci1tZnYtY2gtaWNvbiB7CiAgICB3aWR0aDogMThweDsKICAgIGhlaWdodDogMThweDsKICAgIGZpbHRlcjogaW52ZXJ0KDEpOwogICAgb3BhY2l0eTogMC44NTsKICAgIGRpc3BsYXk6IGJsb2NrOwp9Ci5tanItbWZ2LWd1aWRlcy1pY29uIHsKICAgIHdpZHRoOiAxOHB4OwogICAgaGVpZ2h0OiAxOHB4OwogICAgb3BhY2l0eTogMC44NTsKICAgIGRpc3BsYXk6IGJsb2NrOwp9Ci5tanItbWZ2LWNoLXRyaWdnZXJbYXJpYS1leHBhbmRlZD0idHJ1ZSJdLAoubWpyLW1mdi1ndWlkZXMtdHJpZ2dlclthcmlhLWV4cGFuZGVkPSJ0cnVlIl0sCi5tanItbWZ2LXBpbi10cmlnZ2VyW2FyaWEtZXhwYW5kZWQ9InRydWUiXSwKLm1qci1tZnYtZm9ybWF0LXRyaWdnZXJbYXJpYS1leHBhbmRlZD0idHJ1ZSJdIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4xKSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuMikgIWltcG9ydGFudDsKfQovKiBQaW4gc2xvdCBhY3RpdmUgc3RhdGUgKi8KLm1qci1tZnYtcGluLXBvcG92ZXIgLm1qci1tZW51LWl0ZW0uaXMtcGlubmVkIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoOTUsMTc5LDI1NSwwLjE2KTsKICAgIGNvbG9yOiAjYThkOGZmOwp9Ci5tanItbWZ2LXBpbi1wb3BvdmVyIC5tanItbWVudS1pdGVtLmlzLXBpbm5lZCAubWpyLW1lbnUtaXRlbS1jaGVjayB7CiAgICBvcGFjaXR5OiAxICFpbXBvcnRhbnQ7Cn0KLyogRm9ybWF0IHBvcG92ZXI6IHNlcGFyYXRvciArIG9wYWNpdHkgc2xpZGVyIHJvdyAqLwoubWpyLW1mdi1mb3JtYXQtc2VwIHsKICAgIGhlaWdodDogMXB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsMjU1LDI1NSwwLjEpKTsKICAgIG1hcmdpbjogNHB4IDJweDsKfQoubWpyLW1mdi1mb3JtYXQtc2xpZGVyLXJvdyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgcGFkZGluZzogNHB4IDhweCAycHg7Cn0KLm1qci1tZnYtZm9ybWF0LXNsaWRlci1sYWJlbCB7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2RkZCk7CiAgICBvcGFjaXR5OiAwLjY1OwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGZsZXgtc2hyaW5rOiAwOwp9Ci5tanItbWZ2LWZvcm1hdC1wb3BvdmVyIGlucHV0W3R5cGU9InJhbmdlIl0gewogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogNzBweDsKICAgIGFjY2VudC1jb2xvcjogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7Cn0KLm1qci1tZnYtZm9ybWF0LXBvcG92ZXIgLm1qci1tZnYtdG9vbGJhci1yYW5nZS1vdXQgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHZhcigtLWlucHV0LXRleHQsICNkZGQpOwogICAgb3BhY2l0eTogMC42NTsKICAgIG1pbi13aWR0aDogMzBweDsKICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgZmxleC1zaHJpbms6IDA7Cn0KCgoubWpyLW1mdiAubWpyLWljb24tYnRuIHsKICAgIHdpZHRoOiAzMHB4OwogICAgaGVpZ2h0OiAzMHB4OwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBib3JkZXItcmFkaXVzOiA3cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTIpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgcGFkZGluZzogMDsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDEyMG1zIGVhc2UsIGJhY2tncm91bmQtY29sb3IgMTIwbXMgZWFzZSwgYm9yZGVyLWNvbG9yIDEyMG1zIGVhc2UsIGNvbG9yIDEyMG1zIGVhc2UsIGJveC1zaGFkb3cgMTIwbXMgZWFzZTsKfQoKLm1qci1tZnYgLm1qci1pY29uLWJ0bjpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA0NSUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4MCUsIHZhcigtLW1qci1hY2NlbnQpIDglKTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKfQoKLm1qci1tZnYgLm1qci1pY29uLWJ0bjpmb2N1cy12aXNpYmxlIHsKICAgIG91dGxpbmU6IG5vbmU7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1OCUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMjQlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWZ2IC5tanItaWNvbi1idG4gLnBpIHsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgb3BhY2l0eTogMC45Owp9CgovKiBVbml2ZXJzYWwgYWN0aXZlIGhpZ2hsaWdodCDigJQgYW55IGFyaWEtcHJlc3NlZD0idHJ1ZSIgYnV0dG9uIGdldHMgYWNjZW50IGdsb3cuCiAgIFBsYWNlZCBiZWZvcmUgdGhlIGNvbG9yZWQgYWN0aXZlIGNsYXNzZXMgc28gdGhleSBjYW4gb3ZlcnJpZGUgd2l0aCB0aGVpciBvd24gY29sb3IuICovCi5tanItbWZ2IC5tanItaWNvbi1idG5bYXJpYS1wcmVzc2VkPSJ0cnVlIl0gewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDk1LCAxNzksIDI1NSwgMC41NSk7CiAgICBjb2xvcjogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMiwgIzMzMykgODAlLCB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKSAxNSUpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKSAyNSUsIHRyYW5zcGFyZW50KTsKfQoubWpyLW1mdiAubWpyLWljb24tYnRuW2FyaWEtcHJlc3NlZD0idHJ1ZSJdIC5waSB7CiAgICBvcGFjaXR5OiAxOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuLm1qci1saXZlLWFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MpIDYwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgY29sb3I6IHZhcigtLW1qci1zdGF0dXMtc3VjY2Vzcyk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLCB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MpIDEyJSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcykgMjUlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWZ2IC5tanItaWNvbi1idG4ubWpyLWxpdmUtYWN0aXZlIC5waSB7CiAgICBvcGFjaXR5OiAxOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuLm1qci1wcmV2aWV3LWFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA2MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4MCUsIHZhcigtLW1qci1hY2NlbnQpIDEyJSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDI1JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuLm1qci1wcmV2aWV3LWFjdGl2ZSAucGkgewogICAgb3BhY2l0eTogMTsKfQoKLm1qci1tZnYgLm1qci1pY29uLWJ0bi5tanItbm9kZXN0cmVhbS1hY3RpdmUgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCAjZmY5ODAwKSA2MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGNvbG9yOiB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZjk4MDApOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDgwJSwgdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCAjZmY5ODAwKSAxMiUpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZjk4MDApIDI1JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuLm1qci1ub2Rlc3RyZWFtLWFjdGl2ZSAucGkgewogICAgb3BhY2l0eTogMTsKfQoKLyogUG9wLWluIG1vZGUgKHZpZXdlciBwb3BwZWQgb3V0KTogcmFpc2UgYnV0dG9uIGNvbnRyYXN0L2JyaWdodG5lc3MgKi8KLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIHsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KAogICAgICAgICAgICAxODBkZWcsCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA5MiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCkpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgOTIlLCByZ2JhKDAsIDAsIDAsIDAuMTgpKQogICAgICAgICk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3NCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xOCkpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSksCiAgICAgICAgMCAyNHB4IDU2cHggcmdiYSgwLCAwLCAwLCAwLjQyKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItbWZ2LWhlYWRlciB7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgKICAgICAgICAgICAgMTgwZGVnLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODglLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpKSwKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDkwJSwgcmdiYSgwLCAwLCAwLCAwLjI0KSkKICAgICAgICApOwogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc4JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KSk7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1oZWFkZXItdGl0bGUgewogICAgb3BhY2l0eTogMC45ODsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2VlZjRmZikgOTQlLCAjZmZmZmZmIDYlKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItbWZ2LXRvb2xiYXIgewogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAgIDE4MGRlZywKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDg4JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSksCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA5MCUsIHJnYmEoMCwgMCwgMCwgMC4yNCkpCiAgICAgICAgKTsKICAgIGJvcmRlci1ib3R0b20tY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3OCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCkpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1tZnYtdG9vbGJhci1zZXAgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc4JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1wcm9ncmVzcyB7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgKICAgICAgICAgICAgMTgwZGVnLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgODIlLCAjMGExMTE4IDE4JSksCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA5MiUsICMwMDAgOCUpCiAgICAgICAgKTsKICAgIGJvcmRlci1ib3R0b20tY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3OCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCkpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1tZnYtcHJvZ3Jlc3MtdGV4dCB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcsICNlZWY0ZmYpIDk0JSwgI2ZmZmZmZiA2JSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1jb250ZW50IHsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCB0b3AsIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAxMCUsIHRyYW5zcGFyZW50KSAwJSwgdHJhbnNwYXJlbnQgNDIlKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgODIlLCAjMDAwIDE4JSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLWljb24tYnRuIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc2JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KSk7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgKICAgICAgICAgICAgMTgwZGVnLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODYlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpKSwKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDkyJSwgcmdiYSgwLCAwLCAwLCAwLjE4KSkKICAgICAgICApOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSA5MiUsICNmZmZmZmYgOCUpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KSwKICAgICAgICAwIDhweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xOCk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLWljb24tYnRuOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDUyJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAgIDE4MGRlZywKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDU4JSwgdmFyKC0tbWpyLWFjY2VudCkgNDIlKSwKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDYyJSwgdmFyKC0tbWpyLWFjY2VudCkgMzglKQogICAgICAgICk7CiAgICBjb2xvcjogI2Y0ZjhmZiAhaW1wb3J0YW50Owp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1pY29uLWJ0biAucGkgewogICAgb3BhY2l0eTogMTsKICAgIGNvbG9yOiBpbmhlcml0ICFpbXBvcnRhbnQ7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLWljb24tYnRuLm1qci1saXZlLWFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MpIDYwJSwgI2ZmZmZmZiA0MCUpOwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAgIDE4MGRlZywKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcykgNjIlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpKSwKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcykgMzYlLCB2YXIoLS1tanItc3VyZmFjZS0xKSA2NCUpCiAgICAgICAgKTsKICAgIGNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSwKICAgICAgICAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcykgMjQlLCB0cmFuc3BhcmVudCksCiAgICAgICAgMCAwIDE4cHggcmdiYSg3NiwgMTc1LCA4MCwgMC4xOCk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLWljb24tYnRuLm1qci1wcmV2aWV3LWFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1OCUsICNmZmZmZmYgNDIlKTsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KAogICAgICAgICAgICAxODBkZWcsCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA2MiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMzYlLCB2YXIoLS1tanItc3VyZmFjZS0xKSA2NCUpCiAgICAgICAgKTsKICAgIGNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSwKICAgICAgICAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDI0JSwgdHJhbnNwYXJlbnQpLAogICAgICAgIDAgMCAxOHB4IHJnYmEoOTUsIDE3OSwgMjU1LCAwLjE4KTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItaWNvbi1idG4ubWpyLW5vZGVzdHJlYW0tYWN0aXZlIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtd2FybmluZywgI2ZmOTgwMCkgNTglLCAjZmZmZmZmIDQyJSk7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgKICAgICAgICAgICAgMTgwZGVnLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCAjZmY5ODAwKSA2MiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCAjZmY5ODAwKSAzNiUsIHZhcigtLW1qci1zdXJmYWNlLTEpIDY0JSkKICAgICAgICApOwogICAgY29sb3I6ICNmZmZmZmYgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpLAogICAgICAgIDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCAjZmY5ODAwKSAyNCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAwIDAgMThweCByZ2JhKDI1NSwgMTUyLCAwLCAwLjE4KTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItbWZ2LXBpbi1idG4gewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNzYlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpKTsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KAogICAgICAgICAgICAxODBkZWcsCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4NCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgOTIlLCByZ2JhKDAsIDAsIDAsIDAuMTgpKQogICAgICAgICk7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcsICNkZGQpIDkyJSwgI2ZmZmZmZiA4JSk7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1waW4tYnRuOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDUyJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAgIDE4MGRlZywKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDU2JSwgdmFyKC0tbWpyLWFjY2VudCkgNDQlKSwKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDY0JSwgdmFyKC0tbWpyLWFjY2VudCkgMzYlKQogICAgICAgICk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1waW4tYnRuLmlzLXBpbm5lZCB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1OCUsICNmZmZmZmYgNDIlKTsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KAogICAgICAgICAgICAxODBkZWcsCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA2MiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMzYlLCB2YXIoLS1tanItc3VyZmFjZS0xKSA2NCUpCiAgICAgICAgKTsKICAgIGNvbG9yOiAjZmZmZmZmOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy1zaWRlYmFyIHsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KAogICAgICAgICAgICAxODBkZWcsCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA5NCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCkpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgOTQlLCByZ2JhKDAsIDAsIDAsIDAuMTgpKQogICAgICAgICk7CiAgICBib3JkZXItbGVmdC1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc4JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KSk7CiAgICBib3gtc2hhZG93OiBpbnNldCAxcHggMCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMyk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0ibGVmdCJdIC5tanItd3Mtc2lkZWJhciB7CiAgICBib3JkZXItcmlnaHQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3OCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNikpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy1zaWRlYmFyLWhlYWRlciB7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgKICAgICAgICAgICAgMTgwZGVnLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODQlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpKSwKICAgICAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDkyJSwgcmdiYSgwLCAwLCAwLCAwLjE4KSkKICAgICAgICApOwogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc2JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLXNpZGViYXItdGl0bGUgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZWVmNGZmKSA4MiUsIHZhcigtLW1qci1tdXRlZCkgMTglKTsKICAgIG9wYWNpdHk6IDAuODg7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLW5vZGUgewogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDcyJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLW5vZGUtaGVhZGVyIHsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwKSksCiAgICAgICAgbGluZWFyLWdyYWRpZW50KAogICAgICAgICAgICAxODBkZWcsCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA4NiUsIHZhcigtLW1qci1hY2NlbnQpIDE0JSksCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA4NiUsIHJnYmEoMCwgMCwgMCwgMC4xNCkpCiAgICAgICAgKTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItd3Mtbm9kZS10aXRsZSB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcsICNlZWY0ZmYpIDk0JSwgI2ZmZmZmZiA2JSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLXdpZGdldC1sYWJlbCwKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItd3Mtc2lkZWJhci1lbXB0eSwKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItd3Mtbm9kZS1lbXB0eSB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1tdXRlZCkgODQlLCAjZmZmZmZmIDE2JSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLWlucHV0IHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA3NCUsICMwNTA3MGEgMjYlKTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc0JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KSk7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLWlucHV0OmZvY3VzIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU4JSwgI2ZmZmZmZiAxMCUpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCksCiAgICAgICAgMCAwIDAgMnB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAxOCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1tZnYgLm1qci1pY29uLWJ0bi5tanItcG9waW4tYWN0aXZlIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU4JSwgI2ZmZmZmZiA0MiUpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDQ1JSwgdmFyKC0tbWpyLWFjY2VudCkgNTUlKTsKICAgIGNvbG9yOiAjZWVmN2ZmOwp9CgovKiDilIDilIAgQ29udGVudCB3cmFwcGVyIChob3Jpem9udGFsIGZsZXg6IGNvbnRlbnQgKyBzaWRlYmFyKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLm1qci1tZnYtY29udGVudC13cmFwcGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4OiAxOwogICAgbWluLWhlaWdodDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi8qIOKUgOKUgCBTaWRlYmFyIHBvc2l0aW9uIHZhcmlhbnRzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0ibGVmdCJdIHsKICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7Cn0KLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImxlZnQiXSAubWpyLXdzLXNpZGViYXIgewogICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKfQoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gewogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKfQoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci13cy1zaWRlYmFyIHsKICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDA7CiAgICB0cmFuc2l0aW9uOiBoZWlnaHQgMC4ycyBlYXNlLCB3aWR0aCAwczsKfQoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci13cy1zaWRlYmFyLm9wZW4gewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDIyMHB4OwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIG1pbi1oZWlnaHQ6IDEyMHB4OwogICAgbWF4LWhlaWdodDogNjUlOwp9CgovKiDilIDilIAgQ29udGVudCBhcmVhIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoubWpyLW1mdi1jb250ZW50IHsKICAgIGZsZXg6IDE7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgYmFja2dyb3VuZDogIzBkMGQwZDsKICAgIG1pbi1oZWlnaHQ6IDA7Cn0KCi5tanItbWZ2LW92ZXJsYXktY2FudmFzIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDEyOwp9CgoubWpyLW1mdi10b29sYmFyLXNlbGVjdCB7CiAgICBoZWlnaHQ6IDI0cHg7CiAgICBwYWRkaW5nOiAwIDZweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJvcmRlcjogMC44cHggc29saWQgcmdiYSgxOTYsIDIwMiwgMjEwLCAwLjI0KTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjEwLDIxNCwyMjAsMC4wNiksIHJnYmEoMjEwLDIxNCwyMjAsMC4wMikpOwogICAgY29sb3I6IHJnYmEoMjMwLDIzMywyMzgsMC45Mik7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBvdXRsaW5lOiBub25lOwp9CgoubWpyLW1mdi10b29sYmFyLXJhbmdlIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4Owp9CgoubWpyLW1mdi10b29sYmFyLXJhbmdlIGlucHV0W3R5cGU9InJhbmdlIl0gewogICAgd2lkdGg6IDcycHg7CiAgICBhY2NlbnQtY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC44NSk7Cn0KCi5tanItbWZ2LXRvb2xiYXItcmFuZ2Utb3V0IHsKICAgIG1pbi13aWR0aDogMzBweDsKICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC45KTsKfQoKLyogRVYgc2xpZGVyIGFjdGl2ZSBzdGF0ZSAodmFsdWUg4omgIDApICovCi5tanItbWZ2LXRvb2xiYXItcmFuZ2UuaXMtYWN0aXZlIGlucHV0W3R5cGU9InJhbmdlIl0gewogICAgYWNjZW50LWNvbG9yOiAjZjVjODQyOwp9Ci5tanItbWZ2LXRvb2xiYXItcmFuZ2UuaXMtYWN0aXZlIC5tanItbWZ2LXRvb2xiYXItcmFuZ2Utb3V0IHsKICAgIGNvbG9yOiAjZjVjODQyOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKfQoKLm1qci1tZnYtbWVkaWEtcHJvZ3Jlc3MgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAxMHB4OwogICAgbGVmdDogMTBweDsKICAgIHotaW5kZXg6IDY7CiAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDIwcHgpOwogICAgcGFkZGluZzogNXB4IDlweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpKSA4OCUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCByZ2JhKDUsIDgsIDE0LCAwLjg2KSA4NiUsIHZhcigtLW1qci1zdXJmYWNlLTAsICMxMTEpIDE0JSk7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2Y1ZjdmYSk7CiAgICBib3gtc2hhZG93OiAwIDJweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4yOCk7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIG9wYWNpdHk6IDA7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTRweCk7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTZzIGVhc2UsIHRyYW5zZm9ybSAwLjE2cyBlYXNlOwp9CgoubWpyLW1mdi1tZWRpYS1wcm9ncmVzcy5pcy12aXNpYmxlIHsKICAgIG9wYWNpdHk6IDE7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7Cn0KCi5tanItbWZ2LW1lZGlhLXByb2dyZXNzLmlzLWVycm9yIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtZXJyb3IsICNmZjVjN2EpIDcyJSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHJnYmEoNjAsIDEwLCAxOCwgMC45KSA4MiUsIHZhcigtLW1qci1zdXJmYWNlLTAsICMxMTEpIDE4JSk7Cn0KCi5tanItbWZ2LW1lZGlhLXByb2dyZXNzLXRleHQgewogICAgZGlzcGxheTogYmxvY2s7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7Cn0KCi8qIOKUgOKUgCBXb3JrZmxvdyBTaWRlYmFyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoubWpyLXdzLXNpZGViYXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICB3aWR0aDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xLCAjMmEyYTJhKTsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7CiAgICB0cmFuc2l0aW9uOiB3aWR0aCAwLjJzIGVhc2U7CiAgICBmbGV4LXNocmluazogMDsKfQoKLm1qci13cy1zaWRlYmFyLm9wZW4gewogICAgd2lkdGg6IDI2MHB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIG1pbi13aWR0aDogMTgwcHg7CiAgICBtYXgtd2lkdGg6IDY1JTsKICAgIHRyYW5zaXRpb246IG5vbmU7Cn0KCi5tanItd3Mtc2lkZWJhci1oZWFkZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgbWluLWhlaWdodDogMzRweDsKfQoubWpyLXdzLXNpZGViYXItdGl0bGUgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7CiAgICBvcGFjaXR5OiAwLjY1Owp9Ci5tanItd3Mtc2lkZWJhci1ib2R5IHsKICAgIGZsZXg6IDE7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIHBhZGRpbmc6IDA7Cn0KLm1qci13cy1zaWRlYmFyLWVtcHR5IHsKICAgIHBhZGRpbmc6IDI0cHggMTZweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgbGluZS1oZWlnaHQ6IDEuNTsKfQoKLyog4pSA4pSAIFRhYiBiYXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5tanItd3MtdGFiLWJhciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1zaHJpbms6IDA7CiAgICBnYXA6IDJweDsKICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMTgpOwp9CgoubWpyLXdzLXRhYiB7CiAgICBmbGV4OiAxOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogNXB4OwogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40NSk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNTAwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cywgY29sb3IgMC4xNXM7Cn0KCi5tanItd3MtdGFiOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNyk7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1KTsKfQoKLm1qci13cy10YWIuaXMtYWN0aXZlIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoOTksIDE1NSwgMjU1LCAwLjE1KTsKICAgIGNvbG9yOiAjNjM5YmZmOwp9CgovKiDilIDilIAgTm9kZXMgdGFiIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoubWpyLXdzLW5vZGVzLXRhYiB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGZsZXg6IDE7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm1qci13cy1zZWFyY2gtd3JhcCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgcGFkZGluZzogNnB4IDhweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKfQoKLm1qci13cy1zZWFyY2gtaWNvbiB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAxNnB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoubWpyLXdzLXNlYXJjaCB7CiAgICBmbGV4OiAxOwogICAgcGFkZGluZzogNHB4IDI4cHggNHB4IDI2cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMzUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODUpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci13cy1zZWFyY2g6OnBsYWNlaG9sZGVyIHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjgpOwp9CgoubWpyLXdzLXNlYXJjaDpmb2N1cyB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoOTksIDE1NSwgMjU1LCAwLjUpOwp9CgoubWpyLXdzLXNlYXJjaC1jbGVhciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICByaWdodDogMTRweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICB3aWR0aDogMThweDsKICAgIGhlaWdodDogMThweDsKICAgIHBhZGRpbmc6IDA7CiAgICBib3JkZXI6IG5vbmU7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7Cn0KCi5tanItd3Mtc2VhcmNoLWNsZWFyOmhvdmVyIHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwp9CgoubWpyLXdzLW5vZGVzLWxpc3QgewogICAgZmxleDogMTsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICBwYWRkaW5nOiA0cHggMDsKfQoKLm1qci13cy1ub2RlLXJvdyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgcGFkZGluZzogNXB4IDEwcHggNXB4IDEycHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKICAgIG1pbi1oZWlnaHQ6IDMycHg7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMXM7Cn0KCi5tanItd3Mtbm9kZS1yb3c6aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKfQoKLm1qci13cy1ub2RlLXJvdy10eXBlIHsKICAgIGZsZXg6IDE7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc4KTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cn0KCi5tanItd3Mtbm9kZS1yb3ctdGl0bGUgewogICAgZm9udC1zaXplOiAxMHB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40KTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICBtYXgtd2lkdGg6IDgwcHg7CiAgICBmbGV4LXNocmluazogMDsKfQoKLm1qci13cy1ub2RlLWxvY2F0ZSB7CiAgICBmbGV4LXNocmluazogMDsKICAgIHdpZHRoOiAyMnB4OwogICAgaGVpZ2h0OiAyMnB4OwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDA7CiAgICBib3JkZXI6IG5vbmU7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBvcGFjaXR5OiAwOwogICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjFzLCBjb2xvciAwLjFzLCBiYWNrZ3JvdW5kIDAuMXM7Cn0KCi5tanItd3Mtbm9kZS1yb3c6aG92ZXIgLm1qci13cy1ub2RlLWxvY2F0ZSB7CiAgICBvcGFjaXR5OiAxOwp9CgoubWpyLXdzLW5vZGUtbG9jYXRlOmhvdmVyIHsKICAgIGNvbG9yOiAjNjM5YmZmOwogICAgYmFja2dyb3VuZDogcmdiYSg5OSwgMTU1LCAyNTUsIDAuMTUpOwp9CgovKiDilIDilIAgTm9kZSBzZWN0aW9ucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLm1qci13cy1ub2RlIHsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKfQoubWpyLXdzLXNpZGViYXItcmVzaXplciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDA7CiAgICBib3R0b206IDA7CiAgICB3aWR0aDogMTRweDsKICAgIHotaW5kZXg6IDI7CiAgICBjdXJzb3I6IGV3LXJlc2l6ZTsKICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwp9CgoubWpyLXdzLXNpZGViYXItcmVzaXplcjo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiA1MCU7CiAgICBsZWZ0OiA1MCU7CiAgICB3aWR0aDogNHB4OwogICAgaGVpZ2h0OiA1NnB4OwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xOCk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKICAgIG9wYWNpdHk6IDA7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGVhc2UsIGJhY2tncm91bmQgMC4xNXMgZWFzZTsKfQoKLm1qci13cy1zaWRlYmFyLm9wZW46aG92ZXIgLm1qci13cy1zaWRlYmFyLXJlc2l6ZXI6OmJlZm9yZSwKLm1qci13cy1zaWRlYmFyLmlzLXJlc2l6aW5nIC5tanItd3Mtc2lkZWJhci1yZXNpemVyOjpiZWZvcmUsCi5tanItd3Mtc2lkZWJhci1yZXNpemVyLmlzLWRyYWdnaW5nOjpiZWZvcmUgewogICAgb3BhY2l0eTogMTsKfQoKLm1qci13cy1zaWRlYmFyLmlzLXJlc2l6aW5nIC5tanItd3Mtc2lkZWJhci1yZXNpemVyOjpiZWZvcmUsCi5tanItd3Mtc2lkZWJhci1yZXNpemVyOmhvdmVyOjpiZWZvcmUsCi5tanItd3Mtc2lkZWJhci1yZXNpemVyLmlzLWRyYWdnaW5nOjpiZWZvcmUgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjM0KTsKfQoKLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9InJpZ2h0Il0gLm1qci13cy1zaWRlYmFyLXJlc2l6ZXIgewogICAgcmlnaHQ6IDA7Cn0KCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJsZWZ0Il0gLm1qci13cy1zaWRlYmFyLXJlc2l6ZXIgewogICAgbGVmdDogMDsKfQoKLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImJvdHRvbSJdIC5tanItd3Mtc2lkZWJhci1yZXNpemVyIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KLm1qci13cy1ub2RlLWhlYWRlciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCwgIzFlMWUxZSkgNDAlLCB2YXIoLS1tanItc3VyZmFjZS0xLCAjMmEyYTJhKSA2MCUpOwogICAgY3Vyc29yOiBkZWZhdWx0OwogICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTJzIGVhc2U7Cn0KLm1qci13cy1ub2RlLmlzLWNvbGxhcHNpYmxlIC5tanItd3Mtbm9kZS1oZWFkZXIgewogICAgY3Vyc29yOiBwb2ludGVyOwp9Ci5tanItd3Mtbm9kZS5pcy1jb2xsYXBzaWJsZSAubWpyLXdzLW5vZGUtaGVhZGVyOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wLCAjMWUxZTFlKSAyOCUsIHZhcigtLW1qci1zdXJmYWNlLTEsICMyYTJhMmEpIDcyJSk7Cn0KLm1qci13cy1ub2RlLmlzLWNvbGxhcHNpYmxlLmlzLWNvbGxhcHNlZCAubWpyLXdzLW5vZGUtaGVhZGVyOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCAjNWI4YWYwKSA4JSwgdmFyKC0tbWpyLXN1cmZhY2UtMSwgIzJhMmEyYSkgOTIlKTsKfQoubWpyLXdzLW5vZGUtdG9nZ2xlIHsKICAgIGZsZXg6IDAgMCBhdXRvOwp9Ci5tanItd3Mtbm9kZS10aXRsZS13cmFwIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiAwOwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMXB4Owp9Ci5tanItd3Mtbm9kZS10eXBlIHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwp9Ci5tanItd3Mtbm9kZS10aXRsZSB7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQ4KTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cn0KLm1qci13cy1ub2RlLmlzLWNvbGxhcHNlZCAubWpyLXdzLW5vZGUtYm9keSB7CiAgICBkaXNwbGF5OiBub25lOwp9Ci5tanItd3Mtbm9kZS1ib2R5IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiA0cHg7CiAgICBwYWRkaW5nOiA2cHggMTBweDsKfQoubWpyLXdzLW5vZGUtZW1wdHkgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKTsKICAgIHBhZGRpbmc6IDRweCAwOwp9CgovKiDilIDilIAgTmVzdGVkIG5vZGVzIChpbnNpZGUgc3ViZ3JhcGhzKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLm1qci13cy1ub2RlLS1uZXN0ZWQgewogICAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCByZ2JhKDkxLCAxMzgsIDI0MCwgMC4zNSk7Cn0KLm1qci13cy1ub2RlLS1uZXN0ZWQgLm1qci13cy1ub2RlLWhlYWRlciB7CiAgICBwYWRkaW5nLWxlZnQ6IDE2cHg7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCwgIzViOGFmMCkgNSUsIHZhcigtLW1qci1zdXJmYWNlLTEsICMyYTJhMmEpIDk1JSk7Cn0KLm1qci13cy1ub2RlLS1uZXN0ZWQuaXMtY29sbGFwc2libGUgLm1qci13cy1ub2RlLWhlYWRlcjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCwgIzViOGFmMCkgMTAlLCB2YXIoLS1tanItc3VyZmFjZS0xLCAjMmEyYTJhKSA5MCUpOwp9CgovKiDilIDilIAgU3ViZ3JhcGggY2hpbGRyZW4gZ3JvdXAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5tanItd3MtY2hpbGRyZW4tdG9nZ2xlIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICB3aWR0aDogMTAwJTsKICAgIHBhZGRpbmc6IDVweCAxMHB4IDVweCAyMHB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsICM1YjhhZjApIDYlLCB2YXIoLS1tanItc3VyZmFjZS0wLCAjMWUxZTFlKSA5NCUpOwogICAgYm9yZGVyOiBub25lOwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwogICAgY29sb3I6IHZhcigtLW1qci1hY2NlbnQsICM1YjhhZjApOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIG9wYWNpdHk6IDAuODsKICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xcyBlYXNlLCBiYWNrZ3JvdW5kIDAuMXMgZWFzZTsKfQoubWpyLXdzLWNoaWxkcmVuLXRvZ2dsZS0tbmVzdGVkIHsKICAgIHBhZGRpbmctbGVmdDogMjhweDsKfQoubWpyLXdzLWNoaWxkcmVuLXRvZ2dsZTpob3ZlciB7CiAgICBvcGFjaXR5OiAxOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsICM1YjhhZjApIDEyJSwgdmFyKC0tbWpyLXN1cmZhY2UtMCwgIzFlMWUxZSkgODglKTsKfQoubWpyLXdzLWNoaWxkcmVuLXRvZ2dsZVthcmlhLWV4cGFuZGVkPSJ0cnVlIl0gewogICAgb3BhY2l0eTogMTsKfQoubWpyLXdzLWNoaWxkcmVuIHsKICAgIGJvcmRlci1sZWZ0OiAycHggc29saWQgcmdiYSg5MSwgMTM4LCAyNDAsIDAuMjUpOwogICAgbWFyZ2luLWxlZnQ6IDZweDsKfQoKCi5tanItd3Mtd2lkZ2V0LXJvdyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICBnYXA6IDhweDsKfQoubWpyLXdzLXdpZGdldC1yb3ctLWJsb2NrIHsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDJweDsKfQoubWpyLXdzLXdpZGdldC1yb3ctLWJsb2NrIC5tanItd3Mtd2lkZ2V0LWxhYmVsIHsKICAgIGZsZXg6IG5vbmU7CiAgICBwYWRkaW5nLXRvcDogMDsKfQoubWpyLXdzLXdpZGdldC1yb3ctLWJsb2NrIC5tanItd3Mtd2lkZ2V0LWlucHV0IHsKICAgIHdpZHRoOiAxMDAlOwp9Ci5tanItd3Mtd2lkZ2V0LWxhYmVsIHsKICAgIGZsZXg6IDAgMCA4MHB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHZhcigtLWRlc2NyaXAtdGV4dCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjU1KSk7CiAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKfQoubWpyLXdzLXdpZGdldC1pbnB1dCB7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiAwOwp9Ci5tanItd3MtaW5wdXQgewogICAgd2lkdGg6IDEwMCU7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1pbnB1dC1iZywgIzIyMik7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2RkZCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIHBhZGRpbmc6IDRweCA2cHg7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIG91dGxpbmU6IG5vbmU7CiAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMTIwbXMgZWFzZTsKfQoubWpyLXdzLWlucHV0OmZvY3VzIHsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7Cn0KLm1qci13cy10ZXh0YXJlYSB7CiAgICByZXNpemU6IG5vbmU7CiAgICBtaW4taGVpZ2h0OiAyOHB4OwogICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgIG92ZXJmbG93LXk6IGhpZGRlbjsKfQoubWpyLXdzLXRleHQtd3JhcHBlciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMnB4OwogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMDsKfQoubWpyLXdzLXRleHQtd3JhcHBlciAubWpyLXdzLXRleHRhcmVhIHsKICAgIHdpZHRoOiAxMDAlOwp9Ci5tanItd3MtZXhwYW5kLWJ0biB7CiAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICBib3JkZXI6IG5vbmU7CiAgICBjb2xvcjogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBwYWRkaW5nOiAwIDRweDsKICAgIG9wYWNpdHk6IDAuODsKfQoubWpyLXdzLWV4cGFuZC1idG46aG92ZXIgewogICAgb3BhY2l0eTogMTsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9Ci5tanItd3MtcmVhZG9ubHkgewogICAgb3BhY2l0eTogMC41OwogICAgY3Vyc29yOiBkZWZhdWx0Owp9Ci5tanItd3MtY2hlY2tib3ggewogICAgYWNjZW50LWNvbG9yOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKICAgIHdpZHRoOiAxNnB4OwogICAgaGVpZ2h0OiAxNnB4OwogICAgbWFyZ2luLXRvcDogNHB4Owp9Ci5tanItd3MtdG9nZ2xlLWxhYmVsIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwp9CgovKiDilIDilIAgTG9jYXRlIGJ1dHRvbiBpbnNpZGUgbm9kZSBoZWFkZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5tanItd3MtbG9jYXRlIHsKICAgIHdpZHRoOiAyNHB4ICFpbXBvcnRhbnQ7CiAgICBoZWlnaHQ6IDI0cHggIWltcG9ydGFudDsKICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgIG9wYWNpdHk6IDAuNTsKfQoubWpyLXdzLWxvY2F0ZTpob3ZlciB7CiAgICBvcGFjaXR5OiAxOwp9CgovKiDilIDilIAgUnVuIGJ1dHRvbiBzdGF0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLm1qci1tZnYtcnVuLWNvbnRyb2xzIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNHB4Owp9Ci5tanItbWZ2LXJ1bi1idG4gLnBpIHsgY29sb3I6IHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcywgIzRDQUY1MCk7IH0KLm1qci1tZnYtcnVuLWJ0bi5ydW5uaW5nIC5waSB7IGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42NSkpOyB9Ci5tanItbWZ2LXJ1bi1idG4uc3RvcHBpbmcgLnBpIHsgY29sb3I6IHZhcigtLW1qci1zdGF0dXMtd2FybmluZywgI0ZGQTcyNik7IH0KLm1qci1tZnYtcnVuLWJ0bi5lcnJvciAucGkgeyBjb2xvcjogI2Y0NDMzNjsgfQoKLm1qci1tZnYtc3RvcC1idG4gLnBpIHsgY29sb3I6ICNlZjUzNTA7IH0KLm1qci1tZnYtc3RvcC1idG4uYWN0aXZlIC5waSB7IGNvbG9yOiAjZmY4YTY1OyB9Ci5tanItbWZ2LXN0b3AtYnRuLnN0b3BwaW5nIC5waSB7IGNvbG9yOiB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNGRkE3MjYpOyB9CgovKiDilIDilIAgRmxvYXRpbmcgVmlld2VyIHNpbXBsZSB2aWRlbyBwbGF5ZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci5pcy1hdWRpbyB7CiAgICBiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDIwJSAyMCUsIHJnYmEoOTUsIDE3OSwgMjU1LCAwLjIpLCByZ2JhKDE4LCAyMCwgMjgsIDAuOTUpKTsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci1hdWRpby1iYWNrZHJvcCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjJweDsKICAgIHRleHQtc2hhZG93OiAwIDJweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC40NSk7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHBhZGRpbmc6IDE4cHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItY29udHJvbHMgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMTJweDsKICAgIHJpZ2h0OiAxMnB4OwogICAgYm90dG9tOiAxMnB4OwogICAgei1pbmRleDogMzA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZzogOXB4IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiAxNHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byB0b3AsIHJnYmEoMTAsIDEwLCAxNCwgMC43NiksIHJnYmEoMTYsIDE2LCAyNCwgMC41NSkpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci1yb3cgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7Cn0KCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItc2VlayB7CiAgICAtLW1qci1zZWVrLXBjdDogMCU7CiAgICBhcHBlYXJhbmNlOiBub25lOwogICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDZweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgb3V0bGluZTogbm9uZTsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICB0byByaWdodCwKICAgICAgICAjZmYyZjUyIDAlLAogICAgICAgICNmZjJmNTIgdmFyKC0tbWpyLXNlZWstcGN0KSwKICAgICAgICByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjQpIHZhcigtLW1qci1zZWVrLXBjdCksCiAgICAgICAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI0KSAxMDAlCiAgICApOwogICAgY3Vyc29yOiBwb2ludGVyOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLXNlZWs6Oi13ZWJraXQtc2xpZGVyLXRodW1iIHsKICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAgIHdpZHRoOiAxMnB4OwogICAgaGVpZ2h0OiAxMnB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzUpOwogICAgYmFja2dyb3VuZDogI2ZmMmY1MjsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci1zZWVrOjotbW96LXJhbmdlLXRodW1iIHsKICAgIHdpZHRoOiAxMnB4OwogICAgaGVpZ2h0OiAxMnB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzUpOwogICAgYmFja2dyb3VuZDogI2ZmMmY1MjsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci1idG4gewogICAgd2lkdGg6IDMwcHg7CiAgICBoZWlnaHQ6IDMwcHg7CiAgICBtaW4td2lkdGg6IDMwcHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yMik7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLWJ0biAucGkgewogICAgZm9udC1zaXplOiAxM3B4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSk7Cn0KCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItYnRuLmlzLWRpc2FibGVkLAoubWpyLW1mdi1zaW1wbGUtcGxheWVyLXNlZWsuaXMtZGlzYWJsZWQgewogICAgb3BhY2l0eTogMC40NTsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci10aW1lIHsKICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45Mik7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLWZyYW1lIHsKICAgIG1hcmdpbi1yaWdodDogMnB4OwogICAgcGFkZGluZzogM3B4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGNvbnRhaW5lci10eXBlOiBpbmxpbmUtc2l6ZTsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9scyB7CiAgICB6LWluZGV4OiAzMDsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXSwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSB7CiAgICBsZWZ0OiA4cHg7CiAgICByaWdodDogOHB4OwogICAgYm90dG9tOiA4cHg7CiAgICBwYWRkaW5nOiA4cHg7CiAgICBnYXA6IDZweDsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXSAubWpyLXZpZGVvLXJvdy0tdG9wLAoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0ic3RhY2tlZCJdIC5tanItdmlkZW8tcm93LS10b3AgewogICAgZ2FwOiA4cHg7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0gLm1qci12aWRlby10aW1lZ3JvdXAsCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0gLm1qci12aWRlby10aW1lZ3JvdXAgewogICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgZ2FwOiA2cHg7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0gLm1qci12aWRlby1yb3ctLWJvdHRvbSwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLXJvdy0tYm90dG9tIHsKICAgIGZsZXgtd3JhcDogbm93cmFwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGdhcDogNnB4Owp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0iY29tcGFjdCJdIC5tanItdmlkZW8tYm90dG9tLAoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0ic3RhY2tlZCJdIC5tanItdmlkZW8tYm90dG9tIHsKICAgIGZsZXgtc2hyaW5rOiAxOwogICAgZmxleC13cmFwOiBub3dyYXA7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0gLm1qci12aWRlby10cmFuc3BvcnQsCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0gLm1qci12aWRlby10cmFuc3BvcnQgewogICAgZmxleC13cmFwOiBub3dyYXA7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0gLm1qci12aWRlby1ncm91cCwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLWdyb3VwIHsKICAgIGZsZXgtd3JhcDogbm93cmFwOwp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0iY29tcGFjdCJdIC5tanItdmlkZW8tc2Vlay13cmFwLAoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0ic3RhY2tlZCJdIC5tanItdmlkZW8tc2Vlay13cmFwIHsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXSAubWpyLXZpZGVvLWJhci10aW1lbGluZSwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLWJhci10aW1lbGluZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXSAubWpyLXZpZGVvLWJhci10aW1lbGluZSAubWpyLXZpZGVvLXNlZWstd3JhcCwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLWJhci10aW1lbGluZSAubWpyLXZpZGVvLXNlZWstd3JhcCB7CiAgICBvcmRlcjogLTE7CiAgICBmbGV4OiAxIDEgMTAwJTsKICAgIHdpZHRoOiAxMDAlOwp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0iY29tcGFjdCJdIC5tanItdmlkZW8tYmFyLXRpbWVsaW5lIC5tanItdmlkZW8tZ3JvdXAtLWluLAoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0iY29tcGFjdCJdIC5tanItdmlkZW8tYmFyLXRpbWVsaW5lIC5tanItdmlkZW8tZ3JvdXAtLW91dCwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLWJhci10aW1lbGluZSAubWpyLXZpZGVvLWdyb3VwLS1pbiwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLWJhci10aW1lbGluZSAubWpyLXZpZGVvLWdyb3VwLS1vdXQgewogICAgZmxleDogMCAxIGF1dG87Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0gLm1qci12aWRlby1yYW5nZS1jb3VudCwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXSAubWpyLXZpZGVvLWZyYW1lIHsKICAgIG1pbi13aWR0aDogYXV0bzsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLXJhbmdlLWNvdW50IHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLWZyYW1lIHsKICAgIG1pbi13aWR0aDogYXV0bzsKICAgIHBhZGRpbmc6IDNweCA2cHg7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0gLm1qci12aWRlby1idG4tLWluLAoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0ic3RhY2tlZCJdIC5tanItdmlkZW8tYnRuLS1vdXQsCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0gLm1qci12aWRlby1idG4tLW1hcmsgewogICAgbWluLXdpZHRoOiAzMnB4Owp9CgpAY29udGFpbmVyIChtYXgtd2lkdGg6IDkwMHB4KSB7CiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzIHsKICAgICAgICBsZWZ0OiA4cHg7CiAgICAgICAgcmlnaHQ6IDhweDsKICAgICAgICBib3R0b206IDhweDsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgZ2FwOiA2cHg7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1yb3ctLXRvcCB7CiAgICAgICAgZ2FwOiA4cHg7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby10aW1lZ3JvdXAgewogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgICBnYXA6IDZweDsKICAgIH0KCiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLXJvdy0tYm90dG9tIHsKICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGdhcDogNnB4OwogICAgfQoKICAgIC5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tYm90dG9tIHsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgIH0KCiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLXRyYW5zcG9ydCB7CiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1ncm91cCB7CiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1zZWVrLXdyYXAgewogICAgICAgIG1pbi13aWR0aDogMDsKICAgIH0KCiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1iYXItdGltZWxpbmUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLXRpbWVsaW5lIC5tanItdmlkZW8tc2Vlay13cmFwIHsKICAgICAgICBvcmRlcjogLTE7CiAgICAgICAgZmxleDogMSAxIDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICB9Cn0KCkBjb250YWluZXIgKG1heC13aWR0aDogNjgwcHgpIHsKICAgIC5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHMgewogICAgICAgIHBhZGRpbmc6IDZweDsKICAgIH0KCiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWJ0biB7CiAgICAgICAgcGFkZGluZzogNXB4IDhweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1udW0gewogICAgICAgIHBhZGRpbmc6IDRweCA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgfQoKICAgIC5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tdGltZSwKICAgIC5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tZnJhbWUsCiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLXJhbmdlLWNvdW50IHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICB9Cn0KCi8qIOKUgOKUgCBTZXR0aW5ncyBidXR0b24gYWN0aXZlIHN0YXRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoubWpyLW1mdi1zZXR0aW5ncy1idG4uYWN0aXZlIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpIDU1JSwgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSkpOwogICAgYmFja2dyb3VuZC1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIsICMzMzMpIDcwJSwgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZikgMTglKTsKfQoubWpyLW1mdi1zZXR0aW5ncy1idG4uYWN0aXZlIC5waSB7CiAgICBjb2xvcjogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7Cn0KCi8qIOKUgOKUgCBDbG9zZSBidXR0b24gKHJlZCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5tanItbWZ2IC5tanItbWZ2LWNsb3NlLWJ0biB7CiAgICBjb2xvcjogI2U4NTA1MDsKfQoubWpyLW1mdiAubWpyLW1mdi1jbG9zZS1idG46aG92ZXIgewogICAgY29sb3I6ICNmZjZiNmI7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDIzMiwgODAsIDgwLCAwLjE1KTsKfQoKLyog4pSA4pSAIEVtcHR5IHN0YXRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoubWpyLW1mdi1lbXB0eSB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI1KTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgcGFkZGluZzogMTJweDsKfQoKLyog4pSA4pSAIENvbXBhcmUgbGFiZWxzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoubWpyLW1mdi1sYWJlbCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDhweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC41OCk7CiAgICBjb2xvcjogI2ZmZjsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBwYWRkaW5nOiAycHggN3B4OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAyMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjRweDsKfQoKLm1qci1tZnYtbGFiZWwubGFiZWwtbGVmdCAgeyBsZWZ0OiA4cHg7IH0KLm1qci1tZnYtbGFiZWwubGFiZWwtcmlnaHQgeyByaWdodDogOHB4OyB9CgovKiDilIDilIAgQUIgZGl2aWRlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLm1qci1tZnYtYWItZGl2aWRlciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDA7CiAgICBib3R0b206IDA7CiAgICB3aWR0aDogMC41cHg7CiAgICBjdXJzb3I6IGNvbC1yZXNpemU7CiAgICB6LWluZGV4OiAxMDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44OCk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAwLjVweCByZ2JhKDAsIDAsIDAsIDAuNCksIDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuNCk7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDEwMG1zIGVhc2U7Cn0KCi5tanItbWZ2LWFiLWRpdmlkZXI6OmJlZm9yZSB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMDsKICAgIGJvdHRvbTogMDsKICAgIGxlZnQ6IDUwJTsKICAgIHdpZHRoOiAxMnB4OwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwp9CgoubWpyLW1mdi1hYi1kaXZpZGVyOmhvdmVyLAoubWpyLW1mdi1hYi1kaXZpZGVyOmFjdGl2ZSB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKfQoKLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCiAgIE1GViBHZW9tZXRyeSAmIExheW91dCBDbGFzc2VzIChyZXBsYWNlcyBpbmxpbmUgc3R5bGVzIGluIEZsb2F0aW5nVmlld2VyLmpzKQogICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi8KCi8qIE1haW4gTUZWIGNvbnRhaW5lciBnZW9tZXRyeSAqLwoubWpyLW1mdiB7CiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICB0b3A6IHZhcigtLW1qci1tZnYtdG9wLW9mZnNldCwgNjBweCk7CiAgICByaWdodDogMjBweDsKICAgIHdpZHRoOiA2NDBweDsKICAgIGhlaWdodDogMzYwcHg7CiAgICBtaW4td2lkdGg6IDIyMHB4OwogICAgbWluLWhlaWdodDogMTYwcHg7CiAgICAvKiBBbHdheXMgZmxleDsgdmlzaWJpbGl0eSArIG9wYWNpdHkgY29udHJvbCBzaG93L2hpZGUgc28gQ1NTIHRyYW5zaXRpb25zIHdvcmsuCiAgICAgICBwb2ludGVyLWV2ZW50czpub25lIHdoaWxlIGhpZGRlbiBwcmV2ZW50cyBhY2NpZGVudGFsIGludGVyYWN0aW9uLiAqLwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICByZXNpemU6IGJvdGg7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgei1pbmRleDogMTAwMDA7CiAgICAvKiBIaWRkZW4gc3RhdGUgKi8KICAgIG9wYWNpdHk6IDA7CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNnB4KSBzY2FsZSgwLjk4KTsKICAgIHRyYW5zZm9ybS1vcmlnaW46IHRvcCByaWdodDsKICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xOHMgZWFzZS1vdXQsCiAgICAgICAgICAgICAgICB0cmFuc2Zvcm0gMC4xOHMgZWFzZS1vdXQsCiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5IDBzIGxpbmVhciAwLjE4czsKfQoKLm1qci1tZnYubWpyLW1mdi0tcmVzaXppbmcgewogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItbWZ2LmlzLXZpc2libGUgewogICAgb3BhY2l0eTogMTsKICAgIHZpc2liaWxpdHk6IHZpc2libGU7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKSBzY2FsZSgxKTsKICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xOHMgZWFzZS1vdXQsCiAgICAgICAgICAgICAgICB0cmFuc2Zvcm0gMC4xOHMgZWFzZS1vdXQsCiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5IDBzIGxpbmVhciAwczsKfQoKCi8qIE1lZGlhIGVsZW1lbnRzIChpbWcvdmlkZW8pIHNpemluZyB2YXJpYW50cyAqLwoubWpyLW1mdi1tZWRpYSB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgbWF4LXdpZHRoOiAxMDAlOwogICAgbWF4LWhlaWdodDogMTAwJTsKICAgIG9iamVjdC1maXQ6IGNvbnRhaW47CiAgICBvYmplY3QtcG9zaXRpb246IGNlbnRlcjsKfQoKLm1qci1tZnYtbWVkaWEtLWZpdC1oZWlnaHQgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBtYXgtaGVpZ2h0OiAxMDAlOwogICAgb2JqZWN0LWZpdDogY29udGFpbjsKICAgIG9iamVjdC1wb3NpdGlvbjogY2VudGVyOwp9CgoubWpyLW1mdi1tZWRpYS0tZmlsbCB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIG1heC1oZWlnaHQ6IDEwMCU7CiAgICBvYmplY3QtZml0OiBjb250YWluOwogICAgb2JqZWN0LXBvc2l0aW9uOiBjZW50ZXI7CiAgICBkaXNwbGF5OiBibG9jazsKfQoKLyogQXVkaW8gY2FyZCBpbnNpZGUgTUZWICovCi5tanItbWZ2LWF1ZGlvLWNhcmQgewogICAgd2lkdGg6IG1pbig5MiUsIDU2MHB4KTsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAxMHB4OwogICAgcGFkZGluZzogMTJweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE2MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAyKSk7CiAgICBib3gtc2hhZG93OiAwIDZweCAxNnB4IHJnYmEoMCwgMCwgMCwgMC4zNSk7Cn0KCi5tanItbWZ2LWF1ZGlvLWhlYWQgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1tZnYtYXVkaW8taWNvbiB7CiAgICBjb2xvcjogdmFyKC0tbWpyLWJhZGdlLWF1ZGlvLCAjRkY5ODAwKTsKICAgIG9wYWNpdHk6IDAuOTU7Cn0KCi5tanItbWZ2LWF1ZGlvLXRpdGxlIHsKICAgIG1pbi13aWR0aDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwp9CgoubWpyLW1mdi1hdWRpby1wbGF5ZXIgewogICAgd2lkdGg6IDEwMCU7Cn0KCi5tanItbWZ2LXNpZGUtcGFuZWwgLm1qci1tZnYtYXVkaW8tY2FyZCwKLm1qci1tZnYtYWItbGF5ZXIgLm1qci1tZnYtYXVkaW8tY2FyZCwKLm1qci1tZnYtZ3JpZC1jZWxsIC5tanItbWZ2LWF1ZGlvLWNhcmQgewogICAgd2lkdGg6IGNhbGMoMTAwJSAtIDIwcHgpOwp9CgovKiBWaWRlbyBlbGVtZW50IHNwZWNpZmljIHN0eWxlcyAqLwoubWpyLW1mdi1tZWRpYS12aWRlbyB7CiAgICAvKiBJbmhlcml0cyBmcm9tIC5tanItbWZ2LW1lZGlhIG9yIC5tanItbWZ2LW1lZGlhLS1maWxsICovCn0KCi8qIEdlbiBpbmZvIG92ZXJsYXkg4oCUIGFsbCBtb2RlcyBzaGFyZSBiYXNlIGxheW91dCAqLwoubWpyLW1mdi1nZW5pbmZvLAoubWpyLW1mdi1nZW5pbmZvLWEsCi5tanItbWZ2LWdlbmluZm8tYiB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiA4cHg7CiAgICByaWdodDogOHB4OwogICAgYm90dG9tOiA4cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNjUpOwogICAgY29sb3I6ICNmZmY7CiAgICBwYWRkaW5nOiA4cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIG1heC1oZWlnaHQ6IDQwJTsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yLXk6IGNvbnRhaW47CiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICB0b3VjaC1hY3Rpb246IHBhbi15OwogICAgd29yZC1icmVhazogYnJlYWstd29yZDsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjQpOwp9CgovKiBLZWVwIEdlbiBJbmZvIGFib3ZlIGN1c3RvbSBzaW1wbGUtcGxheWVyIGNvbnRyb2xzIHdoZW4gcHJlc2VudC4gKi8KLm1qci1tZnYtZ2VuaW5mby5tanItbWZ2LWdlbmluZm8tLWFib3ZlLXBsYXllciwKLm1qci1tZnYtZ2VuaW5mby1hLm1qci1tZnYtZ2VuaW5mby0tYWJvdmUtcGxheWVyLAoubWpyLW1mdi1nZW5pbmZvLWIubWpyLW1mdi1nZW5pbmZvLS1hYm92ZS1wbGF5ZXIgewogICAgdG9wOiA4cHg7CiAgICBib3R0b206IGF1dG87CiAgICBtYXgtaGVpZ2h0OiBtaW4oNDUlLCBjYWxjKDEwMCUgLSAxMjRweCkpOwp9CgovKiBGYWxsYmFjazogd2hlbiBzaW1wbGUtcGxheWVyIGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IGEgZ2VuaW5mbyBvdmVybGF5LAogICBtb3ZlIGl0IHVwIGV2ZW4gaWYgdGhlIG1vZGlmaWVyIGNsYXNzIHdhcyBub3QgYXR0YWNoZWQuICovCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXIgKyAubWpyLW1mdi1nZW5pbmZvLAoubWpyLW1mdi1zaW1wbGUtcGxheWVyICsgLm1qci1tZnYtZ2VuaW5mby1hLAoubWpyLW1mdi1zaW1wbGUtcGxheWVyICsgLm1qci1tZnYtZ2VuaW5mby1iIHsKICAgIHRvcDogOHB4OwogICAgYm90dG9tOiBhdXRvOwogICAgbWF4LWhlaWdodDogbWluKDQ1JSwgY2FsYygxMDAlIC0gMTI0cHgpKTsKfQoKLyogQUIgbW9kZSBvdmVybGF5cyBhcmUgYXR0YWNoZWQgYXQgY29udGFpbmVyIGxldmVsOyBzaGlmdCB0aGVtIHdoZW4gQUIgbGF5ZXJzIHVzZSBzaW1wbGUtcGxheWVyLiAqLwoubWpyLW1mdi1hYi1jb250YWluZXI6aGFzKC5tanItbWZ2LWFiLWxheWVyIC5tanItbWZ2LXNpbXBsZS1wbGF5ZXIpIC5tanItbWZ2LWdlbmluZm8tYSwKLm1qci1tZnYtYWItY29udGFpbmVyOmhhcygubWpyLW1mdi1hYi1sYXllciAubWpyLW1mdi1zaW1wbGUtcGxheWVyKSAubWpyLW1mdi1nZW5pbmZvLWIgewogICAgdG9wOiA4cHg7CiAgICBib3R0b206IGF1dG87CiAgICBtYXgtaGVpZ2h0OiBtaW4oNDUlLCBjYWxjKDEwMCUgLSAxMjRweCkpOwp9CgovKiBTaGFyZWQgc3R5bGUgZm9yIGFsbCBnZW4gaW5mbyBvdmVybGF5IHZhcmlhbnRzICovCi5tanItbWZ2LWdlbmluZm8gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWEgc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgc3Ryb25nIHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBtYXJnaW4tcmlnaHQ6IDRweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpOyAvKiBkZWZhdWx0IOKAlCBvdmVycmlkZGVuIHBlciBmaWVsZCBiZWxvdyAqLwp9CgovKiBQZXItZmllbGQgbGFiZWwgY29sb3JzICovCi5tanItbWZ2LWdlbmluZm8gW2RhdGEtZmllbGQ9InByb21wdCJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1hIFtkYXRhLWZpZWxkPSJwcm9tcHQiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYiBbZGF0YS1maWVsZD0icHJvbXB0Il0gc3Ryb25nIHsgY29sb3I6ICM3ZWM4ZmY7IH0gLyogYmx1ZSAgIOKAlCBQcm9tcHQgKi8KCi5tanItbWZ2LWdlbmluZm8gW2RhdGEtZmllbGQ9InNlZWQiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYSBbZGF0YS1maWVsZD0ic2VlZCJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1iIFtkYXRhLWZpZWxkPSJzZWVkIl0gc3Ryb25nICAgeyBjb2xvcjogI2ZmZDQ3YTsgfSAvKiBhbWJlciAg4oCUIFNlZWQgICAqLwoKLm1qci1tZnYtZ2VuaW5mbyBbZGF0YS1maWVsZD0ibW9kZWwiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYSBbZGF0YS1maWVsZD0ibW9kZWwiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYiBbZGF0YS1maWVsZD0ibW9kZWwiXSBzdHJvbmcgIHsgY29sb3I6ICM3ZGRhOGE7IH0gLyogZ3JlZW4gIOKAlCBNb2RlbCAgKi8KCi5tanItbWZ2LWdlbmluZm8gW2RhdGEtZmllbGQ9ImxvcmEiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYSBbZGF0YS1maWVsZD0ibG9yYSJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1iIFtkYXRhLWZpZWxkPSJsb3JhIl0gc3Ryb25nICAgeyBjb2xvcjogI2Q0OGNmZjsgfSAvKiB2aW9sZXQg4oCUIExvUkEgICAqLwoKLm1qci1tZnYtZ2VuaW5mbyBbZGF0YS1maWVsZD0ic2FtcGxlciJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1hIFtkYXRhLWZpZWxkPSJzYW1wbGVyIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgW2RhdGEtZmllbGQ9InNhbXBsZXIiXSBzdHJvbmcgeyBjb2xvcjogI2ZmOWY3YTsgfSAvKiBvcmFuZ2Ug4oCUIFNhbXBsZXIgKi8KCi5tanItbWZ2LWdlbmluZm8gW2RhdGEtZmllbGQ9InNjaGVkdWxlciJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1hIFtkYXRhLWZpZWxkPSJzY2hlZHVsZXIiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYiBbZGF0YS1maWVsZD0ic2NoZWR1bGVyIl0gc3Ryb25nIHsgY29sb3I6ICNmZjdhOWY7IH0gLyogcGluayAgIOKAlCBTY2hlZHVsZXIgKi8KCi5tanItbWZ2LWdlbmluZm8gW2RhdGEtZmllbGQ9ImNmZyJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1hIFtkYXRhLWZpZWxkPSJjZmciXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYiBbZGF0YS1maWVsZD0iY2ZnIl0gc3Ryb25nICAgIHsgY29sb3I6ICM3YTlmZmY7IH0gLyogaW5kaWdvIOKAlCBDRkcgKi8KCi5tanItbWZ2LWdlbmluZm8gW2RhdGEtZmllbGQ9InN0ZXAiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYSBbZGF0YS1maWVsZD0ic3RlcCJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1iIFtkYXRhLWZpZWxkPSJzdGVwIl0gc3Ryb25nICAgeyBjb2xvcjogIzdhZmZkNDsgfSAvKiB0ZWFsICAg4oCUIFN0ZXAgKi8KCi5tanItbWZ2LWdlbmluZm8gW2RhdGEtZmllbGQ9ImdlblRpbWUiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYSBbZGF0YS1maWVsZD0iZ2VuVGltZSJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1iIFtkYXRhLWZpZWxkPSJnZW5UaW1lIl0gc3Ryb25nIHsgY29sb3I6ICNlMGZmN2E7IH0gLyogbGltZSAgIOKAlCBHZW4gVGltZSAqLwoKLm1qci1tZnYtZ2VuaW5mbyBkaXYsCi5tanItbWZ2LWdlbmluZm8tYSBkaXYsCi5tanItbWZ2LWdlbmluZm8tYiBkaXYgewogICAgbGluZS1oZWlnaHQ6IDEuMzU7CiAgICBtYXJnaW4tYm90dG9tOiAzcHg7Cn0KCi5tanItbWZ2LWdlbmluZm8gZGl2Omxhc3QtY2hpbGQsCi5tanItbWZ2LWdlbmluZm8tYSBkaXY6bGFzdC1jaGlsZCwKLm1qci1tZnYtZ2VuaW5mby1iIGRpdjpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1ib3R0b206IDA7Cn0KCgovKiBTaW1wbGUgbW9kZSBjb250YWluZXIgKi8KLm1qci1tZnYtc2ltcGxlLWNvbnRhaW5lciB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgovKiBBQiBtb2RlIGNvbnRhaW5lciAqLwoubWpyLW1mdi1hYi1jb250YWluZXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYmFja2dyb3VuZDogIzAwMDsKfQoKLyogQUIgbW9kZSBsYXllcnMgKi8KLm1qci1tZnYtYWItbGF5ZXIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwp9CgoubWpyLW1mdi1hYi1sYXllci0tYiB7CiAgICAvKiBjbGlwLXBhdGggYXBwbGllZCBpbmxpbmUgZm9yIGR5bmFtaWMgZGl2aWRlciBwb3NpdGlvbiAqLwp9CgovKiBTaWRlLWJ5LXNpZGUgbW9kZSBjb250YWluZXIgKi8KLm1qci1tZnYtc2lkZS1jb250YWluZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgZ2FwOiAycHg7CiAgICBiYWNrZ3JvdW5kOiAjMTExOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLyogU2lkZS1ieS1zaWRlIGhhbGYgcGFuZWxzICovCi5tanItbWZ2LXNpZGUtcGFuZWwgewogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgYmFja2dyb3VuZDogIzBkMGQwZDsKfQoKLyogR3JpZCBjb21wYXJlICgyw5cyKSBjb250YWluZXIgKi8KLm1qci1tZnYtZ3JpZC1jb250YWluZXIgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsKICAgIGdyaWQtdGVtcGxhdGUtcm93czogMWZyIDFmcjsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgZ2FwOiAycHg7CiAgICBiYWNrZ3JvdW5kOiAjMTExOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLyogR3JpZCBjZWxscyAqLwoubWpyLW1mdi1ncmlkLWNlbGwgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBiYWNrZ3JvdW5kOiAjMGQwZDBkOwogICAgbWluLXdpZHRoOiAwOwogICAgbWluLWhlaWdodDogMDsKfQoKLyogR2VuIGluZm8gb3ZlcmxheXMgZm9yIGdyaWQgY2VsbHMgQyBhbmQgRCAqLwoubWpyLW1mdi1nZW5pbmZvLWMsCi5tanItbWZ2LWdlbmluZm8tZCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiA4cHg7CiAgICByaWdodDogOHB4OwogICAgYm90dG9tOiA4cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNjUpOwogICAgY29sb3I6ICNmZmY7CiAgICBwYWRkaW5nOiA4cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIG1heC1oZWlnaHQ6IDQwJTsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yLXk6IGNvbnRhaW47CiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICB0b3VjaC1hY3Rpb246IHBhbi15OwogICAgd29yZC1icmVhazogYnJlYWstd29yZDsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjQpOwp9CgoubWpyLW1mdi1nZW5pbmZvLWMgc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgc3Ryb25nIHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBtYXJnaW4tcmlnaHQ6IDRweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpOwp9CgovKiBQZXItZmllbGQgbGFiZWwgY29sb3JzIGZvciBDL0QgZ2VuIGluZm8gb3ZlcmxheXMgKi8KLm1qci1tZnYtZ2VuaW5mby1jIFtkYXRhLWZpZWxkPSJwcm9tcHQiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tZCBbZGF0YS1maWVsZD0icHJvbXB0Il0gc3Ryb25nIHsgY29sb3I6ICM3ZWM4ZmY7IH0KLm1qci1tZnYtZ2VuaW5mby1jIFtkYXRhLWZpZWxkPSJzZWVkIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgW2RhdGEtZmllbGQ9InNlZWQiXSBzdHJvbmcgICB7IGNvbG9yOiAjZmZkNDdhOyB9Ci5tanItbWZ2LWdlbmluZm8tYyBbZGF0YS1maWVsZD0ibW9kZWwiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tZCBbZGF0YS1maWVsZD0ibW9kZWwiXSBzdHJvbmcgIHsgY29sb3I6ICM3ZGRhOGE7IH0KLm1qci1tZnYtZ2VuaW5mby1jIFtkYXRhLWZpZWxkPSJsb3JhIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgW2RhdGEtZmllbGQ9ImxvcmEiXSBzdHJvbmcgICB7IGNvbG9yOiAjZDQ4Y2ZmOyB9Ci5tanItbWZ2LWdlbmluZm8tYyBbZGF0YS1maWVsZD0ic2FtcGxlciJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1kIFtkYXRhLWZpZWxkPSJzYW1wbGVyIl0gc3Ryb25nIHsgY29sb3I6ICNmZjlmN2E7IH0KLm1qci1tZnYtZ2VuaW5mby1jIFtkYXRhLWZpZWxkPSJzY2hlZHVsZXIiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tZCBbZGF0YS1maWVsZD0ic2NoZWR1bGVyIl0gc3Ryb25nIHsgY29sb3I6ICNmZjdhOWY7IH0KLm1qci1tZnYtZ2VuaW5mby1jIFtkYXRhLWZpZWxkPSJjZmciXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tZCBbZGF0YS1maWVsZD0iY2ZnIl0gc3Ryb25nICAgICB7IGNvbG9yOiAjN2E5ZmZmOyB9Ci5tanItbWZ2LWdlbmluZm8tYyBbZGF0YS1maWVsZD0ic3RlcCJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1kIFtkYXRhLWZpZWxkPSJzdGVwIl0gc3Ryb25nICAgIHsgY29sb3I6ICM3YWZmZDQ7IH0KCi8qIEdlbiBpbmZvIGFjdGl2ZSBzdGF0ZSDigJQgYnV0dG9uIGdsb3dzIHdoZW4gYXQgbGVhc3Qgb25lIGZpZWxkIGlzIHNlbGVjdGVkICovCi5tanItbWZ2IC5tanItaWNvbi1idG4uaXMtb24gewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKHZhcigtLW1qci1ncm91cC1hY2NlbnQsIDk1LCAxNzksIDI1NSksIDAuNTUpOwogICAgY29sb3I6IHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIsICMzMzMpIDgwJSwgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZikgMTUlKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZikgMjUlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWZ2IC5tanItaWNvbi1idG4uaXMtb3BlbiB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKSA2MiUsICNmZmZmZmYgMTIlKTsKICAgIGNvbG9yOiAjZWVmN2ZmOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSg5NSwgMTc5LCAyNTUsIDAuMjgpLCByZ2JhKDk1LCAxNzksIDI1NSwgMC4xNCkpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDAgMCAxcHggcmdiYSgyNTUsMjU1LDI1NSwwLjA4KSwKICAgICAgICAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpIDI2JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1pY29uLWJ0bi5pcy1vcGVuIHsKICAgIGNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7Cn0KCi8qIEdlbiBpbmZvIGRyb3Bkb3duIHBhbmVsICovCi5tanItbWZ2LWdlbi1kcm9wZG93biB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB6LWluZGV4OiAxMDAwMTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xLCAjMmEyYTJhKSA5NiUsIHRyYW5zcGFyZW50KTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIHBhZGRpbmc6IDZweCA0cHg7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMTgpOwogICAgYm94LXNoYWRvdzogMCA4cHggMjRweCByZ2JhKDAsIDAsIDAsIDAuNTUpLCAwIDJweCA2cHggcmdiYSgwLCAwLCAwLCAwLjMpOwogICAgZGlzcGxheTogbm9uZTsKICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoOHB4KTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDhweCk7Cn0KCi5tanItbWZ2LWdlbi1kcm9wZG93bjo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICJHRU4gSU5GTyI7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGZvbnQtc2l6ZTogOXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjhweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzUpOwogICAgcGFkZGluZzogMnB4IDEwcHggNnB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMTk2LCAyMDIsIDIxMCwgMC4xKTsKICAgIG1hcmdpbi1ib3R0b206IDRweDsKfQoKLm1qci1tZnYtZ2VuLWRyb3Bkb3duLmlzLXZpc2libGUgewogICAgZGlzcGxheTogYmxvY2s7Cn0KCi5tanItbWZ2LWdlbi1kcm9wZG93bi1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIHBhZGRpbmc6IDVweCAxMHB4OwogICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAxMDBtcyBlYXNlOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItbWZ2LWdlbi1kcm9wZG93bi1yb3c6aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA3KTsKfQoKLm1qci1tZnYtZ2VuLWRyb3Bkb3duLXJvdyBpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsKICAgIHdpZHRoOiAxM3B4OwogICAgaGVpZ2h0OiAxM3B4OwogICAgYWNjZW50LWNvbG9yOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZsZXgtc2hyaW5rOiAwOwp9CgovKiBUcmFuc2Zvcm0gZm9yIHBhbi96b29tIC0gYXBwbGllZCBpbmxpbmUgZm9yIGR5bmFtaWMgdmFsdWVzICovCi5tanItbWZ2LW1lZGlhLS10cmFuc2Zvcm0gewogICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyOwp9CgovKiBDdXJzb3IgZmVlZGJhY2sgZm9yIHBhbi96b29tIGludGVyYWN0aW9ucyAqLwoubWpyLW1mdi1jb250ZW50LS1ncmFiIHsKICAgIGN1cnNvcjogZ3JhYjsKfQoKLm1qci1tZnYtY29udGVudC0tZ3JhYmJpbmcgewogICAgY3Vyc29yOiBncmFiYmluZzsKfQoKLyogU2lkZWJhciB0YWIgYnV0dG9uOiBhbGxvdyAyLWxpbmUgbGFiZWwgdmlhIFxuIGluIGxhYmVsIHN0cmluZyAqLwoubWFqb29yLWFzc2V0cy10YWItYnV0dG9uIC5zaWRlLWJhci1idXR0b24tbGFiZWwgewogICAgd2hpdGUtc3BhY2U6IHByZS1saW5lOwp9CgovKiBCb3R0b20tcGFuZWwgZ2VuZXJhdGVkIGZlZWQ6IGNvbXBhY3QgY2FyZHMgd2l0aCBvbmx5IHRoZSBnZW5lcmF0aW9uLXRpbWUgcGlsbCAqLwoubWpyLWJvdHRvbS1mZWVkIHsKICAgIG1pbi1oZWlnaHQ6IDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItYW0tZ3JpZC1zY3JvbGwgewogICAgZmxleDogMSAxIGF1dG87CiAgICBtaW4taGVpZ2h0OiAwOwogICAgaGVpZ2h0OiAxMDAlOwogICAgb3ZlcmZsb3c6IGF1dG87CiAgICBzY3JvbGxiYXItZ3V0dGVyOiBzdGFibGU7CiAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yLXk6IGNvbnRhaW47CiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICB0b3VjaC1hY3Rpb246IHBhbi15OwogICAgc2Nyb2xsLWJlaGF2aW9yOiBzbW9vdGg7CiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47CiAgICBzY3JvbGxiYXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yLCAjMmYzNTQwKSA3MCUsICM3ZjhlYTMgMzAlKSBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCwgIzE2MTkxZikgODglLCAjMDAwIDEyJSk7Cn0KCi5tanItYm90dG9tLWZlZWQgLm1qci1hbS1ncmlkLXNjcm9sbDo6LXdlYmtpdC1zY3JvbGxiYXIsCi5tanItZmVlZC1ncm91cC1wb3BvdmVyLWdyaWQ6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIHdpZHRoOiAxMHB4OwogICAgaGVpZ2h0OiAxMHB4Owp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItYW0tZ3JpZC1zY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iLAoubWpyLWZlZWQtZ3JvdXAtcG9wb3Zlci1ncmlkOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMiwgIzJmMzU0MCkgNzAlLCAjN2Y4ZWEzIDMwJSk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMnB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWFtLWdyaWQtc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhci10cmFjaywKLm1qci1mZWVkLWdyb3VwLXBvcG92ZXItZ3JpZDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTAsICMxNjE5MWYpIDg4JSwgIzAwMCAxMiUpOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7Cn0KCi5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkIHsKICAgIGdhcDogNnB4ICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heChtaW4oMTAwJSwgMTMycHgpLCAxZnIpKSAhaW1wb3J0YW50OwogICAgbWluLWhlaWdodDogMDsKICAgIGhlaWdodDogYXV0bzsKICAgIGFsaWduLWNvbnRlbnQ6IHN0YXJ0Owp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZCwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmQgewogICAgYm9yZGVyLXJhZGl1czogMTJweCAhaW1wb3J0YW50OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA5MiUsICMwMDAgOCUpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4yMikgIWltcG9ydGFudDsKICAgIHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50Owp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZDpob3ZlciwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmQ6aG92ZXIgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiAwIDEwcHggMjRweCByZ2JhKDAsIDAsIDAsIDAuMjgpICFpbXBvcnRhbnQ7CgoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZC5pcy1zZWxlY3RlZCB7CiAgICBib3gtc2hhZG93OgogICAgICAgIDAgMCAwIDNweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKSA4MCUsIHZhcigtLWNvbnRlbnQtZmcpKSwKICAgICAgICAwIDAgMCA2cHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1jYXJkLXNlbGVjdGlvbi1jb2xvcikgMzAlLCB0cmFuc3BhcmVudCksCiAgICAgICAgMCAwIDIwcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1jYXJkLXNlbGVjdGlvbi1jb2xvcikgNDAlLCB0cmFuc3BhcmVudCksCiAgICAgICAgMCAxMHB4IDI4cHggcmdiYSgwLDAsMCwwLjI4KSAhaW1wb3J0YW50OwogICAgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLW1qci1jYXJkLXNlbGVjdGlvbi1jb2xvcikgIWltcG9ydGFudDsKICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7Cn0KfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gewogICAgb3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIC5tanItdGh1bWIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iIHsKICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7CiAgICBpc29sYXRpb246IGlzb2xhdGU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iOjpiZWZvcmUsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iOjphZnRlciwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIC5tanItdGh1bWI6OmJlZm9yZSwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIC5tanItdGh1bWI6OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAtMTsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAxNDBtcyBlYXNlLCBvcGFjaXR5IDE0MG1zIGVhc2U7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iOjpiZWZvcmUsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iOjpiZWZvcmUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoNXB4LCA1cHgpIHNjYWxlKDAuOTg1KTsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEwKSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzKSksCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEsICMyMDI0MmIpIDg0JSwgIzAwMCAxNiUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjE2KTsKICAgIG9wYWNpdHk6IDAuOTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIC5tanItdGh1bWI6OmFmdGVyLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci10aHVtYjo6YWZ0ZXIgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTBweCwgMTBweCkgc2NhbGUoMC45Nyk7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNiksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMikpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wLCAjMTYxOTFmKSA4MiUsICMwMDAgMTglKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7CiAgICBib3gtc2hhZG93OiAwIDEycHggMjJweCByZ2JhKDAsIDAsIDAsIDAuMTQpOwogICAgb3BhY2l0eTogMC43NTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOmhvdmVyIC5tanItdGh1bWI6OmJlZm9yZSwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOmhvdmVyIC5tanItdGh1bWI6OmJlZm9yZSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg2cHgsIDZweCkgc2NhbGUoMC45ODUpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl06aG92ZXIgLm1qci10aHVtYjo6YWZ0ZXIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTpob3ZlciAubWpyLXRodW1iOjphZnRlciB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMnB4LCAxMnB4KSBzY2FsZSgwLjk3KTsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLXRodW1iIHsKICAgIGFzcGVjdC1yYXRpbzogMC45NSAvIDEgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA3MiUsICMwMDAgMjglKSAhaW1wb3J0YW50Owp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItdGh1bWItcGxheSB7CiAgICBiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IGNlbnRlciwgcmdiYSgwLCAwLCAwLCAwLjE4KSwgcmdiYSgwLCAwLCAwLCAwLjA0KSAzOCUsIHRyYW5zcGFyZW50IDcwJSk7Cn0KCi5tanItYm90dG9tLWZlZWQgLm1qci1iYWRnZS1leHQsCi5tanItYm90dG9tLWZlZWQgLm1qci1iYWRnZS1yYXRpbmcsCi5tanItYm90dG9tLWZlZWQgLm1qci1iYWRnZS10YWdzIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC45Mik7CiAgICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgbGVmdDsKfQoKLyog4pSA4pSAIEZlZWQgY2FyZCBpbmZvOiBkZWZhdWx0IGhpZGRlbiwgdG9nZ2xlZCB2aWEgbWpyLWZlZWQtc2hvdy0qIGNsYXNzZXMgb24gLm1qci1ncmlkIOKUgOKUgCAqLwoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZC1pbmZvIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDRweCA2cHggIWltcG9ydGFudDsKICAgIG1pbi13aWR0aDogMDsKfQoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZC5tanItZmVlZC1zaG93LWluZm8gLm1qci1jYXJkLWluZm8gewogICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKfQoKLyogRmVlZCBmaWxlbmFtZSAqLwoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZC1maWxlbmFtZSB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfQoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZC5tanItZmVlZC1zaG93LWZpbGVuYW1lIC5tanItY2FyZC1maWxlbmFtZSB7IGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7IH0KCi8qIEZlZWQgZGltZW5zaW9ucyAvIGR1cmF0aW9uICovCi5tanItYm90dG9tLWZlZWQgLm1qci1tZXRhLXJlcywKLm1qci1ib3R0b20tZmVlZCAubWpyLW1ldGEtZHVyYXRpb24geyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1kaW1lbnNpb25zIC5tanItbWV0YS1yZXMsCi5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctZGltZW5zaW9ucyAubWpyLW1ldGEtZHVyYXRpb24geyBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDsgfQoKLyogRmVlZCBkYXRlL3RpbWUgKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLW1ldGEtZGF0ZSwKLm1qci1ib3R0b20tZmVlZCAubWpyLW1ldGEtdGltZS12YWwgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1kYXRlIC5tanItbWV0YS1kYXRlLAoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZC5tanItZmVlZC1zaG93LWRhdGUgLm1qci1tZXRhLXRpbWUtdmFsIHsgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7IH0KCi8qIEZlZWQgZ2VuZXJhdGlvbiB0aW1lIGJhZGdlICovCi5tanItYm90dG9tLWZlZWQgLm1qci1tZXRhLWdlbnRpbWUgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1nZW50aW1lIC5tanItbWV0YS1nZW50aW1lIHsgZGlzcGxheTogaW5saW5lLWZsZXggIWltcG9ydGFudDsgfQoKLyogRmVlZCB3b3JrZmxvdyBkb3QgKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLWNhcmQtZG90LXdyYXBwZXIgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1kb3QgLm1qci1jYXJkLWRvdC13cmFwcGVyIHsgZGlzcGxheTogaW5saW5lLWZsZXggIWltcG9ydGFudDsgfQoKLyogRmVlZCBiYWRnZXMgKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLWJhZGdlLWV4dCB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfQoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZC5tanItZmVlZC1zaG93LWJhZGdlcy1leHQgLm1qci1iYWRnZS1leHQgeyBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7IH0KCi5tanItYm90dG9tLWZlZWQgLm1qci1iYWRnZS1yYXRpbmcgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1iYWRnZXMtcmF0aW5nIC5tanItYmFkZ2UtcmF0aW5nIHsgZGlzcGxheTogZmxleCAhaW1wb3J0YW50OyB9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItYmFkZ2UtdGFncyB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfQoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZC5tanItZmVlZC1zaG93LWJhZGdlcy10YWdzIC5tanItYmFkZ2UtdGFncyB7IGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsgfQoKLyogRmVlZCBtZXRhIHJvdyBzdHlsaW5nIOKAlCBmbGV4IGxheW91dCBzbyB2aXNpYmxlIGl0ZW1zIHN0YXkgc2VwYXJhdGVkICovCi5tanItYm90dG9tLWZlZWQgLm1qci1jYXJkLW1ldGEtcm93IHsKICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsKICAgIGZsZXgtd3JhcDogbm93cmFwICFpbXBvcnRhbnQ7CiAgICBhbGlnbi1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7CiAgICBnYXA6IDVweCAhaW1wb3J0YW50OwogICAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50OwogICAgbWluLXdpZHRoOiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nLXJpZ2h0OiAwICFpbXBvcnRhbnQ7CiAgICBsaW5lLWhlaWdodDogMS4zICFpbXBvcnRhbnQ7CiAgICBvcGFjaXR5OiAwLjc4ICFpbXBvcnRhbnQ7CiAgICBmb250LXNpemU6IDAuOGVtICFpbXBvcnRhbnQ7CiAgICAvKiB0ZXh0LW92ZXJmbG93IGVsbGlwc2lzIGRvZXNuJ3QgYXBwbHkgb24gYSBmbGV4IGNvbnRhaW5lciBpdHNlbGYgKi8KfQovKiBFYWNoIG1ldGEgc3BhbiB0cnVuY2F0ZXMgaW5kaXZpZHVhbGx5IGlmIHRvbyBsb25nICovCi5tanItYm90dG9tLWZlZWQgLm1qci1jYXJkLW1ldGEtcm93ID4gc3BhbiB7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgbWluLXdpZHRoOiAwOwogICAgZmxleC1zaHJpbms6IDE7Cn0KLyogR2VudGltZSBiYWRnZSBhbmQgdGltZSB2YWx1ZSBzaG91bGQgc3RheSB2aXNpYmxlIChkb24ndCBzaHJpbmsgYXdheSkgKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLWNhcmQtbWV0YS1yb3cgPiAubWpyLW1ldGEtZ2VudGltZSwKLm1qci1ib3R0b20tZmVlZCAubWpyLWNhcmQtbWV0YS1yb3cgPiAubWpyLW1ldGEtdGltZS12YWwgewogICAgZmxleC1zaHJpbms6IDA7Cn0KCi5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctZ2VudGltZSAubWpyLW1ldGEtZ2VudGltZSB7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAzcHg7CiAgICBwYWRkaW5nOiAzcHggN3B4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDEwLCAxNCwgMjAsIDAuNzQpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMjIpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDgwMCAhaW1wb3J0YW50OwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDE1ZW07CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk4KTsKICAgIHRleHQtc2hhZG93OgogICAgICAgIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuOSksCiAgICAgICAgMCAwIDEwcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKfQoKLyog4pSA4pSAIEF1ZGlvIC8gM0QgcGxhY2Vob2xkZXIgdGh1bWJuYWlscyBpbiB0aGUgZmVlZCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCi8qIEF1ZGlvIGNhcmRzIHNob3cgdGhlIHdhdmVmb3JtIHNwcml0ZTsgZ2l2ZSBpdCBhIGRpc3RpbmN0IGJhY2tncm91bmQgc28gaXQKICAgZG9lc24ndCBsb29rIGxpa2UgYSBicm9rZW4gaW1hZ2UgcGxhY2Vob2xkZXIgaW4gdGhlIGZlZWQuICovCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWtpbmQ9ImF1ZGlvIl0gLm1qci10aHVtYiwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZXh0PSJtcDMiXSAubWpyLXRodW1iLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1leHQ9IndhdiJdIC5tanItdGh1bWIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWV4dD0ib2dnIl0gLm1qci10aHVtYiwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZXh0PSJmbGFjIl0gLm1qci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgNjAlLCAjMWExZjJiIDQwJSkgIWltcG9ydGFudDsKfQoKLyogM0QgbW9kZWwgY2FyZHMgdXNlIGFuIGljb24gcGxhY2Vob2xkZXIg4oCUIGFkZCBhIHN1YnRsZSBncmFkaWVudCBzbyB0aGV5IHJlYWQKICAgYXMgaW50ZW50aW9uYWwgcmF0aGVyIHRoYW4gbWlzc2luZy4gKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanIta2luZD0ibW9kZWwzZCJdIC5tanItdGh1bWIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWV4dD0iZ2xiIl0gLm1qci10aHVtYiwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZXh0PSJnbHRmIl0gLm1qci10aHVtYiwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZXh0PSJvYmoiXSAubWpyLXRodW1iLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1leHQ9ImZieCJdIC5tanItdGh1bWIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDUwJSwgIzBkMTExNyA1MCUpICFpbXBvcnRhbnQ7Cn0KCi8qIOKUgOKUgCBGZWVkIGdyb3VwIGJ1dHRvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCi5tanItYm90dG9tLWZlZWQgLm1qci1mZWVkLWdyb3VwLWJ1dHRvbiB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDM0cHg7CiAgICByaWdodDogNnB4OwogICAgei1pbmRleDogMTE7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogNHB4OwogICAgbWluLXdpZHRoOiAyOHB4OwogICAgbWluLWhlaWdodDogMjhweDsKICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDEwLCAxNCwgMjAsIDAuNzQpOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45Nik7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjI0KTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAxMjBtcyBlYXNlLCB0cmFuc2Zvcm0gODBtcyBlYXNlOwp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItZmVlZC1ncm91cC1idXR0b246aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgxOCwgMjQsIDM0LCAwLjkpOwp9CgoubWpyLWZlZWQtZ3JvdXAtYnV0dG9uLWljb24gewogICAgZm9udC1zaXplOiAxMXB4OwogICAgb3BhY2l0eTogMC45Owp9CgoubWpyLWZlZWQtZ3JvdXAtYnV0dG9uLWNvdW50IHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLyog4pSA4pSAIEZlZWQgZ3JvdXAgcG9wb3ZlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCi5tanItZmVlZC1ncm91cC1wb3BvdmVyIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyMjIpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yLCAjM2EzYTNhKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLWxnLCA4cHgpOwogICAgYm94LXNoYWRvdzogMCA4cHggMjhweCByZ2JhKDAsIDAsIDAsIDAuNDUpOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm1qci1mZWVkLWdyb3VwLXBvcG92ZXItdGl0bGUgewogICAgcGFkZGluZzogOHB4IDEwcHggNHB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7CiAgICBtYXJnaW4tYm90dG9tOiA4cHg7Cn0KCi5tanItZmVlZC1ncm91cC1wb3BvdmVyLWdyaWQgewogICAgcGFkZGluZzogNHB4IDhweCAxMHB4OwogICAgbWF4LWhlaWdodDogMzYwcHg7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgIHNjcm9sbGJhci1ndXR0ZXI6IHN0YWJsZTsKICAgIHNjcm9sbGJhci13aWR0aDogdGhpbjsKICAgIHNjcm9sbGJhci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIsICMyZjM1NDApIDcwJSwgIzdmOGVhMyAzMCUpIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wLCAjMTYxOTFmKSA4OCUsICMwMDAgMTIlKTsKfQoKLm1qci1mZWVkLWdyb3VwLWJ1dHRvbi1pY29uLAoubWpyLWZlZWQtZ3JvdXAtYnV0dG9uLWNvdW50IHsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoubWpyLWZlZWQtZ3JvdXAtbWVtYmVyLWNhcmQgewogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWZlZWQtZ3JvdXAtbWVtYmVyLWNhcmQgLm1qci10aHVtYiB7CiAgICBhc3BlY3QtcmF0aW86IDEgLyAxICFpbXBvcnRhbnQ7Cn0KCi5tanItZmVlZC1ncm91cC1tZW1iZXItY2FyZCAubWpyLWNhcmQtaW5mbyB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1zdGFjay1ncm91cC1idXR0b24gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAzNHB4OwogICAgcmlnaHQ6IDZweDsKICAgIHotaW5kZXg6IDExOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDRweDsKICAgIG1pbi13aWR0aDogMjhweDsKICAgIG1pbi1oZWlnaHQ6IDI4cHg7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgxMCwgMTQsIDIwLCAwLjc0KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTYpOwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjI0KTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAxMjBtcyBlYXNlLCB0cmFuc2Zvcm0gODBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItc3RhY2stZ3JvdXAtYnV0dG9uOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTgsIDI0LCAzNCwgMC45KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXN0YWNrLWdyb3VwLWJ1dHRvbiA+ICogewogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5tanItZmlsbXN0cmlwOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICB3aWR0aDogNHB4OwogICAgaGVpZ2h0OiA0cHg7Cn0KCi5tanItZmlsbXN0cmlwOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKfQoKLm1qci1maWxtc3RyaXA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKfQoKLm1qci1maWxtc3RyaXA6aG92ZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yMik7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1zdGFjay1ncm91cC1idXR0b24tY291bnQgewogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgovKiDilIDilIAgRHVwbGljYXRlIHN0YWNrIGJ1dHRvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLyogU2hvd3Mgb24gdGhlIHByaW1hcnkgY2FyZCB3aGVuIHNhbWUtZmlsZW5hbWUgZHVwbGljYXRlcyBleGlzdC4gICAgICAgICAgICAgKi8KLyogUG9zaXRpb25lZCBhdCBib3R0b20tcmlnaHQgdG8gbm90IG92ZXJsYXAgdGhlIHN0YWNrLWdyb3VwIGJ1dHRvbiAodG9wLXJpZ2h0KS4gKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWR1cC1zdGFjay1idXR0b24gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgYm90dG9tOiAzMHB4OwogICAgcmlnaHQ6IDZweDsKICAgIHotaW5kZXg6IDExOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDRweDsKICAgIG1pbi13aWR0aDogMjhweDsKICAgIG1pbi1oZWlnaHQ6IDI4cHg7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDE4MCwgMCwgMC4zOCk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMzAsIDE4LCAwLCAwLjgyKTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjAwLCA2MCwgMC45Nik7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjMyKTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzLCB0cmFuc2Zvcm0gODBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZHVwLXN0YWNrLWJ1dHRvbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDUwLCAzMCwgMCwgMC45NCk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAxODAsIDAsIDAuNik7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1kdXAtc3RhY2stYnV0dG9uID4gKiB7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWR1cC1zdGFjay1jb3VudCB7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGluZS1oZWlnaHQ6IDE7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWR1cC1zdGFja2VkPSJ0cnVlIl0gLm1qci1kdXAtc3RhY2stYnV0dG9uIHsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4zMiksCiAgICAgICAgMCAwIDAgMXB4IHJnYmEoMjU1LCAxODAsIDAsIDAuMik7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXN0YWNrLWdyb3VwLWJ1dHRvbiwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIC5tanItZmVlZC1ncm91cC1idXR0b24gewogICAgYm94LXNoYWRvdzoKICAgICAgICAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjI0KSwKICAgICAgICAwIDAgMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOmhvdmVyLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1kdXAtc3RhY2tlZD0idHJ1ZSJdOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50Owp9CgovKiDilIDilIAgVmlzdWFsIHN0YWNraW5nIGVmZmVjdCDigJQgbGF5ZXJlZCBjYXJkcyBiZWhpbmQgdGhlIG1haW4gY2FyZCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLyogQ3JlYXRlcyBwc2V1ZG8tZWxlbWVudCAiY2FyZHMiIG9mZnNldCBiZWhpbmQgdGhlIHByaW1hcnkgY2FyZCB0byB2aXN1YWxseSAgICAqLwovKiBjb21tdW5pY2F0ZSB0aGF0IHRoaXMgY2FyZCByZXByZXNlbnRzIGEgZ3JvdXAgb2YgbXVsdGlwbGUgaW1hZ2VzLiAgICAgICAgICAgICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAxOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl06OmJlZm9yZSwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOjphZnRlciB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LW1lbnUtYmcsICMxYTFhMmUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgei1pbmRleDogLTE7CiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMTgwbXMgZWFzZSwgb3BhY2l0eSAxODBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl06OmJlZm9yZSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgzcHgsIDNweCkgcm90YXRlKDFkZWcpOwogICAgb3BhY2l0eTogMC40NTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOjphZnRlciB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg2cHgsIDZweCkgcm90YXRlKDIuMmRlZyk7CiAgICBvcGFjaXR5OiAwLjI1Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl06aG92ZXI6OmJlZm9yZSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg0cHgsIDRweCkgcm90YXRlKDEuNWRlZyk7CiAgICBvcGFjaXR5OiAwLjU1Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl06aG92ZXI6OmFmdGVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDhweCwgOHB4KSByb3RhdGUoM2RlZyk7CiAgICBvcGFjaXR5OiAwLjM1Owp9CgoubWpyLXN0YWNrLWdyb3VwLXBvcG92ZXIgewogICAgd2lkdGg6IG1pbig0NDBweCwgOTJ2dyk7Cn0KCi5tanItc3RhY2stZ3JvdXAtbWVtYmVyLWNhcmQgewogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXN0YWNrLWdyb3VwLW1lbWJlci1jYXJkIC5tanItdGh1bWIgewogICAgYXNwZWN0LXJhdGlvOiAxIC8gMSAhaW1wb3J0YW50Owp9CgoubWpyLXN0YWNrLWdyb3VwLW1lbWJlci1jYXJkIC5tanItY2FyZC1pbmZvIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIExpZ2h0IG1vZGUgb3ZlcnJpZGVzIChDb21meVVJIHYxLjQyKyBpbXByb3ZlZCBsaWdodCB0aGVtZSkKICogVXNlcyBDb21meVVJIGRhdGEtdGhlbWUgYXR0cmlidXRlIHdoZW4gc2V0LCB3aXRoCiAqIHByZWZlcnMtY29sb3Itc2NoZW1lIGFzIGEgZmFsbGJhY2sgZm9yIG9sZGVyIHZlcnNpb25zLgogKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCi8qIENvbWZ5VUkgc2V0cyBkYXRhLXRoZW1lPSJsaWdodCIgb24gPGh0bWw+IG9yIDxib2R5PiAqLwo6aXMoW2RhdGEtdGhlbWU9ImxpZ2h0Il0sIFtkYXRhLWNvbG9yLXNjaGVtZT0ibGlnaHQiXSkgLm1qci1hc3NldHMtbWFuYWdlciwKOmlzKFtkYXRhLXRoZW1lPSJsaWdodCJdLCBbZGF0YS1jb2xvci1zY2hlbWU9ImxpZ2h0Il0pIC5tanItcG9wb3ZlciB7CiAgICAtLW1qci1zdXJmYWNlLTA6IHZhcigtLWludGVyZmFjZS1wYW5lbC1zdXJmYWNlLCAjZjBmMGYwKTsKICAgIC0tbWpyLXN1cmZhY2UtMTogdmFyKC0taW50ZXJmYWNlLW1lbnUtc3VyZmFjZSwgI2ZhZmFmYSk7CiAgICAtLW1qci1zdXJmYWNlLTI6IHZhcigtLWludGVyZmFjZS1wYW5lbC1ob3Zlci1zdXJmYWNlLCAjZThlOGU4KTsKICAgIC0tbWpyLXN1cmZhY2UtMzogdmFyKC0tbW9kYWwtY2FyZC1iYWNrZ3JvdW5kLCAjZmZmZmZmKTsKICAgIC0tbWpyLWJvcmRlcjogdmFyKC0tYm9yZGVyLWRlZmF1bHQsIHJnYmEoMCwgMCwgMCwgMC4xNCkpOwogICAgLS1tanItbXV0ZWQ6IHZhcigtLW11dGVkLWZvcmVncm91bmQsIHJnYmEoMCwgMCwgMCwgMC41NSkpOwogICAgLS1tanItY2FyZC1ob3Zlci1jb2xvcjogdmFyKC0taW50ZXJmYWNlLXBhbmVsLWhvdmVyLXN1cmZhY2UsICNlMGUwZTApOwp9CgpAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkgewogICAgLyogRmFsbGJhY2s6IG9ubHkgYXBwbHkgaWYgQ29tZnlVSSBoYXNuJ3Qgc2V0IGFuIGV4cGxpY2l0IGRhdGEtdGhlbWUgKi8KICAgIC5tanItYXNzZXRzLW1hbmFnZXI6bm90KFtkYXRhLXRoZW1lLWFwcGxpZWRdKSwKICAgIC5tanItcG9wb3Zlcjpub3QoW2RhdGEtdGhlbWUtYXBwbGllZF0pIHsKICAgICAgICAtLW1qci1zdXJmYWNlLTA6IHZhcigtLWludGVyZmFjZS1wYW5lbC1zdXJmYWNlLCAjZjBmMGYwKTsKICAgICAgICAtLW1qci1zdXJmYWNlLTE6IHZhcigtLWludGVyZmFjZS1tZW51LXN1cmZhY2UsICNmYWZhZmEpOwogICAgICAgIC0tbWpyLXN1cmZhY2UtMjogdmFyKC0taW50ZXJmYWNlLXBhbmVsLWhvdmVyLXN1cmZhY2UsICNlOGU4ZTgpOwogICAgICAgIC0tbWpyLXN1cmZhY2UtMzogdmFyKC0tbW9kYWwtY2FyZC1iYWNrZ3JvdW5kLCAjZmZmZmZmKTsKICAgICAgICAtLW1qci1ib3JkZXI6IHZhcigtLWJvcmRlci1kZWZhdWx0LCByZ2JhKDAsIDAsIDAsIDAuMTQpKTsKICAgICAgICAtLW1qci1tdXRlZDogdmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjU1KSk7CiAgICAgICAgLS1tanItY2FyZC1ob3Zlci1jb2xvcjogdmFyKC0taW50ZXJmYWNlLXBhbmVsLWhvdmVyLXN1cmZhY2UsICNlMGUwZTApOwogICAgfQp9CgovKiDilIDilIDilIAgU2tlbGV0b24gbG9hZGVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCi5tanItY2FyZC1za2VsZXRvbiB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xLCAjMmEyYTJhKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsICMzYTNhM2EpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbGcsIDhweCk7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgLyogTWF0Y2ggLm1qci10aHVtYiBhc3BlY3QgcmF0aW8gc28gc2tlbGV0b25zIGhhdmUgdGhlIHNhbWUgZm9vdHByaW50IGFzIHJlYWwgY2FyZHMuICovCiAgICBhc3BlY3QtcmF0aW86IDEgLyAxOwp9CgovKiBTaGltbWVyIHN3ZWVwICovCi5tanItY2FyZC1za2VsZXRvbjo6YWZ0ZXIgewogICAgY29udGVudDogJyc7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICA5MGRlZywKICAgICAgICB0cmFuc3BhcmVudCAwJSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMiwgIzNhM2EzYSkgODAlLCB0cmFuc3BhcmVudCkgNTAlLAogICAgICAgIHRyYW5zcGFyZW50IDEwMCUKICAgICk7CiAgICBhbmltYXRpb246IG1qci1zaGltbWVyIDEuNHMgZWFzZS1pbi1vdXQgaW5maW5pdGU7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpOwp9CgpAa2V5ZnJhbWVzIG1qci1zaGltbWVyIHsKICAgIGZyb20geyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpOyB9CiAgICB0byAgIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpOyB9Cn0KCkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7CiAgICAubWpyLWNhcmQtc2tlbGV0b246OmFmdGVyIHsgYW5pbWF0aW9uOiBub25lOyB9Cn0KCi8qIOKUgOKUgOKUgCBSZXNwb25zaXZlIHN1bW1hcnkgYmFyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoKLyoKICogRW5hYmxlIGNvbnRhaW5lciBxdWVyaWVzIG9uIHRoZSBzdW1tYXJ5IGJhciBzbyBjaGlsZHJlbiBjYW4gcmVzcG9uZCB0byBpdHMKICogYWN0dWFsIHJlbmRlcmVkIHdpZHRoIChlLmcuIHdoZW4gdGhlIHBhbmVsIGlzIGRvY2tlZCBpbiBhIG5hcnJvdyBzaWRlYmFyKS4KICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zdW1tYXJ5IHsKICAgIGNvbnRhaW5lci10eXBlOiBpbmxpbmUtc2l6ZTsKICAgIGNvbnRhaW5lci1uYW1lOiBtanItc3VtbWFyeS1iYXI7Cn0KCi8qIEJlbG93IH4zODAgcHg6IGhpZGUgdGhlIHBpbGxzL3JpZ2h0IHNlY3Rpb24gdG8gcHJldmVudCBvdmVyZmxvdy4gKi8KQGNvbnRhaW5lciBtanItc3VtbWFyeS1iYXIgKG1heC13aWR0aDogMzgwcHgpIHsKICAgIC5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zdW1tYXJ5LXJpZ2h0IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgfQogICAgLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXN1bW1hcnktdGV4dCB7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgfQp9Cg==", import.meta.url).toString(), i = document.createElement("link"); i.id = t, i.rel = "stylesheet", i.type = "text/css", i.href = n, i.onerror = () => { var o; try { @@ -5018,7 +5018,7 @@ function Jh({ enabled: e = !0 } = {}) { }, document.head.appendChild(i), i.onload = () => { var o; try { - document.documentElement.dataset.mjrThemeComfy = "1", Qc(); + document.documentElement.dataset.mjrThemeComfy = "1", _c(); } catch (r) { (o = console.debug) == null || o.call(console, r); } @@ -5027,12 +5027,12 @@ function Jh({ enabled: e = !0 } = {}) { console.warn("Majoor: failed to load Comfy theme CSS", n); } } -Qc(); -const uc = "mjr-runtime-status-dashboard", Th = "__mjr_write_token"; -function Bh() { +_c(); +const mc = "mjr-runtime-status-dashboard", TC = "__mjr_write_token"; +function KC() { var e; try { - return String(((e = sessionStorage == null ? void 0 : sessionStorage.getItem) == null ? void 0 : e.call(sessionStorage, Th)) || "").trim(); + return String(((e = sessionStorage == null ? void 0 : sessionStorage.getItem) == null ? void 0 : e.call(sessionStorage, TC)) || "").trim(); } catch { return ""; } @@ -5044,8 +5044,8 @@ function du(e, t) { const i = document.createElement("div"); return i.style.whiteSpace = "nowrap", i.style.lineHeight = "1.35", t === "auth" && (i.style.marginTop = "4px", i.style.fontWeight = "600"), e.appendChild(i), e[n] = i, i; } -function Uh(e) { - const t = Bh(), i = String((e == null ? void 0 : e.token_hint) || "").trim() || (t ? `...${t.slice(-4)}` : ""), o = (e == null ? void 0 : e.allow_write) !== !1, r = (e == null ? void 0 : e.require_auth) === !0, l = (e == null ? void 0 : e.token_configured) === !0; +function BC(e) { + const t = KC(), i = String((e == null ? void 0 : e.token_hint) || "").trim() || (t ? `...${t.slice(-4)}` : ""), o = (e == null ? void 0 : e.allow_write) !== !1, r = (e == null ? void 0 : e.require_auth) === !0, l = (e == null ? void 0 : e.token_configured) === !0; return o ? t ? { text: m("runtime.writeAuthActive", "Write auth: active {tokenHint}", { tokenHint: i || "(session)" @@ -5072,10 +5072,10 @@ function Uh(e) { color: "#ff9b9b" }; } -function Kh() { +function UC() { var e, t, n; try { - const i = document.querySelector(".mjr-assets-manager.mjr-am-container"), o = document.getElementById(uc); + const i = document.querySelector(".mjr-assets-manager.mjr-am-container"), o = document.getElementById(mc); if (!i) { try { (e = o == null ? void 0 : o.remove) == null || e.call(o); @@ -5090,41 +5090,41 @@ function Kh() { } catch (l) { (n = console.debug) == null || n.call(console, l); } - let r = document.getElementById(uc); - return r ? r.parentElement !== i && i.appendChild(r) : (r = document.createElement("div"), r.id = uc, r.style.position = "absolute", r.style.bottom = "10px", r.style.right = "10px", r.style.zIndex = "9999", r.style.padding = "6px 10px", r.style.borderRadius = "10px", r.style.border = "1px solid rgba(255,255,255,0.16)", r.style.background = "rgba(0,0,0,0.45)", r.style.backdropFilter = "blur(4px)", r.style.color = "var(--content-fg, #fff)", r.style.fontSize = "11px", r.style.pointerEvents = "none", r.style.display = "flex", r.style.flexDirection = "column", i.appendChild(r)), r; + let r = document.getElementById(mc); + return r ? r.parentElement !== i && i.appendChild(r) : (r = document.createElement("div"), r.id = mc, r.style.position = "absolute", r.style.bottom = "10px", r.style.right = "10px", r.style.zIndex = "9999", r.style.padding = "6px 10px", r.style.borderRadius = "10px", r.style.border = "1px solid rgba(255,255,255,0.16)", r.style.background = "rgba(0,0,0,0.45)", r.style.backdropFilter = "blur(4px)", r.style.color = "var(--content-fg, #fff)", r.style.fontSize = "11px", r.style.pointerEvents = "none", r.style.display = "flex", r.style.flexDirection = "column", i.appendChild(r)), r; } catch { return null; } } async function uu() { var i; - const e = Kh(); + const e = UC(); if (!e) return !1; const t = du(e, "metrics"), n = du(e, "auth"); try { const [o, r] = await Promise.all([ - Ff(), - kg() + Of(), + Xg() ]); let l = m("runtime.unavailable", "Runtime: unavailable"); if (!(o != null && o.ok) || !(o != null && o.data)) t.textContent = l; else { - const c = o.data.db || {}, s = o.data.index || {}, d = o.data.watcher || {}, u = Number(c.active_connections || 0), I = Number(s.enrichment_queue_length || 0), y = Number(d.pending_files || 0); + const c = o.data.db || {}, s = o.data.index || {}, d = o.data.watcher || {}, u = Number(c.active_connections || 0), I = Number(s.enrichment_queue_length || 0), A = Number(d.pending_files || 0); t.textContent = m( "runtime.metricsLine", "DB active: {active} | Enrich Q: {enrichQ} | Watcher pending: {pending}", - { active: u, enrichQ: I, pending: y } + { active: u, enrichQ: I, pending: A } ), l = m( "runtime.metricsTitle", `Runtime Metrics DB active connections: {active} Enrichment queue: {enrichQ} Watcher pending files: {pending}`, - { active: u, enrichQ: I, pending: y } + { active: u, enrichQ: I, pending: A } ); } - const a = Uh(((i = r == null ? void 0 : r.data) == null ? void 0 : i.prefs) || null); + const a = BC(((i = r == null ? void 0 : r.data) == null ? void 0 : i.prefs) || null); return n.textContent = a.text, n.style.color = a.color, e.title = `${l} ${a.text}`, !0; } catch { @@ -5132,7 +5132,7 @@ ${a.text}`, !0; ${n.textContent}`, !0; } } -function Dh() { +function DC() { var e; try { uu().catch(() => { @@ -5167,7 +5167,7 @@ function oi(e, t, { target: n = null, warnPrefix: i = "[Majoor]" } = {}) { return !1; } } -const kn = (e, t) => { +const Nn = (e, t) => { if (typeof e == "boolean") return e; if (typeof e == "string") { const n = e.trim().toLowerCase(); @@ -5175,16 +5175,16 @@ const kn = (e, t) => { if (["0", "false", "no", "off"].includes(n)) return !1; } return !!t; -}, Gn = (e, t) => { +}, xn = (e, t) => { const n = Number(e); return Number.isFinite(n) ? n : Number(t); -}, Ks = (e, t, n) => { +}, Ds = (e, t, n) => { const i = typeof e == "string" ? e.trim() : String(e ?? ""); return t.includes(i) ? i : n; -}, Eh = (e) => e === "__proto__" || e === "prototype" || e === "constructor", _g = (e, t) => { +}, HC = (e) => e === "__proto__" || e === "prototype" || e === "constructor", _g = (e, t) => { const n = { ...e }; return !t || typeof t != "object" || Object.keys(t).forEach((i) => { - if (Eh(i)) return; + if (HC(i)) return; const o = t[i]; o && typeof o == "object" && !Array.isArray(o) ? n[i] = _g(e[i] || {}, o) : o !== void 0 && (n[i] = o); }), n; @@ -5192,67 +5192,67 @@ const kn = (e, t) => { small: 80, medium: 120, large: 180 -}), eI = Object.freeze(["small", "medium", "large"]), _c = (e, t) => Math.max(60, Math.min(600, Math.round(Gn(e, t)))), Hh = (e = {}) => { +}), eI = Object.freeze(["small", "medium", "large"]), $c = (e, t) => Math.max(60, Math.min(600, Math.round(xn(e, t)))), EC = (e = {}) => { const t = Number(e == null ? void 0 : e.minSize); if (Number.isFinite(t)) - return _c(t, Ge.GRID_MIN_SIZE); - const n = Ks( + return $c(t, Se.GRID_MIN_SIZE); + const n = Ds( String((e == null ? void 0 : e.minSizePreset) || "").toLowerCase(), eI, "" ); - return n ? $g[n] : _c(e == null ? void 0 : e.minSize, Ge.GRID_MIN_SIZE); -}, qh = (e = {}) => _c(e == null ? void 0 : e.minSize, Ge.FEED_GRID_MIN_SIZE), mc = (e) => { - const t = Math.round(Gn(e, Ge.GRID_MIN_SIZE)); + return n ? $g[n] : $c(e == null ? void 0 : e.minSize, Se.GRID_MIN_SIZE); +}, qC = (e = {}) => $c(e == null ? void 0 : e.minSize, Se.FEED_GRID_MIN_SIZE), gc = (e) => { + const t = Math.round(xn(e, Se.GRID_MIN_SIZE)); return t <= 100 ? "small" : t >= 150 ? "large" : "medium"; -}, Un = { +}, Bn = { debug: { - safeCall: Ge.DEBUG_SAFE_CALL, - safeListeners: Ge.DEBUG_SAFE_LISTENERS, - viewer: Ge.DEBUG_VIEWER + safeCall: Se.DEBUG_SAFE_CALL, + safeListeners: Se.DEBUG_SAFE_LISTENERS, + viewer: Se.DEBUG_VIEWER }, grid: { - pageSize: Ge.DEFAULT_PAGE_SIZE, - minSize: Ge.GRID_MIN_SIZE, + pageSize: Se.DEFAULT_PAGE_SIZE, + minSize: Se.GRID_MIN_SIZE, minSizePreset: "medium", - gap: Ge.GRID_GAP, - showExtBadge: Ge.GRID_SHOW_BADGES_EXTENSION, - showRatingBadge: Ge.GRID_SHOW_BADGES_RATING, - showTagsBadge: Ge.GRID_SHOW_BADGES_TAGS, - showDetails: Ge.GRID_SHOW_DETAILS, - showFilename: Ge.GRID_SHOW_DETAILS_FILENAME, - showDate: Ge.GRID_SHOW_DETAILS_DATE, - showDimensions: Ge.GRID_SHOW_DETAILS_DIMENSIONS, - showGenTime: Ge.GRID_SHOW_DETAILS_GENTIME, - showHoverInfo: Ge.GRID_SHOW_HOVER_INFO, - showWorkflowDot: Ge.GRID_SHOW_WORKFLOW_DOT, - videoAutoplayMode: Ge.GRID_VIDEO_AUTOPLAY_MODE, - starColor: Ge.BADGE_STAR_COLOR, - badgeImageColor: Ge.BADGE_IMAGE_COLOR, - badgeVideoColor: Ge.BADGE_VIDEO_COLOR, - badgeAudioColor: Ge.BADGE_AUDIO_COLOR, - badgeModel3dColor: Ge.BADGE_MODEL3D_COLOR, - badgeDuplicateAlertColor: Ge.BADGE_DUPLICATE_ALERT_COLOR + gap: Se.GRID_GAP, + showExtBadge: Se.GRID_SHOW_BADGES_EXTENSION, + showRatingBadge: Se.GRID_SHOW_BADGES_RATING, + showTagsBadge: Se.GRID_SHOW_BADGES_TAGS, + showDetails: Se.GRID_SHOW_DETAILS, + showFilename: Se.GRID_SHOW_DETAILS_FILENAME, + showDate: Se.GRID_SHOW_DETAILS_DATE, + showDimensions: Se.GRID_SHOW_DETAILS_DIMENSIONS, + showGenTime: Se.GRID_SHOW_DETAILS_GENTIME, + showHoverInfo: Se.GRID_SHOW_HOVER_INFO, + showWorkflowDot: Se.GRID_SHOW_WORKFLOW_DOT, + videoAutoplayMode: Se.GRID_VIDEO_AUTOPLAY_MODE, + starColor: Se.BADGE_STAR_COLOR, + badgeImageColor: Se.BADGE_IMAGE_COLOR, + badgeVideoColor: Se.BADGE_VIDEO_COLOR, + badgeAudioColor: Se.BADGE_AUDIO_COLOR, + badgeModel3dColor: Se.BADGE_MODEL3D_COLOR, + badgeDuplicateAlertColor: Se.BADGE_DUPLICATE_ALERT_COLOR }, infiniteScroll: { - enabled: Ge.INFINITE_SCROLL_ENABLED, - rootMargin: Ge.INFINITE_SCROLL_ROOT_MARGIN, - threshold: Ge.INFINITE_SCROLL_THRESHOLD, - bottomGapPx: Ge.BOTTOM_GAP_PX + enabled: Se.INFINITE_SCROLL_ENABLED, + rootMargin: Se.INFINITE_SCROLL_ROOT_MARGIN, + threshold: Se.INFINITE_SCROLL_THRESHOLD, + bottomGapPx: Se.BOTTOM_GAP_PX }, siblings: { hidePngSiblings: !0 }, autoScan: { - onStartup: Ge.AUTO_SCAN_ON_STARTUP + onStartup: Se.AUTO_SCAN_ON_STARTUP }, scan: { fastMode: !0 }, watcher: { enabled: !0, - debounceMs: Ge.WATCHER_DEBOUNCE_MS, - dedupeTtlMs: Ge.WATCHER_DEDUPE_TTL_MS, + debounceMs: Se.WATCHER_DEBOUNCE_MS, + dedupeTtlMs: Se.WATCHER_DEDUPE_TTL_MS, maxPending: 500, minSize: 100, maxSize: 4294967296 @@ -5261,29 +5261,29 @@ const kn = (e, t) => { confirmDeletion: !0 }, status: { - pollInterval: Ge.STATUS_POLL_INTERVAL + pollInterval: Se.STATUS_POLL_INTERVAL }, viewer: { - allowPanAtZoom1: Ge.VIEWER_ALLOW_PAN_AT_ZOOM_1, - disableWebGL: Ge.VIEWER_DISABLE_WEBGL_VIDEO, - pauseDuringExecution: Ge.VIEWER_PAUSE_DURING_EXECUTION, - floatingPauseDuringExecution: Ge.FLOATING_VIEWER_PAUSE_DURING_EXECUTION, - mfvLiveDefault: Ge.MFV_LIVE_DEFAULT, - mfvPreviewDefault: Ge.MFV_PREVIEW_DEFAULT, - videoGradeThrottleFps: Ge.VIEWER_VIDEO_GRADE_THROTTLE_FPS, - scopesFps: Ge.VIEWER_SCOPES_FPS, - metaTtlMs: Ge.VIEWER_META_TTL_MS, - metaMaxEntries: Ge.VIEWER_META_MAX_ENTRIES, + allowPanAtZoom1: Se.VIEWER_ALLOW_PAN_AT_ZOOM_1, + disableWebGL: Se.VIEWER_DISABLE_WEBGL_VIDEO, + pauseDuringExecution: Se.VIEWER_PAUSE_DURING_EXECUTION, + floatingPauseDuringExecution: Se.FLOATING_VIEWER_PAUSE_DURING_EXECUTION, + mfvLiveDefault: Se.MFV_LIVE_DEFAULT, + mfvPreviewDefault: Se.MFV_PREVIEW_DEFAULT, + videoGradeThrottleFps: Se.VIEWER_VIDEO_GRADE_THROTTLE_FPS, + scopesFps: Se.VIEWER_SCOPES_FPS, + metaTtlMs: Se.VIEWER_META_TTL_MS, + metaMaxEntries: Se.VIEWER_META_MAX_ENTRIES, mfvSidebarPosition: "right", - mfvPreviewMethod: Ge.MFV_PREVIEW_METHOD, + mfvPreviewMethod: Se.MFV_PREVIEW_METHOD, ltxavRgbFallback: !1 }, rtHydrate: { - concurrency: Ge.RT_HYDRATE_CONCURRENCY, - queueMax: Ge.RT_HYDRATE_QUEUE_MAX, - seenMax: Ge.RT_HYDRATE_SEEN_MAX, - pruneBudget: Ge.RT_HYDRATE_PRUNE_BUDGET, - seenTtlMs: Ge.RT_HYDRATE_SEEN_TTL_MS + concurrency: Se.RT_HYDRATE_CONCURRENCY, + queueMax: Se.RT_HYDRATE_QUEUE_MAX, + seenMax: Se.RT_HYDRATE_SEEN_MAX, + pruneBudget: Se.RT_HYDRATE_PRUNE_BUDGET, + seenTtlMs: Se.RT_HYDRATE_SEEN_TTL_MS }, observability: { enabled: !1, @@ -5292,16 +5292,16 @@ const kn = (e, t) => { verboseStartupLogs: !1 }, feed: { - minSize: Ge.FEED_GRID_MIN_SIZE, - showInfo: Ge.FEED_SHOW_INFO, - showFilename: Ge.FEED_SHOW_FILENAME, - showDimensions: Ge.FEED_SHOW_DIMENSIONS, - showDate: Ge.FEED_SHOW_DATE, - showGenTime: Ge.FEED_SHOW_GENTIME, - showWorkflowDot: Ge.FEED_SHOW_WORKFLOW_DOT, - showExtBadge: Ge.FEED_SHOW_BADGES_EXTENSION, - showRatingBadge: Ge.FEED_SHOW_BADGES_RATING, - showTagsBadge: Ge.FEED_SHOW_BADGES_TAGS + minSize: Se.FEED_GRID_MIN_SIZE, + showInfo: Se.FEED_SHOW_INFO, + showFilename: Se.FEED_SHOW_FILENAME, + showDimensions: Se.FEED_SHOW_DIMENSIONS, + showDate: Se.FEED_SHOW_DATE, + showGenTime: Se.FEED_SHOW_GENTIME, + showWorkflowDot: Se.FEED_SHOW_WORKFLOW_DOT, + showExtBadge: Se.FEED_SHOW_BADGES_EXTENSION, + showRatingBadge: Se.FEED_SHOW_BADGES_RATING, + showTagsBadge: Se.FEED_SHOW_BADGES_TAGS }, sidebar: { position: "right", @@ -5334,14 +5334,14 @@ const kn = (e, t) => { tagsTTLms: 3e4 }, search: { - maxResults: Ge.SEARCH_DEFAULT_LIMIT + maxResults: Se.SEARCH_DEFAULT_LIMIT }, ai: { vectorSearchEnabled: !0, verboseAiLogs: !1 }, executionGrouping: { - enabled: Ge.EXECUTION_GROUPING_ENABLED + enabled: Se.EXECUTION_GROUPING_ENABLED }, workflowMinimap: { enabled: !1, @@ -5355,10 +5355,10 @@ const kn = (e, t) => { size: "comfortable" }, ui: { - cardHoverColor: Ge.UI_CARD_HOVER_COLOR, - cardSelectionColor: Ge.UI_CARD_SELECTION_COLOR, - ratingColor: Ge.UI_RATING_COLOR, - tagColor: Ge.UI_TAG_COLOR + cardHoverColor: Se.UI_CARD_HOVER_COLOR, + cardSelectionColor: Se.UI_CARD_SELECTION_COLOR, + ratingColor: Se.UI_RATING_COLOR, + tagColor: Se.UI_TAG_COLOR }, security: { safeMode: !1, @@ -5372,17 +5372,17 @@ const kn = (e, t) => { tokenConfigured: !1, tokenHint: "" } -}, Xn = () => { +}, kn = () => { var e; try { - const t = ni.get(Oi); - if (!t) return { ...Un }; + const t = ni.get(Fi); + if (!t) return { ...Bn }; const n = JSON.parse(t), i = n && typeof n == "object" && Number.isInteger(n.version) && n.data && typeof n.data == "object", o = n && typeof n == "object" && !Array.isArray(n); - if (!i && !o) return { ...Un }; + if (!i && !o) return { ...Bn }; if (i && Number(n.version) > Number(sg)) return console.warn( "[Majoor] settings schema version is newer than this build, using defaults" - ), { ...Un }; + ), { ...Bn }; const r = i ? n.data : n, l = /* @__PURE__ */ new Set([ "debug", "grid", @@ -5414,18 +5414,18 @@ const kn = (e, t) => { if (r && typeof r == "object") for (const [s, d] of Object.entries(r)) l.has(s) && (a[s] = d); - const c = _g(Un, a); + const c = _g(Bn, a); if (!i) try { - Be(c); + Ue(c); } catch (s) { (e = console.debug) == null || e.call(console, s); } return c; } catch (t) { - return console.warn("[Majoor] settings load failed, using defaults", t), { ...Un }; + return console.warn("[Majoor] settings load failed, using defaults", t), { ...Bn }; } -}, Be = (e) => { +}, Ue = (e) => { var t, n; try { const i = JSON.parse(JSON.stringify(e || {})); @@ -5434,12 +5434,12 @@ const kn = (e, t) => { version: sg, data: i }; - ni.set(Oi, JSON.stringify(o)); + ni.set(Fi, JSON.stringify(o)); } catch (i) { console.warn("[Majoor] settings save failed", i); try { const o = Date.now(), r = Number((window == null ? void 0 : window._mjrSettingsSaveFailAt) || 0) || 0; - o - r > 3e4 && (window._mjrSettingsSaveFailAt = o, Promise.resolve().then(() => jh).then( + o - r > 3e4 && (window._mjrSettingsSaveFailAt = o, Promise.resolve().then(() => jC).then( ({ comfyAlert: l }) => l( m( "dialog.settingsSaveFailed", @@ -5461,222 +5461,222 @@ const kn = (e, t) => { (n = console.debug) == null || n.call(console, o); } } -}, At = (e) => { - var o, r, l, a, c, s, d, u, I, y, S, Z, C, g, A, p, b, L, h, G, W, f, X, x, T, v, w, R, Y, F, N, V, k, K, z, B, J, P, H, $, E, oe, M, j, O, D, q, ee, ce, ue, U, Q, _, le, de, se, ge, je, Se, ke, we, Je, $e, qe, Ue, Te, Oe, pt, Me, Xt, Mt; - const t = Number(Ge.MAX_PAGE_SIZE) || 2e3, n = Math.max( +}, Zt = (e) => { + var o, r, l, a, c, s, d, u, I, A, h, S, W, g, y, p, b, L, C, G, Z, f, X, x, K, j, w, R, V, O, k, Y, N, U, z, T, J, P, E, $, H, ne, M, v, F, D, q, ee, ae, ue, B, Q, _, le, ce, de, ge, Le, xe, Xe, Me, Fe, it, qe, Pe, Re, rt, Te, qt, kt, we; + const t = Number(Se.MAX_PAGE_SIZE) || 2e3, n = Math.max( 50, - Math.min(t, Number((o = e.grid) == null ? void 0 : o.pageSize) || Ge.DEFAULT_PAGE_SIZE) + Math.min(t, Number((o = e.grid) == null ? void 0 : o.pageSize) || Se.DEFAULT_PAGE_SIZE) ); - fe.DEFAULT_PAGE_SIZE = n, fe.AUTO_SCAN_ON_STARTUP = !!((r = e.autoScan) != null && r.onStartup), fe.EXECUTION_GROUPING_ENABLED = !!(((l = e.executionGrouping) == null ? void 0 : l.enabled) ?? Ge.EXECUTION_GROUPING_ENABLED), fe.STATUS_POLL_INTERVAL = Math.max( + he.DEFAULT_PAGE_SIZE = n, he.AUTO_SCAN_ON_STARTUP = !!((r = e.autoScan) != null && r.onStartup), he.EXECUTION_GROUPING_ENABLED = !!(((l = e.executionGrouping) == null ? void 0 : l.enabled) ?? Se.EXECUTION_GROUPING_ENABLED), he.STATUS_POLL_INTERVAL = Math.max( 1e3, - Number((a = e.status) == null ? void 0 : a.pollInterval) || Ge.STATUS_POLL_INTERVAL - ), fe.DEBUG_SAFE_CALL = !!((c = e.debug) != null && c.safeCall), fe.DEBUG_SAFE_LISTENERS = !!((s = e.debug) != null && s.safeListeners), fe.DEBUG_VIEWER = !!((d = e.debug) != null && d.viewer), fe.GRID_MIN_SIZE = Hh(e.grid), fe.FEED_GRID_MIN_SIZE = qh(e.feed), fe.GRID_GAP = Math.max( + Number((a = e.status) == null ? void 0 : a.pollInterval) || Se.STATUS_POLL_INTERVAL + ), he.DEBUG_SAFE_CALL = !!((c = e.debug) != null && c.safeCall), he.DEBUG_SAFE_LISTENERS = !!((s = e.debug) != null && s.safeListeners), he.DEBUG_VIEWER = !!((d = e.debug) != null && d.viewer), he.GRID_MIN_SIZE = EC(e.grid), he.FEED_GRID_MIN_SIZE = qC(e.feed), he.GRID_GAP = Math.max( 0, - Math.min(40, Math.round(Gn((u = e.grid) == null ? void 0 : u.gap, Ge.GRID_GAP))) - ), fe.GRID_SHOW_BADGES_EXTENSION = !!(((I = e.grid) == null ? void 0 : I.showExtBadge) ?? Ge.GRID_SHOW_BADGES_EXTENSION), fe.GRID_SHOW_BADGES_RATING = !!(((y = e.grid) == null ? void 0 : y.showRatingBadge) ?? Ge.GRID_SHOW_BADGES_RATING), fe.GRID_SHOW_BADGES_TAGS = !!(((S = e.grid) == null ? void 0 : S.showTagsBadge) ?? Ge.GRID_SHOW_BADGES_TAGS), fe.GRID_SHOW_DETAILS = !!(((Z = e.grid) == null ? void 0 : Z.showDetails) ?? Ge.GRID_SHOW_DETAILS), fe.GRID_SHOW_DETAILS_FILENAME = !!(((C = e.grid) == null ? void 0 : C.showFilename) ?? Ge.GRID_SHOW_DETAILS_FILENAME), fe.GRID_SHOW_DETAILS_DATE = !!(((g = e.grid) == null ? void 0 : g.showDate) ?? Ge.GRID_SHOW_DETAILS_DATE), fe.GRID_SHOW_DETAILS_DIMENSIONS = !!(((A = e.grid) == null ? void 0 : A.showDimensions) ?? Ge.GRID_SHOW_DETAILS_DIMENSIONS), fe.GRID_SHOW_DETAILS_GENTIME = !!(((p = e.grid) == null ? void 0 : p.showGenTime) ?? Ge.GRID_SHOW_DETAILS_GENTIME), fe.GRID_SHOW_HOVER_INFO = !!(((b = e.grid) == null ? void 0 : b.showHoverInfo) ?? Ge.GRID_SHOW_HOVER_INFO), fe.GRID_SHOW_WORKFLOW_DOT = !!(((L = e.grid) == null ? void 0 : L.showWorkflowDot) ?? Ge.GRID_SHOW_WORKFLOW_DOT), fe.FEED_SHOW_INFO = !!(((h = e.feed) == null ? void 0 : h.showInfo) ?? Ge.FEED_SHOW_INFO), fe.FEED_SHOW_FILENAME = !!(((G = e.feed) == null ? void 0 : G.showFilename) ?? Ge.FEED_SHOW_FILENAME), fe.FEED_SHOW_DIMENSIONS = !!(((W = e.feed) == null ? void 0 : W.showDimensions) ?? Ge.FEED_SHOW_DIMENSIONS), fe.FEED_SHOW_DATE = !!(((f = e.feed) == null ? void 0 : f.showDate) ?? Ge.FEED_SHOW_DATE), fe.FEED_SHOW_GENTIME = !!(((X = e.feed) == null ? void 0 : X.showGenTime) ?? Ge.FEED_SHOW_GENTIME), fe.FEED_SHOW_WORKFLOW_DOT = !!(((x = e.feed) == null ? void 0 : x.showWorkflowDot) ?? Ge.FEED_SHOW_WORKFLOW_DOT), fe.FEED_SHOW_BADGES_EXTENSION = !!(((T = e.feed) == null ? void 0 : T.showExtBadge) ?? Ge.FEED_SHOW_BADGES_EXTENSION), fe.FEED_SHOW_BADGES_RATING = !!(((v = e.feed) == null ? void 0 : v.showRatingBadge) ?? Ge.FEED_SHOW_BADGES_RATING), fe.FEED_SHOW_BADGES_TAGS = !!(((w = e.feed) == null ? void 0 : w.showTagsBadge) ?? Ge.FEED_SHOW_BADGES_TAGS); + Math.min(40, Math.round(xn((u = e.grid) == null ? void 0 : u.gap, Se.GRID_GAP))) + ), he.GRID_SHOW_BADGES_EXTENSION = !!(((I = e.grid) == null ? void 0 : I.showExtBadge) ?? Se.GRID_SHOW_BADGES_EXTENSION), he.GRID_SHOW_BADGES_RATING = !!(((A = e.grid) == null ? void 0 : A.showRatingBadge) ?? Se.GRID_SHOW_BADGES_RATING), he.GRID_SHOW_BADGES_TAGS = !!(((h = e.grid) == null ? void 0 : h.showTagsBadge) ?? Se.GRID_SHOW_BADGES_TAGS), he.GRID_SHOW_DETAILS = !!(((S = e.grid) == null ? void 0 : S.showDetails) ?? Se.GRID_SHOW_DETAILS), he.GRID_SHOW_DETAILS_FILENAME = !!(((W = e.grid) == null ? void 0 : W.showFilename) ?? Se.GRID_SHOW_DETAILS_FILENAME), he.GRID_SHOW_DETAILS_DATE = !!(((g = e.grid) == null ? void 0 : g.showDate) ?? Se.GRID_SHOW_DETAILS_DATE), he.GRID_SHOW_DETAILS_DIMENSIONS = !!(((y = e.grid) == null ? void 0 : y.showDimensions) ?? Se.GRID_SHOW_DETAILS_DIMENSIONS), he.GRID_SHOW_DETAILS_GENTIME = !!(((p = e.grid) == null ? void 0 : p.showGenTime) ?? Se.GRID_SHOW_DETAILS_GENTIME), he.GRID_SHOW_HOVER_INFO = !!(((b = e.grid) == null ? void 0 : b.showHoverInfo) ?? Se.GRID_SHOW_HOVER_INFO), he.GRID_SHOW_WORKFLOW_DOT = !!(((L = e.grid) == null ? void 0 : L.showWorkflowDot) ?? Se.GRID_SHOW_WORKFLOW_DOT), he.FEED_SHOW_INFO = !!(((C = e.feed) == null ? void 0 : C.showInfo) ?? Se.FEED_SHOW_INFO), he.FEED_SHOW_FILENAME = !!(((G = e.feed) == null ? void 0 : G.showFilename) ?? Se.FEED_SHOW_FILENAME), he.FEED_SHOW_DIMENSIONS = !!(((Z = e.feed) == null ? void 0 : Z.showDimensions) ?? Se.FEED_SHOW_DIMENSIONS), he.FEED_SHOW_DATE = !!(((f = e.feed) == null ? void 0 : f.showDate) ?? Se.FEED_SHOW_DATE), he.FEED_SHOW_GENTIME = !!(((X = e.feed) == null ? void 0 : X.showGenTime) ?? Se.FEED_SHOW_GENTIME), he.FEED_SHOW_WORKFLOW_DOT = !!(((x = e.feed) == null ? void 0 : x.showWorkflowDot) ?? Se.FEED_SHOW_WORKFLOW_DOT), he.FEED_SHOW_BADGES_EXTENSION = !!(((K = e.feed) == null ? void 0 : K.showExtBadge) ?? Se.FEED_SHOW_BADGES_EXTENSION), he.FEED_SHOW_BADGES_RATING = !!(((j = e.feed) == null ? void 0 : j.showRatingBadge) ?? Se.FEED_SHOW_BADGES_RATING), he.FEED_SHOW_BADGES_TAGS = !!(((w = e.feed) == null ? void 0 : w.showTagsBadge) ?? Se.FEED_SHOW_BADGES_TAGS); { - let me = ((R = e.grid) == null ? void 0 : R.videoAutoplayMode) ?? Ge.GRID_VIDEO_AUTOPLAY_MODE; - me == null && (me = ((Y = e.grid) == null ? void 0 : Y.videoHoverAutoplay) === !1 ? "off" : "hover"), me === !0 && (me = "hover"), me === !1 && (me = "off"), me !== "hover" && me !== "always" && me !== "off" && (me = "hover"), fe.GRID_VIDEO_AUTOPLAY_MODE = me; + let me = ((R = e.grid) == null ? void 0 : R.videoAutoplayMode) ?? Se.GRID_VIDEO_AUTOPLAY_MODE; + me == null && (me = ((V = e.grid) == null ? void 0 : V.videoHoverAutoplay) === !1 ? "off" : "hover"), me === !0 && (me = "hover"), me === !1 && (me = "off"), me !== "hover" && me !== "always" && me !== "off" && (me = "hover"), he.GRID_VIDEO_AUTOPLAY_MODE = me; } - const i = (me, Pe) => { - let Le = String(me || "").trim(); - return /^[0-9a-fA-F]{6}$/.test(Le) && (Le = `#${Le}`), /^#[0-9a-fA-F]{3,8}$/.test(Le) ? Le : Pe; + const i = (me, He) => { + let Ye = String(me || "").trim(); + return /^[0-9a-fA-F]{6}$/.test(Ye) && (Ye = `#${Ye}`), /^#[0-9a-fA-F]{3,8}$/.test(Ye) ? Ye : He; }; - fe.BADGE_STAR_COLOR = i( - (F = e.grid) == null ? void 0 : F.starColor, - Ge.BADGE_STAR_COLOR - ), fe.BADGE_IMAGE_COLOR = i( - (N = e.grid) == null ? void 0 : N.badgeImageColor, - Ge.BADGE_IMAGE_COLOR - ), fe.BADGE_VIDEO_COLOR = i( - (V = e.grid) == null ? void 0 : V.badgeVideoColor, - Ge.BADGE_VIDEO_COLOR - ), fe.BADGE_AUDIO_COLOR = i( - (k = e.grid) == null ? void 0 : k.badgeAudioColor, - Ge.BADGE_AUDIO_COLOR - ), fe.BADGE_MODEL3D_COLOR = i( - (K = e.grid) == null ? void 0 : K.badgeModel3dColor, - Ge.BADGE_MODEL3D_COLOR - ), fe.BADGE_DUPLICATE_ALERT_COLOR = i( + he.BADGE_STAR_COLOR = i( + (O = e.grid) == null ? void 0 : O.starColor, + Se.BADGE_STAR_COLOR + ), he.BADGE_IMAGE_COLOR = i( + (k = e.grid) == null ? void 0 : k.badgeImageColor, + Se.BADGE_IMAGE_COLOR + ), he.BADGE_VIDEO_COLOR = i( + (Y = e.grid) == null ? void 0 : Y.badgeVideoColor, + Se.BADGE_VIDEO_COLOR + ), he.BADGE_AUDIO_COLOR = i( + (N = e.grid) == null ? void 0 : N.badgeAudioColor, + Se.BADGE_AUDIO_COLOR + ), he.BADGE_MODEL3D_COLOR = i( + (U = e.grid) == null ? void 0 : U.badgeModel3dColor, + Se.BADGE_MODEL3D_COLOR + ), he.BADGE_DUPLICATE_ALERT_COLOR = i( (z = e.grid) == null ? void 0 : z.badgeDuplicateAlertColor, - Ge.BADGE_DUPLICATE_ALERT_COLOR - ), fe.UI_CARD_HOVER_COLOR = i( - (B = e.ui) == null ? void 0 : B.cardHoverColor, - Ge.UI_CARD_HOVER_COLOR - ), fe.UI_CARD_SELECTION_COLOR = i( + Se.BADGE_DUPLICATE_ALERT_COLOR + ), he.UI_CARD_HOVER_COLOR = i( + (T = e.ui) == null ? void 0 : T.cardHoverColor, + Se.UI_CARD_HOVER_COLOR + ), he.UI_CARD_SELECTION_COLOR = i( (J = e.ui) == null ? void 0 : J.cardSelectionColor, - Ge.UI_CARD_SELECTION_COLOR - ), fe.UI_RATING_COLOR = i((P = e.ui) == null ? void 0 : P.ratingColor, Ge.UI_RATING_COLOR), fe.UI_TAG_COLOR = i((H = e.ui) == null ? void 0 : H.tagColor, Ge.UI_TAG_COLOR); + Se.UI_CARD_SELECTION_COLOR + ), he.UI_RATING_COLOR = i((P = e.ui) == null ? void 0 : P.ratingColor, Se.UI_RATING_COLOR), he.UI_TAG_COLOR = i((E = e.ui) == null ? void 0 : E.tagColor, Se.UI_TAG_COLOR); try { const me = Array.from(document.querySelectorAll(".mjr-assets-manager")); - for (const Pe of me) - Pe.style.setProperty("--mjr-star-active", fe.BADGE_STAR_COLOR), Pe.style.setProperty("--mjr-badge-image", fe.BADGE_IMAGE_COLOR), Pe.style.setProperty("--mjr-badge-video", fe.BADGE_VIDEO_COLOR), Pe.style.setProperty("--mjr-badge-audio", fe.BADGE_AUDIO_COLOR), Pe.style.setProperty("--mjr-badge-model3d", fe.BADGE_MODEL3D_COLOR), Pe.style.setProperty( + for (const He of me) + He.style.setProperty("--mjr-star-active", he.BADGE_STAR_COLOR), He.style.setProperty("--mjr-badge-image", he.BADGE_IMAGE_COLOR), He.style.setProperty("--mjr-badge-video", he.BADGE_VIDEO_COLOR), He.style.setProperty("--mjr-badge-audio", he.BADGE_AUDIO_COLOR), He.style.setProperty("--mjr-badge-model3d", he.BADGE_MODEL3D_COLOR), He.style.setProperty( "--mjr-badge-duplicate-alert", - fe.BADGE_DUPLICATE_ALERT_COLOR - ), Pe.style.setProperty("--mjr-card-hover-color", fe.UI_CARD_HOVER_COLOR), Pe.style.setProperty( + he.BADGE_DUPLICATE_ALERT_COLOR + ), He.style.setProperty("--mjr-card-hover-color", he.UI_CARD_HOVER_COLOR), He.style.setProperty( "--mjr-card-selection-color", - fe.UI_CARD_SELECTION_COLOR - ), Pe.style.setProperty("--mjr-rating-color", fe.UI_RATING_COLOR), Pe.style.setProperty("--mjr-tag-color", fe.UI_TAG_COLOR); + he.UI_CARD_SELECTION_COLOR + ), He.style.setProperty("--mjr-rating-color", he.UI_RATING_COLOR), He.style.setProperty("--mjr-tag-color", he.UI_TAG_COLOR); } catch (me) { ($ = console.debug) == null || $.call(console, me); } - fe.INFINITE_SCROLL_ENABLED = !!((E = e.infiniteScroll) != null && E.enabled), fe.INFINITE_SCROLL_ROOT_MARGIN = String( - ((oe = e.infiniteScroll) == null ? void 0 : oe.rootMargin) || Ge.INFINITE_SCROLL_ROOT_MARGIN - ), fe.INFINITE_SCROLL_THRESHOLD = Math.max( + he.INFINITE_SCROLL_ENABLED = !!((H = e.infiniteScroll) != null && H.enabled), he.INFINITE_SCROLL_ROOT_MARGIN = String( + ((ne = e.infiniteScroll) == null ? void 0 : ne.rootMargin) || Se.INFINITE_SCROLL_ROOT_MARGIN + ), he.INFINITE_SCROLL_THRESHOLD = Math.max( 0, Math.min( 1, - Gn((M = e.infiniteScroll) == null ? void 0 : M.threshold, Ge.INFINITE_SCROLL_THRESHOLD) + xn((M = e.infiniteScroll) == null ? void 0 : M.threshold, Se.INFINITE_SCROLL_THRESHOLD) ) - ), fe.BOTTOM_GAP_PX = Math.max( + ), he.BOTTOM_GAP_PX = Math.max( 0, Math.min( 5e3, - Math.round(Gn((j = e.infiniteScroll) == null ? void 0 : j.bottomGapPx, Ge.BOTTOM_GAP_PX)) + Math.round(xn((v = e.infiniteScroll) == null ? void 0 : v.bottomGapPx, Se.BOTTOM_GAP_PX)) ) - ), fe.VIEWER_ALLOW_PAN_AT_ZOOM_1 = !!((O = e.viewer) != null && O.allowPanAtZoom1), fe.VIEWER_DISABLE_WEBGL_VIDEO = !!((D = e.viewer) != null && D.disableWebGL), fe.VIEWER_PAUSE_DURING_EXECUTION = !!(((q = e.viewer) == null ? void 0 : q.pauseDuringExecution) ?? Ge.VIEWER_PAUSE_DURING_EXECUTION), fe.FLOATING_VIEWER_PAUSE_DURING_EXECUTION = !!(((ee = e.viewer) == null ? void 0 : ee.floatingPauseDuringExecution) ?? Ge.FLOATING_VIEWER_PAUSE_DURING_EXECUTION), fe.MFV_LIVE_DEFAULT = ((ce = e.viewer) == null ? void 0 : ce.mfvLiveDefault) ?? Ge.MFV_LIVE_DEFAULT, fe.MFV_PREVIEW_DEFAULT = ((ue = e.viewer) == null ? void 0 : ue.mfvPreviewDefault) ?? Ge.MFV_PREVIEW_DEFAULT; + ), he.VIEWER_ALLOW_PAN_AT_ZOOM_1 = !!((F = e.viewer) != null && F.allowPanAtZoom1), he.VIEWER_DISABLE_WEBGL_VIDEO = !!((D = e.viewer) != null && D.disableWebGL), he.VIEWER_PAUSE_DURING_EXECUTION = !!(((q = e.viewer) == null ? void 0 : q.pauseDuringExecution) ?? Se.VIEWER_PAUSE_DURING_EXECUTION), he.FLOATING_VIEWER_PAUSE_DURING_EXECUTION = !!(((ee = e.viewer) == null ? void 0 : ee.floatingPauseDuringExecution) ?? Se.FLOATING_VIEWER_PAUSE_DURING_EXECUTION), he.MFV_LIVE_DEFAULT = ((ae = e.viewer) == null ? void 0 : ae.mfvLiveDefault) ?? Se.MFV_LIVE_DEFAULT, he.MFV_PREVIEW_DEFAULT = ((ue = e.viewer) == null ? void 0 : ue.mfvPreviewDefault) ?? Se.MFV_PREVIEW_DEFAULT; { const me = String( - ((U = e.viewer) == null ? void 0 : U.mfvPreviewMethod) || Ge.MFV_PREVIEW_METHOD + ((B = e.viewer) == null ? void 0 : B.mfvPreviewMethod) || Se.MFV_PREVIEW_METHOD ).toLowerCase(); - fe.MFV_PREVIEW_METHOD = ["default", "auto", "latent2rgb", "taesd", "none"].includes( + he.MFV_PREVIEW_METHOD = ["default", "auto", "latent2rgb", "taesd", "none"].includes( me - ) ? me : Ge.MFV_PREVIEW_METHOD; + ) ? me : Se.MFV_PREVIEW_METHOD; } { const me = String(((Q = e.viewer) == null ? void 0 : Q.mfvSidebarPosition) || "right").toLowerCase(); - fe.MFV_SIDEBAR_POSITION = ["left", "right", "bottom"].includes(me) ? me : "right"; + he.MFV_SIDEBAR_POSITION = ["left", "right", "bottom"].includes(me) ? me : "right"; } - fe.VIEWER_VIDEO_GRADE_THROTTLE_FPS = Math.max( + he.VIEWER_VIDEO_GRADE_THROTTLE_FPS = Math.max( 1, Math.min( 60, Math.round( - Gn( + xn( (_ = e.viewer) == null ? void 0 : _.videoGradeThrottleFps, - Ge.VIEWER_VIDEO_GRADE_THROTTLE_FPS + Se.VIEWER_VIDEO_GRADE_THROTTLE_FPS ) ) ) - ), fe.VIEWER_SCOPES_FPS = Math.max( + ), he.VIEWER_SCOPES_FPS = Math.max( 1, Math.min( 60, - Math.round(Gn((le = e.viewer) == null ? void 0 : le.scopesFps, Ge.VIEWER_SCOPES_FPS)) + Math.round(xn((le = e.viewer) == null ? void 0 : le.scopesFps, Se.VIEWER_SCOPES_FPS)) ) - ), fe.VIEWER_META_TTL_MS = Math.max( + ), he.VIEWER_META_TTL_MS = Math.max( 1e3, Math.min( 10 * 6e4, - Math.round(Gn((de = e.viewer) == null ? void 0 : de.metaTtlMs, Ge.VIEWER_META_TTL_MS)) + Math.round(xn((ce = e.viewer) == null ? void 0 : ce.metaTtlMs, Se.VIEWER_META_TTL_MS)) ) - ), fe.VIEWER_META_MAX_ENTRIES = Math.max( + ), he.VIEWER_META_MAX_ENTRIES = Math.max( 50, Math.min( 5e3, Math.round( - Gn((se = e.viewer) == null ? void 0 : se.metaMaxEntries, Ge.VIEWER_META_MAX_ENTRIES) + xn((de = e.viewer) == null ? void 0 : de.metaMaxEntries, Se.VIEWER_META_MAX_ENTRIES) ) ) - ), fe.WORKFLOW_MINIMAP_ENABLED = !!(((ge = e.workflowMinimap) == null ? void 0 : ge.enabled) ?? !1), fe.RT_HYDRATE_CONCURRENCY = Math.max( + ), he.WORKFLOW_MINIMAP_ENABLED = !!(((ge = e.workflowMinimap) == null ? void 0 : ge.enabled) ?? !1), he.RT_HYDRATE_CONCURRENCY = Math.max( 1, Math.min( 16, Math.round( - Gn((je = e.rtHydrate) == null ? void 0 : je.concurrency, Ge.RT_HYDRATE_CONCURRENCY) + xn((Le = e.rtHydrate) == null ? void 0 : Le.concurrency, Se.RT_HYDRATE_CONCURRENCY) ) ) - ), fe.RT_HYDRATE_QUEUE_MAX = Math.max( + ), he.RT_HYDRATE_QUEUE_MAX = Math.max( 10, Math.min( 5e3, - Math.round(Gn((Se = e.rtHydrate) == null ? void 0 : Se.queueMax, Ge.RT_HYDRATE_QUEUE_MAX)) + Math.round(xn((xe = e.rtHydrate) == null ? void 0 : xe.queueMax, Se.RT_HYDRATE_QUEUE_MAX)) ) - ), fe.RT_HYDRATE_SEEN_MAX = Math.max( + ), he.RT_HYDRATE_SEEN_MAX = Math.max( 1e3, Math.min( 2e5, - Math.round(Gn((ke = e.rtHydrate) == null ? void 0 : ke.seenMax, Ge.RT_HYDRATE_SEEN_MAX)) + Math.round(xn((Xe = e.rtHydrate) == null ? void 0 : Xe.seenMax, Se.RT_HYDRATE_SEEN_MAX)) ) - ), fe.RT_HYDRATE_PRUNE_BUDGET = Math.max( + ), he.RT_HYDRATE_PRUNE_BUDGET = Math.max( 10, Math.min( 1e4, Math.round( - Gn((we = e.rtHydrate) == null ? void 0 : we.pruneBudget, Ge.RT_HYDRATE_PRUNE_BUDGET) + xn((Me = e.rtHydrate) == null ? void 0 : Me.pruneBudget, Se.RT_HYDRATE_PRUNE_BUDGET) ) ) - ), fe.RT_HYDRATE_SEEN_TTL_MS = Math.max( + ), he.RT_HYDRATE_SEEN_TTL_MS = Math.max( 5e3, Math.min( 360 * 6e4, Math.round( - Gn((Je = e.rtHydrate) == null ? void 0 : Je.seenTtlMs, Ge.RT_HYDRATE_SEEN_TTL_MS) + xn((Fe = e.rtHydrate) == null ? void 0 : Fe.seenTtlMs, Se.RT_HYDRATE_SEEN_TTL_MS) ) ) - ), fe.DELETE_CONFIRMATION = !!(($e = e.safety) != null && $e.confirmDeletion), fe.DEBUG_VERBOSE_ERRORS = !!((qe = e.observability) != null && qe.verboseErrors), fe.WATCHER_MAX_PENDING = Math.max( + ), he.DELETE_CONFIRMATION = !!((it = e.safety) != null && it.confirmDeletion), he.DEBUG_VERBOSE_ERRORS = !!((qe = e.observability) != null && qe.verboseErrors), he.WATCHER_MAX_PENDING = Math.max( 10, - Math.min(5e3, Math.round(Gn((Ue = e.watcher) == null ? void 0 : Ue.maxPending, 500))) - ), fe.WATCHER_MIN_SIZE = Math.max( + Math.min(5e3, Math.round(xn((Pe = e.watcher) == null ? void 0 : Pe.maxPending, 500))) + ), he.WATCHER_MIN_SIZE = Math.max( 0, - Math.min(1e6, Math.round(Gn((Te = e.watcher) == null ? void 0 : Te.minSize, 100))) - ), fe.WATCHER_MAX_SIZE = Math.max( + Math.min(1e6, Math.round(xn((Re = e.watcher) == null ? void 0 : Re.minSize, 100))) + ), he.WATCHER_MAX_SIZE = Math.max( 1e5, - Math.min(17179869184, Math.round(Gn((Oe = e.watcher) == null ? void 0 : Oe.maxSize, 4294967296))) - ), fe.DB_TIMEOUT_MS = Math.max( + Math.min(17179869184, Math.round(xn((rt = e.watcher) == null ? void 0 : rt.maxSize, 4294967296))) + ), he.DB_TIMEOUT_MS = Math.max( 1e3, - Math.min(3e4, Math.round(Gn((pt = e.db) == null ? void 0 : pt.timeoutMs, 5e3))) - ), fe.DB_MAX_CONNECTIONS = Math.max( + Math.min(3e4, Math.round(xn((Te = e.db) == null ? void 0 : Te.timeoutMs, 5e3))) + ), he.DB_MAX_CONNECTIONS = Math.max( 1, - Math.min(100, Math.round(Gn((Me = e.db) == null ? void 0 : Me.maxConnections, 10))) - ), fe.DB_QUERY_TIMEOUT_MS = Math.max( + Math.min(100, Math.round(xn((qt = e.db) == null ? void 0 : qt.maxConnections, 10))) + ), he.DB_QUERY_TIMEOUT_MS = Math.max( 500, - Math.min(1e4, Math.round(Gn((Xt = e.db) == null ? void 0 : Xt.queryTimeoutMs, 1e3))) - ), fe.SEARCH_REQUEST_LIMIT = Math.max( + Math.min(1e4, Math.round(xn((kt = e.db) == null ? void 0 : kt.queryTimeoutMs, 1e3))) + ), he.SEARCH_REQUEST_LIMIT = Math.max( 10, Math.min( - Ge.MAX_PAGE_SIZE || 2e3, - Math.round(Gn((Mt = e.search) == null ? void 0 : Mt.maxResults, Ge.SEARCH_DEFAULT_LIMIT)) + Se.MAX_PAGE_SIZE || 2e3, + Math.round(xn((we = e.search) == null ? void 0 : we.maxResults, Se.SEARCH_DEFAULT_LIMIT)) ) ); }; async function oa() { var e, t, n; try { - const i = await kg(); + const i = await Xg(); if (!(i != null && i.ok)) return; const o = (e = i.data) == null ? void 0 : e.prefs; if (!o || typeof o != "object") return; - const r = Xn(); - if (r.security = r.security || {}, r.security.safeMode = kn(o.safe_mode, r.security.safeMode), r.security.allowWrite = kn(o.allow_write, r.security.allowWrite), r.security.requireAuth = kn(o.require_auth, r.security.requireAuth), r.security.allowRemoteWrite = kn( + const r = kn(); + if (r.security = r.security || {}, r.security.safeMode = Nn(o.safe_mode, r.security.safeMode), r.security.allowWrite = Nn(o.allow_write, r.security.allowWrite), r.security.requireAuth = Nn(o.require_auth, r.security.requireAuth), r.security.allowRemoteWrite = Nn( o.allow_remote_write, r.security.allowRemoteWrite - ), r.security.allowInsecureTokenTransport = kn( + ), r.security.allowInsecureTokenTransport = Nn( o.allow_insecure_token_transport, r.security.allowInsecureTokenTransport - ), r.security.allowDelete = kn( + ), r.security.allowDelete = Nn( o.allow_delete, r.security.allowDelete - ), r.security.allowRename = kn( + ), r.security.allowRename = Nn( o.allow_rename, r.security.allowRename - ), r.security.allowOpenInFolder = kn( + ), r.security.allowOpenInFolder = Nn( o.allow_open_in_folder, r.security.allowOpenInFolder - ), r.security.allowResetIndex = kn( + ), r.security.allowResetIndex = Nn( o.allow_reset_index, r.security.allowResetIndex - ), r.security.tokenConfigured = kn( + ), r.security.tokenConfigured = Nn( o.token_configured, r.security.tokenConfigured ), r.security.tokenHint = String(o.token_hint || "").trim(), !String(r.security.apiToken || "").trim()) try { - const l = await kf(), a = String(((t = l == null ? void 0 : l.data) == null ? void 0 : t.token) || "").trim(); + const l = await Xf(), a = String(((t = l == null ? void 0 : l.data) == null ? void 0 : t.token) || "").trim(); l != null && l.ok && a && (r.security.apiToken = a); } catch (l) { (n = console.debug) == null || n.call(console, l); } - Be(r), At(r), oi( + Ue(r), Zt(r), oi( "mjr-settings-changed", { key: "security" }, { warnPrefix: "[Majoor]" } @@ -5685,18 +5685,18 @@ async function oa() { console.warn("[Majoor] failed to sync backend security settings", i); } } -async function Ph() { +async function PC() { var e; try { const t = await pf(); if (!(t != null && t.ok)) return; const n = (e = t.data) == null ? void 0 : e.prefs; if (!n || typeof n != "object") return; - const i = Xn(); - i.ai = i.ai || {}, i.ai.vectorSearchEnabled = kn( + const i = kn(); + i.ai = i.ai || {}, i.ai.vectorSearchEnabled = Nn( n.enabled, i.ai.vectorSearchEnabled ?? !0 - ), Be(i), At(i), oi( + ), Ue(i), Zt(i), oi( "mjr-settings-changed", { key: "ai.vectorSearchEnabled" }, { warnPrefix: "[Majoor]" } @@ -5705,18 +5705,18 @@ async function Ph() { console.warn("[Majoor] failed to sync backend vector search settings", t); } } -async function Qh() { +async function QC() { var e; try { const t = await ff(); if (!(t != null && t.ok)) return; const n = (e = t.data) == null ? void 0 : e.prefs; if (!n || typeof n != "object") return; - const i = Xn(); - i.executionGrouping = i.executionGrouping || {}, i.executionGrouping.enabled = kn( + const i = kn(); + i.executionGrouping = i.executionGrouping || {}, i.executionGrouping.enabled = Nn( n.enabled, - i.executionGrouping.enabled ?? Ge.EXECUTION_GROUPING_ENABLED - ), Be(i), At(i), oi( + i.executionGrouping.enabled ?? Se.EXECUTION_GROUPING_ENABLED + ), Ue(i), Zt(i), oi( "mjr-settings-changed", { key: "executionGrouping.enabled" }, { warnPrefix: "[Majoor]" } @@ -5725,8 +5725,8 @@ async function Qh() { console.warn("[Majoor] failed to sync backend execution grouping settings", t); } } -const _h = 300; -function $c(e, t = _h) { +const _C = 300; +function es(e, t = _C) { let n; const i = (...o) => { clearTimeout(n), n = setTimeout(() => e(...o), t); @@ -5737,14 +5737,14 @@ function $c(e, t = _h) { clearTimeout(n), e(...o); }, i; } -const Sn = "Majoor", kl = "Majoor Assets Manager"; -function $h(e, t, n) { - var c, s, d, u, I, y, S, Z, C, g, A, p, b, L, h, G, W, f, X, x, T, v, w, R, Y, F, N; - const i = (V, k) => [kl, V, k], o = (V) => [kl, m("cat.cards", "Cards"), V], r = (V) => [kl, m("cat.badges", "Badges"), V], l = (V) => [kl, m("cat.badges", "Badges"), V], a = (V, k) => { - let K = String(V || "").trim(); - return /^[0-9a-fA-F]{6}$/.test(K) && (K = `#${K}`), /^#[0-9a-fA-F]{6}$/.test(K) ? K.toUpperCase() : k; +const Sn = "Majoor", Xl = "Majoor Assets Manager"; +function $C(e, t, n) { + var c, s, d, u, I, A, h, S, W, g, y, p, b, L, C, G, Z, f, X, x, K, j, w, R, V, O, k; + const i = (Y, N) => [Xl, Y, N], o = (Y) => [Xl, m("cat.cards", "Cards"), Y], r = (Y) => [Xl, m("cat.badges", "Badges"), Y], l = (Y) => [Xl, m("cat.badges", "Badges"), Y], a = (Y, N) => { + let U = String(Y || "").trim(); + return /^[0-9a-fA-F]{6}$/.test(U) && (U = `#${U}`), /^#[0-9a-fA-F]{6}$/.test(U) ? U.toUpperCase() : N; }; - (c = t.grid) != null && c.minSizePreset || (t.grid = t.grid || {}, t.grid.minSizePreset = mc(t.grid.minSize), Be(t)), e({ + (c = t.grid) != null && c.minSizePreset || (t.grid = t.grid || {}, t.grid.minSizePreset = gc(t.grid.minSize), Ue(t)), e({ id: `${Sn}.Cards.ThumbSize`, category: o(m("setting.grid.cardSize.group", "Card size")), name: m("setting.grid.cardSize.name", "Majoor: Card Size"), @@ -5754,27 +5754,27 @@ function $h(e, t, n) { ), type: "combo", defaultValue: (() => { - var K, z; - const V = Ks( - String(((K = t.grid) == null ? void 0 : K.minSizePreset) || "").toLowerCase(), + var U, z; + const Y = Ds( + String(((U = t.grid) == null ? void 0 : U.minSizePreset) || "").toLowerCase(), eI, - mc((z = t.grid) == null ? void 0 : z.minSize) - ), k = { + gc((z = t.grid) == null ? void 0 : z.minSize) + ), N = { small: m("setting.grid.cardSize.small", "Small"), medium: m("setting.grid.cardSize.medium", "Medium"), large: m("setting.grid.cardSize.large", "Large") }; - return k[V] || k.medium; + return N[Y] || N.medium; })(), options: [ m("setting.grid.cardSize.small", "Small"), m("setting.grid.cardSize.medium", "Medium"), m("setting.grid.cardSize.large", "Large") ], - onChange: (V) => { - const k = String(V || "").trim().toLowerCase(), K = m("setting.grid.cardSize.small", "Small").toLowerCase(), z = m("setting.grid.cardSize.medium", "Medium").toLowerCase(), B = m("setting.grid.cardSize.large", "Large").toLowerCase(); + onChange: (Y) => { + const N = String(Y || "").trim().toLowerCase(), U = m("setting.grid.cardSize.small", "Small").toLowerCase(), z = m("setting.grid.cardSize.medium", "Medium").toLowerCase(), T = m("setting.grid.cardSize.large", "Large").toLowerCase(); let J = "medium"; - k === K || k === "small" || k === "petit" ? J = "small" : k === B || k === "large" || k === "grand" ? J = "large" : (k === z || k === "medium" || k === "moyen") && (J = "medium"), t.grid.minSizePreset = J, t.grid.minSize = $g[J], Be(t), At(t), n("grid.minSizePreset"); + N === U || N === "small" || N === "petit" ? J = "small" : N === T || N === "large" || N === "grand" ? J = "large" : (N === z || N === "medium" || N === "moyen") && (J = "medium"), t.grid.minSizePreset = J, t.grid.minSize = $g[J], Ue(t), Zt(t), n("grid.minSizePreset"); } }), e({ id: `${Sn}.Cards.CustomThumbSize`, @@ -5784,9 +5784,9 @@ function $h(e, t, n) { type: "number", defaultValue: Math.max(60, Math.min(600, Number((s = t.grid) == null ? void 0 : s.minSize) || 120)), attrs: { min: 60, max: 600, step: 10 }, - onChange: (V) => { - const k = Math.max(60, Math.min(600, Math.round(Number(V) || 120))); - t.grid.minSize = k, t.grid.minSizePreset = mc(k), Be(t), At(t), n("grid.minSize"); + onChange: (Y) => { + const N = Math.max(60, Math.min(600, Math.round(Number(Y) || 120))); + t.grid.minSize = N, t.grid.minSizePreset = gc(N), Ue(t), Zt(t), n("grid.minSize"); } }), e({ id: `${Sn}.Grid.ShowDetails`, @@ -5795,8 +5795,8 @@ function $h(e, t, n) { tooltip: "Show the bottom details panel on asset cards (filename, date, etc.)", type: "boolean", defaultValue: !!((d = t.grid) != null && d.showDetails), - onChange: (V) => { - t.grid.showDetails = !!V, Be(t), At(t), n("grid.showDetails"); + onChange: (Y) => { + t.grid.showDetails = !!Y, Ue(t), Zt(t), n("grid.showDetails"); } }), e({ id: `${Sn}.Grid.ShowFilename`, @@ -5805,8 +5805,8 @@ function $h(e, t, n) { tooltip: "Display filename in details panel", type: "boolean", defaultValue: !!((u = t.grid) != null && u.showFilename), - onChange: (V) => { - t.grid.showFilename = !!V, Be(t), At(t), n("grid.showFilename"); + onChange: (Y) => { + t.grid.showFilename = !!Y, Ue(t), Zt(t), n("grid.showFilename"); } }), e({ id: `${Sn}.Grid.ShowDate`, @@ -5815,8 +5815,8 @@ function $h(e, t, n) { tooltip: "Display date and time in details panel", type: "boolean", defaultValue: !!((I = t.grid) != null && I.showDate), - onChange: (V) => { - t.grid.showDate = !!V, Be(t), At(t), n("grid.showDate"); + onChange: (Y) => { + t.grid.showDate = !!Y, Ue(t), Zt(t), n("grid.showDate"); } }), e({ id: `${Sn}.Grid.ShowDimensions`, @@ -5824,9 +5824,9 @@ function $h(e, t, n) { name: "Show dimensions", tooltip: "Display resolution (WxH) in details panel", type: "boolean", - defaultValue: !!((y = t.grid) != null && y.showDimensions), - onChange: (V) => { - t.grid.showDimensions = !!V, Be(t), At(t), n("grid.showDimensions"); + defaultValue: !!((A = t.grid) != null && A.showDimensions), + onChange: (Y) => { + t.grid.showDimensions = !!Y, Ue(t), Zt(t), n("grid.showDimensions"); } }), e({ id: `${Sn}.Grid.ShowGenTime`, @@ -5834,9 +5834,9 @@ function $h(e, t, n) { name: "Show generation time", tooltip: "Display seconds taken to generate the asset (if available)", type: "boolean", - defaultValue: !!((S = t.grid) != null && S.showGenTime), - onChange: (V) => { - t.grid.showGenTime = !!V, Be(t), At(t), n("grid.showGenTime"); + defaultValue: !!((h = t.grid) != null && h.showGenTime), + onChange: (Y) => { + t.grid.showGenTime = !!Y, Ue(t), Zt(t), n("grid.showGenTime"); } }), e({ id: `${Sn}.Grid.ShowHoverInfo`, @@ -5844,9 +5844,9 @@ function $h(e, t, n) { name: "Show prompt on hover", tooltip: "Show positive prompt and generation time as a tooltip overlay when hovering over a card thumbnail. Does not block video play-on-hover.", type: "boolean", - defaultValue: !!(((Z = t.grid) == null ? void 0 : Z.showHoverInfo) ?? Ge.GRID_SHOW_HOVER_INFO), - onChange: (V) => { - t.grid.showHoverInfo = !!V, Be(t), At(t), n("grid.showHoverInfo"); + defaultValue: !!(((S = t.grid) == null ? void 0 : S.showHoverInfo) ?? Se.GRID_SHOW_HOVER_INFO), + onChange: (Y) => { + t.grid.showHoverInfo = !!Y, Ue(t), Zt(t), n("grid.showHoverInfo"); } }), e({ id: `${Sn}.Grid.ShowWorkflowDot`, @@ -5854,9 +5854,9 @@ function $h(e, t, n) { name: "Show workflow indicator", tooltip: "Display the green dot indicating workflow metadata availability (bottom right of card)", type: "boolean", - defaultValue: !!((C = t.grid) != null && C.showWorkflowDot), - onChange: (V) => { - t.grid.showWorkflowDot = !!V, Be(t), At(t), n("grid.showWorkflowDot"); + defaultValue: !!((W = t.grid) != null && W.showWorkflowDot), + onChange: (Y) => { + t.grid.showWorkflowDot = !!Y, Ue(t), Zt(t), n("grid.showWorkflowDot"); } }), e({ id: `${Sn}.Grid.ShowExtBadge`, @@ -5865,8 +5865,8 @@ function $h(e, t, n) { tooltip: "Display format badges (e.g. JPG, MP4) on thumbnails", type: "boolean", defaultValue: !!((g = t.grid) != null && g.showExtBadge), - onChange: (V) => { - t.grid.showExtBadge = !!V, Be(t), At(t), n("grid.showExtBadge"); + onChange: (Y) => { + t.grid.showExtBadge = !!Y, Ue(t), Zt(t), n("grid.showExtBadge"); } }), e({ id: `${Sn}.Grid.ShowRatingBadge`, @@ -5874,9 +5874,9 @@ function $h(e, t, n) { name: "Show ratings", tooltip: "Display star ratings on thumbnails", type: "boolean", - defaultValue: !!((A = t.grid) != null && A.showRatingBadge), - onChange: (V) => { - t.grid.showRatingBadge = !!V, Be(t), At(t), n("grid.showRatingBadge"); + defaultValue: !!((y = t.grid) != null && y.showRatingBadge), + onChange: (Y) => { + t.grid.showRatingBadge = !!Y, Ue(t), Zt(t), n("grid.showRatingBadge"); } }), e({ id: `${Sn}.Grid.ShowTagsBadge`, @@ -5885,8 +5885,8 @@ function $h(e, t, n) { tooltip: "Display a small indicator if an asset has tags", type: "boolean", defaultValue: !!((p = t.grid) != null && p.showTagsBadge), - onChange: (V) => { - t.grid.showTagsBadge = !!V, Be(t), At(t), n("grid.showTagsBadge"); + onChange: (Y) => { + t.grid.showTagsBadge = !!Y, Ue(t), Zt(t), n("grid.showTagsBadge"); } }), e({ id: `${Sn}.Badges.StarColor`, @@ -5897,9 +5897,9 @@ function $h(e, t, n) { "Color of rating stars on thumbnails (hex, e.g. #FFD45A)" ), type: "color", - defaultValue: a((b = t.grid) == null ? void 0 : b.starColor, Ge.BADGE_STAR_COLOR), - onChange: (V) => { - t.grid.starColor = a(V, Ge.BADGE_STAR_COLOR), Be(t), At(t), n("grid.starColor"); + defaultValue: a((b = t.grid) == null ? void 0 : b.starColor, Se.BADGE_STAR_COLOR), + onChange: (Y) => { + t.grid.starColor = a(Y, Se.BADGE_STAR_COLOR), Ue(t), Zt(t), n("grid.starColor"); } }), e({ id: `${Sn}.Badges.ImageColor`, @@ -5912,13 +5912,13 @@ function $h(e, t, n) { type: "color", defaultValue: a( (L = t.grid) == null ? void 0 : L.badgeImageColor, - Ge.BADGE_IMAGE_COLOR + Se.BADGE_IMAGE_COLOR ), - onChange: (V) => { + onChange: (Y) => { t.grid.badgeImageColor = a( - V, - Ge.BADGE_IMAGE_COLOR - ), Be(t), At(t), n("grid.badgeImageColor"); + Y, + Se.BADGE_IMAGE_COLOR + ), Ue(t), Zt(t), n("grid.badgeImageColor"); } }), e({ id: `${Sn}.Badges.VideoColor`, @@ -5930,14 +5930,14 @@ function $h(e, t, n) { ), type: "color", defaultValue: a( - (h = t.grid) == null ? void 0 : h.badgeVideoColor, - Ge.BADGE_VIDEO_COLOR + (C = t.grid) == null ? void 0 : C.badgeVideoColor, + Se.BADGE_VIDEO_COLOR ), - onChange: (V) => { + onChange: (Y) => { t.grid.badgeVideoColor = a( - V, - Ge.BADGE_VIDEO_COLOR - ), Be(t), At(t), n("grid.badgeVideoColor"); + Y, + Se.BADGE_VIDEO_COLOR + ), Ue(t), Zt(t), n("grid.badgeVideoColor"); } }), e({ id: `${Sn}.Badges.AudioColor`, @@ -5950,13 +5950,13 @@ function $h(e, t, n) { type: "color", defaultValue: a( (G = t.grid) == null ? void 0 : G.badgeAudioColor, - Ge.BADGE_AUDIO_COLOR + Se.BADGE_AUDIO_COLOR ), - onChange: (V) => { + onChange: (Y) => { t.grid.badgeAudioColor = a( - V, - Ge.BADGE_AUDIO_COLOR - ), Be(t), At(t), n("grid.badgeAudioColor"); + Y, + Se.BADGE_AUDIO_COLOR + ), Ue(t), Zt(t), n("grid.badgeAudioColor"); } }), e({ id: `${Sn}.Badges.Model3dColor`, @@ -5968,14 +5968,14 @@ function $h(e, t, n) { ), type: "color", defaultValue: a( - (W = t.grid) == null ? void 0 : W.badgeModel3dColor, - Ge.BADGE_MODEL3D_COLOR + (Z = t.grid) == null ? void 0 : Z.badgeModel3dColor, + Se.BADGE_MODEL3D_COLOR ), - onChange: (V) => { + onChange: (Y) => { t.grid.badgeModel3dColor = a( - V, - Ge.BADGE_MODEL3D_COLOR - ), Be(t), At(t), n("grid.badgeModel3dColor"); + Y, + Se.BADGE_MODEL3D_COLOR + ), Ue(t), Zt(t), n("grid.badgeModel3dColor"); } }), e({ id: `${Sn}.Badges.DuplicateAlertColor`, @@ -5988,13 +5988,13 @@ function $h(e, t, n) { type: "color", defaultValue: a( (f = t.grid) == null ? void 0 : f.badgeDuplicateAlertColor, - Ge.BADGE_DUPLICATE_ALERT_COLOR + Se.BADGE_DUPLICATE_ALERT_COLOR ), - onChange: (V) => { + onChange: (Y) => { t.grid.badgeDuplicateAlertColor = a( - V, - Ge.BADGE_DUPLICATE_ALERT_COLOR - ), Be(t), At(t), n("grid.badgeDuplicateAlertColor"); + Y, + Se.BADGE_DUPLICATE_ALERT_COLOR + ), Ue(t), Zt(t), n("grid.badgeDuplicateAlertColor"); } }), e({ id: `${Sn}.Grid.PageSize`, @@ -6003,13 +6003,13 @@ function $h(e, t, n) { tooltip: m("setting.grid.pagesize.desc"), type: "number", defaultValue: t.grid.pageSize, - attrs: { min: 50, max: Number(fe.MAX_PAGE_SIZE) || 2e3, step: 50 }, - onChange: (V) => { - const k = Number(fe.MAX_PAGE_SIZE) || 2e3; + attrs: { min: 50, max: Number(he.MAX_PAGE_SIZE) || 2e3, step: 50 }, + onChange: (Y) => { + const N = Number(he.MAX_PAGE_SIZE) || 2e3; t.grid.pageSize = Math.max( 50, - Math.min(k, Number(V) || Ge.DEFAULT_PAGE_SIZE) - ), Be(t), At(t), n("grid.pageSize"); + Math.min(N, Number(Y) || Se.DEFAULT_PAGE_SIZE) + ), Ue(t), Zt(t), n("grid.pageSize"); } }), e({ id: `${Sn}.InfiniteScroll.Enabled`, @@ -6018,8 +6018,8 @@ function $h(e, t, n) { tooltip: m("setting.nav.infinite.desc"), type: "boolean", defaultValue: !!((X = t.infiniteScroll) != null && X.enabled), - onChange: (V) => { - t.infiniteScroll = t.infiniteScroll || {}, t.infiniteScroll.enabled = !!V, Be(t), At(t), n("infiniteScroll.enabled"); + onChange: (Y) => { + t.infiniteScroll = t.infiniteScroll || {}, t.infiniteScroll.enabled = !!Y, Ue(t), Zt(t), n("infiniteScroll.enabled"); } }), e({ id: `${Sn}.Sidebar.Position`, @@ -6029,8 +6029,8 @@ function $h(e, t, n) { type: "combo", defaultValue: ((x = t.sidebar) == null ? void 0 : x.position) || "right", options: ["left", "right"], - onChange: (V) => { - t.sidebar = t.sidebar || {}, t.sidebar.position = V === "left" ? "left" : "right", Be(t), n("sidebar.position"); + onChange: (Y) => { + t.sidebar = t.sidebar || {}, t.sidebar.position = Y === "left" ? "left" : "right", Ue(t), n("sidebar.position"); } }), e({ id: `${Sn}.Sidebar.ShowPreviewThumb`, @@ -6038,9 +6038,9 @@ function $h(e, t, n) { name: "Show sidebar preview thumb", tooltip: "Show/hide the large media preview at the top of the sidebar metadata panel.", type: "boolean", - defaultValue: !!(((T = t.sidebar) == null ? void 0 : T.showPreviewThumb) ?? !0), - onChange: (V) => { - t.sidebar = t.sidebar || {}, t.sidebar.showPreviewThumb = !!V, Be(t), n("sidebar.showPreviewThumb"); + defaultValue: !!(((K = t.sidebar) == null ? void 0 : K.showPreviewThumb) ?? !0), + onChange: (Y) => { + t.sidebar = t.sidebar || {}, t.sidebar.showPreviewThumb = !!Y, Ue(t), n("sidebar.showPreviewThumb"); } }), e({ id: `${Sn}.Sidebar.WidthPx`, @@ -6048,17 +6048,17 @@ function $h(e, t, n) { name: "Sidebar width (px)", tooltip: "Set the details sidebar width in pixels (240-640).", type: "number", - defaultValue: Math.max(240, Math.min(640, Number((v = t.sidebar) == null ? void 0 : v.widthPx) || 360)), + defaultValue: Math.max(240, Math.min(640, Number((j = t.sidebar) == null ? void 0 : j.widthPx) || 360)), attrs: { min: 240, max: 640, step: 10 }, - onChange: (V) => { + onChange: (Y) => { t.sidebar = t.sidebar || {}, t.sidebar.widthPx = Math.max( 240, - Math.min(640, Math.round(Number(V) || 360)) - ), Be(t), n("sidebar.widthPx"); + Math.min(640, Math.round(Number(Y) || 360)) + ), Ue(t), n("sidebar.widthPx"); } }), e({ id: `${Sn}.General.HideSiblings`, @@ -6067,8 +6067,8 @@ function $h(e, t, n) { tooltip: m("setting.siblings.hide.desc"), type: "boolean", defaultValue: !!((w = t.siblings) != null && w.hidePngSiblings), - onChange: (V) => { - t.siblings = t.siblings || {}, t.siblings.hidePngSiblings = !!V, Be(t), n("siblings.hidePngSiblings"); + onChange: (Y) => { + t.siblings = t.siblings || {}, t.siblings.hidePngSiblings = !!Y, Ue(t), n("siblings.hidePngSiblings"); } }), e({ id: `${Sn}.Grid.VideoAutoplayMode`, @@ -6083,28 +6083,28 @@ function $h(e, t, n) { ), type: "combo", defaultValue: (() => { - var K, z; - let V = (K = t.grid) == null ? void 0 : K.videoAutoplayMode; - V == null && (V = ((z = t.grid) == null ? void 0 : z.videoHoverAutoplay) === !1 ? "off" : "hover"), V === !0 && (V = "hover"), V === !1 && (V = "off"), V !== "hover" && V !== "always" && V !== "off" && (V = "hover"); - const k = { + var U, z; + let Y = (U = t.grid) == null ? void 0 : U.videoAutoplayMode; + Y == null && (Y = ((z = t.grid) == null ? void 0 : z.videoHoverAutoplay) === !1 ? "off" : "hover"), Y === !0 && (Y = "hover"), Y === !1 && (Y = "off"), Y !== "hover" && Y !== "always" && Y !== "off" && (Y = "hover"); + const N = { off: m("setting.grid.videoAutoplayMode.off", "Off"), hover: m("setting.grid.videoAutoplayMode.hover", "Hover"), always: m("setting.grid.videoAutoplayMode.always", "Always") }; - return k[V] || k.off; + return N[Y] || N.off; })(), options: [ m("setting.grid.videoAutoplayMode.off", "Off"), m("setting.grid.videoAutoplayMode.hover", "Hover"), m("setting.grid.videoAutoplayMode.always", "Always") ], - onChange: (V) => { - const K = { + onChange: (Y) => { + const U = { [m("setting.grid.videoAutoplayMode.off", "Off")]: "off", [m("setting.grid.videoAutoplayMode.hover", "Hover")]: "hover", [m("setting.grid.videoAutoplayMode.always", "Always")]: "always" - }[V] || "off"; - t.grid = t.grid || {}, t.grid.videoAutoplayMode = K, delete t.grid.videoHoverAutoplay, Be(t), At(t), n("grid.videoAutoplayMode"); + }[Y] || "off"; + t.grid = t.grid || {}, t.grid.videoAutoplayMode = U, delete t.grid.videoHoverAutoplay, Ue(t), Zt(t), n("grid.videoAutoplayMode"); } }), e({ id: `${Sn}.Cards.HoverColor`, @@ -6114,10 +6114,10 @@ function $h(e, t, n) { type: "color", defaultValue: a( (R = t.ui) == null ? void 0 : R.cardHoverColor, - Ge.UI_CARD_HOVER_COLOR + Se.UI_CARD_HOVER_COLOR ), - onChange: (V) => { - t.ui = t.ui || {}, t.ui.cardHoverColor = a(V, Ge.UI_CARD_HOVER_COLOR), Be(t), At(t), n("ui.cardHoverColor"); + onChange: (Y) => { + t.ui = t.ui || {}, t.ui.cardHoverColor = a(Y, Se.UI_CARD_HOVER_COLOR), Ue(t), Zt(t), n("ui.cardHoverColor"); } }), e({ id: `${Sn}.Cards.SelectionColor`, @@ -6126,14 +6126,14 @@ function $h(e, t, n) { tooltip: "Outline/accent color used for selected cards (hex, e.g. #4A90E2).", type: "color", defaultValue: a( - (Y = t.ui) == null ? void 0 : Y.cardSelectionColor, - Ge.UI_CARD_SELECTION_COLOR + (V = t.ui) == null ? void 0 : V.cardSelectionColor, + Se.UI_CARD_SELECTION_COLOR ), - onChange: (V) => { + onChange: (Y) => { t.ui = t.ui || {}, t.ui.cardSelectionColor = a( - V, - Ge.UI_CARD_SELECTION_COLOR - ), Be(t), At(t), n("ui.cardSelectionColor"); + Y, + Se.UI_CARD_SELECTION_COLOR + ), Ue(t), Zt(t), n("ui.cardSelectionColor"); } }), e({ id: `${Sn}.Badges.RatingColor`, @@ -6141,9 +6141,9 @@ function $h(e, t, n) { name: "Majoor: Rating badge color", tooltip: "Color used for rating badge text/accent (hex, e.g. #FF9500).", type: "color", - defaultValue: a((F = t.ui) == null ? void 0 : F.ratingColor, Ge.UI_RATING_COLOR), - onChange: (V) => { - t.ui = t.ui || {}, t.ui.ratingColor = a(V, Ge.UI_RATING_COLOR), Be(t), At(t), n("ui.ratingColor"); + defaultValue: a((O = t.ui) == null ? void 0 : O.ratingColor, Se.UI_RATING_COLOR), + onChange: (Y) => { + t.ui = t.ui || {}, t.ui.ratingColor = a(Y, Se.UI_RATING_COLOR), Ue(t), Zt(t), n("ui.ratingColor"); } }), e({ id: `${Sn}.Badges.TagColor`, @@ -6151,16 +6151,16 @@ function $h(e, t, n) { name: "Majoor: Tags badge color", tooltip: "Color used for tags badge text/accent (hex, e.g. #4A90E2).", type: "color", - defaultValue: a((N = t.ui) == null ? void 0 : N.tagColor, Ge.UI_TAG_COLOR), - onChange: (V) => { - t.ui = t.ui || {}, t.ui.tagColor = a(V, Ge.UI_TAG_COLOR), Be(t), At(t), n("ui.tagColor"); + defaultValue: a((k = t.ui) == null ? void 0 : k.tagColor, Se.UI_TAG_COLOR), + onChange: (Y) => { + t.ui = t.ui || {}, t.ui.tagColor = a(Y, Se.UI_TAG_COLOR), Ue(t), Zt(t), n("ui.tagColor"); } }); } -const Ti = "Majoor", eC = "Majoor Assets Manager"; -function tC(e, t, n) { - var r, l, a, c, s, d, u, I, y, S; - const i = (Z, C) => [eC, Z, C]; +const Ti = "Majoor", eh = "Majoor Assets Manager"; +function th(e, t, n) { + var r, l, a, c, s, d, u, I, A, h; + const i = (S, W) => [eh, S, W]; e({ id: `${Ti}.Viewer.AllowPanAtZoom1`, category: i(m("cat.viewer"), m("setting.viewer.pan.name").replace("Majoor: ", "")), @@ -6168,8 +6168,8 @@ function tC(e, t, n) { tooltip: m("setting.viewer.pan.desc"), type: "boolean", defaultValue: !!((r = t.viewer) != null && r.allowPanAtZoom1), - onChange: (Z) => { - t.viewer = t.viewer || {}, t.viewer.allowPanAtZoom1 = !!Z, Be(t), At(t), n("viewer.allowPanAtZoom1"); + onChange: (S) => { + t.viewer = t.viewer || {}, t.viewer.allowPanAtZoom1 = !!S, Ue(t), Zt(t), n("viewer.allowPanAtZoom1"); } }), e({ id: `${Ti}.Viewer.DisableWebGL`, @@ -6178,8 +6178,8 @@ function tC(e, t, n) { tooltip: "Use CPU rendering (Canvas 2D) for video playback. Fixes 'black screen' issues on incompatible hardware/browsers.", type: "boolean", defaultValue: !!((l = t.viewer) != null && l.disableWebGL), - onChange: (Z) => { - t.viewer = t.viewer || {}, t.viewer.disableWebGL = !!Z, Be(t), At(t), n("viewer.disableWebGL"); + onChange: (S) => { + t.viewer = t.viewer || {}, t.viewer.disableWebGL = !!S, Ue(t), Zt(t), n("viewer.disableWebGL"); } }), e({ id: `${Ti}.Viewer.PauseDuringExecution`, @@ -6188,8 +6188,8 @@ function tC(e, t, n) { tooltip: m("setting.viewer.pauseExecution.desc"), type: "boolean", defaultValue: !!((a = t.viewer) != null && a.pauseDuringExecution), - onChange: (Z) => { - t.viewer = t.viewer || {}, t.viewer.pauseDuringExecution = !!Z, Be(t), At(t), n("viewer.pauseDuringExecution"); + onChange: (S) => { + t.viewer = t.viewer || {}, t.viewer.pauseDuringExecution = !!S, Ue(t), Zt(t), n("viewer.pauseDuringExecution"); } }), e({ id: `${Ti}.Viewer.FloatingPauseDuringExecution`, @@ -6201,8 +6201,8 @@ function tC(e, t, n) { tooltip: m("setting.viewer.floatingPauseExecution.desc"), type: "boolean", defaultValue: !!((c = t.viewer) != null && c.floatingPauseDuringExecution), - onChange: (Z) => { - t.viewer = t.viewer || {}, t.viewer.floatingPauseDuringExecution = !!Z, Be(t), At(t), n("viewer.floatingPauseDuringExecution"); + onChange: (S) => { + t.viewer = t.viewer || {}, t.viewer.floatingPauseDuringExecution = !!S, Ue(t), Zt(t), n("viewer.floatingPauseDuringExecution"); } }), e({ id: `${Ti}.Viewer.MfvLiveDefault`, @@ -6210,9 +6210,9 @@ function tC(e, t, n) { name: m("setting.viewer.mfvLiveDefault.name"), tooltip: m("setting.viewer.mfvLiveDefault.desc"), type: "boolean", - defaultValue: !!(((s = t.viewer) == null ? void 0 : s.mfvLiveDefault) ?? Ge.MFV_LIVE_DEFAULT), - onChange: (Z) => { - t.viewer = t.viewer || {}, t.viewer.mfvLiveDefault = !!Z, Be(t), At(t), n("viewer.mfvLiveDefault"); + defaultValue: !!(((s = t.viewer) == null ? void 0 : s.mfvLiveDefault) ?? Se.MFV_LIVE_DEFAULT), + onChange: (S) => { + t.viewer = t.viewer || {}, t.viewer.mfvLiveDefault = !!S, Ue(t), Zt(t), n("viewer.mfvLiveDefault"); } }), e({ id: `${Ti}.Viewer.MfvPreviewDefault`, @@ -6223,9 +6223,9 @@ function tC(e, t, n) { name: m("setting.viewer.mfvPreviewDefault.name"), tooltip: m("setting.viewer.mfvPreviewDefault.desc"), type: "boolean", - defaultValue: !!(((d = t.viewer) == null ? void 0 : d.mfvPreviewDefault) ?? Ge.MFV_PREVIEW_DEFAULT), - onChange: (Z) => { - t.viewer = t.viewer || {}, t.viewer.mfvPreviewDefault = !!Z, Be(t), At(t), n("viewer.mfvPreviewDefault"); + defaultValue: !!(((d = t.viewer) == null ? void 0 : d.mfvPreviewDefault) ?? Se.MFV_PREVIEW_DEFAULT), + onChange: (S) => { + t.viewer = t.viewer || {}, t.viewer.mfvPreviewDefault = !!S, Ue(t), Zt(t), n("viewer.mfvPreviewDefault"); } }), e({ id: `${Ti}.Viewer.MfvSidebarPosition`, @@ -6235,9 +6235,9 @@ function tC(e, t, n) { type: "combo", defaultValue: ((u = t.viewer) == null ? void 0 : u.mfvSidebarPosition) || "right", options: ["right", "left", "bottom"], - onChange: (Z) => { - const C = ["left", "right", "bottom"].includes(Z) ? Z : "right"; - t.viewer = t.viewer || {}, t.viewer.mfvSidebarPosition = C, Be(t), At(t), n("viewer.mfvSidebarPosition"); + onChange: (S) => { + const W = ["left", "right", "bottom"].includes(S) ? S : "right"; + t.viewer = t.viewer || {}, t.viewer.mfvSidebarPosition = W, Ue(t), Zt(t), n("viewer.mfvSidebarPosition"); } }), e({ id: `${Ti}.Viewer.MfvPreviewMethod`, @@ -6247,9 +6247,9 @@ function tC(e, t, n) { type: "combo", defaultValue: ((I = t.viewer) == null ? void 0 : I.mfvPreviewMethod) || "taesd", options: ["taesd", "latent2rgb", "auto", "default", "none"], - onChange: (Z) => { - const C = ["taesd", "latent2rgb", "auto", "default", "none"].includes(Z) ? Z : "taesd"; - t.viewer = t.viewer || {}, t.viewer.mfvPreviewMethod = C, Be(t), At(t), n("viewer.mfvPreviewMethod"); + onChange: (S) => { + const W = ["taesd", "latent2rgb", "auto", "default", "none"].includes(S) ? S : "taesd"; + t.viewer = t.viewer || {}, t.viewer.mfvPreviewMethod = W, Ue(t), Zt(t), n("viewer.mfvPreviewMethod"); } }), e({ id: `${Ti}.Viewer.LtxavRgbFallback`, @@ -6257,19 +6257,19 @@ function tC(e, t, n) { name: "Majoor: LTXAV RGB Preview Fallback (experimental)", tooltip: "Reuse LTXV RGB projection for LTXAV when native latent preview is unavailable. Experimental; quality may be approximate.", type: "boolean", - defaultValue: !!((y = t.viewer) != null && y.ltxavRgbFallback), - onChange: async (Z) => { - var A; - const C = !!Z, g = !!((A = t.viewer) != null && A.ltxavRgbFallback); - t.viewer = t.viewer || {}, t.viewer.ltxavRgbFallback = C, Be(t), At(t), n("viewer.ltxavRgbFallback"); + defaultValue: !!((A = t.viewer) != null && A.ltxavRgbFallback), + onChange: async (S) => { + var y; + const W = !!S, g = !!((y = t.viewer) != null && y.ltxavRgbFallback); + t.viewer = t.viewer || {}, t.viewer.ltxavRgbFallback = W, Ue(t), Zt(t), n("viewer.ltxavRgbFallback"); try { - const p = await jf(C); + const p = await jf(W); if (!(p != null && p.ok)) throw new Error( (p == null ? void 0 : p.error) || "Failed to update LTXAV RGB preview fallback setting" ); } catch (p) { - t.viewer.ltxavRgbFallback = g, Be(t), At(t), n("viewer.ltxavRgbFallback"), Ze( + t.viewer.ltxavRgbFallback = g, Ue(t), Zt(t), n("viewer.ltxavRgbFallback"), Ae( (p == null ? void 0 : p.message) || "Failed to update LTXAV RGB preview fallback setting", "error" ); @@ -6277,27 +6277,27 @@ function tC(e, t, n) { } }); try { - xf().then((Z) => { - var g, A; - if (!(Z != null && Z.ok)) return; - const C = !!((A = (g = Z == null ? void 0 : Z.data) == null ? void 0 : g.prefs) != null && A.enabled); - t.viewer = t.viewer || {}, !!t.viewer.ltxavRgbFallback !== C && (t.viewer.ltxavRgbFallback = C, Be(t), At(t), n("viewer.ltxavRgbFallback")); + xf().then((S) => { + var g, y; + if (!(S != null && S.ok)) return; + const W = !!((y = (g = S == null ? void 0 : S.data) == null ? void 0 : g.prefs) != null && y.enabled); + t.viewer = t.viewer || {}, !!t.viewer.ltxavRgbFallback !== W && (t.viewer.ltxavRgbFallback = W, Ue(t), Zt(t), n("viewer.ltxavRgbFallback")); }).catch(() => { }); - } catch (Z) { - (S = console.debug) == null || S.call(console, Z); + } catch (S) { + (h = console.debug) == null || h.call(console, S); } - ((Z, C, g, A) => { + ((S, W, g, y) => { var p; e({ - id: `${Ti}.WorkflowMinimap.${Z}`, + id: `${Ti}.WorkflowMinimap.${S}`, category: i(m("cat.viewer"), m(g).replace("Majoor: ", "")), name: m(g), - tooltip: m(A), + tooltip: m(y), type: "boolean", - defaultValue: !!((p = t.workflowMinimap) != null && p[C]), + defaultValue: !!((p = t.workflowMinimap) != null && p[W]), onChange: (b) => { - t.workflowMinimap = t.workflowMinimap || {}, t.workflowMinimap[C] = !!b, Be(t), n(`workflowMinimap.${C}`); + t.workflowMinimap = t.workflowMinimap || {}, t.workflowMinimap[W] = !!b, Ue(t), n(`workflowMinimap.${W}`); } }); })( @@ -6307,70 +6307,70 @@ function tC(e, t, n) { "setting.minimap.enabled.desc" ); } -const Xi = "Majoor", nC = "Majoor Assets Manager"; -function iC(e, t, n) { - var a, c, s, d, u, I, y, S, Z, C, g, A; - const i = (p, b) => [nC, p, b]; +const Ni = "Majoor", nh = "Majoor Assets Manager"; +function ih(e, t, n) { + var a, c, s, d, u, I, A, h, S, W, g, y; + const i = (p, b) => [nh, p, b]; e({ - id: `${Xi}.ExecutionGrouping.Enabled`, + id: `${Ni}.ExecutionGrouping.Enabled`, category: i(m("cat.scanning"), "Execution grouping"), name: "Execution job/stack grouping", tooltip: "Enable or disable all live job_id / stack_id tracking, grouping, and stack finalization logic.", type: "boolean", - defaultValue: !!(((a = t.executionGrouping) == null ? void 0 : a.enabled) ?? Ge.EXECUTION_GROUPING_ENABLED), + defaultValue: !!(((a = t.executionGrouping) == null ? void 0 : a.enabled) ?? Se.EXECUTION_GROUPING_ENABLED), onChange: async (p) => { - var h, G, W; - const b = !!(((h = t.executionGrouping) == null ? void 0 : h.enabled) ?? Ge.EXECUTION_GROUPING_ENABLED), L = !!p; - t.executionGrouping = t.executionGrouping || {}, t.executionGrouping.enabled = L, Be(t), At(t), n("executionGrouping.enabled"); + var C, G, Z; + const b = !!(((C = t.executionGrouping) == null ? void 0 : C.enabled) ?? Se.EXECUTION_GROUPING_ENABLED), L = !!p; + t.executionGrouping = t.executionGrouping || {}, t.executionGrouping.enabled = L, Ue(t), Zt(t), n("executionGrouping.enabled"); try { - const f = await hf(L); + const f = await Cf(L); if (!(f != null && f.ok)) throw new Error((f == null ? void 0 : f.error) || "Failed to update execution grouping setting"); - t.executionGrouping.enabled = !!((W = (G = f == null ? void 0 : f.data) == null ? void 0 : G.prefs) != null && W.enabled), Be(t), At(t), n("executionGrouping.enabled"); + t.executionGrouping.enabled = !!((Z = (G = f == null ? void 0 : f.data) == null ? void 0 : G.prefs) != null && Z.enabled), Ue(t), Zt(t), n("executionGrouping.enabled"); } catch (f) { - t.executionGrouping.enabled = b, Be(t), At(t), n("executionGrouping.enabled"), Ze((f == null ? void 0 : f.message) || "Failed to update execution grouping setting", "error"); + t.executionGrouping.enabled = b, Ue(t), Zt(t), n("executionGrouping.enabled"), Ae((f == null ? void 0 : f.message) || "Failed to update execution grouping setting", "error"); } } }), e({ - id: `${Xi}.AutoScan.OnStartup`, + id: `${Ni}.AutoScan.OnStartup`, category: i(m("cat.scanning"), m("setting.scan.startup.name").replace("Majoor: ", "")), name: m("setting.scan.startup.name"), tooltip: m("setting.scan.startup.desc"), type: "boolean", defaultValue: !!((c = t.autoScan) != null && c.onStartup), onChange: (p) => { - t.autoScan = t.autoScan || {}, t.autoScan.onStartup = !!p, Be(t), At(t), n("autoScan.onStartup"); + t.autoScan = t.autoScan || {}, t.autoScan.onStartup = !!p, Ue(t), Zt(t), n("autoScan.onStartup"); } }), e({ - id: `${Xi}.Scan.FastMode`, + id: `${Ni}.Scan.FastMode`, category: i(m("cat.scanning"), "Scan mode"), name: "Fast scan mode", tooltip: "Use fast scan mode for manual backfill scans (skip heavier metadata work during scan).", type: "boolean", defaultValue: !!(((s = t.scan) == null ? void 0 : s.fastMode) ?? !0), onChange: (p) => { - t.scan = t.scan || {}, t.scan.fastMode = !!p, Be(t), n("scan.fastMode"); + t.scan = t.scan || {}, t.scan.fastMode = !!p, Ue(t), n("scan.fastMode"); } }), e({ - id: `${Xi}.RtHydrate.Concurrency`, + id: `${Ni}.RtHydrate.Concurrency`, category: i(m("cat.scanning"), "Hydration"), name: "Hydrate Concurrency", tooltip: "Maximum concurrent hydration requests for rating/tags.", type: "number", defaultValue: Number( - ((d = t.rtHydrate) == null ? void 0 : d.concurrency) || Ge.RT_HYDRATE_CONCURRENCY || 5 + ((d = t.rtHydrate) == null ? void 0 : d.concurrency) || Se.RT_HYDRATE_CONCURRENCY || 5 ), attrs: { min: 1, max: 20, step: 1 }, onChange: (p) => { t.rtHydrate = t.rtHydrate || {}, t.rtHydrate.concurrency = Math.max( 1, - Math.min(20, Math.round(Gn(p, Ge.RT_HYDRATE_CONCURRENCY || 5))) - ), Be(t), At(t), n("rtHydrate.concurrency"); + Math.min(20, Math.round(xn(p, Se.RT_HYDRATE_CONCURRENCY || 5))) + ), Ue(t), Zt(t), n("rtHydrate.concurrency"); } }); - const o = (p, b, L, h) => { - const G = Math.round(Gn(p, b)); - return Math.max(L, Math.min(h, G)); + const o = (p, b, L, C) => { + const G = Math.round(xn(p, b)); + return Math.max(L, Math.min(C, G)); }, r = (p = {}) => { const b = []; if (t.watcher = t.watcher || {}, typeof p.debounce_ms == "number") { @@ -6381,11 +6381,11 @@ function iC(e, t, n) { const L = Math.max(100, Math.min(3e4, Math.round(p.dedupe_ttl_ms))); t.watcher.dedupeTtlMs !== L && (t.watcher.dedupeTtlMs = L, b.push("watcher.dedupeTtlMs")); } - b.length && (Be(t), b.forEach((L) => n(L))); + b.length && (Ue(t), b.forEach((L) => n(L))); }, l = async () => { var p; try { - const b = await Nf(); + const b = await kf(); if (!(b != null && b.ok)) return; r(b.data || {}); @@ -6394,26 +6394,26 @@ function iC(e, t, n) { } }; e({ - id: `${Xi}.Watcher.Enabled`, + id: `${Ni}.Watcher.Enabled`, category: i(m("cat.scanning"), m("setting.watcher.enabled.label", "Enable watcher")), name: m("setting.watcher.name"), tooltip: m("setting.watcher.desc") + " (env: MJR_ENABLE_WATCHER)", type: "boolean", defaultValue: !!((u = t.watcher) != null && u.enabled), onChange: async (p) => { - t.watcher = t.watcher || {}, t.watcher.enabled = !!p, Be(t), n("watcher.enabled"); + t.watcher = t.watcher || {}, t.watcher.enabled = !!p, Ue(t), n("watcher.enabled"); try { const b = await Ma(!!p); - b != null && b.ok || (t.watcher.enabled = !p, Be(t), n("watcher.enabled"), Ze( + b != null && b.ok || (t.watcher.enabled = !p, Ue(t), n("watcher.enabled"), Ae( (b == null ? void 0 : b.error) || m("toast.failedToggleWatcher", "Failed to toggle watcher"), "error" )); } catch { - t.watcher.enabled = !p, Be(t), n("watcher.enabled"); + t.watcher.enabled = !p, Ue(t), n("watcher.enabled"); } } }), e({ - id: `${Xi}.Watcher.DebounceDelay`, + id: `${Ni}.Watcher.DebounceDelay`, category: i( m("cat.scanning"), m("setting.watcher.debounce.label", "Watcher debounce delay") @@ -6421,26 +6421,26 @@ function iC(e, t, n) { name: m("setting.watcher.debounce.name"), tooltip: m("setting.watcher.debounce.desc") + " (env: MJR_WATCHER_DEBOUNCE_MS)", type: "number", - defaultValue: ((I = t.watcher) == null ? void 0 : I.debounceMs) ?? Ge.WATCHER_DEBOUNCE_MS, + defaultValue: ((I = t.watcher) == null ? void 0 : I.debounceMs) ?? Se.WATCHER_DEBOUNCE_MS, attrs: { min: 50, max: 5e3, step: 50 }, onChange: async (p) => { - var G, W; - const b = Ge.WATCHER_DEBOUNCE_MS, L = o(p, b, 50, 5e3), h = ((G = t.watcher) == null ? void 0 : G.debounceMs) ?? b; - if (L !== h) { - t.watcher = t.watcher || {}, t.watcher.debounceMs = L, Be(t); + var G, Z; + const b = Se.WATCHER_DEBOUNCE_MS, L = o(p, b, 50, 5e3), C = ((G = t.watcher) == null ? void 0 : G.debounceMs) ?? b; + if (L !== C) { + t.watcher = t.watcher || {}, t.watcher.debounceMs = L, Ue(t); try { const f = await $d({ debounce_ms: L }); if (!(f != null && f.ok)) throw new Error((f == null ? void 0 : f.error) || m("setting.watcher.debounce.error")); - const X = Math.round(Number(((W = f == null ? void 0 : f.data) == null ? void 0 : W.debounce_ms) ?? L)); - t.watcher.debounceMs = X, Be(t), n("watcher.debounceMs"); + const X = Math.round(Number(((Z = f == null ? void 0 : f.data) == null ? void 0 : Z.debounce_ms) ?? L)); + t.watcher.debounceMs = X, Ue(t), n("watcher.debounceMs"); } catch (f) { - t.watcher.debounceMs = h, Be(t), n("watcher.debounceMs"), Ze((f == null ? void 0 : f.message) || m("setting.watcher.debounce.error"), "error"); + t.watcher.debounceMs = C, Ue(t), n("watcher.debounceMs"), Ae((f == null ? void 0 : f.message) || m("setting.watcher.debounce.error"), "error"); } } } }), e({ - id: `${Xi}.Watcher.DedupeWindow`, + id: `${Ni}.Watcher.DedupeWindow`, category: i( m("cat.scanning"), m("setting.watcher.dedupe.label", "Watcher dedupe window") @@ -6448,65 +6448,65 @@ function iC(e, t, n) { name: m("setting.watcher.dedupe.name"), tooltip: m("setting.watcher.dedupe.desc") + " (env: MJR_WATCHER_DEDUPE_TTL_MS)", type: "number", - defaultValue: ((y = t.watcher) == null ? void 0 : y.dedupeTtlMs) ?? Ge.WATCHER_DEDUPE_TTL_MS, + defaultValue: ((A = t.watcher) == null ? void 0 : A.dedupeTtlMs) ?? Se.WATCHER_DEDUPE_TTL_MS, attrs: { min: 100, max: 3e4, step: 100 }, onChange: async (p) => { - var G, W; - const b = Ge.WATCHER_DEDUPE_TTL_MS, L = o(p, b, 100, 3e4), h = ((G = t.watcher) == null ? void 0 : G.dedupeTtlMs) ?? b; - if (L !== h) { - t.watcher = t.watcher || {}, t.watcher.dedupeTtlMs = L, Be(t); + var G, Z; + const b = Se.WATCHER_DEDUPE_TTL_MS, L = o(p, b, 100, 3e4), C = ((G = t.watcher) == null ? void 0 : G.dedupeTtlMs) ?? b; + if (L !== C) { + t.watcher = t.watcher || {}, t.watcher.dedupeTtlMs = L, Ue(t); try { const f = await $d({ dedupe_ttl_ms: L }); if (!(f != null && f.ok)) throw new Error((f == null ? void 0 : f.error) || m("setting.watcher.dedupe.error")); - const X = Math.round(Number(((W = f == null ? void 0 : f.data) == null ? void 0 : W.dedupe_ttl_ms) ?? L)); - t.watcher.dedupeTtlMs = X, Be(t), n("watcher.dedupeTtlMs"); + const X = Math.round(Number(((Z = f == null ? void 0 : f.data) == null ? void 0 : Z.dedupe_ttl_ms) ?? L)); + t.watcher.dedupeTtlMs = X, Ue(t), n("watcher.dedupeTtlMs"); } catch (f) { - t.watcher.dedupeTtlMs = h, Be(t), n("watcher.dedupeTtlMs"), Ze((f == null ? void 0 : f.message) || m("setting.watcher.dedupe.error"), "error"); + t.watcher.dedupeTtlMs = C, Ue(t), n("watcher.dedupeTtlMs"), Ae((f == null ? void 0 : f.message) || m("setting.watcher.dedupe.error"), "error"); } } } }), e({ - id: `${Xi}.Watcher.MaxPending`, + id: `${Ni}.Watcher.MaxPending`, category: i(m("cat.scanning"), "Watcher queue"), name: "Watcher: max pending files", tooltip: "Maximum number of pending watcher files kept in memory.", type: "number", - defaultValue: Number(((S = t.watcher) == null ? void 0 : S.maxPending) ?? 500), + defaultValue: Number(((h = t.watcher) == null ? void 0 : h.maxPending) ?? 500), attrs: { min: 10, max: 5e3, step: 10 }, onChange: (p) => { t.watcher = t.watcher || {}, t.watcher.maxPending = Math.max( 10, - Math.min(5e3, Math.round(Gn(p, 500))) - ), Be(t), At(t), n("watcher.maxPending"); + Math.min(5e3, Math.round(xn(p, 500))) + ), Ue(t), Zt(t), n("watcher.maxPending"); } }), e({ - id: `${Xi}.Watcher.MinSize`, + id: `${Ni}.Watcher.MinSize`, category: i(m("cat.scanning"), "Watcher file size"), name: "Watcher: min size (bytes)", tooltip: "Minimum file size indexed by watcher.", type: "number", - defaultValue: Number(((Z = t.watcher) == null ? void 0 : Z.minSize) ?? 100), + defaultValue: Number(((S = t.watcher) == null ? void 0 : S.minSize) ?? 100), attrs: { min: 0, max: 1e6, step: 100 }, onChange: (p) => { t.watcher = t.watcher || {}, t.watcher.minSize = Math.max( 0, - Math.min(1e6, Math.round(Gn(p, 100))) - ), Be(t), At(t), n("watcher.minSize"); + Math.min(1e6, Math.round(xn(p, 100))) + ), Ue(t), Zt(t), n("watcher.minSize"); } }), e({ - id: `${Xi}.Watcher.MaxSize`, + id: `${Ni}.Watcher.MaxSize`, category: i(m("cat.scanning"), "Watcher file size"), name: "Watcher: max size (bytes)", tooltip: "Maximum file size indexed by watcher.", type: "number", - defaultValue: Number(((C = t.watcher) == null ? void 0 : C.maxSize) ?? 4294967296), + defaultValue: Number(((W = t.watcher) == null ? void 0 : W.maxSize) ?? 4294967296), attrs: { min: 1e5, max: 17179869184, step: 1e5 }, onChange: (p) => { t.watcher = t.watcher || {}, t.watcher.maxSize = Math.max( 1e5, - Math.min(17179869184, Math.round(Gn(p, 4294967296))) - ), Be(t), At(t), n("watcher.maxSize"); + Math.min(17179869184, Math.round(xn(p, 4294967296))) + ), Ue(t), Zt(t), n("watcher.maxSize"); } }); try { @@ -6516,195 +6516,195 @@ function iC(e, t, n) { (g = console.debug) == null || g.call(console, p); } e({ - id: `${Xi}.RatingTagsSync.Enabled`, + id: `${Ni}.RatingTagsSync.Enabled`, category: i(m("cat.scanning"), m("setting.sync.rating.name").replace("Majoor: ", "")), name: m("setting.sync.rating.name"), tooltip: m("setting.sync.rating.desc"), type: "boolean", - defaultValue: !!((A = t.ratingTagsSync) != null && A.enabled), + defaultValue: !!((y = t.ratingTagsSync) != null && y.enabled), onChange: (p) => { - t.ratingTagsSync = t.ratingTagsSync || {}, t.ratingTagsSync.enabled = !!p, Be(t), n("ratingTagsSync.enabled"); + t.ratingTagsSync = t.ratingTagsSync || {}, t.ratingTagsSync.enabled = !!p, Ue(t), n("ratingTagsSync.enabled"); } }); } -const Bi = "Majoor", oC = "Majoor Assets Manager"; -function rC(e, t, n) { - var r, l, a, c, s, d, u, I, y, S; - const i = (Z) => [oC, m("cat.feed", "Generated Feed"), Z], o = () => { +const Ki = "Majoor", oh = "Majoor Assets Manager"; +function rh(e, t, n) { + var r, l, a, c, s, d, u, I, A, h; + const i = (S) => [oh, m("cat.feed", "Generated Feed"), S], o = () => { t.feed = t.feed || {}; }; e({ - id: `${Bi}.Feed.CardSize`, + id: `${Ki}.Feed.CardSize`, category: i("Card size"), name: "Feed card size (px)", tooltip: "Set the minimum card width used by the Generated Feed layout (60-600 px).", type: "number", defaultValue: Math.max(60, Math.min(600, Number((r = t.feed) == null ? void 0 : r.minSize) || 120)), attrs: { min: 60, max: 600, step: 10 }, - onChange: (Z) => { - o(), t.feed.minSize = Math.max(60, Math.min(600, Math.round(Number(Z) || 120))), Be(t), At(t), n("feed.minSize"); + onChange: (S) => { + o(), t.feed.minSize = Math.max(60, Math.min(600, Math.round(Number(S) || 120))), Ue(t), Zt(t), n("feed.minSize"); } }), e({ - id: `${Bi}.Feed.ShowInfo`, + id: `${Ki}.Feed.ShowInfo`, category: i("Show info section"), name: "Show card info section", tooltip: "Show or hide the entire info section (filename, metadata, dots) below thumbnails in the Generated Feed.", type: "boolean", - defaultValue: !!(((l = t.feed) == null ? void 0 : l.showInfo) ?? Ge.FEED_SHOW_INFO), - onChange: (Z) => { - o(), t.feed.showInfo = !!Z, Be(t), At(t), n("feed.showInfo"); + defaultValue: !!(((l = t.feed) == null ? void 0 : l.showInfo) ?? Se.FEED_SHOW_INFO), + onChange: (S) => { + o(), t.feed.showInfo = !!S, Ue(t), Zt(t), n("feed.showInfo"); } }), e({ - id: `${Bi}.Feed.ShowFilename`, + id: `${Ki}.Feed.ShowFilename`, category: i("Show filename"), name: "Show filename", tooltip: "Display the filename on feed cards.", type: "boolean", - defaultValue: !!(((a = t.feed) == null ? void 0 : a.showFilename) ?? Ge.FEED_SHOW_FILENAME), - onChange: (Z) => { - o(), t.feed.showFilename = !!Z, Be(t), At(t), n("feed.showFilename"); + defaultValue: !!(((a = t.feed) == null ? void 0 : a.showFilename) ?? Se.FEED_SHOW_FILENAME), + onChange: (S) => { + o(), t.feed.showFilename = !!S, Ue(t), Zt(t), n("feed.showFilename"); } }), e({ - id: `${Bi}.Feed.ShowDimensions`, + id: `${Ki}.Feed.ShowDimensions`, category: i("Show dimensions"), name: "Show dimensions", tooltip: "Display resolution (WxH) and duration on feed cards.", type: "boolean", - defaultValue: !!(((c = t.feed) == null ? void 0 : c.showDimensions) ?? Ge.FEED_SHOW_DIMENSIONS), - onChange: (Z) => { - o(), t.feed.showDimensions = !!Z, Be(t), At(t), n("feed.showDimensions"); + defaultValue: !!(((c = t.feed) == null ? void 0 : c.showDimensions) ?? Se.FEED_SHOW_DIMENSIONS), + onChange: (S) => { + o(), t.feed.showDimensions = !!S, Ue(t), Zt(t), n("feed.showDimensions"); } }), e({ - id: `${Bi}.Feed.ShowDate`, + id: `${Ki}.Feed.ShowDate`, category: i("Show date/time"), name: "Show date/time", tooltip: "Display date and time on feed cards.", type: "boolean", - defaultValue: !!(((s = t.feed) == null ? void 0 : s.showDate) ?? Ge.FEED_SHOW_DATE), - onChange: (Z) => { - o(), t.feed.showDate = !!Z, Be(t), At(t), n("feed.showDate"); + defaultValue: !!(((s = t.feed) == null ? void 0 : s.showDate) ?? Se.FEED_SHOW_DATE), + onChange: (S) => { + o(), t.feed.showDate = !!S, Ue(t), Zt(t), n("feed.showDate"); } }), e({ - id: `${Bi}.Feed.ShowGenTime`, + id: `${Ki}.Feed.ShowGenTime`, category: i("Show generation time"), name: "Show generation time", tooltip: "Display the generation time badge on feed cards.", type: "boolean", - defaultValue: !!(((d = t.feed) == null ? void 0 : d.showGenTime) ?? Ge.FEED_SHOW_GENTIME), - onChange: (Z) => { - o(), t.feed.showGenTime = !!Z, Be(t), At(t), n("feed.showGenTime"); + defaultValue: !!(((d = t.feed) == null ? void 0 : d.showGenTime) ?? Se.FEED_SHOW_GENTIME), + onChange: (S) => { + o(), t.feed.showGenTime = !!S, Ue(t), Zt(t), n("feed.showGenTime"); } }), e({ - id: `${Bi}.Feed.ShowWorkflowDot`, + id: `${Ki}.Feed.ShowWorkflowDot`, category: i("Show workflow dot"), name: "Show workflow indicator", tooltip: "Display the workflow availability dot on feed cards.", type: "boolean", - defaultValue: !!(((u = t.feed) == null ? void 0 : u.showWorkflowDot) ?? Ge.FEED_SHOW_WORKFLOW_DOT), - onChange: (Z) => { - o(), t.feed.showWorkflowDot = !!Z, Be(t), At(t), n("feed.showWorkflowDot"); + defaultValue: !!(((u = t.feed) == null ? void 0 : u.showWorkflowDot) ?? Se.FEED_SHOW_WORKFLOW_DOT), + onChange: (S) => { + o(), t.feed.showWorkflowDot = !!S, Ue(t), Zt(t), n("feed.showWorkflowDot"); } }), e({ - id: `${Bi}.Feed.ShowExtBadge`, + id: `${Ki}.Feed.ShowExtBadge`, category: i("Show format badges"), name: "Show format badges", tooltip: "Display format badges (e.g. JPG, MP4) on feed card thumbnails.", type: "boolean", - defaultValue: !!(((I = t.feed) == null ? void 0 : I.showExtBadge) ?? Ge.FEED_SHOW_BADGES_EXTENSION), - onChange: (Z) => { - o(), t.feed.showExtBadge = !!Z, Be(t), At(t), n("feed.showExtBadge"); + defaultValue: !!(((I = t.feed) == null ? void 0 : I.showExtBadge) ?? Se.FEED_SHOW_BADGES_EXTENSION), + onChange: (S) => { + o(), t.feed.showExtBadge = !!S, Ue(t), Zt(t), n("feed.showExtBadge"); } }), e({ - id: `${Bi}.Feed.ShowRatingBadge`, + id: `${Ki}.Feed.ShowRatingBadge`, category: i("Show rating badges"), name: "Show ratings", tooltip: "Display star ratings on feed card thumbnails.", type: "boolean", - defaultValue: !!(((y = t.feed) == null ? void 0 : y.showRatingBadge) ?? Ge.FEED_SHOW_BADGES_RATING), - onChange: (Z) => { - o(), t.feed.showRatingBadge = !!Z, Be(t), At(t), n("feed.showRatingBadge"); + defaultValue: !!(((A = t.feed) == null ? void 0 : A.showRatingBadge) ?? Se.FEED_SHOW_BADGES_RATING), + onChange: (S) => { + o(), t.feed.showRatingBadge = !!S, Ue(t), Zt(t), n("feed.showRatingBadge"); } }), e({ - id: `${Bi}.Feed.ShowTagsBadge`, + id: `${Ki}.Feed.ShowTagsBadge`, category: i("Show tags badges"), name: "Show tags", tooltip: "Display tag indicators on feed card thumbnails.", type: "boolean", - defaultValue: !!(((S = t.feed) == null ? void 0 : S.showTagsBadge) ?? Ge.FEED_SHOW_BADGES_TAGS), - onChange: (Z) => { - o(), t.feed.showTagsBadge = !!Z, Be(t), At(t), n("feed.showTagsBadge"); + defaultValue: !!(((h = t.feed) == null ? void 0 : h.showTagsBadge) ?? Se.FEED_SHOW_BADGES_TAGS), + onChange: (S) => { + o(), t.feed.showTagsBadge = !!S, Ue(t), Zt(t), n("feed.showTagsBadge"); } }); } -const Xl = "Majoor", lC = "Majoor Assets Manager", tI = 16; +const Nl = "Majoor", lh = "Majoor Assets Manager", tI = 16; function mu(e) { return !!e; } -function gc(e, t) { +function Ic(e, t) { return mu(e) === mu(t); } function gu(e) { return typeof e == "string" ? e.trim() : ""; } -function aC(e) { +function ah(e) { const t = String(e || "").trim().toLowerCase(); return t === "localhost" || t === "127.0.0.1" || t === "::1"; } -function cC() { +function ch() { var e; return globalThis.location || ((e = globalThis.window) == null ? void 0 : e.location) || null; } -function sC() { - const e = cC(); +function sh() { + const e = ch(); if (!e) return !1; const t = String(e.protocol || "").toLowerCase(), n = String(e.hostname || "").trim(); - return t === "http:" && !aC(n); + return t === "http:" && !ah(n); } -function dC(e) { +function dh(e) { const t = globalThis.crypto; if (!(t != null && t.getRandomValues)) throw new Error("Secure token generation requires crypto.getRandomValues()."); return t.getRandomValues(e); } -function uC(e) { +function uh(e) { const t = Math.max(4, Number(e) || 0), n = new Uint8Array(t); - return dC(n), Array.from(n, (i) => i.toString(16).padStart(2, "0")).join(""); + return dh(n), Array.from(n, (i) => i.toString(16).padStart(2, "0")).join(""); } -function mC() { - return `mjr_${uC(18)}`; +function mh() { + return `mjr_${uh(18)}`; } -function gC(e) { - return String((e == null ? void 0 : e.apiToken) || "").trim().length >= tI && kn(e == null ? void 0 : e.allowWrite, !0) && kn(e == null ? void 0 : e.requireAuth, !1) && !kn(e == null ? void 0 : e.allowRemoteWrite, !1); +function gh(e) { + return String((e == null ? void 0 : e.apiToken) || "").trim().length >= tI && Nn(e == null ? void 0 : e.allowWrite, !0) && Nn(e == null ? void 0 : e.requireAuth, !1) && !Nn(e == null ? void 0 : e.allowRemoteWrite, !1); } -function IC(e) { +function Ih(e) { const n = String((e && typeof e == "object" ? e : {}).apiToken || "").trim(); return { - apiToken: n.length >= tI ? n : mC(), + apiToken: n.length >= tI ? n : mh(), allowWrite: !0, requireAuth: !0, allowRemoteWrite: !1, - allowInsecureTokenTransport: sC() + allowInsecureTokenTransport: sh() }; } -function bC(e) { +function bh(e) { const t = e || {}; return { - safe_mode: kn(t.safeMode, !1), - allow_write: kn(t.allowWrite, !0), - require_auth: kn(t.requireAuth, !1), - allow_remote_write: kn(t.allowRemoteWrite, !1), - allow_insecure_token_transport: kn(t.allowInsecureTokenTransport, !1), - allow_delete: kn(t.allowDelete, !0), - allow_rename: kn(t.allowRename, !0), - allow_open_in_folder: kn(t.allowOpenInFolder, !0), - allow_reset_index: kn(t.allowResetIndex, !1), + safe_mode: Nn(t.safeMode, !1), + allow_write: Nn(t.allowWrite, !0), + require_auth: Nn(t.requireAuth, !1), + allow_remote_write: Nn(t.allowRemoteWrite, !1), + allow_insecure_token_transport: Nn(t.allowInsecureTokenTransport, !1), + allow_delete: Nn(t.allowDelete, !0), + allow_rename: Nn(t.allowRename, !0), + allow_open_in_folder: Nn(t.allowOpenInFolder, !0), + allow_reset_index: Nn(t.allowResetIndex, !1), ...String(t.apiToken || "").trim() ? { api_token: String(t.apiToken || "").trim() } : {} }; } function Iu(e) { - return Xg(bC(e)); + return Ng(bh(e)); } -function pC(e) { +function ph(e) { var n, i; const t = String(((n = e == null ? void 0 : e.security) == null ? void 0 : n.tokenHint) || "").trim(); return t ? m( @@ -6716,11 +6716,11 @@ function pC(e) { "Token configured on server. Leave blank to keep the current server token." ) : m("setting.sec.token.placeholder", "Auto-generated for this browser session."); } -function yC(e, t, n) { +function yh(e, t, n) { var r, l; - const i = (a, c) => [lC, a, c]; + const i = (a, c) => [lh, a, c]; e({ - id: `${Xl}.Safety.ConfirmDeletion`, + id: `${Nl}.Safety.ConfirmDeletion`, category: i(m("cat.security"), "Confirm before deleting"), name: "Confirm before deleting", tooltip: "Show a confirmation dialog before deleting files. Disabling this allows instant deletion.", @@ -6728,40 +6728,40 @@ function yC(e, t, n) { defaultValue: ((r = t.safety) == null ? void 0 : r.confirmDeletion) !== !1, onChange: (a) => { var c; - gc(((c = t.safety) == null ? void 0 : c.confirmDeletion) !== !1, a) || (t.safety = t.safety || {}, t.safety.confirmDeletion = !!a, Be(t), At(t), n("safety.confirmDeletion")); + Ic(((c = t.safety) == null ? void 0 : c.confirmDeletion) !== !1, a) || (t.safety = t.safety || {}, t.safety.confirmDeletion = !!a, Ue(t), Zt(t), n("safety.confirmDeletion")); } }); const o = (a, c, s, d = "cat.security") => { var u; e({ - id: `${Xl}.Security.${a}`, + id: `${Nl}.Security.${a}`, category: i(m(d), m(c).replace("Majoor: ", "")), name: m(c), tooltip: m(s), type: "boolean", defaultValue: !!((u = t.security) != null && u[a]), onChange: (I) => { - var y, S; - if (!gc((y = t.security) == null ? void 0 : y[a], I)) { - t.security = t.security || {}, t.security[a] = !!I, Be(t), n(`security.${a}`); + var A, h; + if (!Ic((A = t.security) == null ? void 0 : A[a], I)) { + t.security = t.security || {}, t.security[a] = !!I, Ue(t), n(`security.${a}`); try { - Iu(t.security).then((Z) => { - var C; - Z != null && Z.ok && ((C = Z.data) != null && C.prefs) ? oa() : Z && Z.ok === !1 && console.warn( + Iu(t.security).then((S) => { + var W; + S != null && S.ok && ((W = S.data) != null && W.prefs) ? oa() : S && S.ok === !1 && console.warn( "[Majoor] backend security settings update failed", - Z.error || Z + S.error || S ); }).catch(() => { }); - } catch (Z) { - (S = console.debug) == null || S.call(console, Z); + } catch (S) { + (h = console.debug) == null || h.call(console, S); } } } }); }; o("safeMode", "setting.sec.safe.name", "setting.sec.safe.desc"), o("allowWrite", "setting.sec.write.name", "setting.sec.write.desc"), o("allowDelete", "setting.sec.del.name", "setting.sec.del.desc"), o("allowRename", "setting.sec.ren.name", "setting.sec.ren.desc"), o("allowOpenInFolder", "setting.sec.open.name", "setting.sec.open.desc"), o("allowResetIndex", "setting.sec.reset.name", "setting.sec.reset.desc"), e({ - id: `${Xl}.Security.RemoteLanPreset`, + id: `${Nl}.Security.RemoteLanPreset`, category: i( m("cat.remote"), m("setting.sec.remoteLanPreset.name").replace("Majoor: ", "") @@ -6769,20 +6769,20 @@ function yC(e, t, n) { name: m("setting.sec.remoteLanPreset.name"), tooltip: m("setting.sec.remoteLanPreset.desc"), type: "boolean", - defaultValue: gC(t.security), + defaultValue: gh(t.security), onChange: (a) => { var s; - if (t.security = t.security || {}, gc(t.security.remoteLanPreset, a)) + if (t.security = t.security || {}, Ic(t.security.remoteLanPreset, a)) return; if (t.security.remoteLanPreset = !!a, !a) { - Be(t), n("security.remoteLanPreset"); + Ue(t), n("security.remoteLanPreset"); return; } let c; try { - c = IC(t.security); + c = Ih(t.security); } catch (d) { - Ze( + Ae( (d == null ? void 0 : d.message) || m( "toast.remoteLanPresetFailed", "Failed to apply the recommended remote LAN setup." @@ -6791,17 +6791,17 @@ function yC(e, t, n) { ); return; } - Object.assign(t.security, c), t.security.tokenConfigured = !0, t.security.tokenHint = String(c.apiToken || "").trim() ? `...${String(c.apiToken).trim().slice(-4)}` : "", c.apiToken && qd(c.apiToken), Be(t), n("security.remoteLanPreset"), n("security.apiToken"), n("security.allowWrite"), n("security.requireAuth"), n("security.allowRemoteWrite"), n("security.allowInsecureTokenTransport"); + Object.assign(t.security, c), t.security.tokenConfigured = !0, t.security.tokenHint = String(c.apiToken || "").trim() ? `...${String(c.apiToken).trim().slice(-4)}` : "", c.apiToken && qd(c.apiToken), Ue(t), n("security.remoteLanPreset"), n("security.apiToken"), n("security.allowWrite"), n("security.requireAuth"), n("security.allowRemoteWrite"), n("security.allowInsecureTokenTransport"); try { Iu(t.security).then((d) => { var u; - d != null && d.ok && ((u = d.data) != null && u.prefs) ? (oa(), Ze( + d != null && d.ok && ((u = d.data) != null && u.prefs) ? (oa(), Ae( m( "toast.remoteLanPresetApplied", "Recommended remote LAN setup applied. This browser session is now authorized for Majoor write operations." ), "success" - )) : d && d.ok === !1 && (Ze( + )) : d && d.ok === !1 && (Ae( d.error || m( "toast.remoteLanPresetFailed", "Failed to apply the recommended remote LAN setup." @@ -6812,7 +6812,7 @@ function yC(e, t, n) { d.error || d )); }).catch((d) => { - Ze( + Ae( (d == null ? void 0 : d.message) || m( "toast.remoteLanPresetFailed", "Failed to apply the recommended remote LAN setup." @@ -6825,7 +6825,7 @@ function yC(e, t, n) { } } }), e({ - id: `${Xl}.Security.ApiToken`, + id: `${Nl}.Security.ApiToken`, category: i(m("cat.remote"), m("setting.sec.token.name").replace("Majoor: ", "")), name: m("setting.sec.token.name", "Majoor: API Token"), tooltip: m( @@ -6835,15 +6835,15 @@ function yC(e, t, n) { type: "text", defaultValue: ((l = t.security) == null ? void 0 : l.apiToken) || "", attrs: { - placeholder: pC(t) + placeholder: ph(t) }, onChange: (a) => { var s; t.security = t.security || {}; const c = gu(a); - if (gu(t.security.apiToken) !== c && (t.security.apiToken = c, t.security.apiToken && (t.security.tokenConfigured = !0, t.security.tokenHint = `...${t.security.apiToken.slice(-4)}`, qd(t.security.apiToken)), Be(t), n("security.apiToken"), !!t.security.apiToken)) + if (gu(t.security.apiToken) !== c && (t.security.apiToken = c, t.security.apiToken && (t.security.tokenConfigured = !0, t.security.tokenHint = `...${t.security.apiToken.slice(-4)}`, qd(t.security.apiToken)), Ue(t), n("security.apiToken"), !!t.security.apiToken)) try { - Xg({ api_token: t.security.apiToken }).then((d) => { + Ng({ api_token: t.security.apiToken }).then((d) => { var u; d != null && d.ok && ((u = d.data) != null && u.prefs) ? oa() : d && d.ok === !1 && console.warn("[Majoor] backend token update failed", d.error || d); }).catch(() => { @@ -6869,11 +6869,11 @@ function yC(e, t, n) { "cat.remote" ); } -const Pn = "Majoor", fC = "Majoor Assets Manager"; -function hC(e, t, n, i) { - var C, g, A, p, b, L, h, G, W, f, X, x, T, v, w, R, Y, F, N, V, k, K, z; - const o = (B, J) => [fC, B, J]; - let r = String(((C = t.paths) == null ? void 0 : C.outputDirectory) || ""), l = null, a = 0, c = null; +const Pn = "Majoor", fh = "Majoor Assets Manager"; +function Ch(e, t, n, i) { + var W, g, y, p, b, L, C, G, Z, f, X, x, K, j, w, R, V, O, k, Y, N, U, z; + const o = (T, J) => [fh, T, J]; + let r = String(((W = t.paths) == null ? void 0 : W.outputDirectory) || ""), l = null, a = 0, c = null; e({ id: `${Pn}.Paths.OutputDirectory`, category: o(m("cat.advanced"), "Paths / Output"), @@ -6884,23 +6884,23 @@ function hC(e, t, n, i) { attrs: { placeholder: "D:\\\\____COMFY_OUTPUTS" }, - onChange: async (B) => { + onChange: async (T) => { var P; - const J = String(B || "").trim(); - t.paths = t.paths || {}, t.paths.outputDirectory = J, Be(t); + const J = String(T || "").trim(); + t.paths = t.paths || {}, t.paths.outputDirectory = J, Ue(t); try { l && (clearTimeout(l), l = null); - } catch (H) { - (P = console.debug) == null || P.call(console, H); + } catch (E) { + (P = console.debug) == null || P.call(console, E); } l = setTimeout(async () => { - var $, E, oe; + var $, H, ne; l = null; - const H = ++a; + const E = ++a; try { ($ = c == null ? void 0 : c.abort) == null || $.call(c); } catch (M) { - (E = console.debug) == null || E.call(console, M); + (H = console.debug) == null || H.call(console, M); } c = typeof AbortController < "u" ? new AbortController() : null; try { @@ -6908,7 +6908,7 @@ function hC(e, t, n, i) { J, c ? { signal: c.signal } : {} ); - if (H !== a) return; + if (E !== a) return; if (!(M != null && M.ok)) throw new Error( (M == null ? void 0 : M.error) || m( @@ -6916,11 +6916,11 @@ function hC(e, t, n, i) { "Failed to set output directory" ) ); - const j = String(((oe = M == null ? void 0 : M.data) == null ? void 0 : oe.output_directory) || J).trim(); - t.paths.outputDirectory = j, r = j, Be(t), n("paths.outputDirectory"); + const v = String(((ne = M == null ? void 0 : M.data) == null ? void 0 : ne.output_directory) || J).trim(); + t.paths.outputDirectory = v, r = v, Ue(t), n("paths.outputDirectory"); } catch (M) { - if (H !== a || String((M == null ? void 0 : M.name) || "") === "AbortError" || String((M == null ? void 0 : M.code) || "") === "ABORTED") return; - t.paths.outputDirectory = r, Be(t), n("paths.outputDirectory"), Ze( + if (E !== a || String((M == null ? void 0 : M.name) || "") === "AbortError" || String((M == null ? void 0 : M.code) || "") === "ABORTED") return; + t.paths.outputDirectory = r, Ue(t), n("paths.outputDirectory"), Ae( (M == null ? void 0 : M.message) || m("toast.failedSetOutputDirectory", "Failed to set output directory"), "error" ); @@ -6929,15 +6929,15 @@ function hC(e, t, n, i) { } }); try { - vf().then((B) => { + vf().then((T) => { var P; - if (!(B != null && B.ok)) return; - const J = String(((P = B == null ? void 0 : B.data) == null ? void 0 : P.output_directory) || "").trim(); - t.paths = t.paths || {}, t.paths.outputDirectory !== J && (t.paths.outputDirectory = J, r = J, Be(t), n("paths.outputDirectory")); + if (!(T != null && T.ok)) return; + const J = String(((P = T == null ? void 0 : T.data) == null ? void 0 : P.output_directory) || "").trim(); + t.paths = t.paths || {}, t.paths.outputDirectory !== J && (t.paths.outputDirectory = J, r = J, Ue(t), n("paths.outputDirectory")); }).catch(() => { }); - } catch (B) { - (A = console.debug) == null || A.call(console, B); + } catch (T) { + (y = console.debug) == null || y.call(console, T); } let s = String(((p = t.paths) == null ? void 0 : p.indexDirectory) || ""), d = null, u = 0, I = null; e({ @@ -6950,37 +6950,37 @@ function hC(e, t, n, i) { attrs: { placeholder: "D:\\MajoorIndex" }, - onChange: async (B) => { + onChange: async (T) => { var P; - const J = String(B || "").trim(); - t.paths = t.paths || {}, t.paths.indexDirectory = J, Be(t); + const J = String(T || "").trim(); + t.paths = t.paths || {}, t.paths.indexDirectory = J, Ue(t); try { d && (clearTimeout(d), d = null); - } catch (H) { - (P = console.debug) == null || P.call(console, H); + } catch (E) { + (P = console.debug) == null || P.call(console, E); } d = setTimeout(async () => { - var $, E, oe; + var $, H, ne; d = null; - const H = ++u; + const E = ++u; try { ($ = I == null ? void 0 : I.abort) == null || $.call(I); } catch (M) { - (E = console.debug) == null || E.call(console, M); + (H = console.debug) == null || H.call(console, M); } I = typeof AbortController < "u" ? new AbortController() : null; try { - const M = await Yf( + const M = await Vf( J, I ? { signal: I.signal } : {} ); - if (H !== u) return; + if (E !== u) return; if (!(M != null && M.ok)) throw new Error( (M == null ? void 0 : M.error) || m("toast.failedSetIndexDirectory", "Failed to set index directory") ); - const j = String(((oe = M == null ? void 0 : M.data) == null ? void 0 : oe.index_directory) || J).trim(), O = j !== s; - t.paths.indexDirectory = j, s = j, Be(t), n("paths.indexDirectory"), O && Ze( + const v = String(((ne = M == null ? void 0 : M.data) == null ? void 0 : ne.index_directory) || J).trim(), F = v !== s; + t.paths.indexDirectory = v, s = v, Ue(t), n("paths.indexDirectory"), F && Ae( m( "toast.indexDirectorySavedRestart", "Index directory saved. Restart ComfyUI to apply." @@ -6994,8 +6994,8 @@ function hC(e, t, n, i) { } ); } catch (M) { - if (H !== u || String((M == null ? void 0 : M.name) || "") === "AbortError" || String((M == null ? void 0 : M.code) || "") === "ABORTED") return; - t.paths.indexDirectory = s, Be(t), n("paths.indexDirectory"), Ze( + if (E !== u || String((M == null ? void 0 : M.name) || "") === "AbortError" || String((M == null ? void 0 : M.code) || "") === "ABORTED") return; + t.paths.indexDirectory = s, Ue(t), n("paths.indexDirectory"), Ae( (M == null ? void 0 : M.message) || m("toast.failedSetIndexDirectory", "Failed to set index directory"), "error" ); @@ -7004,31 +7004,31 @@ function hC(e, t, n, i) { } }); try { - Vf().then((B) => { + Yf().then((T) => { var P; - if (!(B != null && B.ok)) return; - const J = String(((P = B == null ? void 0 : B.data) == null ? void 0 : P.index_directory) || "").trim(); - t.paths = t.paths || {}, t.paths.indexDirectory !== J && (t.paths.indexDirectory = J, s = J, Be(t), n("paths.indexDirectory")); + if (!(T != null && T.ok)) return; + const J = String(((P = T == null ? void 0 : T.data) == null ? void 0 : P.index_directory) || "").trim(); + t.paths = t.paths || {}, t.paths.indexDirectory !== J && (t.paths.indexDirectory = J, s = J, Ue(t), n("paths.indexDirectory")); }).catch(() => { }); - } catch (B) { - (L = console.debug) == null || L.call(console, B); + } catch (T) { + (L = console.debug) == null || L.call(console, T); } - const S = Uy().map((B) => B.code), Z = ["auto", ...S]; + const h = By().map((T) => T.code), S = ["auto", ...h]; e({ id: `${Pn}.Language`, category: o(m("cat.advanced"), m("setting.language.name", "Language")), name: m("setting.language.name", "Majoor: Language"), tooltip: "Use auto to detect and follow ComfyUI language. Or choose a fixed language for Majoor only.", type: "combo", - defaultValue: (h = t.i18n) != null && h.followComfyLanguage ? "auto" : By(), - options: Z, - onChange: (B) => { - if (t.i18n = t.i18n || {}, B === "auto") { - t.i18n.followComfyLanguage = !0, Wa(!0), Wg(i), Be(t), n("language"); + defaultValue: (C = t.i18n) != null && C.followComfyLanguage ? "auto" : Ky(), + options: S, + onChange: (T) => { + if (t.i18n = t.i18n || {}, T === "auto") { + t.i18n.followComfyLanguage = !0, Wa(!0), Wg(i), Ue(t), n("language"); return; } - S.includes(B) && (t.i18n.followComfyLanguage = !1, Wa(!1), _i(B), Be(t), n("language")); + h.includes(T) && (t.i18n.followComfyLanguage = !1, Wa(!1), _i(T), Ue(t), n("language")); } }), e({ id: `${Pn}.ProbeBackend.Mode`, @@ -7036,15 +7036,15 @@ function hC(e, t, n, i) { name: m("setting.probe.mode.name"), tooltip: m("setting.probe.mode.desc") + " (env: MAJOOR_MEDIA_PROBE_BACKEND)", type: "combo", - defaultValue: ((G = t.probeBackend) == null ? void 0 : G.mode) || Un.probeBackend.mode, + defaultValue: ((G = t.probeBackend) == null ? void 0 : G.mode) || Bn.probeBackend.mode, options: ["auto", "exiftool", "ffprobe", "both"], - onChange: (B) => { - const J = Ks( - B, + onChange: (T) => { + const J = Ds( + T, ["auto", "exiftool", "ffprobe", "both"], - Un.probeBackend.mode + Bn.probeBackend.mode ); - t.probeBackend = t.probeBackend || {}, t.probeBackend.mode = J, Be(t), At(t), n("probeBackend.mode"), If(J).catch(() => { + t.probeBackend = t.probeBackend || {}, t.probeBackend.mode = J, Ue(t), Zt(t), n("probeBackend.mode"), If(J).catch(() => { }); } }), e({ @@ -7053,26 +7053,26 @@ function hC(e, t, n, i) { name: "Majoor: Metadata Fallback (Images)", tooltip: "Enable Pillow fallback when ExifTool is missing or fails.", type: "boolean", - defaultValue: ((W = t.metadataFallback) == null ? void 0 : W.image) ?? Un.metadataFallback.image, - onChange: async (B) => { - var H, $; - const J = !!B, P = !!(((H = t.metadataFallback) == null ? void 0 : H.image) ?? Un.metadataFallback.image); - t.metadataFallback = t.metadataFallback || {}, t.metadataFallback.image = J, Be(t), n("metadataFallback.image"); + defaultValue: ((Z = t.metadataFallback) == null ? void 0 : Z.image) ?? Bn.metadataFallback.image, + onChange: async (T) => { + var E, $; + const J = !!T, P = !!(((E = t.metadataFallback) == null ? void 0 : E.image) ?? Bn.metadataFallback.image); + t.metadataFallback = t.metadataFallback || {}, t.metadataFallback.image = J, Ue(t), n("metadataFallback.image"); try { - const E = await Qd({ + const H = await Qd({ image: J, - media: (($ = t.metadataFallback) == null ? void 0 : $.media) ?? Un.metadataFallback.media + media: (($ = t.metadataFallback) == null ? void 0 : $.media) ?? Bn.metadataFallback.media }); - if (!(E != null && E.ok)) + if (!(H != null && H.ok)) throw new Error( - (E == null ? void 0 : E.error) || m( + (H == null ? void 0 : H.error) || m( "toast.failedUpdateMetadataFallback", "Failed to update metadata fallback settings" ) ); - } catch (E) { - t.metadataFallback.image = P, Be(t), n("metadataFallback.image"), Ze( - (E == null ? void 0 : E.message) || m( + } catch (H) { + t.metadataFallback.image = P, Ue(t), n("metadataFallback.image"), Ae( + (H == null ? void 0 : H.message) || m( "toast.failedUpdateMetadataFallback", "Failed to update metadata fallback settings" ), @@ -7086,26 +7086,26 @@ function hC(e, t, n, i) { name: "Majoor: Metadata Fallback (Audio/Video)", tooltip: "Enable hachoir fallback when ffprobe is missing or fails.", type: "boolean", - defaultValue: ((f = t.metadataFallback) == null ? void 0 : f.media) ?? Un.metadataFallback.media, - onChange: async (B) => { - var H, $; - const J = !!B, P = !!(((H = t.metadataFallback) == null ? void 0 : H.media) ?? Un.metadataFallback.media); - t.metadataFallback = t.metadataFallback || {}, t.metadataFallback.media = J, Be(t), n("metadataFallback.media"); + defaultValue: ((f = t.metadataFallback) == null ? void 0 : f.media) ?? Bn.metadataFallback.media, + onChange: async (T) => { + var E, $; + const J = !!T, P = !!(((E = t.metadataFallback) == null ? void 0 : E.media) ?? Bn.metadataFallback.media); + t.metadataFallback = t.metadataFallback || {}, t.metadataFallback.media = J, Ue(t), n("metadataFallback.media"); try { - const E = await Qd({ - image: (($ = t.metadataFallback) == null ? void 0 : $.image) ?? Un.metadataFallback.image, + const H = await Qd({ + image: (($ = t.metadataFallback) == null ? void 0 : $.image) ?? Bn.metadataFallback.image, media: J }); - if (!(E != null && E.ok)) + if (!(H != null && H.ok)) throw new Error( - (E == null ? void 0 : E.error) || m( + (H == null ? void 0 : H.error) || m( "toast.failedUpdateMetadataFallback", "Failed to update metadata fallback settings" ) ); - } catch (E) { - t.metadataFallback.media = P, Be(t), n("metadataFallback.media"), Ze( - (E == null ? void 0 : E.message) || m( + } catch (H) { + t.metadataFallback.media = P, Ue(t), n("metadataFallback.media"), Ae( + (H == null ? void 0 : H.message) || m( "toast.failedUpdateMetadataFallback", "Failed to update metadata fallback settings" ), @@ -7115,17 +7115,17 @@ function hC(e, t, n, i) { } }); try { - bf().then((B) => { - var E; - if (!(B != null && B.ok) || !((E = B == null ? void 0 : B.data) != null && E.prefs)) return; - const J = B.data.prefs || {}, P = !!(J.image ?? Un.metadataFallback.image), H = !!(J.media ?? Un.metadataFallback.media); + bf().then((T) => { + var H; + if (!(T != null && T.ok) || !((H = T == null ? void 0 : T.data) != null && H.prefs)) return; + const J = T.data.prefs || {}, P = !!(J.image ?? Bn.metadataFallback.image), E = !!(J.media ?? Bn.metadataFallback.media); t.metadataFallback = t.metadataFallback || {}; let $ = !1; - t.metadataFallback.image !== P && (t.metadataFallback.image = P, $ = !0), t.metadataFallback.media !== H && (t.metadataFallback.media = H, $ = !0), $ && (Be(t), n("metadataFallback")); + t.metadataFallback.image !== P && (t.metadataFallback.image = P, $ = !0), t.metadataFallback.media !== E && (t.metadataFallback.media = E, $ = !0), $ && (Ue(t), n("metadataFallback")); }).catch(() => { }); - } catch (B) { - (X = console.debug) == null || X.call(console, B); + } catch (T) { + (X = console.debug) == null || X.call(console, T); } e({ id: `${Pn}.Db.Timeout`, @@ -7135,11 +7135,11 @@ function hC(e, t, n, i) { type: "number", defaultValue: Number(((x = t.db) == null ? void 0 : x.timeoutMs) || 5e3), attrs: { min: 1e3, max: 3e4, step: 1e3 }, - onChange: (B) => { + onChange: (T) => { t.db = t.db || {}, t.db.timeoutMs = Math.max( 1e3, - Math.min(3e4, Math.round(Gn(B, 5e3))) - ), Be(t), At(t), n("db.timeoutMs"); + Math.min(3e4, Math.round(xn(T, 5e3))) + ), Ue(t), Zt(t), n("db.timeoutMs"); } }), e({ id: `${Pn}.Db.MaxConnections`, @@ -7147,13 +7147,13 @@ function hC(e, t, n, i) { name: "DB Max Connections", tooltip: "Client-side DB max connections preference (stored locally).", type: "number", - defaultValue: Number(((T = t.db) == null ? void 0 : T.maxConnections) || 10), + defaultValue: Number(((K = t.db) == null ? void 0 : K.maxConnections) || 10), attrs: { min: 1, max: 100, step: 1 }, - onChange: (B) => { + onChange: (T) => { t.db = t.db || {}, t.db.maxConnections = Math.max( 1, - Math.min(100, Math.round(Gn(B, 10))) - ), Be(t), At(t), n("db.maxConnections"); + Math.min(100, Math.round(xn(T, 10))) + ), Ue(t), Zt(t), n("db.maxConnections"); } }), e({ id: `${Pn}.Db.QueryTimeout`, @@ -7161,13 +7161,13 @@ function hC(e, t, n, i) { name: "DB Query Timeout (ms)", tooltip: "Client-side DB query timeout preference (stored locally).", type: "number", - defaultValue: Number(((v = t.db) == null ? void 0 : v.queryTimeoutMs) || 1e3), + defaultValue: Number(((j = t.db) == null ? void 0 : j.queryTimeoutMs) || 1e3), attrs: { min: 500, max: 1e4, step: 500 }, - onChange: (B) => { + onChange: (T) => { t.db = t.db || {}, t.db.queryTimeoutMs = Math.max( 500, - Math.min(1e4, Math.round(Gn(B, 1e3))) - ), Be(t), At(t), n("db.queryTimeoutMs"); + Math.min(1e4, Math.round(xn(T, 1e3))) + ), Ue(t), Zt(t), n("db.queryTimeoutMs"); } }), e({ id: `${Pn}.Observability.Enabled`, @@ -7176,8 +7176,8 @@ function hC(e, t, n, i) { tooltip: m("setting.obs.enabled.desc"), type: "boolean", defaultValue: !!((w = t.observability) != null && w.enabled), - onChange: (B) => { - t.observability = t.observability || {}, t.observability.enabled = !!B, Be(t), At(t), n("observability.enabled"); + onChange: (T) => { + t.observability = t.observability || {}, t.observability.enabled = !!T, Ue(t), Zt(t), n("observability.enabled"); } }), e({ id: `${Pn}.Observability.VerboseErrors`, @@ -7186,8 +7186,8 @@ function hC(e, t, n, i) { tooltip: "Show detailed error messages in toasts and console. Useful for debugging.", type: "boolean", defaultValue: !!((R = t.observability) != null && R.verboseErrors), - onChange: (B) => { - t.observability = t.observability || {}, t.observability.verboseErrors = !!B, Be(t), At(t), n("observability.verboseErrors"); + onChange: (T) => { + t.observability = t.observability || {}, t.observability.verboseErrors = !!T, Ue(t), Zt(t), n("observability.verboseErrors"); } }), e({ id: `${Pn}.Observability.VerboseRouteRegistrationLogs`, @@ -7195,26 +7195,26 @@ function hC(e, t, n, i) { name: "Majoor: Verbose route registration logs", tooltip: "When disabled, Majoor prints a compact startup summary instead of listing every registered API route. Takes effect on the next backend restart.", type: "boolean", - defaultValue: !!(((Y = t.observability) == null ? void 0 : Y.verboseRouteRegistrationLogs) ?? ((F = Un.observability) == null ? void 0 : F.verboseRouteRegistrationLogs) ?? !1), - onChange: async (B) => { - var H, $; - const J = !!B, P = !!(((H = t.observability) == null ? void 0 : H.verboseRouteRegistrationLogs) ?? (($ = Un.observability) == null ? void 0 : $.verboseRouteRegistrationLogs) ?? !1); - t.observability = t.observability || {}, t.observability.verboseRouteRegistrationLogs = J, Be(t), n("observability.verboseRouteRegistrationLogs"); + defaultValue: !!(((V = t.observability) == null ? void 0 : V.verboseRouteRegistrationLogs) ?? ((O = Bn.observability) == null ? void 0 : O.verboseRouteRegistrationLogs) ?? !1), + onChange: async (T) => { + var E, $; + const J = !!T, P = !!(((E = t.observability) == null ? void 0 : E.verboseRouteRegistrationLogs) ?? (($ = Bn.observability) == null ? void 0 : $.verboseRouteRegistrationLogs) ?? !1); + t.observability = t.observability || {}, t.observability.verboseRouteRegistrationLogs = J, Ue(t), n("observability.verboseRouteRegistrationLogs"); try { - const E = await Mf(J); - if (!(E != null && E.ok)) - throw new Error((E == null ? void 0 : E.error) || "Failed to update route logging settings"); - } catch (E) { - t.observability.verboseRouteRegistrationLogs = P, Be(t), n("observability.verboseRouteRegistrationLogs"), Ze((E == null ? void 0 : E.message) || "Failed to update route logging settings", "error"); + const H = await Mf(J); + if (!(H != null && H.ok)) + throw new Error((H == null ? void 0 : H.error) || "Failed to update route logging settings"); + } catch (H) { + t.observability.verboseRouteRegistrationLogs = P, Ue(t), n("observability.verboseRouteRegistrationLogs"), Ae((H == null ? void 0 : H.message) || "Failed to update route logging settings", "error"); } } }), (async () => { - var B, J, P; + var T, J, P; try { - const H = await wf(), $ = !!((J = (B = H == null ? void 0 : H.data) == null ? void 0 : B.prefs) != null && J.enabled); - t.observability = t.observability || {}, t.observability.verboseRouteRegistrationLogs !== $ && (t.observability.verboseRouteRegistrationLogs = $, Be(t), n("observability.verboseRouteRegistrationLogs")); - } catch (H) { - (P = console.debug) == null || P.call(console, H); + const E = await wf(), $ = !!((J = (T = E == null ? void 0 : E.data) == null ? void 0 : T.prefs) != null && J.enabled); + t.observability = t.observability || {}, t.observability.verboseRouteRegistrationLogs !== $ && (t.observability.verboseRouteRegistrationLogs = $, Ue(t), n("observability.verboseRouteRegistrationLogs")); + } catch (E) { + (P = console.debug) == null || P.call(console, E); } })(), e({ id: `${Pn}.Observability.VerboseStartupLogs`, @@ -7222,48 +7222,48 @@ function hC(e, t, n, i) { name: "Majoor: Verbose startup logs", tooltip: "When disabled, Majoor suppresses most informational bootstrap logs during backend startup while keeping warnings and errors. Takes effect on the next backend restart.", type: "boolean", - defaultValue: !!(((N = t.observability) == null ? void 0 : N.verboseStartupLogs) ?? ((V = Un.observability) == null ? void 0 : V.verboseStartupLogs) ?? !1), - onChange: async (B) => { - var H, $; - const J = !!B, P = !!(((H = t.observability) == null ? void 0 : H.verboseStartupLogs) ?? (($ = Un.observability) == null ? void 0 : $.verboseStartupLogs) ?? !1); - t.observability = t.observability || {}, t.observability.verboseStartupLogs = J, Be(t), n("observability.verboseStartupLogs"); + defaultValue: !!(((k = t.observability) == null ? void 0 : k.verboseStartupLogs) ?? ((Y = Bn.observability) == null ? void 0 : Y.verboseStartupLogs) ?? !1), + onChange: async (T) => { + var E, $; + const J = !!T, P = !!(((E = t.observability) == null ? void 0 : E.verboseStartupLogs) ?? (($ = Bn.observability) == null ? void 0 : $.verboseStartupLogs) ?? !1); + t.observability = t.observability || {}, t.observability.verboseStartupLogs = J, Ue(t), n("observability.verboseStartupLogs"); try { - const E = await Gf(J); - if (!(E != null && E.ok)) - throw new Error((E == null ? void 0 : E.error) || "Failed to update startup logging settings"); - } catch (E) { - t.observability.verboseStartupLogs = P, Be(t), n("observability.verboseStartupLogs"), Ze((E == null ? void 0 : E.message) || "Failed to update startup logging settings", "error"); + const H = await Sf(J); + if (!(H != null && H.ok)) + throw new Error((H == null ? void 0 : H.error) || "Failed to update startup logging settings"); + } catch (H) { + t.observability.verboseStartupLogs = P, Ue(t), n("observability.verboseStartupLogs"), Ae((H == null ? void 0 : H.message) || "Failed to update startup logging settings", "error"); } } }), (async () => { - var B, J, P; + var T, J, P; try { - const H = await Sf(), $ = !!((J = (B = H == null ? void 0 : H.data) == null ? void 0 : B.prefs) != null && J.enabled); - t.observability = t.observability || {}, t.observability.verboseStartupLogs !== $ && (t.observability.verboseStartupLogs = $, Be(t), n("observability.verboseStartupLogs")); - } catch (H) { - (P = console.debug) == null || P.call(console, H); + const E = await Gf(), $ = !!((J = (T = E == null ? void 0 : E.data) == null ? void 0 : T.prefs) != null && J.enabled); + t.observability = t.observability || {}, t.observability.verboseStartupLogs !== $ && (t.observability.verboseStartupLogs = $, Ue(t), n("observability.verboseStartupLogs")); + } catch (E) { + (P = console.debug) == null || P.call(console, E); } })(); { - const B = "HuggingFace Token"; - let J = "", P = null, H = 0, $ = !!((k = t.ai) != null && k.huggingFaceTokenVisible); - const E = () => { - var M, j; + const T = "HuggingFace Token"; + let J = "", P = null, E = 0, $ = !!((N = t.ai) != null && N.huggingFaceTokenVisible); + const H = () => { + var M, v; try { - const O = Array.from( + const F = Array.from( document.querySelectorAll('input[data-mjr-hf-token="1"]') ); - for (const D of O) + for (const D of F) try { D.type = $ ? "text" : "password"; } catch (q) { (M = console.debug) == null || M.call(console, q); } - } catch (O) { - (j = console.debug) == null || j.call(console, O); + } catch (F) { + (v = console.debug) == null || v.call(console, F); } - }, oe = (M) => { - var j, O; + }, ne = (M) => { + var v, F; try { const D = String(M || "").trim(); if (!D) return; @@ -7273,27 +7273,27 @@ function hC(e, t, n, i) { for (const ee of q) try { ee.placeholder = D; - } catch (ce) { - (j = console.debug) == null || j.call(console, ce); + } catch (ae) { + (v = console.debug) == null || v.call(console, ae); } } catch (D) { - (O = console.debug) == null || O.call(console, D); + (F = console.debug) == null || F.call(console, D); } }; e({ id: `${Pn}.AI.HuggingFaceTokenVisible`, - category: o(m("cat.advanced"), B), + category: o(m("cat.advanced"), T), name: "Show HuggingFace token", tooltip: "Show or hide the HuggingFace token while editing.", type: "boolean", defaultValue: $, onChange: (M) => { - const j = !!M; - $ = j, t.ai = t.ai || {}, t.ai.huggingFaceTokenVisible = j, Be(t), n("ai.huggingFaceTokenVisible"), setTimeout(E, 0); + const v = !!M; + $ = v, t.ai = t.ai || {}, t.ai.huggingFaceTokenVisible = v, Ue(t), n("ai.huggingFaceTokenVisible"), setTimeout(H, 0); } }), e({ id: `${Pn}.AI.HuggingFaceToken`, - category: o(m("cat.advanced"), B), + category: o(m("cat.advanced"), T), name: "HuggingFace Token", tooltip: [ "Optional token for HuggingFace Hub downloads (higher rate limits).", @@ -7311,66 +7311,66 @@ function hC(e, t, n, i) { "data-mjr-hf-token": "1" }, onChange: (M) => { - var O; - const j = String(M || "").trim(); - if (j !== J) { + var F; + const v = String(M || "").trim(); + if (v !== J) { try { P && (clearTimeout(P), P = null); } catch (D) { - (O = console.debug) == null || O.call(console, D); + (F = console.debug) == null || F.call(console, D); } P = setTimeout(async () => { P = null; - const D = ++H; + const D = ++E; try { - const q = await Zf(j); - if (D !== H) return; + const q = await Zf(v); + if (D !== E) return; if (!(q != null && q.ok)) throw new Error((q == null ? void 0 : q.error) || "Failed to update HuggingFace token"); - J = j, n("ai.huggingFaceToken"), j ? Ze("HuggingFace token saved", "success") : Ze("HuggingFace token cleared", "success", void 0, { + J = v, n("ai.huggingFaceToken"), v ? Ae("HuggingFace token saved", "success") : Ae("HuggingFace token cleared", "success", void 0, { noHistory: !0 }); } catch (q) { - if (D !== H) return; - Ze((q == null ? void 0 : q.message) || "Failed to update HuggingFace token", "error"); + if (D !== E) return; + Ae((q == null ? void 0 : q.message) || "Failed to update HuggingFace token", "error"); } }, 900); } } - }), setTimeout(E, 0), (async () => { - var M, j; + }), setTimeout(H, 0), (async () => { + var M, v; try { - const O = await Cf(), D = ((M = O == null ? void 0 : O.data) == null ? void 0 : M.prefs) || {}, q = !!(D != null && D.has_token), ee = String((D == null ? void 0 : D.token_hint) || "").trim(), ce = q ? `Configured ${ee || "(saved)"}` : "Paste HuggingFace token (hf_...)"; - oe(ce); - } catch (O) { - (j = console.debug) == null || j.call(console, O); + const F = await hf(), D = ((M = F == null ? void 0 : F.data) == null ? void 0 : M.prefs) || {}, q = !!(D != null && D.has_token), ee = String((D == null ? void 0 : D.token_hint) || "").trim(), ae = q ? `Configured ${ee || "(saved)"}` : "Paste HuggingFace token (hf_...)"; + ne(ae); + } catch (F) { + (v = console.debug) == null || v.call(console, F); } })(), e({ id: `${Pn}.AI.VerboseLogs`, - category: o(m("cat.advanced"), B), + category: o(m("cat.advanced"), T), name: "Majoor: Verbose AI logs", tooltip: "Enable detailed HuggingFace/SigLIP2/X-CLIP logs and progress bars during model download/loading.", type: "boolean", - defaultValue: !!(((K = t.ai) == null ? void 0 : K.verboseAiLogs) ?? ((z = Un.ai) == null ? void 0 : z.verboseAiLogs) ?? !1), + defaultValue: !!(((U = t.ai) == null ? void 0 : U.verboseAiLogs) ?? ((z = Bn.ai) == null ? void 0 : z.verboseAiLogs) ?? !1), onChange: async (M) => { var D, q; - const j = !!M, O = !!(((D = t.ai) == null ? void 0 : D.verboseAiLogs) ?? ((q = Un.ai) == null ? void 0 : q.verboseAiLogs) ?? !1); - t.ai = t.ai || {}, t.ai.verboseAiLogs = j, Be(t), n("ai.verboseAiLogs"); + const v = !!M, F = !!(((D = t.ai) == null ? void 0 : D.verboseAiLogs) ?? ((q = Bn.ai) == null ? void 0 : q.verboseAiLogs) ?? !1); + t.ai = t.ai || {}, t.ai.verboseAiLogs = v, Ue(t), n("ai.verboseAiLogs"); try { - const ee = await Wf(j); + const ee = await Wf(v); if (!(ee != null && ee.ok)) throw new Error((ee == null ? void 0 : ee.error) || "Failed to update AI logging settings"); } catch (ee) { - t.ai.verboseAiLogs = O, Be(t), n("ai.verboseAiLogs"), Ze((ee == null ? void 0 : ee.message) || "Failed to update AI logging settings", "error"); + t.ai.verboseAiLogs = F, Ue(t), n("ai.verboseAiLogs"), Ae((ee == null ? void 0 : ee.message) || "Failed to update AI logging settings", "error"); } } }), (async () => { - var M, j, O; + var M, v, F; try { - const D = await Af(), q = !!((j = (M = D == null ? void 0 : D.data) == null ? void 0 : M.prefs) != null && j.enabled); - t.ai = t.ai || {}, t.ai.verboseAiLogs !== q && (t.ai.verboseAiLogs = q, Be(t), n("ai.verboseAiLogs")); + const D = await Af(), q = !!((v = (M = D == null ? void 0 : D.data) == null ? void 0 : M.prefs) != null && v.enabled); + t.ai = t.ai || {}, t.ai.verboseAiLogs !== q && (t.ai.verboseAiLogs = q, Ue(t), n("ai.verboseAiLogs")); } catch (D) { - (O = console.debug) == null || O.call(console, D); + (F = console.debug) == null || F.call(console, D); } })(); } @@ -7382,16 +7382,16 @@ function hC(e, t, n, i) { type: "text", defaultValue: "Loading vector status..." }), (async () => { - var B, J, P, H, $; + var T, J, P, E, $; try { - const E = await xa(); - E != null && E.ok ? (P = console.debug) == null || P.call( + const H = await xa(); + H != null && H.ok ? (P = console.debug) == null || P.call( console, "[Majoor] Vector status:", - `${((B = E.data) == null ? void 0 : B.total) || 0} assets indexed | Model: ${((J = E.data) == null ? void 0 : J.model) || "N/A"}` - ) : (H = console.debug) == null || H.call(console, "[Majoor] Vector status unavailable"); - } catch (E) { - ($ = console.debug) == null || $.call(console, "[Majoor] Vector status fetch failed", E); + `${((T = H.data) == null ? void 0 : T.total) || 0} assets indexed | Model: ${((J = H.data) == null ? void 0 : J.model) || "N/A"}` + ) : (E = console.debug) == null || E.call(console, "[Majoor] Vector status unavailable"); + } catch (H) { + ($ = console.debug) == null || $.call(console, "[Majoor] Vector status fetch failed", H); } })(), e({ id: `${Pn}.AI.VectorBackfillAction`, @@ -7410,9 +7410,9 @@ function hC(e, t, n, i) { type: "combo", defaultValue: "Idle", options: ["Idle", "Run backfill now"], - onChange: async (B) => { - var P, H; - if (String(B || "") !== "Run backfill now") return; + onChange: async (T) => { + var P, E; + if (String(T || "") !== "Run backfill now") return; const J = { history: { trackId: "vector-backfill:advanced-settings", @@ -7423,7 +7423,7 @@ function hC(e, t, n, i) { } }; try { - Ze( + Ae( m( "toast.vectorBackfillStarting", "Starting vector backfill... This may take a while." @@ -7439,25 +7439,25 @@ function hC(e, t, n, i) { } ); const $ = await Tg(64, { - onProgress: (E) => { - const oe = String((E == null ? void 0 : E.status) || "running").toLowerCase() || "running", M = (E == null ? void 0 : E.progress) || (E == null ? void 0 : E.result) || {}, j = Number((M == null ? void 0 : M.candidates) ?? (M == null ? void 0 : M.processed) ?? 0), O = Number((M == null ? void 0 : M.indexed) ?? 0), D = Number((M == null ? void 0 : M.skipped) ?? 0), q = Number((M == null ? void 0 : M.errors) ?? 0), ee = Math.max(j, O + D + q), ce = ee > 0 ? Math.round((O + D + q) / ee * 100) : null, ue = oe === "queued" ? "Vector backfill queued" : `Candidates ${j}, indexed ${O}, skipped ${D}, errors ${q}`; + onProgress: (H) => { + const ne = String((H == null ? void 0 : H.status) || "running").toLowerCase() || "running", M = (H == null ? void 0 : H.progress) || (H == null ? void 0 : H.result) || {}, v = Number((M == null ? void 0 : M.candidates) ?? (M == null ? void 0 : M.processed) ?? 0), F = Number((M == null ? void 0 : M.indexed) ?? 0), D = Number((M == null ? void 0 : M.skipped) ?? 0), q = Number((M == null ? void 0 : M.errors) ?? 0), ee = Math.max(v, F + D + q), ae = ee > 0 ? Math.round((F + D + q) / ee * 100) : null, ue = ne === "queued" ? "Vector backfill queued" : `Candidates ${v}, indexed ${F}, skipped ${D}, errors ${q}`; tl( { summary: "Vector Backfill", detail: ue }, - oe === "failed" ? "error" : oe === "succeeded" ? "success" : "info", + ne === "failed" ? "error" : ne === "succeeded" ? "success" : "info", 0, { history: { ...J.history, - status: oe, + status: ne, detail: ue, progress: { - current: O + D + q, + current: F + D + q, total: ee, - percent: ce, - indexed: O, + percent: ae, + indexed: F, skipped: D, errors: q, - label: oe + label: ne } } } @@ -7465,10 +7465,10 @@ function hC(e, t, n, i) { } }); if ($ != null && $.ok) { - const E = $.data || {}, oe = String((E == null ? void 0 : E.status) || "").toLowerCase(), M = !!(E != null && E.pending) || ["queued", "running", "pending"].includes(oe), j = (E == null ? void 0 : E.progress) || {}, O = Number((E == null ? void 0 : E.processed) ?? (j == null ? void 0 : j.candidates) ?? 0), D = Number((E == null ? void 0 : E.indexed) ?? (j == null ? void 0 : j.indexed) ?? 0), q = Number((E == null ? void 0 : E.skipped) ?? (j == null ? void 0 : j.skipped) ?? 0); + const H = $.data || {}, ne = String((H == null ? void 0 : H.status) || "").toLowerCase(), M = !!(H != null && H.pending) || ["queued", "running", "pending"].includes(ne), v = (H == null ? void 0 : H.progress) || {}, F = Number((H == null ? void 0 : H.processed) ?? (v == null ? void 0 : v.candidates) ?? 0), D = Number((H == null ? void 0 : H.indexed) ?? (v == null ? void 0 : v.indexed) ?? 0), q = Number((H == null ? void 0 : H.skipped) ?? (v == null ? void 0 : v.skipped) ?? 0); if (M) { - const ee = String((E == null ? void 0 : E.job_id) || "").trim(); - Ze( + const ee = String((H == null ? void 0 : H.job_id) || "").trim(); + Ae( m( "toast.vectorBackfillRunning", "Vector backfill still running in background{job}.", @@ -7483,8 +7483,8 @@ function hC(e, t, n, i) { detail: `Vector backfill still running in background${ee ? ` (${ee.slice(0, 8)})` : ""}.`, progress: { current: D + q, - total: Math.max(O, D + q), - percent: Math.max(O, D + q) > 0 ? Math.round((D + q) / Math.max(O, D + q) * 100) : null, + total: Math.max(F, D + q), + percent: Math.max(F, D + q) > 0 ? Math.round((D + q) / Math.max(F, D + q) * 100) : null, indexed: D, skipped: q, label: "running" @@ -7496,17 +7496,17 @@ function hC(e, t, n, i) { const ee = m( "toast.vectorBackfillComplete", "Vector backfill complete! Processed: {processed}, Indexed: {indexed}, Skipped: {skipped}", - { processed: O, indexed: D, skipped: q } + { processed: F, indexed: D, skipped: q } ); - Ze(ee, "success", void 0, { + Ae(ee, "success", void 0, { history: { ...J.history, status: "succeeded", - detail: `Processed ${O}, indexed ${D}, skipped ${q}`, + detail: `Processed ${F}, indexed ${D}, skipped ${q}`, progress: { - current: O, - total: O, - percent: O > 0 ? 100 : null, + current: F, + total: F, + percent: F > 0 ? 100 : null, indexed: D, skipped: q, label: "done" @@ -7518,17 +7518,17 @@ function hC(e, t, n, i) { const ee = await xa(); ee != null && ee.ok && ((P = console.debug) == null || P.call(console, "[Majoor] Vector stats after backfill:", ee.data)); } catch (ee) { - (H = console.debug) == null || H.call(console, "[Majoor] Failed to refresh vector stats:", ee); + (E = console.debug) == null || E.call(console, "[Majoor] Failed to refresh vector stats:", ee); } } else throw new Error( ($ == null ? void 0 : $.error) || m("toast.vectorBackfillFailedGeneric", "Backfill failed") ); } catch ($) { - const E = ($ == null ? void 0 : $.message) || String($ || m("status.unknown", "unknown")); - Ze( + const H = ($ == null ? void 0 : $.message) || String($ || m("status.unknown", "unknown")); + Ae( m("toast.vectorBackfillFailedDetail", "Vector backfill failed: {error}", { - error: E + error: H }), "error", void 0, @@ -7536,7 +7536,7 @@ function hC(e, t, n, i) { history: { ...J.history, status: "failed", - detail: E + detail: H } } ), console.error("[Majoor] Vector backfill error:", $); @@ -7544,12 +7544,12 @@ function hC(e, t, n, i) { } }); } -const Ic = "Majoor", CC = "Majoor Assets Manager"; -function ZC(e, t, n) { +const bc = "Majoor", hh = "Majoor Assets Manager"; +function Zh(e, t, n) { var o, r; - const i = (l, a) => [CC, l, a]; + const i = (l, a) => [hh, l, a]; e({ - id: `${Ic}.AI.VectorSearchEnabled`, + id: `${bc}.AI.VectorSearchEnabled`, category: i(m("cat.search", "Search"), "AI"), name: m("setting.ai.vector.enabled.name", "Enable AI semantic search"), tooltip: m( @@ -7561,24 +7561,24 @@ function ZC(e, t, n) { onChange: async (l) => { t.ai = t.ai || {}; const a = !!(t.ai.vectorSearchEnabled ?? !0), c = !!l; - t.ai.vectorSearchEnabled = c, Be(t), At(t), n("ai.vectorSearchEnabled"); + t.ai.vectorSearchEnabled = c, Ue(t), Zt(t), n("ai.vectorSearchEnabled"); try { const s = await yf(c); if (!(s != null && s.ok)) { - t.ai.vectorSearchEnabled = a, Be(t), At(t), n("ai.vectorSearchEnabled"), Ze((s == null ? void 0 : s.error) || "Failed to update AI vector search setting", "error"); + t.ai.vectorSearchEnabled = a, Ue(t), Zt(t), n("ai.vectorSearchEnabled"), Ae((s == null ? void 0 : s.error) || "Failed to update AI vector search setting", "error"); return; } - Ze( + Ae( c ? "AI semantic search enabled" : "AI semantic search disabled", "info", 2200 ); } catch (s) { - t.ai.vectorSearchEnabled = a, Be(t), At(t), n("ai.vectorSearchEnabled"), Ze((s == null ? void 0 : s.message) || "Failed to update AI vector search setting", "error"); + t.ai.vectorSearchEnabled = a, Ue(t), Zt(t), n("ai.vectorSearchEnabled"), Ae((s == null ? void 0 : s.message) || "Failed to update AI vector search setting", "error"); } } }), e({ - id: `${Ic}.Search.MaxResults`, + id: `${bc}.Search.MaxResults`, category: i(m("cat.search", "Search")), name: m("setting.search.maxResults.name", "Max search results (client)"), tooltip: m( @@ -7586,19 +7586,19 @@ function ZC(e, t, n) { "Maximum number of results requested per search. The backend still enforces MAJOOR_SEARCH_MAX_LIMIT; increase that env var if you need a higher hard cap." ), type: "number", - defaultValue: Number(((r = t.search) == null ? void 0 : r.maxResults) || Ge.SEARCH_DEFAULT_LIMIT), - attrs: { min: 10, max: Ge.MAX_PAGE_SIZE || 2e3, step: 1 }, + defaultValue: Number(((r = t.search) == null ? void 0 : r.maxResults) || Se.SEARCH_DEFAULT_LIMIT), + attrs: { min: 10, max: Se.MAX_PAGE_SIZE || 2e3, step: 1 }, onChange: (l) => { t.search = t.search || {}, t.search.maxResults = Math.max( 10, Math.min( - Ge.MAX_PAGE_SIZE || 2e3, - Number(l) || Ge.SEARCH_DEFAULT_LIMIT + Se.MAX_PAGE_SIZE || 2e3, + Number(l) || Se.SEARCH_DEFAULT_LIMIT ) - ), Be(t), At(t), n("search.maxResults"); + ), Ue(t), Zt(t), n("search.maxResults"); } }), e({ - id: `${Ic}.EnvVars.Reference`, + id: `${bc}.EnvVars.Reference`, category: i(m("cat.advanced"), "Environment variables"), name: "Environment variables reference", tooltip: [ @@ -7629,7 +7629,7 @@ function ZC(e, t, n) { defaultValue: "Hover for full list of environment variables" }); } -const bc = "Majoor Assets Manager", AC = /^\s*Majoor:\s*/i, WC = /* @__PURE__ */ new Set([ +const pc = "Majoor Assets Manager", Ah = /^\s*Majoor:\s*/i, Wh = /* @__PURE__ */ new Set([ "grid.starColor", "grid.badgeImageColor", "grid.badgeVideoColor", @@ -7641,21 +7641,21 @@ const bc = "Majoor Assets Manager", AC = /^\s*Majoor:\s*/i, WC = /* @__PURE__ */ "ui.ratingColor", "ui.tagColor" ]); -let bu = !1, pc = null, uo = null, Fr = null, pu = !1; -function wC(e) { +let bu = !1, yc = null, uo = null, Or = null, pu = !1; +function wh(e) { var n; if (!e || typeof e != "object") return null; const t = { ...e }; try { - typeof t.name == "string" && (t.name = t.name.replace(AC, "").trim()); + typeof t.name == "string" && (t.name = t.name.replace(Ah, "").trim()); } catch (i) { (n = console.debug) == null || n.call(console, i); } try { const i = t.category; - (!Array.isArray(i) || String(i[0] || "") !== bc) && (t.category = [bc]); + (!Array.isArray(i) || String(i[0] || "") !== pc) && (t.category = [pc]); } catch { - t.category = [bc]; + t.category = [pc]; } return t; } @@ -7664,8 +7664,8 @@ function nI(e, t, { initRuntime: n = !1 } = {}) { if (uo) typeof t == "function" && uo.onAppliedListeners.add(t), e && !uo.app && (uo.app = e); else { - const r = Xn(); - r.i18n = r.i18n || {}, typeof r.i18n.followComfyLanguage != "boolean" ? (r.i18n.followComfyLanguage = !0, Wa(!0), Be(r)) : Wa(!!r.i18n.followComfyLanguage); + const r = kn(); + r.i18n = r.i18n || {}, typeof r.i18n.followComfyLanguage != "boolean" ? (r.i18n.followComfyLanguage = !0, Wa(!0), Ue(r)) : Wa(!!r.i18n.followComfyLanguage); const l = /* @__PURE__ */ new Set(); typeof t == "function" && l.add(t); const a = /* @__PURE__ */ new Set(), c = /* @__PURE__ */ new Set(), s = 450, d = () => { @@ -7688,25 +7688,25 @@ function nI(e, t, { initRuntime: n = !1 } = {}) { { key: b }, { warnPrefix: "[Majoor]" } ); - }, I = $c(d, 120), y = $c(u, s), S = (p) => { + }, I = es(d, 120), A = es(u, s), h = (p) => { typeof p == "string" && a.add(p), I(); - }, Z = (p) => { - typeof p == "string" && c.add(p), y(); - }, C = () => { - const p = Xn(); - Object.assign(r, p), At(r), S("storage"); + }, S = (p) => { + typeof p == "string" && c.add(p), A(); + }, W = () => { + const p = kn(); + Object.assign(r, p), Zt(r), h("storage"); }, g = (p) => { - !p || p.key !== Oi || p.newValue !== p.oldValue && C(); + !p || p.key !== Fi || p.newValue !== p.oldValue && W(); }; if (!bu) { - if (pc && typeof window < "u") + if (yc && typeof window < "u") try { - window.removeEventListener("storage", pc); + window.removeEventListener("storage", yc); } catch (p) { (i = console.debug) == null || i.call(console, p); } try { - window.addEventListener("storage", g), bu = !0, pc = g; + window.addEventListener("storage", g), bu = !0, yc = g; } catch (p) { (o = console.debug) == null || o.call(console, p); } @@ -7718,40 +7718,40 @@ function nI(e, t, { initRuntime: n = !1 } = {}) { for (const L of l) try { L(r, p); - } catch (h) { - (b = console.debug) == null || b.call(console, h); + } catch (C) { + (b = console.debug) == null || b.call(console, C); } - WC.has(String(p || "")) ? Z(p) : S(p); + Wh.has(String(p || "")) ? S(p) : h(p); }, onAppliedListeners: l, - refreshFromStorage: C, + refreshFromStorage: W, settings: r }; } if (n && !pu) { const r = e || uo.app, l = uo.settings; - Wg(r), At(l), Ty(r), oa(), Ph(), Qh(), l != null && l.watcher && typeof l.watcher.enabled == "boolean" && Ma(!!l.watcher.enabled).catch(() => { - }), Dh(), pu = !0; + Wg(r), Zt(l), Ty(r), oa(), PC(), QC(), l != null && l.watcher && typeof l.watcher.enabled == "boolean" && Ma(!!l.watcher.enabled).catch(() => { + }), DC(), pu = !0; } return uo; } -const MC = (e, t) => nI(e, t, { initRuntime: !0 }).settings, SC = (e, t) => { +const Mh = (e, t) => nI(e, t, { initRuntime: !0 }).settings, Gh = (e, t) => { const n = nI(e, t, { initRuntime: !1 }); - if (Fr) - return Fr; + if (Or) + return Or; const i = (o) => { - const r = wC(o); - r && Fr.push(r); + const r = wh(o); + r && Or.push(r); }; - return Fr = [], $h(i, n.settings, n.notifyApplied), rC(i, n.settings, n.notifyApplied), tC(i, n.settings, n.notifyApplied), iC(i, n.settings, n.notifyApplied), yC(i, n.settings, n.notifyApplied), hC(i, n.settings, n.notifyApplied, e), ZC(i, n.settings, n.notifyApplied), Fr; + return Or = [], $C(i, n.settings, n.notifyApplied), rh(i, n.settings, n.notifyApplied), th(i, n.settings, n.notifyApplied), ih(i, n.settings, n.notifyApplied), yh(i, n.settings, n.notifyApplied), Ch(i, n.settings, n.notifyApplied, e), Zh(i, n.settings, n.notifyApplied), Or; }; var og; try { - const e = Xn(); - e != null && e.watcher && typeof e.watcher.enabled == "boolean" && Ng().then((t) => { + const e = kn(); + e != null && e.watcher && typeof e.watcher.enabled == "boolean" && kg().then((t) => { var i; const n = !!(t != null && t.ok) && !!((i = t == null ? void 0 : t.data) != null && i.enabled); - typeof n == "boolean" && n !== !!e.watcher.enabled && (e.watcher.enabled = n, Be(e), oi( + typeof n == "boolean" && n !== !!e.watcher.enabled && (e.watcher.enabled = n, Ue(e), oi( "mjr-settings-changed", { key: "watcher.enabled" }, { warnPrefix: "[Majoor]" } @@ -7761,8 +7761,8 @@ try { } catch (e) { (og = console.debug) == null || og.call(console, e); } -const Fi = "mjr:asset-rating-changed", Do = "mjr:asset-tags-changed", iI = "mjr:viewer-info-refreshed", ht = Object.freeze({ - ASSET_RATING_CHANGED: Fi, +const Oi = "mjr:asset-rating-changed", Do = "mjr:asset-tags-changed", iI = "mjr:viewer-info-refreshed", ft = Object.freeze({ + ASSET_RATING_CHANGED: Oi, ASSET_TAGS_CHANGED: Do, VIEWER_INFO_REFRESHED: iI, SCAN_COMPLETE: "mjr-scan-complete", @@ -7801,11 +7801,11 @@ const Fi = "mjr:asset-rating-changed", Do = "mjr:asset-tags-changed", iI = "mjr: OPEN_STACK_GROUP: "mjr:open-stack-group", OPEN_MESSAGE_HISTORY: "mjr:open-message-history" }); -let Eo = null; +let Ho = null; function oI(e) { return e ? typeof (e == null ? void 0 : e.isConnected) == "boolean" ? e.isConnected : !0 : !1; } -function GC() { +function Sh() { var e; try { const t = document.getElementById("mjr-assets-grid") || document.querySelector(".mjr-grid"); @@ -7815,16 +7815,16 @@ function GC() { } return null; } -function Ds(e) { - return Eo = e || null, Eo; +function ja(e) { + return Ho = e || null, Ho; } -function ja(e = null) { - (!e || Eo === e) && (Eo = null); +function va(e = null) { + (!e || Ho === e) && (Ho = null); } -function So() { - return oI(Eo) ? Eo : (Eo = null, GC()); +function Go() { + return oI(Ho) ? Ho : (Ho = null, Sh()); } -function Qa(e) { +function _a(e) { var n, i, o; const t = /* @__PURE__ */ new Set(); if (!e) return t; @@ -7858,7 +7858,7 @@ function rI(e, t, n = "") { } return i; } -function xC(e, t, n) { +function xh(e, t, n) { var o, r; if (!e) return; const i = t instanceof Set ? t : new Set(Array.from(t || []).map(String)); @@ -7872,13 +7872,13 @@ function xC(e, t, n) { (r = console.debug) == null || r.call(console, l); } } -function jC(e, t, { activeId: n = "" } = {}, i) { +function jh(e, t, { activeId: n = "" } = {}, i) { var a, c, s; if (!e) return []; const o = new Set( Array.from(t || []).map(String).filter(Boolean) ), r = rI(e, o, n); - xC(e, o, i); + xh(e, o, i); const l = { selectedIds: r, activeId: n || r[0] || "" }; try { (a = e.dispatchEvent) == null || a.call( @@ -7895,55 +7895,55 @@ function jC(e, t, { activeId: n = "" } = {}, i) { } return r; } -function vC(e) { +function vh(e) { try { return CSS != null && CSS.escape ? CSS.escape(String(e)) : String(e).replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1"); } catch { return String(e).replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1"); } } -const Es = { +const Hs = { suspended: !1, scope: null, ratingHotkeysActive: !1 }; function Mo() { - return Es; + return Hs; } function wr(e) { - Es.scope = e == null ? null : String(e); + Hs.scope = e == null ? null : String(e); } function yu(e) { - Es.ratingHotkeysActive = !!e; + Hs.ratingHotkeysActive = !!e; } let Mr = null, bl = null; -const lI = ".mjr-viewer-overlay", LC = ".mjr-mfv"; +const lI = ".mjr-viewer-overlay", Lh = ".mjr-mfv"; function aI(e) { return !!e && typeof e.appendChild == "function"; } -function Hs() { +function Es() { return typeof document > "u" ? null : (document == null ? void 0 : document.body) || null; } -function VC() { +function Yh() { return typeof document > "u" ? null : (document == null ? void 0 : document.body) || (document == null ? void 0 : document.documentElement) || null; } function cI(e) { - return aI(e) ? e === Hs() ? !0 : typeof (e == null ? void 0 : e.isConnected) == "boolean" ? e.isConnected : !0 : !1; + return aI(e) ? e === Es() ? !0 : typeof (e == null ? void 0 : e.isConnected) == "boolean" ? e.isConnected : !0 : !1; } function sI(e) { return aI(e) ? e : null; } -function _a(e) { - return cI(e) ? e : Hs(); +function $a(e) { + return cI(e) ? e : Es(); } function dI(e) { - const t = VC(); - return cI(t) ? t : _a(e); + const t = Yh(); + return cI(t) ? t : $a(e); } -function uI(e, t, n = _a) { +function uI(e, t, n = $a) { var r, l; const i = [], o = /* @__PURE__ */ new Set(); - for (const a of [n(t), Hs(), t]) { + for (const a of [n(t), Es(), t]) { if (!a || o.has(a)) continue; o.add(a); let c = []; @@ -7957,7 +7957,7 @@ function uI(e, t, n = _a) { } return i; } -function mI(e, t, n = _a) { +function mI(e, t, n = $a) { var r; const i = n(t); if (!i) return; @@ -7970,21 +7970,21 @@ function mI(e, t, n = _a) { (r = console.debug) == null || r.call(console, a); } } -function YC(e) { - return Mr = sI(e), mI(lI, Mr), () => kC(e); +function Vh(e) { + return Mr = sI(e), mI(lI, Mr), () => Xh(e); } -function kC(e) { +function Xh(e) { (!e || Mr === e) && (Mr = null); } -function XC(e) { - return bl = sI(e), mI(LC, bl, dI), () => NC(e); +function Nh(e) { + return bl = sI(e), mI(Lh, bl, dI), () => kh(e); } -function NC(e) { +function kh(e) { (!e || bl === e) && (bl = null); } -function RC(e) { +function Rh(e) { var n, i; - const t = _a(Mr); + const t = $a(Mr); try { (n = t == null ? void 0 : t.appendChild) == null || n.call(t, e); } catch (o) { @@ -8002,31 +8002,31 @@ function fu(e) { } return t; } -function FC() { +function Oh() { return uI(lI, Mr); } -let Nl = null, yc = null; -async function OC() { - return Nl || (yc || (yc = import("./FloatingViewer-BUg810bV.js").then((e) => (Nl = e.FloatingViewer, Nl))), yc); +let kl = null, fc = null; +async function Fh() { + return kl || (fc || (fc = import("./FloatingViewer-C4ghYm3b.js").then((e) => (kl = e.FloatingViewer, kl))), fc); } -let zC = null; -const Hn = Object.freeze({ SIMPLE: "simple", AB: "ab", SIDE: "side", GRID: "grid" }); -let at = null; +let zh = null; +const En = Object.freeze({ SIMPLE: "simple", AB: "ab", SIDE: "side", GRID: "grid" }); +let ct = null; function qs() { - return fe.MFV_LIVE_DEFAULT !== !1; + return he.MFV_LIVE_DEFAULT !== !1; } function Ps() { - return fe.MFV_PREVIEW_DEFAULT !== !1; + return he.MFV_PREVIEW_DEFAULT !== !1; } -let Co = qs(), $i = Ps(), es = !1, Oo = null, ts = 0; -function JC() { - Co = qs(), $i = Ps(), at == null || at.setLiveActive(Co), at == null || at.setPreviewActive($i); +let ho = qs(), $i = Ps(), ts = !1, Fo = null, ns = 0; +function Jh() { + ho = qs(), $i = Ps(), ct == null || ct.setLiveActive(ho), ct == null || ct.setPreviewActive($i); } -async function Or() { +async function Fr() { var e; - if (!at) { - const t = await OC(); - at || (at = new t({ + if (!ct) { + const t = await Fh(); + ct || (ct = new t({ controller: { close: () => zn.close(), toggle: () => zn.toggle(), @@ -8035,28 +8035,28 @@ async function Or() { toggleNodeStream: () => zn.toggleNodeStream(), popOut: () => zn.popOut(), onModeChanged: (n) => { - at != null && at.isVisible && n !== Hn.SIMPLE && ra(); + ct != null && ct.isVisible && n !== En.SIMPLE && ra(); }, handleForwardedKeydown: (n) => $s(n) } - }), fu(at.render())); + }), fu(ct.render())); } try { - const t = (at == null ? void 0 : at.element) || null; + const t = (ct == null ? void 0 : ct.element) || null; (t == null ? void 0 : t.isConnected) === !1 && fu(t); } catch (t) { (e = console.debug) == null || e.call(console, t); } - return at; + return ct; } function Qs() { var e; try { - Oo == null || Oo.abort(); + Fo == null || Fo.abort(); } catch (t) { (e = console.debug) == null || e.call(console, t); } - Oo = null; + Fo = null; } function _s() { var e; @@ -8066,31 +8066,31 @@ function _s() { } catch (t) { (e = console.debug) == null || e.call(console, t); } - return So(); + return Go(); } -function TC() { +function Th() { var e, t; - if (at) { + if (ct) { try { - (e = at.dispose) == null || e.call(at); + (e = ct.dispose) == null || e.call(ct); } catch (n) { (t = console.debug) == null || t.call(console, n); } - at = null; + ct = null; } } function ar(e) { typeof window > "u" || window.dispatchEvent( - new CustomEvent(ht.MFV_VISIBILITY_CHANGED, { + new CustomEvent(ft.MFV_VISIBILITY_CHANGED, { detail: { visible: !!e } }) ); } function Rl(e) { var t; - e && (e.setLiveActive(Co), e.setPreviewActive($i), (t = e.setNodeStreamActive) == null || t.call(e, !1)); + e && (e.setLiveActive(ho), e.setPreviewActive($i), (t = e.setNodeStreamActive) == null || t.call(e, !1)); } -function BC(e) { +function Kh(e) { var t, n; try { const i = _s(); @@ -8103,46 +8103,46 @@ function BC(e) { return (n = console.debug) == null || n.call(console, "[MFV] _findAdjacentGridId error", i), null; } } -async function ns(e) { - if (!e.length || !at) return; +async function is(e) { + if (!e.length || !ct) return; Qs(); - const t = ++ts, n = typeof AbortController < "u" ? new AbortController() : null; - Oo = n; + const t = ++ns, n = typeof AbortController < "u" ? new AbortController() : null; + Fo = n; try { - const i = at.getPinnedSlots(), o = i.size > 0, r = at._mode, l = r === Hn.GRID, a = r === Hn.AB || r === Hn.SIDE, c = l ? 4 : 2; + const i = ct.getPinnedSlots(), o = i.size > 0, r = ct._mode, l = r === En.GRID, a = r === En.AB || r === En.SIDE, c = l ? 4 : 2; let s = e.slice(0, c); if (o && (a || l)) { const I = c - i.size; s = s.slice(0, Math.max(1, I)); } else if (s.length === 1 && a) { - const I = BC(s[0]); + const I = Kh(s[0]); I && (s = [s[0], I]); } const d = await Bs(s, n ? { signal: n.signal } : {}); - if (n != null && n.signal.aborted || ts !== t || !(d != null && d.ok) || !Array.isArray(d.data) || !d.data.length || !at) return; + if (n != null && n.signal.aborted || ns !== t || !(d != null && d.ok) || !Array.isArray(d.data) || !d.data.length || !ct) return; const u = d.data; if (l) { if (o) { const I = { - A: at._mediaA, - B: at._mediaB, - C: at._mediaC, - D: at._mediaD - }, y = ["A", "B", "C", "D"].filter((Z) => !i.has(Z)); - let S = 0; - for (const Z of y) - S < u.length && (I[Z] = u[S++]); - at.loadMediaQuad(I.A, I.B, I.C, I.D); - } else u.length >= 3 ? at.loadMediaQuad(u[0], u[1], u[2], u[3] || null) : u.length >= 2 ? at.loadMediaPair(u[0], u[1]) : at.loadMediaA(u[0], { autoMode: !0 }); + A: ct._mediaA, + B: ct._mediaB, + C: ct._mediaC, + D: ct._mediaD + }, A = ["A", "B", "C", "D"].filter((S) => !i.has(S)); + let h = 0; + for (const S of A) + h < u.length && (I[S] = u[h++]); + ct.loadMediaQuad(I.A, I.B, I.C, I.D); + } else u.length >= 3 ? ct.loadMediaQuad(u[0], u[1], u[2], u[3] || null) : u.length >= 2 ? ct.loadMediaPair(u[0], u[1]) : ct.loadMediaA(u[0], { autoMode: !0 }); return; } - if (i.has("A") && i.has("B") && at._mediaA && at._mediaB) + if (i.has("A") && i.has("B") && ct._mediaA && ct._mediaB) return; - i.has("A") && at._mediaA ? at.loadMediaPair(at._mediaA, u[0]) : i.has("B") && at._mediaB ? at.loadMediaPair(u[0], at._mediaB) : s.length >= 2 && u.length >= 2 ? at.loadMediaPair(u[0], u[1]) : at.loadMediaA(u[0], { autoMode: !0 }); + i.has("A") && ct._mediaA ? ct.loadMediaPair(ct._mediaA, u[0]) : i.has("B") && ct._mediaB ? ct.loadMediaPair(u[0], ct._mediaB) : s.length >= 2 && u.length >= 2 ? ct.loadMediaPair(u[0], u[1]) : ct.loadMediaA(u[0], { autoMode: !0 }); } catch (i) { (i == null ? void 0 : i.name) !== "AbortError" && ai(i, "floatingViewerManager._loadFromIds"); } finally { - Oo === n && (Oo = null); + Fo === n && (Fo = null); } } function ra() { @@ -8150,43 +8150,43 @@ function ra() { try { const t = _s(); if (!t) return; - const n = Qa(t); + const n = _a(t); if (!n.size) return; - ns(Array.from(n)); + is(Array.from(n)); } catch (t) { (e = console.debug) == null || e.call(console, "[MFV] Error reading current grid selection", t); } } function gI(e) { var n, i; - if (!(at != null && at.isVisible)) return; + if (!(ct != null && ct.isVisible)) return; const t = Array.isArray((n = e == null ? void 0 : e.detail) == null ? void 0 : n.selectedIds) ? e.detail.selectedIds.map(String).filter(Boolean) : []; if (t.length) { - ns(t); + is(t); return; } try { const o = _s(); if (!o) return; - const r = Array.from(Qa(o)).map(String).filter(Boolean); + const r = Array.from(_a(o)).map(String).filter(Boolean); if (!r.length) return; - ns(r); + is(r); } catch (o) { (i = console.debug) == null || i.call(console, "[MFV] selection fallback failed", o); } } -function fc() { - es || typeof window > "u" || (window.addEventListener(ht.SELECTION_CHANGED, gI), es = !0); +function Cc() { + ts || typeof window > "u" || (window.addEventListener(ft.SELECTION_CHANGED, gI), ts = !0); } function II() { - typeof window < "u" && window.removeEventListener(ht.SELECTION_CHANGED, gI), es = !1, Qs(); + typeof window < "u" && window.removeEventListener(ft.SELECTION_CHANGED, gI), ts = !1, Qs(); } let pl = !1, zo = null, Jo = null, To = null, nl = null, Zo = null, ur = ""; function il() { var e; - at != null && at.isVisible && ((e = at.refreshSidebar) == null || e.call(at)); + ct != null && ct.isVisible && ((e = ct.refreshSidebar) == null || e.call(ct)); } -function UC() { +function Bh() { bI(); const e = typeof window < "u" ? window : globalThis; if (typeof e.requestAnimationFrame == "function") { @@ -8210,7 +8210,7 @@ function bI() { } Zo = null, ur = ""; } -function hu() { +function Cu() { var e; if (!pl) try { @@ -8224,12 +8224,12 @@ function hu() { To == null || To.call(this, o), il(); }; const i = n.canvas; - i != null && i.addEventListener && (nl = UC, i.addEventListener("pointerup", nl)), pl = !0; + i != null && i.addEventListener && (nl = Bh, i.addEventListener("pointerup", nl)), pl = !0; } catch (t) { (e = console.debug) == null || e.call(console, "[MFV] _bindNodeSelectionListener error", t); } } -function KC() { +function Uh() { var e, t; if (pl) { bI(); @@ -8244,41 +8244,41 @@ function KC() { } const zn = { async open() { - const e = await Or(); - e.show(), Rl(e), fc(), hu(), pl || requestAnimationFrame(() => hu()), ra(), ar(!0); + const e = await Fr(); + e.show(), Rl(e), Cc(), Cu(), pl || requestAnimationFrame(() => Cu()), ra(), ar(!0); }, close() { var e; - if (at) + if (ct) try { - at.isPopped && at.popIn(), at.hide(); + ct.isPopped && ct.popIn(), ct.hide(); } catch (t) { (e = console.debug) == null || e.call(console, t); } - II(), KC(), ar(!1); + II(), Uh(), ar(!1); }, async toggle() { - at != null && at.isVisible ? zn.close() : await zn.open(); + ct != null && ct.isVisible ? zn.close() : await zn.open(); }, toggleLive() { - zn.setLiveActive(!Co); + zn.setLiveActive(!ho); }, togglePreview() { zn.setPreviewActive(!$i); }, async toggleCompareAB() { - const e = await Or(); + const e = await Fr(); if (!!!e.isVisible) { - e.setMode(Hn.AB), e.show(), Rl(e), fc(), ra(), ar(!0); + e.setMode(En.AB), e.show(), Rl(e), Cc(), ra(), ar(!0); return; } const i = { - [Hn.AB]: Hn.SIDE, - [Hn.SIDE]: Hn.SIMPLE, - [Hn.GRID]: Hn.SIMPLE, - [Hn.SIMPLE]: Hn.AB - }[e._mode] || Hn.AB; - e.setMode(i), i !== Hn.SIMPLE && ra(); + [En.AB]: En.SIDE, + [En.SIDE]: En.SIMPLE, + [En.GRID]: En.SIMPLE, + [En.SIMPLE]: En.AB + }[e._mode] || En.AB; + e.setMode(i), i !== En.SIMPLE && ra(); }, /** * Open the MFV (if needed) and load a single file/asset. @@ -8286,12 +8286,12 @@ const zn = { * @param {object} fileData Raw output { filename, subfolder, type } or full asset object. */ async upsertWithContent(e) { - const t = await Or(), n = !!t.isVisible; - t.show(), Rl(t), fc(); + const t = await Fr(), n = !!t.isVisible; + t.show(), Rl(t), Cc(); const i = t._mode; - if (i === Hn.AB || i === Hn.SIDE || i === Hn.GRID) { + if (i === En.AB || i === En.SIDE || i === En.GRID) { const r = t.getPinnedSlots(); - if (i === Hn.GRID) { + if (i === En.GRID) { const l = { A: t._mediaA, B: t._mediaB, @@ -8305,22 +8305,22 @@ const zn = { n || ar(!0); }, setLiveActive(e) { - Co = !!e, at == null || at.setLiveActive(Co); + ho = !!e, ct == null || ct.setLiveActive(ho); }, getLiveActive() { - return Co; + return ho; }, /** * Toggle the viewer between the expanded dialog overlay and the floating panel. * If the viewer isn't open yet, it is opened first so there's something to see. */ async popOut() { - const e = await Or(); + const e = await Fr(); e.isPopped ? e.popIn() : (e.isVisible || await zn.open(), e.popOut()); }, // ── Preview stream (KSampler denoising steps) ───────────────────────── setPreviewActive(e) { - $i = !!e, at == null || at.setPreviewActive($i); + $i = !!e, ct == null || ct.setPreviewActive($i); }, getPreviewActive() { return $i; @@ -8332,7 +8332,7 @@ const zn = { */ async feedPreviewBlob(e, t = {}) { if (!$i) return; - const n = await Or(), i = !!n.isVisible; + const n = await Fr(), i = !!n.isVisible; n.isVisible || n.show(), Rl(n), n.loadPreviewBlob(e, ...Object.keys(t).length ? [t] : []), i || ar(!0); }, // ── Node Stream (intermediate node outputs) ─────────────────────────── @@ -8341,7 +8341,7 @@ const zn = { setNodeStreamActive(e) { var t; { - (t = at == null ? void 0 : at.setNodeStreamActive) == null || t.call(at, !1); + (t = ct == null ? void 0 : ct.setNodeStreamActive) == null || t.call(ct, !1); return; } }, @@ -8356,19 +8356,19 @@ const zn = { async feedNodeStream(e) { } }; -let va = !1; -const pI = () => zn.open(), yI = () => zn.close(), fI = () => zn.toggle(), hI = () => zn.toggleLive(), CI = () => zn.togglePreview(), ZI = () => zn.popOut(), AI = () => { +let La = !1; +const pI = () => zn.open(), yI = () => zn.close(), fI = () => zn.toggle(), CI = () => zn.toggleLive(), hI = () => zn.togglePreview(), ZI = () => zn.popOut(), AI = () => { try { - at != null && at.isPopped && at.popIn(); + ct != null && ct.isPopped && ct.popIn(); } catch { } }, WI = (e) => { var n; const t = String(((n = e == null ? void 0 : e.detail) == null ? void 0 : n.key) || ""); - (!t || t === "viewer" || t === "viewer.mfvLiveDefault" || t === "viewer.mfvPreviewDefault") && JC(); + (!t || t === "viewer" || t === "viewer.mfvLiveDefault" || t === "viewer.mfvPreviewDefault") && Jh(); }, $s = (e) => { var o, r, l, a, c; - if (!(at != null && at.isVisible) || Mo().scope === "viewer") return; + if (!(ct != null && ct.isVisible) || Mo().scope === "viewer") return; const t = ((r = (o = e == null ? void 0 : e.key) == null ? void 0 : o.toLowerCase) == null ? void 0 : r.call(o)) || ""; if (((l = e == null ? void 0 : e.target) == null ? void 0 : l.isContentEditable) || ((c = (a = e == null ? void 0 : e.target) == null ? void 0 : a.closest) == null ? void 0 : c.call(a, "input, textarea, select, [contenteditable='true']"))) return; const i = () => { @@ -8393,36 +8393,36 @@ const pI = () => zn.open(), yI = () => zn.close(), fI = () => zn.toggle(), hI = } }; function wI() { - va || typeof window > "u" || !(window != null && window.addEventListener) || (window.addEventListener(ht.MFV_OPEN, pI), window.addEventListener(ht.MFV_CLOSE, yI), window.addEventListener(ht.MFV_TOGGLE, fI), window.addEventListener(ht.MFV_LIVE_TOGGLE, hI), window.addEventListener(ht.MFV_PREVIEW_TOGGLE, CI), window.addEventListener(ht.MFV_POPOUT, ZI), window.addEventListener(ht.SETTINGS_CHANGED, WI), window.addEventListener("keydown", $s, !0), window.addEventListener("beforeunload", AI), va = !0); + La || typeof window > "u" || !(window != null && window.addEventListener) || (window.addEventListener(ft.MFV_OPEN, pI), window.addEventListener(ft.MFV_CLOSE, yI), window.addEventListener(ft.MFV_TOGGLE, fI), window.addEventListener(ft.MFV_LIVE_TOGGLE, CI), window.addEventListener(ft.MFV_PREVIEW_TOGGLE, hI), window.addEventListener(ft.MFV_POPOUT, ZI), window.addEventListener(ft.SETTINGS_CHANGED, WI), window.addEventListener("keydown", $s, !0), window.addEventListener("beforeunload", AI), La = !0); } -function DC() { +function Dh() { if (typeof window > "u" || !(window != null && window.removeEventListener)) { - va = !1; + La = !1; return; } - window.removeEventListener(ht.MFV_OPEN, pI), window.removeEventListener(ht.MFV_CLOSE, yI), window.removeEventListener(ht.MFV_TOGGLE, fI), window.removeEventListener(ht.MFV_LIVE_TOGGLE, hI), window.removeEventListener(ht.MFV_PREVIEW_TOGGLE, CI), window.removeEventListener(ht.MFV_POPOUT, ZI), window.removeEventListener(ht.SETTINGS_CHANGED, WI), window.removeEventListener("keydown", $s, !0), window.removeEventListener("beforeunload", AI), va = !1; + window.removeEventListener(ft.MFV_OPEN, pI), window.removeEventListener(ft.MFV_CLOSE, yI), window.removeEventListener(ft.MFV_TOGGLE, fI), window.removeEventListener(ft.MFV_LIVE_TOGGLE, CI), window.removeEventListener(ft.MFV_PREVIEW_TOGGLE, hI), window.removeEventListener(ft.MFV_POPOUT, ZI), window.removeEventListener(ft.SETTINGS_CHANGED, WI), window.removeEventListener("keydown", $s, !0), window.removeEventListener("beforeunload", AI), La = !1; } function MI({ reinstallGlobalHandlers: e = !1 } = {}) { var n; - const t = !!(at != null && at.isVisible); + const t = !!(ct != null && ct.isVisible); try { - at != null && at.isPopped && at.popIn(); + ct != null && ct.isPopped && ct.popIn(); } catch (o) { (n = console.debug) == null || n.call(console, o); } - DC(), II(), Qs(), ts += 1, Co = qs(), $i = Ps(), TC(), t && ar(!1), e && wI(); + Dh(), II(), Qs(), ns += 1, ho = qs(), $i = Ps(), Th(), t && ar(!1), e && wI(); } -const La = "progress-update", Fl = Symbol.for("mjr.mfv.progress.queuePromptPatch"), is = "__MJR_MFV_PROGRESS_SERVICE__"; -function EC() { +const Ya = "progress-update", Ol = Symbol.for("mjr.mfv.progress.queuePromptPatch"), os = "__MJR_MFV_PROGRESS_SERVICE__"; +function Hh() { return typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : {}; } -function Cu(e, t) { +function hu(e, t) { if (typeof CustomEvent == "function") return new CustomEvent(e, { detail: t }); const n = typeof Event == "function" ? new Event(e) : { type: e }; return n.detail = t, n; } -class HC { +class Eh { constructor(t, n = () => Qn()) { this.id = String(t || ""), this.promptApi = null, this.executedNodeIds = [], this.totalNodes = 0, this.currentlyExecuting = null, this.errorDetails = null, this._getApp = typeof n == "function" ? n : () => null; } @@ -8472,11 +8472,11 @@ class HC { this.errorDetails = t || null; } } -class qC extends EventTarget { +class qh extends EventTarget { constructor({ - getApi: t = (o) => Ca(o), + getApi: t = (o) => ha(o), getApp: n = () => Qn(), - waitForApi: i = (o) => hg(o) + waitForApi: i = (o) => Cg(o) } = {}) { super(), this._getApi = t, this._getApp = n, this._waitForApi = i, this.promptsMap = /* @__PURE__ */ new Map(), this.currentExecution = null, this.lastQueueRemaining = 0, this._api = null, this._listenerEntries = [], this._initPromise = null; } @@ -8496,7 +8496,7 @@ class qC extends EventTarget { getOrMakePrompt(t) { const n = String(t || "").trim() || "unknown"; let i = this.promptsMap.get(n); - return i || (i = new HC(n, this._getApp), this.promptsMap.set(n, i)), i; + return i || (i = new Eh(n, this._getApp), this.promptsMap.set(n, i)), i; } async ensureInitialized({ api: t = null, app: n = null, timeoutMs: i = 0 } = {}) { return t && this._api === t ? t : !t && this._api ? this._api : this._initPromise ? this._initPromise : (this._initPromise = this._ensureInitializedInternal({ api: t, app: n, timeoutMs: i }).finally(() => { @@ -8520,28 +8520,28 @@ class qC extends EventTarget { _patchQueuePrompt(t) { var l; if (!t || typeof t.queuePrompt != "function") return; - const n = (l = t.queuePrompt) == null ? void 0 : l[Fl]; + const n = (l = t.queuePrompt) == null ? void 0 : l[Ol]; if ((n == null ? void 0 : n.service) === this || n != null && n.service && n.service !== this) return; const i = t.queuePrompt, o = this, r = async function(a, c, ...s) { let d; try { d = await i.apply(this, [a, c, ...s]); } catch (I) { - const y = o.getOrMakePrompt("error"); - throw y.error({ exception_type: "Unknown." }), o.currentExecution = y, o.dispatchProgressUpdate(), I; + const A = o.getOrMakePrompt("error"); + throw A.error({ exception_type: "Unknown." }), o.currentExecution = A, o.dispatchProgressUpdate(), I; } const u = String((d == null ? void 0 : d.prompt_id) || (d == null ? void 0 : d.promptId) || "").trim(); if (u) { const I = o.getOrMakePrompt(u); I.setPrompt(c), o.currentExecution || (o.currentExecution = I), o.dispatchEvent( - Cu("queue-prompt", { + hu("queue-prompt", { prompt: I }) ), o.dispatchProgressUpdate(); } return d; }; - Object.defineProperty(r, Fl, { + Object.defineProperty(r, Ol, { configurable: !0, value: { service: o, @@ -8588,19 +8588,19 @@ class qC extends EventTarget { t.addEventListener(n, i), this._listenerEntries.push({ api: t, type: n, handler: i }); } dispatchProgressUpdate() { - this.dispatchEvent(Cu(La, this.getSnapshot())); + this.dispatchEvent(hu(Ya, this.getSnapshot())); } dispose({ resetPatchedQueuePrompt: t = !1, keepState: n = !1 } = {}) { var i, o, r, l, a, c, s; for (const { api: d, type: u, handler: I } of this._listenerEntries.splice(0)) try { (i = d == null ? void 0 : d.removeEventListener) == null || i.call(d, u, I); - } catch (y) { - (o = console.debug) == null || o.call(console, y); + } catch (A) { + (o = console.debug) == null || o.call(console, A); } - if (t && ((a = (l = (r = this._api) == null ? void 0 : r.queuePrompt) == null ? void 0 : l[Fl]) == null ? void 0 : a.service) === this) + if (t && ((a = (l = (r = this._api) == null ? void 0 : r.queuePrompt) == null ? void 0 : l[Ol]) == null ? void 0 : a.service) === this) try { - const d = ((c = this._api.queuePrompt[Fl]) == null ? void 0 : c.originalQueuePrompt) || null; + const d = ((c = this._api.queuePrompt[Ol]) == null ? void 0 : c.originalQueuePrompt) || null; typeof d == "function" && (this._api.queuePrompt = d); } catch (d) { (s = console.debug) == null || s.call(console, d); @@ -8608,12 +8608,12 @@ class qC extends EventTarget { this._api = null, n || (this.promptsMap.clear(), this.currentExecution = null, this.lastQueueRemaining = 0); } } -const os = EC(), Ao = os[is] || new qC(); -os[is] || (os[is] = Ao); -function SI(e = {}) { +const rs = Hh(), Ao = rs[os] || new qh(); +rs[os] || (rs[os] = Ao); +function GI(e = {}) { return Ao.ensureInitialized(e); } -function PC(e) { +function Ph(e) { var i, o, r; const t = Math.max(0, Number(e == null ? void 0 : e.queue) || 0), n = (e == null ? void 0 : e.prompt) || null; if (n != null && n.errorDetails) { @@ -8639,7 +8639,7 @@ function PC(e) { } return t > 0 ? `(${t}) Running... in another tab` : "Idle"; } -function QC(e) { +function Qh(e) { var l; const t = (e == null ? void 0 : e.prompt) || null; if (t != null && t.errorDetails) { @@ -8653,7 +8653,7 @@ function QC(e) { const i = String(n.nodeLabel || n.nodeId || "Node").trim(), o = Number(n.step), r = Number(n.maxSteps); return Number.isFinite(o) && Number.isFinite(r) && r > 0 ? n.pass > 1 ? `${i} #${n.pass} - ${o}/${r}` : `${i} - ${o}/${r}` : i; } -function rs(e, t) { +function ls(e, t) { var a, c, s, d; if (!(e != null && e._progressEl) && !(e != null && e._mediaProgressEl)) return; const n = (t == null ? void 0 : t.prompt) || null, i = String( @@ -8663,18 +8663,18 @@ function rs(e, t) { const l = !!(n != null && n.errorDetails); if (n != null && n.currentlyExecuting) { if (n.totalNodes > 0) { - const y = n.executedNodeIds.length / n.totalNodes * 100; - o = `${Math.max(2, Math.round(y * 100) / 100)}%`; + const A = n.executedNodeIds.length / n.totalNodes * 100; + o = `${Math.max(2, Math.round(A * 100) / 100)}%`; } const u = Number((s = n.currentlyExecuting) == null ? void 0 : s.step), I = Number((d = n.currentlyExecuting) == null ? void 0 : d.maxSteps); Number.isFinite(u) && Number.isFinite(I) && I > 0 && (r = `${Math.max(0, Math.min(100, u / I * 100))}%`); } else l && (o = "100%", r = "100%"); - if (e._progressCurrentNodeId = i || null, e._progressEl && (e._progressNodesEl.style.width = o, e._progressStepsEl.style.width = r, e._progressTextEl.textContent = PC(t), e._progressEl.classList.toggle("is-error", l), e._progressEl.classList.toggle("is-clickable", !!i), e._progressEl.title = i ? "Execution progress - click to center active node" : "Execution progress"), e._mediaProgressEl) { - const u = QC(t); + if (e._progressCurrentNodeId = i || null, e._progressEl && (e._progressNodesEl.style.width = o, e._progressStepsEl.style.width = r, e._progressTextEl.textContent = Ph(t), e._progressEl.classList.toggle("is-error", l), e._progressEl.classList.toggle("is-clickable", !!i), e._progressEl.title = i ? "Execution progress - click to center active node" : "Execution progress"), e._mediaProgressEl) { + const u = Qh(t); e._mediaProgressTextEl.textContent = u, e._mediaProgressEl.title = u || "", e._mediaProgressEl.classList.toggle("is-error", l), e._mediaProgressEl.classList.toggle("is-visible", !!u); } } -function _C(e, t) { +function _h(e, t) { var i, o; const n = String(t || "").trim(); if (!n) return !1; @@ -8685,7 +8685,7 @@ function _C(e, t) { return (o = console.debug) == null || o.call(console, r), !1; } } -function hY(e) { +function CV(e) { const t = document.createElement("div"); t.className = "mjr-mfv-progress", t.setAttribute("role", "status"), t.setAttribute("aria-live", "polite"); const n = document.createElement("div"); @@ -8696,32 +8696,32 @@ function hY(e) { o.className = "mjr-mfv-progress-overlay", o.setAttribute("aria-hidden", "true"); const r = document.createElement("span"); return r.className = "mjr-mfv-progress-text", r.textContent = "Idle", t.appendChild(n), t.appendChild(i), t.appendChild(o), t.appendChild(r), t.addEventListener("pointerdown", (l) => { - l.button === 0 && _C(e, e._progressCurrentNodeId) && (l.preventDefault(), l.stopPropagation()); + l.button === 0 && _h(e, e._progressCurrentNodeId) && (l.preventDefault(), l.stopPropagation()); }), e._progressEl = t, e._progressNodesEl = n, e._progressStepsEl = i, e._progressTextEl = r, e._progressUpdateHandler && Ao.removeEventListener( - La, + Ya, e._progressUpdateHandler ), e._progressUpdateHandler = (l) => { - rs(e, (l == null ? void 0 : l.detail) || Ao.getSnapshot()); + ls(e, (l == null ? void 0 : l.detail) || Ao.getSnapshot()); }, Ao.addEventListener( - La, + Ya, e._progressUpdateHandler - ), SI({ timeoutMs: 4e3 }).catch((l) => { + ), GI({ timeoutMs: 4e3 }).catch((l) => { var a; (a = console.debug) == null || a.call(console, l); - }), rs(e, Ao.getSnapshot()), t; + }), ls(e, Ao.getSnapshot()), t; } -function CY(e) { +function hV(e) { const t = document.createElement("div"); t.className = "mjr-mfv-media-progress", t.setAttribute("aria-hidden", "true"); const n = document.createElement("span"); - return n.className = "mjr-mfv-media-progress-text", t.appendChild(n), e._mediaProgressEl = t, e._mediaProgressTextEl = n, rs(e, Ao.getSnapshot()), t; + return n.className = "mjr-mfv-media-progress-text", t.appendChild(n), e._mediaProgressEl = t, e._mediaProgressTextEl = n, ls(e, Ao.getSnapshot()), t; } -function ZY(e) { +function ZV(e) { var t; if (e != null && e._progressUpdateHandler) try { Ao.removeEventListener( - La, + Ya, e._progressUpdateHandler ); } catch (n) { @@ -8729,7 +8729,7 @@ function ZY(e) { } e._progressUpdateHandler = null, e._progressCurrentNodeId = null, e._progressEl = null, e._progressNodesEl = null, e._progressStepsEl = null, e._progressTextEl = null, e._mediaProgressEl = null, e._mediaProgressTextEl = null; } -function $C() { +function $h() { const e = "mjr-grid-settings-styles"; if (document.getElementById(e)) return; const t = document.createElement("style"); @@ -8814,17 +8814,17 @@ function $C() { } function ol(e) { if (!e) return; - $C(); + $h(); const t = (n, i) => { i ? e.classList.add(n) : e.classList.remove(n); }; - t("mjr-show-filename", fe.GRID_SHOW_DETAILS_FILENAME), t("mjr-show-dimensions", fe.GRID_SHOW_DETAILS_DIMENSIONS), t("mjr-show-date", fe.GRID_SHOW_DETAILS_DATE), t("mjr-show-gentime", fe.GRID_SHOW_DETAILS_GENTIME), t("mjr-show-hover-info", fe.GRID_SHOW_HOVER_INFO), t("mjr-show-dot", fe.GRID_SHOW_WORKFLOW_DOT), t("mjr-show-badges-ext", fe.GRID_SHOW_BADGES_EXTENSION), t("mjr-show-badges-rating", fe.GRID_SHOW_BADGES_RATING), t("mjr-show-badges-tags", fe.GRID_SHOW_BADGES_TAGS), t("mjr-show-details", fe.GRID_SHOW_DETAILS), e.style.setProperty("--mjr-grid-min-size", `${fe.GRID_MIN_SIZE}px`), e.style.setProperty("--mjr-grid-gap", `${fe.GRID_GAP}px`), e.style.setProperty("--mjr-star-active", fe.BADGE_STAR_COLOR), e.style.setProperty("--mjr-badge-image", fe.BADGE_IMAGE_COLOR), e.style.setProperty("--mjr-badge-video", fe.BADGE_VIDEO_COLOR), e.style.setProperty("--mjr-badge-audio", fe.BADGE_AUDIO_COLOR), e.style.setProperty("--mjr-badge-model3d", fe.BADGE_MODEL3D_COLOR), e.style.setProperty( + t("mjr-show-filename", he.GRID_SHOW_DETAILS_FILENAME), t("mjr-show-dimensions", he.GRID_SHOW_DETAILS_DIMENSIONS), t("mjr-show-date", he.GRID_SHOW_DETAILS_DATE), t("mjr-show-gentime", he.GRID_SHOW_DETAILS_GENTIME), t("mjr-show-hover-info", he.GRID_SHOW_HOVER_INFO), t("mjr-show-dot", he.GRID_SHOW_WORKFLOW_DOT), t("mjr-show-badges-ext", he.GRID_SHOW_BADGES_EXTENSION), t("mjr-show-badges-rating", he.GRID_SHOW_BADGES_RATING), t("mjr-show-badges-tags", he.GRID_SHOW_BADGES_TAGS), t("mjr-show-details", he.GRID_SHOW_DETAILS), e.style.setProperty("--mjr-grid-min-size", `${he.GRID_MIN_SIZE}px`), e.style.setProperty("--mjr-grid-gap", `${he.GRID_GAP}px`), e.style.setProperty("--mjr-star-active", he.BADGE_STAR_COLOR), e.style.setProperty("--mjr-badge-image", he.BADGE_IMAGE_COLOR), e.style.setProperty("--mjr-badge-video", he.BADGE_VIDEO_COLOR), e.style.setProperty("--mjr-badge-audio", he.BADGE_AUDIO_COLOR), e.style.setProperty("--mjr-badge-model3d", he.BADGE_MODEL3D_COLOR), e.style.setProperty( "--mjr-badge-duplicate-alert", - fe.BADGE_DUPLICATE_ALERT_COLOR - ), e.style.setProperty("--mjr-card-hover-color", fe.UI_CARD_HOVER_COLOR), e.style.setProperty( + he.BADGE_DUPLICATE_ALERT_COLOR + ), e.style.setProperty("--mjr-card-hover-color", he.UI_CARD_HOVER_COLOR), e.style.setProperty( "--mjr-card-selection-color", - fe.UI_CARD_SELECTION_COLOR - ), e.style.setProperty("--mjr-rating-color", fe.UI_RATING_COLOR), e.style.setProperty("--mjr-tag-color", fe.UI_TAG_COLOR); + he.UI_CARD_SELECTION_COLOR + ), e.style.setProperty("--mjr-rating-color", he.UI_RATING_COLOR), e.style.setProperty("--mjr-tag-color", he.UI_TAG_COLOR); } function eZ(e, { applySettingsClasses: t = !0 } = {}) { var n, i; @@ -8874,7 +8874,7 @@ function td(e, t, n = {}) { function nZ(e) { return zi(e, "_mjrPrepareForScopeSwitch"); } -function GI(e) { +function SI(e) { var t, n; try { (t = e == null ? void 0 : e._mjrSettingsChangedCleanup) == null || t.call(e); @@ -8892,7 +8892,7 @@ function oZ(e) { function rZ(e, t) { return zi(e, "_mjrRestoreAnchor", t); } -function ls(e, t, n = {}) { +function as(e, t, n = {}) { return zi(e, "_mjrRemoveAssets", t, n) ?? { ok: !1, removed: 0, @@ -8927,27 +8927,27 @@ function sZ(e, t = {}) { return cZ(t) ? n === "pending" || n === "info" ? "var(--mjr-browser-status-info, #4DB6AC)" : n === "success" ? "var(--mjr-browser-status-success, #2E7D32)" : n === "warning" ? "var(--mjr-browser-status-warning, #FFB74D)" : n === "error" ? "var(--mjr-browser-status-error, #EF5350)" : "var(--mjr-browser-status-neutral, #90A4AE)" : n === "pending" || n === "info" ? "var(--mjr-status-info, #64B5F6)" : n === "success" ? "var(--mjr-status-success, #4CAF50)" : n === "warning" ? "var(--mjr-status-warning, #FFA726)" : n === "error" ? "var(--mjr-status-error, #f44336)" : "var(--mjr-status-neutral, #666)"; } const dZ = rg("mjr-runtime", () => { - const e = Ae(null), t = Ae(null), n = Ae(!1), i = Ae(0), o = Ae(null), r = Ae(null), l = Ae(null), a = Ae(null), c = Ae(null), s = Ae([]), d = ze(() => !!o.value), u = ze(() => { - const A = a.value, p = c.value; - return !p || p <= 0 ? 0 : Math.round(A / p * 100); + const e = We(null), t = We(null), n = We(!1), i = We(0), o = We(null), r = We(null), l = We(null), a = We(null), c = We(null), s = We([]), d = ze(() => !!o.value), u = ze(() => { + const y = a.value, p = c.value; + return !p || p <= 0 ? 0 : Math.round(y / p * 100); }); - function I(A) { - e.value = A; + function I(y) { + e.value = y; } - function y(A) { - t.value = A; + function A(y) { + t.value = y; } - function S(A, p) { - n.value = !!A, i.value = Math.max(0, Number(p || 0) || 0); + function h(y, p) { + n.value = !!y, i.value = Math.max(0, Number(p || 0) || 0); } - function Z() { + function S() { return { active: n.value, queueLength: i.value }; } - function C(A = {}) { - A.active_prompt_id !== void 0 && (o.value = A.active_prompt_id), A.queue_remaining !== void 0 && (r.value = A.queue_remaining), A.progress_node !== void 0 && (l.value = A.progress_node), A.progress_value !== void 0 && (a.value = A.progress_value), A.progress_max !== void 0 && (c.value = A.progress_max), A.cached_nodes !== void 0 && (s.value = A.cached_nodes ?? []); + function W(y = {}) { + y.active_prompt_id !== void 0 && (o.value = y.active_prompt_id), y.queue_remaining !== void 0 && (r.value = y.queue_remaining), y.progress_node !== void 0 && (l.value = y.progress_node), y.progress_value !== void 0 && (a.value = y.progress_value), y.progress_max !== void 0 && (c.value = y.progress_max), y.cached_nodes !== void 0 && (s.value = y.cached_nodes ?? []); } function g() { o.value = null, r.value = null, l.value = null, a.value = null, c.value = null, s.value = []; @@ -8969,10 +8969,10 @@ const dZ = rg("mjr-runtime", () => { progressPercent: u, // actions setComfyApp: I, - setComfyApi: y, - setEnrichmentState: S, - getEnrichmentState: Z, - applyExecutionStatus: C, + setComfyApi: A, + setEnrichmentState: h, + getEnrichmentState: S, + applyExecutionStatus: W, resetExecution: g }; }); @@ -8983,16 +8983,16 @@ function xI() { return null; } } -const Ol = Symbol.for("majoor.assets_manager.runtime_state"); +const Fl = Symbol.for("majoor.assets_manager.runtime_state"); function jI() { try { const e = typeof globalThis < "u" ? globalThis : {}; - return (!e[Ol] || typeof e[Ol] != "object") && (e[Ol] = { + return (!e[Fl] || typeof e[Fl] != "object") && (e[Fl] = { api: null, assetsDeletedHandler: null, enrichmentActive: !1, enrichmentQueueLength: 0 - }), e[Ol]; + }), e[Fl]; } catch { return { api: null, @@ -9011,7 +9011,7 @@ function vI(e, t) { const i = jI(); i.enrichmentActive = !!e, i.enrichmentQueueLength = Math.max(0, Number(t || 0) || 0); } -function $a() { +function ec() { const e = xI(); if (e) return e.getEnrichmentState(); @@ -9070,7 +9070,7 @@ function mZ(e, t) { } return 0; } -function VI(e) { +function YI(e) { if (!Array.isArray(e) || e.length === 0) return null; if (e.length === 1) return e[0]; let t = e[0], n = Zu(t); @@ -9080,7 +9080,7 @@ function VI(e) { } return t; } -function YI(e, t) { +function VI(e, t) { var r, l; if (!e || !Array.isArray(t) || t.length === 0 || (Number((e == null ? void 0 : e.generation_time_ms) ?? ((r = e == null ? void 0 : e.metadata) == null ? void 0 : r.generation_time_ms) ?? 0) || 0) > 0) return e; const i = t.find( @@ -9099,7 +9099,7 @@ function nd(e, t) { const i = /* @__PURE__ */ new Set(["PNG", "JPG", "JPEG", "WEBP", "GIF", "BMP", "TIF", "TIFF"]), o = /* @__PURE__ */ new Set(["MP4", "WEBM", "MOV", "AVI", "MKV"]), r = /* @__PURE__ */ new Set(["MP3", "WAV", "OGG", "FLAC"]), l = /* @__PURE__ */ new Set(["OBJ", "FBX", "GLB", "GLTF", "STL", "PLY", "SPLAT", "KSPLAT", "SPZ"]); return i.has(t) ? "image" : o.has(t) ? "video" : r.has(t) ? "audio" : l.has(t) ? "model3d" : "unknown"; } -function kI(e) { +function XI(e) { var t; try { const n = e(); @@ -9108,14 +9108,14 @@ function kI(e) { return !1; } } -function XI(e) { +function NI(e) { const t = String((e == null ? void 0 : e.source) || (e == null ? void 0 : e.type) || "").trim().toLowerCase(), n = String((e == null ? void 0 : e.root_id) || (e == null ? void 0 : e.custom_root_id) || "").trim().toLowerCase(), i = String((e == null ? void 0 : e.subfolder) || "").trim().toLowerCase(); return `${t}|${n}|${i}`; } -function NI(e, t = Va((e == null ? void 0 : e.filename) || "")) { +function kI(e, t = Va((e == null ? void 0 : e.filename) || "")) { const n = nd(e, t), i = String((e == null ? void 0 : e.filename) || "").trim(); if (!i) return ""; - const o = XI(e); + const o = NI(e); if (n === "model3d") return `${o}|model3d|${i.toLowerCase()}`; const r = LI(i); @@ -9131,7 +9131,7 @@ function RI(e) { const o = e.seenKeys || /* @__PURE__ */ new Set(); return e.seenKeys = o, e.hiddenPngSiblings == null && (e.hiddenPngSiblings = 0), { nonImageSiblingKeys: t, stemMap: n, assetIdSet: i, seenKeys: o }; } -function as(e, t, n) { +function cs(e, t, n) { var i, o, r; try { (t == null ? void 0 : t.id) != null && n.assetIdSet.delete(String(t.id)); @@ -9153,9 +9153,9 @@ function gZ(e, t, n, i) { i(o[l]) && (r.push(o[l]), o.splice(l, 1)); return o.length || n.stemMap.delete(t), r; } -function FI(e, t, n) { - if (!kI(n)) return { hidden: !1, hideEnabled: !1, removed: [] }; - const o = RI(t), r = String((e == null ? void 0 : e.filename) || ""), l = Va(r), a = nd(e, l), c = NI(e, l); +function OI(e, t, n) { + if (!XI(n)) return { hidden: !1, hideEnabled: !1, removed: [] }; + const o = RI(t), r = String((e == null ? void 0 : e.filename) || ""), l = Va(r), a = nd(e, l), c = kI(e, l); if (!c) return { hidden: !1, hideEnabled: !0, removed: [] }; if (a === "video" || a === "audio" || a === "model3d") return o.nonImageSiblingKeys.add(c), { hidden: !1, hideEnabled: !0, removed: gZ( @@ -9165,77 +9165,77 @@ function FI(e, t, n) { (d) => Va((d == null ? void 0 : d.filename) || "") === "PNG" ) }; if (l === "PNG") { - const s = `${XI(e)}|model3d|${LI(r)}`; + const s = `${NI(e)}|model3d|${LI(r)}`; if (o.nonImageSiblingKeys.has(c) || o.nonImageSiblingKeys.has(s)) return { hidden: !0, hideEnabled: !0, removed: [] }; } return { hidden: !1, hideEnabled: !0, removed: [] }; } function IZ(e, t, n, i) { - var S, Z, C; - const o = kI(i.loadMajoorSettings), r = n.filenameCounts || /* @__PURE__ */ new Map(); + var h, S, W; + const o = XI(i.loadMajoorSettings), r = n.filenameCounts || /* @__PURE__ */ new Map(); n.filenameCounts = r, i.clearGridMessage(e); const l = i.ensureVirtualGrid(e, n); if (!l) return 0; o || (n.hiddenPngSiblings = 0), n.assetKeyFn = i.assetKey; const a = RI(n), c = /* @__PURE__ */ new Map(); for (const g of n.assets || []) { - const A = fr(g == null ? void 0 : g.filename); - if (!A) continue; - let p = c.get(A); - p || (p = [], c.set(A, p)), p.push(g); + const y = fr(g == null ? void 0 : g.filename); + if (!y) continue; + let p = c.get(y); + p || (p = [], c.set(y, p)), p.push(g); } let s = 0, d = !1; - const u = [], I = /* @__PURE__ */ new Set(), y = () => { - var g, A, p, b, L, h, G, W, f; + const u = [], I = /* @__PURE__ */ new Set(), A = () => { + var g, y, p, b, L, C, G, Z, f; try { const X = new Set( (Array.isArray(n.assets) ? n.assets : []).map((x) => String((x == null ? void 0 : x.id) || "")).filter(Boolean) ); - for (const [x, T] of c.entries()) { - const v = (Array.isArray(T) ? T : []).filter((z) => { - const B = String((z == null ? void 0 : z.id) || ""); - return B ? X.has(B) : !1; - }), w = v.length; + for (const [x, K] of c.entries()) { + const j = (Array.isArray(K) ? K : []).filter((z) => { + const T = String((z == null ? void 0 : z.id) || ""); + return T ? X.has(T) : !1; + }), w = j.length; if (r.set(x, w), w < 2) { - for (const B of v) - B._mjrNameCollision = !1, delete B._mjrNameCollisionCount, delete B._mjrNameCollisionPaths, B._mjrDupStack && (B._mjrDupStack = !1, B._mjrDupMembers = null, B._mjrDupCount = 0); + for (const T of j) + T._mjrNameCollision = !1, delete T._mjrNameCollisionCount, delete T._mjrNameCollisionPaths, T._mjrDupStack && (T._mjrDupStack = !1, T._mjrDupMembers = null, T._mjrDupCount = 0); const z = (g = n.renderedFilenameMap) == null ? void 0 : g.get(x); if (z) - for (const B of z) { - const J = (A = B.querySelector) == null ? void 0 : A.call(B, ".mjr-file-badge"); + for (const T of z) { + const J = (y = T.querySelector) == null ? void 0 : y.call(T, ".mjr-file-badge"); i.setFileBadgeCollision(J, !1); try { - (p = i.ensureDupStackCard) == null || p.call(i, e, B, B._mjrAsset); + (p = i.ensureDupStackCard) == null || p.call(i, e, T, T._mjrAsset); } catch (P) { (b = console.debug) == null || b.call(console, P); } } continue; } - const R = YI( - VI(v), - v - ), Y = v.filter((z) => z !== R); - for (const z of v) + const R = VI( + YI(j), + j + ), V = j.filter((z) => z !== R); + for (const z of j) z._mjrNameCollision = !1, delete z._mjrNameCollisionCount, delete z._mjrNameCollisionPaths, z !== R && (z._mjrDupStack = !1, z._mjrDupMembers = null, z._mjrDupCount = 0); - const F = Array.isArray(R._mjrDupMembers) ? R._mjrDupMembers : [], N = new Set(F.map((z) => String((z == null ? void 0 : z.id) || ""))), V = [ - ...F, - ...v.filter((z) => !N.has(String((z == null ? void 0 : z.id) || ""))) + const O = Array.isArray(R._mjrDupMembers) ? R._mjrDupMembers : [], k = new Set(O.map((z) => String((z == null ? void 0 : z.id) || ""))), Y = [ + ...O, + ...j.filter((z) => !k.has(String((z == null ? void 0 : z.id) || ""))) ]; - R._mjrDupStack = !0, R._mjrDupMembers = V, R._mjrDupCount = V.length, R._mjrNameCollision = !1; - const k = new Set(Y.map((z) => String((z == null ? void 0 : z.id) || ""))); - k.size > 0 && (n.assets = n.assets.filter((z) => !k.has(String((z == null ? void 0 : z.id) || "")))); - const K = (L = n.renderedFilenameMap) == null ? void 0 : L.get(x); - if (K) - for (const z of K) { - const B = z._mjrAsset, J = (h = z.querySelector) == null ? void 0 : h.call(z, ".mjr-file-badge"); - if (B === R || String((B == null ? void 0 : B.id) || "") === String((R == null ? void 0 : R.id) || "")) { + R._mjrDupStack = !0, R._mjrDupMembers = Y, R._mjrDupCount = Y.length, R._mjrNameCollision = !1; + const N = new Set(V.map((z) => String((z == null ? void 0 : z.id) || ""))); + N.size > 0 && (n.assets = n.assets.filter((z) => !N.has(String((z == null ? void 0 : z.id) || "")))); + const U = (L = n.renderedFilenameMap) == null ? void 0 : L.get(x); + if (U) + for (const z of U) { + const T = z._mjrAsset, J = (C = z.querySelector) == null ? void 0 : C.call(z, ".mjr-file-badge"); + if (T === R || String((T == null ? void 0 : T.id) || "") === String((R == null ? void 0 : R.id) || "")) { i.setFileBadgeCollision(J, !1); try { (G = i.ensureDupStackCard) == null || G.call(i, e, z, R); } catch (P) { - (W = console.debug) == null || W.call(console, P); + (Z = console.debug) == null || Z.call(console, P); } } } @@ -9247,62 +9247,62 @@ function IZ(e, t, n, i) { for (const g of t || []) { try { if ((g == null ? void 0 : g.id) == null || String(g.id).trim() === "") { - const W = String((g == null ? void 0 : g.kind) || "").toLowerCase(), f = String((g == null ? void 0 : g.filepath) || "").trim(), X = String((g == null ? void 0 : g.subfolder) || "").trim(), x = String((g == null ? void 0 : g.filename) || "").trim(), v = `${String((g == null ? void 0 : g.type) || "").trim().toLowerCase()}|${W}|${f}|${X}|${x}`; - g.id = `asset:${v || "unknown"}`; + const Z = String((g == null ? void 0 : g.kind) || "").toLowerCase(), f = String((g == null ? void 0 : g.filepath) || "").trim(), X = String((g == null ? void 0 : g.subfolder) || "").trim(), x = String((g == null ? void 0 : g.filename) || "").trim(), j = `${String((g == null ? void 0 : g.type) || "").trim().toLowerCase()}|${Z}|${f}|${X}|${x}`; + g.id = `asset:${j || "unknown"}`; } - } catch (W) { - (S = console.debug) == null || S.call(console, W); + } catch (Z) { + (h = console.debug) == null || h.call(console, Z); } - const A = String((g == null ? void 0 : g.filename) || ""), p = Va(A), b = FI(g, n, i.loadMajoorSettings); - for (const W of b.removed || []) I.add(W); + const y = String((g == null ? void 0 : g.filename) || ""), p = Va(y), b = OI(g, n, i.loadMajoorSettings); + for (const Z of b.removed || []) I.add(Z); if (b.hidden) { n.hiddenPngSiblings += 1; continue; } - const L = fr(A); + const L = fr(y); if (L) { - let W = c.get(L); - W || (W = [], c.set(L, W)), W.push(g); + let Z = c.get(L); + Z || (Z = [], c.set(L, Z)), Z.push(g); } - const h = i.assetKey(g); - if (!h || a.seenKeys.has(h) || g.id != null && a.assetIdSet.has(String(g.id))) continue; - a.seenKeys.add(h), g.id != null && a.assetIdSet.add(String(g.id)), u.push(g); - const G = NI(g, p); + const C = i.assetKey(g); + if (!C || a.seenKeys.has(C) || g.id != null && a.assetIdSet.has(String(g.id))) continue; + a.seenKeys.add(C), g.id != null && a.assetIdSet.add(String(g.id)), u.push(g); + const G = kI(g, p); if (G) { - let W = a.stemMap.get(G); - W || (W = [], a.stemMap.set(G, W)), W.push(g); + let Z = a.stemMap.get(G); + Z || (Z = [], a.stemMap.set(G, Z)), Z.push(g); } s++; } if (I.size > 0) { n.hiddenPngSiblings += I.size, n.assets = n.assets.filter((g) => !I.has(g)); for (const g of I) - as(n, g, a); + cs(n, g, a); try { for (const g of I) { - const A = fr(g == null ? void 0 : g.filename); - if (!A) continue; - const p = c.get(A); + const y = fr(g == null ? void 0 : g.filename); + if (!y) continue; + const p = c.get(y); if (!p) continue; const b = p.indexOf(g); - b > -1 && p.splice(b, 1), p.length || c.delete(A); + b > -1 && p.splice(b, 1), p.length || c.delete(y); } } catch (g) { - (Z = console.debug) == null || Z.call(console, g); + (S = console.debug) == null || S.call(console, g); } d = !0; } - u.length > 0 && (n.assets.push(...u), d = !0), d && (y(), l.setItems(n.assets), n.sentinel && e.appendChild(n.sentinel)); + u.length > 0 && (n.assets.push(...u), d = !0), d && (A(), l.setItems(n.assets), n.sentinel && e.appendChild(n.sentinel)); try { e.dataset.mjrHidePngSiblingsEnabled = o ? "1" : "0", e.dataset.mjrHiddenPngSiblings = String( Number(n.hiddenPngSiblings || 0) || 0 ); } catch (g) { - (C = console.debug) == null || C.call(console, g); + (W = console.debug) == null || W.call(console, g); } return s; } -function OI({ ext: e = "", filename: t = "", count: n = 0, paths: i = [] } = {}) { +function FI({ ext: e = "", filename: t = "", count: n = 0, paths: i = [] } = {}) { const o = String(e || "").trim(), r = String(t || "").trim(), l = Math.max(0, Number(n) || 0), a = Array.isArray(i) ? i.map((s) => String(s || "").trim()).filter(Boolean) : []; if (l < 2) return `${o} file`; const c = [`${o}+ name collision in current view (${l})`]; @@ -9315,14 +9315,14 @@ function OI({ ext: e = "", filename: t = "", count: n = 0, paths: i = [] } = {}) `); } function bZ(e, t, n = !1, i = null) { - var y, S, Z, C; + var A, h, S, W; const o = document.createElement("div"); o.className = "mjr-file-badge"; - const r = ((S = (y = String(e || "").split(".").pop()) == null ? void 0 : y.toUpperCase) == null ? void 0 : S.call(y)) || ""; + const r = ((h = (A = String(e || "").split(".").pop()) == null ? void 0 : A.toUpperCase) == null ? void 0 : h.call(A)) || ""; try { o.dataset.mjrExt = r; } catch (g) { - (Z = console.debug) == null || Z.call(console, g); + (S = console.debug) == null || S.call(console, g); } const l = nd({ kind: t }, r), c = { image: "--mjr-badge-image", @@ -9330,7 +9330,7 @@ function bZ(e, t, n = !1, i = null) { audio: "--mjr-badge-audio", model3d: "--mjr-badge-model3d" }[l], s = c ? `var(${c}, #607D8B)` : "#607D8B", d = "var(--mjr-badge-duplicate-alert, #ff1744)", u = s, I = n ? d : u; - o.textContent = r + (n ? "+" : ""), o.title = n ? OI({ + o.textContent = r + (n ? "+" : ""), o.title = n ? FI({ ext: r, filename: e, count: i == null ? void 0 : i.count, @@ -9356,7 +9356,7 @@ function bZ(e, t, n = !1, i = null) { try { o.dataset.mjrBadgeBg = u; } catch (g) { - (C = console.debug) == null || C.call(console, g); + (W = console.debug) == null || W.call(console, g); } return o; } @@ -9365,7 +9365,7 @@ function pZ(e, t, n = null) { if (e) try { const l = ((i = e.dataset) == null ? void 0 : i.mjrExt) || "", a = ((o = e.dataset) == null ? void 0 : o.mjrBadgeBg) || "var(--mjr-badge-image, #607D8B)", c = "var(--mjr-badge-duplicate-alert, #ff1744)"; - e.textContent = String(l || "") + (t ? "+" : ""), e.title = t ? OI({ + e.textContent = String(l || "") + (t ? "+" : ""), e.title = t ? FI({ ext: l, filename: (n == null ? void 0 : n.filename) || "", count: n == null ? void 0 : n.count, @@ -9403,7 +9403,7 @@ function fZ(e) { } return !0; } -function hZ(e) { +function CZ(e) { const t = qo(e, [ "auto_tags", "autoTags", @@ -9446,35 +9446,35 @@ function hZ(e) { ), a = i === !0 || i === null && fZ(t), c = o === !0 || o === null && yZ(n), s = r === !0 || l === !0; return { hasAiInfo: l === !0 || a || c || s, hasAutoTags: a, hasEnhancedPrompt: c, hasVectorIndexed: s }; } -function ec(e) { - var y, S; +function tc(e) { + var A, h; const t = document.createElement("span"); t.className = "mjr-workflow-dot mjr-asset-status-dot"; - const n = mr((e == null ? void 0 : e.has_workflow) ?? (e == null ? void 0 : e.hasWorkflow)), i = mr((e == null ? void 0 : e.has_generation_data) ?? (e == null ? void 0 : e.hasGenerationData)), o = $a(), r = o.queueLength, l = o.active || r > 0; + const n = mr((e == null ? void 0 : e.has_workflow) ?? (e == null ? void 0 : e.hasWorkflow)), i = mr((e == null ? void 0 : e.has_generation_data) ?? (e == null ? void 0 : e.hasGenerationData)), o = ec(), r = o.queueLength, l = o.active || r > 0; let a = "Pending: parsing metadata…"; const c = n === !0 || i === !0, s = n === !1 || i === !1, d = n === null || i === null; n === !0 && i === !0 ? a = "Complete: workflow + generation data detected" : c ? a = n === !0 ? "Partial: workflow only (generation data missing)" : "Partial: generation data only (workflow missing)" : s && !c && !d ? a = "None: no workflow or generation data found" : d && (a = "Pending: metadata not parsed yet"); let u = d ? "pending" : n === !0 && i === !0 ? "success" : c ? "warning" : "error"; l && u !== "success" && (u = "pending", a = r > 0 ? `Pending: database metadata enrichment in progress (${r} queued)` : "Pending: database metadata enrichment in progress"), aa(t, u, a, { asset: e }); - const I = hZ(e); + const I = CZ(e); if (I.hasAiInfo) { - const Z = []; - I.hasVectorIndexed && Z.push("vector indexed"), I.hasAutoTags && Z.push("AI tag suggestions"), I.hasEnhancedPrompt && Z.push("enhanced prompt"), t.textContent = ""; - const C = document.createElement("i"); - C.className = "pi pi-sparkles", C.setAttribute("aria-hidden", "true"), C.style.fontSize = "11px", C.style.lineHeight = "1", t.appendChild(C); + const S = []; + I.hasVectorIndexed && S.push("vector indexed"), I.hasAutoTags && S.push("AI tag suggestions"), I.hasEnhancedPrompt && S.push("enhanced prompt"), t.textContent = ""; + const W = document.createElement("i"); + W.className = "pi pi-sparkles", W.setAttribute("aria-hidden", "true"), W.style.fontSize = "11px", W.style.lineHeight = "1", t.appendChild(W); try { t.dataset.mjrAi = "1"; } catch (g) { - (y = console.debug) == null || y.call(console, g); + (A = console.debug) == null || A.call(console, g); } t.title = `${a} -AI: ${Z.length ? Z.join(", ") : "indexed"} +AI: ${S.length ? S.join(", ") : "indexed"} Click to rescan this file`; } else { try { t.dataset.mjrAi = "0"; - } catch (Z) { - (S = console.debug) == null || S.call(console, Z); + } catch (S) { + (h = console.debug) == null || h.call(console, S); } t.textContent = "●", t.title = `${a} Click to rescan this file`; @@ -9507,7 +9507,7 @@ function aa(e, t, n = "", i = {}) { (a = console.debug) == null || a.call(console, c); } } -function Ya(e) { +function Xa(e) { const t = Math.max(0, Math.min(5, Number(e) || 0)); if (t <= 0) return null; const n = document.createElement("div"); @@ -9535,7 +9535,7 @@ function Ya(e) { } return n; } -function CZ(e) { +function hZ(e) { if (Array.isArray(e)) return e.map((t) => String(t ?? "").trim()).filter(Boolean); if (typeof e == "string") { @@ -9592,7 +9592,7 @@ function od(e, { maxMs: t = 864e5 } = {}) { function JI(e) { const t = document.createElement("div"); t.className = "mjr-tags-badge"; - const n = CZ(e); + const n = hZ(e); return n.length === 0 ? (t.style.display = "none", t) : (t.textContent = n.join(", "), t.title = `Tags: ${n.join(", ")}`, t.style.cssText = ` position: absolute; bottom: 6px; @@ -9647,7 +9647,7 @@ function WZ(e) { async function rd({ x: e, y: t, assets: n }) { const i = Array.isArray(n) ? n.map(WZ).filter(Boolean) : []; if (!i.length) { - Ze(m("toast.noValidAssetsSelected", "No valid assets selected."), "warning"); + Ae(m("toast.noValidAssetsSelected", "No valid assets selected."), "warning"); return; } AZ({ @@ -9656,8 +9656,8 @@ async function rd({ x: e, y: t, assets: n }) { assets: i }); } -async function cs(e, t) { - if (!fe.DELETE_CONFIRMATION) return !0; +async function ss(e, t) { + if (!he.DELETE_CONFIRMATION) return !0; const n = e > 1 ? m("dialog.deleteSelectedFiles", "Delete {count} selected files?", { count: e }) : m("dialog.deleteSingleFile", 'Delete "{label}"?', { label: String(t || m("label.thisFile", "this file")) }); @@ -9734,7 +9734,7 @@ function ad(e, t) { return !Wu(n).ext && i.ext ? `${n}${i.ext}` : n; } const MZ = 350, yl = /* @__PURE__ */ new Map(); -function SZ(e) { +function GZ(e) { var n, i, o, r; const t = yl.get(e); if (t) { @@ -9751,14 +9751,14 @@ function SZ(e) { yl.delete(e); } } -function BI(e) { - e && SZ(String(e)); +function KI(e) { + e && GZ(String(e)); } -function UI() { +function BI() { for (const e of Array.from(yl.keys())) - BI(e); + KI(e); } -function KI(e, t, { +function UI(e, t, { onSuccess: n, onFailure: i, successMessage: o = null, @@ -9766,16 +9766,16 @@ function KI(e, t, { warnPrefix: l = "[RatingUpdater]" } = {}) { if (!e) return; - BI(e); + KI(e); const a = new AbortController(), c = setTimeout(async () => { yl.delete(String(e)); try { - const s = await Ho(e, t, { signal: a.signal }); + const s = await Eo(e, t, { signal: a.signal }); if (!(s != null && s.ok)) { - Ze((s == null ? void 0 : s.error) || r || "Failed to update rating", "error"), i == null || i(s); + Ae((s == null ? void 0 : s.error) || r || "Failed to update rating", "error"), i == null || i(s); return; } - o && Ze(o, "success", 1500), n == null || n(s); + o && Ae(o, "success", 1500), n == null || n(s); } catch (s) { ai(s, l, { showToast: !0 }), i == null || i(s); } @@ -9791,7 +9791,7 @@ function wu() { title: "" }; } -const Kt = Vs({ +const Bt = Vs({ portalOwnerId: "", mountedPortalIds: [], main: wu(), @@ -9804,7 +9804,7 @@ const Kt = Vs({ onChanged: null } }); -let GZ = 1; +let SZ = 1; function DI(e) { e && (e.open = !1, e.x = 0, e.y = 0, e.items = [], e.title = ""); } @@ -9819,40 +9819,40 @@ function xZ(e = "") { } } function jZ() { - const e = `mjr-viewer-context-menu-portal-${GZ++}`; - return Kt.mountedPortalIds.push(e), Kt.portalOwnerId || (Kt.portalOwnerId = e), e; + const e = `mjr-viewer-context-menu-portal-${SZ++}`; + return Bt.mountedPortalIds.push(e), Bt.portalOwnerId || (Bt.portalOwnerId = e), e; } function vZ(e) { - const t = Kt.mountedPortalIds.filter((n) => n !== e); - Kt.mountedPortalIds.splice( + const t = Bt.mountedPortalIds.filter((n) => n !== e); + Bt.mountedPortalIds.splice( 0, - Kt.mountedPortalIds.length, + Bt.mountedPortalIds.length, ...t - ), Kt.portalOwnerId === e && (Kt.portalOwnerId = Kt.mountedPortalIds[0] || ""); + ), Bt.portalOwnerId === e && (Bt.portalOwnerId = Bt.mountedPortalIds[0] || ""); } function LZ(e) { - return String(Kt.portalOwnerId || "") === String(e || ""); -} -function VZ({ x: e = 0, y: t = 0, items: n = [], title: i = "" } = {}) { - xZ("viewer"), HI(), gr(), Kt.main.open = !0, Kt.main.x = Number(e) || 0, Kt.main.y = Number(t) || 0, Kt.main.items = Array.isArray(n) ? n.filter(Boolean) : [], Kt.main.title = String(i || ""); -} -function EI() { - DI(Kt.main), gr(); + return String(Bt.portalOwnerId || "") === String(e || ""); } function YZ({ x: e = 0, y: t = 0, items: n = [], title: i = "" } = {}) { - Kt.submenu.open = !0, Kt.submenu.x = Number(e) || 0, Kt.submenu.y = Number(t) || 0, Kt.submenu.items = Array.isArray(n) ? n.filter(Boolean) : [], Kt.submenu.title = String(i || ""); -} -function gr() { - DI(Kt.submenu); -} -function kZ({ x: e = 0, y: t = 0, asset: n = null, onChanged: i = null } = {}) { - EI(), Kt.tags.open = !!n, Kt.tags.x = Number(e) || 0, Kt.tags.y = Number(t) || 0, Kt.tags.asset = n || null, Kt.tags.onChanged = typeof i == "function" ? i : null; + xZ("viewer"), EI(), gr(), Bt.main.open = !0, Bt.main.x = Number(e) || 0, Bt.main.y = Number(t) || 0, Bt.main.items = Array.isArray(n) ? n.filter(Boolean) : [], Bt.main.title = String(i || ""); } function HI() { - Kt.tags.open = !1, Kt.tags.x = 0, Kt.tags.y = 0, Kt.tags.asset = null, Kt.tags.onChanged = null; + DI(Bt.main), gr(); +} +function VZ({ x: e = 0, y: t = 0, items: n = [], title: i = "" } = {}) { + Bt.submenu.open = !0, Bt.submenu.x = Number(e) || 0, Bt.submenu.y = Number(t) || 0, Bt.submenu.items = Array.isArray(n) ? n.filter(Boolean) : [], Bt.submenu.title = String(i || ""); +} +function gr() { + DI(Bt.submenu); +} +function XZ({ x: e = 0, y: t = 0, asset: n = null, onChanged: i = null } = {}) { + HI(), Bt.tags.open = !!n, Bt.tags.x = Number(e) || 0, Bt.tags.y = Number(t) || 0, Bt.tags.asset = n || null, Bt.tags.onChanged = typeof i == "function" ? i : null; +} +function EI() { + Bt.tags.open = !1, Bt.tags.x = 0, Bt.tags.y = 0, Bt.tags.asset = null, Bt.tags.onChanged = null; } function Lo() { - EI(), HI(); + HI(), EI(); } const mo = { COPY_PATH: "Ctrl+Shift+C", @@ -9864,9 +9864,9 @@ const mo = { RENAME: "F2", DELETE: "Del" }, Mu = ["B", "KB", "MB", "GB", "TB"], ca = /* @__PURE__ */ new WeakMap(); -let XZ = 1; +let NZ = 1; function qI(e = "viewer-menu-item") { - return `${e}-${XZ++}`; + return `${e}-${NZ++}`; } function ji(e, t, n, i, o = {}) { return { @@ -9887,7 +9887,7 @@ function sa() { type: "separator" }; } -function NZ(e) { +function kZ(e) { const t = String(e || "").trim(); if (!t) return !1; if (t.startsWith("/")) return !0; @@ -9898,7 +9898,7 @@ function NZ(e) { return !1; } } -function Su(e, t, n) { +function Gu(e, t, n) { var o, r; const i = e == null ? void 0 : e.id; try { @@ -9912,13 +9912,13 @@ function Su(e, t, n) { (r = console.debug) == null || r.call(console, l); } if (i) { - KI(String(i), t, { + UI(String(i), t, { successMessage: t > 0 ? `Rating set to ${t} stars` : "Rating cleared", errorMessage: "Failed to update rating", warnPrefix: "[ViewerContextMenu]", onSuccess: () => { oi( - Fi, + Oi, { assetId: String(i), rating: t }, { warnPrefix: "[ViewerContextMenu]" } ); @@ -9929,7 +9929,7 @@ function Su(e, t, n) { }); return; } - Ho(e, t).catch((l) => { + Eo(e, t).catch((l) => { ai(l, "[ViewerContextMenu] Rating update", { showToast: !0 }); }); } @@ -9941,14 +9941,14 @@ function RZ(e) { t /= 1024, n += 1; return `${n === 0 ? `${Math.round(t)}` : t.toFixed(2)} ${Mu[n]}`; } -function FZ(e, t, n) { +function OZ(e, t, n) { const i = [5, 4, 3, 2, 1].map( (o) => ji( `${o} Stars`, "pi pi-star", null, async () => { - Su(e, o, t); + Gu(e, o, t); }, { disabled: !n } ) @@ -9959,26 +9959,26 @@ function FZ(e, t, n) { "pi pi-star", "0", async () => { - Su(e, 0, t); + Gu(e, 0, t); }, { disabled: !n } ) ), i; } -function OZ({ +function FZ({ asset: e, event: t, getCurrentViewUrl: n, onAssetChanged: i }) { - const o = typeof n == "function" ? n(e) : Ki(e), r = !!(e != null && e.id || e != null && e.filepath); + const o = typeof n == "function" ? n(e) : Ui(e), r = !!(e != null && e.id || e != null && e.filepath); return [ ji( m("ctx.openInNewTab", "Open in New Tab"), "pi pi-external-link", null, async () => { - NZ(o) && window.open(o, "_blank", "noopener,noreferrer"); + kZ(o) && window.open(o, "_blank", "noopener,noreferrer"); } ), ji( @@ -9988,13 +9988,13 @@ function OZ({ async () => { const a = e != null && e.filepath ? String(e.filepath) : ""; if (!a) { - Ze(m("toast.noFilePath"), "error"); + Ae(m("toast.noFilePath"), "error"); return; } try { - await navigator.clipboard.writeText(a), Ze(m("toast.pathCopied"), "success", 2e3); + await navigator.clipboard.writeText(a), Ae(m("toast.pathCopied"), "success", 2e3); } catch (c) { - console.error("[ViewerContextMenu] Copy failed:", c), Ze(m("toast.pathCopyFailed"), "error"); + console.error("[ViewerContextMenu] Copy failed:", c), Ae(m("toast.pathCopyFailed"), "error"); } } ), @@ -10005,7 +10005,7 @@ function OZ({ async () => { if (!e || !e.filepath) return; const a = Ea(e.filepath), c = document.createElement("a"); - c.href = a, c.download = e.filename, document.body.appendChild(c), c.click(), document.body.removeChild(c), Ze( + c.href = a, c.download = e.filename, document.body.appendChild(c), c.click(), document.body.removeChild(c), Ae( m("toast.downloadingFile", "Downloading {filename}...", { filename: e.filename }), @@ -10020,8 +10020,8 @@ function OZ({ "pi pi-folder-open", mo.OPEN_IN_FOLDER, async () => { - const a = await zs(e); - a != null && a.ok ? Ze(m("toast.openedInFolder"), "info", 2e3) : Ze((a == null ? void 0 : a.error) || m("toast.openFolderFailed"), "error"); + const a = await Js(e); + a != null && a.ok ? Ae(m("toast.openedInFolder"), "info", 2e3) : Ae((a == null ? void 0 : a.error) || m("toast.openFolderFailed"), "error"); }, { disabled: !(e != null && e.id || e != null && e.filepath) } ), @@ -10047,7 +10047,7 @@ function OZ({ "pi pi-tags", mo.EDIT_TAGS, async () => { - kZ({ + XZ({ x: (Number(t == null ? void 0 : t.clientX) || 0) + 6, y: (Number(t == null ? void 0 : t.clientY) || 0) + 6, asset: e, @@ -10077,7 +10077,7 @@ function OZ({ { disabled: !r, closeOnSelect: !1, - submenu: FZ(e, i, r) + submenu: OZ(e, i, r) } ), ji( @@ -10090,7 +10090,7 @@ function OZ({ try { const c = await Dg(e.id, { refresh: !0 }); if (!(c != null && c.ok) || !(c != null && c.data)) { - Ze( + Ae( (c == null ? void 0 : c.error) || m("toast.metadataRefreshFailed", "Failed to refresh metadata."), "error" ); @@ -10103,13 +10103,13 @@ function OZ({ { assetId: String(e.id), info: s }, { warnPrefix: "[ViewerContextMenu]" } ); - } catch (y) { - (a = console.debug) == null || a.call(console, y); + } catch (A) { + (a = console.debug) == null || a.call(console, A); } const d = [], u = RZ(s == null ? void 0 : s.size_bytes); u && d.push(u), s != null && s.mime && d.push(s.mime); const I = d.length ? ` (${d.join(", ")})` : ""; - Ze( + Ae( m("toast.metadataRefreshed", "Metadata refreshed{suffix}", { suffix: I }), "success", 3e3 @@ -10130,42 +10130,42 @@ function OZ({ async () => { var u, I; if (!(e != null && e.id || e != null && e.filepath)) return; - const a = e.filename || "", c = await Vi( + const a = e.filename || "", c = await Yi( m("dialog.rename.title", "Rename file"), a ), s = ad(c, a); if (!s || s === a) return; const d = ld(s); if (!d.valid) { - Ze(d.reason, "error"); + Ae(d.reason, "error"); return; } try { - const y = await Js(e, s); - if (y != null && y.ok) { - const S = (u = y == null ? void 0 : y.data) == null ? void 0 : u.asset; - S && typeof S == "object" ? Object.assign(e, S) : (e.filename = s, e.filepath = e.filepath.replace(/[^\\/]+$/, s), e.path && (e.path = String(e.path).replace(/[^\\/]+$/, s)), e.file_info && typeof e.file_info == "object" && (e.file_info.filename = s, e.file_info.filepath && (e.file_info.filepath = String( + const A = await Ts(e, s); + if (A != null && A.ok) { + const h = (u = A == null ? void 0 : A.data) == null ? void 0 : u.asset; + h && typeof h == "object" ? Object.assign(e, h) : (e.filename = s, e.filepath = e.filepath.replace(/[^\\/]+$/, s), e.path && (e.path = String(e.path).replace(/[^\\/]+$/, s)), e.file_info && typeof e.file_info == "object" && (e.file_info.filename = s, e.file_info.filepath && (e.file_info.filepath = String( e.file_info.filepath ).replace(/[^\\/]+$/, s)), e.file_info.path && (e.file_info.path = String(e.file_info.path).replace( /[^\\/]+$/, s - )))), Ze(m("toast.fileRenamedSuccess"), "success"); + )))), Ae(m("toast.fileRenamedSuccess"), "success"); try { window.dispatchEvent( new CustomEvent("mjr:reload-grid", { detail: { reason: "viewer-rename" } }) ); - } catch (Z) { - (I = console.debug) == null || I.call(console, Z); + } catch (S) { + (I = console.debug) == null || I.call(console, S); } i == null || i(); } else - Ze((y == null ? void 0 : y.error) || m("toast.fileRenameFailed"), "error"); - } catch (y) { - Ze( + Ae((A == null ? void 0 : A.error) || m("toast.fileRenameFailed"), "error"); + } catch (A) { + Ae( m("toast.errorRenaming", "Error renaming file: {error}", { - error: (y == null ? void 0 : y.message) || String(y || "") + error: (A == null ? void 0 : A.message) || String(A || "") }), "error" ); @@ -10178,12 +10178,12 @@ function OZ({ "pi pi-trash", mo.DELETE, async () => { - if (!(!(e != null && e.id || e != null && e.filepath) || !await cs(1, e == null ? void 0 : e.filename))) + if (!(!(e != null && e.id || e != null && e.filepath) || !await ss(1, e == null ? void 0 : e.filename))) try { - const c = await Sa(e); - c != null && c.ok ? (Ze(m("toast.fileDeletedSuccess"), "success"), i == null || i()) : Ze((c == null ? void 0 : c.error) || m("toast.fileDeleteFailed"), "error"); + const c = await Ga(e); + c != null && c.ok ? (Ae(m("toast.fileDeletedSuccess"), "success"), i == null || i()) : Ae((c == null ? void 0 : c.error) || m("toast.fileDeleteFailed"), "error"); } catch (c) { - Ze( + Ae( m("toast.errorDeleting", "Error deleting file: {error}", { error: (c == null ? void 0 : c.message) || String(c || "") }), @@ -10209,10 +10209,10 @@ function zZ({ if (!e.contains(a.target)) return; a.preventDefault(), a.stopPropagation(); const c = t(); - c && VZ({ + c && YZ({ x: a.clientX, y: a.clientY, - items: OZ({ + items: FZ({ asset: c, event: a, getCurrentViewUrl: n, @@ -10233,7 +10233,7 @@ function zZ({ (a = console.debug) == null || a.call(console, d); } try { - UI(); + BI(); const d = globalThis == null ? void 0 : globalThis._ratingDebounceTimers; d && typeof d.clear == "function" && d.clear(); } catch (d) { @@ -10259,14 +10259,14 @@ function JZ(e) { } const eo = () => { }; -function ss(e) { +function ds(e) { try { - return !!(fe != null && fe[e]); + return !!(he != null && he[e]); } catch { return !1; } } -function ds(e, t) { +function us(e, t) { var n; try { console.warn(`[Majoor] ${e}`, t); @@ -10274,15 +10274,15 @@ function ds(e, t) { (n = console.debug) == null || n.call(console, i); } } -function bt(e, t = "safeCall") { +function It(e, t = "safeCall") { try { return e == null ? void 0 : e(); } catch (n) { - ss("DEBUG_SAFE_CALL") && ds(t, n); + ds("DEBUG_SAFE_CALL") && us(t, n); return; } } -function Qe(e, t, n, i, o = "safeAddListener") { +function $e(e, t, n, i, o = "safeAddListener") { var r; try { return (r = e == null ? void 0 : e.addEventListener) == null || r.call(e, t, n, i), () => { @@ -10290,14 +10290,14 @@ function Qe(e, t, n, i, o = "safeAddListener") { try { (l = e == null ? void 0 : e.removeEventListener) == null || l.call(e, t, n, i); } catch (a) { - ss("DEBUG_SAFE_LISTENERS") && ds(`${o}:remove:${String(t || "")}`, a); + ds("DEBUG_SAFE_LISTENERS") && us(`${o}:remove:${String(t || "")}`, a); } }; } catch (l) { - return ss("DEBUG_SAFE_LISTENERS") && ds(`${o}:add:${String(t || "")}`, l), eo; + return ds("DEBUG_SAFE_LISTENERS") && us(`${o}:add:${String(t || "")}`, l), eo; } } -function In(e) { +function pn(e) { const t = Number(e); return Number.isFinite(t) ? Math.max(0, Math.min(1, t)) : 0; } @@ -10402,7 +10402,7 @@ function QI(e, t) { } return null; } -function BZ(e) { +function KZ(e) { const t = Number(e); return !Number.isFinite(t) || t <= 0 ? "" : Math.abs(t - Math.round(t)) < 1e-3 ? `${Math.round(t)} fps` : `${t.toFixed(3).replace(/\.?0+$/, "")} fps`; } @@ -10412,8 +10412,8 @@ function Qi(e, t = 30) { const i = yo(t); return i != null ? Math.max(1, Math.round(i * 1e3) / 1e3) : 30; } -const UZ = 400, KZ = 1e3, DZ = 220; -function EZ(e, t, n) { +const BZ = 400, UZ = 1e3, DZ = 220; +function HZ(e, t, n) { var i, o; try { if (e != null && e.aborted) return eo; @@ -10462,7 +10462,7 @@ function hc(e) { const t = Math.floor(Number(e) || 0); return t < 10 ? `0${t}` : String(t); } -function Gu(e) { +function Su(e) { const t = Number(e); if (!Number.isFinite(t) || t < 0) return "0:00"; const n = Math.floor(t), i = Math.floor(n / 3600), o = Math.floor(n % 3600 / 60), r = n % 60; @@ -10495,7 +10495,7 @@ function zl(e, { min: t, max: n, step: i, value: o, title: r, ariaLabel: l, widt const c = document.createElement("input"); return c.type = "number", c.className = `mjr-video-num ${e || ""}`.trim(), r && (c.title = r), l && c.setAttribute("aria-label", l), t != null && (c.min = String(t)), n != null && (c.max = String(n)), i != null && (c.step = String(i)), o != null && (c.value = String(o)), a != null && (c.style.width = `${a}px`), c; } -function HZ(e) { +function EZ(e) { try { return (e == null ? void 0 : e.variant) === "preview" ? "preview" : (e == null ? void 0 : e.variant) === "viewerbar" ? "viewerbar" : "viewer"; } catch { @@ -10511,58 +10511,58 @@ function qZ(e) { } } function PZ(e, t) { - var s, d, u, I, y, S, Z; + var s, d, u, I, A, h, S; const n = []; try { e.controls = !1, e.loop = !0, e.muted = !0, e.playsInline = !0, e.autoplay = !0; - } catch (C) { - (s = console.debug) == null || s.call(console, C); + } catch (W) { + (s = console.debug) == null || s.call(console, W); } const i = document.createElement("div"); i.className = "mjr-video-controls mjr-video-controls--preview"; try { i.setAttribute("role", "group"), i.setAttribute("aria-label", m("video.previewControls", "Video preview controls")); - } catch (C) { - (d = console.debug) == null || d.call(console, C); + } catch (W) { + (d = console.debug) == null || d.call(console, W); } const o = document.createElement("button"); o.type = "button", o.className = "mjr-video-preview-btn", o.title = m("video.playPause", "Play/Pause"); try { o.setAttribute("aria-label", m("video.playPause", "Play/Pause")); - } catch (C) { - (u = console.debug) == null || u.call(console, C); + } catch (W) { + (u = console.debug) == null || u.call(console, W); } const r = document.createElement("span"); r.className = "pi pi-play"; try { r.setAttribute("aria-hidden", "true"); - } catch (C) { - (I = console.debug) == null || I.call(console, C); + } catch (W) { + (I = console.debug) == null || I.call(console, W); } o.appendChild(r), i.appendChild(o); const l = () => { - var C; + var W; try { const g = !!(e != null && e.paused); r.className = `pi ${g ? "pi-play" : "pi-pause"}`; } catch (g) { - (C = console.debug) == null || C.call(console, g); + (W = console.debug) == null || W.call(console, g); } }, a = () => { - var C, g; + var W, g; try { - const A = (C = e.play) == null ? void 0 : C.call(e); - A && typeof A.catch == "function" && A.catch(() => { + const y = (W = e.play) == null ? void 0 : W.call(e); + y && typeof y.catch == "function" && y.catch(() => { }); - } catch (A) { - (g = console.debug) == null || g.call(console, A); + } catch (y) { + (g = console.debug) == null || g.call(console, y); } - }, c = (C) => { - var g, A, p, b; + }, c = (W) => { + var g, y, p, b; try { - (g = C == null ? void 0 : C.stopPropagation) == null || g.call(C); + (g = W == null ? void 0 : W.stopPropagation) == null || g.call(W); } catch (L) { - (A = console.debug) == null || A.call(console, L); + (y = console.debug) == null || y.call(console, L); } try { e.paused ? a() : (p = e.pause) == null || p.call(e); @@ -10573,239 +10573,239 @@ function PZ(e, t) { }; try { t.appendChild(i); - } catch (C) { - (y = console.debug) == null || y.call(console, C); + } catch (W) { + (A = console.debug) == null || A.call(console, W); } try { a(); - } catch (C) { - (S = console.debug) == null || S.call(console, C); + } catch (W) { + (h = console.debug) == null || h.call(console, W); } - n.push(Qe(e, "loadedmetadata", () => a(), { passive: !0 })), n.push(Qe(e, "canplay", () => a(), { passive: !0 })), n.push(Qe(o, "click", c)), n.push(Qe(e, "play", l, { passive: !0 })), n.push(Qe(e, "pause", l, { passive: !0 })), n.push(Qe(e, "ended", () => a(), { passive: !0 })); + n.push($e(e, "loadedmetadata", () => a(), { passive: !0 })), n.push($e(e, "canplay", () => a(), { passive: !0 })), n.push($e(o, "click", c)), n.push($e(e, "play", l, { passive: !0 })), n.push($e(e, "pause", l, { passive: !0 })), n.push($e(e, "ended", () => a(), { passive: !0 })); try { l(); - } catch (C) { - (Z = console.debug) == null || Z.call(console, C); + } catch (W) { + (S = console.debug) == null || S.call(console, W); } return { controlsEl: i, destroy: () => { - var C, g, A; + var W, g, y; try { - for (const p of n) bt(() => p == null ? void 0 : p()); + for (const p of n) It(() => p == null ? void 0 : p()); } catch (p) { - (C = console.debug) == null || C.call(console, p); + (W = console.debug) == null || W.call(console, p); } try { (g = i.remove) == null || g.call(i); } catch (p) { - (A = console.debug) == null || A.call(console, p); + (y = console.debug) == null || y.call(console, p); } } }; } function _I(e, t = {}) { - var n, i, o, r, l, a, c; + var n, i, o, r, l, a, c, s; try { - const s = HZ(t), u = String((t == null ? void 0 : t.mediaKind) || "video").toLowerCase() === "audio", I = s === "viewerbar", y = s !== "preview" && !u, S = !0, Z = qZ(t), C = (t == null ? void 0 : t.hostEl) || (e == null ? void 0 : e.parentElement); - if (!e || !C) return { controlsEl: null, destroy: eo }; - if (s === "preview") - return PZ(e, C); + const d = EZ(t), I = String((t == null ? void 0 : t.mediaKind) || "video").toLowerCase() === "audio", A = d === "viewerbar", h = d !== "preview" && !I, S = !0, W = qZ(t), g = (t == null ? void 0 : t.hostEl) || (e == null ? void 0 : e.parentElement); + if (!e || !g) return { controlsEl: null, destroy: eo }; + if (d === "preview") + return PZ(e, g); try { e.loop = !1; - } catch (re) { - (n = console.debug) == null || n.call(console, re); + } catch (oe) { + (n = console.debug) == null || n.call(console, oe); } - bt(() => { - var re; - return (re = C.classList) == null ? void 0 : re.add("mjr-video-host"); - }), bt(() => { - var re; - return (re = e.classList) == null ? void 0 : re.add("mjr-video-el"); - }), bt(() => { - var ne; - const re = (ne = window.getComputedStyle) == null ? void 0 : ne.call(window, C); - (re == null ? void 0 : re.position) === "static" && (C.style.position = "relative"); + It(() => { + var oe; + return (oe = g.classList) == null ? void 0 : oe.add("mjr-video-host"); + }), It(() => { + var oe; + return (oe = e.classList) == null ? void 0 : oe.add("mjr-video-el"); + }), It(() => { + var se; + const oe = (se = window.getComputedStyle) == null ? void 0 : se.call(window, g); + (oe == null ? void 0 : oe.position) === "static" && (g.style.position = "relative"); }); - const g = document.createElement("div"); - g.className = `mjr-video-controls mjr-video-controls--${s}`, I && g.classList.add("mjr-video-controls--modern"), g.setAttribute("role", "group"), g.setAttribute( + const y = document.createElement("div"); + y.className = `mjr-video-controls mjr-video-controls--${d}`, A && y.classList.add("mjr-video-controls--modern"), y.dataset.mjrLayout = "regular", y.setAttribute("role", "group"), y.setAttribute( "aria-label", - u ? m("video.audioControls", "Audio controls") : m("video.controls", "Video controls") + I ? m("video.audioControls", "Audio controls") : m("video.controls", "Video controls") ); - const A = document.createElement("div"); - A.className = "mjr-video-row mjr-video-row--top"; const p = document.createElement("div"); - p.className = "mjr-video-row mjr-video-row--bottom", g.appendChild(A), g.appendChild(p); + p.className = "mjr-video-row mjr-video-row--top"; const b = document.createElement("div"); - b.className = "mjr-video-seek-wrap"; - const L = document.createElement("input"); - L.className = "mjr-video-range mjr-video-range--seek", L.type = "range", L.min = "0", L.max = String(KZ), L.step = "1", L.value = "0", L.setAttribute("aria-label", m("video.seek", "Seek")), L.title = u ? m("video.seekThroughAudio", "Seek through audio") : m("video.seekThrough", "Seek through video"); - const h = document.createElement("div"); - h.className = "mjr-video-seek-overlay"; - let G = null, W = null, f = null, X = null; - y && (G = document.createElement("div"), G.className = "mjr-video-seek-zones", W = document.createElement("div"), W.className = "mjr-video-seek-zone mjr-video-seek-zone--leftTrim", f = document.createElement("div"), f.className = "mjr-video-seek-zone mjr-video-seek-zone--selected", X = document.createElement("div"), X.className = "mjr-video-seek-zone mjr-video-seek-zone--rightTrim", G.appendChild(W), G.appendChild(f), G.appendChild(X)); - const x = document.createElement("div"); - x.className = "mjr-video-seek-ticks"; - const T = document.createElement("div"); - T.className = "mjr-video-seek-labels"; - const v = document.createElement("div"); - v.className = "mjr-video-seek-mark mjr-video-seek-mark--in"; - const w = document.createElement("div"); - w.className = "mjr-video-seek-mark mjr-video-seek-mark--out"; - const R = document.createElement("div"); - R.className = "mjr-video-seek-playhead"; - const Y = document.createElement("div"); - Y.className = "mjr-video-seek-playhead-label", h.appendChild(x), h.appendChild(T), h.appendChild(R), h.appendChild(Y); - const F = document.createElement("div"); - F.className = "mjr-video-seek-handle mjr-video-seek-handle--in", F.title = m("video.dragSetIn", "Drag to set In"), F.setAttribute("aria-label", m("video.dragSetIn", "Drag to set In")); - const N = document.createElement("div"); - N.className = "mjr-video-seek-handle mjr-video-seek-handle--out", N.title = m("video.dragSetOut", "Drag to set Out"), N.setAttribute("aria-label", m("video.dragSetOut", "Drag to set Out")), b.appendChild(L), G && b.appendChild(G), b.appendChild(h), b.appendChild(v), b.appendChild(w), b.appendChild(F), b.appendChild(N); - const V = document.createElement("span"); - V.className = "mjr-video-time", V.textContent = "0:00 / 0:00", V.title = m("video.currentTimeTotal", "Current time / Total duration"); - const k = document.createElement("span"); - k.className = "mjr-video-range-count", k.textContent = ""; - try { - k.style.display = "none"; - } catch (re) { - (i = console.debug) == null || i.call(console, re); - } + b.className = "mjr-video-row mjr-video-row--bottom", y.appendChild(p), y.appendChild(b); + const L = document.createElement("div"); + L.className = "mjr-video-seek-wrap"; + const C = document.createElement("input"); + C.className = "mjr-video-range mjr-video-range--seek", C.type = "range", C.min = "0", C.max = String(UZ), C.step = "1", C.value = "0", C.setAttribute("aria-label", m("video.seek", "Seek")), C.title = I ? m("video.seekThroughAudio", "Seek through audio") : m("video.seekThrough", "Seek through video"); + const G = document.createElement("div"); + G.className = "mjr-video-seek-overlay"; + let Z = null, f = null, X = null, x = null; + h && (Z = document.createElement("div"), Z.className = "mjr-video-seek-zones", f = document.createElement("div"), f.className = "mjr-video-seek-zone mjr-video-seek-zone--leftTrim", X = document.createElement("div"), X.className = "mjr-video-seek-zone mjr-video-seek-zone--selected", x = document.createElement("div"), x.className = "mjr-video-seek-zone mjr-video-seek-zone--rightTrim", Z.appendChild(f), Z.appendChild(X), Z.appendChild(x)); const K = document.createElement("div"); - K.className = "mjr-video-timegroup", K.appendChild(V), y && K.appendChild(k); - const z = document.createElement("span"); - z.className = "mjr-video-frame", z.textContent = "F: 0", z.title = m("video.currentFrame", "Current frame number"); - const B = xo( + K.className = "mjr-video-seek-ticks"; + const j = document.createElement("div"); + j.className = "mjr-video-seek-labels"; + const w = document.createElement("div"); + w.className = "mjr-video-seek-mark mjr-video-seek-mark--in"; + const R = document.createElement("div"); + R.className = "mjr-video-seek-mark mjr-video-seek-mark--out"; + const V = document.createElement("div"); + V.className = "mjr-video-seek-playhead"; + const O = document.createElement("div"); + O.className = "mjr-video-seek-playhead-label", G.appendChild(K), G.appendChild(j), G.appendChild(V), G.appendChild(O); + const k = document.createElement("div"); + k.className = "mjr-video-seek-handle mjr-video-seek-handle--in", k.title = m("video.dragSetIn", "Drag to set In"), k.setAttribute("aria-label", m("video.dragSetIn", "Drag to set In")); + const Y = document.createElement("div"); + Y.className = "mjr-video-seek-handle mjr-video-seek-handle--out", Y.title = m("video.dragSetOut", "Drag to set Out"), Y.setAttribute("aria-label", m("video.dragSetOut", "Drag to set Out")), L.appendChild(C), Z && L.appendChild(Z), L.appendChild(G), L.appendChild(w), L.appendChild(R), L.appendChild(k), L.appendChild(Y); + const N = document.createElement("span"); + N.className = "mjr-video-time", N.textContent = "0:00 / 0:00", N.title = m("video.currentTimeTotal", "Current time / Total duration"); + const U = document.createElement("span"); + U.className = "mjr-video-range-count", U.textContent = ""; + try { + U.style.display = "none"; + } catch (oe) { + (i = console.debug) == null || i.call(console, oe); + } + const z = document.createElement("div"); + z.className = "mjr-video-timegroup", z.appendChild(N), h && z.appendChild(U); + const T = document.createElement("span"); + T.className = "mjr-video-frame", T.textContent = "F: 0", T.title = m("video.currentFrame", "Current frame number"); + const J = xo( "mjr-video-btn--play", m("btn.play", "Play"), m("video.playPauseSpace", "Play/Pause (Space)") - ), J = xo( + ), P = xo( "mjr-video-btn--step", "<", m("video.stepBack", "Step back") - ), P = xo( + ), E = xo( "mjr-video-btn--step", ">", m("video.stepForward", "Step forward") - ), H = xo( + ), $ = xo( "mjr-video-btn--jump mjr-video-btn--in", "|<", m("video.goToIn", "Go to In") - ), $ = xo( + ), H = xo( "mjr-video-btn--jump mjr-video-btn--out", ">|", m("video.goToOut", "Go to Out") - ), E = xo( + ), ne = xo( "mjr-video-btn--mark mjr-video-btn--in", "I", m("video.setInFromCurrent", "Set In from current frame") - ), oe = xo( + ), M = xo( "mjr-video-btn--mark mjr-video-btn--out", "O", m("video.setOutFromCurrent", "Set Out from current frame") - ), M = xu( + ), v = xu( "mjr-video-btn--toggle", "pi-refresh", m("video.loopPlaybackInRange", "Loop playback in range"), m("video.loop", "Loop") - ), j = M.btn, O = zl("mjr-video-num--in", { + ), F = v.btn, D = zl("mjr-video-num--in", { min: 0, step: 1, value: 0, title: m("video.inFrame", "In frame"), ariaLabel: m("video.inFrame", "In frame"), widthPx: 72 - }), D = zl("mjr-video-num--out", { + }), q = zl("mjr-video-num--out", { min: 0, step: 1, value: 0, title: m("video.outFrame", "Out frame"), ariaLabel: m("video.outFrame", "Out frame"), widthPx: 72 - }), q = zl("mjr-video-num--step", { + }), ee = zl("mjr-video-num--step", { min: 1, step: 1, value: 1, title: m("video.frameIncrement", "Frame increment"), ariaLabel: m("video.frameIncrement", "Frame increment"), widthPx: 56 - }), ee = zl("mjr-video-num--fps", { + }), ae = zl("mjr-video-num--fps", { min: 1, step: 1e-3, - value: Qi(Z || 30), + value: Qi(W || 30), title: m("video.fpsStepping", "FPS (used for frame stepping)"), ariaLabel: m("video.fps", "FPS"), widthPx: 56 - }), ce = document.createElement("select"); - ce.className = "mjr-video-num mjr-video-num--speed", ce.title = m("video.playbackSpeed", "Playback speed"), ce.setAttribute("aria-label", m("video.playbackSpeed", "Playback speed")), ce.style.width = "74px"; - const ue = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 2]; - for (const re of ue) { - const ne = document.createElement("option"); - ne.value = String(re), ne.textContent = `${re}x`, ce.appendChild(ne); + }), ue = document.createElement("select"); + ue.className = "mjr-video-num mjr-video-num--speed", ue.title = m("video.playbackSpeed", "Playback speed"), ue.setAttribute("aria-label", m("video.playbackSpeed", "Playback speed")), ue.style.width = "74px"; + const B = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 2]; + for (const oe of B) { + const se = document.createElement("option"); + se.value = String(oe), se.textContent = `${oe}x`, ue.appendChild(se); } - const U = xu( + const Q = xu( "mjr-video-btn--mute", "pi-volume-up", m("video.mute", "Mute"), m("video.mute", "Mute") - ), Q = U.btn, _ = document.createElement("div"); - _.className = "mjr-video-volume-wrap", _.style.cssText = "display:none; align-items:center; position:relative;"; - let le = null; + ), _ = Q.btn, le = document.createElement("div"); + le.className = "mjr-video-volume-wrap", le.style.cssText = "display:none; align-items:center; position:relative;"; + let ce = null; if (S) { - le = document.createElement("input"), le.className = "mjr-video-range mjr-video-range--volume", le.type = "range", le.min = "0", le.max = "1", le.step = "0.02", le.value = String(In(Number(e.volume) || 0)), le.setAttribute("aria-label", m("video.volume", "Volume")), le.title = m("video.volume", "Volume"); + ce = document.createElement("input"), ce.className = "mjr-video-range mjr-video-range--volume", ce.type = "range", ce.min = "0", ce.max = "1", ce.step = "0.02", ce.value = String(pn(Number(e.volume) || 0)), ce.setAttribute("aria-label", m("video.volume", "Volume")), ce.title = m("video.volume", "Volume"); try { - le.style.width = "120px"; - } catch (re) { - (o = console.debug) == null || o.call(console, re); + ce.style.width = "120px"; + } catch (oe) { + (o = console.debug) == null || o.call(console, oe); } - _.appendChild(le); + le.appendChild(ce); } const de = document.createElement("div"); de.className = "mjr-video-group mjr-video-group--in"; - const se = document.createElement("span"); - se.textContent = "In", se.title = m("video.resetInToStart", "Reset In to start"), se.style.cssText = "cursor:pointer; user-select:none;", y && (de.appendChild(se), de.appendChild(O)); - const ge = document.createElement("div"); - ge.className = "mjr-video-group mjr-video-group--out"; - const je = document.createElement("span"); - je.textContent = "Out", je.title = m("video.resetOutToEnd", "Reset Out to end"), je.style.cssText = "cursor:pointer; user-select:none;", y && (ge.appendChild(je), ge.appendChild(D)); - const Se = document.createElement("div"); - Se.className = "mjr-video-group mjr-video-group--adjust-left", y && (Se.appendChild(E), Se.appendChild(document.createTextNode(m("video.step", "Step"))), Se.appendChild(q), Se.appendChild(document.createTextNode(m("video.fps", "FPS"))), Se.appendChild(ee), Se.appendChild(z)); - const ke = document.createElement("div"); - ke.className = "mjr-video-group mjr-video-group--adjust-right", y && (ke.appendChild(K), ke.appendChild(j)); - const we = document.createElement("div"); - we.className = "mjr-video-group mjr-video-group--speed", we.appendChild(document.createTextNode(m("video.speed", "Speed"))), we.appendChild(ce); - const Je = document.createElement("div"); - Je.className = "mjr-video-bottom mjr-video-bottom--left"; - const $e = document.createElement("div"); - $e.className = "mjr-video-transport"; + const ge = document.createElement("span"); + ge.textContent = "In", ge.title = m("video.resetInToStart", "Reset In to start"), ge.style.cssText = "cursor:pointer; user-select:none;", h && (de.appendChild(ge), de.appendChild(D)); + const Le = document.createElement("div"); + Le.className = "mjr-video-group mjr-video-group--out"; + const xe = document.createElement("span"); + xe.textContent = "Out", xe.title = m("video.resetOutToEnd", "Reset Out to end"), xe.style.cssText = "cursor:pointer; user-select:none;", h && (Le.appendChild(xe), Le.appendChild(q)); + const Xe = document.createElement("div"); + Xe.className = "mjr-video-group mjr-video-group--adjust-left", h && (Xe.appendChild(ne), Xe.appendChild(document.createTextNode(m("video.step", "Step"))), Xe.appendChild(ee), Xe.appendChild(document.createTextNode(m("video.fps", "FPS"))), Xe.appendChild(ae), Xe.appendChild(T)); + const Me = document.createElement("div"); + Me.className = "mjr-video-group mjr-video-group--adjust-right", h && (Me.appendChild(z), Me.appendChild(F)); + const Fe = document.createElement("div"); + Fe.className = "mjr-video-group mjr-video-group--speed", Fe.appendChild(document.createTextNode(m("video.speed", "Speed"))), Fe.appendChild(ue); + const it = document.createElement("div"); + it.className = "mjr-video-bottom mjr-video-bottom--left"; const qe = document.createElement("div"); - if (qe.className = "mjr-video-bottom mjr-video-bottom--right", u || ($e.appendChild(H), $e.appendChild(J)), $e.appendChild(B), u || ($e.appendChild(P), $e.appendChild($)), y && Je.appendChild(Se), y && qe.appendChild(ke), qe.appendChild(we), qe.appendChild(Q), y && qe.appendChild(oe), le && qe.appendChild(_), I) { - const re = document.createElement("div"); - re.className = "mjr-video-bar-timeline", y && re.appendChild(de), re.appendChild(b), y && re.appendChild(ge); - const ne = document.createElement("div"); - ne.className = "mjr-video-bar-actions"; - const Ie = document.createElement("div"); - Ie.className = "mjr-video-bar-side mjr-video-bar-side--left", y && Ie.appendChild(Se); - const Ne = document.createElement("div"); - Ne.className = "mjr-video-bar-center", Ne.appendChild($e); - const He = document.createElement("div"); - He.className = "mjr-video-bar-side mjr-video-bar-side--right", y && He.appendChild(ke), He.appendChild(we), He.appendChild(Q), y && He.appendChild(oe), le && He.appendChild(_), ne.appendChild(Ie), ne.appendChild(Ne), ne.appendChild(He), g.replaceChildren(re, ne); + qe.className = "mjr-video-transport"; + const Pe = document.createElement("div"); + if (Pe.className = "mjr-video-bottom mjr-video-bottom--right", I || (qe.appendChild($), qe.appendChild(P)), qe.appendChild(J), I || (qe.appendChild(E), qe.appendChild(H)), h && it.appendChild(Xe), h && Pe.appendChild(Me), Pe.appendChild(Fe), Pe.appendChild(_), h && Pe.appendChild(M), ce && Pe.appendChild(le), A) { + const oe = document.createElement("div"); + oe.className = "mjr-video-bar-timeline", h && oe.appendChild(de), oe.appendChild(L), h && oe.appendChild(Le); + const se = document.createElement("div"); + se.className = "mjr-video-bar-actions"; + const fe = document.createElement("div"); + fe.className = "mjr-video-bar-side mjr-video-bar-side--left", h && fe.appendChild(Xe); + const Be = document.createElement("div"); + Be.className = "mjr-video-bar-center", Be.appendChild(qe); + const gt = document.createElement("div"); + gt.className = "mjr-video-bar-side mjr-video-bar-side--right", h && gt.appendChild(Me), gt.appendChild(Fe), gt.appendChild(_), h && gt.appendChild(M), ce && gt.appendChild(le), se.appendChild(fe), se.appendChild(Be), se.appendChild(gt), y.replaceChildren(oe, se); } else - y && A.appendChild(z), y && A.appendChild(de), A.appendChild(b), y && A.appendChild(ge), A.appendChild(K), p.appendChild(Je), p.appendChild($e), p.appendChild(qe); - const Ue = (re) => { - var ne, Ie; + h && p.appendChild(T), h && p.appendChild(de), p.appendChild(L), h && p.appendChild(Le), p.appendChild(z), b.appendChild(it), b.appendChild(qe), b.appendChild(Pe); + const Re = (oe) => { + var se, fe; try { - (ne = re.stopPropagation) == null || ne.call(re); - } catch (Ne) { - (Ie = console.debug) == null || Ie.call(console, Ne); + (se = oe.stopPropagation) == null || se.call(oe); + } catch (Be) { + (fe = console.debug) == null || fe.call(console, Be); } - }, Te = (re) => { - var ne, Ie; + }, rt = (oe) => { + var se, fe; try { - (ne = re.preventDefault) == null || ne.call(re); - } catch (Ne) { - (Ie = console.debug) == null || Ie.call(console, Ne); + (se = oe.preventDefault) == null || se.call(oe); + } catch (Be) { + (fe = console.debug) == null || fe.call(console, Be); } - Ue(re); - }, Oe = [], pt = (() => { + Re(oe); + }, Te = [], qt = (() => { try { return new AbortController(); } catch { @@ -10815,51 +10815,78 @@ function _I(e, t = {}) { }; } })(); - Oe.push(() => { - var re; + Te.push(() => { + var oe; try { - pt.abort(); - } catch (ne) { - (re = console.debug) == null || re.call(console, ne); + qt.abort(); + } catch (se) { + (oe = console.debug) == null || oe.call(console, se); } - }), Oe.push(Qe(g, "pointerdown", Ue)), Oe.push(Qe(g, "dblclick", Te, { capture: !0 })), Oe.push( - Qe(g, "wheel", Te, { capture: !0, passive: !1 }) - ), Oe.push( - Qe( + }); + const kt = () => { + var oe; + try { + const se = Number(g == null ? void 0 : g.clientWidth) || Number(y == null ? void 0 : y.clientWidth) || 0; + let fe = "regular"; + se > 0 && se < 560 ? fe = "stacked" : se > 0 && se < 860 && (fe = "compact"), y.dataset.mjrLayout = fe; + } catch (se) { + (oe = console.debug) == null || oe.call(console, se); + } + }; + kt(); + try { + if (typeof ResizeObserver == "function" && g) { + const oe = new ResizeObserver(() => kt()); + oe.observe(g), Te.push(() => { + var se; + try { + oe.disconnect(); + } catch (fe) { + (se = console.debug) == null || se.call(console, fe); + } + }); + } + } catch (oe) { + (r = console.debug) == null || r.call(console, oe); + } + Te.push($e(y, "pointerdown", Re)), Te.push($e(y, "dblclick", rt, { capture: !0 })), Te.push( + $e(y, "wheel", rt, { capture: !0, passive: !1 }) + ), Te.push( + $e( window, "dblclick", - (re) => { - var ne, Ie; + (oe) => { + var se, fe; try { - (ne = g.contains) != null && ne.call(g, re == null ? void 0 : re.target) && Te(re); - } catch (Ne) { - (Ie = console.debug) == null || Ie.call(console, Ne); + (se = y.contains) != null && se.call(y, oe == null ? void 0 : oe.target) && rt(oe); + } catch (Be) { + (fe = console.debug) == null || fe.call(console, Be); } }, { capture: !0 } ) - ), Oe.push( - Qe( + ), Te.push( + $e( window, "wheel", - (re) => { - var ne, Ie; + (oe) => { + var se, fe; try { - (ne = g.contains) != null && ne.call(g, re == null ? void 0 : re.target) && Te(re); - } catch (Ne) { - (Ie = console.debug) == null || Ie.call(console, Ne); + (se = y.contains) != null && se.call(y, oe == null ? void 0 : oe.target) && rt(oe); + } catch (Be) { + (fe = console.debug) == null || fe.call(console, Be); } }, { capture: !0, passive: !1 } ) ); - const Me = { - fps: Qi(Z || 30), + const we = { + fps: Qi(W || 30), step: 1, inFrame: null, outFrame: null, frameCount: null, - loop: y, + loop: h, pingpong: !1, once: !1, playbackRate: Math.max(0.25, Math.min(2, Number(t == null ? void 0 : t.initialPlaybackRate) || 1)), @@ -10867,1040 +10894,1040 @@ function _I(e, t = {}) { _ppReverse: !1, _ppRafId: null, _userInteracted: !1 - }, Xt = () => { - var re; - if (!Me._userInteracted) { - Me._userInteracted = !0; + }, me = () => { + var oe; + if (!we._userInteracted) { + we._userInteracted = !0; try { - e.muted && (e.muted = !1, Tt == null || Tt()); - } catch (ne) { - (re = console.debug) == null || re.call(console, ne); + e.muted && (e.muted = !1, pe == null || pe()); + } catch (se) { + (oe = console.debug) == null || oe.call(console, se); } } }; - let Mt = null; - const me = () => { - var re, ne; - if (y) + let He = null; + const Ye = () => { + var oe, se; + if (h) try { - z.classList.add("is-step"); + T.classList.add("is-step"); try { - Mt == null || Mt(); - } catch (Ie) { - (re = console.debug) == null || re.call(console, Ie); + He == null || He(); + } catch (fe) { + (oe = console.debug) == null || oe.call(console, fe); } - Mt = EZ(pt.signal, DZ, () => { - var Ie; + He = HZ(qt.signal, DZ, () => { + var fe; try { - z.classList.remove("is-step"); - } catch (Ne) { - (Ie = console.debug) == null || Ie.call(console, Ne); + T.classList.remove("is-step"); + } catch (Be) { + (fe = console.debug) == null || fe.call(console, Be); } }); - } catch (Ie) { - (ne = console.debug) == null || ne.call(console, Ie); + } catch (fe) { + (se = console.debug) == null || se.call(console, fe); } }; - Oe.push(() => { - var re, ne, Ie, Ne; + Te.push(() => { + var oe, se, fe, Be; try { - Mt == null || Mt(); - } catch (He) { - (re = console.debug) == null || re.call(console, He); + He == null || He(); + } catch (gt) { + (oe = console.debug) == null || oe.call(console, gt); } - Mt = null; + He = null; try { - (Ie = (ne = z == null ? void 0 : z.classList) == null ? void 0 : ne.remove) == null || Ie.call(ne, "is-step"); - } catch (He) { - (Ne = console.debug) == null || Ne.call(console, He); + (fe = (se = T == null ? void 0 : T.classList) == null ? void 0 : se.remove) == null || fe.call(se, "is-step"); + } catch (gt) { + (Be = console.debug) == null || Be.call(console, gt); } }); - const Pe = (re, ne) => { - var Ie; + const Pt = (oe, se) => { + var fe; try { - if (!re) return; - ne ? re.classList.add("is-on") : re.classList.remove("is-on"); - } catch (Ne) { - (Ie = console.debug) == null || Ie.call(console, Ne); + if (!oe) return; + se ? oe.classList.add("is-on") : oe.classList.remove("is-on"); + } catch (Be) { + (fe = console.debug) == null || fe.call(console, Be); } - }, Le = (re) => { - var ne, Ie, Ne; + }, ke = (oe) => { + var se, fe, Be; try { - const He = Number(re); - if (!Number.isFinite(He) || He <= 0) return Me.playbackRate; - const rt = Math.max(0.25, Math.min(2, Math.round(He * 100) / 100)); - Me.playbackRate = rt; + const gt = Number(oe); + if (!Number.isFinite(gt) || gt <= 0) return we.playbackRate; + const Wt = Math.max(0.25, Math.min(2, Math.round(gt * 100) / 100)); + we.playbackRate = Wt; try { - e.playbackRate = rt; - } catch (St) { - (ne = console.debug) == null || ne.call(console, St); + e.playbackRate = Wt; + } catch (Vt) { + (se = console.debug) == null || se.call(console, Vt); } try { - (Ie = ce.matches) != null && Ie.call(ce, ":focus") || (ce.value = String(rt)); - } catch (St) { - (Ne = console.debug) == null || Ne.call(console, St); + (fe = ue.matches) != null && fe.call(ue, ":focus") || (ue.value = String(Wt)); + } catch (Vt) { + (Be = console.debug) == null || Be.call(console, Vt); } - return rt; + return Wt; } catch { - return Me.playbackRate; + return we.playbackRate; } - }, Ot = () => { - var re, ne; + }, Ee = () => { + var oe, se; try { - Pe(j, !!(Me.loop || Me.pingpong)); + Pt(F, !!(we.loop || we.pingpong)); try { - M != null && M.icon && (Me.pingpong ? (M.icon.className = "pi pi-sort-alt", j.title = m( + v != null && v.icon && (we.pingpong ? (v.icon.className = "pi pi-sort-alt", F.title = m( "video.pingpongPlayback", "Ping-pong playback (forward then reverse)" - )) : (M.icon.className = "pi pi-refresh", j.title = m( + )) : (v.icon.className = "pi pi-refresh", F.title = m( "video.loopPlaybackInRange", "Loop playback in range" ))); - } catch (Ie) { - (re = console.debug) == null || re.call(console, Ie); + } catch (fe) { + (oe = console.debug) == null || oe.call(console, fe); } - } catch (Ie) { - (ne = console.debug) == null || ne.call(console, Ie); + } catch (fe) { + (se = console.debug) == null || se.call(console, fe); } - }, Xe = () => { + }, Ke = () => { try { - const re = Number(Me.frameCount); - if (Number.isFinite(re) && re > 0) - return Math.max(1, Math.floor(re)); - const ne = Number(e == null ? void 0 : e.duration), Ie = Qi(Me.fps, 30); - return !Number.isFinite(ne) || ne <= 0 ? 0 : Math.max(0, Math.floor(ne * Ie)); + const oe = Number(we.frameCount); + if (Number.isFinite(oe) && oe > 0) + return Math.max(1, Math.floor(oe)); + const se = Number(e == null ? void 0 : e.duration), fe = Qi(we.fps, 30); + return !Number.isFinite(se) || se <= 0 ? 0 : Math.max(0, Math.floor(se * fe)); } catch { return 0; } - }, Ee = (re = null) => { + }, lt = (oe = null) => { try { - const ne = re ?? (e == null ? void 0 : e.currentTime), Ie = Number(ne), Ne = Qi(Me.fps, 30); - return !Number.isFinite(Ie) || Ie < 0 ? 0 : Math.max(0, Math.floor(Ie * Ne + 1e-6)); + const se = oe ?? (e == null ? void 0 : e.currentTime), fe = Number(se), Be = Qi(we.fps, 30); + return !Number.isFinite(fe) || fe < 0 ? 0 : Math.max(0, Math.floor(fe * Be + 1e-6)); } catch { return 0; } - }, Ke = (re) => { - const ne = Qi(Me.fps, 30); - return Math.max(0, Number(re) || 0) / ne; - }, nt = () => { - var re; + }, wt = (oe) => { + const se = Qi(we.fps, 30); + return Math.max(0, Number(oe) || 0) / se; + }, at = () => { + var oe; try { - const ne = Xe(); - if (ne <= 0) return; - const Ie = Me.inFrame == null ? 0 : go(Me.inFrame, 0, ne), Ne = Me.outFrame == null ? ne : go(Me.outFrame, 0, ne); - Ne < Ie ? (Me.inFrame = Ne, Me.outFrame = Ie) : (Me.inFrame = Ie, Me.outFrame = Ne); - } catch (ne) { - (re = console.debug) == null || re.call(console, ne); + const se = Ke(); + if (se <= 0) return; + const fe = we.inFrame == null ? 0 : go(we.inFrame, 0, se), Be = we.outFrame == null ? se : go(we.outFrame, 0, se); + Be < fe ? (we.inFrame = Be, we.outFrame = fe) : (we.inFrame = fe, we.outFrame = Be); + } catch (se) { + (oe = console.debug) == null || oe.call(console, se); } - }, ut = () => { + }, tt = () => { try { - const re = Xe(), ne = Me.inFrame == null ? 0 : go(Me.inFrame, 0, re), Ie = Me.outFrame == null ? re : go(Me.outFrame, 0, re); - return { inF: ne, outF: Ie, maxF: re }; + const oe = Ke(), se = we.inFrame == null ? 0 : go(we.inFrame, 0, oe), fe = we.outFrame == null ? oe : go(we.outFrame, 0, oe); + return { inF: se, outF: fe, maxF: oe }; } catch { return { inF: 0, outF: 0, maxF: 0 }; } - }, It = () => { - var re; + }, Oe = () => { + var oe; try { - const ne = !(e != null && e.paused) || Me._ppReverse; - B.textContent = ne ? m("video.pause", "Pause") : m("video.play", "Play"); - } catch (ne) { - (re = console.debug) == null || re.call(console, ne); + const se = !(e != null && e.paused) || we._ppReverse; + J.textContent = se ? m("video.pause", "Pause") : m("video.play", "Play"); + } catch (se) { + (oe = console.debug) == null || oe.call(console, se); } - }, dt = () => { - var re, ne; + }, Rt = () => { + var oe, se; try { - const Ie = !!(e != null && e.muted) || (Number(e == null ? void 0 : e.volume) || 0) <= 1e-3; + const fe = !!(e != null && e.muted) || (Number(e == null ? void 0 : e.volume) || 0) <= 1e-3; try { - U.icon.className = `pi ${Ie ? "pi-volume-off" : "pi-volume-up"}`; - } catch (He) { - (re = console.debug) == null || re.call(console, He); + Q.icon.className = `pi ${fe ? "pi-volume-off" : "pi-volume-up"}`; + } catch (gt) { + (oe = console.debug) == null || oe.call(console, gt); } - const Ne = Ie ? m("video.unmute", "Unmute") : m("video.mute", "Mute"); - Q.title = Ne, Q.setAttribute("aria-label", Ne); - } catch (Ie) { - (ne = console.debug) == null || ne.call(console, Ie); + const Be = fe ? m("video.unmute", "Unmute") : m("video.mute", "Mute"); + _.title = Be, _.setAttribute("aria-label", Be); + } catch (fe) { + (se = console.debug) == null || se.call(console, fe); } - }, Re = (re = null) => { - var ne, Ie, Ne, He, rt, St, Yt, Gt; + }, nt = (oe = null) => { + var se, fe, Be, gt, Wt, Vt, _t, Xt; try { - const Qt = Number(e == null ? void 0 : e.duration), Yn = re ?? (e == null ? void 0 : e.currentTime), wn = Number(Yn), xn = Number.isFinite(Qt) && Qt > 0; - if (V.textContent = `${Gu(wn)} / ${xn ? Gu(Qt) : "0:00"}`, L.disabled = !xn, xn) { - const en = In((wn || 0) / Qt), Vn = Math.round(en * 1e3); - !Number.isNaN(Vn) && !((ne = L.matches) != null && ne.call(L, ":active")) && (L.value = String(Vn)); + const tn = Number(e == null ? void 0 : e.duration), Ln = oe ?? (e == null ? void 0 : e.currentTime), Mn = Number(Ln), Xn = Number.isFinite(tn) && tn > 0; + if (N.textContent = `${Su(Mn)} / ${Xn ? Su(tn) : "0:00"}`, C.disabled = !Xn, Xn) { + const rn = pn((Mn || 0) / tn), vn = Math.round(rn * 1e3); + !Number.isNaN(vn) && !((se = C.matches) != null && se.call(C, ":active")) && (C.value = String(vn)); try { - R.style.left = `${en * 100}%`; - } catch (pn) { - (Ie = console.debug) == null || Ie.call(console, pn); + V.style.left = `${rn * 100}%`; + } catch (re) { + (fe = console.debug) == null || fe.call(console, re); } } else { - L.value = "0"; + C.value = "0"; try { - R.style.left = "0%"; - } catch (en) { - (Ne = console.debug) == null || Ne.call(console, en); + V.style.left = "0%"; + } catch (rn) { + (Be = console.debug) == null || Be.call(console, rn); } } - if (y) { - const en = Xe(), Vn = Ee(wn); - z.textContent = `F: ${Vn} / ${en}`; + if (h) { + const rn = Ke(), vn = lt(Mn); + T.textContent = `F: ${vn} / ${rn}`; try { - if (Number.isFinite(Qt) && Qt > 0) { - const Nn = In((wn || 0) / Qt); - Y.style.left = `${Nn * 100}%`, Y.textContent = String(Vn), Y.style.display = ""; + if (Number.isFinite(tn) && tn > 0) { + const Ie = pn((Mn || 0) / tn); + O.style.left = `${Ie * 100}%`, O.textContent = String(vn), O.style.display = ""; } else - Y.style.display = "none"; - } catch (pn) { - (He = console.debug) == null || He.call(console, pn); + O.style.display = "none"; + } catch (re) { + (gt = console.debug) == null || gt.call(console, re); } - (rt = O.matches) != null && rt.call(O, ":focus") || (O.value = String(Me.inFrame ?? 0)), (St = D.matches) != null && St.call(D, ":focus") || (D.value = String(Me.outFrame ?? en)); + (Wt = D.matches) != null && Wt.call(D, ":focus") || (D.value = String(we.inFrame ?? 0)), (Vt = q.matches) != null && Vt.call(q, ":focus") || (q.value = String(we.outFrame ?? rn)); try { - const { inF: pn, outF: Nn, maxF: ae } = ut(), he = pn <= 0 && Nn >= ae, ve = Math.max(0, Math.floor(Nn) - Math.floor(pn) + 1); - !he && ae > 0 ? (k.textContent = `R: ${ve}f`, k.style.display = "") : k.style.display = "none"; - } catch (pn) { - (Yt = console.debug) == null || Yt.call(console, pn); + const { inF: re, outF: Ie, maxF: Ge } = tt(), Je = re <= 0 && Ie >= Ge, _e = Math.max(0, Math.floor(Ie) - Math.floor(re) + 1); + !Je && Ge > 0 ? (U.textContent = `R: ${_e}f`, U.style.display = "") : U.style.display = "none"; + } catch (re) { + (_t = console.debug) == null || _t.call(console, re); } } - } catch (Qt) { - (Gt = console.debug) == null || Gt.call(console, Qt); + } catch (tn) { + (Xt = console.debug) == null || Xt.call(console, tn); } - }, Wt = () => { - var re, ne, Ie, Ne, He, rt, St; - if (y) + }, Mt = () => { + var oe, se, fe, Be, gt, Wt, Vt; + if (h) try { - const { inF: Yt, outF: Gt, maxF: Qt } = ut(); - if (!Number.isFinite(Qt) || Qt <= 0) return; - const Yn = In(Yt / Qt) * 100, wn = In(Gt / Qt) * 100, xn = Yt <= 0 && Gt >= Qt; + const { inF: _t, outF: Xt, maxF: tn } = tt(); + if (!Number.isFinite(tn) || tn <= 0) return; + const Ln = pn(_t / tn) * 100, Mn = pn(Xt / tn) * 100, Xn = _t <= 0 && Xt >= tn; try { - L.style.background = ""; - } catch (en) { - (re = console.debug) == null || re.call(console, en); + C.style.background = ""; + } catch (rn) { + (oe = console.debug) == null || oe.call(console, rn); } try { - const en = In(Yn / 100) * 100, Vn = In(wn / 100) * 100, pn = Math.min(en, Vn), Nn = Math.max(en, Vn); - if (G && W && f && X) { - W.style.left = "0%", W.style.width = `${pn}%`, f.style.left = `${pn}%`, f.style.width = `${Math.max(0, Nn - pn)}%`, X.style.left = `${Nn}%`, X.style.width = `${Math.max(0, 100 - Nn)}%`; + const rn = pn(Ln / 100) * 100, vn = pn(Mn / 100) * 100, re = Math.min(rn, vn), Ie = Math.max(rn, vn); + if (Z && f && X && x) { + f.style.left = "0%", f.style.width = `${re}%`, X.style.left = `${re}%`, X.style.width = `${Math.max(0, Ie - re)}%`, x.style.left = `${Ie}%`, x.style.width = `${Math.max(0, 100 - Ie)}%`; try { - G.classList.toggle("is-trimmed", !xn), G.classList.toggle("is-fullrange", xn); - } catch (ae) { - (ne = console.debug) == null || ne.call(console, ae); + Z.classList.toggle("is-trimmed", !Xn), Z.classList.toggle("is-fullrange", Xn); + } catch (Ge) { + (se = console.debug) == null || se.call(console, Ge); } } - } catch (en) { - (Ie = console.debug) == null || Ie.call(console, en); + } catch (rn) { + (fe = console.debug) == null || fe.call(console, rn); } try { - v.style.left = `${Yn}%`, w.style.left = `${wn}%`; - } catch (en) { - (Ne = console.debug) == null || Ne.call(console, en); + w.style.left = `${Ln}%`, R.style.left = `${Mn}%`; + } catch (rn) { + (Be = console.debug) == null || Be.call(console, rn); } try { - F.style.left = `${Yn}%`, N.style.left = `${wn}%`; - } catch (en) { - (He = console.debug) == null || He.call(console, en); + k.style.left = `${Ln}%`, Y.style.left = `${Mn}%`; + } catch (rn) { + (gt = console.debug) == null || gt.call(console, rn); } try { - const Vn = Math.max(1, Math.floor(Qt / UZ)), pn = Math.max( - Vn, - Math.floor(Number(Me.step) || 1) - ), Nn = pn / Qt * 100, ae = Nn * 10; - if (Number.isFinite(Nn) && Nn > 0.02) { - const ve = `repeating-linear-gradient(to right, rgba(255,255,255,0.16) 0, rgba(255,255,255,0.16) 1px, transparent 1px, transparent ${Nn}%)`, Fe = `repeating-linear-gradient(to right, rgba(255,255,255,0.28) 0, rgba(255,255,255,0.28) 1px, transparent 1px, transparent ${ae}%)`; - x.style.backgroundImage = `${Fe}, ${ve}`; + const vn = Math.max(1, Math.floor(tn / BZ)), re = Math.max( + vn, + Math.floor(Number(we.step) || 1) + ), Ie = re / tn * 100, Ge = Ie * 10; + if (Number.isFinite(Ie) && Ie > 0.02) { + const _e = `repeating-linear-gradient(to right, rgba(255,255,255,0.16) 0, rgba(255,255,255,0.16) 1px, transparent 1px, transparent ${Ie}%)`, Qe = `repeating-linear-gradient(to right, rgba(255,255,255,0.28) 0, rgba(255,255,255,0.28) 1px, transparent 1px, transparent ${Ge}%)`; + K.style.backgroundImage = `${Qe}, ${_e}`; } else - x.style.backgroundImage = ""; + K.style.backgroundImage = ""; (() => { - var et, tt, st, Vt, Bt, Rt, Ct; + var mt, Lt, Tt, Ot, Ct, gn, pt; try { - const zt = `${Qt}|${pn}`; - if (((et = T == null ? void 0 : T.dataset) == null ? void 0 : et.mjrLabelKey) === zt) return; - T.dataset.mjrLabelKey = zt; + const zt = `${tn}|${re}`; + if (((mt = j == null ? void 0 : j.dataset) == null ? void 0 : mt.mjrLabelKey) === zt) return; + j.dataset.mjrLabelKey = zt; } catch (zt) { - (tt = console.debug) == null || tt.call(console, zt); + (Lt = console.debug) == null || Lt.call(console, zt); } try { - T.replaceChildren(); + j.replaceChildren(); } catch (zt) { - (st = console.debug) == null || st.call(console, zt); + (Tt = console.debug) == null || Tt.call(console, zt); } - const ve = 22; - let Fe = Math.max(1, pn * 10); + const _e = 22; + let Qe = Math.max(1, re * 10); try { - for (; Fe > 0 && Math.ceil(Qt / Fe) > ve; ) - Fe *= 2; + for (; Qe > 0 && Math.ceil(tn / Qe) > _e; ) + Qe *= 2; } catch (zt) { - (Vt = console.debug) == null || Vt.call(console, zt); + (Ot = console.debug) == null || Ot.call(console, zt); } - const _e = (zt) => { - const gt = document.createElement("span"); - gt.className = "mjr-video-seek-label"; - const mn = In(zt / Qt) * 100; - return gt.style.left = `${mn}%`, gt.textContent = String(Math.floor(zt)), gt; + const et = (zt) => { + const ht = document.createElement("span"); + ht.className = "mjr-video-seek-label"; + const on = pn(zt / tn) * 100; + return ht.style.left = `${on}%`, ht.textContent = String(Math.floor(zt)), ht; }; try { - T.appendChild(_e(0)); - } catch (zt) { - (Bt = console.debug) == null || Bt.call(console, zt); - } - for (let zt = Fe; zt < Qt; zt += Fe) - try { - T.appendChild(_e(zt)); - } catch (gt) { - (Rt = console.debug) == null || Rt.call(console, gt); - } - try { - T.appendChild(_e(Qt)); + j.appendChild(et(0)); } catch (zt) { (Ct = console.debug) == null || Ct.call(console, zt); } - })(); - } catch (en) { - (rt = console.debug) == null || rt.call(console, en); - } - } catch (Yt) { - (St = console.debug) == null || St.call(console, Yt); - } - }, lt = ({ prefer: re = null } = {}) => { - var ne; - if (y) - try { - nt(); - const { inF: Ie, outF: Ne } = ut(), He = Ee(); - re === "in" ? te(Ie) : re === "out" ? He > Ne && te(Ne) : He < Ie ? te(Ie) : He > Ne && te(Ne); - } catch (Ie) { - (ne = console.debug) == null || ne.call(console, Ie); - } - }, qt = () => { - var re; - try { - Me.inFrame = 0, nt(), Re(), Wt(), lt({ prefer: "in" }); - } catch (ne) { - (re = console.debug) == null || re.call(console, ne); - } - }, yt = () => { - var re; - try { - const { maxF: ne } = ut(); - Me.outFrame = Math.max(0, Number(ne) || 0), nt(), Re(), Wt(), lt({ prefer: "out" }); - } catch (ne) { - (re = console.debug) == null || re.call(console, ne); - } - }, mt = () => { - var re; - try { - Me._ppRafId != null && (cancelAnimationFrame(Me._ppRafId), Me._ppRafId = null); - } catch (ne) { - (re = console.debug) == null || re.call(console, ne); - } - }; - Oe.push(mt); - const kt = () => { - var re, ne; - try { - mt(), Me._ppReverse = !0, (re = e.pause) == null || re.call(e), It(); - const Ie = Qi(Me.fps, 30), Ne = Math.max(0.25, Number(Me.playbackRate) || 1), He = 1e3 / (Ie * Ne); - let rt = performance.now(); - const St = (Yt) => { - var Gt, Qt; - try { - if (!Me._ppReverse || !Me.pingpong) { - Me._ppReverse = !1, It(); - return; - } - const Yn = Yt - rt; - if (Yn >= He) { - rt = Yt - Yn % He; - const { inF: wn } = ut(), xn = Ee(); - if (xn <= wn) { - Me._ppReverse = !1, te(wn); - const Vn = (Gt = e.play) == null ? void 0 : Gt.call(e); - Vn && typeof Vn.catch == "function" && Vn.catch(() => { - }), It(), Re(); - return; + for (let zt = Qe; zt < tn; zt += Qe) + try { + j.appendChild(et(zt)); + } catch (ht) { + (gn = console.debug) == null || gn.call(console, ht); + } + try { + j.appendChild(et(tn)); + } catch (zt) { + (pt = console.debug) == null || pt.call(console, zt); } - const en = Math.max(1, Math.floor(Number(Me.step) || 1)); - te(xn - en), Re(); - } - Me._ppRafId = requestAnimationFrame(St); - } catch (Yn) { - (Qt = console.debug) == null || Qt.call(console, Yn), Me._ppReverse = !1, It(); + })(); + } catch (rn) { + (Wt = console.debug) == null || Wt.call(console, rn); } - }; - Me._ppRafId = requestAnimationFrame(St); - } catch (Ie) { - (ne = console.debug) == null || ne.call(console, Ie), Me._ppReverse = !1; + } catch (_t) { + (Vt = console.debug) == null || Vt.call(console, _t); + } + }, dt = ({ prefer: oe = null } = {}) => { + var se; + if (h) + try { + at(); + const { inF: fe, outF: Be } = tt(), gt = lt(); + oe === "in" ? Ce(fe) : oe === "out" ? gt > Be && Ce(Be) : gt < fe ? Ce(fe) : gt > Be && Ce(Be); + } catch (fe) { + (se = console.debug) == null || se.call(console, fe); + } + }, bt = () => { + var oe; + try { + we.inFrame = 0, at(), nt(), Mt(), dt({ prefer: "in" }); + } catch (se) { + (oe = console.debug) == null || oe.call(console, se); + } + }, Yt = () => { + var oe; + try { + const { maxF: se } = tt(); + we.outFrame = Math.max(0, Number(se) || 0), at(), nt(), Mt(), dt({ prefer: "out" }); + } catch (se) { + (oe = console.debug) == null || oe.call(console, se); } }, $t = () => { - var re, ne, Ie, Ne; + var oe; try { - const He = Xe(); - Me.inFrame = 0, Me.outFrame = He > 0 ? He : null, Me.step = 1, Me.loop = !!y, Me.pingpong = !1, Me._ppReverse = !1, mt(), Me.once = !1, Le(1); - try { - q.value = "1"; - } catch (rt) { - (re = console.debug) == null || re.call(console, rt); - } - try { - (ne = ce.matches) != null && ne.call(ce, ":focus") || (ce.value = "1"); - } catch (rt) { - (Ie = console.debug) == null || Ie.call(console, rt); - } - nt(), Ot(), Re(), Wt(), lt({ prefer: "in" }); - } catch (He) { - (Ne = console.debug) == null || Ne.call(console, He); + we._ppRafId != null && (cancelAnimationFrame(we._ppRafId), we._ppRafId = null); + } catch (se) { + (oe = console.debug) == null || oe.call(console, se); } - }, Tt = () => { - var re, ne, Ie; + }; + Te.push($t); + const nn = () => { + var oe, se; try { - const Ne = In(Number(e == null ? void 0 : e.volume) || 0); - try { - le && !((re = le.matches) != null && re.call(le, ":active")) && (le.value = String(Ne)); - } catch (He) { - (ne = console.debug) == null || ne.call(console, He); - } - dt(); - } catch (Ne) { - (Ie = console.debug) == null || Ie.call(console, Ne); + $t(), we._ppReverse = !0, (oe = e.pause) == null || oe.call(e), Oe(); + const fe = Qi(we.fps, 30), Be = Math.max(0.25, Number(we.playbackRate) || 1), gt = 1e3 / (fe * Be); + let Wt = performance.now(); + const Vt = (_t) => { + var Xt, tn; + try { + if (!we._ppReverse || !we.pingpong) { + we._ppReverse = !1, Oe(); + return; + } + const Ln = _t - Wt; + if (Ln >= gt) { + Wt = _t - Ln % gt; + const { inF: Mn } = tt(), Xn = lt(); + if (Xn <= Mn) { + we._ppReverse = !1, Ce(Mn); + const vn = (Xt = e.play) == null ? void 0 : Xt.call(e); + vn && typeof vn.catch == "function" && vn.catch(() => { + }), Oe(), nt(); + return; + } + const rn = Math.max(1, Math.floor(Number(we.step) || 1)); + Ce(Xn - rn), nt(); + } + we._ppRafId = requestAnimationFrame(Vt); + } catch (Ln) { + (tn = console.debug) == null || tn.call(console, Ln), we._ppReverse = !1, Oe(); + } + }; + we._ppRafId = requestAnimationFrame(Vt); + } catch (fe) { + (se = console.debug) == null || se.call(console, fe), we._ppReverse = !1; } - }, te = (re) => { - var ne; + }, ie = () => { + var oe, se, fe, Be; try { - const { maxF: Ie } = ut(), Ne = go(re, 0, Ie > 0 ? Ie : 1 / 0); - e.currentTime = Ke(Ne); - } catch (Ie) { - (ne = console.debug) == null || ne.call(console, Ie); - } - Re(); - }, ye = (re) => { - var ne, Ie, Ne; - Xt(); - try { - const He = Math.max(1, Math.floor(Number(Me.step) || 1)), { inF: rt, outF: St } = ut(); - let Gt = Ee() + re * He; - Me.loop ? (Gt < rt && (Gt = St), Gt > St && (Gt = rt)) : Gt = go(Gt, rt, St); + const gt = Ke(); + we.inFrame = 0, we.outFrame = gt > 0 ? gt : null, we.step = 1, we.loop = !!h, we.pingpong = !1, we._ppReverse = !1, $t(), we.once = !1, ke(1); try { - (ne = e.pause) == null || ne.call(e); - } catch (Qt) { - (Ie = console.debug) == null || Ie.call(console, Qt); + ee.value = "1"; + } catch (Wt) { + (oe = console.debug) == null || oe.call(console, Wt); } - te(Gt), me(); - } catch (He) { - (Ne = console.debug) == null || Ne.call(console, He); - } - }, We = () => { - var re; - if (y) try { - nt(); - const { inF: ne, outF: Ie } = ut(), Ne = Ee(); - (Ne < ne || Ne > Ie) && te(ne); - } catch (ne) { - (re = console.debug) == null || re.call(console, ne); + (se = ue.matches) != null && se.call(ue, ":focus") || (ue.value = "1"); + } catch (Wt) { + (fe = console.debug) == null || fe.call(console, Wt); } + at(), Ee(), nt(), Mt(), dt({ prefer: "in" }); + } catch (gt) { + (Be = console.debug) == null || Be.call(console, gt); + } }, pe = () => { - var re, ne, Ie; - Xt(); + var oe, se, fe; try { - if (Me._ppReverse) { - Me._ppReverse = !1, mt(), It(); + const Be = pn(Number(e == null ? void 0 : e.volume) || 0); + try { + ce && !((oe = ce.matches) != null && oe.call(ce, ":active")) && (ce.value = String(Be)); + } catch (gt) { + (se = console.debug) == null || se.call(console, gt); + } + Rt(); + } catch (Be) { + (fe = console.debug) == null || fe.call(console, Be); + } + }, Ce = (oe) => { + var se; + try { + const { maxF: fe } = tt(), Be = go(oe, 0, fe > 0 ? fe : 1 / 0); + e.currentTime = wt(Be); + } catch (fe) { + (se = console.debug) == null || se.call(console, fe); + } + nt(); + }, ye = (oe) => { + var se, fe, Be; + me(); + try { + const gt = Math.max(1, Math.floor(Number(we.step) || 1)), { inF: Wt, outF: Vt } = tt(); + let Xt = lt() + oe * gt; + we.loop ? (Xt < Wt && (Xt = Vt), Xt > Vt && (Xt = Wt)) : Xt = go(Xt, Wt, Vt); + try { + (se = e.pause) == null || se.call(e); + } catch (tn) { + (fe = console.debug) == null || fe.call(console, tn); + } + Ce(Xt), Ye(); + } catch (gt) { + (Be = console.debug) == null || Be.call(console, gt); + } + }, De = () => { + var oe; + if (h) + try { + at(); + const { inF: se, outF: fe } = tt(), Be = lt(); + (Be < se || Be > fe) && Ce(se); + } catch (se) { + (oe = console.debug) == null || oe.call(console, se); + } + }, ut = () => { + var oe, se, fe; + me(); + try { + if (we._ppReverse) { + we._ppReverse = !1, $t(), Oe(); return; } if (e.paused) { - We(); - const Ne = (re = e.play) == null ? void 0 : re.call(e); - Ne && typeof Ne.catch == "function" && Ne.catch(() => { + De(); + const Be = (oe = e.play) == null ? void 0 : oe.call(e); + Be && typeof Be.catch == "function" && Be.catch(() => { }); } else - (ne = e.pause) == null || ne.call(e); - } catch (Ne) { - (Ie = console.debug) == null || Ie.call(console, Ne); + (se = e.pause) == null || se.call(e); + } catch (Be) { + (fe = console.debug) == null || fe.call(console, Be); } - It(); + Oe(); }; - if (Oe.push( - Qe(e, "click", (re) => { - var ne; + if (Te.push( + $e(e, "click", (oe) => { + var se; try { - if ((re == null ? void 0 : re.target) !== e) return; - } catch (Ie) { - (ne = console.debug) == null || ne.call(console, Ie); + if ((oe == null ? void 0 : oe.target) !== e) return; + } catch (fe) { + (se = console.debug) == null || se.call(console, fe); } - pe(); + ut(); }) - ), Oe.push( - Qe(B, "click", (re) => { - Ue(re), pe(); + ), Te.push( + $e(J, "click", (oe) => { + Re(oe), ut(); }) - ), Oe.push( - Qe(J, "click", (re) => { - Ue(re), ye(-1); + ), Te.push( + $e(P, "click", (oe) => { + Re(oe), ye(-1); }) - ), Oe.push( - Qe(P, "click", (re) => { - Ue(re), ye(1); + ), Te.push( + $e(E, "click", (oe) => { + Re(oe), ye(1); }) - ), Oe.push( - Qe(H, "click", (re) => { - Ue(re); - const { inF: ne } = ut(); - te(ne), me(); + ), Te.push( + $e($, "click", (oe) => { + Re(oe); + const { inF: se } = tt(); + Ce(se), Ye(); }) - ), Oe.push( - Qe($, "click", (re) => { - Ue(re); - const { outF: ne } = ut(); - te(ne), me(); + ), Te.push( + $e(H, "click", (oe) => { + Re(oe); + const { outF: se } = tt(); + Ce(se), Ye(); }) - ), Oe.push( - Qe(L, "pointerdown", () => { - Me._seeking = !0; + ), Te.push( + $e(C, "pointerdown", () => { + we._seeking = !0; }) - ), Oe.push( - Qe(L, "pointerup", () => { - Me._seeking = !1; + ), Te.push( + $e(C, "pointerup", () => { + we._seeking = !1; }) - ), Oe.push( - Qe(L, "input", (re) => { - var ne; - Ue(re), Xt(); + ), Te.push( + $e(C, "input", (oe) => { + var se; + Re(oe), me(); try { - const Ie = Number(e == null ? void 0 : e.duration); - if (!Number.isFinite(Ie) || Ie <= 0) return; - const Ne = Number(L.value), He = In((Number.isFinite(Ne) ? Ne : 0) / 1e3); - e.currentTime = He * Ie; - } catch (Ie) { - (ne = console.debug) == null || ne.call(console, Ie); + const fe = Number(e == null ? void 0 : e.duration); + if (!Number.isFinite(fe) || fe <= 0) return; + const Be = Number(C.value), gt = pn((Number.isFinite(Be) ? Be : 0) / 1e3); + e.currentTime = gt * fe; + } catch (fe) { + (se = console.debug) == null || se.call(console, fe); } - Re(); + nt(); }) - ), y) { - Oe.push( - Qe(E, "click", (re) => { - Ue(re), Me.inFrame = Ee(), nt(), Re(), Wt(), lt({ prefer: "in" }); + ), h) { + Te.push( + $e(ne, "click", (oe) => { + Re(oe), we.inFrame = lt(), at(), nt(), Mt(), dt({ prefer: "in" }); }) - ), Oe.push( - Qe(oe, "click", (re) => { - Ue(re), Me.outFrame = Ee(), nt(), Re(), Wt(), lt({ prefer: "out" }); + ), Te.push( + $e(M, "click", (oe) => { + Re(oe), we.outFrame = lt(), at(), nt(), Mt(), dt({ prefer: "out" }); }) - ), Oe.push( - Qe(O, "change", (re) => { - var ne; - Ue(re); + ), Te.push( + $e(D, "change", (oe) => { + var se; + Re(oe); try { - const Ie = Number(O.value); - Me.inFrame = Number.isFinite(Ie) ? Math.max(0, Math.floor(Ie)) : null, nt(); - } catch (Ie) { - (ne = console.debug) == null || ne.call(console, Ie); + const fe = Number(D.value); + we.inFrame = Number.isFinite(fe) ? Math.max(0, Math.floor(fe)) : null, at(); + } catch (fe) { + (se = console.debug) == null || se.call(console, fe); } - Re(), Wt(), lt({ prefer: "in" }); + nt(), Mt(), dt({ prefer: "in" }); }) - ), Oe.push( - Qe(D, "change", (re) => { - var ne; - Ue(re); + ), Te.push( + $e(q, "change", (oe) => { + var se; + Re(oe); try { - const Ie = Number(D.value); - Me.outFrame = Number.isFinite(Ie) ? Math.max(0, Math.floor(Ie)) : null, nt(); - } catch (Ie) { - (ne = console.debug) == null || ne.call(console, Ie); + const fe = Number(q.value); + we.outFrame = Number.isFinite(fe) ? Math.max(0, Math.floor(fe)) : null, at(); + } catch (fe) { + (se = console.debug) == null || se.call(console, fe); } - Re(), Wt(), lt({ prefer: "out" }); + nt(), Mt(), dt({ prefer: "out" }); }) - ), Oe.push( - Qe(q, "change", (re) => { - var ne; - Ue(re); + ), Te.push( + $e(ee, "change", (oe) => { + var se; + Re(oe); try { - Me.step = Math.max(1, Math.floor(Number(q.value) || 1)), q.value = String(Me.step); - } catch (Ie) { - (ne = console.debug) == null || ne.call(console, Ie); + we.step = Math.max(1, Math.floor(Number(ee.value) || 1)), ee.value = String(we.step); + } catch (fe) { + (se = console.debug) == null || se.call(console, fe); } }) - ), Oe.push( - Qe(ee, "change", (re) => { - var ne; - Ue(re); + ), Te.push( + $e(ae, "change", (oe) => { + var se; + Re(oe); try { - Me.fps = Qi(ee.value, 30), ee.value = String(Me.fps), nt(); - } catch (Ie) { - (ne = console.debug) == null || ne.call(console, Ie); + we.fps = Qi(ae.value, 30), ae.value = String(we.fps), at(); + } catch (fe) { + (se = console.debug) == null || se.call(console, fe); } - Re(), Wt(); + nt(), Mt(); }) - ), Oe.push( - Qe(j, "click", (re) => { - Ue(re), !Me.loop && !Me.pingpong ? (Me.loop = !0, Me.pingpong = !1) : Me.loop && !Me.pingpong ? (Me.loop = !1, Me.pingpong = !0) : (Me.loop = !1, Me.pingpong = !1), (Me.loop || Me.pingpong) && (Me.once = !1), Me.pingpong || (Me._ppReverse = !1, mt()), Ot(); + ), Te.push( + $e(F, "click", (oe) => { + Re(oe), !we.loop && !we.pingpong ? (we.loop = !0, we.pingpong = !1) : we.loop && !we.pingpong ? (we.loop = !1, we.pingpong = !0) : (we.loop = !1, we.pingpong = !1), (we.loop || we.pingpong) && (we.once = !1), we.pingpong || (we._ppReverse = !1, $t()), Ee(); }) - ), Oe.push( - Qe(se, "click", (re) => { - Ue(re), qt(); + ), Te.push( + $e(ge, "click", (oe) => { + Re(oe), bt(); }) - ), Oe.push( - Qe(je, "click", (re) => { - Ue(re), yt(); + ), Te.push( + $e(xe, "click", (oe) => { + Re(oe), Yt(); }) - ), Oe.push( - Qe(k, "click", (re) => { - Ue(re), $t(); + ), Te.push( + $e(U, "click", (oe) => { + Re(oe), ie(); }) ); try { - k.title = m("video.resetPlayerControls", "Reset player controls"), k.style.cursor = "pointer", k.style.userSelect = "none"; - } catch (re) { - (r = console.debug) == null || r.call(console, re); + U.title = m("video.resetPlayerControls", "Reset player controls"), U.style.cursor = "pointer", U.style.userSelect = "none"; + } catch (oe) { + (l = console.debug) == null || l.call(console, oe); } } - Oe.push( - Qe(Q, "click", (re) => { - var ne; - Ue(re); + Te.push( + $e(_, "click", (oe) => { + var se; + Re(oe); try { - e.muted = !e.muted, _ && (_.style.display = e.muted ? "none" : "inline-flex"); - } catch (Ie) { - (ne = console.debug) == null || ne.call(console, Ie); + e.muted = !e.muted, le && (le.style.display = e.muted ? "none" : "inline-flex"); + } catch (fe) { + (se = console.debug) == null || se.call(console, fe); } - Tt(); + pe(); }) - ), Oe.push( - Qe(Q, "contextmenu", (re) => { - var ne; - Te(re); + ), Te.push( + $e(_, "contextmenu", (oe) => { + var se; + rt(oe); try { - if (!_) return; - const Ie = _.style.display !== "none"; - _.style.display = Ie ? "none" : "inline-flex"; - } catch (Ie) { - (ne = console.debug) == null || ne.call(console, Ie); + if (!le) return; + const fe = le.style.display !== "none"; + le.style.display = fe ? "none" : "inline-flex"; + } catch (fe) { + (se = console.debug) == null || se.call(console, fe); } - Tt(); + pe(); }) - ), Oe.push( - Qe( + ), Te.push( + $e( window, "pointerdown", - (re) => { - var ne, Ie, Ne; + (oe) => { + var se, fe, Be; try { - if (!_ || _.style.display === "none" || (ne = Q.contains) != null && ne.call(Q, re == null ? void 0 : re.target) || (Ie = _.contains) != null && Ie.call(_, re == null ? void 0 : re.target)) + if (!le || le.style.display === "none" || (se = _.contains) != null && se.call(_, oe == null ? void 0 : oe.target) || (fe = le.contains) != null && fe.call(le, oe == null ? void 0 : oe.target)) return; - _.style.display = "none"; - } catch (He) { - (Ne = console.debug) == null || Ne.call(console, He); + le.style.display = "none"; + } catch (gt) { + (Be = console.debug) == null || Be.call(console, gt); } }, { capture: !0 } ) - ), le && Oe.push( - Qe(le, "input", (re) => { - var ne; - Ue(re); + ), ce && Te.push( + $e(ce, "input", (oe) => { + var se; + Re(oe); try { - const Ie = In(Number(le.value) || 0); - e.volume = Ie, Ie > 1e-3 && (e.muted = !1); - } catch (Ie) { - (ne = console.debug) == null || ne.call(console, Ie); + const fe = pn(Number(ce.value) || 0); + e.volume = fe, fe > 1e-3 && (e.muted = !1); + } catch (fe) { + (se = console.debug) == null || se.call(console, fe); } - Tt(); + pe(); }) - ), Oe.push( - Qe(ce, "change", (re) => { - var ne; - Ue(re); + ), Te.push( + $e(ue, "change", (oe) => { + var se; + Re(oe); try { - Le(Number(ce.value) || 1); - } catch (Ie) { - (ne = console.debug) == null || ne.call(console, Ie); + ke(Number(ue.value) || 1); + } catch (fe) { + (se = console.debug) == null || se.call(console, fe); } }) - ), Oe.push( - Qe(e, "ratechange", () => { - var re; + ), Te.push( + $e(e, "ratechange", () => { + var oe; try { - Le(Number(e.playbackRate) || Me.playbackRate || 1); - } catch (ne) { - (re = console.debug) == null || re.call(console, ne); + ke(Number(e.playbackRate) || we.playbackRate || 1); + } catch (se) { + (oe = console.debug) == null || oe.call(console, se); } }) ); - const De = () => { - var re, ne, Ie, Ne, He, rt, St; - if (y) + const At = () => { + var oe, se, fe, Be, gt, Wt, Vt; + if (h) try { - if (Me._seeking || e != null && e.paused) return; - const { inF: Yt, outF: Gt, maxF: Qt } = ut(); - if (Qt <= 0 || Yt <= 0 && Gt >= Qt && !Me.loop && !Me.pingpong && !Me.once || Me._ppReverse) return; - const wn = Ee(), xn = Math.max(1, Math.floor(Number(Me.step) || 1)); - if (wn >= Gt - xn) - if (Me.pingpong) { - kt(); + if (we._seeking || e != null && e.paused) return; + const { inF: _t, outF: Xt, maxF: tn } = tt(); + if (tn <= 0 || _t <= 0 && Xt >= tn && !we.loop && !we.pingpong && !we.once || we._ppReverse) return; + const Mn = lt(), Xn = Math.max(1, Math.floor(Number(we.step) || 1)); + if (Mn >= Xt - Xn) + if (we.pingpong) { + nn(); return; - } else if (Me.loop) { - te(Yt); + } else if (we.loop) { + Ce(_t); try { - const en = (re = e.play) == null ? void 0 : re.call(e); - en && typeof en.catch == "function" && en.catch(() => { + const rn = (oe = e.play) == null ? void 0 : oe.call(e); + rn && typeof rn.catch == "function" && rn.catch(() => { }); - } catch (en) { - (ne = console.debug) == null || ne.call(console, en); + } catch (rn) { + (se = console.debug) == null || se.call(console, rn); } - } else if (Me.once) { + } else if (we.once) { try { - (Ie = e.pause) == null || Ie.call(e); - } catch (en) { - (Ne = console.debug) == null || Ne.call(console, en); + (fe = e.pause) == null || fe.call(e); + } catch (rn) { + (Be = console.debug) == null || Be.call(console, rn); } - te(Gt); + Ce(Xt); } else { try { - (He = e.pause) == null || He.call(e); - } catch (en) { - (rt = console.debug) == null || rt.call(console, en); + (gt = e.pause) == null || gt.call(e); + } catch (rn) { + (Wt = console.debug) == null || Wt.call(console, rn); } - te(Gt); + Ce(Xt); } - else wn < Yt && te(Yt); - } catch (Yt) { - (St = console.debug) == null || St.call(console, Yt); + else Mn < _t && Ce(_t); + } catch (_t) { + (Vt = console.debug) == null || Vt.call(console, _t); } - }, ot = { + }, Ht = { rafId: null, rvfcId: null - }, Zt = () => { - var re, ne; + }, Qt = () => { + var oe, se; try { - ot.rvfcId != null && typeof (e == null ? void 0 : e.cancelVideoFrameCallback) == "function" && e.cancelVideoFrameCallback(ot.rvfcId); - } catch (Ie) { - (re = console.debug) == null || re.call(console, Ie); + Ht.rvfcId != null && typeof (e == null ? void 0 : e.cancelVideoFrameCallback) == "function" && e.cancelVideoFrameCallback(Ht.rvfcId); + } catch (fe) { + (oe = console.debug) == null || oe.call(console, fe); } - ot.rvfcId = null; + Ht.rvfcId = null; try { - ot.rafId != null && typeof cancelAnimationFrame == "function" && cancelAnimationFrame(ot.rafId); - } catch (Ie) { - (ne = console.debug) == null || ne.call(console, Ie); + Ht.rafId != null && typeof cancelAnimationFrame == "function" && cancelAnimationFrame(Ht.rafId); + } catch (fe) { + (se = console.debug) == null || se.call(console, fe); } - ot.rafId = null; - }, tn = (re = 0, ne = null) => { - var Ne, He, rt, St; - ot.rafId = null, ot.rvfcId = null; + Ht.rafId = null; + }, xt = (oe = 0, se = null) => { + var Be, gt, Wt, Vt; + Ht.rafId = null, Ht.rvfcId = null; try { - bt(Re, ne == null ? void 0 : ne.mediaTime), bt(De); - } catch (Yt) { - (Ne = console.debug) == null || Ne.call(console, Yt); + It(nt, se == null ? void 0 : se.mediaTime), It(At); + } catch (_t) { + (Be = console.debug) == null || Be.call(console, _t); } - if (!(!(Me._ppReverse || !(e != null && e.paused)) || (He = pt.signal) != null && He.aborted)) { + if (!(!(we._ppReverse || !(e != null && e.paused)) || (gt = qt.signal) != null && gt.aborted)) { try { - if (typeof (e == null ? void 0 : e.requestVideoFrameCallback) == "function" && !Me._ppReverse) { - ot.rvfcId = e.requestVideoFrameCallback(tn); + if (typeof (e == null ? void 0 : e.requestVideoFrameCallback) == "function" && !we._ppReverse) { + Ht.rvfcId = e.requestVideoFrameCallback(xt); return; } - } catch (Yt) { - (rt = console.debug) == null || rt.call(console, Yt); + } catch (_t) { + (Wt = console.debug) == null || Wt.call(console, _t); } try { - typeof requestAnimationFrame == "function" && (ot.rafId = requestAnimationFrame((Yt) => { - tn(Yt, { mediaTime: Number(e == null ? void 0 : e.currentTime) || 0 }); + typeof requestAnimationFrame == "function" && (Ht.rafId = requestAnimationFrame((_t) => { + xt(_t, { mediaTime: Number(e == null ? void 0 : e.currentTime) || 0 }); })); - } catch (Yt) { - (St = console.debug) == null || St.call(console, Yt); + } catch (_t) { + (Vt = console.debug) == null || Vt.call(console, _t); } } - }, Pt = () => { - var ne; - Zt(), !(!(Me._ppReverse || !(e != null && e.paused)) || (ne = pt.signal) != null && ne.aborted) && tn(0, { mediaTime: Number(e == null ? void 0 : e.currentTime) || 0 }); + }, Gt = () => { + var se; + Qt(), !(!(we._ppReverse || !(e != null && e.paused)) || (se = qt.signal) != null && se.aborted) && xt(0, { mediaTime: Number(e == null ? void 0 : e.currentTime) || 0 }); }; - Oe.push(Zt), Oe.push( - Qe(e, "play", () => { - bt(It), Pt(); + Te.push(Qt), Te.push( + $e(e, "play", () => { + It(Oe), Gt(); }) ); - for (const re of ["pause", "ended"]) - Oe.push( - Qe(e, re, () => { - Zt(), bt(It), bt(Re); + for (const oe of ["pause", "ended"]) + Te.push( + $e(e, oe, () => { + Qt(), It(Oe), It(nt); }) ); - for (const re of ["timeupdate", "loadedmetadata", "durationchange", "seeked"]) - Oe.push(Qe(e, re, () => bt(Re))); - Oe.push(Qe(e, "timeupdate", De)), Oe.push( - Qe( + for (const oe of ["timeupdate", "loadedmetadata", "durationchange", "seeked"]) + Te.push($e(e, oe, () => It(nt))); + Te.push($e(e, "timeupdate", At)), Te.push( + $e( e, "ended", () => { - var re, ne, Ie; - if (y) + var oe, se, fe; + if (h) try { - const { inF: Ne, outF: He, maxF: rt } = ut(), St = Ne <= 0 && He >= rt; - if (Me.pingpong && !Me._ppReverse) { - kt(); + const { inF: Be, outF: gt, maxF: Wt } = tt(), Vt = Be <= 0 && gt >= Wt; + if (we.pingpong && !we._ppReverse) { + nn(); return; } - if (!Me.loop && !St) return; - te(Ne); + if (!we.loop && !Vt) return; + Ce(Be); try { - const Yt = (re = e.play) == null ? void 0 : re.call(e); - Yt && typeof Yt.catch == "function" && Yt.catch(() => { + const _t = (oe = e.play) == null ? void 0 : oe.call(e); + _t && typeof _t.catch == "function" && _t.catch(() => { }); - } catch (Yt) { - (ne = console.debug) == null || ne.call(console, Yt); + } catch (_t) { + (se = console.debug) == null || se.call(console, _t); } - } catch (Ne) { - (Ie = console.debug) == null || Ie.call(console, Ne); + } catch (Be) { + (fe = console.debug) == null || fe.call(console, Be); } }, { passive: !0 } ) - ), y && Oe.push( - Qe(e, "mjr:frameStep", () => { - bt(me); + ), h && Te.push( + $e(e, "mjr:frameStep", () => { + It(Ye); }) - ), y && (Oe.push( - Qe(e, "loadedmetadata", () => { - var re; + ), h && (Te.push( + $e(e, "loadedmetadata", () => { + var oe; try { - const ne = Xe(); - ne > 0 && Me.inFrame == null && Me.outFrame == null && (Me.inFrame = 0, Me.outFrame = ne, nt()); - } catch (ne) { - (re = console.debug) == null || re.call(console, ne); + const se = Ke(); + se > 0 && we.inFrame == null && we.outFrame == null && (we.inFrame = 0, we.outFrame = se, at()); + } catch (se) { + (oe = console.debug) == null || oe.call(console, se); } - Wt(); + Mt(); }) - ), Oe.push( - Qe(e, "durationchange", () => bt(Wt)) + ), Te.push( + $e(e, "durationchange", () => It(Mt)) )); - for (const re of ["volumechange"]) - Oe.push(Qe(e, re, () => bt(Tt))); + for (const oe of ["volumechange"]) + Te.push($e(e, oe, () => It(pe))); try { - Me.fps = Qi(ee.value, 30), Me.step = Math.max(1, Math.floor(Number(q.value) || 1)), nt(), Ot(), Le(Me.playbackRate); - } catch (re) { - (l = console.debug) == null || l.call(console, re); + we.fps = Qi(ae.value, 30), we.step = Math.max(1, Math.floor(Number(ee.value) || 1)), at(), Ee(), ke(we.playbackRate); + } catch (oe) { + (a = console.debug) == null || a.call(console, oe); } - bt(It), bt(Re), bt(Wt), bt(Tt); + It(Oe), It(nt), It(Mt), It(pe); try { - (!(e != null && e.paused) || Me._ppReverse) && Pt(); - } catch (re) { - (a = console.debug) == null || a.call(console, re); + (!(e != null && e.paused) || we._ppReverse) && Gt(); + } catch (oe) { + (c = console.debug) == null || c.call(console, oe); } - const vt = (re = {}) => { - var Ne, He, rt, St, Yt; - let ne = 0, Ie = !1; + const je = (oe = {}) => { + var Be, gt, Wt, Vt, _t; + let se = 0, fe = !1; try { - ne = Math.max(0, Xe()), Ie = ne > 0 && Me.outFrame != null && Me.outFrame >= ne - 1; - } catch (Gt) { - (Ne = console.debug) == null || Ne.call(console, Gt); + se = Math.max(0, Ke()), fe = se > 0 && we.outFrame != null && we.outFrame >= se - 1; + } catch (Xt) { + (Be = console.debug) == null || Be.call(console, Xt); } try { - const Gt = Number(re == null ? void 0 : re.fps); - if (Number.isFinite(Gt) && Gt > 0) { - Me.fps = Qi(Gt, Me.fps || 30); + const Xt = Number(oe == null ? void 0 : oe.fps); + if (Number.isFinite(Xt) && Xt > 0) { + we.fps = Qi(Xt, we.fps || 30); try { - (He = ee == null ? void 0 : ee.matches) != null && He.call(ee, ":focus") || (ee.value = String(Me.fps)); - } catch (Qt) { - (rt = console.debug) == null || rt.call(console, Qt); + (gt = ae == null ? void 0 : ae.matches) != null && gt.call(ae, ":focus") || (ae.value = String(we.fps)); + } catch (tn) { + (Wt = console.debug) == null || Wt.call(console, tn); } } - } catch (Gt) { - (St = console.debug) == null || St.call(console, Gt); + } catch (Xt) { + (Vt = console.debug) == null || Vt.call(console, Xt); } try { - const Gt = Number(re == null ? void 0 : re.frameCount); - Me.frameCount = Number.isFinite(Gt) && Gt > 0 ? Math.floor(Gt) : null; + const Xt = Number(oe == null ? void 0 : oe.frameCount); + we.frameCount = Number.isFinite(Xt) && Xt > 0 ? Math.floor(Xt) : null; } catch { - Me.frameCount = null; + we.frameCount = null; } try { - const Gt = Math.max(0, Xe()); - Ie && Gt > ne + 0.5 && (Me.outFrame = null), nt(), Ot(), Re(), Wt(); - } catch (Gt) { - (Yt = console.debug) == null || Yt.call(console, Gt); + const Xt = Math.max(0, Ke()); + fe && Xt > se + 0.5 && (we.outFrame = null), at(), Ee(), nt(), Mt(); + } catch (Xt) { + (_t = console.debug) == null || _t.call(console, Xt); } }; try { - if (y) { - const re = Number(t == null ? void 0 : t.initialFps), ne = Number(t == null ? void 0 : t.initialFrameCount); - (Number.isFinite(re) || Number.isFinite(ne)) && vt({ fps: re, frameCount: ne }); + if (h) { + const oe = Number(t == null ? void 0 : t.initialFps), se = Number(t == null ? void 0 : t.initialFrameCount); + (Number.isFinite(oe) || Number.isFinite(se)) && je({ fps: oe, frameCount: se }); } - } catch (re) { - (c = console.debug) == null || c.call(console, re); + } catch (oe) { + (s = console.debug) == null || s.call(console, oe); } - if (y) { - const re = { active: !1, which: null, pointerId: null, ac: null, captureEl: null }, ne = (rt) => { + if (h) { + const oe = { active: !1, which: null, pointerId: null, ac: null, captureEl: null }, se = (Wt) => { try { - const St = b.getBoundingClientRect(), Yt = go((Number(rt) || 0) - St.left, 0, St.width || 1), Gt = St.width > 0 ? Yt / St.width : 0, { maxF: Qt } = ut(); - return go(Math.round(Gt * Qt), 0, Qt); + const Vt = L.getBoundingClientRect(), _t = go((Number(Wt) || 0) - Vt.left, 0, Vt.width || 1), Xt = Vt.width > 0 ? _t / Vt.width : 0, { maxF: tn } = tt(); + return go(Math.round(Xt * tn), 0, tn); } catch { return 0; } - }, Ie = (rt, St) => { - var Gt, Qt, Yn, wn, xn, en, Vn, pn, Nn; - Te(rt); + }, fe = (Wt, Vt) => { + var Xt, tn, Ln, Mn, Xn, rn, vn, re, Ie; + rt(Wt); try { - (Qt = (Gt = re.ac) == null ? void 0 : Gt.abort) == null || Qt.call(Gt); - } catch (ae) { - (Yn = console.debug) == null || Yn.call(console, ae); + (tn = (Xt = oe.ac) == null ? void 0 : Xt.abort) == null || tn.call(Xt); + } catch (Ge) { + (Ln = console.debug) == null || Ln.call(console, Ge); } - re.ac = null, re.active = !0, re.which = St, re.pointerId = rt.pointerId; + oe.ac = null, oe.active = !0, oe.which = Vt, oe.pointerId = Wt.pointerId; try { - re.captureEl = rt.currentTarget || null; + oe.captureEl = Wt.currentTarget || null; } catch { - re.captureEl = null; + oe.captureEl = null; } try { - (xn = (wn = re.captureEl) == null ? void 0 : wn.setPointerCapture) == null || xn.call(wn, rt.pointerId); - } catch (ae) { - (en = console.debug) == null || en.call(console, ae); + (Xn = (Mn = oe.captureEl) == null ? void 0 : Mn.setPointerCapture) == null || Xn.call(Mn, Wt.pointerId); + } catch (Ge) { + (rn = console.debug) == null || rn.call(console, Ge); } try { - (Vn = b.setPointerCapture) == null || Vn.call(b, rt.pointerId); - } catch (ae) { - (pn = console.debug) == null || pn.call(console, ae); + (vn = L.setPointerCapture) == null || vn.call(L, Wt.pointerId); + } catch (Ge) { + (re = console.debug) == null || re.call(console, Ge); } try { - const ae = new AbortController(); - re.ac = ae, window.addEventListener("pointermove", Ne, { + const Ge = new AbortController(); + oe.ac = Ge, window.addEventListener("pointermove", Be, { passive: !1, capture: !0, - signal: ae.signal - }), window.addEventListener("pointerup", He, { + signal: Ge.signal + }), window.addEventListener("pointerup", gt, { passive: !1, capture: !0, - signal: ae.signal - }), window.addEventListener("pointercancel", He, { + signal: Ge.signal + }), window.addEventListener("pointercancel", gt, { passive: !1, capture: !0, - signal: ae.signal + signal: Ge.signal }); - } catch (ae) { - (Nn = console.debug) == null || Nn.call(console, ae); + } catch (Ge) { + (Ie = console.debug) == null || Ie.call(console, Ge); } - const Yt = ne(rt.clientX); - St === "in" ? Me.inFrame = Yt : Me.outFrame = Yt, nt(), Re(), Wt(), lt({ prefer: St }); - }, Ne = (rt) => { - if (!re.active) return; - Te(rt); - const St = ne(rt.clientX); - re.which === "in" ? Me.inFrame = St : Me.outFrame = St, nt(), Re(), Wt(); - }, He = (rt) => { - var St, Yt, Gt, Qt, Yn, wn, xn, en, Vn; - if (re.active) { - Te(rt), re.active = !1; + const _t = se(Wt.clientX); + Vt === "in" ? we.inFrame = _t : we.outFrame = _t, at(), nt(), Mt(), dt({ prefer: Vt }); + }, Be = (Wt) => { + if (!oe.active) return; + rt(Wt); + const Vt = se(Wt.clientX); + oe.which === "in" ? we.inFrame = Vt : we.outFrame = Vt, at(), nt(), Mt(); + }, gt = (Wt) => { + var Vt, _t, Xt, tn, Ln, Mn, Xn, rn, vn; + if (oe.active) { + rt(Wt), oe.active = !1; try { - (St = b.releasePointerCapture) == null || St.call(b, re.pointerId); - } catch (pn) { - (Yt = console.debug) == null || Yt.call(console, pn); + (Vt = L.releasePointerCapture) == null || Vt.call(L, oe.pointerId); + } catch (re) { + (_t = console.debug) == null || _t.call(console, re); } try { - (Qt = (Gt = re.captureEl) == null ? void 0 : Gt.releasePointerCapture) == null || Qt.call(Gt, re.pointerId); - } catch (pn) { - (Yn = console.debug) == null || Yn.call(console, pn); + (tn = (Xt = oe.captureEl) == null ? void 0 : Xt.releasePointerCapture) == null || tn.call(Xt, oe.pointerId); + } catch (re) { + (Ln = console.debug) == null || Ln.call(console, re); } - re.captureEl = null, re.pointerId = null; + oe.captureEl = null, oe.pointerId = null; try { - lt({ prefer: re.which }); - } catch (pn) { - (wn = console.debug) == null || wn.call(console, pn); + dt({ prefer: oe.which }); + } catch (re) { + (Mn = console.debug) == null || Mn.call(console, re); } try { - (en = (xn = re.ac) == null ? void 0 : xn.abort) == null || en.call(xn); - } catch (pn) { - (Vn = console.debug) == null || Vn.call(console, pn); + (rn = (Xn = oe.ac) == null ? void 0 : Xn.abort) == null || rn.call(Xn); + } catch (re) { + (vn = console.debug) == null || vn.call(console, re); } - re.ac = null; + oe.ac = null; } }; - Oe.push( - Qe(F, "pointerdown", (rt) => Ie(rt, "in"), { + Te.push( + $e(k, "pointerdown", (Wt) => fe(Wt, "in"), { passive: !1 }) - ), Oe.push( - Qe(N, "pointerdown", (rt) => Ie(rt, "out"), { + ), Te.push( + $e(Y, "pointerdown", (Wt) => fe(Wt, "out"), { passive: !1 }) - ), Oe.push( - Qe(v, "pointerdown", (rt) => Ie(rt, "in"), { + ), Te.push( + $e(w, "pointerdown", (Wt) => fe(Wt, "in"), { passive: !1 }) - ), Oe.push( - Qe(w, "pointerdown", (rt) => Ie(rt, "out"), { + ), Te.push( + $e(R, "pointerdown", (Wt) => fe(Wt, "out"), { passive: !1 }) - ), Oe.push(Qe(b, "pointermove", Ne, { passive: !1 })), Oe.push(Qe(b, "pointerup", He, { passive: !1 })), Oe.push(Qe(b, "pointercancel", He, { passive: !1 })); + ), Te.push($e(L, "pointermove", Be, { passive: !1 })), Te.push($e(L, "pointerup", gt, { passive: !1 })), Te.push($e(L, "pointercancel", gt, { passive: !1 })); } - return bt(() => C.appendChild(g)), { - controlsEl: g, - setMediaInfo: vt, - setPlaybackRate: (re) => { + return It(() => g.appendChild(y)), { + controlsEl: y, + setMediaInfo: je, + setPlaybackRate: (oe) => { try { - return Le(re); + return ke(oe); } catch { - return Me.playbackRate || 1; + return we.playbackRate || 1; } }, getPlaybackRate: () => { try { - return Number(Me.playbackRate) || 1; + return Number(we.playbackRate) || 1; } catch { return 1; } }, - adjustPlaybackRate: (re) => { + adjustPlaybackRate: (oe) => { try { - const ne = Number(re); - return Number.isFinite(ne) ? Le((Number(Me.playbackRate) || 1) + ne) : Me.playbackRate || 1; + const se = Number(oe); + return Number.isFinite(se) ? ke((Number(we.playbackRate) || 1) + se) : we.playbackRate || 1; } catch { - return Me.playbackRate || 1; + return we.playbackRate || 1; } }, togglePlay: () => { try { - return pe(), !0; + return ut(), !0; } catch { return !1; } }, - stepFrames: (re) => { + stepFrames: (oe) => { try { - return ye(re), !0; + return ye(oe), !0; } catch { return !1; } }, setInPoint: () => { - if (!y) return !1; + if (!h) return !1; try { - return Me.inFrame = Ee(), nt(), Re(), Wt(), lt({ prefer: "in" }), !0; + return we.inFrame = lt(), at(), nt(), Mt(), dt({ prefer: "in" }), !0; } catch { return !1; } }, setOutPoint: () => { - if (!y) return !1; + if (!h) return !1; try { - return Me.outFrame = Ee(), nt(), Re(), Wt(), lt({ prefer: "out" }), !0; + return we.outFrame = lt(), at(), nt(), Mt(), dt({ prefer: "out" }), !0; } catch { return !1; } }, goToIn: () => { - if (!y) return !1; + if (!h) return !1; try { - const { inF: re } = ut(); - return te(re), me(), !0; + const { inF: oe } = tt(); + return Ce(oe), Ye(), !0; } catch { return !1; } }, goToOut: () => { - if (!y) return !1; + if (!h) return !1; try { - const { outF: re } = ut(); - return te(re), me(), !0; + const { outF: oe } = tt(); + return Ce(oe), Ye(), !0; } catch { return !1; } }, destroy: () => { - for (const re of Oe) bt(re); - bt(() => g.remove()); + for (const oe of Te) It(oe); + It(() => y.remove()); } }; } catch { @@ -11978,7 +12005,7 @@ function nA(e) { } } function di(e) { - var t, n, i, o, r, l, a, c, s, d, u, I, y, S, Z, C, g, A, p, b, L, h, G, W; + var t, n, i, o, r, l, a, c, s, d, u, I, A, h, S, W, g, y, p, b, L, C, G, Z; if (e) { try { (n = (t = e._mjrSyncAbort) == null ? void 0 : t.abort) == null || n.call(t); @@ -12015,21 +12042,21 @@ function di(e) { (I = console.debug) == null || I.call(console, x); } try { - (y = X.removeAttribute) == null || y.call(X, "src"); + (A = X.removeAttribute) == null || A.call(X, "src"); } catch (x) { - (S = console.debug) == null || S.call(console, x); + (h = console.debug) == null || h.call(console, x); } try { - (Z = X.load) == null || Z.call(X); + (S = X.load) == null || S.call(X); } catch (x) { - (C = console.debug) == null || C.call(console, x); + (W = console.debug) == null || W.call(console, x); } } } catch (f) { (g = console.debug) == null || g.call(console, f); } try { - const f = (A = e.querySelectorAll) == null ? void 0 : A.call(e, ".mjr-viewer-media, .mjr-viewer-audio-viz"); + const f = (y = e.querySelectorAll) == null ? void 0 : y.call(e, ".mjr-viewer-media, .mjr-viewer-audio-viz"); if (f && f.length) for (const X of f) { try { @@ -12040,7 +12067,7 @@ function di(e) { try { X._mjrProc = null; } catch (x) { - (h = console.debug) == null || h.call(console, x); + (C = console.debug) == null || C.call(console, x); } try { X.width = 0, X.height = 0; @@ -12049,7 +12076,7 @@ function di(e) { } } } catch (f) { - (W = console.debug) == null || W.call(console, f); + (Z = console.debug) == null || Z.call(console, f); } } } @@ -12063,8 +12090,8 @@ function iA(e) { } const n = { unsubs: t, - safeAddListener: Qe, - safeCall: bt, + safeAddListener: $e, + safeCall: It, destroyMediaProcessorsIn: di, _observer: null, disposeAll: () => { @@ -12075,7 +12102,7 @@ function iA(e) { (c = console.debug) == null || c.call(console, u); } try { - for (const u of t) bt(u); + for (const u of t) It(u); } catch (u) { (s = console.debug) == null || s.call(console, u); } @@ -12097,7 +12124,7 @@ function iA(e) { } catch (d) { (c = console.debug) == null || c.call(console, d); } - bt(() => { + It(() => { var d; return (d = n.disposeAll) == null ? void 0 : d.call(n); }, "lifecycle:autoDispose"); @@ -12145,7 +12172,7 @@ function fl(e, t) { n.disabled || (n.style.background = "transparent"); }, n; } -function Cc(e, t) { +function Zc(e, t) { var i; const n = document.createElement("button"); n.textContent = e, n.dataset.mode = t; @@ -12165,7 +12192,7 @@ function Cc(e, t) { transition: all 0.16s; `, n; } -function Sr(e, t) { +function Gr(e, t) { const n = String(e || "").trim(), i = String(t || "").trim(); if (!i) return n; if (!n) return i; @@ -12179,10 +12206,10 @@ function Sr(e, t) { } function eb(e, t, n, { setAriaLabel: i = !0, ariaLabel: o = null } = {}) { if (!e) return ""; - const r = Sr(t, n); + const r = Gr(t, n); if (e.title = r, i) { const l = o ?? t; - e.setAttribute("aria-label", Sr(l, n)); + e.setAttribute("aria-label", Gr(l, n)); } return r; } @@ -12196,7 +12223,7 @@ function oA({ onAudioVizModeChanged: l, getCanAB: a } = {}) { - var Te, Oe, pt, Me, Xt, Mt, me, Pe, Le, Ot, Xe, Ee, Ke, nt, ut, It, dt; + var Re, rt, Te, qt, kt, we, me, He, Ye, Pt, ke, Ee, Ke, lt, wt, at, tt; const c = { channel: "rgb", exposureEV: 0, @@ -12223,33 +12250,33 @@ function oA({ `; const d = document.createElement("div"); d.className = "mjr-viewer-tools-deck", d.style.cssText = "display:flex; flex-wrap:nowrap; gap:8px; align-items:center; min-width:0; overflow-x:auto; overflow-y:hidden;"; - const u = ({ key: Re, eyebrow: Wt, title: lt } = {}) => { - const qt = document.createElement("section"); - qt.className = "mjr-viewer-tools-panel", Re && (qt.dataset.panel = String(Re)), qt.style.cssText = "display:flex; flex-direction:column; gap:4px; min-width:0; padding:5px 6px; border-radius:10px; border:1px solid rgba(255,255,255,0.08); background:linear-gradient(180deg, rgba(255,255,255,0.045), rgba(255,255,255,0.02)); box-shadow:inset 0 1px 0 rgba(255,255,255,0.04); flex:0 0 auto;"; - const yt = document.createElement("div"); - yt.className = "mjr-viewer-tools-panel-head", yt.style.cssText = "display:none; align-items:flex-start; justify-content:space-between; gap:6px; min-width:0;"; - const mt = document.createElement("div"); - mt.className = "mjr-viewer-tools-panel-heading", mt.style.cssText = "display:flex; flex-direction:column; gap:1px; min-width:0;"; - const kt = document.createElement("span"); - kt.className = "mjr-viewer-tools-panel-eyebrow", kt.textContent = Wt || ""; + const u = ({ key: Oe, eyebrow: Rt, title: nt } = {}) => { + const Mt = document.createElement("section"); + Mt.className = "mjr-viewer-tools-panel", Oe && (Mt.dataset.panel = String(Oe)), Mt.style.cssText = "display:flex; flex-direction:column; gap:4px; min-width:0; padding:5px 6px; border-radius:10px; border:1px solid rgba(255,255,255,0.08); background:linear-gradient(180deg, rgba(255,255,255,0.045), rgba(255,255,255,0.02)); box-shadow:inset 0 1px 0 rgba(255,255,255,0.04); flex:0 0 auto;"; + const dt = document.createElement("div"); + dt.className = "mjr-viewer-tools-panel-head", dt.style.cssText = "display:none; align-items:flex-start; justify-content:space-between; gap:6px; min-width:0;"; + const bt = document.createElement("div"); + bt.className = "mjr-viewer-tools-panel-heading", bt.style.cssText = "display:flex; flex-direction:column; gap:1px; min-width:0;"; + const Yt = document.createElement("span"); + Yt.className = "mjr-viewer-tools-panel-eyebrow", Yt.textContent = Rt || ""; const $t = document.createElement("span"); - $t.className = "mjr-viewer-tools-panel-title", $t.textContent = lt || ""; - const Tt = document.createElement("div"); - return Tt.className = "mjr-viewer-tools-panel-body", Tt.style.cssText = "display:flex; align-items:center; flex-wrap:nowrap; gap:6px; min-width:0;", mt.appendChild(kt), mt.appendChild($t), yt.appendChild(mt), qt.appendChild(yt), qt.appendChild(Tt), { panel: qt, body: Tt, head: yt, heading: mt, eyebrowEl: kt, titleEl: $t }; - }, I = u({ key: "grade", eyebrow: "Image", title: "Adjustments" }), y = u({ key: "overlay", eyebrow: "Viewer", title: "Guides & Compare" }), S = u({ key: "inspect", eyebrow: "Inspect", title: "Probe" }), Z = u({ key: "actions", eyebrow: "Actions", title: "Reset & Export" }), C = u({ key: "info", eyebrow: "Infos", title: "Help" }), g = document.createElement("div"); + $t.className = "mjr-viewer-tools-panel-title", $t.textContent = nt || ""; + const nn = document.createElement("div"); + return nn.className = "mjr-viewer-tools-panel-body", nn.style.cssText = "display:flex; align-items:center; flex-wrap:nowrap; gap:6px; min-width:0;", bt.appendChild(Yt), bt.appendChild($t), dt.appendChild(bt), Mt.appendChild(dt), Mt.appendChild(nn), { panel: Mt, body: nn, head: dt, heading: bt, eyebrowEl: Yt, titleEl: $t }; + }, I = u({ key: "grade", eyebrow: "Image", title: "Adjustments" }), A = u({ key: "overlay", eyebrow: "Viewer", title: "Guides & Compare" }), h = u({ key: "inspect", eyebrow: "Inspect", title: "Probe" }), S = u({ key: "actions", eyebrow: "Actions", title: "Reset & Export" }), W = u({ key: "info", eyebrow: "Infos", title: "Help" }), g = document.createElement("div"); g.className = "mjr-viewer-tools-actions", g.style.cssText = "display:flex; align-items:center; justify-content:flex-start; gap:6px; flex-wrap:wrap; min-width:0;"; - const A = document.createElement("div"); - A.className = "mjr-viewer-tools-meta", A.style.cssText = "display:flex; align-items:center; justify-content:flex-start; gap:6px; flex-wrap:nowrap; min-width:0;"; - const p = ({ key: Re, label: Wt, accentRgb: lt } = {}) => { - const qt = document.createElement("div"); - if (qt.className = "mjr-viewer-tools-group", Re && (qt.dataset.group = String(Re)), lt && qt.style.setProperty("--mjr-group-accent", String(lt)), qt.style.cssText = "display:flex; align-items:center; gap:6px; padding:2px 6px; border-radius:8px; border:1px solid rgba(196,202,210,0.14); background:rgba(10,12,16,0.22);", Wt) { - const yt = document.createElement("span"); - yt.className = "mjr-viewer-tools-group-label", yt.textContent = Wt, yt.style.cssText = "font-size: 10px; color: rgba(255,255,255,0.7);", qt.appendChild(yt); + const y = document.createElement("div"); + y.className = "mjr-viewer-tools-meta", y.style.cssText = "display:flex; align-items:center; justify-content:flex-start; gap:6px; flex-wrap:nowrap; min-width:0;"; + const p = ({ key: Oe, label: Rt, accentRgb: nt } = {}) => { + const Mt = document.createElement("div"); + if (Mt.className = "mjr-viewer-tools-group", Oe && (Mt.dataset.group = String(Oe)), nt && Mt.style.setProperty("--mjr-group-accent", String(nt)), Mt.style.cssText = "display:flex; align-items:center; gap:6px; padding:2px 6px; border-radius:8px; border:1px solid rgba(196,202,210,0.14); background:rgba(10,12,16,0.22);", Rt) { + const dt = document.createElement("span"); + dt.className = "mjr-viewer-tools-group-label", dt.textContent = Rt, dt.style.cssText = "font-size: 10px; color: rgba(255,255,255,0.7);", Mt.appendChild(dt); } - return qt; - }, b = (Re, Wt) => { - const lt = document.createElement("select"); - lt.title = Re || "", lt.className = "mjr-viewer-tools-select", lt.style.cssText = ` + return Mt; + }, b = (Oe, Rt) => { + const nt = document.createElement("select"); + nt.title = Oe || "", nt.className = "mjr-viewer-tools-select", nt.style.cssText = ` height: 24px; padding: 0 6px; border-radius: 6px; @@ -12259,38 +12286,38 @@ function oA({ font-size: 11px; outline: none; `; - for (const qt of Wt || []) { - const yt = document.createElement("option"); - yt.value = String(qt.value), yt.textContent = String(qt.label), lt.appendChild(yt); + for (const Mt of Rt || []) { + const dt = document.createElement("option"); + dt.value = String(Mt.value), dt.textContent = String(Mt.label), nt.appendChild(dt); } - return lt; - }, L = (Re, { min: Wt, max: lt, step: qt, value: yt }) => { - const mt = document.createElement("div"); - mt.className = "mjr-viewer-tools-range", mt.style.cssText = "display:flex; align-items:center; gap:6px;"; - const kt = document.createElement("input"); - kt.type = "range", kt.className = "mjr-viewer-tools-range-input", kt.min = String(Wt), kt.max = String(lt), kt.step = String(qt), kt.value = String(yt), kt.title = Re || "", kt.style.cssText = ` + return nt; + }, L = (Oe, { min: Rt, max: nt, step: Mt, value: dt }) => { + const bt = document.createElement("div"); + bt.className = "mjr-viewer-tools-range", bt.style.cssText = "display:flex; align-items:center; gap:6px;"; + const Yt = document.createElement("input"); + Yt.type = "range", Yt.className = "mjr-viewer-tools-range-input", Yt.min = String(Rt), Yt.max = String(nt), Yt.step = String(Mt), Yt.value = String(dt), Yt.title = Oe || "", Yt.style.cssText = ` width: 92px; accent-color: rgba(255,255,255,0.85); `; const $t = document.createElement("span"); - return $t.style.cssText = "font-size: 11px; color: rgba(255,255,255,0.9); min-width: 38px; text-align: right;", $t.textContent = String(yt), mt.appendChild(kt), mt.appendChild($t), { wrap: mt, input: kt, out: $t }; - }, h = (Re, Wt, { iconClass: lt = null, accentRgb: qt = null } = {}) => { - var kt; - const yt = document.createElement("button"); - if (yt.type = "button", yt.className = "mjr-viewer-tool-btn", yt.setAttribute("aria-label", Wt || Re || "Toggle"), yt.setAttribute("aria-pressed", "false"), qt) + return $t.style.cssText = "font-size: 11px; color: rgba(255,255,255,0.9); min-width: 38px; text-align: right;", $t.textContent = String(dt), bt.appendChild(Yt), bt.appendChild($t), { wrap: bt, input: Yt, out: $t }; + }, C = (Oe, Rt, { iconClass: nt = null, accentRgb: Mt = null } = {}) => { + var Yt; + const dt = document.createElement("button"); + if (dt.type = "button", dt.className = "mjr-viewer-tool-btn", dt.setAttribute("aria-label", Rt || Oe || "Toggle"), dt.setAttribute("aria-pressed", "false"), Mt) try { - yt.dataset.accentRgb = String(qt); + dt.dataset.accentRgb = String(Mt); } catch ($t) { - (kt = console.debug) == null || kt.call(console, $t); + (Yt = console.debug) == null || Yt.call(console, $t); } - if (lt) { + if (nt) { const $t = document.createElement("span"); - $t.className = `pi ${lt}`.trim(), $t.setAttribute("aria-hidden", "true"), $t.style.fontSize = "14px", yt.appendChild($t); - const Tt = document.createElement("span"); - Tt.textContent = Re || "", Tt.style.cssText = "position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0;", yt.appendChild(Tt); + $t.className = `pi ${nt}`.trim(), $t.setAttribute("aria-hidden", "true"), $t.style.fontSize = "14px", dt.appendChild($t); + const nn = document.createElement("span"); + nn.textContent = Oe || "", nn.style.cssText = "position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0;", dt.appendChild(nn); } else - yt.textContent = Re; - yt.title = Wt || "", yt.style.cssText = ` + dt.textContent = Oe; + dt.title = Rt || "", dt.style.cssText = ` height: 24px; padding: 0 8px; border-radius: 6px; @@ -12305,20 +12332,20 @@ function oA({ justify-content: center; gap: 6px; position: relative; - `, yt.dataset.active = "0"; - const mt = ($t) => { - var ye, We; - const Tt = !!$t; - yt.dataset.active = Tt ? "1" : "0"; + `, dt.dataset.active = "0"; + const bt = ($t) => { + var pe, Ce; + const nn = !!$t; + dt.dataset.active = nn ? "1" : "0"; try { - yt.setAttribute("aria-pressed", Tt ? "true" : "false"); - } catch (pe) { - (ye = console.debug) == null || ye.call(console, pe); + dt.setAttribute("aria-pressed", nn ? "true" : "false"); + } catch (ye) { + (pe = console.debug) == null || pe.call(console, ye); } - const te = String(((We = yt.dataset) == null ? void 0 : We.accentRgb) || "").trim(); - Tt && te ? (yt.style.background = `rgba(${te}, 0.12)`, yt.style.borderColor = `rgba(${te}, 0.38)`, yt.style.boxShadow = `0 0 0 0.8px rgba(${te}, 0.12) inset`) : (yt.style.background = Tt ? "rgba(214,218,224,0.12)" : "rgba(210,214,220,0.06)", yt.style.borderColor = Tt ? "rgba(214,218,224,0.38)" : "rgba(196,202,210,0.24)", yt.style.boxShadow = ""); + const ie = String(((Ce = dt.dataset) == null ? void 0 : Ce.accentRgb) || "").trim(); + nn && ie ? (dt.style.background = `rgba(${ie}, 0.12)`, dt.style.borderColor = `rgba(${ie}, 0.38)`, dt.style.boxShadow = `0 0 0 0.8px rgba(${ie}, 0.12) inset`) : (dt.style.background = nn ? "rgba(214,218,224,0.12)" : "rgba(210,214,220,0.06)", dt.style.borderColor = nn ? "rgba(214,218,224,0.38)" : "rgba(196,202,210,0.24)", dt.style.boxShadow = ""); }; - return mt(!1), { b: yt, setActive: mt }; + return bt(!1), { b: dt, setActive: bt }; }, G = b("Channel View", [ { value: "rgb", label: "RGB" }, { value: "r", label: "R" }, @@ -12328,7 +12355,7 @@ function oA({ { value: "l", label: "Luma" } ]); G.title = m("tooltip.colorChannels", "View color channels or luminance"); - const W = L("Exposure (EV)", { min: -10, max: 10, step: 0.1, value: 0 }), f = L("Gamma", { min: 0.1, max: 3, step: 0.01, value: 1 }), X = Object.freeze({ + const Z = L("Exposure (EV)", { min: -10, max: 10, step: 0.1, value: 0 }), f = L("Gamma", { min: 0.1, max: 3, step: 0.01, value: 1 }), X = Object.freeze({ channel: "120, 180, 255", exposure: "255, 200, 70", gamma: "190, 150, 255", @@ -12344,108 +12371,108 @@ function oA({ borderColor: "rgba(255,255,255,0.14)", background: "rgba(255,255,255,0.08)", boxShadow: "" - }), T = (Re, { accentRgb: Wt, active: lt, title: qt } = {}) => { - var yt; + }), K = (Oe, { accentRgb: Rt, active: nt, title: Mt } = {}) => { + var dt; try { - if (!Re) return; - if (qt && (Re.title = String(qt)), !!!lt) { - Re.style.borderColor = x.borderColor, Re.style.background = x.background, Re.style.boxShadow = x.boxShadow; + if (!Oe) return; + if (Mt && (Oe.title = String(Mt)), !!!nt) { + Oe.style.borderColor = x.borderColor, Oe.style.background = x.background, Oe.style.boxShadow = x.boxShadow; return; } - const kt = String(Wt || "").trim(); - if (!kt) return; - Re.style.borderColor = `rgba(${kt},0.55)`, Re.style.background = `rgba(${kt},0.14)`, Re.style.boxShadow = `0 0 0 1px rgba(${kt},0.14) inset`; - } catch (mt) { - (yt = console.debug) == null || yt.call(console, mt); + const Yt = String(Rt || "").trim(); + if (!Yt) return; + Oe.style.borderColor = `rgba(${Yt},0.55)`, Oe.style.background = `rgba(${Yt},0.14)`, Oe.style.boxShadow = `0 0 0 1px rgba(${Yt},0.14) inset`; + } catch (bt) { + (dt = console.debug) == null || dt.call(console, bt); } - }, v = (Re) => { - var Wt; + }, j = (Oe) => { + var Rt; try { - const lt = String(Re || "rgb"), qt = "rgba(255,255,255,0.14)", yt = "rgba(255,255,255,0.08)"; - if (G.style.boxShadow = "", lt === "r") { + const nt = String(Oe || "rgb"), Mt = "rgba(255,255,255,0.14)", dt = "rgba(255,255,255,0.08)"; + if (G.style.boxShadow = "", nt === "r") { G.style.borderColor = "rgba(255,90,90,0.60)", G.style.background = "rgba(255,90,90,0.14)", G.style.boxShadow = "0 0 0 1px rgba(255,90,90,0.14) inset"; return; } - if (lt === "g") { + if (nt === "g") { G.style.borderColor = "rgba(90,255,140,0.55)", G.style.background = "rgba(90,255,140,0.12)", G.style.boxShadow = "0 0 0 1px rgba(90,255,140,0.12) inset"; return; } - if (lt === "b") { + if (nt === "b") { G.style.borderColor = "rgba(90,160,255,0.60)", G.style.background = "rgba(90,160,255,0.12)", G.style.boxShadow = "0 0 0 1px rgba(90,160,255,0.12) inset"; return; } - if (lt === "l") { + if (nt === "l") { G.style.borderColor = "rgba(255,210,90,0.60)", G.style.background = "rgba(255,210,90,0.12)", G.style.boxShadow = "0 0 0 1px rgba(255,210,90,0.12) inset"; return; } - if (lt === "a") { + if (nt === "a") { G.style.borderColor = "rgba(220,220,220,0.35)", G.style.background = "rgba(255,255,255,0.10)", G.style.boxShadow = "0 0 0 1px rgba(255,255,255,0.08) inset"; return; } - if (lt === "rgb") { + if (nt === "rgb") { G.style.borderColor = "rgba(255,255,255,0.22)", G.style.background = "linear-gradient(90deg, rgba(255,90,90,0.16), rgba(90,255,140,0.14), rgba(90,160,255,0.16))", G.style.boxShadow = "0 0 0 1px rgba(255,255,255,0.10) inset"; return; } - G.style.borderColor = qt, G.style.background = yt; - } catch (lt) { - (Wt = console.debug) == null || Wt.call(console, lt); + G.style.borderColor = Mt, G.style.background = dt; + } catch (nt) { + (Rt = console.debug) == null || Rt.call(console, nt); } - }, w = (Re, { accentRgb: Wt, active: lt } = {}) => { - var qt; + }, w = (Oe, { accentRgb: Rt, active: nt } = {}) => { + var Mt; try { - if (!Re) return; - if (!!!lt) { - Re.style.color = "rgba(255,255,255,0.9)"; + if (!Oe) return; + if (!!!nt) { + Oe.style.color = "rgba(255,255,255,0.9)"; return; } - const mt = String(Wt || "").trim(); - if (!mt) return; - Re.style.color = `rgb(${mt})`; - } catch (yt) { - (qt = console.debug) == null || qt.call(console, yt); + const bt = String(Rt || "").trim(); + if (!bt) return; + Oe.style.color = `rgb(${bt})`; + } catch (dt) { + (Mt = console.debug) == null || Mt.call(console, dt); } - }, R = (Re, { accentRgb: Wt, active: lt } = {}) => { - var qt; + }, R = (Oe, { accentRgb: Rt, active: nt } = {}) => { + var Mt; try { - if (!Re) return; - if (!!!lt) { - Re.style.background = "", Re.style.borderColor = "transparent", Re.style.boxShadow = ""; + if (!Oe) return; + if (!!!nt) { + Oe.style.background = "", Oe.style.borderColor = "transparent", Oe.style.boxShadow = ""; return; } - const mt = String(Wt || "").trim(); - if (!mt) return; - Re.style.background = `rgba(${mt},0.10)`, Re.style.borderColor = `rgba(${mt},0.38)`, Re.style.boxShadow = `0 0 0 1px rgba(${mt},0.12) inset`; - } catch (yt) { - (qt = console.debug) == null || qt.call(console, yt); + const bt = String(Rt || "").trim(); + if (!bt) return; + Oe.style.background = `rgba(${bt},0.10)`, Oe.style.borderColor = `rgba(${bt},0.38)`, Oe.style.boxShadow = `0 0 0 1px rgba(${bt},0.12) inset`; + } catch (dt) { + (Mt = console.debug) == null || Mt.call(console, dt); } - }, Y = h("Zebra", "Zebra Highlights (Z)", { + }, V = C("Zebra", "Zebra Highlights (Z)", { iconClass: "pi-bars", accentRgb: X.zebra - }), F = h("Scopes", "Scopes overlay", { + }), O = C("Scopes", "Scopes overlay", { iconClass: "pi-chart-bar", accentRgb: X.analysis - }), N = b("Scopes", [ + }), k = b("Scopes", [ { value: "off", label: "Off" }, { value: "hist", label: "Histogram" }, { value: "wave", label: "Waveform" }, { value: "both", label: "Both" } ]); - N.title = m("tooltip.scopesHistogram", "Show histogram/waveform scopes"); - const V = h("Grid", "Grid (G)", { + k.title = m("tooltip.scopesHistogram", "Show histogram/waveform scopes"); + const Y = C("Grid", "Grid (G)", { iconClass: "pi-th-large", accentRgb: X.overlay - }), k = b("Grid Overlay", [ + }), N = b("Grid Overlay", [ { value: 0, label: "Off" }, { value: 1, label: "Thirds" }, { value: 2, label: "Center" }, { value: 3, label: "Safe" }, { value: 4, label: "Golden" } ]); - k.title = Sr( + N.title = Gr( m("tooltip.gridOverlay", "Grid overlay (rule of thirds, center)"), "G" ); - const K = h("Mask", "Format mask (dim outside)", { + const U = C("Mask", "Format mask (dim outside)", { iconClass: "pi-stop", accentRgb: X.overlay }), z = b("Format", [ @@ -12457,31 +12484,31 @@ function oA({ { value: "9:16", label: "9:16" } ]); z.title = m("tooltip.aspectRatioMask", "Aspect ratio overlay mask"); - const B = L("Mask Opacity", { + const T = L("Mask Opacity", { min: 0, max: 0.9, step: 0.05, value: 0.65 - }), J = h("Probe", "Pixel Probe (I)", { + }), J = C("Probe", "Pixel Probe (I)", { iconClass: "pi-eye", accentRgb: X.probe - }), P = h("Loupe", "Loupe (L)", { + }), P = C("Loupe", "Loupe (L)", { iconClass: "pi-search-plus", accentRgb: X.loupe - }), H = h("HUD", "Viewer HUD", { + }), E = C("HUD", "Viewer HUD", { iconClass: "pi-info-circle", accentRgb: X.overlay - }), $ = h("Focus", "Distraction-free mode (X)", { + }), $ = C("Focus", "Distraction-free mode (X)", { iconClass: "pi-window-maximize", accentRgb: X.overlay - }), E = h( + }), H = C( "Gen", - Sr("Generation info (prompt/model)", "D"), + Gr("Generation info (prompt/model)", "D"), { iconClass: "pi-book", accentRgb: X.geninfo } - ), oe = b("A/B Compare Mode", [ + ), ne = b("A/B Compare Mode", [ { value: "wipe", label: "Wipe (H)" }, { value: "wipeV", label: "Wipe (V)" }, { value: "difference", label: "Difference" }, @@ -12491,124 +12518,124 @@ function oA({ { value: "multiply", label: "Multiply" }, { value: "screen", label: "Screen" } ]); - oe.title = m("tooltip.compareBlendMode", "Compare blend mode"); + ne.title = m("tooltip.compareBlendMode", "Compare blend mode"); const M = b("Audio Visualizer", [ { value: "simple", label: "Simple" }, { value: "artistic", label: "Artistic" } ]); M.title = m("tooltip.audioVisualizer", "Audio visualizer mode"); - const j = fl( + const v = fl( "Reset", m("tooltip.resetPlayerControls", "Reset all viewer controls") ); - j.style.height = "26px", j.style.fontSize = "11px", j.style.padding = "0 8px", (Oe = (Te = j.classList) == null ? void 0 : Te.add) == null || Oe.call(Te, "mjr-viewer-tool-btn", "mjr-viewer-tool-btn--reset"), (Me = (pt = j.classList) == null ? void 0 : pt.add) == null || Me.call(pt, "mjr-viewer-tools-action", "mjr-viewer-tools-action--primary"), j.style.marginLeft = "auto"; - const O = document.createElement("button"); - O.type = "button", O.title = m("tooltip.exportFrame", "Save current frame as PNG"), O.setAttribute("aria-label", m("tooltip.exportFrame", "Save frame as PNG")), O.className = "mjr-viewer-tool-btn mjr-viewer-tool-btn--reset", O.style.cssText = "height:24px; padding:0 8px; display:inline-flex; align-items:center; justify-content:center;"; + v.style.height = "26px", v.style.fontSize = "11px", v.style.padding = "0 8px", (rt = (Re = v.classList) == null ? void 0 : Re.add) == null || rt.call(Re, "mjr-viewer-tool-btn", "mjr-viewer-tool-btn--reset"), (qt = (Te = v.classList) == null ? void 0 : Te.add) == null || qt.call(Te, "mjr-viewer-tools-action", "mjr-viewer-tools-action--primary"), v.style.marginLeft = "auto"; + const F = document.createElement("button"); + F.type = "button", F.title = m("tooltip.exportFrame", "Save current frame as PNG"), F.setAttribute("aria-label", m("tooltip.exportFrame", "Save frame as PNG")), F.className = "mjr-viewer-tool-btn mjr-viewer-tool-btn--reset", F.style.cssText = "height:24px; padding:0 8px; display:inline-flex; align-items:center; justify-content:center;"; const D = document.createElement("span"); - D.className = "pi pi-download", D.setAttribute("aria-hidden", "true"), D.style.fontSize = "14px", O.appendChild(D), (Mt = (Xt = O.classList) == null ? void 0 : Xt.add) == null || Mt.call(Xt, "mjr-viewer-tools-action"); + D.className = "pi pi-download", D.setAttribute("aria-hidden", "true"), D.style.fontSize = "14px", F.appendChild(D), (we = (kt = F.classList) == null ? void 0 : kt.add) == null || we.call(kt, "mjr-viewer-tools-action"); try { - O.style.display = "none"; - } catch (Re) { - (me = console.debug) == null || me.call(console, Re); + F.style.display = "none"; + } catch (Oe) { + (me = console.debug) == null || me.call(console, Oe); } const q = document.createElement("button"); q.type = "button", q.title = m("tooltip.copyFrame", "Copy current frame to clipboard"), q.setAttribute("aria-label", m("tooltip.copyFrame", "Copy frame to clipboard")), q.className = "mjr-viewer-tool-btn mjr-viewer-tool-btn--reset", q.style.cssText = "height:24px; padding:0 8px; display:inline-flex; align-items:center; justify-content:center;"; const ee = document.createElement("span"); - ee.className = "pi pi-copy", ee.setAttribute("aria-hidden", "true"), ee.style.fontSize = "14px", q.appendChild(ee), (Le = (Pe = q.classList) == null ? void 0 : Pe.add) == null || Le.call(Pe, "mjr-viewer-tools-action"); + ee.className = "pi pi-copy", ee.setAttribute("aria-hidden", "true"), ee.style.fontSize = "14px", q.appendChild(ee), (Ye = (He = q.classList) == null ? void 0 : He.add) == null || Ye.call(He, "mjr-viewer-tools-action"); try { q.style.display = "none"; - } catch (Re) { - (Ot = console.debug) == null || Ot.call(console, Re); + } catch (Oe) { + (Pt = console.debug) == null || Pt.call(console, Oe); } - const ce = p({ key: "channel", label: "Channel", accentRgb: X.channel }); - ce.appendChild(G), I.body.appendChild(ce); + const ae = p({ key: "channel", label: "Channel", accentRgb: X.channel }); + ae.appendChild(G), I.body.appendChild(ae); const ue = p({ key: "exposure", label: "EV", accentRgb: X.exposure }); - ue.appendChild(W.wrap), I.body.appendChild(ue); - const U = p({ key: "gamma", label: "Gamma", accentRgb: X.gamma }); - U.appendChild(f.wrap), I.body.appendChild(U); + ue.appendChild(Z.wrap), I.body.appendChild(ue); + const B = p({ key: "gamma", label: "Gamma", accentRgb: X.gamma }); + B.appendChild(f.wrap), I.body.appendChild(B); const Q = () => { - var Re, Wt; + var Oe, Rt; try { t.exposureEV = 0; - } catch (lt) { - (Re = console.debug) == null || Re.call(console, lt); + } catch (nt) { + (Oe = console.debug) == null || Oe.call(console, nt); } try { - W.input.value = "0", W.out.textContent = "0.0EV"; - } catch (lt) { - (Wt = console.debug) == null || Wt.call(console, lt); + Z.input.value = "0", Z.out.textContent = "0.0EV"; + } catch (nt) { + (Rt = console.debug) == null || Rt.call(console, nt); } - bt(n); + It(n); }, _ = () => { - var Re, Wt; + var Oe, Rt; try { t.gamma = 1; - } catch (lt) { - (Re = console.debug) == null || Re.call(console, lt); + } catch (nt) { + (Oe = console.debug) == null || Oe.call(console, nt); } try { f.input.value = "1", f.out.textContent = "1.00"; - } catch (lt) { - (Wt = console.debug) == null || Wt.call(console, lt); + } catch (nt) { + (Rt = console.debug) == null || Rt.call(console, nt); } - bt(n); + It(n); }, le = () => { - var Re; + var Oe; try { Object.assign(t, c); - } catch (Wt) { - (Re = console.debug) == null || Re.call(console, Wt); + } catch (Rt) { + (Oe = console.debug) == null || Oe.call(console, Rt); } - bt(i), bt(l), bt(n); + It(i), It(l), It(n); }; try { - const Re = (Xe = ue.querySelector) == null ? void 0 : Xe.call(ue, ".mjr-viewer-tools-group-label"); - Re && (Re.title = m("tooltip.resetExposure", "Reset EV to 0"), Re.style.cursor = "pointer", Re.style.userSelect = "none"); - } catch (Re) { - (Ee = console.debug) == null || Ee.call(console, Re); + const Oe = (ke = ue.querySelector) == null ? void 0 : ke.call(ue, ".mjr-viewer-tools-group-label"); + Oe && (Oe.title = m("tooltip.resetExposure", "Reset EV to 0"), Oe.style.cursor = "pointer", Oe.style.userSelect = "none"); + } catch (Oe) { + (Ee = console.debug) == null || Ee.call(console, Oe); } try { - W.out.title = m("tooltip.resetExposure", "Reset EV to 0"), W.out.style.cursor = "pointer", W.out.style.userSelect = "none"; - } catch (Re) { - (Ke = console.debug) == null || Ke.call(console, Re); + Z.out.title = m("tooltip.resetExposure", "Reset EV to 0"), Z.out.style.cursor = "pointer", Z.out.style.userSelect = "none"; + } catch (Oe) { + (Ke = console.debug) == null || Ke.call(console, Oe); } try { - const Re = (nt = U.querySelector) == null ? void 0 : nt.call(U, ".mjr-viewer-tools-group-label"); - Re && (Re.title = m("tooltip.resetGamma", "Reset Gamma to 1.00"), Re.style.cursor = "pointer", Re.style.userSelect = "none"); - } catch (Re) { - (ut = console.debug) == null || ut.call(console, Re); + const Oe = (lt = B.querySelector) == null ? void 0 : lt.call(B, ".mjr-viewer-tools-group-label"); + Oe && (Oe.title = m("tooltip.resetGamma", "Reset Gamma to 1.00"), Oe.style.cursor = "pointer", Oe.style.userSelect = "none"); + } catch (Oe) { + (wt = console.debug) == null || wt.call(console, Oe); } try { f.out.title = m("tooltip.resetGamma", "Reset Gamma to 1.00"), f.out.style.cursor = "pointer", f.out.style.userSelect = "none"; - } catch (Re) { - (It = console.debug) == null || It.call(console, Re); + } catch (Oe) { + (at = console.debug) == null || at.call(console, Oe); } - const de = p({ key: "analysis", label: "Analysis", accentRgb: X.analysis }); - de.appendChild(Y.b), de.appendChild(F.b), de.appendChild(N), I.body.appendChild(de); - const se = p({ + const ce = p({ key: "analysis", label: "Analysis", accentRgb: X.analysis }); + ce.appendChild(V.b), ce.appendChild(O.b), ce.appendChild(k), I.body.appendChild(ce); + const de = p({ key: "overlay-guides", label: "Guides", accentRgb: X.overlay }); - se.appendChild(V.b), se.appendChild(k), se.appendChild(K.b), se.appendChild(z), se.appendChild(B.wrap), y.body.appendChild(se); + de.appendChild(Y.b), de.appendChild(N), de.appendChild(U.b), de.appendChild(z), de.appendChild(T.wrap), A.body.appendChild(de); const ge = p({ key: "overlay-inspect", label: "Inspect", accentRgb: X.overlay }); - [J.b, P.b, H.b, $.b, E.b].forEach((Re, Wt) => { - Wt > 0 && (Re.style.marginLeft = "4px"), ge.appendChild(Re); - }), S.body.appendChild(ge); - const Se = p({ key: "compare", label: "Compare", accentRgb: X.compare }); - Se.style.borderRadius = "8px", Se.style.padding = "4px 6px", Se.style.border = "1px solid transparent", Se.style.transition = "background 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease", Se.appendChild(oe), y.body.appendChild(Se); - const ke = p({ + [J.b, P.b, E.b, $.b, H.b].forEach((Oe, Rt) => { + Rt > 0 && (Oe.style.marginLeft = "4px"), ge.appendChild(Oe); + }), h.body.appendChild(ge); + const xe = p({ key: "compare", label: "Compare", accentRgb: X.compare }); + xe.style.borderRadius = "8px", xe.style.padding = "4px 6px", xe.style.border = "1px solid transparent", xe.style.transition = "background 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease", xe.appendChild(ne), A.body.appendChild(xe); + const Xe = p({ key: "audio-viz", label: "Audio Viz", accentRgb: X.audioviz }); - ke.appendChild(M), y.body.appendChild(ke), g.appendChild(j), g.appendChild(O), g.appendChild(q); - const we = document.createElement("div"); - we.className = "mjr-viewer-tools-group mjr-viewer-tools-group--3d", we.textContent = "LMB rotate · RMB pan · Scroll zoom", we.style.cssText = [ + Xe.appendChild(M), A.body.appendChild(Xe), g.appendChild(v), g.appendChild(F), g.appendChild(q); + const Me = document.createElement("div"); + Me.className = "mjr-viewer-tools-group mjr-viewer-tools-group--3d", Me.textContent = "LMB rotate · RMB pan · Scroll zoom", Me.style.cssText = [ "display:none", "align-items:center", "padding:2px 8px", @@ -12619,11 +12646,11 @@ function oA({ "font-size:10px", "font-weight:400", "letter-spacing:0.01em" - ].join(";"), A.appendChild(we); - const Je = document.createElement("div"); - Je.style.cssText = "position: relative; display:inline-flex; align-items:center;", Je.className = "mjr-viewer-tools-action", Je.style.marginLeft = "4px"; - const $e = document.createElement("button"); - $e.type = "button", $e.title = m("tooltip.viewerShortcuts", "Viewer shortcuts"), $e.setAttribute("aria-label", m("tooltip.viewerShortcuts", "Viewer shortcuts")), $e.style.cssText = ` + ].join(";"), y.appendChild(Me); + const Fe = document.createElement("div"); + Fe.style.cssText = "position: relative; display:inline-flex; align-items:center;", Fe.className = "mjr-viewer-tools-action", Fe.style.marginLeft = "4px"; + const it = document.createElement("button"); + it.type = "button", it.title = m("tooltip.viewerShortcuts", "Viewer shortcuts"), it.setAttribute("aria-label", m("tooltip.viewerShortcuts", "Viewer shortcuts")), it.style.cssText = ` height: 24px; padding: 0 8px; border-radius: 6px; @@ -12636,9 +12663,9 @@ function oA({ justify-content: center; `; const qe = document.createElement("span"); - qe.className = "pi pi-question-circle", qe.setAttribute("aria-hidden", "true"), qe.style.fontSize = "14px", $e.appendChild(qe); - const Ue = document.createElement("div"); - Ue.className = "mjr-viewer-help", Ue.style.cssText = ` + qe.className = "pi pi-question-circle", qe.setAttribute("aria-hidden", "true"), qe.style.fontSize = "14px", it.appendChild(qe); + const Pe = document.createElement("div"); + Pe.className = "mjr-viewer-help", Pe.style.cssText = ` position: absolute; right: 0; top: 32px; @@ -12656,66 +12683,66 @@ function oA({ z-index: 10002; `; try { - const Re = document.createElement("div"); - Re.textContent = "Shortcuts", Re.style.cssText = "font-weight:600; margin-bottom:6px;"; - const Wt = document.createElement("div"); - Wt.style.cssText = "display:grid; grid-template-columns: 1fr 1fr; gap: 4px 10px;"; - const lt = (qt, yt) => { - const mt = document.createElement("div"), kt = document.createElement("span"); - kt.style.cssText = "opacity:.75;", kt.textContent = String(qt || ""), mt.appendChild(kt), mt.appendChild(document.createTextNode(` ${String(yt || "")}`)), Wt.appendChild(mt); + const Oe = document.createElement("div"); + Oe.textContent = "Shortcuts", Oe.style.cssText = "font-weight:600; margin-bottom:6px;"; + const Rt = document.createElement("div"); + Rt.style.cssText = "display:grid; grid-template-columns: 1fr 1fr; gap: 4px 10px;"; + const nt = (Mt, dt) => { + const bt = document.createElement("div"), Yt = document.createElement("span"); + Yt.style.cssText = "opacity:.75;", Yt.textContent = String(Mt || ""), bt.appendChild(Yt), bt.appendChild(document.createTextNode(` ${String(dt || "")}`)), Rt.appendChild(bt); }; - lt("Esc", "Close"), lt("Space", "Play/Pause"), lt("+", "Zoom In"), lt("-", "Zoom Out"), lt("Alt+1", "1:1 Zoom"), lt("G", "Grid"), lt("D", "Gen Info"), lt("Z", "Zebra"), lt("I", "Probe"), lt("L", "Loupe"), lt("X", "Focus Mode"), lt("C", "Copy Color"), lt("[ / ]", "Speed -/+"), lt("\\", "Speed 1x"), lt("←/→", "Prev/Next"), lt("0-5", "Rating"), Ue.appendChild(Re), Ue.appendChild(Wt); - } catch (Re) { - (dt = console.debug) == null || dt.call(console, Re); + nt("Esc", "Close"), nt("Space", "Play/Pause"), nt("+", "Zoom In"), nt("-", "Zoom Out"), nt("Alt+1", "1:1 Zoom"), nt("G", "Grid"), nt("D", "Gen Info"), nt("Z", "Zebra"), nt("I", "Probe"), nt("L", "Loupe"), nt("X", "Focus Mode"), nt("C", "Copy Color"), nt("[ / ]", "Speed -/+"), nt("\\", "Speed 1x"), nt("←/→", "Prev/Next"), nt("0-5", "Rating"), Pe.appendChild(Oe), Pe.appendChild(Rt); + } catch (Oe) { + (tt = console.debug) == null || tt.call(console, Oe); } - return Je.appendChild($e), Je.appendChild(Ue), A.appendChild(Je), Z.body.appendChild(g), C.body.appendChild(A), d.appendChild(I.panel), d.appendChild(y.panel), d.appendChild(S.panel), d.appendChild(Z.panel), d.appendChild(C.panel), s.appendChild(d), { + return Fe.appendChild(it), Fe.appendChild(Pe), y.appendChild(Fe), S.body.appendChild(g), W.body.appendChild(y), d.appendChild(I.panel), d.appendChild(A.panel), d.appendChild(h.panel), d.appendChild(S.panel), d.appendChild(W.panel), s.appendChild(d), { toolsRow: s, gradePanel: I, - overlayPanel: y, - inspectPanel: S, - actionPanel: Z, - infoPanel: C, + overlayPanel: A, + inspectPanel: h, + actionPanel: S, + infoPanel: W, toolsActions: g, - toolsMeta: A, - chGroup: ce, + toolsMeta: y, + chGroup: ae, expGroup: ue, - gamGroup: U, - anaGroup: de, - ovGuidesGroup: se, + gamGroup: B, + anaGroup: ce, + ovGuidesGroup: de, ovInspectGroup: ge, - cmpGroup: Se, - audGroup: ke, - model3dHint: we, - helpWrap: Je, - helpBtn: $e, - helpPop: Ue, + cmpGroup: xe, + audGroup: Xe, + model3dHint: Me, + helpWrap: Fe, + helpBtn: it, + helpPop: Pe, channelsSelect: G, - exposureCtl: W, + exposureCtl: Z, gammaCtl: f, - zebraToggle: Y, - scopesToggle: F, - scopesSelect: N, - gridToggle: V, - gridModeSelect: k, - maskToggle: K, + zebraToggle: V, + scopesToggle: O, + scopesSelect: k, + gridToggle: Y, + gridModeSelect: N, + maskToggle: U, formatSelect: z, - maskOpacityCtl: B, + maskOpacityCtl: T, probeToggle: J, loupeToggle: P, - hudToggle: H, + hudToggle: E, focusToggle: $, - genInfoToggle: E, - compareModeSelect: oe, + genInfoToggle: H, + compareModeSelect: ne, audioVizModeSelect: M, - resetGradeBtn: j, - exportBtn: O, + resetGradeBtn: v, + exportBtn: F, copyBtn: q, resetExposure: Q, resetGamma: _, resetViewerTools: le, ACCENT: X, - setSelectHighlighted: T, - setChannelSelectStyle: v, + setSelectHighlighted: K, + setChannelSelectStyle: j, setValueHighlighted: w, setGroupHighlighted: R, DEFAULT_TOOL_STATE: c @@ -12735,124 +12762,124 @@ function rA({ singleBtn: d, abBtn: u, sideBtn: I, - closeBtn: y, - channelsSelect: S, - compareModeSelect: Z, - audioVizModeSelect: C, + closeBtn: A, + channelsSelect: h, + compareModeSelect: S, + audioVizModeSelect: W, exposureCtl: g, - gammaCtl: A, + gammaCtl: y, zebraToggle: p, scopesToggle: b, scopesSelect: L, - gridToggle: h, + gridToggle: C, gridModeSelect: G, - maskToggle: W, + maskToggle: Z, formatSelect: f, maskOpacityCtl: X, probeToggle: x, - loupeToggle: T, - hudToggle: v, + loupeToggle: K, + hudToggle: j, focusToggle: w, genInfoToggle: R, - resetGradeBtn: Y, - exportBtn: F, - copyBtn: N, - resetExposure: V, - resetGamma: k, - resetViewerTools: K, + resetGradeBtn: V, + exportBtn: O, + copyBtn: k, + resetExposure: Y, + resetGamma: N, + resetViewerTools: U, expGroup: z, - gamGroup: B + gamGroup: T }) { var J, P; - e.push(Qe(d, "click", () => i == null ? void 0 : i(n.SINGLE))), e.push(Qe(u, "click", () => i == null ? void 0 : i(n.AB_COMPARE))), e.push(Qe(I, "click", () => i == null ? void 0 : i(n.SIDE_BY_SIDE))), e.push(Qe(y, "click", () => o == null ? void 0 : o())), e.push( - Qe(S, "change", () => { - var H; + e.push($e(d, "click", () => i == null ? void 0 : i(n.SINGLE))), e.push($e(u, "click", () => i == null ? void 0 : i(n.AB_COMPARE))), e.push($e(I, "click", () => i == null ? void 0 : i(n.SIDE_BY_SIDE))), e.push($e(A, "click", () => o == null ? void 0 : o())), e.push( + $e(h, "change", () => { + var E; try { - t.channel = String(S.value || "rgb"); + t.channel = String(h.value || "rgb"); } catch ($) { - (H = console.debug) == null || H.call(console, $); + (E = console.debug) == null || E.call(console, $); } - bt(r); + It(r); }) ), e.push( - Qe(Z, "change", () => { - var H; + $e(S, "change", () => { + var E; try { - t.abCompareMode = String(Z.value || "wipe"); + t.abCompareMode = String(S.value || "wipe"); } catch ($) { - (H = console.debug) == null || H.call(console, $); + (E = console.debug) == null || E.call(console, $); } - bt(l), bt(r); + It(l), It(r); }) ), e.push( - Qe(C, "change", () => { - var H; + $e(W, "change", () => { + var E; try { - t.audioVisualizerMode = String(C.value || "artistic"); + t.audioVisualizerMode = String(W.value || "artistic"); } catch ($) { - (H = console.debug) == null || H.call(console, $); + (E = console.debug) == null || E.call(console, $); } - bt(a), bt(r); + It(a), It(r); }) ), e.push( - Qe(g.input, "input", () => { + $e(g.input, "input", () => { var $; - const H = Math.max(-10, Math.min(10, Number(g.input.value) || 0)); - t.exposureEV = Math.round(H * 10) / 10; + const E = Math.max(-10, Math.min(10, Number(g.input.value) || 0)); + t.exposureEV = Math.round(E * 10) / 10; try { g.out.textContent = `${t.exposureEV.toFixed(1)}EV`; - } catch (E) { - ($ = console.debug) == null || $.call(console, E); + } catch (H) { + ($ = console.debug) == null || $.call(console, H); } - bt(r); + It(r); }) - ), e.push(Qe(g.input, "dblclick", V)), e.push(Qe(g.out, "click", V)), e.push( - Qe( + ), e.push($e(g.input, "dblclick", Y)), e.push($e(g.out, "click", Y)), e.push( + $e( (J = z.querySelector) == null ? void 0 : J.call(z, ".mjr-viewer-tools-group-label"), "click", - V + Y ) ), e.push( - Qe(A.input, "input", () => { + $e(y.input, "input", () => { var $; - const H = Math.max(0.1, Math.min(3, Number(A.input.value) || 1)); - t.gamma = Math.round(H * 100) / 100; + const E = Math.max(0.1, Math.min(3, Number(y.input.value) || 1)); + t.gamma = Math.round(E * 100) / 100; try { - A.out.textContent = t.gamma.toFixed(2); - } catch (E) { - ($ = console.debug) == null || $.call(console, E); + y.out.textContent = t.gamma.toFixed(2); + } catch (H) { + ($ = console.debug) == null || $.call(console, H); } - bt(r); + It(r); }) - ), e.push(Qe(A.input, "dblclick", k)), e.push(Qe(A.out, "click", k)), e.push( - Qe( - (P = B.querySelector) == null ? void 0 : P.call(B, ".mjr-viewer-tools-group-label"), + ), e.push($e(y.input, "dblclick", N)), e.push($e(y.out, "click", N)), e.push( + $e( + (P = T.querySelector) == null ? void 0 : P.call(T, ".mjr-viewer-tools-group-label"), "click", - k + N ) ), e.push( - Qe(p.b, "click", () => { - t.analysisMode = t.analysisMode === "zebra" ? "none" : "zebra", bt(r); + $e(p.b, "click", () => { + t.analysisMode = t.analysisMode === "zebra" ? "none" : "zebra", It(r); }) ), e.push( - Qe(b.b, "click", () => { - var H, $; + $e(b.b, "click", () => { + var E, $; try { - const oe = String(t.scopesMode || "off") === "off" ? "both" : "off"; - t.scopesMode = oe; + const ne = String(t.scopesMode || "off") === "off" ? "both" : "off"; + t.scopesMode = ne; try { - L.value = String(oe); + L.value = String(ne); } catch (M) { - (H = console.debug) == null || H.call(console, M); + (E = console.debug) == null || E.call(console, M); } - } catch (E) { - ($ = console.debug) == null || $.call(console, E); + } catch (H) { + ($ = console.debug) == null || $.call(console, H); } - bt(r); + It(r); }) ), e.push( - Qe(L, "change", () => { - var H; + $e(L, "change", () => { + var E; try { const $ = String(L.value || "off"); t.scopesMode = $; @@ -12860,18 +12887,18 @@ function rA({ try { t.scopesMode = "off"; } catch ($) { - (H = console.debug) == null || H.call(console, $); + (E = console.debug) == null || E.call(console, $); } } - bt(r); + It(r); }) ), e.push( - Qe(h.b, "click", () => { - t.gridMode = Number(t.gridMode) ? 0 : 1, bt(r); + $e(C.b, "click", () => { + t.gridMode = Number(t.gridMode) ? 0 : 1, It(r); }) ), e.push( - Qe(G, "change", () => { - var H; + $e(G, "change", () => { + var E; try { const $ = Number(G.value); t.gridMode = Number.isFinite($) ? $ : 0; @@ -12879,92 +12906,92 @@ function rA({ try { t.gridMode = 0; } catch ($) { - (H = console.debug) == null || H.call(console, $); + (E = console.debug) == null || E.call(console, $); } } - bt(r); + It(r); }) ), e.push( - Qe(W.b, "click", () => { - var H; + $e(Z.b, "click", () => { + var E; try { t.overlayMaskEnabled = !t.overlayMaskEnabled; } catch ($) { - (H = console.debug) == null || H.call(console, $); + (E = console.debug) == null || E.call(console, $); } - bt(r); + It(r); }) ), e.push( - Qe(f, "change", () => { - var H; + $e(f, "change", () => { + var E; try { t.overlayFormat = String(f.value || "image"); } catch { try { t.overlayFormat = "image"; } catch ($) { - (H = console.debug) == null || H.call(console, $); + (E = console.debug) == null || E.call(console, $); } } - bt(r); + It(r); }) ), e.push( - Qe(X.input, "input", () => { - var H; + $e(X.input, "input", () => { + var E; try { - const $ = Number(X.input.value), E = Math.max(0, Math.min(0.9, Number.isFinite($) ? $ : 0.65)); - t.overlayMaskOpacity = Math.round(E * 100) / 100, X.out.textContent = t.overlayMaskOpacity.toFixed(2); + const $ = Number(X.input.value), H = Math.max(0, Math.min(0.9, Number.isFinite($) ? $ : 0.65)); + t.overlayMaskOpacity = Math.round(H * 100) / 100, X.out.textContent = t.overlayMaskOpacity.toFixed(2); } catch ($) { - (H = console.debug) == null || H.call(console, $); + (E = console.debug) == null || E.call(console, $); } - bt(r); + It(r); }) ), e.push( - Qe(x.b, "click", () => { - t.probeEnabled = !t.probeEnabled, bt(r); + $e(x.b, "click", () => { + t.probeEnabled = !t.probeEnabled, It(r); }) ), e.push( - Qe(T.b, "click", () => { - t.loupeEnabled = !t.loupeEnabled, bt(r); + $e(K.b, "click", () => { + t.loupeEnabled = !t.loupeEnabled, It(r); }) ), e.push( - Qe(v.b, "click", () => { - t.hudEnabled = !t.hudEnabled, bt(r); + $e(j.b, "click", () => { + t.hudEnabled = !t.hudEnabled, It(r); }) ), e.push( - Qe(w.b, "click", () => { - t.distractionFree = !t.distractionFree, bt(r); + $e(w.b, "click", () => { + t.distractionFree = !t.distractionFree, It(r); }) ), e.push( - Qe(R.b, "click", () => { - var H; + $e(R.b, "click", () => { + var E; try { t.genInfoOpen = !t.genInfoOpen; } catch ($) { - (H = console.debug) == null || H.call(console, $); + (E = console.debug) == null || E.call(console, $); } - bt(r); + It(r); }) ), e.push( - Qe(Y, "click", () => { - K(); + $e(V, "click", () => { + U(); }) ), e.push( - Qe(F, "click", () => { - var H; + $e(O, "click", () => { + var E; try { c == null || c(); } catch ($) { - (H = console.debug) == null || H.call(console, $); + (E = console.debug) == null || E.call(console, $); } }) ), e.push( - Qe(N, "click", () => { - var H; + $e(k, "click", () => { + var E; try { s == null || s(); } catch ($) { - (H = console.debug) == null || H.call(console, $); + (E = console.debug) == null || E.call(console, $); } }) ); @@ -12983,250 +13010,250 @@ function lA({ overlayPanel: d, inspectPanel: u, infoPanel: I, - actionPanel: y, - ovGuidesGroup: S, - ovInspectGroup: Z, - model3dHint: C, + actionPanel: A, + ovGuidesGroup: h, + ovInspectGroup: S, + model3dHint: W, helpWrap: g, - channelsSelect: A, + channelsSelect: y, compareModeSelect: p, audioVizModeSelect: b, exposureCtl: L, - gammaCtl: h, + gammaCtl: C, zebraToggle: G, - scopesToggle: W, + scopesToggle: Z, scopesSelect: f, gridToggle: X, gridModeSelect: x, - maskToggle: T, - formatSelect: v, + maskToggle: K, + formatSelect: j, maskOpacityCtl: w, probeToggle: R, - loupeToggle: Y, - hudToggle: F, - focusToggle: N, - genInfoToggle: V, - exportBtn: k, - copyBtn: K, + loupeToggle: V, + hudToggle: O, + focusToggle: k, + genInfoToggle: Y, + exportBtn: N, + copyBtn: U, resetGradeBtn: z, - cmpGroup: B, + cmpGroup: T, audGroup: J, ACCENT: P, - setSelectHighlighted: H, + setSelectHighlighted: E, setChannelSelectStyle: $, - setValueHighlighted: E, - setGroupHighlighted: oe + setValueHighlighted: H, + setGroupHighlighted: ne }) { - var O, D, q, ee, ce, ue, U, Q, _, le, de, se, ge, je, Se, ke, we, Je, $e, qe, Ue, Te, Oe, pt, Me, Xt, Mt, me, Pe; - const M = ((O = e == null ? void 0 : e.assets) == null ? void 0 : O[e == null ? void 0 : e.currentIndex]) || null, j = String((M == null ? void 0 : M.kind) || "").toLowerCase() === "model3d"; + var F, D, q, ee, ae, ue, B, Q, _, le, ce, de, ge, Le, xe, Xe, Me, Fe, it, qe, Pe, Re, rt, Te, qt, kt, we, me, He; + const M = ((F = e == null ? void 0 : e.assets) == null ? void 0 : F[e == null ? void 0 : e.currentIndex]) || null, v = String((M == null ? void 0 : M.kind) || "").toLowerCase() === "model3d"; try { - const Le = j ? "none" : ""; - r.style.display = Le, l.style.display = Le, a.style.display = Le, c.style.display = Le, z.style.display = Le, C.style.display = j ? "inline-flex" : "none", s.panel.style.display = j ? "none" : "", d.panel.style.display = j ? "none" : "", I.panel.style.display = "", y.panel.style.display = ""; - const Ot = (D = Z.querySelector) == null ? void 0 : D.call(Z, ".mjr-viewer-tools-group-label"); - if (j) { - S.style.display = "none", Z.style.display = "", Ot && (Ot.style.display = "none"), g.style.display = "none", i.style.padding = "10px 16px", i.style.gap = "6px", o.style.padding = "6px 8px 6px"; - for (const Xe of [ + const Ye = v ? "none" : ""; + r.style.display = Ye, l.style.display = Ye, a.style.display = Ye, c.style.display = Ye, z.style.display = Ye, W.style.display = v ? "inline-flex" : "none", s.panel.style.display = v ? "none" : "", d.panel.style.display = v ? "none" : "", I.panel.style.display = "", A.panel.style.display = ""; + const Pt = (D = S.querySelector) == null ? void 0 : D.call(S, ".mjr-viewer-tools-group-label"); + if (v) { + h.style.display = "none", S.style.display = "", Pt && (Pt.style.display = "none"), g.style.display = "none", i.style.padding = "10px 16px", i.style.gap = "6px", o.style.padding = "6px 8px 6px"; + for (const ke of [ X.b, x, - T.b, - v, + K.b, + j, w.wrap, R.b, - Y.b, - F.b + V.b, + O.b ]) try { - Xe.style.display = "none"; + ke.style.display = "none"; } catch { } } else { - S.style.display = "", Z.style.display = "", Ot && (Ot.style.display = ""), g.style.display = "", s.panel.style.display = "", d.panel.style.display = "", I.panel.style.display = "", y.panel.style.display = "", i.style.padding = "8px 16px", i.style.gap = "6px", o.style.padding = "8px 8px 6px"; - for (const Xe of [ + h.style.display = "", S.style.display = "", Pt && (Pt.style.display = ""), g.style.display = "", s.panel.style.display = "", d.panel.style.display = "", I.panel.style.display = "", A.panel.style.display = "", i.style.padding = "8px 16px", i.style.gap = "6px", o.style.padding = "8px 8px 6px"; + for (const ke of [ X.b, x, - T.b, - v, + K.b, + j, w.wrap, R.b, - Y.b, - F.b + V.b, + O.b ]) try { - Xe.style.display = ""; + ke.style.display = ""; } catch { } } - } catch (Le) { - (q = console.debug) == null || q.call(console, Le); + } catch (Ye) { + (q = console.debug) == null || q.call(console, Ye); } try { - A.value = String(e.channel || "rgb"); - } catch (Le) { - (ee = console.debug) == null || ee.call(console, Le); + y.value = String(e.channel || "rgb"); + } catch (Ye) { + (ee = console.debug) == null || ee.call(console, Ye); } try { p.value = String(e.abCompareMode || "wipe"); - const Le = typeof n == "function" ? !!n() : !1, Ot = e.mode === t.AB_COMPARE && Le, Xe = e.mode === t.SIDE_BY_SIDE, Ee = Ot || Xe; - p.disabled = !Ot; + const Ye = typeof n == "function" ? !!n() : !1, Pt = e.mode === t.AB_COMPARE && Ye, ke = e.mode === t.SIDE_BY_SIDE, Ee = Pt || ke; + p.disabled = !Pt; try { - B.dataset.active = Ee ? "1" : "0", B.style.display = Ee ? "" : "none", oe(B, { accentRgb: P.compare, active: Ee }), B.title = Ee ? "Compare tools (active)" : "Compare tools"; + T.dataset.active = Ee ? "1" : "0", T.style.display = Ee ? "" : "none", ne(T, { accentRgb: P.compare, active: Ee }), T.title = Ee ? "Compare tools (active)" : "Compare tools"; } catch (Ke) { - (ce = console.debug) == null || ce.call(console, Ke); + (ae = console.debug) == null || ae.call(console, Ke); } - } catch (Le) { - (ue = console.debug) == null || ue.call(console, Le); + } catch (Ye) { + (ue = console.debug) == null || ue.call(console, Ye); } try { - const Le = String((M == null ? void 0 : M.kind) || "") === "audio"; - J.style.display = Le ? "" : "none", b.disabled = !Le, b.value = String(e.audioVisualizerMode || "artistic"); - } catch (Le) { - (U = console.debug) == null || U.call(console, Le); + const Ye = String((M == null ? void 0 : M.kind) || "") === "audio"; + J.style.display = Ye ? "" : "none", b.disabled = !Ye, b.value = String(e.audioVisualizerMode || "artistic"); + } catch (Ye) { + (B = console.debug) == null || B.call(console, Ye); } try { - const Le = Math.round((Number(e.exposureEV) || 0) * 10) / 10; - L.input.value = String(Le), L.out.textContent = `${Le.toFixed(1)}EV`; - } catch (Le) { - (Q = console.debug) == null || Q.call(console, Le); + const Ye = Math.round((Number(e.exposureEV) || 0) * 10) / 10; + L.input.value = String(Ye), L.out.textContent = `${Ye.toFixed(1)}EV`; + } catch (Ye) { + (Q = console.debug) == null || Q.call(console, Ye); } try { - const Le = Math.max(0.1, Math.min(3, Number(e.gamma) || 1)); - h.input.value = String(Le), h.out.textContent = Le.toFixed(2); - } catch (Le) { - (_ = console.debug) == null || _.call(console, Le); + const Ye = Math.max(0.1, Math.min(3, Number(e.gamma) || 1)); + C.input.value = String(Ye), C.out.textContent = Ye.toFixed(2); + } catch (Ye) { + (_ = console.debug) == null || _.call(console, Ye); } try { G.setActive(e.analysisMode === "zebra"); - } catch (Le) { - (le = console.debug) == null || le.call(console, Le); + } catch (Ye) { + (le = console.debug) == null || le.call(console, Ye); } try { - const Le = String(e.scopesMode || "off"); - W.setActive(Le !== "off"), f.value = Le; - } catch (Le) { - (de = console.debug) == null || de.call(console, Le); + const Ye = String(e.scopesMode || "off"); + Z.setActive(Ye !== "off"), f.value = Ye; + } catch (Ye) { + (ce = console.debug) == null || ce.call(console, Ye); } try { - const Le = String((M == null ? void 0 : M.kind) || ""), Ot = Le === "video" || Le === "model3d"; - k.style.display = Ot ? "" : "none", K.style.display = Ot ? "" : "none"; - const Xe = !!(globalThis != null && globalThis.ClipboardItem && ((se = navigator == null ? void 0 : navigator.clipboard) != null && se.write)); - K.style.display = Ot && Xe ? "" : "none"; - } catch (Le) { - (ge = console.debug) == null || ge.call(console, Le); + const Ye = String((M == null ? void 0 : M.kind) || ""), Pt = Ye === "video" || Ye === "model3d"; + N.style.display = Pt ? "" : "none", U.style.display = Pt ? "" : "none"; + const ke = !!(globalThis != null && globalThis.ClipboardItem && ((de = navigator == null ? void 0 : navigator.clipboard) != null && de.write)); + U.style.display = Pt && ke ? "" : "none"; + } catch (Ye) { + (ge = console.debug) == null || ge.call(console, Ye); } try { X.setActive((Number(e.gridMode) || 0) !== 0); - } catch (Le) { - (je = console.debug) == null || je.call(console, Le); + } catch (Ye) { + (Le = console.debug) == null || Le.call(console, Ye); } try { x.value = String(Number(e.gridMode) || 0); - } catch (Le) { - (Se = console.debug) == null || Se.call(console, Le); + } catch (Ye) { + (xe = console.debug) == null || xe.call(console, Ye); } try { - T.setActive(!!e.overlayMaskEnabled), v.value = String(e.overlayFormat || "image"), w.input.value = String(Number(e.overlayMaskOpacity ?? 0.65)), w.out.textContent = Number(e.overlayMaskOpacity ?? 0.65).toFixed(2); - } catch (Le) { - (ke = console.debug) == null || ke.call(console, Le); + K.setActive(!!e.overlayMaskEnabled), j.value = String(e.overlayFormat || "image"), w.input.value = String(Number(e.overlayMaskOpacity ?? 0.65)), w.out.textContent = Number(e.overlayMaskOpacity ?? 0.65).toFixed(2); + } catch (Ye) { + (Xe = console.debug) == null || Xe.call(console, Ye); } try { - R.setActive(!!e.probeEnabled), Y.setActive(!!e.loupeEnabled); - } catch (Le) { - (we = console.debug) == null || we.call(console, Le); + R.setActive(!!e.probeEnabled), V.setActive(!!e.loupeEnabled); + } catch (Ye) { + (Me = console.debug) == null || Me.call(console, Ye); } try { - F.setActive(!!e.hudEnabled); - } catch (Le) { - (Je = console.debug) == null || Je.call(console, Le); + O.setActive(!!e.hudEnabled); + } catch (Ye) { + (Fe = console.debug) == null || Fe.call(console, Ye); } try { - N.setActive(!!e.distractionFree); - } catch (Le) { - ($e = console.debug) == null || $e.call(console, Le); + k.setActive(!!e.distractionFree); + } catch (Ye) { + (it = console.debug) == null || it.call(console, Ye); } try { - V.setActive(!!e.genInfoOpen); - } catch (Le) { - (qe = console.debug) == null || qe.call(console, Le); + Y.setActive(!!e.genInfoOpen); + } catch (Ye) { + (qe = console.debug) == null || qe.call(console, Ye); } try { - const Le = String(e.channel || "rgb"); - $(Le); - } catch (Le) { - (Ue = console.debug) == null || Ue.call(console, Le); + const Ye = String(e.channel || "rgb"); + $(Ye); + } catch (Ye) { + (Pe = console.debug) == null || Pe.call(console, Ye); } try { - const Le = Math.round((Number(e.exposureEV) || 0) * 10) / 10; - E(L.out, { + const Ye = Math.round((Number(e.exposureEV) || 0) * 10) / 10; + H(L.out, { accentRgb: P.exposure, - active: Math.abs(Le) > 1e-4 + active: Math.abs(Ye) > 1e-4 }); - } catch (Le) { - (Te = console.debug) == null || Te.call(console, Le); + } catch (Ye) { + (Re = console.debug) == null || Re.call(console, Ye); } try { - const Le = Math.round((Number(e.gamma) || 1) * 100) / 100; - E(h.out, { + const Ye = Math.round((Number(e.gamma) || 1) * 100) / 100; + H(C.out, { accentRgb: P.gamma, - active: Math.abs(Le - 1) > 1e-4 + active: Math.abs(Ye - 1) > 1e-4 }); - } catch (Le) { - (Oe = console.debug) == null || Oe.call(console, Le); + } catch (Ye) { + (rt = console.debug) == null || rt.call(console, Ye); } try { - const Le = String(e.scopesMode || "off"); - H(f, { + const Ye = String(e.scopesMode || "off"); + E(f, { accentRgb: P.analysis, - active: Le !== "off", - title: Le !== "off" ? "Scopes (active)" : "Scopes" + active: Ye !== "off", + title: Ye !== "off" ? "Scopes (active)" : "Scopes" }); - } catch (Le) { - (pt = console.debug) == null || pt.call(console, Le); + } catch (Ye) { + (Te = console.debug) == null || Te.call(console, Ye); } try { - const Le = Number(e.gridMode) || 0; - H(x, { + const Ye = Number(e.gridMode) || 0; + E(x, { accentRgb: P.overlay, - active: Le !== 0, - title: Le !== 0 ? "Grid Overlay (active)" : "Grid Overlay" + active: Ye !== 0, + title: Ye !== 0 ? "Grid Overlay (active)" : "Grid Overlay" }); - } catch (Le) { - (Me = console.debug) == null || Me.call(console, Le); + } catch (Ye) { + (qt = console.debug) == null || qt.call(console, Ye); } try { - const Le = String(e.overlayFormat || "image"); - H(v, { + const Ye = String(e.overlayFormat || "image"); + E(j, { accentRgb: P.overlay, - active: Le !== "image", - title: Le !== "image" ? "Format (active)" : "Format" + active: Ye !== "image", + title: Ye !== "image" ? "Format (active)" : "Format" }); - } catch (Le) { - (Xt = console.debug) == null || Xt.call(console, Le); + } catch (Ye) { + (kt = console.debug) == null || kt.call(console, Ye); } try { - const Le = typeof n == "function" ? !!n() : !1, Ot = e.mode === t.AB_COMPARE && Le, Xe = String(e.abCompareMode || "wipe"); - H(p, { + const Ye = typeof n == "function" ? !!n() : !1, Pt = e.mode === t.AB_COMPARE && Ye, ke = String(e.abCompareMode || "wipe"); + E(p, { accentRgb: P.compare, - active: Ot && Xe !== "wipe", - title: Ot && Xe !== "wipe" ? "Compare Mode (modified)" : "A/B Compare Mode" + active: Pt && ke !== "wipe", + title: Pt && ke !== "wipe" ? "Compare Mode (modified)" : "A/B Compare Mode" }); - } catch (Le) { - (Mt = console.debug) == null || Mt.call(console, Le); + } catch (Ye) { + (we = console.debug) == null || we.call(console, Ye); } try { - const Le = String((M == null ? void 0 : M.kind) || "") === "audio", Ot = String(e.audioVisualizerMode || "artistic"); - H(b, { + const Ye = String((M == null ? void 0 : M.kind) || "") === "audio", Pt = String(e.audioVisualizerMode || "artistic"); + E(b, { accentRgb: P.audioviz, - active: Le && Ot !== "simple", + active: Ye && Pt !== "simple", title: "Audio visualizer mode" }); - } catch (Le) { - (me = console.debug) == null || me.call(console, Le); + } catch (Ye) { + (me = console.debug) == null || me.call(console, Ye); } try { - const Le = !!e.genInfoOpen, Ot = V == null ? void 0 : V.b; - Ot && Le && (Ot.style.borderColor = `rgba(${P.geninfo},0.55)`, Ot.style.background = `rgba(${P.geninfo},0.14)`); - } catch (Le) { - (Pe = console.debug) == null || Pe.call(console, Le); + const Ye = !!e.genInfoOpen, Pt = Y == null ? void 0 : Y.b; + Pt && Ye && (Pt.style.borderColor = `rgba(${P.geninfo},0.55)`, Pt.style.background = `rgba(${P.geninfo},0.14)`); + } catch (Ye) { + (He = console.debug) == null || He.call(console, Ye); } } function aA({ @@ -13274,12 +13301,12 @@ function cA({ onCompareModeChanged: d, onExportFrame: u, onCopyFrame: I, - onAudioVizModeChanged: y, - onToggleFullscreen: S, - getCanAB: Z + onAudioVizModeChanged: A, + onToggleFullscreen: h, + getCanAB: S } = {}) { - var dt, Re, Wt, lt, qt, yt; - const C = (n == null ? void 0 : n.unsubs) || [], g = document.createElement("div"); + var tt, Oe, Rt, nt, Mt, dt; + const W = (n == null ? void 0 : n.unsubs) || [], g = document.createElement("div"); g.className = "mjr-viewer-header", g.style.cssText = ` display: flex; flex-direction: column; @@ -13290,8 +13317,8 @@ function cA({ color: white; box-sizing: border-box; `; - const A = document.createElement("div"); - A.className = "mjr-viewer-header-top", A.style.cssText = ` + const y = document.createElement("div"); + y.className = "mjr-viewer-header-top", y.style.cssText = ` display: flex; align-items: center; justify-content: center; @@ -13308,136 +13335,136 @@ function cA({ b.className = "mjr-viewer-title-line", b.style.cssText = "display:flex; align-items:center; justify-content:center; gap:8px; min-width:0; flex-wrap:nowrap; overflow:hidden;"; const L = document.createElement("div"); L.className = "mjr-viewer-title-wrap", L.style.cssText = "display:flex; align-items:center; justify-content:center; gap:12px; min-width:0; max-width:min(100%, calc(100vw - 220px)); text-align:center;"; - const h = document.createElement("span"); - h.className = "mjr-viewer-filename", h.style.cssText = "font-size: 13px; font-weight: 600; min-width:0; max-width:min(60vw, 820px); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; text-align:center;"; + const C = document.createElement("span"); + C.className = "mjr-viewer-filename", C.style.cssText = "font-size: 13px; font-weight: 600; min-width:0; max-width:min(60vw, 820px); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; text-align:center;"; const G = document.createElement("div"); G.className = "mjr-viewer-badges", G.style.cssText = "display:flex; gap:6px; align-items:center; flex-wrap:nowrap; min-width:0;"; - const W = document.createElement("div"); - W.className = "mjr-viewer-header-meta mjr-viewer-header-meta--right", W.style.cssText = "display:none; align-items:center; gap:10px; min-width:0; justify-content:flex-end; overflow:hidden;"; + const Z = document.createElement("div"); + Z.className = "mjr-viewer-header-meta mjr-viewer-header-meta--right", Z.style.cssText = "display:none; align-items:center; gap:10px; min-width:0; justify-content:flex-end; overflow:hidden;"; const f = document.createElement("span"); f.className = "mjr-viewer-filename mjr-viewer-filename--right", f.style.cssText = "font-size: 14px; font-weight: 500; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; text-align:right;"; const X = document.createElement("div"); - X.className = "mjr-viewer-badges mjr-viewer-badges--right", X.style.cssText = "display:flex; gap:8px; align-items:center; flex-wrap:wrap; justify-content:flex-end;", b.appendChild(h), b.appendChild(G), L.appendChild(b), W.appendChild(X), W.appendChild(f); + X.className = "mjr-viewer-badges mjr-viewer-badges--right", X.style.cssText = "display:flex; gap:8px; align-items:center; flex-wrap:wrap; justify-content:flex-end;", b.appendChild(C), b.appendChild(G), L.appendChild(b), Z.appendChild(X), Z.appendChild(f); const x = document.createElement("div"); x.className = "mjr-viewer-mode-buttons", x.style.cssText = "display: flex; gap: 4px;"; - const T = Cc("Single", e.SINGLE); - T.title = m("tooltip.singleViewMode", "Single view mode (one image)"); - const v = Cc("A/B", e.AB_COMPARE); - v.title = m("tooltip.compareOverlayMode", "A/B compare mode (overlay)"); - const w = Cc("Side", e.SIDE_BY_SIDE); - w.title = m("tooltip.compareSideBySide", "Side-by-side comparison mode"), x.appendChild(T), x.appendChild(v), x.appendChild(w); + const K = Zc("Single", e.SINGLE); + K.title = m("tooltip.singleViewMode", "Single view mode (one image)"); + const j = Zc("A/B", e.AB_COMPARE); + j.title = m("tooltip.compareOverlayMode", "A/B compare mode (overlay)"); + const w = Zc("Side", e.SIDE_BY_SIDE); + w.title = m("tooltip.compareSideBySide", "Side-by-side comparison mode"), x.appendChild(K), x.appendChild(j), x.appendChild(w); const R = fl("✕", "Close (Esc)"); R.style.fontSize = "18px"; try { R.classList.add("mjr-viewer-close"), R.textContent = ""; - const mt = document.createElement("span"); - mt.className = "pi pi-times", mt.setAttribute("aria-hidden", "true"), R.appendChild(mt); - } catch (mt) { - (dt = console.debug) == null || dt.call(console, mt); + const bt = document.createElement("span"); + bt.className = "pi pi-times", bt.setAttribute("aria-hidden", "true"), R.appendChild(bt); + } catch (bt) { + (tt = console.debug) == null || tt.call(console, bt); } - const Y = fl("⛶", "Toggle Fullscreen (F)"); + const V = fl("⛶", "Toggle Fullscreen (F)"); try { - Y.classList.add("mjr-viewer-fs"); - } catch (mt) { - (Re = console.debug) == null || Re.call(console, mt); + V.classList.add("mjr-viewer-fs"); + } catch (bt) { + (Oe = console.debug) == null || Oe.call(console, bt); } - Y.style.fontSize = "16px"; + V.style.fontSize = "16px"; try { - Y.style.position = "absolute", Y.style.top = "8px", Y.style.left = "", Y.style.right = "48px", Y.style.zIndex = "10002", Y.style.width = "34px", Y.style.height = "34px", Y.style.padding = "0", Y.style.display = "inline-flex", Y.style.alignItems = "center", Y.style.justifyContent = "center", Y.style.borderRadius = "8px"; - const mt = document.createElement("span"); - mt.className = "pi pi-window-maximize", mt.setAttribute("aria-hidden", "true"), Y.textContent = "", Y.appendChild(mt); - const kt = () => { + V.style.position = "absolute", V.style.top = "8px", V.style.left = "", V.style.right = "48px", V.style.zIndex = "10002", V.style.width = "34px", V.style.height = "34px", V.style.padding = "0", V.style.display = "inline-flex", V.style.alignItems = "center", V.style.justifyContent = "center", V.style.borderRadius = "8px"; + const bt = document.createElement("span"); + bt.className = "pi pi-window-maximize", bt.setAttribute("aria-hidden", "true"), V.textContent = "", V.appendChild(bt); + const Yt = () => { var $t; try { - const Tt = document.fullscreenElement != null; - mt.className = Tt ? "pi pi-window-minimize" : "pi pi-window-maximize", Y.title = Tt ? "Exit Fullscreen (F)" : "Enter Fullscreen (F)"; - } catch (Tt) { - ($t = console.debug) == null || $t.call(console, Tt); + const nn = document.fullscreenElement != null; + bt.className = nn ? "pi pi-window-minimize" : "pi pi-window-maximize", V.title = nn ? "Exit Fullscreen (F)" : "Enter Fullscreen (F)"; + } catch (nn) { + ($t = console.debug) == null || $t.call(console, nn); } }; - if (Y.onclick = ($t) => { - $t.stopPropagation(), S == null || S(); + if (V.onclick = ($t) => { + $t.stopPropagation(), h == null || h(); }, n != null && n.safeAddListener) - n.safeAddListener(document, "fullscreenchange", kt); + n.safeAddListener(document, "fullscreenchange", Yt); else try { - document.addEventListener("fullscreenchange", kt); + document.addEventListener("fullscreenchange", Yt); const $t = () => { - var Tt; + var nn; try { - document.removeEventListener("fullscreenchange", kt); - } catch (te) { - (Tt = console.debug) == null || Tt.call(console, te); + document.removeEventListener("fullscreenchange", Yt); + } catch (ie) { + (nn = console.debug) == null || nn.call(console, ie); } }; g._mjrCleanup ? g._mjrCleanup.push($t) : g._mjrCleanup = [$t]; } catch ($t) { - (Wt = console.debug) == null || Wt.call(console, $t); + (Rt = console.debug) == null || Rt.call(console, $t); } - kt(); - } catch (mt) { - (lt = console.debug) == null || lt.call(console, mt); + Yt(); + } catch (bt) { + (nt = console.debug) == null || nt.call(console, bt); } - const F = document.createElement("div"); - F.className = "mjr-viewer-header-area mjr-viewer-header-area--left", F.style.cssText = "display:none; align-items:center; gap:12px; min-width:0; flex:1 1 0; overflow:hidden;", F.appendChild(p); - const N = document.createElement("div"); - N.className = "mjr-viewer-header-area mjr-viewer-header-area--center", N.style.cssText = "display:flex; align-items:center; justify-content:center; gap:12px; flex:1 1 auto; min-width:0;", L.appendChild(x), N.appendChild(L); - const V = document.createElement("div"); - V.className = "mjr-viewer-header-area mjr-viewer-header-area--right", V.style.cssText = "display:none; align-items:center; justify-content:flex-end; gap:12px; min-width:0; flex:1 1 0; overflow:hidden;", V.appendChild(W), A.appendChild(F), A.appendChild(N), A.appendChild(V); + const O = document.createElement("div"); + O.className = "mjr-viewer-header-area mjr-viewer-header-area--left", O.style.cssText = "display:none; align-items:center; gap:12px; min-width:0; flex:1 1 0; overflow:hidden;", O.appendChild(p); + const k = document.createElement("div"); + k.className = "mjr-viewer-header-area mjr-viewer-header-area--center", k.style.cssText = "display:flex; align-items:center; justify-content:center; gap:12px; flex:1 1 auto; min-width:0;", L.appendChild(x), k.appendChild(L); + const Y = document.createElement("div"); + Y.className = "mjr-viewer-header-area mjr-viewer-header-area--right", Y.style.cssText = "display:none; align-items:center; justify-content:flex-end; gap:12px; min-width:0; flex:1 1 0; overflow:hidden;", Y.appendChild(Z), y.appendChild(O), y.appendChild(k), y.appendChild(Y); try { R.style.position = "absolute", R.style.top = "8px", R.style.left = "", R.style.right = "8px", R.style.transform = "", R.style.zIndex = "10002", R.style.width = "34px", R.style.height = "34px", R.style.padding = "0", R.style.display = "inline-flex", R.style.alignItems = "center", R.style.justifyContent = "center", R.style.borderRadius = "8px"; - } catch (mt) { - (qt = console.debug) == null || qt.call(console, mt); + } catch (bt) { + (Mt = console.debug) == null || Mt.call(console, bt); } - g.appendChild(A), g.appendChild(Y), g.appendChild(R); + g.appendChild(y), g.appendChild(V), g.appendChild(R); const { - toolsRow: k, - gradePanel: K, + toolsRow: N, + gradePanel: U, overlayPanel: z, - inspectPanel: B, + inspectPanel: T, actionPanel: J, infoPanel: P, - chGroup: H, + chGroup: E, expGroup: $, - gamGroup: E, - anaGroup: oe, + gamGroup: H, + anaGroup: ne, ovGuidesGroup: M, - ovInspectGroup: j, - cmpGroup: O, + ovInspectGroup: v, + cmpGroup: F, audGroup: D, model3dHint: q, helpWrap: ee, - helpBtn: ce, + helpBtn: ae, helpPop: ue, - channelsSelect: U, + channelsSelect: B, exposureCtl: Q, gammaCtl: _, zebraToggle: le, - scopesToggle: de, - scopesSelect: se, + scopesToggle: ce, + scopesSelect: de, gridToggle: ge, - gridModeSelect: je, - maskToggle: Se, - formatSelect: ke, - maskOpacityCtl: we, - probeToggle: Je, - loupeToggle: $e, + gridModeSelect: Le, + maskToggle: xe, + formatSelect: Xe, + maskOpacityCtl: Me, + probeToggle: Fe, + loupeToggle: it, hudToggle: qe, - focusToggle: Ue, - genInfoToggle: Te, - compareModeSelect: Oe, - audioVizModeSelect: pt, - resetGradeBtn: Me, - exportBtn: Xt, - copyBtn: Mt, + focusToggle: Pe, + genInfoToggle: Re, + compareModeSelect: rt, + audioVizModeSelect: Te, + resetGradeBtn: qt, + exportBtn: kt, + copyBtn: we, resetExposure: me, - resetGamma: Pe, - resetViewerTools: Le, - ACCENT: Ot, - setSelectHighlighted: Xe, + resetGamma: He, + resetViewerTools: Ye, + ACCENT: Pt, + setSelectHighlighted: ke, setChannelSelectStyle: Ee, setValueHighlighted: Ke, - setGroupHighlighted: nt + setGroupHighlighted: lt } = oA({ VIEWER_MODES: e, state: t, @@ -13445,177 +13472,177 @@ function cA({ onCompareModeChanged: d, onExportFrame: u, onCopyFrame: I, - onAudioVizModeChanged: y, - getCanAB: Z + onAudioVizModeChanged: A, + getCanAB: S }); - g.appendChild(k), rA({ - unsubs: C, + g.appendChild(N), rA({ + unsubs: W, state: t, VIEWER_MODES: e, onMode: c, onClose: i, onToolsChanged: s, onCompareModeChanged: d, - onAudioVizModeChanged: y, + onAudioVizModeChanged: A, onExportFrame: u, onCopyFrame: I, - singleBtn: T, - abBtn: v, + singleBtn: K, + abBtn: j, sideBtn: w, closeBtn: R, - channelsSelect: U, - compareModeSelect: Oe, - audioVizModeSelect: pt, + channelsSelect: B, + compareModeSelect: rt, + audioVizModeSelect: Te, exposureCtl: Q, gammaCtl: _, zebraToggle: le, - scopesToggle: de, - scopesSelect: se, + scopesToggle: ce, + scopesSelect: de, gridToggle: ge, - gridModeSelect: je, - maskToggle: Se, - formatSelect: ke, - maskOpacityCtl: we, - probeToggle: Je, - loupeToggle: $e, + gridModeSelect: Le, + maskToggle: xe, + formatSelect: Xe, + maskOpacityCtl: Me, + probeToggle: Fe, + loupeToggle: it, hudToggle: qe, - focusToggle: Ue, - genInfoToggle: Te, - resetGradeBtn: Me, - exportBtn: Xt, - copyBtn: Mt, + focusToggle: Pe, + genInfoToggle: Re, + resetGradeBtn: qt, + exportBtn: kt, + copyBtn: we, resetExposure: me, - resetGamma: Pe, - resetViewerTools: Le, + resetGamma: He, + resetViewerTools: Ye, expGroup: $, - gamGroup: E + gamGroup: H }); - const ut = () => lA({ + const wt = () => lA({ state: t, VIEWER_MODES: e, - getCanAB: Z, + getCanAB: S, header: g, - toolsRow: k, - chGroup: H, + toolsRow: N, + chGroup: E, expGroup: $, - gamGroup: E, - anaGroup: oe, - gradePanel: K, + gamGroup: H, + anaGroup: ne, + gradePanel: U, overlayPanel: z, - inspectPanel: B, + inspectPanel: T, infoPanel: P, actionPanel: J, ovGuidesGroup: M, - ovInspectGroup: j, + ovInspectGroup: v, model3dHint: q, helpWrap: ee, - channelsSelect: U, - compareModeSelect: Oe, - audioVizModeSelect: pt, + channelsSelect: B, + compareModeSelect: rt, + audioVizModeSelect: Te, exposureCtl: Q, gammaCtl: _, zebraToggle: le, - scopesToggle: de, - scopesSelect: se, + scopesToggle: ce, + scopesSelect: de, gridToggle: ge, - gridModeSelect: je, - maskToggle: Se, - formatSelect: ke, - maskOpacityCtl: we, - probeToggle: Je, - loupeToggle: $e, + gridModeSelect: Le, + maskToggle: xe, + formatSelect: Xe, + maskOpacityCtl: Me, + probeToggle: Fe, + loupeToggle: it, hudToggle: qe, - focusToggle: Ue, - genInfoToggle: Te, - exportBtn: Xt, - copyBtn: Mt, - resetGradeBtn: Me, - cmpGroup: O, + focusToggle: Pe, + genInfoToggle: Re, + exportBtn: kt, + copyBtn: we, + resetGradeBtn: qt, + cmpGroup: F, audGroup: D, - ACCENT: Ot, - setSelectHighlighted: Xe, + ACCENT: Pt, + setSelectHighlighted: ke, setChannelSelectStyle: Ee, setValueHighlighted: Ke, - setGroupHighlighted: nt - }), It = ({ canAB: mt, canSide: kt } = {}) => aA({ + setGroupHighlighted: lt + }), at = ({ canAB: bt, canSide: Yt } = {}) => aA({ state: t, VIEWER_MODES: e, - singleBtn: T, - abBtn: v, + singleBtn: K, + abBtn: j, sideBtn: w, - canAB: mt, - canSide: kt + canAB: bt, + canSide: Yt }); try { - let mt = null; - const kt = () => { - var Tt, te, ye; + let bt = null; + const Yt = () => { + var nn, ie, pe; try { - (Tt = mt == null ? void 0 : mt.abort) == null || Tt.call(mt); - } catch (We) { - (te = console.debug) == null || te.call(console, We); + (nn = bt == null ? void 0 : bt.abort) == null || nn.call(bt); + } catch (Ce) { + (ie = console.debug) == null || ie.call(console, Ce); } - mt = null; + bt = null; try { ue.style.display = "none"; - } catch (We) { - (ye = console.debug) == null || ye.call(console, We); + } catch (Ce) { + (pe = console.debug) == null || pe.call(console, Ce); } }, $t = () => { - var Tt, te; - kt(), mt = new AbortController(); + var nn, ie; + Yt(), bt = new AbortController(); try { ue.style.display = ""; - } catch (ye) { - (Tt = console.debug) == null || Tt.call(console, ye); + } catch (pe) { + (nn = console.debug) == null || nn.call(console, pe); } try { document.addEventListener( "mousedown", - (ye) => { - ee.contains(ye.target) || kt(); + (pe) => { + ee.contains(pe.target) || Yt(); }, - { capture: !0, signal: mt.signal } + { capture: !0, signal: bt.signal } ), document.addEventListener( "keydown", - (ye) => { - ye.key === "Escape" && kt(); + (pe) => { + pe.key === "Escape" && Yt(); }, - { capture: !0, signal: mt.signal } - ), document.addEventListener("scroll", kt, { + { capture: !0, signal: bt.signal } + ), document.addEventListener("scroll", Yt, { capture: !0, passive: !0, - signal: mt.signal + signal: bt.signal }); - } catch (ye) { - (te = console.debug) == null || te.call(console, ye); + } catch (pe) { + (ie = console.debug) == null || ie.call(console, pe); } }; - C.push(() => kt()), C.push( - Qe(ce, "click", () => { - ue.style.display !== "none" ? kt() : $t(); + W.push(() => Yt()), W.push( + $e(ae, "click", () => { + ue.style.display !== "none" ? Yt() : $t(); }) ); - } catch (mt) { - (yt = console.debug) == null || yt.call(console, mt); + } catch (bt) { + (dt = console.debug) == null || dt.call(console, bt); } return { headerEl: g, - headerTopEl: A, - filenameEl: h, + headerTopEl: y, + filenameEl: C, badgesBarEl: G, filenameRightEl: f, badgesBarRightEl: X, - leftAreaEl: F, + leftAreaEl: O, leftMetaEl: p, - centerAreaEl: N, - rightMetaEl: W, - rightAreaEl: V, + centerAreaEl: k, + rightMetaEl: Z, + rightAreaEl: Y, titleLineEl: b, titleWrapEl: L, modeButtonsEl: x, - syncToolsUIFromState: ut, - syncModeButtons: It + syncToolsUIFromState: wt, + syncModeButtons: at }; } function sA(e) { @@ -13669,60 +13696,60 @@ function dA({ applyDistractionFreeUI: d, navigateViewerAssets: u, closeViewer: I, - renderBadges: y, - updateAssetRating: S, - safeDispatchCustomEvent: Z, - ASSET_RATING_CHANGED_EVENT: C, + renderBadges: A, + updateAssetRating: h, + safeDispatchCustomEvent: S, + ASSET_RATING_CHANGED_EVENT: W, probeTooltip: g, - loupeWrap: A, + loupeWrap: y, getVideoControls: p, lifecycle: b, renderGenInfoPanel: L } = {}) { - const h = (b == null ? void 0 : b.unsubs) || []; - let G = null, W = null; + const C = (b == null ? void 0 : b.unsubs) || []; + let G = null, Z = null; const f = () => { - var Y; + var V; try { G && clearTimeout(G); - } catch (F) { - (Y = console.debug) == null || Y.call(console, F); + } catch (O) { + (V = console.debug) == null || V.call(console, O); } - G = null, W = null; - }, X = (Y, F) => { - f(), W = { assetId: Y, rating: F }, G = setTimeout(async () => { - const N = W; - if (G = null, W = null, !!(N != null && N.assetId)) + G = null, Z = null; + }, X = (V, O) => { + f(), Z = { assetId: V, rating: O }, G = setTimeout(async () => { + const k = Z; + if (G = null, Z = null, !!(k != null && k.assetId)) try { - const V = await (S == null ? void 0 : S(N.assetId, N.rating)); - if (!(V != null && V.ok)) { - Ze((V == null ? void 0 : V.error) || m("toast.ratingUpdateFailed"), "error"); + const Y = await (h == null ? void 0 : h(k.assetId, k.rating)); + if (!(Y != null && Y.ok)) { + Ae((Y == null ? void 0 : Y.error) || m("toast.ratingUpdateFailed"), "error"); return; } - Ze(m("toast.ratingSetN", { n: N.rating }), "success", 1500), Z == null || Z( - C, - { assetId: String(N.assetId), rating: N.rating }, + Ae(m("toast.ratingSetN", { n: k.rating }), "success", 1500), S == null || S( + W, + { assetId: String(k.assetId), rating: k.rating }, { warnPrefix: "[Viewer]" } ); } catch { - Ze(m("toast.ratingUpdateError"), "error"); + Ae(m("toast.ratingUpdateError"), "error"); } }, 300); }, x = () => { - var Y, F, N; + var V, O, k; try { - document.fullscreenElement ? (F = document == null ? void 0 : document.exitFullscreen) == null || F.call(document) : (Y = e == null ? void 0 : e.requestFullscreen) == null || Y.call(e); - } catch (V) { - (N = console.debug) == null || N.call(console, V); + document.fullscreenElement ? (O = document == null ? void 0 : document.exitFullscreen) == null || O.call(document) : (V = e == null ? void 0 : e.requestFullscreen) == null || V.call(e); + } catch (Y) { + (k = console.debug) == null || k.call(console, Y); } - }, T = (Y) => { - var J, P, H, $, E, oe, M, j, O, D, q, ee, ce, ue, U, Q, _, le, de, se, ge, je, Se, ke, we, Je, $e, qe, Ue, Te, Oe, pt, Me, Xt, Mt; - const F = () => { - var me, Pe; + }, K = (V) => { + var J, P, E, $, H, ne, M, v, F, D, q, ee, ae, ue, B, Q, _, le, ce, de, ge, Le, xe, Xe, Me, Fe, it, qe, Pe, Re, rt, Te, qt, kt, we; + const O = () => { + var me, He; try { - Y.preventDefault(), Y.stopPropagation(), (me = Y.stopImmediatePropagation) == null || me.call(Y); - } catch (Le) { - (Pe = console.debug) == null || Pe.call(console, Le); + V.preventDefault(), V.stopPropagation(), (me = V.stopImmediatePropagation) == null || me.call(V); + } catch (Ye) { + (He = console.debug) == null || He.call(console, Ye); } }; try { @@ -13731,81 +13758,81 @@ function dA({ (P = console.debug) == null || P.call(console, me); } try { - const me = Y == null ? void 0 : Y.target; + const me = V == null ? void 0 : V.target; if (me && (me.tagName === "INPUT" || me.tagName === "TEXTAREA" || me.isContentEditable)) { - if (Y.key === "f" || Y.key === "F") { - F(), x(); + if (V.key === "f" || V.key === "F") { + O(), x(); return; } - Y.key === "Escape" && (F(), bt(I)); + V.key === "Escape" && (O(), It(I)); return; } } catch (me) { - (H = console.debug) == null || H.call(console, me); + (E = console.debug) == null || E.call(console, me); } - const N = (i == null ? void 0 : i.mode) === (o == null ? void 0 : o.SINGLE), V = ($ = i == null ? void 0 : i.assets) == null ? void 0 : $[i == null ? void 0 : i.currentIndex], k = async (me) => { - if (!N || !(V != null && V.id) || me !== "0" && me !== "1" && me !== "2" && me !== "3" && me !== "4" && me !== "5") + const k = (i == null ? void 0 : i.mode) === (o == null ? void 0 : o.SINGLE), Y = ($ = i == null ? void 0 : i.assets) == null ? void 0 : $[i == null ? void 0 : i.currentIndex], N = async (me) => { + if (!k || !(Y != null && Y.id) || me !== "0" && me !== "1" && me !== "2" && me !== "3" && me !== "4" && me !== "5") return !1; - const Pe = me === "0" ? 0 : Number(me); - if (!Number.isFinite(Pe)) return !1; + const He = me === "0" ? 0 : Number(me); + if (!Number.isFinite(He)) return !1; try { - return V.rating = Pe, bt(y), X(V.id, Pe), !0; + return Y.rating = He, It(A), X(Y.id, He), !0; } catch { return !0; } - }, K = () => { + }, U = () => { try { return (p == null ? void 0 : p()) || null; } catch { return null; } }, z = async (me) => { - var Ee, Ke, nt, ut, It, dt; - if (!N || (V == null ? void 0 : V.kind) !== "video") return !1; + var Ee, Ke, lt, wt, at, tt; + if (!k || (Y == null ? void 0 : Y.kind) !== "video") return !1; try { - const Re = K(); - if (Re != null && Re.stepFrames) - return Re.stepFrames(me), !0; - } catch (Re) { - (Ee = console.debug) == null || Ee.call(console, Re); + const Oe = U(); + if (Oe != null && Oe.stepFrames) + return Oe.stepFrames(me), !0; + } catch (Oe) { + (Ee = console.debug) == null || Ee.call(console, Oe); } - const Pe = (Ke = n == null ? void 0 : n.querySelector) == null ? void 0 : Ke.call(n, "video"); - if (!Pe) return !1; + const He = (Ke = n == null ? void 0 : n.querySelector) == null ? void 0 : Ke.call(n, "video"); + if (!He) return !1; try { - (nt = Pe.pause) == null || nt.call(Pe); - } catch (Re) { - (ut = console.debug) == null || ut.call(console, Re); + (lt = He.pause) == null || lt.call(He); + } catch (Oe) { + (wt = console.debug) == null || wt.call(console, Oe); } - const Ot = 1 / 30, Xe = me * Ot; + const Pt = 1 / 30, ke = me * Pt; try { - const Re = Number(Pe.duration), Wt = Math.max( + const Oe = Number(He.duration), Rt = Math.max( 0, Math.min( - Number.isFinite(Re) ? Re : 1 / 0, - (Pe.currentTime || 0) + Xe + Number.isFinite(Oe) ? Oe : 1 / 0, + (He.currentTime || 0) + ke ) ); - Pe.currentTime = Wt; + He.currentTime = Rt; try { - (It = Pe.dispatchEvent) == null || It.call( - Pe, - new CustomEvent("mjr:frameStep", { detail: { direction: me, time: Wt } }) + (at = He.dispatchEvent) == null || at.call( + He, + new CustomEvent("mjr:frameStep", { detail: { direction: me, time: Rt } }) ); - } catch (lt) { - (dt = console.debug) == null || dt.call(console, lt); + } catch (nt) { + (tt = console.debug) == null || tt.call(console, nt); } return !0; } catch { return !0; } - }, B = (me, { absolute: Pe = !1 } = {}) => { - var Le, Ot; + }, T = (me, { absolute: He = !1 } = {}) => { + var Ye, Pt; try { - const Xe = K(); - if (!Xe) return !1; - if (Pe) { - const Ke = (Le = Xe.setPlaybackRate) == null ? void 0 : Le.call(Xe, me); - return Number.isFinite(Number(Ke)) ? (i.playbackRate = Number(Ke), Ze( + const ke = U(); + if (!ke) return !1; + if (He) { + const Ke = (Ye = ke.setPlaybackRate) == null ? void 0 : Ye.call(ke, me); + return Number.isFinite(Number(Ke)) ? (i.playbackRate = Number(Ke), Ae( m("toast.playbackRate", "Playback {rate}x", { rate: Number(Ke).toFixed(2) }), @@ -13813,8 +13840,8 @@ function dA({ 1200 ), !0) : !1; } - const Ee = (Ot = Xe.adjustPlaybackRate) == null ? void 0 : Ot.call(Xe, me); - return Number.isFinite(Number(Ee)) ? (i.playbackRate = Number(Ee), Ze( + const Ee = (Pt = ke.adjustPlaybackRate) == null ? void 0 : Pt.call(ke, me); + return Number.isFinite(Number(Ee)) ? (i.playbackRate = Number(Ee), Ae( m("toast.playbackRate", "Playback {rate}x", { rate: Number(Ee).toFixed(2) }), @@ -13825,124 +13852,124 @@ function dA({ return !1; } }; - if ((Y.ctrlKey || Y.metaKey) && (Y.key === "c" || Y.key === "C")) + if ((V.ctrlKey || V.metaKey) && (V.key === "c" || V.key === "C")) try { - const me = sA(V); + const me = sA(Y); if (me) { - F(), (oe = (E = navigator.clipboard) == null ? void 0 : E.writeText) == null || oe.call(E, me).then(() => Ze(m("toast.promptCopied", "Prompt copied to clipboard"), "success", 1500)).catch(() => Ze(m("toast.copyFailed", "Copy failed"), "error", 1500)); + O(), (ne = (H = navigator.clipboard) == null ? void 0 : H.writeText) == null || ne.call(H, me).then(() => Ae(m("toast.promptCopied", "Prompt copied to clipboard"), "success", 1500)).catch(() => Ae(m("toast.copyFailed", "Copy failed"), "error", 1500)); return; } } catch (me) { (M = console.debug) == null || M.call(console, me); } - if (N && !Y.altKey && !Y.ctrlKey && !Y.metaKey && (Y.key === "0" || Y.key === "1" || Y.key === "2" || Y.key === "3" || Y.key === "4" || Y.key === "5")) { - F(), k(Y.key); + if (k && !V.altKey && !V.ctrlKey && !V.metaKey && (V.key === "0" || V.key === "1" || V.key === "2" || V.key === "3" || V.key === "4" || V.key === "5")) { + O(), N(V.key); return; } - switch (Y.key) { + switch (V.key) { case "1": { - if (!Y.altKey) break; - const me = bt(r); + if (!V.altKey) break; + const me = It(r); if (me == null) break; - F(); + O(); try { - const Pe = Math.abs((Number(i == null ? void 0 : i.zoom) || 1) - me) < 0.01; - l == null || l(Pe ? 1 : me, { + const He = Math.abs((Number(i == null ? void 0 : i.zoom) || 1) - me) < 0.01; + l == null || l(He ? 1 : me, { clientX: i == null ? void 0 : i._lastPointerX, clientY: i == null ? void 0 : i._lastPointerY }); - } catch (Pe) { - (j = console.debug) == null || j.call(console, Pe); + } catch (He) { + (v = console.debug) == null || v.call(console, He); } break; } case "g": case "G": { - F(); + O(); try { i.gridMode = ((Number(i.gridMode) || 0) + 1) % 5; } catch (me) { - (O = console.debug) == null || O.call(console, me); + (F = console.debug) == null || F.call(console, me); } - bt(a), bt(s); + It(a), It(s); break; } case "f": case "F": { - F(), x(); + O(), x(); break; } case "d": case "D": { - F(); + O(); try { i.genInfoOpen = !i.genInfoOpen; } catch (me) { (D = console.debug) == null || D.call(console, me); } - bt(s), bt(L); + It(s), It(L); break; } case "z": case "Z": { - F(); + O(); try { i.analysisMode = i.analysisMode === "zebra" ? "none" : "zebra"; } catch (me) { (q = console.debug) == null || q.call(console, me); } - bt(s), bt(c); + It(s), It(c); break; } case "i": case "I": { - if (N && (V == null ? void 0 : V.kind) === "video") { - const me = K(); + if (k && (Y == null ? void 0 : Y.kind) === "video") { + const me = U(); if ((ee = me == null ? void 0 : me.setInPoint) != null && ee.call(me)) { - F(), Ze(m("toast.inPointSet", "In point set"), "info", 1200); + O(), Ae(m("toast.inPointSet", "In point set"), "info", 1200); break; } } - F(); + O(); try { i.probeEnabled = !i.probeEnabled; } catch (me) { - (ce = console.debug) == null || ce.call(console, me); + (ae = console.debug) == null || ae.call(console, me); } try { i.probeEnabled || (g.style.display = "none"); } catch (me) { (ue = console.debug) == null || ue.call(console, me); } - bt(s); + It(s); break; } case "o": case "O": { - if (N && (V == null ? void 0 : V.kind) === "video") { - const me = K(); - if ((U = me == null ? void 0 : me.setOutPoint) != null && U.call(me)) { - F(), Ze(m("toast.outPointSet", "Out point set"), "info", 1200); + if (k && (Y == null ? void 0 : Y.kind) === "video") { + const me = U(); + if ((B = me == null ? void 0 : me.setOutPoint) != null && B.call(me)) { + O(), Ae(m("toast.outPointSet", "Out point set"), "info", 1200); break; } } break; } case "Home": { - if (N && (V == null ? void 0 : V.kind) === "video") { - const me = K(); + if (k && (Y == null ? void 0 : Y.kind) === "video") { + const me = U(); if ((Q = me == null ? void 0 : me.goToIn) != null && Q.call(me)) { - F(); + O(); break; } } break; } case "End": { - if (N && (V == null ? void 0 : V.kind) === "video") { - const me = K(); + if (k && (Y == null ? void 0 : Y.kind) === "video") { + const me = U(); if ((_ = me == null ? void 0 : me.goToOut) != null && _.call(me)) { - F(); + O(); break; } } @@ -13950,69 +13977,69 @@ function dA({ } case "l": case "L": { - F(); + O(); try { i.loupeEnabled = !i.loupeEnabled; } catch (me) { (le = console.debug) == null || le.call(console, me); } try { - i.loupeEnabled || (A.style.display = "none"); + i.loupeEnabled || (y.style.display = "none"); } catch (me) { - (de = console.debug) == null || de.call(console, me); + (ce = console.debug) == null || ce.call(console, me); } - bt(s); + It(s); break; } case "x": case "X": { - F(); + O(); try { i.distractionFree = !i.distractionFree; } catch (me) { - (se = console.debug) == null || se.call(console, me); + (de = console.debug) == null || de.call(console, me); } - bt(s), bt(d), bt(L); + It(s), It(d), It(L); break; } case "c": case "C": { const me = i == null ? void 0 : i._probe; if (!me || me.r == null || me.g == null || me.b == null) break; - const Pe = `#${[me.r, me.g, me.b].map((Le) => Math.max(0, Math.min(255, Number(Le) || 0)).toString(16).padStart(2, "0")).join("")}`; + const He = `#${[me.r, me.g, me.b].map((Ye) => Math.max(0, Math.min(255, Number(Ye) || 0)).toString(16).padStart(2, "0")).join("")}`; try { - const Le = navigator == null ? void 0 : navigator.clipboard; - Le != null && Le.writeText && (F(), Le.writeText(Pe).catch(() => { + const Ye = navigator == null ? void 0 : navigator.clipboard; + Ye != null && Ye.writeText && (O(), Ye.writeText(He).catch(() => { })); - } catch (Le) { - (ge = console.debug) == null || ge.call(console, Le); + } catch (Ye) { + (ge = console.debug) == null || ge.call(console, Ye); } break; } case " ": case "Spacebar": { - if (N && (V == null ? void 0 : V.kind) === "video") { - const me = (je = n == null ? void 0 : n.querySelector) == null ? void 0 : je.call(n, "video"); + if (k && (Y == null ? void 0 : Y.kind) === "video") { + const me = (Le = n == null ? void 0 : n.querySelector) == null ? void 0 : Le.call(n, "video"); if (me) { - F(); + O(); try { - const Pe = K(); - if (Pe != null && Pe.togglePlay) { - Pe.togglePlay(); + const He = U(); + if (He != null && He.togglePlay) { + He.togglePlay(); break; } - } catch (Pe) { - (Se = console.debug) == null || Se.call(console, Pe); + } catch (He) { + (xe = console.debug) == null || xe.call(console, He); } try { if (me.paused) { - const Pe = (ke = me.play) == null ? void 0 : ke.call(me); - Pe && typeof Pe.catch == "function" && Pe.catch(() => { + const He = (Xe = me.play) == null ? void 0 : Xe.call(me); + He && typeof He.catch == "function" && He.catch(() => { }); } else - (we = me.pause) == null || we.call(me); - } catch (Pe) { - (Je = console.debug) == null || Je.call(console, Pe); + (Me = me.pause) == null || Me.call(me); + } catch (He) { + (Fe = console.debug) == null || Fe.call(console, He); } break; } @@ -14020,91 +14047,91 @@ function dA({ break; } case "Tab": { - F(); + O(); try { - ($e = e == null ? void 0 : e.contains) != null && $e.call(e, document.activeElement) || (qe = e == null ? void 0 : e.focus) == null || qe.call(e); + (it = e == null ? void 0 : e.contains) != null && it.call(e, document.activeElement) || (qe = e == null ? void 0 : e.focus) == null || qe.call(e); } catch (me) { - (Ue = console.debug) == null || Ue.call(console, me); + (Pe = console.debug) == null || Pe.call(console, me); } break; } case "Escape": - F(), bt(I); + O(), It(I); break; case "ArrowLeft": - if (N && ((Oe = (Te = Y.target) == null ? void 0 : Te.closest) != null && Oe.call(Te, ".mjr-viewer-playerbar"))) { - F(), z(-1); + if (k && ((rt = (Re = V.target) == null ? void 0 : Re.closest) != null && rt.call(Re, ".mjr-viewer-playerbar"))) { + O(), z(-1); break; } - F(), bt(() => u == null ? void 0 : u(-1)); + O(), It(() => u == null ? void 0 : u(-1)); break; case "ArrowRight": - if (N && ((Me = (pt = Y.target) == null ? void 0 : pt.closest) != null && Me.call(pt, ".mjr-viewer-playerbar"))) { - F(), z(1); + if (k && ((qt = (Te = V.target) == null ? void 0 : Te.closest) != null && qt.call(Te, ".mjr-viewer-playerbar"))) { + O(), z(1); break; } - F(), bt(() => u == null ? void 0 : u(1)); + O(), It(() => u == null ? void 0 : u(1)); break; case "[": case "{": { - F(), B(-0.25) || Ze(m("toast.playbackVideoOnly"), "warning", 1400); + O(), T(-0.25) || Ae(m("toast.playbackVideoOnly"), "warning", 1400); break; } case "]": case "}": { - F(), B(0.25) || Ze(m("toast.playbackVideoOnly"), "warning", 1400); + O(), T(0.25) || Ae(m("toast.playbackVideoOnly"), "warning", 1400); break; } case "\\": case "|": { - F(), B(1, { absolute: !0 }) || Ze(m("toast.playbackVideoOnly"), "warning", 1400); + O(), T(1, { absolute: !0 }) || Ae(m("toast.playbackVideoOnly"), "warning", 1400); break; } case "+": case "=": - F(); + O(); try { l == null || l((Number(i == null ? void 0 : i.zoom) || 1) + 0.25, { clientX: i == null ? void 0 : i._lastPointerX, clientY: i == null ? void 0 : i._lastPointerY }); } catch (me) { - (Xt = console.debug) == null || Xt.call(console, me); + (kt = console.debug) == null || kt.call(console, me); } break; case "-": case "_": - F(); + O(); try { l == null || l((Number(i == null ? void 0 : i.zoom) || 1) - 0.25, { clientX: i == null ? void 0 : i._lastPointerX, clientY: i == null ? void 0 : i._lastPointerY }); } catch (me) { - (Mt = console.debug) == null || Mt.call(console, me); + (we = console.debug) == null || we.call(console, me); } break; } }; - let v = null; + let j = null; const w = () => { - var Y; + var V; try { - if (v) return; - v = Qe(window, "keydown", T, !0); - } catch (F) { - (Y = console.debug) == null || Y.call(console, F); + if (j) return; + j = $e(window, "keydown", K, !0); + } catch (O) { + (V = console.debug) == null || V.call(console, O); } }, R = () => { - var Y; + var V; try { - bt(v); - } catch (F) { - (Y = console.debug) == null || Y.call(console, F); + It(j); + } catch (O) { + (V = console.debug) == null || V.call(console, O); } - v = null; + j = null; }; - return h.push(() => f()), h.push(() => R()), { + return C.push(() => f()), C.push(() => R()), { bind: w, unbind: R, dispose: () => { @@ -14114,7 +14141,7 @@ function dA({ } const uA = () => { try { - return !!(fe != null && fe.DEBUG_VIEWER); + return !!(he != null && he.DEBUG_VIEWER); } catch { return !1; } @@ -14124,61 +14151,61 @@ function mA(e, t, { threshold: n = 0.15 } = {}) { const i = new AbortController(); try { if (!e) return i; - const y = Array.isArray(t) ? t.filter((b) => b && b !== e) : []; - if (!y.length) return i; - let S = !1; - const Z = (b) => { - var L, h; + const A = Array.isArray(t) ? t.filter((b) => b && b !== e) : []; + if (!A.length) return i; + let h = !1; + const S = (b) => { + var L, C; try { const G = (L = b.play) == null ? void 0 : L.call(b); G && typeof G.catch == "function" && G.catch(() => { }); } catch (G) { - (h = console.debug) == null || h.call(console, G); + (C = console.debug) == null || C.call(console, G); } - }, C = () => { - if (!S) + }, W = () => { + if (!h) try { const b = Number(e.currentTime) || 0; - for (const L of y) + for (const L of A) try { - Math.abs((Number(L.currentTime) || 0) - b) > n && (S = !0, L.currentTime = b, S = !1); + Math.abs((Number(L.currentTime) || 0) - b) > n && (h = !0, L.currentTime = b, h = !1); } catch { - S = !1; + h = !1; } } catch { - S = !1; + h = !1; } }, g = (b) => { - var L, h; - if (!S) - for (const G of y) + var L, C; + if (!h) + for (const G of A) try { - b ? Z(G) : (L = G.pause) == null || L.call(G); - } catch (W) { - (h = console.debug) == null || h.call(console, W); + b ? S(G) : (L = G.pause) == null || L.call(G); + } catch (Z) { + (C = console.debug) == null || C.call(console, Z); } - }, A = () => { + }, y = () => { var b; - if (!S) - for (const L of y) + if (!h) + for (const L of A) try { L.muted = !!e.muted, L.volume = Number(e.volume) || 0; - } catch (h) { - (b = console.debug) == null || b.call(console, h); + } catch (C) { + (b = console.debug) == null || b.call(console, C); } }, p = () => { var b; - if (!S) - for (const L of y) + if (!h) + for (const L of A) try { L.playbackRate = Number(e.playbackRate) || 1; - } catch (h) { - (b = console.debug) == null || b.call(console, h); + } catch (C) { + (b = console.debug) == null || b.call(console, C); } }; try { - for (const b of y) { + for (const b of A) { try { b.muted = !0; } catch (L) { @@ -14194,7 +14221,7 @@ function mA(e, t, { threshold: n = 0.15 } = {}) { (l = console.debug) == null || l.call(console, b); } try { - A(), p(), C(), e.paused || g(!0); + y(), p(), W(), e.paused || g(!0); } catch (b) { (a = console.debug) == null || a.call(console, b); } @@ -14204,29 +14231,29 @@ function mA(e, t, { threshold: n = 0.15 } = {}) { }), e.addEventListener("pause", () => g(!1), { signal: i.signal, passive: !0 - }), e.addEventListener("timeupdate", C, { + }), e.addEventListener("timeupdate", W, { signal: i.signal, passive: !0 - }), e.addEventListener("seeking", C, { signal: i.signal, passive: !0 }), e.addEventListener("seeked", C, { signal: i.signal, passive: !0 }), e.addEventListener("ended", C, { signal: i.signal, passive: !0 }), e.addEventListener("volumechange", A, { signal: i.signal, passive: !0 }), e.addEventListener("ratechange", p, { signal: i.signal, passive: !0 }); + }), e.addEventListener("seeking", W, { signal: i.signal, passive: !0 }), e.addEventListener("seeked", W, { signal: i.signal, passive: !0 }), e.addEventListener("ended", W, { signal: i.signal, passive: !0 }), e.addEventListener("volumechange", y, { signal: i.signal, passive: !0 }), e.addEventListener("ratechange", p, { signal: i.signal, passive: !0 }); try { - for (const b of y) + for (const b of A) try { b.addEventListener( "ended", () => { - var L, h; - if (!S) { + var L, C; + if (!h) { try { - S = !0, b.currentTime = Number(e.currentTime) || 0; + h = !0, b.currentTime = Number(e.currentTime) || 0; } catch (G) { (L = console.debug) == null || L.call(console, G); } finally { - S = !1; + h = !1; } try { - e.paused || Z(b); + e.paused || S(b); } catch (G) { - (h = console.debug) == null || h.call(console, G); + (C = console.debug) == null || C.call(console, G); } } }, @@ -14239,9 +14266,9 @@ function mA(e, t, { threshold: n = 0.15 } = {}) { (s = console.debug) == null || s.call(console, b); } try { - for (const b of y) + for (const b of A) try { - b.addEventListener("loadedmetadata", C, { + b.addEventListener("loadedmetadata", W, { signal: i.signal, passive: !0, once: !0 @@ -14252,12 +14279,12 @@ function mA(e, t, { threshold: n = 0.15 } = {}) { } catch (b) { (u = console.debug) == null || u.call(console, b); } - } catch (y) { + } catch (A) { if (uA()) try { - console.warn("[Viewer] follower video sync setup failed", y); - } catch (S) { - (I = console.debug) == null || I.call(console, S); + console.warn("[Viewer] follower video sync setup failed", A); + } catch (h) { + (I = console.debug) == null || I.call(console, h); } } return i; @@ -14272,18 +14299,18 @@ function gA({ clearCanvas: l } = {}) { const a = () => { - var b, L, h; + var b, L, C; try { const G = n == null ? void 0 : n.mode; - return G === (i == null ? void 0 : i.AB_COMPARE) ? ((b = t == null ? void 0 : t.querySelector) == null ? void 0 : b.call(t, ".mjr-viewer-ab")) || t || null : G === (i == null ? void 0 : i.SIDE_BY_SIDE) ? ((L = t == null ? void 0 : t.querySelector) == null ? void 0 : L.call(t, ".mjr-viewer-sidebyside")) || t || null : ((h = t == null ? void 0 : t.querySelector) == null ? void 0 : h.call(t, ".mjr-viewer-single")) || t || null; + return G === (i == null ? void 0 : i.AB_COMPARE) ? ((b = t == null ? void 0 : t.querySelector) == null ? void 0 : b.call(t, ".mjr-viewer-ab")) || t || null : G === (i == null ? void 0 : i.SIDE_BY_SIDE) ? ((L = t == null ? void 0 : t.querySelector) == null ? void 0 : L.call(t, ".mjr-viewer-sidebyside")) || t || null : ((C = t == null ? void 0 : t.querySelector) == null ? void 0 : C.call(t, ".mjr-viewer-single")) || t || null; } catch { return t || null; } }, c = (b, L) => { try { if (!b) return L || null; - const h = n == null ? void 0 : n.mode; - if (h === (i == null ? void 0 : i.SIDE_BY_SIDE) || h === (i == null ? void 0 : i.AB_COMPARE)) { + const C = n == null ? void 0 : n.mode; + if (C === (i == null ? void 0 : i.SIDE_BY_SIDE) || C === (i == null ? void 0 : i.AB_COMPARE)) { let G = b; for (; G && G !== L && G.parentElement; ) { if (G.parentElement === L) return G; @@ -14296,166 +14323,166 @@ function gA({ return L || t || null; } }, s = (b) => { - var L, h, G, W, f; + var L, C, G, Z, f; try { const X = (L = b == null ? void 0 : b.dataset) == null ? void 0 : L.mjrAssetId; - if (X == null || X === "") return ((h = n == null ? void 0 : n.assets) == null ? void 0 : h[n == null ? void 0 : n.currentIndex]) || null; + if (X == null || X === "") return ((C = n == null ? void 0 : n.assets) == null ? void 0 : C[n == null ? void 0 : n.currentIndex]) || null; const x = Array.isArray(n == null ? void 0 : n.assets) ? n.assets : []; - for (const T of x) + for (const K of x) try { - if ((T == null ? void 0 : T.id) != null && String(T.id) === String(X)) return T; - } catch (v) { - (G = console.debug) == null || G.call(console, v); + if ((K == null ? void 0 : K.id) != null && String(K.id) === String(X)) return K; + } catch (j) { + (G = console.debug) == null || G.call(console, j); } - return ((W = n == null ? void 0 : n.assets) == null ? void 0 : W[n == null ? void 0 : n.currentIndex]) || null; + return ((Z = n == null ? void 0 : n.assets) == null ? void 0 : Z[n == null ? void 0 : n.currentIndex]) || null; } catch { return ((f = n == null ? void 0 : n.assets) == null ? void 0 : f[n == null ? void 0 : n.currentIndex]) || null; } }, d = (b, L = null) => { - var h, G, W, f; + var C, G, Z, f; try { if (!b) return { w: 0, h: 0 }; if (b instanceof HTMLCanvasElement) { - const T = Number(b._mjrNaturalW) || Number(b.width) || 0, v = Number(b._mjrNaturalH) || Number(b.height) || 0; - if (T > 0 && v > 0) return { w: T, h: v }; + const K = Number(b._mjrNaturalW) || Number(b.width) || 0, j = Number(b._mjrNaturalH) || Number(b.height) || 0; + if (K > 0 && j > 0) return { w: K, h: j }; } const X = Number(b.videoWidth) || Number(b.naturalWidth) || 0, x = Number(b.videoHeight) || Number(b.naturalHeight) || 0; if (X > 0 && x > 0) return { w: X, h: x }; try { - const T = Number(L == null ? void 0 : L.width) || 0, v = Number(L == null ? void 0 : L.height) || 0; - if (T > 0 && v > 0) return { w: T, h: v }; - } catch (T) { - (h = console.debug) == null || h.call(console, T); + const K = Number(L == null ? void 0 : L.width) || 0, j = Number(L == null ? void 0 : L.height) || 0; + if (K > 0 && j > 0) return { w: K, h: j }; + } catch (K) { + (C = console.debug) == null || C.call(console, K); } try { - const T = Number(n == null ? void 0 : n._mediaW) || 0, v = Number(n == null ? void 0 : n._mediaH) || 0; - if (T > 0 && v > 0) return { w: T, h: v }; - } catch (T) { - (G = console.debug) == null || G.call(console, T); + const K = Number(n == null ? void 0 : n._mediaW) || 0, j = Number(n == null ? void 0 : n._mediaH) || 0; + if (K > 0 && j > 0) return { w: K, h: j }; + } catch (K) { + (G = console.debug) == null || G.call(console, K); } try { - const T = ((W = n == null ? void 0 : n.assets) == null ? void 0 : W[n == null ? void 0 : n.currentIndex]) || null, v = Number(T == null ? void 0 : T.width) || 0, w = Number(T == null ? void 0 : T.height) || 0; - if (v > 0 && w > 0) return { w: v, h: w }; - } catch (T) { - (f = console.debug) == null || f.call(console, T); + const K = ((Z = n == null ? void 0 : n.assets) == null ? void 0 : Z[n == null ? void 0 : n.currentIndex]) || null, j = Number(K == null ? void 0 : K.width) || 0, w = Number(K == null ? void 0 : K.height) || 0; + if (j > 0 && w > 0) return { w: j, h: w }; + } catch (K) { + (f = console.debug) == null || f.call(console, K); } return { w: 0, h: 0 }; } catch { return { w: 0, h: 0 }; } - }, u = (b, L, h, G) => { + }, u = (b, L, C, G) => { try { - const W = Number(b) || 0, f = Number(L) || 0, X = Number(h) || 0, x = Number(G) || 0; - if (!(W > 0 && f > 0 && X > 0 && x > 0)) return { x: 0, y: 0, w: W, h: f }; - const T = X / x; - if (!Number.isFinite(T) || T <= 0) return { x: 0, y: 0, w: W, h: f }; - const v = f, w = f * T; - return { x: (W - w) / 2, y: 0, w, h: v }; + const Z = Number(b) || 0, f = Number(L) || 0, X = Number(C) || 0, x = Number(G) || 0; + if (!(Z > 0 && f > 0 && X > 0 && x > 0)) return { x: 0, y: 0, w: Z, h: f }; + const K = X / x; + if (!Number.isFinite(K) || K <= 0) return { x: 0, y: 0, w: Z, h: f }; + const j = f, w = f * K; + return { x: (Z - w) / 2, y: 0, w, h: j }; } catch { return { x: 0, y: 0, w: Number(b) || 0, h: Number(L) || 0 }; } - }, I = (b, L, h, G, W) => { + }, I = (b, L, C, G, Z) => { try { - const f = Math.max(0.1, Math.min(16, Number(h) || 1)), X = Number(L == null ? void 0 : L.x) || 0, x = Number(L == null ? void 0 : L.y) || 0, T = Number(b == null ? void 0 : b.x) || 0, v = Number(b == null ? void 0 : b.y) || 0, w = Number(b == null ? void 0 : b.w) || 0, R = Number(b == null ? void 0 : b.h) || 0, Y = Number(G) || 0, F = Number(W) || 0; + const f = Math.max(0.1, Math.min(16, Number(C) || 1)), X = Number(L == null ? void 0 : L.x) || 0, x = Number(L == null ? void 0 : L.y) || 0, K = Number(b == null ? void 0 : b.x) || 0, j = Number(b == null ? void 0 : b.y) || 0, w = Number(b == null ? void 0 : b.w) || 0, R = Number(b == null ? void 0 : b.h) || 0, V = Number(G) || 0, O = Number(Z) || 0; return { - x: X + (T - X) * f + Y, - y: x + (v - x) * f + F, + x: X + (K - X) * f + V, + y: x + (j - x) * f + O, w: w * f, h: R * f }; } catch { return { x: 0, y: 0, w: 0, h: 0 }; } - }, y = (b, L, h, G) => { - var W; + }, A = (b, L, C, G) => { + var Z; try { - const f = L || {}, X = Number(f.x) || 0, x = Number(f.y) || 0, T = Number(f.w) || 0, v = Number(f.h) || 0; - if (!(T > 8 && v > 8)) return; - const w = String(h || ""); + const f = L || {}, X = Number(f.x) || 0, x = Number(f.y) || 0, K = Number(f.w) || 0, j = Number(f.h) || 0; + if (!(K > 8 && j > 8)) return; + const w = String(C || ""); if (!w) return; - const R = Math.max(6, Math.round(6 * G)), Y = Math.max(3, Math.round(3 * G)), F = Math.max(11, Math.round(11 * G)); - b.save(), b.font = `${F}px var(--comfy-font, ui-sans-serif, system-ui)`, b.textAlign = "left", b.textBaseline = "top"; - const V = Math.ceil(b.measureText(w).width) + R * 2, k = F + Y * 2, K = X + Math.max(2, Math.round(8 * G)), z = x + Math.max(2, Math.round(8 * G)); + const R = Math.max(6, Math.round(6 * G)), V = Math.max(3, Math.round(3 * G)), O = Math.max(11, Math.round(11 * G)); + b.save(), b.font = `${O}px var(--comfy-font, ui-sans-serif, system-ui)`, b.textAlign = "left", b.textBaseline = "top"; + const Y = Math.ceil(b.measureText(w).width) + R * 2, N = O + V * 2, U = X + Math.max(2, Math.round(8 * G)), z = x + Math.max(2, Math.round(8 * G)); b.fillStyle = "rgba(0,0,0,0.55)", b.strokeStyle = "rgba(255,255,255,0.18)", b.lineWidth = Math.max(1, Math.round(1 * G)), b.beginPath(); - const B = Math.max(6, Math.round(8 * G)); - b.moveTo(K + B, z), b.arcTo(K + V, z, K + V, z + k, B), b.arcTo(K + V, z + k, K, z + k, B), b.arcTo(K, z + k, K, z, B), b.arcTo(K, z, K + V, z, B), b.closePath(), b.fill(), b.stroke(), b.fillStyle = "rgba(255,255,255,0.92)", b.fillText(w, K + R, z + Y), b.restore(); + const T = Math.max(6, Math.round(8 * G)); + b.moveTo(U + T, z), b.arcTo(U + Y, z, U + Y, z + N, T), b.arcTo(U + Y, z + N, U, z + N, T), b.arcTo(U, z + N, U, z, T), b.arcTo(U, z, U + Y, z, T), b.closePath(), b.fill(), b.stroke(), b.fillStyle = "rgba(255,255,255,0.92)", b.fillText(w, U + R, z + V), b.restore(); } catch { try { b.restore(); } catch (f) { - (W = console.debug) == null || W.call(console, f); + (Z = console.debug) == null || Z.call(console, f); } } - }, S = () => { + }, h = () => { var b; try { const L = r == null ? void 0 : r(); if (!L) return { w: 0, h: 0, dpr: 1 }; - const h = Math.max(1, Math.min(3, Number(window.devicePixelRatio) || 1)), G = Math.max(1, Math.floor(L.width * h)), W = Math.max(1, Math.floor(L.height * h)); + const C = Math.max(1, Math.min(3, Number(window.devicePixelRatio) || 1)), G = Math.max(1, Math.floor(L.width * C)), Z = Math.max(1, Math.floor(L.height * C)); try { - (e == null ? void 0 : e.width) !== G && (e.width = G), (e == null ? void 0 : e.height) !== W && (e.height = W); + (e == null ? void 0 : e.width) !== G && (e.width = G), (e == null ? void 0 : e.height) !== Z && (e.height = Z); } catch (f) { (b = console.debug) == null || b.call(console, f); } - return { w: G, h: W, dpr: h }; + return { w: G, h: Z, dpr: C }; } catch { return { w: 0, h: 0, dpr: 1 }; } - }, Z = (b, L, h) => { + }, S = (b, L, C) => { try { const G = String(b || "image"); if (G === "image") { - const W = d(L), f = (Number(W.w) || 0) / (Number(W.h) || 1); + const Z = d(L), f = (Number(Z.w) || 0) / (Number(Z.h) || 1); if (Number.isFinite(f) && f > 0) return f; - const X = (Number(h == null ? void 0 : h.width) || 0) / (Number(h == null ? void 0 : h.height) || 1); + const X = (Number(C == null ? void 0 : C.width) || 0) / (Number(C == null ? void 0 : C.height) || 1); return Number.isFinite(X) && X > 0 ? X : 1; } return G === "16:9" ? 1.7777777777777777 : G === "9:16" ? 0.5625 : G === "1:1" ? 1 : G === "4:3" ? 1.3333333333333333 : G === "2.39" ? 2.39 : 1; } catch { return 1; } - }, C = (b, L, h) => { + }, W = (b, L, C) => { try { - const G = Number(b) || 0, W = Number(L) || 0, f = Number(h) || 1; - if (!(G > 0 && W > 0 && f > 0)) return { x: 0, y: 0, w: G, h: W }; - const X = G / W; - let x = G, T = W; - f >= X ? (x = G, T = G / f) : (T = W, x = W * f); - const v = (G - x) / 2, w = (W - T) / 2; - return { x: v, y: w, w: x, h: T }; + const G = Number(b) || 0, Z = Number(L) || 0, f = Number(C) || 1; + if (!(G > 0 && Z > 0 && f > 0)) return { x: 0, y: 0, w: G, h: Z }; + const X = G / Z; + let x = G, K = Z; + f >= X ? (x = G, K = G / f) : (K = Z, x = Z * f); + const j = (G - x) / 2, w = (Z - K) / 2; + return { x: j, y: w, w: x, h: K }; } catch { return { x: 0, y: 0, w: Number(b) || 0, h: Number(L) || 0 }; } - }, g = (b, L, h) => { + }, g = (b, L, C) => { var G; try { - const W = Math.max(0, Math.min(0.92, Number(h))); - if (!(W > 0)) return; - b.save(), b.globalCompositeOperation = "source-over", b.fillStyle = `rgba(0,0,0,${W})`, b.fillRect(0, 0, e.width, e.height), b.globalCompositeOperation = "destination-out", b.fillStyle = "rgba(0,0,0,1)"; + const Z = Math.max(0, Math.min(0.92, Number(C))); + if (!(Z > 0)) return; + b.save(), b.globalCompositeOperation = "source-over", b.fillStyle = `rgba(0,0,0,${Z})`, b.fillRect(0, 0, e.width, e.height), b.globalCompositeOperation = "destination-out", b.fillStyle = "rgba(0,0,0,1)"; const f = Array.isArray(L) ? L : [L]; for (const X of f) { if (!X) continue; - const x = Number(X.x) || 0, T = Number(X.y) || 0, v = Number(X.w) || 0, w = Number(X.h) || 0; - v > 1 && w > 1 && b.fillRect(x, T, v, w); + const x = Number(X.x) || 0, K = Number(X.y) || 0, j = Number(X.w) || 0, w = Number(X.h) || 0; + j > 1 && w > 1 && b.fillRect(x, K, j, w); } b.restore(); } catch { try { b.restore(); - } catch (W) { - (G = console.debug) == null || G.call(console, W); + } catch (Z) { + (G = console.debug) == null || G.call(console, Z); } } - }, A = (b, L, h) => { - var G, W, f; + }, y = (b, L, C) => { + var G, Z, f; try { b.save(); try { - (G = b.setLineDash) == null || G.call(b, [Math.max(2, 4 * h), Math.max(2, 3 * h)]); + (G = b.setLineDash) == null || G.call(b, [Math.max(2, 4 * C), Math.max(2, 3 * C)]); } catch (X) { - (W = console.debug) == null || W.call(console, X); + (Z = console.debug) == null || Z.call(console, X); } - b.strokeStyle = "rgba(255,255,255,0.22)", b.lineWidth = Math.max(1, Math.floor(1 * h)), b.strokeRect(L.x + 0.5, L.y + 0.5, L.w - 1, L.h - 1), b.restore(); + b.strokeStyle = "rgba(255,255,255,0.22)", b.lineWidth = Math.max(1, Math.floor(1 * C)), b.strokeRect(L.x + 0.5, L.y + 0.5, L.w - 1, L.h - 1), b.restore(); } catch { try { b.restore(); @@ -14464,163 +14491,163 @@ function gA({ } } }; - return { ensureCanvasSize: S, redrawGrid: ({ w: b, h: L, dpr: h } = {}) => { - var G, W, f, X, x, T, v, w, R, Y, F, N; + return { ensureCanvasSize: h, redrawGrid: ({ w: b, h: L, dpr: C } = {}) => { + var G, Z, f, X, x, K, j, w, R, V, O, k; try { - const V = (G = e == null ? void 0 : e.getContext) == null ? void 0 : G.call(e, "2d"); - if (!V) return; + const Y = (G = e == null ? void 0 : e.getContext) == null ? void 0 : G.call(e, "2d"); + if (!Y) return; try { - l == null || l(V, b, L); + l == null || l(Y, b, L); } catch (M) { - (W = console.debug) == null || W.call(console, M); + (Z = console.debug) == null || Z.call(console, M); } - const k = r == null ? void 0 : r(); - if (!k) return; - const K = Number(k.width) || 0, z = Number(k.height) || 0; - if (!(K > 1 && z > 1)) return; - const B = a(), J = n == null ? void 0 : n.mode, P = (() => { + const N = r == null ? void 0 : r(); + if (!N) return; + const U = Number(N.width) || 0, z = Number(N.height) || 0; + if (!(U > 1 && z > 1)) return; + const T = a(), J = n == null ? void 0 : n.mode, P = (() => { var M; try { if (J === (i == null ? void 0 : i.SINGLE)) return [o == null ? void 0 : o()].filter(Boolean); - const j = ((M = B == null ? void 0 : B.querySelectorAll) == null ? void 0 : M.call(B, ".mjr-viewer-media")) || []; - return Array.from(j || []).filter(Boolean); + const v = ((M = T == null ? void 0 : T.querySelectorAll) == null ? void 0 : M.call(T, ".mjr-viewer-media")) || []; + return Array.from(v || []).filter(Boolean); } catch { return [o == null ? void 0 : o()].filter(Boolean); } })(); if (!P.length) return; - const H = [], $ = []; + const E = [], $ = []; for (const M of P) try { - const j = c(M, B), O = ((f = j == null ? void 0 : j.getBoundingClientRect) == null ? void 0 : f.call(j)) || null; - if (!O) continue; - const D = Number(O.width) || 0, q = Number(O.height) || 0; + const v = c(M, T), F = ((f = v == null ? void 0 : v.getBoundingClientRect) == null ? void 0 : f.call(v)) || null; + if (!F) continue; + const D = Number(F.width) || 0, q = Number(F.height) || 0; if (!(D > 1 && q > 1)) continue; - const ee = s(M), ce = d(M, ee), ue = u(D, q, ce.w, ce.h), U = Z(n == null ? void 0 : n.overlayFormat, M, { + const ee = s(M), ae = d(M, ee), ue = u(D, q, ae.w, ae.h), B = S(n == null ? void 0 : n.overlayFormat, M, { width: ue.w, height: ue.h - }), Q = C(ue.w, ue.h, U), _ = (Number(O.left) || 0) - (Number(k.left) || 0), le = (Number(O.top) || 0) - (Number(k.top) || 0), de = { + }), Q = W(ue.w, ue.h, B), _ = (Number(F.left) || 0) - (Number(N.left) || 0), le = (Number(F.top) || 0) - (Number(N.top) || 0), ce = { x: _ + (ue.x || 0), y: le + (ue.y || 0), w: ue.w || D, h: ue.h || q - }, se = { - x: de.x + (Q.x || 0), - y: de.y + (Q.y || 0), - w: Q.w || de.w, - h: Q.h || de.h - }, ge = { x: _ + D / 2, y: le + q / 2 }, je = Number(n == null ? void 0 : n.zoom) || 1, Se = (Number(n == null ? void 0 : n.panX) || 0) / je, ke = (Number(n == null ? void 0 : n.panY) || 0) / je, we = I( - de, + }, de = { + x: ce.x + (Q.x || 0), + y: ce.y + (Q.y || 0), + w: Q.w || ce.w, + h: Q.h || ce.h + }, ge = { x: _ + D / 2, y: le + q / 2 }, Le = Number(n == null ? void 0 : n.zoom) || 1, xe = (Number(n == null ? void 0 : n.panX) || 0) / Le, Xe = (Number(n == null ? void 0 : n.panY) || 0) / Le, Me = I( + ce, ge, - je, - Se, - ke - ), Je = I(se, ge, je, Se, ke), $e = { - x: we.x * h, - y: we.y * h, - w: we.w * h, - h: we.h * h, + Le, + xe, + Xe + ), Fe = I(de, ge, Le, xe, Xe), it = { + x: Me.x * C, + y: Me.y * C, + w: Me.w * C, + h: Me.h * C, _sizeLabel: (() => { - var Ue; + var Pe; try { - const Te = Number(ee == null ? void 0 : ee.width) || Number(ce.w) || 0, Oe = Number(ee == null ? void 0 : ee.height) || Number(ce.h) || 0; - if (Te > 0 && Oe > 0) return `${Te}x${Oe}`; - } catch (Te) { - (Ue = console.debug) == null || Ue.call(console, Te); + const Re = Number(ee == null ? void 0 : ee.width) || Number(ae.w) || 0, rt = Number(ee == null ? void 0 : ee.height) || Number(ae.h) || 0; + if (Re > 0 && rt > 0) return `${Re}x${rt}`; + } catch (Re) { + (Pe = console.debug) == null || Pe.call(console, Re); } return ""; })() }, qe = { - x: Je.x * h, - y: Je.y * h, - w: Je.w * h, - h: Je.h * h + x: Fe.x * C, + y: Fe.y * C, + w: Fe.w * C, + h: Fe.h * C }; - $e.w > 1 && $e.h > 1 && $.push($e), qe.w > 1 && qe.h > 1 && H.push(qe); - } catch (j) { - (X = console.debug) == null || X.call(console, j); + it.w > 1 && it.h > 1 && $.push(it), qe.w > 1 && qe.h > 1 && E.push(qe); + } catch (v) { + (X = console.debug) == null || X.call(console, v); } - if (!H.length && !$.length) return; - const E = H.length ? H : $, oe = E[0] || null; + if (!E.length && !$.length) return; + const H = E.length ? E : $, ne = H[0] || null; try { if (n != null && n.overlayMaskEnabled) { - g(V, E, (n == null ? void 0 : n.overlayMaskOpacity) ?? 0.65); - for (const M of E) + g(Y, H, (n == null ? void 0 : n.overlayMaskOpacity) ?? 0.65); + for (const M of H) try { - A(V, M, h); - } catch (j) { - (x = console.debug) == null || x.call(console, j); + y(Y, M, C); + } catch (v) { + (x = console.debug) == null || x.call(console, v); } } } catch (M) { - (T = console.debug) == null || T.call(console, M); + (K = console.debug) == null || K.call(console, M); } try { if (n != null && n.hudEnabled && (n == null ? void 0 : n.mode) === (i == null ? void 0 : i.SINGLE)) for (const M of $) { try { - V.save(), V.strokeStyle = "rgba(255,255,255,0.22)", V.lineWidth = Math.max(1, Math.floor(1 * h)), V.strokeRect(M.x + 0.5, M.y + 0.5, M.w - 1, M.h - 1), V.restore(); + Y.save(), Y.strokeStyle = "rgba(255,255,255,0.22)", Y.lineWidth = Math.max(1, Math.floor(1 * C)), Y.strokeRect(M.x + 0.5, M.y + 0.5, M.w - 1, M.h - 1), Y.restore(); } catch { try { - V.restore(); - } catch (j) { - (v = console.debug) == null || v.call(console, j); + Y.restore(); + } catch (v) { + (j = console.debug) == null || j.call(console, v); } } try { - y(V, M, M._sizeLabel || "", h); - } catch (j) { - (w = console.debug) == null || w.call(console, j); + A(Y, M, M._sizeLabel || "", C); + } catch (v) { + (w = console.debug) == null || w.call(console, v); } } } catch (M) { (R = console.debug) == null || R.call(console, M); } - if ((n == null ? void 0 : n.mode) !== (i == null ? void 0 : i.SINGLE) || ((n == null ? void 0 : n.gridMode) || 0) === 0 || !oe) return; + if ((n == null ? void 0 : n.mode) !== (i == null ? void 0 : i.SINGLE) || ((n == null ? void 0 : n.gridMode) || 0) === 0 || !ne) return; try { - V.save(), V.translate(oe.x, oe.y), V.strokeStyle = "rgba(255, 255, 255, 0.22)", V.lineWidth = Math.max(2, Math.round(1.25 * h)); - const M = (j, O, D, q) => { + Y.save(), Y.translate(ne.x, ne.y), Y.strokeStyle = "rgba(255, 255, 255, 0.22)", Y.lineWidth = Math.max(2, Math.round(1.25 * C)); + const M = (v, F, D, q) => { var ee; try { - V.beginPath(), V.moveTo(Math.round(j) + 0.5, Math.round(O) + 0.5), V.lineTo(Math.round(D) + 0.5, Math.round(q) + 0.5), V.stroke(); - } catch (ce) { - (ee = console.debug) == null || ee.call(console, ce); + Y.beginPath(), Y.moveTo(Math.round(v) + 0.5, Math.round(F) + 0.5), Y.lineTo(Math.round(D) + 0.5, Math.round(q) + 0.5), Y.stroke(); + } catch (ae) { + (ee = console.debug) == null || ee.call(console, ae); } }; if (n.gridMode === 1) - M(oe.w / 3, 0, oe.w / 3, oe.h), M(2 * oe.w / 3, 0, 2 * oe.w / 3, oe.h), M(0, oe.h / 3, oe.w, oe.h / 3), M(0, 2 * oe.h / 3, oe.w, 2 * oe.h / 3); + M(ne.w / 3, 0, ne.w / 3, ne.h), M(2 * ne.w / 3, 0, 2 * ne.w / 3, ne.h), M(0, ne.h / 3, ne.w, ne.h / 3), M(0, 2 * ne.h / 3, ne.w, 2 * ne.h / 3); else if (n.gridMode === 2) - M(oe.w / 2, 0, oe.w / 2, oe.h), M(0, oe.h / 2, oe.w, oe.h / 2); + M(ne.w / 2, 0, ne.w / 2, ne.h), M(0, ne.h / 2, ne.w, ne.h / 2); else if (n.gridMode === 3) { - const j = (O, D) => { + const v = (F, D) => { var q, ee; try { - V.save(), V.strokeStyle = `rgba(255,255,255,${D})`; - const ce = Math.round(oe.w * O), ue = Math.round(oe.h * O), U = Math.round(oe.w * (1 - O * 2)), Q = Math.round(oe.h * (1 - O * 2)); - V.strokeRect(ce + 0.5, ue + 0.5, U, Q); - } catch (ce) { - (q = console.debug) == null || q.call(console, ce); + Y.save(), Y.strokeStyle = `rgba(255,255,255,${D})`; + const ae = Math.round(ne.w * F), ue = Math.round(ne.h * F), B = Math.round(ne.w * (1 - F * 2)), Q = Math.round(ne.h * (1 - F * 2)); + Y.strokeRect(ae + 0.5, ue + 0.5, B, Q); + } catch (ae) { + (q = console.debug) == null || q.call(console, ae); } finally { try { - V.restore(); - } catch (ce) { - (ee = console.debug) == null || ee.call(console, ce); + Y.restore(); + } catch (ae) { + (ee = console.debug) == null || ee.call(console, ae); } } }; - j(0.05, 0.24), j(0.1, 0.18); - } else n.gridMode === 4 && (M(oe.w * 0.382, 0, oe.w * 0.382, oe.h), M(oe.w * 0.618, 0, oe.w * 0.618, oe.h), M(0, oe.h * 0.382, oe.w, oe.h * 0.382), M(0, oe.h * 0.618, oe.w, oe.h * 0.618)); + v(0.05, 0.24), v(0.1, 0.18); + } else n.gridMode === 4 && (M(ne.w * 0.382, 0, ne.w * 0.382, ne.h), M(ne.w * 0.618, 0, ne.w * 0.618, ne.h), M(0, ne.h * 0.382, ne.w, ne.h * 0.382), M(0, ne.h * 0.618, ne.w, ne.h * 0.618)); } catch (M) { - (Y = console.debug) == null || Y.call(console, M); + (V = console.debug) == null || V.call(console, M); } finally { try { - V.restore(); + Y.restore(); } catch (M) { - (F = console.debug) == null || F.call(console, M); + (O = console.debug) == null || O.call(console, M); } } - } catch (V) { - (N = console.debug) == null || N.call(console, V); + } catch (Y) { + (k = console.debug) == null || k.call(console, Y); } } }; } @@ -14638,106 +14665,106 @@ function IA({ onLoupeRedraw: d, lifecycle: u } = {}) { - var G, W; - const I = (u == null ? void 0 : u.unsubs) || [], y = document.createElement("canvas"); - y.width = 1, y.height = 1; - let S = null; + var G, Z; + const I = (u == null ? void 0 : u.unsubs) || [], A = document.createElement("canvas"); + A.width = 1, A.height = 1; + let h = null; try { - S = y.getContext("2d", { willReadFrequently: !0 }); + h = A.getContext("2d", { willReadFrequently: !0 }); } catch (f) { (G = console.debug) == null || G.call(console, f); } - let Z = null, C = null, g = null; - const A = () => { + let S = null, W = null, g = null; + const y = () => { var f, X, x; try { c.style.display = "none"; - } catch (T) { - (f = console.debug) == null || f.call(console, T); + } catch (K) { + (f = console.debug) == null || f.call(console, K); } try { s.style.display = "none"; - } catch (T) { - (X = console.debug) == null || X.call(console, T); + } catch (K) { + (X = console.debug) == null || X.call(console, K); } try { n._probe = null; - } catch (T) { - (x = console.debug) == null || x.call(console, T); + } catch (K) { + (x = console.debug) == null || x.call(console, K); } }, p = (f) => { try { - const X = f == null ? void 0 : f.x, x = f == null ? void 0 : f.y, T = f == null ? void 0 : f.r, v = f == null ? void 0 : f.g, w = f == null ? void 0 : f.b, R = f == null ? void 0 : f.a, Y = Array.isArray(f == null ? void 0 : f.raw) ? f.raw : null, F = Array.isArray(f == null ? void 0 : f.lin) ? f.lin : null, N = Number(f == null ? void 0 : f.scale), V = (B) => { - const J = Number(B); + const X = f == null ? void 0 : f.x, x = f == null ? void 0 : f.y, K = f == null ? void 0 : f.r, j = f == null ? void 0 : f.g, w = f == null ? void 0 : f.b, R = f == null ? void 0 : f.a, V = Array.isArray(f == null ? void 0 : f.raw) ? f.raw : null, O = Array.isArray(f == null ? void 0 : f.lin) ? f.lin : null, k = Number(f == null ? void 0 : f.scale), Y = (T) => { + const J = Number(T); return Number.isFinite(J) ? J.toFixed(3) : "?"; - }, k = T != null && v != null && w != null ? `#${[T, v, w].map((B) => Math.max(0, Math.min(255, Number(B) || 0)).toString(16).padStart(2, "0")).join("")}` : "", K = Number.isFinite(N) && N > 0 && N < 0.999 ? ` (proc ${(N * 100).toFixed(0)}%)` : "", z = []; - return z.push(`X: ${X ?? "?"} Y: ${x ?? "?"}${K}`), z.push(`RGBA8: ${T ?? "?"} ${v ?? "?"} ${w ?? "?"} ${R ?? "?"}`), Y && Y.length >= 3 && z.push(`RGB: ${V(Y[0])} ${V(Y[1])} ${V(Y[2])}`), F && F.length >= 3 && z.push(`HDR: ${V(F[0])} ${V(F[1])} ${V(F[2])}`), k && z.push(k), z.join(` + }, N = K != null && j != null && w != null ? `#${[K, j, w].map((T) => Math.max(0, Math.min(255, Number(T) || 0)).toString(16).padStart(2, "0")).join("")}` : "", U = Number.isFinite(k) && k > 0 && k < 0.999 ? ` (proc ${(k * 100).toFixed(0)}%)` : "", z = []; + return z.push(`X: ${X ?? "?"} Y: ${x ?? "?"}${U}`), z.push(`RGBA8: ${K ?? "?"} ${j ?? "?"} ${w ?? "?"} ${R ?? "?"}`), V && V.length >= 3 && z.push(`RGB: ${Y(V[0])} ${Y(V[1])} ${Y(V[2])}`), O && O.length >= 3 && z.push(`HDR: ${Y(O[0])} ${Y(O[1])} ${Y(O[2])}`), N && z.push(N), z.join(` `); } catch { return ""; } }, b = (f, X, x) => { - var T, v; - if (!S) return null; + var K, j; + if (!h) return null; try { - S.clearRect(0, 0, 1, 1); + h.clearRect(0, 0, 1, 1); } catch (w) { - (T = console.debug) == null || T.call(console, w); + (K = console.debug) == null || K.call(console, w); } try { let w = Number(X) || 0, R = Number(x) || 0; if ((f == null ? void 0 : f.tagName) === "CANVAS") { - const F = Number(f._mjrPixelScale) || 1; - w = Math.floor(w * F), R = Math.floor(R * F); + const O = Number(f._mjrPixelScale) || 1; + w = Math.floor(w * O), R = Math.floor(R * O); } - S.drawImage(f, w, R, 1, 1, 0, 0, 1, 1); - const Y = (v = S.getImageData(0, 0, 1, 1)) == null ? void 0 : v.data; - return !Y || Y.length < 4 ? null : { r: Y[0], g: Y[1], b: Y[2], a: Y[3] }; + h.drawImage(f, w, R, 1, 1, 0, 0, 1, 1); + const V = (j = h.getImageData(0, 0, 1, 1)) == null ? void 0 : j.data; + return !V || V.length < 4 ? null : { r: V[0], g: V[1], b: V[2], a: V[3] }; } catch { return null; } }, L = (f, X) => { - var x, T, v, w, R, Y, F; + var x, K, j, w, R, V, O; try { - if (((x = e == null ? void 0 : e.style) == null ? void 0 : x.display) === "none" || (n == null ? void 0 : n.mode) !== (i == null ? void 0 : i.SINGLE) || !(n != null && n.probeEnabled) && !(n != null && n.loupeEnabled)) return A(); - const N = o == null ? void 0 : o(); - if (!N) return A(); - const V = N.getBoundingClientRect(); - if (!V || !(V.width > 2 && V.height > 2)) return A(); - const k = (Number(f) || 0) - V.left, K = (Number(X) || 0) - V.top; - if (k < 0 || K < 0 || k > V.width || K > V.height) return A(); - const { w: z, h: B } = (r == null ? void 0 : r(N)) || { w: 0, h: 0 }; - if (!(z > 0 && B > 0)) return A(); - const J = k / V.width, P = K / V.height, H = Math.max(0, Math.min(z - 1, Math.floor(J * z))), $ = Math.max(0, Math.min(B - 1, Math.floor(P * B))); - let E = null; + if (((x = e == null ? void 0 : e.style) == null ? void 0 : x.display) === "none" || (n == null ? void 0 : n.mode) !== (i == null ? void 0 : i.SINGLE) || !(n != null && n.probeEnabled) && !(n != null && n.loupeEnabled)) return y(); + const k = o == null ? void 0 : o(); + if (!k) return y(); + const Y = k.getBoundingClientRect(); + if (!Y || !(Y.width > 2 && Y.height > 2)) return y(); + const N = (Number(f) || 0) - Y.left, U = (Number(X) || 0) - Y.top; + if (N < 0 || U < 0 || N > Y.width || U > Y.height) return y(); + const { w: z, h: T } = (r == null ? void 0 : r(k)) || { w: 0, h: 0 }; + if (!(z > 0 && T > 0)) return y(); + const J = N / Y.width, P = U / Y.height, E = Math.max(0, Math.min(z - 1, Math.floor(J * z))), $ = Math.max(0, Math.min(T - 1, Math.floor(P * T))); + let H = null; if (n != null && n.probeEnabled) { try { - const oe = N == null ? void 0 : N._mjrProc; - if (oe != null && oe.sampleAtOriginal) { - const M = oe.sampleAtOriginal(H, $); - M && (E = { x: H, y: $, ...M }); + const ne = k == null ? void 0 : k._mjrProc; + if (ne != null && ne.sampleAtOriginal) { + const M = ne.sampleAtOriginal(E, $); + M && (H = { x: E, y: $, ...M }); } - } catch (oe) { - (T = console.debug) == null || T.call(console, oe); + } catch (ne) { + (K = console.debug) == null || K.call(console, ne); } - if (!E) { - const oe = b(N, H, $); - oe && (E = { x: H, y: $, ...oe }); + if (!H) { + const ne = b(k, E, $); + ne && (H = { x: E, y: $, ...ne }); } } - E || (E = { x: H, y: $ }); + H || (H = { x: E, y: $ }); try { - n._probe = E; - } catch (oe) { - (v = console.debug) == null || v.call(console, oe); + n._probe = H; + } catch (ne) { + (j = console.debug) == null || j.call(console, ne); } if (n != null && n.probeEnabled) { try { - c.textContent = p(E), c.style.display = ""; - } catch (oe) { - (w = console.debug) == null || w.call(console, oe); + c.textContent = p(H), c.style.display = ""; + } catch (ne) { + (w = console.debug) == null || w.call(console, ne); } - bt( + It( () => a == null ? void 0 : a(c, f, X, { offsetX: 18, offsetY: 18 @@ -14746,69 +14773,69 @@ function IA({ } else try { c.style.display = "none"; - } catch (oe) { - (R = console.debug) == null || R.call(console, oe); + } catch (ne) { + (R = console.debug) == null || R.call(console, ne); } if (n != null && n.loupeEnabled) - bt(() => d == null ? void 0 : d(N, H, $, f, X)); + It(() => d == null ? void 0 : d(k, E, $, f, X)); else try { s.style.display = "none"; - } catch (oe) { - (Y = console.debug) == null || Y.call(console, oe); + } catch (ne) { + (V = console.debug) == null || V.call(console, ne); } - } catch (N) { - (F = console.debug) == null || F.call(console, N); + } catch (k) { + (O = console.debug) == null || O.call(console, k); } - }, h = (f, X) => { + }, C = (f, X) => { var x; - C = f, g = X; + W = f, g = X; try { - if (Z != null) return; - Z = requestAnimationFrame(() => { - Z = null, L(C, g); + if (S != null) return; + S = requestAnimationFrame(() => { + S = null, L(W, g); }); - } catch (T) { - (x = console.debug) == null || x.call(console, T); + } catch (K) { + (x = console.debug) == null || x.call(console, K); } }; try { if (t && !t._mjrProbeBound) { const f = (x) => { - var T; + var K; try { - h(x.clientX, x.clientY); - } catch (v) { - (T = console.debug) == null || T.call(console, v); + C(x.clientX, x.clientY); + } catch (j) { + (K = console.debug) == null || K.call(console, j); } }, X = () => { - A(); + y(); }; I.push( - Qe(t, "mousemove", f, { + $e(t, "mousemove", f, { passive: !0, capture: !0 }) ), I.push( - Qe(t, "mouseleave", X, { + $e(t, "mouseleave", X, { passive: !0, capture: !0 }) ), t._mjrProbeBound = !0; } } catch (f) { - (W = console.debug) == null || W.call(console, f); + (Z = console.debug) == null || Z.call(console, f); } return { - hide: A, + hide: y, dispose: () => { var f; try { - Z != null && cancelAnimationFrame(Z); + S != null && cancelAnimationFrame(S); } catch (X) { (f = console.debug) == null || f.call(console, X); } - Z = null, A(); + S = null, y(); } }; } @@ -14826,37 +14853,37 @@ function bA({ } catch (d) { (s = console.debug) == null || s.call(console, d); } - return { redraw: (d, u, I, y, S) => { - var Z, C, g, A; + return { redraw: (d, u, I, A, h) => { + var S, W, g, y; try { if (!(e != null && e.loupeEnabled) || !r || !d) return; const { w: p, h: b } = (i == null ? void 0 : i(d)) || { w: 0, h: 0 }; if (!(p > 0 && b > 0)) return; - const L = Math.max(48, Math.min(240, Number(e.loupeSize) || 120)), h = Math.max(2, Math.min(20, Number(e.loupeMagnification) || 8)); + const L = Math.max(48, Math.min(240, Number(e.loupeSize) || 120)), C = Math.max(2, Math.min(20, Number(e.loupeMagnification) || 8)); try { t.width !== L && (t.width = L), t.height !== L && (t.height = L); - } catch (F) { - (Z = console.debug) == null || Z.call(console, F); + } catch (O) { + (S = console.debug) == null || S.call(console, O); } - const G = Math.max(3, Math.floor(L / h)), W = (d == null ? void 0 : d.tagName) === "CANVAS" && Number(d._mjrPixelScale) || 1, f = (d == null ? void 0 : d.tagName) === "CANVAS" ? Number(d.width) || 0 : p, X = (d == null ? void 0 : d.tagName) === "CANVAS" ? Number(d.height) || 0 : b; + const G = Math.max(3, Math.floor(L / C)), Z = (d == null ? void 0 : d.tagName) === "CANVAS" && Number(d._mjrPixelScale) || 1, f = (d == null ? void 0 : d.tagName) === "CANVAS" ? Number(d.width) || 0 : p, X = (d == null ? void 0 : d.tagName) === "CANVAS" ? Number(d.height) || 0 : b; if (!(f > 0 && X > 0)) return; - const x = Math.max(1, Math.floor(G * W)), T = Math.floor(x / 2), v = Math.floor((Number(u) || 0) * W), w = Math.floor((Number(I) || 0) * W), R = Math.max(0, Math.min(f - x, v - T)), Y = Math.max(0, Math.min(X - x, w - T)); - r.imageSmoothingEnabled = !1, r.clearRect(0, 0, L, L), r.drawImage(d, R, Y, x, x, 0, 0, L, L), r.strokeStyle = "rgba(255,255,255,0.75)", r.lineWidth = 1, r.beginPath(), r.moveTo(L / 2 + 0.5, 0), r.lineTo(L / 2 + 0.5, L), r.moveTo(0, L / 2 + 0.5), r.lineTo(L, L / 2 + 0.5), r.stroke(); + const x = Math.max(1, Math.floor(G * Z)), K = Math.floor(x / 2), j = Math.floor((Number(u) || 0) * Z), w = Math.floor((Number(I) || 0) * Z), R = Math.max(0, Math.min(f - x, j - K)), V = Math.max(0, Math.min(X - x, w - K)); + r.imageSmoothingEnabled = !1, r.clearRect(0, 0, L, L), r.drawImage(d, R, V, x, x, 0, 0, L, L), r.strokeStyle = "rgba(255,255,255,0.75)", r.lineWidth = 1, r.beginPath(), r.moveTo(L / 2 + 0.5, 0), r.lineTo(L / 2 + 0.5, L), r.moveTo(0, L / 2 + 0.5), r.lineTo(L, L / 2 + 0.5), r.stroke(); try { n.style.display = "", n.style.width = `${L}px`, n.style.height = `${L}px`; - } catch (F) { - (C = console.debug) == null || C.call(console, F); + } catch (O) { + (W = console.debug) == null || W.call(console, O); } try { - o == null || o(n, y, S, { + o == null || o(n, A, h, { offsetX: 18, offsetY: -L - 18 }); - } catch (F) { - (g = console.debug) == null || g.call(console, F); + } catch (O) { + (g = console.debug) == null || g.call(console, O); } } catch (p) { - (A = console.debug) == null || A.call(console, p); + (y = console.debug) == null || y.call(console, p); } }, hide: () => { var d; @@ -14877,71 +14904,71 @@ function pA({ const r = /* @__PURE__ */ new Map(), l = (n == null ? void 0 : n.VIEWER_META_TTL_MS) ?? 3e4, a = (n == null ? void 0 : n.VIEWER_META_MAX_ENTRIES) ?? 500; let c = 0, s = null; const d = () => { - var C, g, A; + var W, g, y; if (r.size <= a) return; - const Z = Date.now(); + const S = Date.now(); try { for (const [p, b] of r.entries()) - b && Z - (b.at || 0) > l && r.delete(p); + b && S - (b.at || 0) > l && r.delete(p); } catch (p) { - (C = console.debug) == null || C.call(console, p); + (W = console.debug) == null || W.call(console, p); } if (!(r.size <= a)) try { const p = Array.from(r.entries()).sort( - (L, h) => { - var G, W; - return (((G = L == null ? void 0 : L[1]) == null ? void 0 : G.at) || 0) - (((W = h == null ? void 0 : h[1]) == null ? void 0 : W.at) || 0); + (L, C) => { + var G, Z; + return (((G = L == null ? void 0 : L[1]) == null ? void 0 : G.at) || 0) - (((Z = C == null ? void 0 : C[1]) == null ? void 0 : Z.at) || 0); } ), b = r.size - a; for (let L = 0; L < b; L++) { - const h = (g = p[L]) == null ? void 0 : g[0]; - h != null && r.delete(h); + const C = (g = p[L]) == null ? void 0 : g[0]; + C != null && r.delete(C); } } catch (p) { - (A = console.debug) == null || A.call(console, p); + (y = console.debug) == null || y.call(console, p); } - }, u = (Z, C) => { - var g, A; - if (!(!Z || !C || typeof C != "object")) { + }, u = (S, W) => { + var g, y; + if (!(!S || !W || typeof W != "object")) { try { - C.rating !== void 0 && (Z.rating = C.rating); + W.rating !== void 0 && (S.rating = W.rating); } catch (p) { (g = console.debug) == null || g.call(console, p); } try { - C.tags !== void 0 && (Z.tags = C.tags); + W.tags !== void 0 && (S.tags = W.tags); } catch (p) { - (A = console.debug) == null || A.call(console, p); + (y = console.debug) == null || y.call(console, p); } } - }, I = async (Z, { signal: C } = {}) => { + }, I = async (S, { signal: W } = {}) => { var b; - const g = Array.isArray(Z) ? Z : [], A = Date.now(), p = []; + const g = Array.isArray(S) ? S : [], y = Date.now(), p = []; for (const L of g) { - const h = L == null ? void 0 : L.id; - if (h == null) continue; - const G = String(h), W = r.get(G); - if (W && A - (W.at || 0) < l) { - u(L, W.data); + const C = L == null ? void 0 : L.id; + if (C == null) continue; + const G = String(C), Z = r.get(G); + if (Z && y - (Z.at || 0) < l) { + u(L, Z.data); continue; } - p.push(h); + p.push(C); } if (p.length) try { - const L = await (o == null ? void 0 : o(p, C ? { signal: C } : {})), h = Array.isArray(L == null ? void 0 : L.data) ? L.data : []; - for (const G of h) { - const W = G == null ? void 0 : G.id; - if (W == null) continue; - const f = String(W); - r.set(f, { at: A, data: G }); + const L = await (o == null ? void 0 : o(p, W ? { signal: W } : {})), C = Array.isArray(L == null ? void 0 : L.data) ? L.data : []; + for (const G of C) { + const Z = G == null ? void 0 : G.id; + if (Z == null) continue; + const f = String(Z); + r.set(f, { at: y, data: G }); } d(); for (const G of g) { - const W = G == null ? void 0 : G.id; - if (W == null) continue; - const f = r.get(String(W)); + const Z = G == null ? void 0 : G.id; + if (Z == null) continue; + const f = r.get(String(Z)); f && f.data && u(G, f.data); } } catch (L) { @@ -14950,77 +14977,77 @@ function pA({ }; return { hydrateVisibleMetadata: async () => { - var b, L, h, G; - const Z = (b = e == null ? void 0 : e.assets) == null ? void 0 : b[e == null ? void 0 : e.currentIndex], C = e == null ? void 0 : e.compareAsset, g = e == null ? void 0 : e.mode, A = ++c; + var b, L, C, G; + const S = (b = e == null ? void 0 : e.assets) == null ? void 0 : b[e == null ? void 0 : e.currentIndex], W = e == null ? void 0 : e.compareAsset, g = e == null ? void 0 : e.mode, y = ++c; try { (L = s == null ? void 0 : s.abort) == null || L.call(s); - } catch (W) { - (h = console.debug) == null || h.call(console, W); + } catch (Z) { + (C = console.debug) == null || C.call(console, Z); } s = new AbortController(); const p = s.signal; try { if (g === (t == null ? void 0 : t.SINGLE)) - return Z && await I([Z], { signal: p }), void 0; + return S && await I([S], { signal: p }), void 0; const f = (Array.isArray(e == null ? void 0 : e.assets) ? e.assets.slice(0, 4) : []).slice(); - C && f.push(C), await I(f, { signal: p }); - } catch (W) { - (G = console.debug) == null || G.call(console, W); + W && f.push(W), await I(f, { signal: p }); + } catch (Z) { + (G = console.debug) == null || G.call(console, Z); } }, - hydrateAssetMetadata: async (Z, { signal: C } = {}) => { + hydrateAssetMetadata: async (S, { signal: W } = {}) => { var L; - const g = Z == null ? void 0 : Z.id; + const g = S == null ? void 0 : S.id; if (g == null) return; - const A = String(g), p = Date.now(), b = r.get(A); + const y = String(g), p = Date.now(), b = r.get(y); if (b && p - (b.at || 0) < l) { - u(Z, b.data); + u(S, b.data); return; } try { - const h = await (i == null ? void 0 : i(g, C ? { signal: C } : {})); - h != null && h.ok && h.data && (r.set(A, { at: p, data: h.data }), d(), u(Z, h.data)); - } catch (h) { - (L = console.debug) == null || L.call(console, h); + const C = await (i == null ? void 0 : i(g, W ? { signal: W } : {})); + C != null && C.ok && C.data && (r.set(y, { at: p, data: C.data }), d(), u(S, C.data)); + } catch (C) { + (L = console.debug) == null || L.call(console, C); } }, hydrateAssetsMetadataBatch: I, - getCached: (Z) => { + getCached: (S) => { try { - return r.get(String(Z)); + return r.get(String(S)); } catch { return null; } }, - setCached: (Z, C) => { + setCached: (S, W) => { var g; try { - r.set(String(Z), { at: Date.now(), data: C }), d(); - } catch (A) { - (g = console.debug) == null || g.call(console, A); + r.set(String(S), { at: Date.now(), data: W }), d(); + } catch (y) { + (g = console.debug) == null || g.call(console, y); } }, - deleteCached: (Z) => { - var C; + deleteCached: (S) => { + var W; try { - r.delete(String(Z)); + r.delete(String(S)); } catch (g) { - (C = console.debug) == null || C.call(console, g); + (W = console.debug) == null || W.call(console, g); } }, abort: () => { - bt(() => { - var Z; - return (Z = s == null ? void 0 : s.abort) == null ? void 0 : Z.call(s); + It(() => { + var S; + return (S = s == null ? void 0 : s.abort) == null ? void 0 : S.call(s); }), s = null; }, dispose: () => { - bt(() => { - var Z; - return (Z = s == null ? void 0 : s.abort) == null ? void 0 : Z.call(s); - }), s = null, bt(() => r.clear()); + It(() => { + var S; + return (S = s == null ? void 0 : s.abort) == null ? void 0 : S.call(s); + }), s = null, It(() => r.clear()); }, - cleanupCache: () => bt(d) || void 0, + cleanupCache: () => It(d) || void 0, _noop: eo }; } @@ -15058,7 +15085,7 @@ function fA(e) { t.set(n.uuid, n.material); }), t; } -function hA(e, t, n, i, o) { +function CA(e, t, n, i, o) { tb(t, (r) => { var l, a, c; try { @@ -15100,7 +15127,7 @@ function ju(e) { e.clear(); } } -function CA(e, t) { +function hA(e, t) { var n; try { if (t === "gltf" || t === "fbx") @@ -15191,7 +15218,7 @@ function MA(e, t, n) { e.load(n, i, void 0, o); }); } -function SA() { +function GA() { return Jl || (Jl = Promise.all([ import( /* @vite-ignore */ @@ -15296,17 +15323,17 @@ function Lu({ maxProcPixels: r, onReady: l } = {}) { - var b, L, h, G; + var b, L, C, G; const a = new Image(); try { a.decoding = "async"; - } catch (W) { - (b = console.debug) == null || b.call(console, W); + } catch (Z) { + (b = console.debug) == null || b.call(console, Z); } try { a.crossOrigin = "anonymous"; - } catch (W) { - (L = console.debug) == null || L.call(console, W); + } catch (Z) { + (L = console.debug) == null || L.call(console, Z); } const c = (() => { try { @@ -15335,7 +15362,7 @@ function Lu({ _pendingParams: null, _buffer: null }, I = () => { - var W; + var Z; if (!u._destroyed) { try { if (e != null && e.isConnected) { @@ -15345,7 +15372,7 @@ function Lu({ return; } } catch (f) { - (W = console.debug) == null || W.call(console, f); + (Z = console.debug) == null || Z.call(console, f); } if (u._connectRAF == null) { if (u._connectTries = (Number(u._connectTries) || 0) + 1, u._connectTries > 20) { @@ -15361,132 +15388,132 @@ function Lu({ } } } - }, y = (W, f) => nb(r, W, f), S = () => { + }, A = (Z, f) => nb(r, Z, f), h = () => { if (u.srcData) return u.srcData; if (!d || !u.ready) return null; try { - const W = s.width, f = s.height; - return W > 0 && f > 0 ? (u.srcData = d.getImageData(0, 0, W, f), u.srcData) : null; + const Z = s.width, f = s.height; + return Z > 0 && f > 0 ? (u.srcData = d.getImageData(0, 0, Z, f), u.srcData) : null; } catch { return null; } - }, Z = (W, f) => { + }, S = (Z, f) => { var X; try { - const x = Number(W) || 0, T = Number(f) || 0; + const x = Number(Z) || 0, K = Number(f) || 0; if (!(u.naturalW > 0 && u.naturalH > 0)) return null; - const v = Math.max(0, Math.min(s.width - 1, Math.floor(x * u.scale))), w = Math.max(0, Math.min(s.height - 1, Math.floor(T * u.scale))), R = S(); + const j = Math.max(0, Math.min(s.width - 1, Math.floor(x * u.scale))), w = Math.max(0, Math.min(s.height - 1, Math.floor(K * u.scale))), R = h(); if (!(R != null && R.data)) return null; - const Y = (w * s.width + v) * 4, F = R.data[Y] ?? 0, N = R.data[Y + 1] ?? 0, V = R.data[Y + 2] ?? 0, k = R.data[Y + 3] ?? 255, K = [F / 255, N / 255, V / 255, k / 255], z = Number((X = u.lastParams) == null ? void 0 : X.exposureEV) || 0, B = Math.pow(2, z), J = [ - K[0] * B, - K[1] * B, - K[2] * B, - K[3] + const V = (w * s.width + j) * 4, O = R.data[V] ?? 0, k = R.data[V + 1] ?? 0, Y = R.data[V + 2] ?? 0, N = R.data[V + 3] ?? 255, U = [O / 255, k / 255, Y / 255, N / 255], z = Number((X = u.lastParams) == null ? void 0 : X.exposureEV) || 0, T = Math.pow(2, z), J = [ + U[0] * T, + U[1] * T, + U[2] * T, + U[3] ]; - return { r: F, g: N, b: V, a: k, raw: K, lin: J, scale: u.scale }; + return { r: O, g: k, b: Y, a: N, raw: U, lin: J, scale: u.scale }; } catch { return null; } - }, C = (W, f) => { - var oe, M, j; + }, W = (Z, f) => { + var ne, M, v; if (!c || u._destroyed) return; if (!(e != null && e.isConnected)) { try { u._pendingParams = f || u.lastParams || (n == null ? void 0 : n()) || null; - } catch (O) { - (oe = console.debug) == null || oe.call(console, O); + } catch (F) { + (ne = console.debug) == null || ne.call(console, F); } I(); return; } - if (W !== u.jobId) return; - const X = S(); + if (Z !== u.jobId) return; + const X = h(); if (!(X != null && X.data)) return; - const x = s.width, T = s.height; - if (!(x > 0 && T > 0)) return; + const x = s.width, K = s.height; + if (!(x > 0 && K > 0)) return; try { - const O = f || (n == null ? void 0 : n()) || {}; - if (typeof i == "function" && i(O)) { + const F = f || (n == null ? void 0 : n()) || {}; + if (typeof i == "function" && i(F)) { c.clearRect(0, 0, e.width, e.height), c.drawImage(s, 0, 0); return; } - } catch (O) { - (M = console.debug) == null || M.call(console, O); + } catch (F) { + (M = console.debug) == null || M.call(console, F); } - let v = u._buffer; - if (!v || v.width !== x || v.height !== T) + let j = u._buffer; + if (!j || j.width !== x || j.height !== K) try { - v = c.createImageData(x, T), u._buffer = v; + j = c.createImageData(x, K), u._buffer = j; } catch { try { - v = new ImageData(x, T), u._buffer = v; + j = new ImageData(x, K), u._buffer = j; } catch { return; } } - if (!v) return; - const w = f || (n == null ? void 0 : n()) || {}, R = Number(w.exposureEV) || 0, F = 1 / Math.max(0.1, Math.min(3, Number(w.gamma) || 1)), N = String(w.channel || "rgb"), V = String(w.analysisMode || "none"), k = In(w.zebraThreshold ?? 0.95), K = Math.pow(2, R), z = new Float32Array(256); - for (let O = 0; O < 256; O++) - z[O] = Math.pow(O / 255, F); - const B = v.data, J = X.data, P = x * T * 4, H = 55e3 * 4; + if (!j) return; + const w = f || (n == null ? void 0 : n()) || {}, R = Number(w.exposureEV) || 0, O = 1 / Math.max(0.1, Math.min(3, Number(w.gamma) || 1)), k = String(w.channel || "rgb"), Y = String(w.analysisMode || "none"), N = pn(w.zebraThreshold ?? 0.95), U = Math.pow(2, R), z = new Float32Array(256); + for (let F = 0; F < 256; F++) + z[F] = Math.pow(F / 255, O); + const T = j.data, J = X.data, P = x * K * 4, E = 55e3 * 4; let $ = 0; - const E = () => { + const H = () => { var D, q; - if (u._destroyed || !(e != null && e.isConnected) || W !== u.jobId) return; - const O = Math.min(P, $ + H); - for (; $ < O; $ += 4) { - const ee = (J[$] ?? 0) / 255, ce = (J[$ + 1] ?? 0) / 255, ue = (J[$ + 2] ?? 0) / 255, U = (J[$ + 3] ?? 255) / 255; - let Q = ee * K, _ = ce * K, le = ue * K; - const de = 0.2126 * Q + 0.7152 * _ + 0.0722 * le; - if (V === "zebra") - if (In(de) >= k) { + if (u._destroyed || !(e != null && e.isConnected) || Z !== u.jobId) return; + const F = Math.min(P, $ + E); + for (; $ < F; $ += 4) { + const ee = (J[$] ?? 0) / 255, ae = (J[$ + 1] ?? 0) / 255, ue = (J[$ + 2] ?? 0) / 255, B = (J[$ + 3] ?? 255) / 255; + let Q = ee * U, _ = ae * U, le = ue * U; + const ce = 0.2126 * Q + 0.7152 * _ + 0.0722 * le; + if (Y === "zebra") + if (pn(ce) >= N) { const ge = (Math.floor($ / 4) % x + Math.floor($ / 4 / x) & 7) < 3; Q = ge ? 1 : 0, _ = ge ? 1 : 0, le = ge ? 1 : 0; } else - Q = z[In(Q) * 255 + 0.5 | 0], _ = z[In(_) * 255 + 0.5 | 0], le = z[In(le) * 255 + 0.5 | 0]; + Q = z[pn(Q) * 255 + 0.5 | 0], _ = z[pn(_) * 255 + 0.5 | 0], le = z[pn(le) * 255 + 0.5 | 0]; else - Q = z[In(Q) * 255 + 0.5 | 0], _ = z[In(_) * 255 + 0.5 | 0], le = z[In(le) * 255 + 0.5 | 0]; - if (N === "r") + Q = z[pn(Q) * 255 + 0.5 | 0], _ = z[pn(_) * 255 + 0.5 | 0], le = z[pn(le) * 255 + 0.5 | 0]; + if (k === "r") _ = Q, le = Q; - else if (N === "g") + else if (k === "g") Q = _, le = _; - else if (N === "b") + else if (k === "b") Q = le, _ = le; - else if (N === "a") - Q = U, _ = U, le = U; - else if (N === "l") { - const se = In(de), ge = z[se * 255 + 0.5 | 0]; + else if (k === "a") + Q = B, _ = B, le = B; + else if (k === "l") { + const de = pn(ce), ge = z[de * 255 + 0.5 | 0]; Q = ge, _ = ge, le = ge; } - B[$] = Math.round(In(Q) * 255), B[$ + 1] = Math.round(In(_) * 255), B[$ + 2] = Math.round(In(le) * 255), B[$ + 3] = 255; + T[$] = Math.round(pn(Q) * 255), T[$ + 1] = Math.round(pn(_) * 255), T[$ + 2] = Math.round(pn(le) * 255), T[$ + 3] = 255; } if ($ < P) { try { - u._rafId = requestAnimationFrame(E); + u._rafId = requestAnimationFrame(H); } catch (ee) { (D = console.debug) == null || D.call(console, ee); } return; } try { - c.putImageData(v, 0, 0); + c.putImageData(j, 0, 0); } catch (ee) { (q = console.debug) == null || q.call(console, ee); } }; try { - u._rafId = requestAnimationFrame(E); - } catch (O) { - (j = console.debug) == null || j.call(console, O); + u._rafId = requestAnimationFrame(H); + } catch (F) { + (v = console.debug) == null || v.call(console, F); } - }, g = (W) => { + }, g = (Z) => { var X, x; if (u._destroyed) return; - if (u.lastParams = W || u.lastParams || (n == null ? void 0 : n()) || null, !(e != null && e.isConnected)) { + if (u.lastParams = Z || u.lastParams || (n == null ? void 0 : n()) || null, !(e != null && e.isConnected)) { try { u._pendingParams = u.lastParams; - } catch (T) { - (X = console.debug) == null || X.call(console, T); + } catch (K) { + (X = console.debug) == null || X.call(console, K); } I(); return; @@ -15494,24 +15521,24 @@ function Lu({ u.jobId++; const f = u.jobId; try { - C(f, u.lastParams); - } catch (T) { - (x = console.debug) == null || x.call(console, T); + W(f, u.lastParams); + } catch (K) { + (x = console.debug) == null || x.call(console, K); } - }, A = () => { - var W, f; + }, y = () => { + var Z, f; if (!u._destroyed) try { if (u.naturalW = Number(a.naturalWidth) || 0, u.naturalH = Number(a.naturalHeight) || 0, !(u.naturalW > 0 && u.naturalH > 0)) return; - u.scale = y(u.naturalW, u.naturalH); + u.scale = A(u.naturalW, u.naturalH); const X = Math.max(1, Math.round(u.naturalW * u.scale)), x = Math.max(1, Math.round(u.naturalH * u.scale)); s.width = X, s.height = x, e.width = X, e.height = x, e._mjrNaturalW = u.naturalW, e._mjrNaturalH = u.naturalH, e._mjrPixelScale = u.scale; try { d == null || d.clearRect(0, 0, X, x), d == null || d.drawImage(a, 0, 0, X, x); - } catch (T) { - (W = console.debug) == null || W.call(console, T); + } catch (K) { + (Z = console.debug) == null || Z.call(console, K); } - u.ready = !0, u.srcData = null, S(), g(u.lastParams || (n == null ? void 0 : n())); + u.ready = !0, u.srcData = null, h(), g(u.lastParams || (n == null ? void 0 : n())); } finally { try { l == null || l({ @@ -15524,35 +15551,35 @@ function Lu({ } } }, p = () => { - var W; + var Z; u.ready = !1; try { fo(e, "Failed to load image"); } catch (f) { - (W = console.debug) == null || W.call(console, f); + (Z = console.debug) == null || Z.call(console, f); } }; try { - a.onload = A, a.onerror = p; - } catch (W) { - (h = console.debug) == null || h.call(console, W); + a.onload = y, a.onerror = p; + } catch (Z) { + (C = console.debug) == null || C.call(console, Z); } try { a.src = t; - } catch (W) { - (G = console.debug) == null || G.call(console, W); + } catch (Z) { + (G = console.debug) == null || G.call(console, Z); } return { setParams: g, - sampleAtOriginal: Z, + sampleAtOriginal: S, getInfo: () => ({ ...u }), destroy: () => { - var W, f, X, x, T, v, w; + var Z, f, X, x, K, j, w; u._destroyed = !0; try { u.jobId++; } catch (R) { - (W = console.debug) == null || W.call(console, R); + (Z = console.debug) == null || Z.call(console, R); } try { u._rafId != null && cancelAnimationFrame(u._rafId); @@ -15573,12 +15600,12 @@ function Lu({ try { a.src = ""; } catch (R) { - (T = console.debug) == null || T.call(console, R); + (K = console.debug) == null || K.call(console, R); } try { s.width = 0, s.height = 0; } catch (R) { - (v = console.debug) == null || v.call(console, R); + (j = console.debug) == null || j.call(console, R); } try { e.width = 0, e.height = 0; @@ -15589,8 +15616,8 @@ function Lu({ } }; } -const GA = [0.25, 0.5, 1, 1.5, 2], xA = 44; -function Ui(e, { preventDefault: t = !1, immediate: n = !1 } = {}) { +const SA = [0.25, 0.5, 1, 1.5, 2], xA = 44; +function Bi(e, { preventDefault: t = !1, immediate: n = !1 } = {}) { var i, o, r, l, a; if (e) { try { @@ -15609,7 +15636,7 @@ function Tl(e) { const t = Math.max(0, Number(e) || 0), n = Math.floor(t / 60), i = Math.floor(t % 60); return n > 0 ? `${n}:${String(i).padStart(2, "0")}` : `${Math.floor(t)}s`; } -function Bl(e, t) { +function Kl(e, t) { const n = document.createElement("button"); return n.type = "button", n.textContent = String(e || ""), n.title = String(t || e || ""), n.setAttribute("aria-label", String(t || e || "3D viewport action")), n.style.cssText = [ "height:28px", @@ -15628,17 +15655,17 @@ function Bl(e, t) { "box-shadow:0 4px 18px rgba(0,0,0,0.24)" ].join(";"), n; } -function Zc(e, t) { +function Ac(e, t) { if (!e) return; const n = !!t; e.dataset.active = n ? "1" : "0", e.style.background = n ? "rgba(76,175,80,0.18)" : "rgba(13,15,20,0.78)", e.style.borderColor = n ? "rgba(76,175,80,0.42)" : "rgba(255,255,255,0.16)", e.style.color = n ? "rgba(230,255,235,0.96)" : "rgba(255,255,255,0.92)"; } -function Vu(e, t, n = "", i = "#4CAF50") { +function Yu(e, t, n = "", i = "#4CAF50") { var s, d, u; if (!e) return; try { - const I = Math.max(480, Number(e.width) || 0 || 960), y = Math.max(270, Number(e.height) || 0 || 540); - e.width = I, e.height = y; + const I = Math.max(480, Number(e.width) || 0 || 960), A = Math.max(270, Number(e.height) || 0 || 540); + e.width = I, e.height = A; } catch (I) { (s = console.debug) == null || s.call(console, I); } @@ -15658,12 +15685,12 @@ function Vu(e, t, n = "", i = "#4CAF50") { (d = console.debug) == null || d.call(console, I); try { fo(e, t, n || "3D viewer unavailable"); - } catch (y) { - (u = console.debug) == null || u.call(console, y); + } catch (A) { + (u = console.debug) == null || u.call(console, A); } } } -function Yu({ +function Vu({ defaultBgColor: e, defaultFov: t, defaultLightIntensity: n, @@ -15702,13 +15729,13 @@ function Yu({ "dragstart", "dragover", "drop" - ].forEach((C) => { + ].forEach((W) => { o.addEventListener( - C, - (g) => Ui(g, { preventDefault: !1 }) + W, + (g) => Bi(g, { preventDefault: !1 }) ); }); - const r = (C) => { + const r = (W) => { const g = document.createElement("div"); g.style.cssText = [ "font:700 10px system-ui,sans-serif", @@ -15716,17 +15743,17 @@ function Yu({ "color:rgba(255,255,255,0.40)", "text-transform:uppercase", "margin:10px 0 6px 0" - ].join(";"), g.textContent = C, o.appendChild(g); - const A = document.createElement("div"); - A.style.cssText = "height:1px;background:rgba(255,255,255,0.07);margin-bottom:8px;", o.appendChild(A); - }, l = (C, g) => { - const A = document.createElement("div"); - A.style.cssText = "display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;gap:6px;"; + ].join(";"), g.textContent = W, o.appendChild(g); + const y = document.createElement("div"); + y.style.cssText = "height:1px;background:rgba(255,255,255,0.07);margin-bottom:8px;", o.appendChild(y); + }, l = (W, g) => { + const y = document.createElement("div"); + y.style.cssText = "display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;gap:6px;"; const p = document.createElement("span"); - return p.style.cssText = "font:500 11px system-ui,sans-serif;color:rgba(255,255,255,0.65);white-space:nowrap;flex-shrink:0;", p.textContent = C, A.appendChild(p), A.appendChild(g), o.appendChild(A), A; - }, a = (C, g) => { - const A = document.createElement("select"); - A.style.cssText = [ + return p.style.cssText = "font:500 11px system-ui,sans-serif;color:rgba(255,255,255,0.65);white-space:nowrap;flex-shrink:0;", p.textContent = W, y.appendChild(p), y.appendChild(g), o.appendChild(y), y; + }, a = (W, g) => { + const y = document.createElement("select"); + y.style.cssText = [ "background:rgba(25,30,42,0.95)", "color:rgba(255,255,255,0.88)", "border:1px solid rgba(255,255,255,0.14)", @@ -15737,20 +15764,20 @@ function Yu({ "flex:1", "min-width:0" ].join(";"); - for (const [p, b] of C) { + for (const [p, b] of W) { const L = document.createElement("option"); - L.value = p, L.textContent = b, p === g && (L.selected = !0), A.appendChild(L); + L.value = p, L.textContent = b, p === g && (L.selected = !0), y.appendChild(L); } - return A; - }, c = (C, g, A, p) => { + return y; + }, c = (W, g, y, p) => { const b = document.createElement("div"); b.style.cssText = "display:flex;align-items:center;gap:5px;flex:1;"; const L = document.createElement("input"); - L.type = "range", L.min = String(C), L.max = String(g), L.step = String(A), L.value = String(p), L.style.cssText = "flex:1;cursor:pointer;accent-color:#4CAF50;height:3px;"; - const h = document.createElement("span"); - return h.style.cssText = "font:11px system-ui,sans-serif;color:rgba(255,255,255,0.45);min-width:26px;text-align:right;", h.textContent = String(p), L.addEventListener("input", () => { - h.textContent = L.value; - }), b.appendChild(L), b.appendChild(h), { wrap: b, slider: L, valLbl: h }; + L.type = "range", L.min = String(W), L.max = String(g), L.step = String(y), L.value = String(p), L.style.cssText = "flex:1;cursor:pointer;accent-color:#4CAF50;height:3px;"; + const C = document.createElement("span"); + return C.style.cssText = "font:11px system-ui,sans-serif;color:rgba(255,255,255,0.45);min-width:26px;text-align:right;", C.textContent = String(p), L.addEventListener("input", () => { + C.textContent = L.value; + }), b.appendChild(L), b.appendChild(C), { wrap: b, slider: L, valLbl: C }; }; r("Scene"); const s = document.createElement("input"); @@ -15779,22 +15806,22 @@ function Yu({ "original" ); l("Up", u); - let I = null, y = null; - i && (y = document.createElement("input"), y.type = "checkbox", y.checked = !1, y.style.cssText = "cursor:pointer;accent-color:#4CAF50;flex-shrink:0;", I = l("Skeleton", y)), r("Camera"); - const S = c(15, 120, 1, t ?? 75); - l("FOV", S.wrap), r("Lights"); - const Z = c(0, 5, 0.1, n ?? 1); - return l("Intensity", Z.wrap), { + let I = null, A = null; + i && (A = document.createElement("input"), A.type = "checkbox", A.checked = !1, A.style.cssText = "cursor:pointer;accent-color:#4CAF50;flex-shrink:0;", I = l("Skeleton", A)), r("Camera"); + const h = c(15, 120, 1, t ?? 75); + l("FOV", h.wrap), r("Lights"); + const S = c(0, 5, 0.1, n ?? 1); + return l("Intensity", S.wrap), { panel: o, bgInput: s, materialSel: d, upSel: u, - skeletonToggle: y, + skeletonToggle: A, skeletonRow: I, - fovSlider: S.slider, - fovValLbl: S.valLbl, - lightSlider: Z.slider, - lightValLbl: Z.valLbl + fovSlider: h.slider, + fovValLbl: h.valLbl, + lightSlider: S.slider, + lightValLbl: S.valLbl }; } function jA() { @@ -15825,7 +15852,7 @@ function jA() { ].forEach((l) => { e.addEventListener( l, - (a) => Ui(a, { preventDefault: !1 }) + (a) => Bi(a, { preventDefault: !1 }) ); }); const t = document.createElement("button"); @@ -15857,7 +15884,7 @@ function jA() { "width:52px", "flex-shrink:0" ].join(";"); - for (const l of GA) { + for (const l of SA) { const a = document.createElement("option"); a.value = String(l), a.textContent = `${l}×`, l === 1 && (a.selected = !0), n.appendChild(a); } @@ -15894,10 +15921,10 @@ const ib = Object.freeze({ ".splat": "splat", ".ksplat": "splat", ".spz": "splat" -}), vA = new Set(Object.keys(ib)), LA = /* @__PURE__ */ new Set(["gltf", "obj", "fbx", "stl", "ply"]), Ac = "#282828", ob = "Rotate: left drag Pan: right drag Zoom: wheel", Si = Object.freeze({ +}), vA = new Set(Object.keys(ib)), LA = /* @__PURE__ */ new Set(["gltf", "obj", "fbx", "stl", "ply"]), Wc = "#282828", ob = "Rotate: left drag Pan: right drag Zoom: wheel", Gi = Object.freeze({ PERSPECTIVE: "perspective", ORTHOGRAPHIC: "orthographic" -}), VA = Object.freeze({ +}), YA = Object.freeze({ original: [0, 0, 0], "+y": [0, 0, 0], "-y": [Math.PI, 0, 0], @@ -15905,7 +15932,7 @@ const ib = Object.freeze({ "-z": [Math.PI / 2, 0, 0], "+x": [0, 0, Math.PI / 2], "-x": [0, 0, -Math.PI / 2] -}), YA = 44, zr = 75, Wc = 1, Zi = Object.freeze({ +}), VA = 44, zr = 75, wc = 1, Zi = Object.freeze({ ambient: 0.5, main: 0.8, fill: 0.3, @@ -15929,25 +15956,25 @@ function cd(e) { } return ""; } -function kA(e) { +function XA(e) { const t = String(e || "").trim(); return t ? t.startsWith("/") || /^[a-z][\w+\-.]*:/i.test(t) : !1; } -function XA(e) { +function NA(e) { var n; const t = String((e == null ? void 0 : e.loader) || ((n = e == null ? void 0 : e.viewer_info) == null ? void 0 : n.loader) || "").trim().toLowerCase(); return t || ib[cd(e)] || ""; } -function ku(e) { +function Xu(e) { return String((e == null ? void 0 : e.kind) || "").toLowerCase() === "model3d" ? !0 : vA.has(cd(e)); } -function NA(e) { - return XA(e) || "gltf"; +function kA(e) { + return NA(e) || "gltf"; } -function AY() { +function AV() { return ob; } -function WY(e) { +function WV(e) { var t, n, i, o; try { if ((n = (t = e == null ? void 0 : e.classList) == null ? void 0 : t.contains) != null && n.call(t, "mjr-model3d-render-canvas")) return e; @@ -15960,7 +15987,7 @@ function WY(e) { return null; } } -function wc(e) { +function Mc(e) { var t; try { return !!((t = e == null ? void 0 : e.closest) != null && t.call( @@ -15975,9 +16002,9 @@ function RA(e, t) { const n = t || { ROTATE: 0, DOLLY: 1, PAN: 2 }; return { LEFT: n.ROTATE, MIDDLE: n.DOLLY, RIGHT: n.PAN }; } -function Xu(e, t, n = {}) { - var Pe, Le, Ot; - const i = (n == null ? void 0 : n.pauseDuringExecution) == null ? !!(fe != null && fe.VIEWER_PAUSE_DURING_EXECUTION) : !!n.pauseDuringExecution, o = document.createElement("div"); +function Nu(e, t, n = {}) { + var He, Ye, Pt; + const i = (n == null ? void 0 : n.pauseDuringExecution) == null ? !!(he != null && he.VIEWER_PAUSE_DURING_EXECUTION) : !!n.pauseDuringExecution, o = document.createElement("div"); o.className = n.hostClassName || "mjr-model3d-host mjr-viewer-model3d-host", o.style.cssText = n.hostStyle || [ "width:100%", "height:100%", @@ -16002,8 +16029,8 @@ function Xu(e, t, n = {}) { ].join(";"), r.tabIndex = 0, r._mjrDisableViewerTransform = n.disableViewerTransform !== !1; try { (e == null ? void 0 : e.id) != null && (r.dataset.mjrAssetId = String(e.id)); - } catch (Xe) { - (Pe = console.debug) == null || Pe.call(console, Xe); + } catch (ke) { + (He = console.debug) == null || He.call(console, ke); } o.appendChild(r); const l = document.createElement("canvas"); @@ -16018,8 +16045,8 @@ function Xu(e, t, n = {}) { ].join(";"), o.appendChild(l); const a = cd(e).replace(".", "").toUpperCase(); if (a) { - const Xe = document.createElement("div"); - Xe.className = "mjr-model3d-badge", Xe.textContent = a, Xe.style.cssText = [ + const ke = document.createElement("div"); + ke.className = "mjr-model3d-badge", ke.textContent = a, ke.style.cssText = [ "position:absolute", "top:10px", "left:10px", @@ -16031,7 +16058,7 @@ function Xu(e, t, n = {}) { "background:rgba(76,175,80,0.9)", "pointer-events:none", "z-index:2" - ].join(";"), o.appendChild(Xe); + ].join(";"), o.appendChild(ke); } const c = document.createElement("div"); c.className = "mjr-model3d-toolbar", c.style.cssText = [ @@ -16047,10 +16074,10 @@ function Xu(e, t, n = {}) { ].join(";"); const s = document.createElement("div"); s.style.cssText = "display:flex;align-items:center;gap:6px;flex-wrap:wrap;pointer-events:auto;"; - const d = Bl("Reset", "Reset 3D view"), u = Bl("Grid", "Toggle grid"), I = Bl("Persp", "Switch perspective / orthographic"), y = Bl("⚙", "Settings"); - s.append(d, u, I, y), c.appendChild(s), o.appendChild(c); - const S = document.createElement("div"); - S.className = "mjr-model3d-hint", S.textContent = n.hintText || ob, S.style.cssText = [ + const d = Kl("Reset", "Reset 3D view"), u = Kl("Grid", "Toggle grid"), I = Kl("Persp", "Switch perspective / orthographic"), A = Kl("⚙", "Settings"); + s.append(d, u, I, A), c.appendChild(s), o.appendChild(c); + const h = document.createElement("div"); + h.className = "mjr-model3d-hint", h.textContent = n.hintText || ob, h.style.cssText = [ "position:absolute", "right:10px", "bottom:10px", @@ -16063,102 +16090,102 @@ function Xu(e, t, n = {}) { "pointer-events:none", "z-index:2", "transition:bottom 0.2s" - ].join(";"), o.appendChild(S); - const Z = Yu({ - defaultBgColor: Ac, + ].join(";"), o.appendChild(h); + const S = Vu({ + defaultBgColor: Wc, defaultFov: zr, - defaultLightIntensity: Wc, + defaultLightIntensity: wc, hasSkeleton: !1 // updated after load }); - o.appendChild(Z.panel); - const C = jA(); - o.appendChild(C.bar); - let g = !1, A = null, p = null, b = null, L = null, h = null, G = null, W = null, f = null, X = null, x = null, T = !1, v = null, w = null, R = null, Y = null, F = null, N = null, V = 0, k = Si.PERSPECTIVE, K = /* @__PURE__ */ new Map(); + o.appendChild(S.panel); + const W = jA(); + o.appendChild(W.bar); + let g = !1, y = null, p = null, b = null, L = null, C = null, G = null, Z = null, f = null, X = null, x = null, K = !1, j = null, w = null, R = null, V = null, O = null, k = null, Y = 0, N = Gi.PERSPECTIVE, U = /* @__PURE__ */ new Map(); const z = /* @__PURE__ */ new Set(); - let B = null, J = !1, P = null, H = [], $ = Wc, E = null, oe = null, M = [], j = [], O = 0, D = 1, q = !1, ee = !1, ce = !1; - const ue = String((e == null ? void 0 : e.filename) || "3D model"), U = () => { - var Xe, Ee; + let T = null, J = !1, P = null, E = [], $ = wc, H = null, ne = null, M = [], v = [], F = 0, D = 1, q = !1, ee = !1, ae = !1; + const ue = String((e == null ? void 0 : e.filename) || "3D model"), B = () => { + var ke, Ee; try { - (Xe = n.scheduleOverlayRedraw) == null || Xe.call(n); + (ke = n.scheduleOverlayRedraw) == null || ke.call(n); } catch (Ke) { (Ee = console.debug) == null || Ee.call(console, Ke); } - }, Q = (Xe, Ee = "", Ke = "#4CAF50") => { - v = { title: Xe, hintText: Ee, accent: Ke }, l.style.display = "block", Vu(l, Xe, Ee, Ke); + }, Q = (ke, Ee = "", Ke = "#4CAF50") => { + j = { title: ke, hintText: Ee, accent: Ke }, l.style.display = "block", Yu(l, ke, Ee, Ke); }, _ = () => { - v = null, l.style.display = "none"; + j = null, l.style.display = "none"; }, le = () => { - var Xe, Ee; + var ke, Ee; try { const Ke = o.getBoundingClientRect(); r._mjrNaturalW = Math.max(1, Math.round(Ke.width || r.width || 1)), r._mjrNaturalH = Math.max(1, Math.round(Ke.height || r.height || 1)); } catch (Ke) { - (Xe = console.debug) == null || Xe.call(console, Ke); + (ke = console.debug) == null || ke.call(console, Ke); } try { - v && Vu( + j && Yu( l, - v.title, - v.hintText, - v.accent + j.title, + j.hintText, + j.accent ); } catch (Ke) { (Ee = console.debug) == null || Ee.call(console, Ke); } - }, de = (Xe, Ee) => { - if (!W || !(V > 0)) return; - const Ke = Math.max(1e-4, (Number(Xe) || 1) / Math.max(1, Number(Ee) || 1)), nt = V * Ke; - W.left = -nt / 2, W.right = nt / 2, W.top = V / 2, W.bottom = -V / 2, W.updateProjectionMatrix(); - }, se = () => { - var Xe; - if (!(!Y || !f || !N)) { - if (k === Si.ORTHOGRAPHIC) { + }, ce = (ke, Ee) => { + if (!Z || !(Y > 0)) return; + const Ke = Math.max(1e-4, (Number(ke) || 1) / Math.max(1, Number(Ee) || 1)), lt = Y * Ke; + Z.left = -lt / 2, Z.right = lt / 2, Z.top = Y / 2, Z.bottom = -Y / 2, Z.updateProjectionMatrix(); + }, de = () => { + var ke; + if (!(!V || !f || !k)) { + if (N === Gi.ORTHOGRAPHIC) { const Ee = o.getBoundingClientRect(); - V = AA( - W, + Y = AA( + Z, f, - N, + k, Math.max(1e-4, (Ee.width || 1) / Math.max(1, Ee.height || 1)) - ) || V, h = W; + ) || Y, C = Z; } else - ZA(p, G, f, N), h = G; + ZA(p, G, f, k), C = G; try { - f.object = h, f.update(); + f.object = C, f.update(); } catch (Ee) { - (Xe = console.debug) == null || Xe.call(console, Ee); + (ke = console.debug) == null || ke.call(console, Ee); } } - }, ge = (Xe, { refit: Ee = !0 } = {}) => { - var Ke, nt, ut, It, dt; - k = Xe === Si.ORTHOGRAPHIC ? Si.ORTHOGRAPHIC : Si.PERSPECTIVE, h = k === Si.ORTHOGRAPHIC ? W : G; + }, ge = (ke, { refit: Ee = !0 } = {}) => { + var Ke, lt, wt, at, tt; + N = ke === Gi.ORTHOGRAPHIC ? Gi.ORTHOGRAPHIC : Gi.PERSPECTIVE, C = N === Gi.ORTHOGRAPHIC ? Z : G; try { - f && (f.object = h); - } catch (Re) { - (Ke = console.debug) == null || Ke.call(console, Re); + f && (f.object = C); + } catch (Oe) { + (Ke = console.debug) == null || Ke.call(console, Oe); } if (Ee) - se(); + de(); else { try { - (nt = h == null ? void 0 : h.updateProjectionMatrix) == null || nt.call(h); - } catch (Re) { - (ut = console.debug) == null || ut.call(console, Re); + (lt = C == null ? void 0 : C.updateProjectionMatrix) == null || lt.call(C); + } catch (Oe) { + (wt = console.debug) == null || wt.call(console, Oe); } try { - (It = f == null ? void 0 : f.update) == null || It.call(f); - } catch (Re) { - (dt = console.debug) == null || dt.call(console, Re); + (at = f == null ? void 0 : f.update) == null || at.call(f); + } catch (Oe) { + (tt = console.debug) == null || tt.call(console, Oe); } } - Te(), U(); - }, je = (Xe) => { + Re(), B(); + }, Le = (ke) => { var Ke; - $ = Math.max(0, Math.min(10, Number(Xe) || 0)); + $ = Math.max(0, Math.min(10, Number(ke) || 0)); try { P && (P.intensity = Zi.ambient * $); - } catch (nt) { - (Ke = console.debug) == null || Ke.call(console, nt); + } catch (lt) { + (Ke = console.debug) == null || Ke.call(console, lt); } const Ee = [ Zi.main, @@ -16167,159 +16194,159 @@ function Xu(e, t, n = {}) { Zi.fill, Zi.bottom ]; - H.forEach((nt, ut) => { - var It; + E.forEach((lt, wt) => { + var at; try { - nt && (nt.intensity = (Ee[ut] ?? Zi.fill) * $); - } catch (dt) { - (It = console.debug) == null || It.call(console, dt); + lt && (lt.intensity = (Ee[wt] ?? Zi.fill) * $); + } catch (tt) { + (at = console.debug) == null || at.call(console, tt); } }); - }, Se = (Xe) => { - !F || !p || (ju(z), hA(p, F, Xe, K, z), U()); - }, ke = (Xe) => { + }, xe = (ke) => { + !O || !p || (ju(z), CA(p, O, ke, U, z), B()); + }, Xe = (ke) => { var Ke; - if (!Y) return; - const Ee = VA[Xe] || [0, 0, 0]; + if (!V) return; + const Ee = YA[ke] || [0, 0, 0]; try { - Y.rotation.set(Ee[0], Ee[1], Ee[2]), Y.updateMatrixWorld(!0); - } catch (nt) { - (Ke = console.debug) == null || Ke.call(console, nt); + V.rotation.set(Ee[0], Ee[1], Ee[2]), V.updateMatrixWorld(!0); + } catch (lt) { + (Ke = console.debug) == null || Ke.call(console, lt); } - p && (N = vu(p, Y)), se(); - }, we = (Xe) => { + p && (k = vu(p, V)), de(); + }, Me = (ke) => { var Ee; - if (B) + if (T) try { - B.visible = !!Xe; + T.visible = !!ke; } catch (Ke) { (Ee = console.debug) == null || Ee.call(console, Ke); } - }, Je = () => { - var ut, It; - if (!E || M.length === 0) return; - const Xe = j[O]; - if (!Xe) return; - const Ee = M[O], Ke = (Ee == null ? void 0 : Ee.duration) || 0, nt = Xe.time || 0; + }, Fe = () => { + var wt, at; + if (!H || M.length === 0) return; + const ke = v[F]; + if (!ke) return; + const Ee = M[F], Ke = (Ee == null ? void 0 : Ee.duration) || 0, lt = ke.time || 0; try { - C.timeLbl.textContent = `${Tl(nt)} / ${Tl(Ke)}`; - } catch (dt) { - (ut = console.debug) == null || ut.call(console, dt); + W.timeLbl.textContent = `${Tl(lt)} / ${Tl(Ke)}`; + } catch (tt) { + (wt = console.debug) == null || wt.call(console, tt); } if (!ee && Ke > 0) try { - const dt = Number(C.progressSlider.max) || 1e3; - C.progressSlider.value = String(Math.round(nt / Ke * dt)); - } catch (dt) { - (It = console.debug) == null || It.call(console, dt); + const tt = Number(W.progressSlider.max) || 1e3; + W.progressSlider.value = String(Math.round(lt / Ke * tt)); + } catch (tt) { + (at = console.debug) == null || at.call(console, tt); } - }, $e = (Xe) => { - if (!E || !M.length) return; - const Ee = M[Xe]; + }, it = (ke) => { + if (!H || !M.length) return; + const Ee = M[ke]; if (!Ee) return; - j.forEach((nt) => { - var ut; + v.forEach((lt) => { + var wt; try { - nt == null || nt.stop(); - } catch (It) { - (ut = console.debug) == null || ut.call(console, It); + lt == null || lt.stop(); + } catch (at) { + (wt = console.debug) == null || wt.call(console, at); } }); - const Ke = E.clipAction(Ee); - Ke.timeScale = D, Ke.clampWhenFinished = !1, Ke.loop = (p == null ? void 0 : p.LoopRepeat) ?? 2201, Ke.play(), j[Xe] = Ke, O = Xe, q = !0, C.playBtn.textContent = "⏸"; + const Ke = H.clipAction(Ee); + Ke.timeScale = D, Ke.clampWhenFinished = !1, Ke.loop = (p == null ? void 0 : p.LoopRepeat) ?? 2201, Ke.play(), v[ke] = Ke, F = ke, q = !0, W.playBtn.textContent = "⏸"; try { - const nt = Math.max(100, Math.min(1e4, Math.round((Ee.duration || 1) * 100))); - C.progressSlider.max = String(nt); + const lt = Math.max(100, Math.min(1e4, Math.round((Ee.duration || 1) * 100))); + W.progressSlider.max = String(lt); } catch { } }, qe = () => { - var Xe, Ee; - !E || !M.length || (q ? (E.timeScale = 0, q = !1, C.playBtn.textContent = "▶") : (E.timeScale = D, (Ee = (Xe = j[O]) == null ? void 0 : Xe.isRunning) != null && Ee.call(Xe) ? (q = !0, C.playBtn.textContent = "⏸") : $e(O))); - }, Ue = (Xe, Ee) => { - !Xe || Xe.length === 0 || !p || (M = Xe, E = new p.AnimationMixer(Ee), oe = new p.Clock(), j = new Array(Xe.length).fill(null), C.animSel.innerHTML = "", Xe.forEach((Ke, nt) => { - const ut = document.createElement("option"); - ut.value = String(nt), ut.textContent = Ke.name || `Animation ${nt + 1}`, C.animSel.appendChild(ut); - }), C.animSel.style.display = Xe.length > 1 ? "" : "none", C.bar.style.display = "flex", S.style.bottom = `${YA + 10}px`, $e(0), C.playBtn.addEventListener("click", (Ke) => { - Ui(Ke), qe(); - }), C.speedSel.addEventListener("change", () => { - D = Number(C.speedSel.value) || 1, E.timeScale = q ? D : 0; - const Ke = j[O]; + var ke, Ee; + !H || !M.length || (q ? (H.timeScale = 0, q = !1, W.playBtn.textContent = "▶") : (H.timeScale = D, (Ee = (ke = v[F]) == null ? void 0 : ke.isRunning) != null && Ee.call(ke) ? (q = !0, W.playBtn.textContent = "⏸") : it(F))); + }, Pe = (ke, Ee) => { + !ke || ke.length === 0 || !p || (M = ke, H = new p.AnimationMixer(Ee), ne = new p.Clock(), v = new Array(ke.length).fill(null), W.animSel.innerHTML = "", ke.forEach((Ke, lt) => { + const wt = document.createElement("option"); + wt.value = String(lt), wt.textContent = Ke.name || `Animation ${lt + 1}`, W.animSel.appendChild(wt); + }), W.animSel.style.display = ke.length > 1 ? "" : "none", W.bar.style.display = "flex", h.style.bottom = `${VA + 10}px`, it(0), W.playBtn.addEventListener("click", (Ke) => { + Bi(Ke), qe(); + }), W.speedSel.addEventListener("change", () => { + D = Number(W.speedSel.value) || 1, H.timeScale = q ? D : 0; + const Ke = v[F]; Ke && (Ke.timeScale = D); - }), C.animSel.addEventListener("change", () => { - const Ke = Number(C.animSel.value) || 0; - $e(Ke); - }), C.progressSlider.addEventListener("pointerdown", () => { + }), W.animSel.addEventListener("change", () => { + const Ke = Number(W.animSel.value) || 0; + it(Ke); + }), W.progressSlider.addEventListener("pointerdown", () => { ee = !0; - }), C.progressSlider.addEventListener("pointerup", () => { + }), W.progressSlider.addEventListener("pointerup", () => { ee = !1; - const Ke = j[O], nt = M[O]; - if (Ke && nt) { - const ut = Number(C.progressSlider.max) || 1e3, It = Number(C.progressSlider.value) / ut * nt.duration; - Ke.time = Math.max(0, Math.min(It, nt.duration)); + const Ke = v[F], lt = M[F]; + if (Ke && lt) { + const wt = Number(W.progressSlider.max) || 1e3, at = Number(W.progressSlider.value) / wt * lt.duration; + Ke.time = Math.max(0, Math.min(at, lt.duration)); } - }), C.progressSlider.addEventListener("input", () => { - const Ke = j[O], nt = M[O]; - if (Ke && nt && ee) { - const ut = Number(C.progressSlider.max) || 1e3, It = Number(C.progressSlider.value) / ut * nt.duration; - Ke.time = Math.max(0, Math.min(It, nt.duration)), C.timeLbl.textContent = `${Tl(It)} / ${Tl(nt.duration)}`; + }), W.progressSlider.addEventListener("input", () => { + const Ke = v[F], lt = M[F]; + if (Ke && lt && ee) { + const wt = Number(W.progressSlider.max) || 1e3, at = Number(W.progressSlider.value) / wt * lt.duration; + Ke.time = Math.max(0, Math.min(at, lt.duration)), W.timeLbl.textContent = `${Tl(at)} / ${Tl(lt.duration)}`; } })); - }, Te = () => { - Zc(u, !!(R != null && R.visible)), Zc(I, k === Si.ORTHOGRAPHIC), I.textContent = k === Si.ORTHOGRAPHIC ? "Ortho" : "Persp", Zc(y, ce); + }, Re = () => { + Ac(u, !!(R != null && R.visible)), Ac(I, N === Gi.ORTHOGRAPHIC), I.textContent = N === Gi.ORTHOGRAPHIC ? "Ortho" : "Persp", Ac(A, ae); }; - Z.bgInput.addEventListener("input", () => { + S.bgInput.addEventListener("input", () => { var Ee; - const Xe = Z.bgInput.value; + const ke = S.bgInput.value; try { - L && (L.background = new ((p == null ? void 0 : p.Color) || Object)(Xe)); + L && (L.background = new ((p == null ? void 0 : p.Color) || Object)(ke)); } catch (Ke) { (Ee = console.debug) == null || Ee.call(console, Ke); } - }), Z.materialSel.addEventListener("change", () => { - Se(Z.materialSel.value); - }), Z.upSel.addEventListener("change", () => { - ke(Z.upSel.value); - }), Z.skeletonToggle && Z.skeletonToggle.addEventListener("change", () => { - we(Z.skeletonToggle.checked); - }), Z.fovSlider.addEventListener("input", () => { + }), S.materialSel.addEventListener("change", () => { + xe(S.materialSel.value); + }), S.upSel.addEventListener("change", () => { + Xe(S.upSel.value); + }), S.skeletonToggle && S.skeletonToggle.addEventListener("change", () => { + Me(S.skeletonToggle.checked); + }), S.fovSlider.addEventListener("input", () => { var Ee; - const Xe = Math.max( + const ke = Math.max( 1, - Math.min(179, Number(Z.fovSlider.value) || zr) + Math.min(179, Number(S.fovSlider.value) || zr) ); try { - G && (G.fov = Xe, G.updateProjectionMatrix()); + G && (G.fov = ke, G.updateProjectionMatrix()); } catch (Ke) { (Ee = console.debug) == null || Ee.call(console, Ke); } - }), Z.lightSlider.addEventListener("input", () => { - je(Number(Z.lightSlider.value)); + }), S.lightSlider.addEventListener("input", () => { + Le(Number(S.lightSlider.value)); }); - const Oe = () => { - const Xe = [], Ee = (Ke, nt, ut, It) => { - Ke.addEventListener(nt, ut, It), Xe.push(() => Ke.removeEventListener(nt, ut, It)); + const rt = () => { + const ke = [], Ee = (Ke, lt, wt, at) => { + Ke.addEventListener(lt, wt, at), ke.push(() => Ke.removeEventListener(lt, wt, at)); }; return Ee(o, "pointerdown", () => { - var Ke, nt; + var Ke, lt; try { (Ke = r.focus) == null || Ke.call(r); - } catch (ut) { - (nt = console.debug) == null || nt.call(console, ut); + } catch (wt) { + (lt = console.debug) == null || lt.call(console, wt); } - }), Ee(o, "wheel", (Ke) => Ui(Ke)), Ee(o, "contextmenu", (Ke) => Ui(Ke, { preventDefault: !0 })), Ee(o, "dragstart", (Ke) => Ui(Ke, { preventDefault: !0 })), Ee(o, "dragover", (Ke) => Ui(Ke, { preventDefault: !0 })), Ee(o, "dragleave", (Ke) => Ui(Ke)), Ee(o, "drop", (Ke) => Ui(Ke, { preventDefault: !0 })), () => { + }), Ee(o, "wheel", (Ke) => Bi(Ke)), Ee(o, "contextmenu", (Ke) => Bi(Ke, { preventDefault: !0 })), Ee(o, "dragstart", (Ke) => Bi(Ke, { preventDefault: !0 })), Ee(o, "dragover", (Ke) => Bi(Ke, { preventDefault: !0 })), Ee(o, "dragleave", (Ke) => Bi(Ke)), Ee(o, "drop", (Ke) => Bi(Ke, { preventDefault: !0 })), () => { var Ke; - for (const nt of Xe) + for (const lt of ke) try { - nt(); - } catch (ut) { - (Ke = console.debug) == null || Ke.call(console, ut); + lt(); + } catch (wt) { + (Ke = console.debug) == null || Ke.call(console, wt); } }; - }, pt = () => { - var Xe, Ee, Ke, nt, ut, It, dt, Re, Wt, lt, qt, yt, mt, kt, $t, Tt, te, ye, We, pe, De, ot, Zt, tn, Pt, vt, re; + }, Te = () => { + var ke, Ee, Ke, lt, wt, at, tt, Oe, Rt, nt, Mt, dt, bt, Yt, $t, nn, ie, pe, Ce, ye, De, ut, At, Ht, Qt, xt, Gt; g = !0; try { - window.removeEventListener(ht.RUNTIME_STATUS, Mt); + window.removeEventListener(ft.RUNTIME_STATUS, we); } catch { } try { @@ -16328,163 +16355,163 @@ function Xu(e, t, n = {}) { } try { X != null && cancelAnimationFrame(X); - } catch (ne) { - (Xe = console.debug) == null || Xe.call(console, ne); + } catch (je) { + (ke = console.debug) == null || ke.call(console, je); } X = null; try { w == null || w(); - } catch (ne) { - (Ee = console.debug) == null || Ee.call(console, ne); + } catch (je) { + (Ee = console.debug) == null || Ee.call(console, je); } w = null; try { - (Ke = A == null ? void 0 : A.disconnect) == null || Ke.call(A); - } catch (ne) { - (nt = console.debug) == null || nt.call(console, ne); + (Ke = y == null ? void 0 : y.disconnect) == null || Ke.call(y); + } catch (je) { + (lt = console.debug) == null || lt.call(console, je); } - A = null; + y = null; try { - (ut = f == null ? void 0 : f.dispose) == null || ut.call(f); - } catch (ne) { - (It = console.debug) == null || It.call(console, ne); + (wt = f == null ? void 0 : f.dispose) == null || wt.call(f); + } catch (je) { + (at = console.debug) == null || at.call(console, je); } f = null; try { - (dt = E == null ? void 0 : E.stopAllAction) == null || dt.call(E), (Wt = E == null ? void 0 : E.uncacheRoot) == null || Wt.call(E, (Re = E.getRoot) == null ? void 0 : Re.call(E)); - } catch (ne) { - (lt = console.debug) == null || lt.call(console, ne); + (tt = H == null ? void 0 : H.stopAllAction) == null || tt.call(H), (Rt = H == null ? void 0 : H.uncacheRoot) == null || Rt.call(H, (Oe = H.getRoot) == null ? void 0 : Oe.call(H)); + } catch (je) { + (nt = console.debug) == null || nt.call(console, je); } try { - for (const ne of j) + for (const je of v) try { - (qt = E == null ? void 0 : E.uncacheAction) == null || qt.call(E, ne); + (Mt = H == null ? void 0 : H.uncacheAction) == null || Mt.call(H, je); } catch { } - } catch (ne) { - (yt = console.debug) == null || yt.call(console, ne); + } catch (je) { + (dt = console.debug) == null || dt.call(console, je); } try { - for (const ne of M) + for (const je of M) try { - (mt = ne == null ? void 0 : ne.dispose) == null || mt.call(ne); + (bt = je == null ? void 0 : je.dispose) == null || bt.call(je); } catch { } - } catch (ne) { - (kt = console.debug) == null || kt.call(console, ne); + } catch (je) { + (Yt = console.debug) == null || Yt.call(console, je); } - E = null, j = [], M = [], ju(z); + H = null, v = [], M = [], ju(z); try { - B && (($t = L == null ? void 0 : L.remove) == null || $t.call(L, B), (Tt = B.dispose) == null || Tt.call(B)); - } catch (ne) { - (te = console.debug) == null || te.call(console, ne); + T && (($t = L == null ? void 0 : L.remove) == null || $t.call(L, T), (nn = T.dispose) == null || nn.call(T)); + } catch (je) { + (ie = console.debug) == null || ie.call(console, je); } - B = null; + T = null; try { - (ye = L == null ? void 0 : L.traverse) == null || ye.call(L, (ne) => { - var Ie, Ne, He; + (pe = L == null ? void 0 : L.traverse) == null || pe.call(L, (je) => { + var oe, se, fe; try { - (Ne = (Ie = ne.geometry) == null ? void 0 : Ie.dispose) == null || Ne.call(Ie); + (se = (oe = je.geometry) == null ? void 0 : oe.dispose) == null || se.call(oe); } catch { } try { - const rt = Array.isArray(ne.material) ? ne.material : ne.material ? [ne.material] : []; - for (const St of rt) + const Be = Array.isArray(je.material) ? je.material : je.material ? [je.material] : []; + for (const gt of Be) try { - if (St) { - for (const Yt of Object.keys(St)) + if (gt) { + for (const Wt of Object.keys(gt)) try { - const Gt = St[Yt]; - Gt && typeof Gt == "object" && typeof Gt.dispose == "function" && Gt.isTexture && Gt.dispose(); + const Vt = gt[Wt]; + Vt && typeof Vt == "object" && typeof Vt.dispose == "function" && Vt.isTexture && Vt.dispose(); } catch { } - (He = St.dispose) == null || He.call(St); + (fe = gt.dispose) == null || fe.call(gt); } } catch { } } catch { } }); - } catch (ne) { - (We = console.debug) == null || We.call(console, ne); + } catch (je) { + (Ce = console.debug) == null || Ce.call(console, je); } try { - o._mjrAxisScene && ((De = (pe = o._mjrAxisScene).traverse) == null || De.call(pe, (ne) => { - var Ie, Ne, He, rt; + o._mjrAxisScene && ((De = (ye = o._mjrAxisScene).traverse) == null || De.call(ye, (je) => { + var oe, se, fe, Be; try { - (Ne = (Ie = ne.geometry) == null ? void 0 : Ie.dispose) == null || Ne.call(Ie); + (se = (oe = je.geometry) == null ? void 0 : oe.dispose) == null || se.call(oe); } catch { } try { - (rt = (He = ne.material) == null ? void 0 : He.dispose) == null || rt.call(He); + (Be = (fe = je.material) == null ? void 0 : fe.dispose) == null || Be.call(fe); } catch { } }), o._mjrAxisScene = null); - } catch (ne) { - (ot = console.debug) == null || ot.call(console, ne); + } catch (je) { + (ut = console.debug) == null || ut.call(console, je); } try { - (Zt = b == null ? void 0 : b.dispose) == null || Zt.call(b); - } catch (ne) { - (tn = console.debug) == null || tn.call(console, ne); + (At = b == null ? void 0 : b.dispose) == null || At.call(b); + } catch (je) { + (Ht = console.debug) == null || Ht.call(console, je); } - b = null, L = null, h = null, G = null, W = null, F = null, Y = null, N = null, x = null; + b = null, L = null, C = null, G = null, Z = null, O = null, V = null, k = null, x = null; try { - const ne = r.getContext("webgl2") || r.getContext("webgl"); - ne && ((vt = (Pt = ne.getExtension("WEBGL_lose_context")) == null ? void 0 : Pt.loseContext) == null || vt.call(Pt)); - } catch (ne) { - (re = console.debug) == null || re.call(console, ne); + const je = r.getContext("webgl2") || r.getContext("webgl"); + je && ((xt = (Qt = je.getExtension("WEBGL_lose_context")) == null ? void 0 : Qt.loseContext) == null || xt.call(Qt)); + } catch (je) { + (Gt = console.debug) == null || Gt.call(console, je); } - }, Me = () => { - var Xe; - T = !0; + }, qt = () => { + var ke; + K = !0; try { X != null && cancelAnimationFrame(X); } catch (Ee) { - (Xe = console.debug) == null || Xe.call(console, Ee); + (ke = console.debug) == null || ke.call(console, Ee); } X = null; - }, Xt = () => { - var Xe; - if (T = !1, !(g || X != null || typeof x != "function")) + }, kt = () => { + var ke; + if (K = !1, !(g || X != null || typeof x != "function")) try { X = requestAnimationFrame(x); } catch (Ee) { - (Xe = console.debug) == null || Xe.call(console, Ee); + (ke = console.debug) == null || ke.call(console, Ee); } - }, Mt = (Xe) => { + }, we = (ke) => { var Ke; if (!i) return; - if (String(((Ke = Xe == null ? void 0 : Xe.detail) == null ? void 0 : Ke.active_prompt_id) || "").trim()) { - Me(); + if (String(((Ke = ke == null ? void 0 : ke.detail) == null ? void 0 : Ke.active_prompt_id) || "").trim()) { + qt(); return; } - Xt(); + kt(); }, me = { setParams: () => { }, - destroy: pt, + destroy: Te, captureCanvas: () => r, - pause: Me, - resume: Xt + pause: qt, + resume: kt }; r._mjrProc = me; try { - i && (window.addEventListener(ht.RUNTIME_STATUS, Mt), String(((Le = window == null ? void 0 : window.__MJR_EXECUTION_RUNTIME__) == null ? void 0 : Le.active_prompt_id) || "").trim() && (T = !0)); - } catch (Xe) { - (Ot = console.debug) == null || Ot.call(console, Xe); + i && (window.addEventListener(ft.RUNTIME_STATUS, we), String(((Ye = window == null ? void 0 : window.__MJR_EXECUTION_RUNTIME__) == null ? void 0 : Ye.active_prompt_id) || "").trim() && (K = !0)); + } catch (ke) { + (Pt = console.debug) == null || Pt.call(console, ke); } return Q("Preparing 3D preview", ue), Promise.resolve().then(async () => { - var Ee, Ke, nt, ut; - const Xe = NA(e); - if (!LA.has(Xe)) { + var Ee, Ke, lt, wt; + const ke = kA(e); + if (!LA.has(ke)) { if (Q( "3D preview unavailable", - `${Xe.toUpperCase()} is not supported in the embedded viewer.` - ), S.style.display = "none", t) + `${ke.toUpperCase()} is not supported in the embedded viewer.` + ), h.style.display = "none", t) try { - const It = document.createElement("a"); - It.href = t, It.download = String((e == null ? void 0 : e.filename) || "model"), It.textContent = `Download ${String((e == null ? void 0 : e.filename) || "file")}`, It.style.cssText = [ + const at = document.createElement("a"); + at.href = t, at.download = String((e == null ? void 0 : e.filename) || "model"), at.textContent = `Download ${String((e == null ? void 0 : e.filename) || "file")}`, at.style.cssText = [ "position:absolute", "bottom:18px", "left:50%", @@ -16497,248 +16524,248 @@ function Xu(e, t, n = {}) { "text-decoration:none", "pointer-events:auto", "z-index:3" - ].join(";"), o.appendChild(It); + ].join(";"), o.appendChild(at); } catch { } return; } try { - const It = await SA(); + const at = await GA(); if (g) return; - const dt = It.THREE; - p = dt; - const Re = new dt.LoadingManager(); - Re.setURLModifier((ne) => { - if (!ne || kA(ne)) return ne; - const Ie = ly(e, ne); - if (Ie) return Ie; + const tt = at.THREE; + p = tt; + const Oe = new tt.LoadingManager(); + Oe.setURLModifier((je) => { + if (!je || XA(je)) return je; + const oe = ly(e, je); + if (oe) return oe; try { - return new URL(ne, t).href; + return new URL(je, t).href; } catch { - return ne; + return je; } - }), b = new dt.WebGLRenderer({ + }), b = new tt.WebGLRenderer({ canvas: r, antialias: !0, alpha: !0, preserveDrawingBuffer: !0 - }), b.outputColorSpace = dt.SRGBColorSpace, b.setPixelRatio(Math.min(2, window.devicePixelRatio || 1)), L = new dt.Scene(), L.background = new dt.Color(Ac), G = new dt.PerspectiveCamera( + }), b.outputColorSpace = tt.SRGBColorSpace, b.setPixelRatio(Math.min(2, window.devicePixelRatio || 1)), L = new tt.Scene(), L.background = new tt.Color(Wc), G = new tt.PerspectiveCamera( zr, 16 / 9, 0.01, 1e4 - ), W = new dt.OrthographicCamera(-1, 1, 1, -1, -1e4, 1e4), h = G, f = new It.OrbitControls(h, r), f.enableDamping = !0, f.dampingFactor = 0.08, f.rotateSpeed = 0.82, f.zoomSpeed = 1, f.panSpeed = 0.9, f.screenSpacePanning = !0, f.mouseButtons = RA(null, dt.MOUSE), w = Oe(), P = new dt.AmbientLight( + ), Z = new tt.OrthographicCamera(-1, 1, 1, -1, -1e4, 1e4), C = G, f = new at.OrbitControls(C, r), f.enableDamping = !0, f.dampingFactor = 0.08, f.rotateSpeed = 0.82, f.zoomSpeed = 1, f.panSpeed = 0.9, f.screenSpacePanning = !0, f.mouseButtons = RA(null, tt.MOUSE), w = rt(), P = new tt.AmbientLight( 16777215, Zi.ambient * $ ), L.add(P); - const Wt = new dt.DirectionalLight( + const Rt = new tt.DirectionalLight( 16777215, Zi.main * $ ); - Wt.position.set(0, 10, 10); - const lt = new dt.DirectionalLight( + Rt.position.set(0, 10, 10); + const nt = new tt.DirectionalLight( 16777215, Zi.back * $ ); - lt.position.set(-10, 0, -10); - const qt = new dt.DirectionalLight( + nt.position.set(-10, 0, -10); + const Mt = new tt.DirectionalLight( 15266047, Zi.fill * $ ); - qt.position.set(10, 5, -5); - const yt = new dt.DirectionalLight( + Mt.position.set(10, 5, -5); + const dt = new tt.DirectionalLight( 16773352, Zi.fill * $ ); - yt.position.set(-10, 5, 5); - const mt = new dt.DirectionalLight( + dt.position.set(-10, 5, 5); + const bt = new tt.DirectionalLight( 16777215, Zi.bottom * $ ); - mt.position.set(0, -10, 0), H = [Wt, lt, qt, yt, mt], H.forEach((ne) => L.add(ne)), R = new dt.GridHelper(20, 20, 5068128, 3094338), L.add(R); - const kt = () => { - if (g || !b || !h) return; - const ne = o.getBoundingClientRect(), Ie = Math.max(1, Math.round(ne.width || r.clientWidth || 1)), Ne = Math.max(1, Math.round(ne.height || r.clientHeight || 1)); - b.setSize(Ie, Ne, !1), G && (G.aspect = Ie / Ne, G.updateProjectionMatrix()), de(Ie, Ne), le(), U(); + bt.position.set(0, -10, 0), E = [Rt, nt, Mt, dt, bt], E.forEach((je) => L.add(je)), R = new tt.GridHelper(20, 20, 5068128, 3094338), L.add(R); + const Yt = () => { + if (g || !b || !C) return; + const je = o.getBoundingClientRect(), oe = Math.max(1, Math.round(je.width || r.clientWidth || 1)), se = Math.max(1, Math.round(je.height || r.clientHeight || 1)); + b.setSize(oe, se, !1), G && (G.aspect = oe / se, G.updateProjectionMatrix()), ce(oe, se), le(), B(); }; - typeof ResizeObserver < "u" && (A = new ResizeObserver(() => kt()), A.observe(o)); - const $t = wA(It, Xe, Re); + typeof ResizeObserver < "u" && (y = new ResizeObserver(() => Yt()), y.observe(o)); + const $t = wA(at, ke, Oe); if (!$t) { Q( "3D loader unavailable", - `${Xe.toUpperCase()} loader could not be created.` - ), S.style.display = "none"; + `${ke.toUpperCase()} loader could not be created.` + ), h.style.display = "none"; return; } - if (Xe === "obj" && It.MTLLoader) + if (ke === "obj" && at.MTLLoader) try { - const ne = t.replace(/\.obj(\?.*)?$/i, (He, rt) => `.mtl${rt || ""}`), Ie = new It.MTLLoader(Re), Ne = await new Promise((He) => { - Ie.load(ne, He, void 0, () => He(null)); + const je = t.replace(/\.obj(\?.*)?$/i, (fe, Be) => `.mtl${Be || ""}`), oe = new at.MTLLoader(Oe), se = await new Promise((fe) => { + oe.load(je, fe, void 0, () => fe(null)); }); - Ne && !g && (Ne.preload(), $t.setMaterials(Ne)); - } catch (ne) { - (Ee = console.debug) == null || Ee.call(console, "[MJR 3D] MTL load skipped:", ne == null ? void 0 : ne.message); + se && !g && (se.preload(), $t.setMaterials(se)); + } catch (je) { + (Ee = console.debug) == null || Ee.call(console, "[MJR 3D] MTL load skipped:", je == null ? void 0 : je.message); } - const Tt = await MA($t, Xe, t); + const nn = await MA($t, ke, t); if (g) return; - const te = WA(dt, Xe, Tt); - if (!te) { - Q("Empty 3D scene", "The loader returned no renderable object."), S.style.display = "none"; + const ie = WA(tt, ke, nn); + if (!ie) { + Q("Empty 3D scene", "The loader returned no renderable object."), h.style.display = "none"; return; } try { - const ne = new dt.Box3().setFromObject(te); - if (!ne.isEmpty()) { - const Ie = ne.getSize(new dt.Vector3()), Ne = ne.getCenter(new dt.Vector3()), rt = 5 / Math.max(Ie.x, Ie.y, Ie.z, 1e-3); - te.scale.multiplyScalar(rt), ne.setFromObject(te), ne.getCenter(Ne), te.position.set(-Ne.x, -ne.min.y, -Ne.z); + const je = new tt.Box3().setFromObject(ie); + if (!je.isEmpty()) { + const oe = je.getSize(new tt.Vector3()), se = je.getCenter(new tt.Vector3()), Be = 5 / Math.max(oe.x, oe.y, oe.z, 1e-3); + ie.scale.multiplyScalar(Be), je.setFromObject(ie), je.getCenter(se), ie.position.set(-se.x, -je.min.y, -se.z); } - } catch (ne) { - (Ke = console.debug) == null || Ke.call(console, "[MJR 3D] normalize skipped:", ne); + } catch (je) { + (Ke = console.debug) == null || Ke.call(console, "[MJR 3D] normalize skipped:", je); } - if (F = te, Y = new dt.Group(), Y.add(te), L.add(Y), K = fA(te), J = yA(te), J) { - B = new dt.SkeletonHelper(te), B.visible = !1, L.add(B); - const ne = Yu({ - defaultBgColor: Ac, + if (O = ie, V = new tt.Group(), V.add(ie), L.add(V), U = fA(ie), J = yA(ie), J) { + T = new tt.SkeletonHelper(ie), T.visible = !1, L.add(T); + const je = Vu({ + defaultBgColor: Wc, defaultFov: zr, - defaultLightIntensity: Wc, + defaultLightIntensity: wc, hasSkeleton: !0 }); - o.replaceChild(ne.panel, Z.panel), Object.assign(Z, ne), Z.bgInput.addEventListener("input", () => { - var Ie; + o.replaceChild(je.panel, S.panel), Object.assign(S, je), S.bgInput.addEventListener("input", () => { + var oe; try { - L && (L.background = new dt.Color(Z.bgInput.value)); - } catch (Ne) { - (Ie = console.debug) == null || Ie.call(console, Ne); + L && (L.background = new tt.Color(S.bgInput.value)); + } catch (se) { + (oe = console.debug) == null || oe.call(console, se); } - }), Z.materialSel.addEventListener("change", () => { - Se(Z.materialSel.value); - }), Z.upSel.addEventListener("change", () => { - ke(Z.upSel.value); - }), Z.skeletonToggle && Z.skeletonToggle.addEventListener("change", () => { - we(Z.skeletonToggle.checked); - }), Z.fovSlider.addEventListener("input", () => { - var Ne; - const Ie = Math.max( + }), S.materialSel.addEventListener("change", () => { + xe(S.materialSel.value); + }), S.upSel.addEventListener("change", () => { + Xe(S.upSel.value); + }), S.skeletonToggle && S.skeletonToggle.addEventListener("change", () => { + Me(S.skeletonToggle.checked); + }), S.fovSlider.addEventListener("input", () => { + var se; + const oe = Math.max( 1, Math.min( 179, - Number(Z.fovSlider.value) || zr + Number(S.fovSlider.value) || zr ) ); try { - G && (G.fov = Ie, G.updateProjectionMatrix()); - } catch (He) { - (Ne = console.debug) == null || Ne.call(console, He); + G && (G.fov = oe, G.updateProjectionMatrix()); + } catch (fe) { + (se = console.debug) == null || se.call(console, fe); } - }), Z.lightSlider.addEventListener("input", () => { - je(Number(Z.lightSlider.value)); + }), S.lightSlider.addEventListener("input", () => { + Le(Number(S.lightSlider.value)); }); } - N = vu(dt, Y), N && (R.position.y = N.box.min.y), k = Si.PERSPECTIVE, se(), kt(), _(), Te(); - const ye = CA(Tt, Xe); - ye.length > 0 && Ue(ye, te); - const We = new dt.Scene(); - o._mjrAxisScene = We; - const pe = new dt.PerspectiveCamera(50, 1, 0.1, 100); - pe.position.set(0, 0, 3.2), pe.lookAt(0, 0, 0); - const De = 96, ot = [ + k = vu(tt, V), k && (R.position.y = k.box.min.y), N = Gi.PERSPECTIVE, de(), Yt(), _(), Re(); + const pe = hA(nn, ke); + pe.length > 0 && Pe(pe, ie); + const Ce = new tt.Scene(); + o._mjrAxisScene = Ce; + const ye = new tt.PerspectiveCamera(50, 1, 0.1, 100); + ye.position.set(0, 0, 3.2), ye.lookAt(0, 0, 0); + const De = 96, ut = [ { dir: [1, 0, 0], color: 16724787 }, // X = red { dir: [0, 1, 0], color: 3407667 }, // Y = green { dir: [0, 0, 1], color: 5605631 } // Z = blue - ], Zt = new dt.SphereGeometry(0.1, 12, 8), tn = new dt.SphereGeometry(0.08, 10, 6), Pt = new dt.MeshBasicMaterial({ color: 13421772 }); - We.add(new dt.Mesh(tn, Pt)); - for (const { dir: ne, color: Ie } of ot) { - const Ne = new dt.LineBasicMaterial({ color: Ie }), He = [ - new dt.Vector3(0, 0, 0), - new dt.Vector3(ne[0], ne[1], ne[2]) - ], rt = new dt.BufferGeometry().setFromPoints(He); - We.add(new dt.Line(rt, Ne)); - const St = new dt.MeshBasicMaterial({ color: Ie }), Yt = new dt.Mesh(Zt, St); - Yt.position.set(ne[0], ne[1], ne[2]), We.add(Yt); + ], At = new tt.SphereGeometry(0.1, 12, 8), Ht = new tt.SphereGeometry(0.08, 10, 6), Qt = new tt.MeshBasicMaterial({ color: 13421772 }); + Ce.add(new tt.Mesh(Ht, Qt)); + for (const { dir: je, color: oe } of ut) { + const se = new tt.LineBasicMaterial({ color: oe }), fe = [ + new tt.Vector3(0, 0, 0), + new tt.Vector3(je[0], je[1], je[2]) + ], Be = new tt.BufferGeometry().setFromPoints(fe); + Ce.add(new tt.Line(Be, se)); + const gt = new tt.MeshBasicMaterial({ color: oe }), Wt = new tt.Mesh(At, gt); + Wt.position.set(je[0], je[1], je[2]), Ce.add(Wt); } o._mjr3D = { controls: f, get camera() { - return h; + return C; } }; try { - (nt = n.onReady) == null || nt.call(n, { + (lt = n.onReady) == null || lt.call(n, { canvas: r, host: o, - object: Y, + object: V, renderer: b, - camera: h, + camera: C, controls: f }); - } catch (ne) { - (ut = console.debug) == null || ut.call(console, ne); + } catch (je) { + (wt = console.debug) == null || wt.call(console, je); } - U(); - const vt = () => { - var ne, Ie; - if (!(g || T || !b || !L || !h)) { + B(); + const xt = () => { + var je, oe; + if (!(g || K || !b || !L || !C)) { try { - if ((ne = f == null ? void 0 : f.update) == null || ne.call(f), E && oe) { - const St = oe.getDelta(); - q && E.update(St), Je(); + if ((je = f == null ? void 0 : f.update) == null || je.call(f), H && ne) { + const gt = ne.getDelta(); + q && H.update(gt), Fe(); } - b.setScissorTest(!1), b.setViewport(0, 0, r.width, r.height), b.render(L, h); - const Ne = Math.min(2, window.devicePixelRatio || 1), He = Math.round(De * Ne); - b.setScissorTest(!0), b.setScissor(0, 0, He, He), b.setViewport(0, 0, He, He), b.setClearColor(0, 0), b.clear(!0, !0, !1); - const rt = h.quaternion; - pe.position.set(0, 0, 3.2).applyQuaternion(rt), pe.quaternion.copy(rt), b.render(We, pe), b.setScissorTest(!1); + b.setScissorTest(!1), b.setViewport(0, 0, r.width, r.height), b.render(L, C); + const se = Math.min(2, window.devicePixelRatio || 1), fe = Math.round(De * se); + b.setScissorTest(!0), b.setScissor(0, 0, fe, fe), b.setViewport(0, 0, fe, fe), b.setClearColor(0, 0), b.clear(!0, !0, !1); + const Be = C.quaternion; + ye.position.set(0, 0, 3.2).applyQuaternion(Be), ye.quaternion.copy(Be), b.render(Ce, ye), b.setScissorTest(!1); try { b.setClearColor(L.background || 0, 1); } catch { } le(); - } catch (Ne) { - (Ie = console.debug) == null || Ie.call(console, Ne); + } catch (se) { + (oe = console.debug) == null || oe.call(console, se); } - T || (X = requestAnimationFrame(vt)); + K || (X = requestAnimationFrame(xt)); } }; - x = vt; - const re = (ne) => Ui(ne, { preventDefault: !0 }); - d.addEventListener("click", (ne) => { - re(ne), se(), Te(); - }), u.addEventListener("click", (ne) => { - re(ne), R && (R.visible = !R.visible), Te(), U(); - }), I.addEventListener("click", (ne) => { - re(ne), ge( - k === Si.PERSPECTIVE ? Si.ORTHOGRAPHIC : Si.PERSPECTIVE + x = xt; + const Gt = (je) => Bi(je, { preventDefault: !0 }); + d.addEventListener("click", (je) => { + Gt(je), de(), Re(); + }), u.addEventListener("click", (je) => { + Gt(je), R && (R.visible = !R.visible), Re(), B(); + }), I.addEventListener("click", (je) => { + Gt(je), ge( + N === Gi.PERSPECTIVE ? Gi.ORTHOGRAPHIC : Gi.PERSPECTIVE ); - }), y.addEventListener("click", (ne) => { - re(ne), ce = !ce, Z.panel.style.display = ce ? "block" : "none", Te(); - }), T || vt(); - } catch (It) { - console.warn("[MJR 3D] preview init failed", It), Q( + }), A.addEventListener("click", (je) => { + Gt(je), ae = !ae, S.panel.style.display = ae ? "block" : "none", Re(); + }), K || xt(); + } catch (at) { + console.warn("[MJR 3D] preview init failed", at), Q( "Failed to load 3D preview", - String((It == null ? void 0 : It.message) || "Three.js initialization failed.") - ), S.style.display = "none"; + String((at == null ? void 0 : at.message) || "Three.js initialization failed.") + ), h.style.display = "none"; } - }).catch((Xe) => { + }).catch((ke) => { if (!g) { - console.warn("[MJR 3D] preview init unhandled error", Xe); + console.warn("[MJR 3D] preview init unhandled error", ke); try { Q( "Failed to load 3D preview", - String((Xe == null ? void 0 : Xe.message) || "Initialization failed.") + String((ke == null ? void 0 : ke.message) || "Initialization failed.") ); } catch { } try { - S.style.display = "none"; + h.style.display = "none"; } catch { } } }), o; } -function FA({ +function OA({ overlay: e, content: t, singleView: n, @@ -16749,104 +16776,104 @@ function FA({ scheduleOverlayRedraw: a, lifecycle: c } = {}) { - var Y, F; - const s = (c == null ? void 0 : c.safeCall) || bt, d = (c == null ? void 0 : c.safeAddListener) || Qe, u = (c == null ? void 0 : c.unsubs) || [], I = () => { - var N; + var V, O; + const s = (c == null ? void 0 : c.safeCall) || It, d = (c == null ? void 0 : c.safeAddListener) || $e, u = (c == null ? void 0 : c.unsubs) || [], I = () => { + var k; try { - return (r == null ? void 0 : r.mode) !== (l == null ? void 0 : l.SINGLE) ? null : ((N = n == null ? void 0 : n.querySelector) == null ? void 0 : N.call(n, ".mjr-viewer-media")) || null; + return (r == null ? void 0 : r.mode) !== (l == null ? void 0 : l.SINGLE) ? null : ((k = n == null ? void 0 : n.querySelector) == null ? void 0 : k.call(n, ".mjr-viewer-media")) || null; } catch { return null; } - }, y = (N) => { - var V; + }, A = (k) => { + var Y; try { - if (!N) return { w: 0, h: 0 }; - const k = Number(N == null ? void 0 : N._mjrNaturalW) || 0, K = Number(N == null ? void 0 : N._mjrNaturalH) || 0; - if (k > 0 && K > 0) - return { w: k, h: K }; - if (N.tagName === "IMG") + if (!k) return { w: 0, h: 0 }; + const N = Number(k == null ? void 0 : k._mjrNaturalW) || 0, U = Number(k == null ? void 0 : k._mjrNaturalH) || 0; + if (N > 0 && U > 0) + return { w: N, h: U }; + if (k.tagName === "IMG") return { - w: Number(N.naturalWidth) || 0, - h: Number(N.naturalHeight) || 0 + w: Number(k.naturalWidth) || 0, + h: Number(k.naturalHeight) || 0 }; - if (N.tagName === "VIDEO") - return { w: Number(N.videoWidth) || 0, h: Number(N.videoHeight) || 0 }; - if (N.tagName === "CANVAS") { - const z = Number(N._mjrNaturalW) || Number(N.width) || 0, B = Number(N._mjrNaturalH) || Number(N.height) || 0; - return { w: z, h: B }; + if (k.tagName === "VIDEO") + return { w: Number(k.videoWidth) || 0, h: Number(k.videoHeight) || 0 }; + if (k.tagName === "CANVAS") { + const z = Number(k._mjrNaturalW) || Number(k.width) || 0, T = Number(k._mjrNaturalH) || Number(k.height) || 0; + return { w: z, h: T }; } - } catch (k) { - (V = console.debug) == null || V.call(console, k); + } catch (N) { + (Y = console.debug) == null || Y.call(console, N); } return { w: 0, h: 0 }; - }, S = () => { - var N; + }, h = () => { + var k; try { - const V = (N = t == null ? void 0 : t.getBoundingClientRect) == null ? void 0 : N.call(t); - return V && V.width > 0 && V.height > 0 ? V : null; + const Y = (k = t == null ? void 0 : t.getBoundingClientRect) == null ? void 0 : k.call(t); + return Y && Y.width > 0 && Y.height > 0 ? Y : null; } catch { return null; } - }, Z = () => { - var N, V; + }, S = () => { + var k, Y; try { - let k = n; - (r == null ? void 0 : r.mode) === (l == null ? void 0 : l.AB_COMPARE) ? k = i : (r == null ? void 0 : r.mode) === (l == null ? void 0 : l.SIDE_BY_SIDE) && (k = o); - const K = (N = k == null ? void 0 : k.querySelector) == null ? void 0 : N.call(k, ".mjr-viewer-media"); - if (!K) return; - const { w: z, h: B } = y(K); - z > 0 && B > 0 && (r._mediaW = z, r._mediaH = B); - } catch (k) { - (V = console.debug) == null || V.call(console, k); + let N = n; + (r == null ? void 0 : r.mode) === (l == null ? void 0 : l.AB_COMPARE) ? N = i : (r == null ? void 0 : r.mode) === (l == null ? void 0 : l.SIDE_BY_SIDE) && (N = o); + const U = (k = N == null ? void 0 : N.querySelector) == null ? void 0 : k.call(N, ".mjr-viewer-media"); + if (!U) return; + const { w: z, h: T } = A(U); + z > 0 && T > 0 && (r._mediaW = z, r._mediaH = T); + } catch (N) { + (Y = console.debug) == null || Y.call(console, N); } - }, C = (N, { clampPanToBounds: V, applyTransform: k } = {}) => { + }, W = (k, { clampPanToBounds: Y, applyTransform: N } = {}) => { var z; - if (!N || N._mjrMediaSizeBound) return; - N._mjrMediaSizeBound = !0; - const K = () => { - var B, J; - Z(); + if (!k || k._mjrMediaSizeBound) return; + k._mjrMediaSizeBound = !0; + const U = () => { + var T, J; + S(); try { - V == null || V(); + Y == null || Y(); } catch (P) { - (B = console.debug) == null || B.call(console, P); + (T = console.debug) == null || T.call(console, P); } try { - k == null || k(); + N == null || N(); } catch (P) { (J = console.debug) == null || J.call(console, P); } }; try { - N.tagName === "IMG" ? N.addEventListener("load", () => requestAnimationFrame(K), { once: !0 }) : N.tagName === "VIDEO" && N.addEventListener("loadedmetadata", () => requestAnimationFrame(K), { + k.tagName === "IMG" ? k.addEventListener("load", () => requestAnimationFrame(U), { once: !0 }) : k.tagName === "VIDEO" && k.addEventListener("loadedmetadata", () => requestAnimationFrame(U), { once: !0 }); - } catch (B) { - (z = console.debug) == null || z.call(console, B); + } catch (T) { + (z = console.debug) == null || z.call(console, T); } }, g = () => { - var N, V, k; + var k, Y, N; try { if (!e || e.style.display === "none") return; - const K = Math.max( + const U = Math.max( si.MIN, Math.min(si.MAX, Number(r == null ? void 0 : r.zoom) || 1) - ), z = (N = r == null ? void 0 : r.assets) == null ? void 0 : N[r == null ? void 0 : r.currentIndex]; - let B = Number(z == null ? void 0 : z.width) || 0, J = Number(z == null ? void 0 : z.height) || 0; - if (B > 0 && J > 0 || (Z(), B = Number(r == null ? void 0 : r._mediaW) || 0, J = Number(r == null ? void 0 : r._mediaH) || 0), !(B > 0 && J > 0)) return; - const P = B / J; + ), z = (k = r == null ? void 0 : r.assets) == null ? void 0 : k[r == null ? void 0 : r.currentIndex]; + let T = Number(z == null ? void 0 : z.width) || 0, J = Number(z == null ? void 0 : z.height) || 0; + if (T > 0 && J > 0 || (S(), T = Number(r == null ? void 0 : r._mediaW) || 0, J = Number(r == null ? void 0 : r._mediaH) || 0), !(T > 0 && J > 0)) return; + const P = T / J; if (!Number.isFinite(P) || P <= 0) return; - const H = () => { - var ge, je; + const E = () => { + var ge, Le; const Q = Date.now(); try { - const Se = r == null ? void 0 : r._viewportCache; - if (Se && Se.mode === (r == null ? void 0 : r.mode) && Q - (Se.at || 0) < 250) { - const ke = Number(Se.w) || 0, we = Number(Se.h) || 0; - if (ke > 0 && we > 0) return { w: ke, h: we }; + const xe = r == null ? void 0 : r._viewportCache; + if (xe && xe.mode === (r == null ? void 0 : r.mode) && Q - (xe.at || 0) < 250) { + const Xe = Number(xe.w) || 0, Me = Number(xe.h) || 0; + if (Xe > 0 && Me > 0) return { w: Xe, h: Me }; } - } catch (Se) { - (ge = console.debug) == null || ge.call(console, Se); + } catch (xe) { + (ge = console.debug) == null || ge.call(console, xe); } const _ = Math.max( Number(t == null ? void 0 : t.clientWidth) || 0, @@ -16854,191 +16881,191 @@ function FA({ ), le = Math.max( Number(t == null ? void 0 : t.clientHeight) || 0, Number(e == null ? void 0 : e.clientHeight) || 0 - ), de = (Se, ke) => ({ - w: Math.max(Number(Se) || 0, _), - h: Math.max(Number(ke) || 0, le) + ), ce = (xe, Xe) => ({ + w: Math.max(Number(xe) || 0, _), + h: Math.max(Number(Xe) || 0, le) }); - let se = null; + let de = null; if ((r == null ? void 0 : r.mode) === (l == null ? void 0 : l.SINGLE)) - se = de(n == null ? void 0 : n.clientWidth, n == null ? void 0 : n.clientHeight); + de = ce(n == null ? void 0 : n.clientWidth, n == null ? void 0 : n.clientHeight); else if ((r == null ? void 0 : r.mode) === (l == null ? void 0 : l.AB_COMPARE)) - se = de(i == null ? void 0 : i.clientWidth, i == null ? void 0 : i.clientHeight); + de = ce(i == null ? void 0 : i.clientWidth, i == null ? void 0 : i.clientHeight); else { - const Se = Array.from((o == null ? void 0 : o.children) || []).filter( - (ke) => ke && ke.nodeType === 1 + const xe = Array.from((o == null ? void 0 : o.children) || []).filter( + (Xe) => Xe && Xe.nodeType === 1 ); - if (Se.length) { - let ke = 1 / 0, we = 1 / 0; - for (const Je of Se) { - const $e = Number(Je.clientWidth) || 0, qe = Number(Je.clientHeight) || 0; - $e > 0 && (ke = Math.min(ke, $e)), qe > 0 && (we = Math.min(we, qe)); + if (xe.length) { + let Xe = 1 / 0, Me = 1 / 0; + for (const Fe of xe) { + const it = Number(Fe.clientWidth) || 0, qe = Number(Fe.clientHeight) || 0; + it > 0 && (Xe = Math.min(Xe, it)), qe > 0 && (Me = Math.min(Me, qe)); } - Number.isFinite(ke) && Number.isFinite(we) && (se = de(ke, we)); + Number.isFinite(Xe) && Number.isFinite(Me) && (de = ce(Xe, Me)); } - se || (se = de(o == null ? void 0 : o.clientWidth, o == null ? void 0 : o.clientHeight)); + de || (de = ce(o == null ? void 0 : o.clientWidth, o == null ? void 0 : o.clientHeight)); } try { - r._viewportCache = { mode: r == null ? void 0 : r.mode, w: se.w, h: se.h, at: Q }; - } catch (Se) { - (je = console.debug) == null || je.call(console, Se); + r._viewportCache = { mode: r == null ? void 0 : r.mode, w: de.w, h: de.h, at: Q }; + } catch (xe) { + (Le = console.debug) == null || Le.call(console, xe); } - return se; - }, { w: $, h: E } = H(); - if (!($ > 0 && E > 0)) { - ((V = e == null ? void 0 : e.style) == null ? void 0 : V.display) !== "none" && requestAnimationFrame(g); + return de; + }, { w: $, h: H } = E(); + if (!($ > 0 && H > 0)) { + ((Y = e == null ? void 0 : e.style) == null ? void 0 : Y.display) !== "none" && requestAnimationFrame(g); return; } - const oe = $ / E; - let M = 0, j = 0; - P > oe ? (M = $, j = $ / P) : (j = E, M = E * P); - const O = M * K, D = j * K, q = O > $ + 1 || D > E + 1; - if (!(K > 1.001) && !q) { + const ne = $ / H; + let M = 0, v = 0; + P > ne ? (M = $, v = $ / P) : (v = H, M = H * P); + const F = M * U, D = v * U, q = F > $ + 1 || D > H + 1; + if (!(U > 1.001) && !q) { r.panX = 0, r.panY = 0; return; } - const ee = Math.max(0, O - $), ce = Math.max(0, D - E), ue = ee / 2 * K, U = ce / 2 * K; - r.panX = Math.max(-ue, Math.min(ue, Number(r == null ? void 0 : r.panX) || 0)), r.panY = Math.max(-U, Math.min(U, Number(r == null ? void 0 : r.panY) || 0)); - } catch (K) { - (k = console.debug) == null || k.call(console, K); + const ee = Math.max(0, F - $), ae = Math.max(0, D - H), ue = ee / 2 * U, B = ae / 2 * U; + r.panX = Math.max(-ue, Math.min(ue, Number(r == null ? void 0 : r.panX) || 0)), r.panY = Math.max(-B, Math.min(B, Number(r == null ? void 0 : r.panY) || 0)); + } catch (U) { + (N = console.debug) == null || N.call(console, U); } - }, A = () => { - const N = Math.max(si.MIN, Math.min(si.MAX, Number(r == null ? void 0 : r.zoom) || 1)), V = Number(r == null ? void 0 : r.panX) || 0, k = Number(r == null ? void 0 : r.panY) || 0, K = V / N, z = k / N; - return `translate3d(${K}px, ${z}px, 0) scale(${N})`; + }, y = () => { + const k = Math.max(si.MIN, Math.min(si.MAX, Number(r == null ? void 0 : r.zoom) || 1)), Y = Number(r == null ? void 0 : r.panX) || 0, N = Number(r == null ? void 0 : r.panY) || 0, U = Y / k, z = N / k; + return `translate3d(${U}px, ${z}px, 0) scale(${k})`; }, p = () => { - var N; + var k; try { if (!t) return; if (!e || e.style.display === "none") { t.style.cursor = ""; return; } - const V = Number(r == null ? void 0 : r.zoom) || 1, k = I(), { w: K, h: z } = y(k) || { w: 0, h: 0 }, B = S(), J = B && K > 0 && z > 0 ? f(K, z, B.width, B.height, V) : !1; - if (!(V > 1.01 || J)) { + const Y = Number(r == null ? void 0 : r.zoom) || 1, N = I(), { w: U, h: z } = A(N) || { w: 0, h: 0 }, T = h(), J = T && U > 0 && z > 0 ? f(U, z, T.width, T.height, Y) : !1; + if (!(Y > 1.01 || J)) { t.style.cursor = ""; return; } t.style.cursor = "grab"; - } catch (V) { - (N = console.debug) == null || N.call(console, V); + } catch (Y) { + (k = console.debug) == null || k.call(console, Y); } }, b = () => { - var N, V, k, K, z; + var k, Y, N, U, z; try { g(); - const B = A(), J = G(), P = ((N = e == null ? void 0 : e.querySelectorAll) == null ? void 0 : N.call(e, ".mjr-viewer-media")) || []; - for (const H of P) + const T = y(), J = G(), P = ((k = e == null ? void 0 : e.querySelectorAll) == null ? void 0 : k.call(e, ".mjr-viewer-media")) || []; + for (const E of P) try { - if (H != null && H._mjrDisableViewerTransform) continue; - const $ = W(H, J), E = ((V = $ == null ? void 0 : $.getBoundingClientRect) == null ? void 0 : V.call($)) || null; - if (E) { - const oe = Number(E.width) || 0, M = Number(E.height) || 0; - if (oe > 1 && M > 1) { - const { w: j, h: O } = y(H) || { w: 0, h: 0 }; - if (j > 0 && O > 0) { - const D = h(j, O, oe, M); - D.w > 1 && D.h > 1 && (H.style.width = `${Math.round(D.w)}px`, H.style.height = `${Math.round(D.h)}px`); + if (E != null && E._mjrDisableViewerTransform) continue; + const $ = Z(E, J), H = ((Y = $ == null ? void 0 : $.getBoundingClientRect) == null ? void 0 : Y.call($)) || null; + if (H) { + const ne = Number(H.width) || 0, M = Number(H.height) || 0; + if (ne > 1 && M > 1) { + const { w: v, h: F } = A(E) || { w: 0, h: 0 }; + if (v > 0 && F > 0) { + const D = C(v, F, ne, M); + D.w > 1 && D.h > 1 && (E.style.width = `${Math.round(D.w)}px`, E.style.height = `${Math.round(D.h)}px`); } } } - H.style.transform = B; + E.style.transform = T; } catch ($) { - (k = console.debug) == null || k.call(console, $); + (N = console.debug) == null || N.call(console, $); } try { a == null || a(!0); - } catch (H) { - (K = console.debug) == null || K.call(console, H); + } catch (E) { + (U = console.debug) == null || U.call(console, E); } - } catch (B) { - (z = console.debug) == null || z.call(console, B); + } catch (T) { + (z = console.debug) == null || z.call(console, T); } - }, L = (N, { clientX: V = null, clientY: k = null } = {}) => { - var K, z, B, J; + }, L = (k, { clientX: Y = null, clientY: N = null } = {}) => { + var U, z, T, J; try { const P = Math.max( si.MIN, Math.min(si.MAX, Number(r == null ? void 0 : r.zoom) || 1) - ), H = Math.max( + ), E = Math.max( si.MIN, - Math.min(si.MAX, Number(N) || P) + Math.min(si.MAX, Number(k) || P) ); try { r._userInteracted = !0; } catch (M) { - (K = console.debug) == null || K.call(console, M); + (U = console.debug) == null || U.call(console, M); } - let $ = Number(r == null ? void 0 : r.panX) || 0, E = Number(r == null ? void 0 : r.panY) || 0; - if (V != null && k != null && Number.isFinite(Number(V)) && Number.isFinite(Number(k))) + let $ = Number(r == null ? void 0 : r.panX) || 0, H = Number(r == null ? void 0 : r.panY) || 0; + if (Y != null && N != null && Number.isFinite(Number(Y)) && Number.isFinite(Number(N))) try { const M = (z = t == null ? void 0 : t.getBoundingClientRect) == null ? void 0 : z.call(t); if (M && M.width > 0 && M.height > 0) { - const j = M.left + M.width / 2, O = M.top + M.height / 2, D = (Number(V) || 0) - j, q = (Number(k) || 0) - O, ee = H / P; - $ = Math.round(((Number(r == null ? void 0 : r.panX) || 0) * ee + (1 - ee) * D) * 10) / 10, E = Math.round(((Number(r == null ? void 0 : r.panY) || 0) * ee + (1 - ee) * q) * 10) / 10; + const v = M.left + M.width / 2, F = M.top + M.height / 2, D = (Number(Y) || 0) - v, q = (Number(N) || 0) - F, ee = E / P; + $ = Math.round(((Number(r == null ? void 0 : r.panX) || 0) * ee + (1 - ee) * D) * 10) / 10, H = Math.round(((Number(r == null ? void 0 : r.panY) || 0) * ee + (1 - ee) * q) * 10) / 10; } } catch (M) { - (B = console.debug) == null || B.call(console, M); + (T = console.debug) == null || T.call(console, M); } - else if (H !== P) { - const M = H / P; - $ = Math.round((Number(r == null ? void 0 : r.panX) || 0) * M * 10) / 10, E = Math.round((Number(r == null ? void 0 : r.panY) || 0) * M * 10) / 10; + else if (E !== P) { + const M = E / P; + $ = Math.round((Number(r == null ? void 0 : r.panX) || 0) * M * 10) / 10, H = Math.round((Number(r == null ? void 0 : r.panY) || 0) * M * 10) / 10; } - r.zoom = H, r.panX = $, r.panY = E, Math.abs(r.zoom - 1) < 1e-3 && (r.zoom = 1, r.panX = 0, r.panY = 0), r.targetZoom = r.zoom, b(), p(); + r.zoom = E, r.panX = $, r.panY = H, Math.abs(r.zoom - 1) < 1e-3 && (r.zoom = 1, r.panX = 0, r.panY = 0), r.targetZoom = r.zoom, b(), p(); } catch (P) { (J = console.debug) == null || J.call(console, P); } - }, h = (N, V, k, K) => { + }, C = (k, Y, N, U) => { try { - const z = Number(N) || 0, B = Number(V) || 0, J = Number(k) || 0, P = Number(K) || 0; - if (!(z > 0 && B > 0 && J > 0 && P > 0)) return { w: 0, h: 0 }; - const H = z / B; - return !Number.isFinite(H) || H <= 0 ? { w: 0, h: 0 } : { w: P * H, h: P }; + const z = Number(k) || 0, T = Number(Y) || 0, J = Number(N) || 0, P = Number(U) || 0; + if (!(z > 0 && T > 0 && J > 0 && P > 0)) return { w: 0, h: 0 }; + const E = z / T; + return !Number.isFinite(E) || E <= 0 ? { w: 0, h: 0 } : { w: P * E, h: P }; } catch { return { w: 0, h: 0 }; } }, G = () => { try { - const N = r == null ? void 0 : r.mode; - return N === (l == null ? void 0 : l.AB_COMPARE) ? i || t || null : N === (l == null ? void 0 : l.SIDE_BY_SIDE) ? o || t || null : n || t || null; + const k = r == null ? void 0 : r.mode; + return k === (l == null ? void 0 : l.AB_COMPARE) ? i || t || null : k === (l == null ? void 0 : l.SIDE_BY_SIDE) ? o || t || null : n || t || null; } catch { return t || null; } - }, W = (N, V) => { + }, Z = (k, Y) => { try { - if (!N) return V || null; - const k = r == null ? void 0 : r.mode; - if (k === (l == null ? void 0 : l.SIDE_BY_SIDE) || k === (l == null ? void 0 : l.AB_COMPARE)) { - let K = N; - for (; K && K !== V && K.parentElement; ) { - if (K.parentElement === V) return K; - K = K.parentElement; + if (!k) return Y || null; + const N = r == null ? void 0 : r.mode; + if (N === (l == null ? void 0 : l.SIDE_BY_SIDE) || N === (l == null ? void 0 : l.AB_COMPARE)) { + let U = k; + for (; U && U !== Y && U.parentElement; ) { + if (U.parentElement === Y) return U; + U = U.parentElement; } - return V || null; + return Y || null; } - return V || t || null; + return Y || t || null; } catch { - return V || t || null; + return Y || t || null; } - }, f = (N, V, k, K, z) => { + }, f = (k, Y, N, U, z) => { try { - const B = h(N, V, k, K); - if (!(B.w > 0 && B.h > 0)) return !1; - const J = Math.max(si.MIN, Math.min(si.MAX, Number(z) || 1)), P = B.w * J, H = B.h * J; - return P > (Number(k) || 0) + 1 || H > (Number(K) || 0) + 1; + const T = C(k, Y, N, U); + if (!(T.w > 0 && T.h > 0)) return !1; + const J = Math.max(si.MIN, Math.min(si.MAX, Number(z) || 1)), P = T.w * J, E = T.h * J; + return P > (Number(N) || 0) + 1 || E > (Number(U) || 0) + 1; } catch { return !1; } }, X = () => { try { - const N = I(); - if (!N) return null; - const { w: V, h: k } = y(N); - if (!(V > 0 && k > 0)) return null; - const K = S(); - if (!K) return null; - const z = h(V, k, K.width, K.height); + const k = I(); + if (!k) return null; + const { w: Y, h: N } = A(k); + if (!(Y > 0 && N > 0)) return null; + const U = h(); + if (!U) return null; + const z = C(Y, N, U.width, U.height); if (!(z.w > 0 && z.h > 0)) return null; - const B = V / z.w; - return !Number.isFinite(B) || B <= 0 ? null : Math.max(si.MIN, Math.min(si.MAX, B)); + const T = Y / z.w; + return !Number.isFinite(T) || T <= 0 ? null : Math.max(si.MIN, Math.min(si.MAX, T)); } catch { return null; } @@ -17049,162 +17076,162 @@ function FA({ startY: 0, startPanX: 0, startPanY: 0 - }, T = (N) => { - var J, P, H, $, E, oe, M, j, O, D, q, ee, ce, ue, U, Q, _, le, de; - if (!e || e.style.display === "none" || wc(N == null ? void 0 : N.target)) return; - const V = Number(r == null ? void 0 : r.zoom) || 1, k = (() => { + }, K = (k) => { + var J, P, E, $, H, ne, M, v, F, D, q, ee, ae, ue, B, Q, _, le, ce; + if (!e || e.style.display === "none" || Mc(k == null ? void 0 : k.target)) return; + const Y = Number(r == null ? void 0 : r.zoom) || 1, N = (() => { try { - return !!(fe != null && fe.VIEWER_ALLOW_PAN_AT_ZOOM_1); + return !!(he != null && he.VIEWER_ALLOW_PAN_AT_ZOOM_1); } catch { return !1; } })(); if (!(() => { try { - if (k) return !0; - const se = I(), { w: ge, h: je } = y(se) || { w: 0, h: 0 }, Se = S(); - return !Se || !(ge > 0 && je > 0) ? V > 1.01 : V > 1.01 || f(ge, je, Se.width, Se.height, V); + if (N) return !0; + const de = I(), { w: ge, h: Le } = A(de) || { w: 0, h: 0 }, xe = h(); + return !xe || !(ge > 0 && Le > 0) ? Y > 1.01 : Y > 1.01 || f(ge, Le, xe.width, xe.height, Y); } catch { - return V > 1.01; + return Y > 1.01; } })()) { try { - r._panHintAt = Date.now(), r._panHintX = (N == null ? void 0 : N.clientX) ?? null, r._panHintY = (N == null ? void 0 : N.clientY) ?? null; - } catch (se) { - (J = console.debug) == null || J.call(console, se); + r._panHintAt = Date.now(), r._panHintX = (k == null ? void 0 : k.clientX) ?? null, r._panHintY = (k == null ? void 0 : k.clientY) ?? null; + } catch (de) { + (J = console.debug) == null || J.call(console, de); } try { r._panHintTimer && clearTimeout(r._panHintTimer); - } catch (se) { - (P = console.debug) == null || P.call(console, se); + } catch (de) { + (P = console.debug) == null || P.call(console, de); } try { r._panHintTimer = setTimeout(() => { - var se; + var de; try { r._panHintAt = 0; } catch (ge) { - (se = console.debug) == null || se.call(console, ge); + (de = console.debug) == null || de.call(console, ge); } s(a); }, 950); - } catch (se) { - (H = console.debug) == null || H.call(console, se); + } catch (de) { + (E = console.debug) == null || E.call(console, de); } s(a); return; } - const z = N.button === 0, B = N.button === 1; - if (!(!z && !B)) { + const z = k.button === 0, T = k.button === 1; + if (!(!z && !T)) { try { - const se = N.target; - if (se && (se.tagName === "INPUT" || se.tagName === "TEXTAREA" || se.tagName === "SELECT" || se.isContentEditable)) + const de = k.target; + if (de && (de.tagName === "INPUT" || de.tagName === "TEXTAREA" || de.tagName === "SELECT" || de.isContentEditable)) return; - } catch (se) { - ($ = console.debug) == null || $.call(console, se); + } catch (de) { + ($ = console.debug) == null || $.call(console, de); } try { - if ((oe = (E = N == null ? void 0 : N.target) == null ? void 0 : E.closest) != null && oe.call(E, ".mjr-video-controls") || (j = (M = N == null ? void 0 : N.target) == null ? void 0 : M.closest) != null && j.call(M, ".mjr-context-menu") || (D = (O = N == null ? void 0 : N.target) == null ? void 0 : O.closest) != null && D.call(O, ".mjr-ab-slider") || wc(N == null ? void 0 : N.target)) return; - } catch (se) { - (q = console.debug) == null || q.call(console, se); + if ((ne = (H = k == null ? void 0 : k.target) == null ? void 0 : H.closest) != null && ne.call(H, ".mjr-video-controls") || (v = (M = k == null ? void 0 : k.target) == null ? void 0 : M.closest) != null && v.call(M, ".mjr-context-menu") || (D = (F = k == null ? void 0 : k.target) == null ? void 0 : F.closest) != null && D.call(F, ".mjr-ab-slider") || Mc(k == null ? void 0 : k.target)) return; + } catch (de) { + (q = console.debug) == null || q.call(console, de); } try { - if (!((ee = t == null ? void 0 : t.contains) != null && ee.call(t, N.target))) return; + if (!((ee = t == null ? void 0 : t.contains) != null && ee.call(t, k.target))) return; } catch { return; } x.active = !0; try { r._userInteracted = !0; - } catch (se) { - (ce = console.debug) == null || ce.call(console, se); + } catch (de) { + (ae = console.debug) == null || ae.call(console, de); } - x.pointerId = N.pointerId; + x.pointerId = k.pointerId; try { - r._lastPointerX = N.clientX, r._lastPointerY = N.clientY; - } catch (se) { - (ue = console.debug) == null || ue.call(console, se); + r._lastPointerX = k.clientX, r._lastPointerY = k.clientY; + } catch (de) { + (ue = console.debug) == null || ue.call(console, de); } - x.startX = N.clientX, x.startY = N.clientY, x.startPanX = Number(r == null ? void 0 : r.panX) || 0, x.startPanY = Number(r == null ? void 0 : r.panY) || 0; + x.startX = k.clientX, x.startY = k.clientY, x.startPanX = Number(r == null ? void 0 : r.panX) || 0, x.startPanY = Number(r == null ? void 0 : r.panY) || 0; try { - N.preventDefault(), N.stopPropagation(), (U = N.stopImmediatePropagation) == null || U.call(N); - } catch (se) { - (Q = console.debug) == null || Q.call(console, se); + k.preventDefault(), k.stopPropagation(), (B = k.stopImmediatePropagation) == null || B.call(k); + } catch (de) { + (Q = console.debug) == null || Q.call(console, de); } try { - (_ = t == null ? void 0 : t.setPointerCapture) == null || _.call(t, N.pointerId); - } catch (se) { - (le = console.debug) == null || le.call(console, se); + (_ = t == null ? void 0 : t.setPointerCapture) == null || _.call(t, k.pointerId); + } catch (de) { + (le = console.debug) == null || le.call(console, de); } try { t && (t.style.cursor = "grabbing"); - } catch (se) { - (de = console.debug) == null || de.call(console, se); + } catch (de) { + (ce = console.debug) == null || ce.call(console, de); } } - }, v = (N) => { - var B, J, P, H, $, E; + }, j = (k) => { + var T, J, P, E, $, H; if (!x.active) return; try { - if ((J = (B = N == null ? void 0 : N.target) == null ? void 0 : B.closest) != null && J.call(B, ".mjr-video-controls")) return; - } catch (oe) { - (P = console.debug) == null || P.call(console, oe); + if ((J = (T = k == null ? void 0 : k.target) == null ? void 0 : T.closest) != null && J.call(T, ".mjr-video-controls")) return; + } catch (ne) { + (P = console.debug) == null || P.call(console, ne); } try { - N.preventDefault(), N.stopPropagation(), (H = N.stopImmediatePropagation) == null || H.call(N); - } catch (oe) { - ($ = console.debug) == null || $.call(console, oe); + k.preventDefault(), k.stopPropagation(), (E = k.stopImmediatePropagation) == null || E.call(k); + } catch (ne) { + ($ = console.debug) == null || $.call(console, ne); } - const V = (Number(N.clientX) || 0) - x.startX, k = (Number(N.clientY) || 0) - x.startY, K = Math.max(si.MIN, Math.min(si.MAX, Number(r == null ? void 0 : r.zoom) || 1)), z = Math.max(1, K); - r.panX = x.startPanX + V * z, r.panY = x.startPanY + k * z; + const Y = (Number(k.clientX) || 0) - x.startX, N = (Number(k.clientY) || 0) - x.startY, U = Math.max(si.MIN, Math.min(si.MAX, Number(r == null ? void 0 : r.zoom) || 1)), z = Math.max(1, U); + r.panX = x.startPanX + Y * z, r.panY = x.startPanY + N * z; try { - r._lastPointerX = N.clientX, r._lastPointerY = N.clientY; - } catch (oe) { - (E = console.debug) == null || E.call(console, oe); + r._lastPointerX = k.clientX, r._lastPointerY = k.clientY; + } catch (ne) { + (H = console.debug) == null || H.call(console, ne); } b(), p(); - }, w = (N) => { - var V, k; + }, w = (k) => { + var Y, N; if (x.active) { x.active = !1, x.pointerId = null; try { - (V = t == null ? void 0 : t.releasePointerCapture) == null || V.call(t, N.pointerId); - } catch (K) { - (k = console.debug) == null || k.call(console, K); + (Y = t == null ? void 0 : t.releasePointerCapture) == null || Y.call(t, k.pointerId); + } catch (U) { + (N = console.debug) == null || N.call(console, U); } p(); } - }, R = (N) => { - var k, K, z, B, J; + }, R = (k) => { + var N, U, z, T, J; if (!e || e.style.display === "none") return; try { - if (!((k = t == null ? void 0 : t.contains) != null && k.call(t, N.target))) return; + if (!((N = t == null ? void 0 : t.contains) != null && N.call(t, k.target))) return; } catch (P) { - (K = console.debug) == null || K.call(console, P); + (U = console.debug) == null || U.call(console, P); } try { - if (wc(N == null ? void 0 : N.target)) return; + if (Mc(k == null ? void 0 : k.target)) return; } catch (P) { (z = console.debug) == null || z.call(console, P); } try { - N.preventDefault(), N.stopPropagation(), (B = N.stopImmediatePropagation) == null || B.call(N); + k.preventDefault(), k.stopPropagation(), (T = k.stopImmediatePropagation) == null || T.call(k); } catch (P) { (J = console.debug) == null || J.call(console, P); } Math.abs((Number(r == null ? void 0 : r.targetZoom) || 1) - 1) < 0.01 ? L(Math.min(8, (Number(r == null ? void 0 : r.targetZoom) || 1) * 4), { - clientX: N.clientX, - clientY: N.clientY - }) : L(1, { clientX: N.clientX, clientY: N.clientY }); + clientX: k.clientX, + clientY: k.clientY + }) : L(1, { clientX: k.clientX, clientY: k.clientY }); }; try { t && !t._mjrPanBound && (u.push( - d(t, "pointerdown", T, { + d(t, "pointerdown", K, { passive: !1, capture: !0 }) ), u.push( - d(t, "pointermove", v, { + d(t, "pointermove", j, { passive: !1, capture: !0 }) @@ -17219,8 +17246,8 @@ function FA({ capture: !0 }) ), t._mjrPanBound = !0); - } catch (N) { - (Y = console.debug) == null || Y.call(console, N); + } catch (k) { + (V = console.debug) == null || V.call(console, k); } try { t && !t._mjrDblClickResetBound && (u.push( @@ -17229,17 +17256,17 @@ function FA({ capture: !0 }) ), t._mjrDblClickResetBound = !0); - } catch (N) { - (F = console.debug) == null || F.call(console, N); + } catch (k) { + (O = console.debug) == null || O.call(console, k); } return { getPrimaryMedia: I, - getMediaNaturalSize: y, - getViewportRect: S, - updateMediaNaturalSize: Z, - attachMediaLoadHandlers: C, + getMediaNaturalSize: A, + getViewportRect: h, + updateMediaNaturalSize: S, + attachMediaLoadHandlers: W, clampPanToBounds: g, - mediaTransform: A, + mediaTransform: y, applyTransform: b, setZoom: L, computeOneToOneZoom: X, @@ -17251,7 +17278,7 @@ function FA({ } }; } -const OA = ` +const FA = ` attribute vec2 a_position; varying vec2 v_uv; void main() { @@ -17314,7 +17341,7 @@ void main() { } } `; -function Nu(e, t, n) { +function ku(e, t, n) { const i = e.createShader(t); return e.shaderSource(i, n), e.compileShader(i), e.getShaderParameter(i, e.COMPILE_STATUS) ? i : (console.warn("WebGL Shader Error:", e.getShaderInfoLog(i)), e.deleteShader(i), null); } @@ -17340,7 +17367,7 @@ function TA() { return !1; } } -function BA(e) { +function KA(e) { const { canvas: t, videoEl: n, getGradeParams: i } = e; let o = null, r = null, l = 4096, a = !1; const c = { @@ -17349,31 +17376,31 @@ function BA(e) { }; function s() { var p, b; - let A = null; + let y = null; try { - A = t.getContext("webgl", { alpha: !1, preserveDrawingBuffer: !0 }); + y = t.getContext("webgl", { alpha: !1, preserveDrawingBuffer: !0 }); } catch (L) { (p = console.debug) == null || p.call(console, L); } - if (!A) + if (!y) try { - A = t.getContext("experimental-webgl", { + y = t.getContext("experimental-webgl", { alpha: !1, preserveDrawingBuffer: !0 }); } catch (L) { (b = console.debug) == null || b.call(console, L); } - return A && (l = A.getParameter(A.MAX_TEXTURE_SIZE) || 4096), A; + return y && (l = y.getParameter(y.MAX_TEXTURE_SIZE) || 4096), y; } - const d = (A = "") => { + const d = (y = "") => { if (!o) return; const p = o.getError(); - p !== o.NO_ERROR && console.error(`WebGL Error [${A}]: ${p}`); + p !== o.NO_ERROR && console.error(`WebGL Error [${y}]: ${p}`); }, u = () => { - var L, h, G, W, f, X; + var L, C, G, Z, f, X; if (!o || !r) return; - const { positionBuffer: A, texture: p, program: b } = r; + const { positionBuffer: y, texture: p, program: b } = r; try { o.bindTexture(o.TEXTURE_2D, null); } catch (x) { @@ -17382,7 +17409,7 @@ function BA(e) { try { o.bindBuffer(o.ARRAY_BUFFER, null); } catch (x) { - (h = console.debug) == null || h.call(console, x); + (C = console.debug) == null || C.call(console, x); } try { o.useProgram(null); @@ -17392,10 +17419,10 @@ function BA(e) { try { o.deleteTexture(p); } catch (x) { - (W = console.debug) == null || W.call(console, x); + (Z = console.debug) == null || Z.call(console, x); } try { - o.deleteBuffer(A); + o.deleteBuffer(y); } catch (x) { (f = console.debug) == null || f.call(console, x); } @@ -17408,11 +17435,11 @@ function BA(e) { }, I = () => { if (!o) return null; u(); - const A = Nu(o, o.VERTEX_SHADER, OA), p = Nu(o, o.FRAGMENT_SHADER, zA); - if (!A || !p) - return A && o.deleteShader(A), p && o.deleteShader(p), null; - const b = JA(o, A, p); - if (o.deleteShader(A), o.deleteShader(p), !b) + const y = ku(o, o.VERTEX_SHADER, FA), p = ku(o, o.FRAGMENT_SHADER, zA); + if (!y || !p) + return y && o.deleteShader(y), p && o.deleteShader(p), null; + const b = JA(o, y, p); + if (o.deleteShader(y), o.deleteShader(p), !b) return null; d("setupResources:createProgram"); const L = { @@ -17424,56 +17451,56 @@ function BA(e) { u_analysis: o.getUniformLocation(b, "u_analysis"), u_thresh: o.getUniformLocation(b, "u_zebra_threshold"), u_res: o.getUniformLocation(b, "u_resolution") - }, h = o.createBuffer(); - o.bindBuffer(o.ARRAY_BUFFER, h), o.bufferData( + }, C = o.createBuffer(); + o.bindBuffer(o.ARRAY_BUFFER, C), o.bufferData( o.ARRAY_BUFFER, new Float32Array([-1, -1, 1, -1, -1, 1, -1, 1, 1, -1, 1, 1]), o.STATIC_DRAW ), d("setupResources:bufferData"); const G = o.createTexture(); - return o.bindTexture(o.TEXTURE_2D, G), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_WRAP_S, o.CLAMP_TO_EDGE), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_WRAP_T, o.CLAMP_TO_EDGE), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_MIN_FILTER, o.LINEAR), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_MAG_FILTER, o.LINEAR), d("setupResources:texSetup"), { program: b, loc: L, positionBuffer: h, texture: G }; - }, y = () => a || c._destroyed || (o || (o = s()), !o) ? !1 : (r || (r = I()), !!r), S = () => { + return o.bindTexture(o.TEXTURE_2D, G), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_WRAP_S, o.CLAMP_TO_EDGE), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_WRAP_T, o.CLAMP_TO_EDGE), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_MIN_FILTER, o.LINEAR), o.texParameteri(o.TEXTURE_2D, o.TEXTURE_MAG_FILTER, o.LINEAR), d("setupResources:texSetup"), { program: b, loc: L, positionBuffer: C, texture: G }; + }, A = () => a || c._destroyed || (o || (o = s()), !o) ? !1 : (r || (r = I()), !!r), h = () => { if (!a && o && (n != null && n.videoWidth)) { - let A = n.videoWidth, p = n.videoHeight; + let y = n.videoWidth, p = n.videoHeight; const b = l || o.getParameter(o.MAX_TEXTURE_SIZE) || 4096; - if (A > b || p > b) { - const L = Math.min(b / A, b / p); - A = Math.floor(A * L), p = Math.floor(p * L); + if (y > b || p > b) { + const L = Math.min(b / y, b / p); + y = Math.floor(y * L), p = Math.floor(p * L); } - return (t.width !== A || t.height !== p) && (t.width = A, t.height = p, o.viewport(0, 0, A, p)), !0; + return (t.width !== y || t.height !== p) && (t.width = y, t.height = p, o.viewport(0, 0, y, p)), !0; } return !1; - }, Z = (A) => { - if (!a && y() && S()) { - const { program: p, loc: b, positionBuffer: L, texture: h } = r; - o.useProgram(p), o.activeTexture(o.TEXTURE0), o.bindTexture(o.TEXTURE_2D, h); + }, S = (y) => { + if (!a && A() && h()) { + const { program: p, loc: b, positionBuffer: L, texture: C } = r; + o.useProgram(p), o.activeTexture(o.TEXTURE0), o.bindTexture(o.TEXTURE_2D, C); try { o.texImage2D(o.TEXTURE_2D, 0, o.RGBA, o.RGBA, o.UNSIGNED_BYTE, n); - } catch (T) { - console.warn("WebGL texImage2D failed", T), d("texImage2D"); + } catch (K) { + console.warn("WebGL texImage2D failed", K), d("texImage2D"); return; } d("texImage2D"), o.uniform1i(b.u_image, 0); - const G = A || (i ? i() : {}), W = Number(G.exposureEV) || 0, f = Math.max(0.1, Math.min(3, Number(G.gamma) || 1)), X = G.analysisMode === "zebra" ? 1 : 0; + const G = y || (i ? i() : {}), Z = Number(G.exposureEV) || 0, f = Math.max(0.1, Math.min(3, Number(G.gamma) || 1)), X = G.analysisMode === "zebra" ? 1 : 0; let x = 0; - G.channel === "r" && (x = 1), G.channel === "g" && (x = 2), G.channel === "b" && (x = 3), o.uniform1f(b.u_exposure, Math.pow(2, W)), o.uniform1f(b.u_gamma, 1 / f), o.uniform1i(b.u_channel, x), o.uniform1i(b.u_analysis, X), o.uniform1f(b.u_thresh, G.zebraThreshold ?? 0.95), o.uniform2f(b.u_res, t.width, t.height), o.enableVertexAttribArray(b.position), o.bindBuffer(o.ARRAY_BUFFER, L), o.vertexAttribPointer(b.position, 2, o.FLOAT, !1, 0, 0), o.drawArrays(o.TRIANGLES, 0, 6), d("drawArrays"); + G.channel === "r" && (x = 1), G.channel === "g" && (x = 2), G.channel === "b" && (x = 3), o.uniform1f(b.u_exposure, Math.pow(2, Z)), o.uniform1f(b.u_gamma, 1 / f), o.uniform1i(b.u_channel, x), o.uniform1i(b.u_analysis, X), o.uniform1f(b.u_thresh, G.zebraThreshold ?? 0.95), o.uniform2f(b.u_res, t.width, t.height), o.enableVertexAttribArray(b.position), o.bindBuffer(o.ARRAY_BUFFER, L), o.vertexAttribPointer(b.position, 2, o.FLOAT, !1, 0, 0), o.drawArrays(o.TRIANGLES, 0, 6), d("drawArrays"); } - }, C = (A) => { - A.preventDefault(), a = !0, u(); + }, W = (y) => { + y.preventDefault(), a = !0, u(); }, g = () => { - o = s(), a = !1, r = null, y(); + o = s(), a = !1, r = null, A(); }; - return t.addEventListener("webglcontextlost", C), t.addEventListener("webglcontextrestored", g), { - update: Z, + return t.addEventListener("webglcontextlost", W), t.addEventListener("webglcontextrestored", g), { + update: S, destroy: () => { - var A, p, b; + var y, p, b; if (c._destroyed = !0, c.ready = !1, u(), o) try { - (p = (A = o.getExtension("WEBGL_lose_context")) == null ? void 0 : A.loseContext) == null || p.call(A); + (p = (y = o.getExtension("WEBGL_lose_context")) == null ? void 0 : y.loseContext) == null || p.call(y); } catch (L) { (b = console.debug) == null || b.call(console, L); } - t.removeEventListener("webglcontextlost", C), t.removeEventListener("webglcontextrestored", g); + t.removeEventListener("webglcontextlost", W), t.removeEventListener("webglcontextrestored", g); } }; } @@ -17491,12 +17518,12 @@ function Ru({ safeCall: d, onReady: u } = {}) { - var k, K; - const I = i == null ? !!(fe != null && fe.VIEWER_PAUSE_DURING_EXECUTION) : !!i; - let y = null; + var N, U; + const I = i == null ? !!(he != null && he.VIEWER_PAUSE_DURING_EXECUTION) : !!i; + let A = null; if (!n && TA()) try { - y = BA({ + A = KA({ canvas: e, videoEl: t, getGradeParams: o, @@ -17504,23 +17531,23 @@ function Ru({ maxProcPixelsVideo: a }); } catch (z) { - console.warn("WebGL Init failed, falling back to 2D", z), y = null; + console.warn("WebGL Init failed, falling back to 2D", z), A = null; } - const S = y ? null : (() => { + const h = A ? null : (() => { try { return e.getContext("2d", { willReadFrequently: !0, alpha: !1 }); } catch { return null; } - })(), Z = document.createElement("canvas"), C = (() => { + })(), S = document.createElement("canvas"), W = (() => { try { - return Z.getContext("2d", { willReadFrequently: !0, alpha: !1 }); + return S.getContext("2d", { willReadFrequently: !0, alpha: !1 }); } catch { return null; } })(), g = document.createElement("canvas"); g.width = 1, g.height = 1; - const A = (() => { + const y = (() => { try { return g.getContext("2d", { willReadFrequently: !0, alpha: !1 }); } catch { @@ -17547,76 +17574,76 @@ function Ru({ _lastFrameTime: -1, _lastHeavySig: "", _runtimePaused: !1 - }, b = [], L = (z, B) => nb(a, z, B), h = () => { + }, b = [], L = (z, T) => nb(a, z, T), C = () => { try { - const z = Number(t == null ? void 0 : t.videoWidth) || 0, B = Number(t == null ? void 0 : t.videoHeight) || 0; - if (!(z > 0 && B > 0)) return !1; - p.naturalW = z, p.naturalH = B, p.scale = L(z, B); - const J = Math.max(1, Math.round(z * p.scale)), P = Math.max(1, Math.round(B * p.scale)); - return Z.width !== J && (Z.width = J), Z.height !== P && (Z.height = P), y || (e.width !== J && (e.width = J), e.height !== P && (e.height = P)), e._mjrNaturalW = z, e._mjrNaturalH = B, e._mjrPixelScale = p.scale, p.ready = !0, !0; + const z = Number(t == null ? void 0 : t.videoWidth) || 0, T = Number(t == null ? void 0 : t.videoHeight) || 0; + if (!(z > 0 && T > 0)) return !1; + p.naturalW = z, p.naturalH = T, p.scale = L(z, T); + const J = Math.max(1, Math.round(z * p.scale)), P = Math.max(1, Math.round(T * p.scale)); + return S.width !== J && (S.width = J), S.height !== P && (S.height = P), A || (e.width !== J && (e.width = J), e.height !== P && (e.height = P)), e._mjrNaturalW = z, e._mjrNaturalH = T, e._mjrPixelScale = p.scale, p.ready = !0, !0; } catch { return !1; } }, G = () => { - if (!C || !p.ready) return !1; + if (!W || !p.ready) return !1; try { - return C.drawImage(t, 0, 0, Z.width, Z.height), !0; + return W.drawImage(t, 0, 0, S.width, S.height), !0; } catch { return !1; } - }, W = () => { - var U, Q, _; + }, Z = () => { + var B, Q, _; if (!p.ready) return; const z = p.lastParams || (o == null ? void 0 : o()) || {}; - if (y) { - y.update(z); + if (A) { + A.update(z); return; } - if (!S || !C) return; + if (!h || !W) return; if (r != null && r(z)) { try { - S.clearRect(0, 0, e.width, e.height), S.drawImage(t, 0, 0, e.width, e.height); + h.clearRect(0, 0, e.width, e.height), h.drawImage(t, 0, 0, e.width, e.height); } catch (le) { - (U = console.debug) == null || U.call(console, le); + (B = console.debug) == null || B.call(console, le); } return; } if (!G()) return; - let B; + let T; try { - B = C.getImageData(0, 0, Z.width, Z.height); + T = W.getImageData(0, 0, S.width, S.height); } catch { try { - S.clearRect(0, 0, e.width, e.height), S.drawImage(t, 0, 0, e.width, e.height); + h.clearRect(0, 0, e.width, e.height), h.drawImage(t, 0, 0, e.width, e.height); } catch (le) { (Q = console.debug) == null || Q.call(console, le); } return; } - const J = Z.width, P = Z.height; - let H = p._buffer; - if (!H || H.width !== J || H.height !== P) + const J = S.width, P = S.height; + let E = p._buffer; + if (!E || E.width !== J || E.height !== P) try { - H = S.createImageData(J, P), p._buffer = H; + E = h.createImageData(J, P), p._buffer = E; } catch { try { - H = new ImageData(J, P), p._buffer = H; + E = new ImageData(J, P), p._buffer = E; } catch { return; } } - if (!H) return; - const $ = Number(z.exposureEV) || 0, oe = 1 / Math.max(0.1, Math.min(3, Number(z.gamma) || 1)), M = String(z.channel || "rgb"), j = String(z.analysisMode || "none"), O = In(z.zebraThreshold ?? 0.95), D = Math.pow(2, $), q = B.data, ee = H.data, ce = j !== "zebra" && M === "rgb"; + if (!E) return; + const $ = Number(z.exposureEV) || 0, ne = 1 / Math.max(0.1, Math.min(3, Number(z.gamma) || 1)), M = String(z.channel || "rgb"), v = String(z.analysisMode || "none"), F = pn(z.zebraThreshold ?? 0.95), D = Math.pow(2, $), q = T.data, ee = E.data, ae = v !== "zebra" && M === "rgb"; let ue = null; - if (ce) { - const le = `${D.toFixed(6)}|${oe.toFixed(6)}`; + if (ae) { + const le = `${D.toFixed(6)}|${ne.toFixed(6)}`; if (!p._lut || p._lutKey !== le) { - const de = new Uint8ClampedArray(256); - for (let se = 0; se < 256; se += 1) { - const ge = se / 255; - de[se] = Math.round(Math.pow(In(ge * D), oe) * 255); + const ce = new Uint8ClampedArray(256); + for (let de = 0; de < 256; de += 1) { + const ge = de / 255; + ce[de] = Math.round(Math.pow(pn(ge * D), ne) * 255); } - p._lut = de, p._lutKey = le; + p._lut = ce, p._lutKey = le; } ue = p._lut; } @@ -17625,62 +17652,62 @@ function Ru({ ee[le] = ue[q[le] ?? 0], ee[le + 1] = ue[q[le + 1] ?? 0], ee[le + 2] = ue[q[le + 2] ?? 0], ee[le + 3] = 255; else for (let le = 0; le < ee.length; le += 4) { - const de = (q[le] ?? 0) / 255, se = (q[le + 1] ?? 0) / 255, ge = (q[le + 2] ?? 0) / 255, je = (q[le + 3] ?? 255) / 255; - let Se = de * D, ke = se * D, we = ge * D; - const Je = 0.2126 * Se + 0.7152 * ke + 0.0722 * we; - if (j === "zebra") - if (In(Je) >= O) { + const ce = (q[le] ?? 0) / 255, de = (q[le + 1] ?? 0) / 255, ge = (q[le + 2] ?? 0) / 255, Le = (q[le + 3] ?? 255) / 255; + let xe = ce * D, Xe = de * D, Me = ge * D; + const Fe = 0.2126 * xe + 0.7152 * Xe + 0.0722 * Me; + if (v === "zebra") + if (pn(Fe) >= F) { const qe = (Math.floor(le / 4) % J + Math.floor(le / 4 / J) & 7) < 3; - Se = qe ? 1 : 0, ke = qe ? 1 : 0, we = qe ? 1 : 0; + xe = qe ? 1 : 0, Xe = qe ? 1 : 0, Me = qe ? 1 : 0; } else - Se = Math.pow(In(Se), oe), ke = Math.pow(In(ke), oe), we = Math.pow(In(we), oe); + xe = Math.pow(pn(xe), ne), Xe = Math.pow(pn(Xe), ne), Me = Math.pow(pn(Me), ne); else - Se = Math.pow(In(Se), oe), ke = Math.pow(In(ke), oe), we = Math.pow(In(we), oe); + xe = Math.pow(pn(xe), ne), Xe = Math.pow(pn(Xe), ne), Me = Math.pow(pn(Me), ne); if (M === "r") - ke = Se, we = Se; + Xe = xe, Me = xe; else if (M === "g") - Se = ke, we = ke; + xe = Xe, Me = Xe; else if (M === "b") - Se = we, ke = we; + xe = Me, Xe = Me; else if (M === "a") - Se = je, ke = je, we = je; + xe = Le, Xe = Le, Me = Le; else if (M === "l") { - const $e = In(Je), qe = Math.pow($e, oe); - Se = qe, ke = qe, we = qe; + const it = pn(Fe), qe = Math.pow(it, ne); + xe = qe, Xe = qe, Me = qe; } - ee[le] = Math.round(In(Se) * 255), ee[le + 1] = Math.round(In(ke) * 255), ee[le + 2] = Math.round(In(we) * 255), ee[le + 3] = 255; + ee[le] = Math.round(pn(xe) * 255), ee[le + 1] = Math.round(pn(Xe) * 255), ee[le + 2] = Math.round(pn(Me) * 255), ee[le + 3] = 255; } try { - S.putImageData(H, 0, 0); + h.putImageData(E, 0, 0); } catch (le) { (_ = console.debug) == null || _.call(console, le); } }, f = () => { var z; - if (!p._destroyed && e != null && e.isConnected && (p.ready || h(), !!p.ready)) { + if (!p._destroyed && e != null && e.isConnected && (p.ready || C(), !!p.ready)) { try { - const B = p.lastParams || (o == null ? void 0 : o()) || {}; - if (!(r != null && r(B))) { - const P = Number(t == null ? void 0 : t.currentTime) || 0, H = `${Number(B.exposureEV) || 0}|${Number(B.gamma) || 1}|${String(B.channel || "rgb")}|${String(B.analysisMode || "none")}|${Number(B.zebraThreshold ?? 0.95)}`; - if (Math.abs(P - (Number(p._lastFrameTime) || 0)) < 1e-6 && H === String(p._lastHeavySig || "")) + const T = p.lastParams || (o == null ? void 0 : o()) || {}; + if (!(r != null && r(T))) { + const P = Number(t == null ? void 0 : t.currentTime) || 0, E = `${Number(T.exposureEV) || 0}|${Number(T.gamma) || 1}|${String(T.channel || "rgb")}|${String(T.analysisMode || "none")}|${Number(T.zebraThreshold ?? 0.95)}`; + if (Math.abs(P - (Number(p._lastFrameTime) || 0)) < 1e-6 && E === String(p._lastHeavySig || "")) return; - p._lastFrameTime = P, p._lastHeavySig = H; + p._lastFrameTime = P, p._lastHeavySig = E; } - } catch (B) { - (z = console.debug) == null || z.call(console, B); + } catch (T) { + (z = console.debug) == null || z.call(console, T); } - W(); + Z(); } }, X = () => { var z; if (!p._destroyed) { try { if (e != null && e.isConnected) { - p._connectRAF = null, p._connectTries = 0, T(); + p._connectRAF = null, p._connectTries = 0, K(); return; } - } catch (B) { - (z = console.debug) == null || z.call(console, B); + } catch (T) { + (z = console.debug) == null || z.call(console, T); } if (p._connectRAF == null) { if (p._connectTries = (Number(p._connectTries) || 0) + 1, p._connectTries > 20) { @@ -17703,37 +17730,37 @@ function Ru({ } catch { return 0; } - }, T = () => { - var P, H; + }, K = () => { + var P, E; if (p._destroyed || p._runtimePaused || p._rendering) return; if (!(e != null && e.isConnected)) { X(); return; } - const z = p.lastParams || (o == null ? void 0 : o()) || {}, B = !(r != null && r(z)), J = B && !(t != null && t.paused) ? x() : 0; + const z = p.lastParams || (o == null ? void 0 : o()) || {}, T = !(r != null && r(z)), J = T && !(t != null && t.paused) ? x() : 0; if (J > 0) { - const $ = Date.now(), E = (Number(p._lastHeavyRenderAt) || 0) + J; - if ($ < E) { + const $ = Date.now(), H = (Number(p._lastHeavyRenderAt) || 0) + J; + if ($ < H) { try { p._throttleTimer && clearTimeout(p._throttleTimer); - } catch (oe) { - (P = console.debug) == null || P.call(console, oe); + } catch (ne) { + (P = console.debug) == null || P.call(console, ne); } try { p._throttleTimer = setTimeout( () => { - var oe; + var ne; try { p._throttleTimer = null; } catch (M) { - (oe = console.debug) == null || oe.call(console, M); + (ne = console.debug) == null || ne.call(console, M); } - T(); + K(); }, - Math.min(250, Math.max(0, E - $)) + Math.min(250, Math.max(0, H - $)) ); - } catch (oe) { - (H = console.debug) == null || H.call(console, oe); + } catch (ne) { + (E = console.debug) == null || E.call(console, ne); } return; } @@ -17744,241 +17771,241 @@ function Ru({ var $; p._rafIdSchedule = null, p._rendering = !1, f(); try { - B && (p._lastHeavyRenderAt = Date.now()); - } catch (E) { - ($ = console.debug) == null || $.call(console, E); + T && (p._lastHeavyRenderAt = Date.now()); + } catch (H) { + ($ = console.debug) == null || $.call(console, H); } }); } catch { p._rendering = !1; } - }, v = () => { - var B, J, P, H, $; + }, j = () => { + var T, J, P, E, $; if (p._destroyed || p._runtimePaused) return; try { p._rvfc != null && typeof (t == null ? void 0 : t.cancelVideoFrameCallback) == "function" && (t.cancelVideoFrameCallback(p._rvfc), p._rvfc = null); - } catch (E) { - (B = console.debug) == null || B.call(console, E); + } catch (H) { + (T = console.debug) == null || T.call(console, H); } try { p._rafIdLoop != null && (cancelAnimationFrame(p._rafIdLoop), p._rafIdLoop = null); - } catch (E) { - (J = console.debug) == null || J.call(console, E); + } catch (H) { + (J = console.debug) == null || J.call(console, H); } try { if (typeof (t == null ? void 0 : t.requestVideoFrameCallback) == "function") { - const E = () => { - var oe; - if (!p._destroyed && e != null && e.isConnected && (T(), !t.paused)) + const H = () => { + var ne; + if (!p._destroyed && e != null && e.isConnected && (K(), !t.paused)) try { - p._rvfc = t.requestVideoFrameCallback(E); + p._rvfc = t.requestVideoFrameCallback(H); } catch (M) { - (oe = console.debug) == null || oe.call(console, M); + (ne = console.debug) == null || ne.call(console, M); } }; try { - p._rvfc = t.requestVideoFrameCallback(E); - } catch (oe) { - (P = console.debug) == null || P.call(console, oe); + p._rvfc = t.requestVideoFrameCallback(H); + } catch (ne) { + (P = console.debug) == null || P.call(console, ne); } return; } - } catch (E) { - (H = console.debug) == null || H.call(console, E); + } catch (H) { + (E = console.debug) == null || E.call(console, H); } const z = () => { - var E; - if (!p._destroyed && e != null && e.isConnected && (T(), !t.paused)) + var H; + if (!p._destroyed && e != null && e.isConnected && (K(), !t.paused)) try { p._rafIdLoop = requestAnimationFrame(z); - } catch (oe) { - (E = console.debug) == null || E.call(console, oe); + } catch (ne) { + (H = console.debug) == null || H.call(console, ne); } }; try { p._rafIdLoop = requestAnimationFrame(z); - } catch (E) { - ($ = console.debug) == null || $.call(console, E); + } catch (H) { + ($ = console.debug) == null || $.call(console, H); } }, w = (z) => { - p.lastParams = z || p.lastParams || (o == null ? void 0 : o()), T(); + p.lastParams = z || p.lastParams || (o == null ? void 0 : o()), K(); }, R = () => { - var z, B, J, P; + var z, T, J, P; p._runtimePaused = !0; try { p._throttleTimer && clearTimeout(p._throttleTimer); - } catch (H) { - (z = console.debug) == null || z.call(console, H); + } catch (E) { + (z = console.debug) == null || z.call(console, E); } p._throttleTimer = null; try { p._rvfc != null && typeof (t == null ? void 0 : t.cancelVideoFrameCallback) == "function" && t.cancelVideoFrameCallback(p._rvfc); - } catch (H) { - (B = console.debug) == null || B.call(console, H); + } catch (E) { + (T = console.debug) == null || T.call(console, E); } p._rvfc = null; try { p._rafIdLoop != null && cancelAnimationFrame(p._rafIdLoop); - } catch (H) { - (J = console.debug) == null || J.call(console, H); + } catch (E) { + (J = console.debug) == null || J.call(console, E); } p._rafIdLoop = null; try { p._rafIdSchedule != null && cancelAnimationFrame(p._rafIdSchedule); - } catch (H) { - (P = console.debug) == null || P.call(console, H); + } catch (E) { + (P = console.debug) == null || P.call(console, E); } p._rafIdSchedule = null, p._rendering = !1; - }, Y = () => { + }, V = () => { if (p._runtimePaused = !1, t != null && t.paused) { - T(); + K(); return; } - v(), T(); - }, F = (z, B) => { + j(), K(); + }, O = (z, T) => { var J, P; try { - if (p.ready || h(), !p.ready) return null; + if (p.ready || C(), !p.ready) return null; G(); - const H = p.scale || 1, $ = Math.max( + const E = p.scale || 1, $ = Math.max( 0, - Math.min(Z.width - 1, Math.floor((Number(z) || 0) * H)) - ), E = Math.max( + Math.min(S.width - 1, Math.floor((Number(z) || 0) * E)) + ), H = Math.max( 0, - Math.min(Z.height - 1, Math.floor((Number(B) || 0) * H)) + Math.min(S.height - 1, Math.floor((Number(T) || 0) * E)) ); - if (!A) return null; - A.clearRect(0, 0, 1, 1), A.drawImage(Z, $, E, 1, 1, 0, 0, 1, 1); - const oe = (J = A.getImageData(0, 0, 1, 1)) == null ? void 0 : J.data; - if (!oe || oe.length < 4) return null; - const M = oe[0] ?? 0, j = oe[1] ?? 0, O = oe[2] ?? 0, D = oe[3] ?? 255, q = [M / 255, j / 255, O / 255, D / 255], ee = Number((P = p.lastParams) == null ? void 0 : P.exposureEV) || 0, ce = Math.pow(2, ee), ue = [ - q[0] * ce, - q[1] * ce, - q[2] * ce, + if (!y) return null; + y.clearRect(0, 0, 1, 1), y.drawImage(S, $, H, 1, 1, 0, 0, 1, 1); + const ne = (J = y.getImageData(0, 0, 1, 1)) == null ? void 0 : J.data; + if (!ne || ne.length < 4) return null; + const M = ne[0] ?? 0, v = ne[1] ?? 0, F = ne[2] ?? 0, D = ne[3] ?? 255, q = [M / 255, v / 255, F / 255, D / 255], ee = Number((P = p.lastParams) == null ? void 0 : P.exposureEV) || 0, ae = Math.pow(2, ee), ue = [ + q[0] * ae, + q[1] * ae, + q[2] * ae, q[3] ]; - return { r: M, g: j, b: O, a: D, raw: q, lin: ue, scale: p.scale }; + return { r: M, g: v, b: F, a: D, raw: q, lin: ue, scale: p.scale }; } catch { return null; } - }, N = () => { + }, k = () => { var z; - h(), T(); + C(), K(); try { u == null || u({ naturalW: p.naturalW, naturalH: p.naturalH, pixelScale: p.scale }); - } catch (B) { - (z = console.debug) == null || z.call(console, B); + } catch (T) { + (z = console.debug) == null || z.call(console, T); } - }, V = (z) => { + }, Y = (z) => { var J; if (!I) return; if (String(((J = z == null ? void 0 : z.detail) == null ? void 0 : J.active_prompt_id) || "").trim()) { R(); return; } - Y(); + V(); }; try { const z = () => { - p._runtimePaused || v(); - }, B = () => { - var J, P, H; + p._runtimePaused || j(); + }, T = () => { + var J, P, E; p.ready = !1; try { - const $ = (J = t == null ? void 0 : t.error) == null ? void 0 : J.code, E = ((P = t == null ? void 0 : t.error) == null ? void 0 : P.message) || ""; - let oe, M; - $ === 2 ? (oe = "Failed to load video (network / path error)", M = "Check file permissions / path, or try re-indexing.") : $ === 3 ? (oe = "Failed to load video (decode error — unsupported codec?)", M = "Browser may not support this codec (e.g. H.265/HEVC). Try converting to H.264/MP4.") : $ === 4 ? (oe = "Failed to load video (unsupported format or codec)", M = "Browser cannot decode this file (e.g. H.265/HEVC). Try converting to H.264/MP4.") : (oe = "Failed to load video", M = E || "Check file permissions / path, or try re-indexing."), console.warn("[MJR] Video load error", { + const $ = (J = t == null ? void 0 : t.error) == null ? void 0 : J.code, H = ((P = t == null ? void 0 : t.error) == null ? void 0 : P.message) || ""; + let ne, M; + $ === 2 ? (ne = "Failed to load video (network / path error)", M = "Check file permissions / path, or try re-indexing.") : $ === 3 ? (ne = "Failed to load video (decode error — unsupported codec?)", M = "Browser may not support this codec (e.g. H.265/HEVC). Try converting to H.264/MP4.") : $ === 4 ? (ne = "Failed to load video (unsupported format or codec)", M = "Browser cannot decode this file (e.g. H.265/HEVC). Try converting to H.264/MP4.") : (ne = "Failed to load video", M = H || "Check file permissions / path, or try re-indexing."), console.warn("[MJR] Video load error", { code: $, - message: E, + message: H, src: t == null ? void 0 : t.src - }), fo(e, oe, M); + }), fo(e, ne, M); } catch ($) { - (H = console.debug) == null || H.call(console, $); + (E = console.debug) == null || E.call(console, $); } }; b.push( - (s == null ? void 0 : s(t, "loadedmetadata", N, { once: !0 })) || (() => { + (s == null ? void 0 : s(t, "loadedmetadata", k, { once: !0 })) || (() => { }) ), b.push( - (s == null ? void 0 : s(t, "seeked", T, { passive: !0 })) || (() => { + (s == null ? void 0 : s(t, "seeked", K, { passive: !0 })) || (() => { }) ), b.push( - (s == null ? void 0 : s(t, "pause", T, { passive: !0 })) || (() => { + (s == null ? void 0 : s(t, "pause", K, { passive: !0 })) || (() => { }) ), b.push((s == null ? void 0 : s(t, "play", z, { passive: !0 })) || (() => { })), b.push( - (s == null ? void 0 : s(t, "timeupdate", T, { passive: !0 })) || (() => { + (s == null ? void 0 : s(t, "timeupdate", K, { passive: !0 })) || (() => { }) - ), b.push((s == null ? void 0 : s(t, "error", B, { passive: !0 })) || (() => { - })), I && (window.addEventListener(ht.RUNTIME_STATUS, V), String(((k = window == null ? void 0 : window.__MJR_EXECUTION_RUNTIME__) == null ? void 0 : k.active_prompt_id) || "").trim() && R()); + ), b.push((s == null ? void 0 : s(t, "error", T, { passive: !0 })) || (() => { + })), I && (window.addEventListener(ft.RUNTIME_STATUS, Y), String(((N = window == null ? void 0 : window.__MJR_EXECUTION_RUNTIME__) == null ? void 0 : N.active_prompt_id) || "").trim() && R()); } catch (z) { - (K = console.debug) == null || K.call(console, z); + (U = console.debug) == null || U.call(console, z); } return { setParams: w, - sampleAtOriginal: F, - getInfo: () => ({ ...p, renderer: y ? "webgl" : "2d" }), + sampleAtOriginal: O, + getInfo: () => ({ ...p, renderer: A ? "webgl" : "2d" }), pause: R, - resume: Y, + resume: V, destroy: () => { - var z, B, J, P, H, $, E, oe, M; - y && y.destroy(), p._destroyed = !0; + var z, T, J, P, E, $, H, ne, M; + A && A.destroy(), p._destroyed = !0; try { - window.removeEventListener(ht.RUNTIME_STATUS, V); - } catch (j) { - (z = console.debug) == null || z.call(console, j); + window.removeEventListener(ft.RUNTIME_STATUS, Y); + } catch (v) { + (z = console.debug) == null || z.call(console, v); } try { p._throttleTimer && clearTimeout(p._throttleTimer); - } catch (j) { - (B = console.debug) == null || B.call(console, j); + } catch (v) { + (T = console.debug) == null || T.call(console, v); } p._throttleTimer = null; try { p._connectRAF != null && cancelAnimationFrame(p._connectRAF); - } catch (j) { - (J = console.debug) == null || J.call(console, j); + } catch (v) { + (J = console.debug) == null || J.call(console, v); } p._connectRAF = null, p._connectTries = 0; try { p._rvfc != null && typeof (t == null ? void 0 : t.cancelVideoFrameCallback) == "function" && t.cancelVideoFrameCallback(p._rvfc); - } catch (j) { - (P = console.debug) == null || P.call(console, j); + } catch (v) { + (P = console.debug) == null || P.call(console, v); } try { p._rafIdLoop != null && cancelAnimationFrame(p._rafIdLoop); - } catch (j) { - (H = console.debug) == null || H.call(console, j); + } catch (v) { + (E = console.debug) == null || E.call(console, v); } try { p._rafIdSchedule != null && cancelAnimationFrame(p._rafIdSchedule); - } catch (j) { - ($ = console.debug) == null || $.call(console, j); + } catch (v) { + ($ = console.debug) == null || $.call(console, v); } try { - for (const j of b) d == null || d(j); - } catch (j) { - (E = console.debug) == null || E.call(console, j); + for (const v of b) d == null || d(v); + } catch (v) { + (H = console.debug) == null || H.call(console, v); } try { - Z.width = 0, Z.height = 0; - } catch (j) { - (oe = console.debug) == null || oe.call(console, j); + S.width = 0, S.height = 0; + } catch (v) { + (ne = console.debug) == null || ne.call(console, v); } try { e.width = 0, e.height = 0; - } catch (j) { - (M = console.debug) == null || M.call(console, j); + } catch (v) { + (M = console.debug) == null || M.call(console, v); } p._buffer = null; } }; } -function ka(e, t, n) { +function Na(e, t, n) { const i = Number(e); return Number.isFinite(i) ? Math.max(t, Math.min(n, i)) : t; } -function Fu(e) { +function Ou(e) { var t, n; try { const i = String(e || "").toLowerCase(); @@ -17988,7 +18015,7 @@ function Fu(e) { (t = console.debug) == null || t.call(console, i); } try { - const i = String((fe == null ? void 0 : fe.VIEWER_AUDIO_VISUALIZER_MODE) || "simple").toLowerCase(); + const i = String((he == null ? void 0 : he.VIEWER_AUDIO_VISUALIZER_MODE) || "simple").toLowerCase(); if (i === "artistic") return "artistic"; if (i === "webgl3d" || i === "webgl") return "simple"; } catch (i) { @@ -17996,7 +18023,7 @@ function Fu(e) { } return "simple"; } -function UA(e) { +function BA(e) { const t = e.getContext("2d"); if (!t) return null; const n = (l, a) => { @@ -18025,26 +18052,26 @@ function UA(e) { try { const d = e.width || 0, u = e.height || 0; if (!(d > 1 && u > 1)) return; - const y = Number(c) * 1e-3 * 0.12 % 1; + const A = Number(c) * 1e-3 * 0.12 % 1; t.clearRect(0, 0, d, u); - const S = d * 0.5, Z = u * 0.52, C = Math.max(36, Math.min(140, Math.floor(d / 12))), g = Math.min(d * 0.56, C * 8), A = g / Math.max(1, C - 1), p = S - g * 0.5, b = Z - u * 0.08; + const h = d * 0.5, S = u * 0.52, W = Math.max(36, Math.min(140, Math.floor(d / 12))), g = Math.min(d * 0.56, W * 8), y = g / Math.max(1, W - 1), p = h - g * 0.5, b = S - u * 0.08; t.fillStyle = "rgba(255,255,255,0.95)"; - for (let h = 0; h < C; h++) { - const G = p + h * A, f = (h / Math.max(1, C - 1) + y) % 1, X = i(l, f), x = b - X * u * 0.11, T = 1.2 + X * 1.2; - t.beginPath(), t.arc(G, x, T, 0, Math.PI * 2), t.fill(); + for (let C = 0; C < W; C++) { + const G = p + C * y, f = (C / Math.max(1, W - 1) + A) % 1, X = i(l, f), x = b - X * u * 0.11, K = 1.2 + X * 1.2; + t.beginPath(), t.arc(G, x, K, 0, Math.PI * 2), t.fill(); } t.fillStyle = "rgba(255,255,255,0.9)"; - for (let h = 0; h < C; h++) { - const G = p + h * A, W = 1.6; - t.beginPath(), t.arc(G, Z, W, 0, Math.PI * 2), t.fill(); + for (let C = 0; C < W; C++) { + const G = p + C * y, Z = 1.6; + t.beginPath(), t.arc(G, S, Z, 0, Math.PI * 2), t.fill(); } - const L = Math.max(1.5, A * 0.45); - for (let h = 0; h < C; h++) { - const G = p + h * A, W = h / Math.max(1, C - 1), f = (W + y) % 1, X = o(l, f), x = r(l, f), T = 1 - Math.abs(W * 2 - 1), w = Math.pow( - (X * 0.62 + x * 0.38) * 0.84 + T * 0.16, + const L = Math.max(1.5, y * 0.45); + for (let C = 0; C < W; C++) { + const G = p + C * y, Z = C / Math.max(1, W - 1), f = (Z + A) % 1, X = o(l, f), x = r(l, f), K = 1 - Math.abs(Z * 2 - 1), w = Math.pow( + (X * 0.62 + x * 0.38) * 0.84 + K * 0.16, 1.1 ) * u * 0.32; - t.fillStyle = "rgba(255,255,255,0.96)", t.fillRect(G - L * 0.5, Z + 1, L, w); + t.fillStyle = "rgba(255,255,255,0.96)", t.fillRect(G - L * 0.5, S + 1, L, w); } } catch (d) { (s = console.debug) == null || s.call(console, d); @@ -18054,7 +18081,7 @@ function UA(e) { } }; } -function KA(e, { pseudo3d: t = !1 } = {}) { +function UA(e, { pseudo3d: t = !1 } = {}) { let n = null; try { n = e.getContext("webgl", { @@ -18077,9 +18104,9 @@ uniform vec4 uColor; void main() { gl_FragColor = uColor; } -`, r = (g, A) => { +`, r = (g, y) => { const p = n.createShader(g); - return p ? (n.shaderSource(p, A), n.compileShader(p), n.getShaderParameter(p, n.COMPILE_STATUS) ? p : (n.deleteShader(p), null)) : null; + return p ? (n.shaderSource(p, y), n.compileShader(p), n.getShaderParameter(p, n.COMPILE_STATUS) ? p : (n.deleteShader(p), null)) : null; }, l = r(n.VERTEX_SHADER, i), a = r(n.FRAGMENT_SHADER, o); if (!l || !a) return null; const c = n.createProgram(); @@ -18087,51 +18114,51 @@ void main() { n.useProgram(c); const s = n.getAttribLocation(c, "aPos"), d = n.getUniformLocation(c, "uColor"), u = n.createBuffer(); if (!u || s < 0 || !d) return null; - const I = (g, A) => { - n.bindBuffer(n.ARRAY_BUFFER, u), n.bufferData(n.ARRAY_BUFFER, g, n.DYNAMIC_DRAW), n.enableVertexAttribArray(s), n.vertexAttribPointer(s, 2, n.FLOAT, !1, 0, 0), n.uniform4f(d, A[0], A[1], A[2], A[3]), n.drawArrays(n.LINE_STRIP, 0, Math.floor(g.length / 2)); - }, y = (g, A) => { + const I = (g, y) => { + n.bindBuffer(n.ARRAY_BUFFER, u), n.bufferData(n.ARRAY_BUFFER, g, n.DYNAMIC_DRAW), n.enableVertexAttribArray(s), n.vertexAttribPointer(s, 2, n.FLOAT, !1, 0, 0), n.uniform4f(d, y[0], y[1], y[2], y[3]), n.drawArrays(n.LINE_STRIP, 0, Math.floor(g.length / 2)); + }, A = (g, y) => { try { const p = Math.max( 0, - Math.min(g.length - 1, Math.floor(A * (g.length - 1))) + Math.min(g.length - 1, Math.floor(y * (g.length - 1))) ); return (Number(g[p]) || 0) / 255; } catch { return 0; } - }, S = (g, A) => { - const p = y(g, 0.18 + A * 0.18), b = y(g, 0.28 + A * 0.16), L = y(g, 0.4 + A * 0.06), h = y(g, 0.46 + A * 0.03); - return p * 0.28 + b * 0.36 + L * 0.24 + h * 0.12; - }, Z = (g, A) => { - const p = y(g, 0.01 + A * 0.06), b = y(g, 0.04 + A * 0.07), L = y(g, 0.09 + A * 0.04); + }, h = (g, y) => { + const p = A(g, 0.18 + y * 0.18), b = A(g, 0.28 + y * 0.16), L = A(g, 0.4 + y * 0.06), C = A(g, 0.46 + y * 0.03); + return p * 0.28 + b * 0.36 + L * 0.24 + C * 0.12; + }, S = (g, y) => { + const p = A(g, 0.01 + y * 0.06), b = A(g, 0.04 + y * 0.07), L = A(g, 0.09 + y * 0.04); return p * 0.45 + b * 0.35 + L * 0.2; - }, C = (g, A) => { - const p = y(g, 0.64 + A * 0.18), b = y(g, 0.78 + A * 0.12), L = y(g, 0.92 + A * 0.06); + }, W = (g, y) => { + const p = A(g, 0.64 + y * 0.18), b = A(g, 0.78 + y * 0.12), L = A(g, 0.92 + y * 0.06); return p * 0.34 + b * 0.38 + L * 0.28; }; return { - draw(g, A, p = 0) { + draw(g, y, p = 0) { var b; try { n.viewport(0, 0, e.width || 1, e.height || 1), n.clearColor(0, 0, 0, 0), n.clear(n.COLOR_BUFFER_BIT); - const L = Math.max(48, Math.min(180, Math.floor((e.width || 640) / 7))), h = Number(p) * 1e-3, G = new Float32Array(L * 2); + const L = Math.max(48, Math.min(180, Math.floor((e.width || 640) / 7))), C = Number(p) * 1e-3, G = new Float32Array(L * 2); for (let f = 0; f < L; f++) { - const X = f / Math.max(1, L - 1), x = X * 2 - 1, T = S(g, X), v = t ? Math.sin(X * Math.PI * 4 + h * 1.1) * 0.18 : 0, w = t ? 1 / (1 + Math.max(-0.7, v) * 0.8) : 1, Y = ka((0.18 + T * 0.32) * w, -0.95, 0.95); - G[f * 2] = x, G[f * 2 + 1] = Y; + const X = f / Math.max(1, L - 1), x = X * 2 - 1, K = h(g, X), j = t ? Math.sin(X * Math.PI * 4 + C * 1.1) * 0.18 : 0, w = t ? 1 / (1 + Math.max(-0.7, j) * 0.8) : 1, V = Na((0.18 + K * 0.32) * w, -0.95, 0.95); + G[f * 2] = x, G[f * 2 + 1] = V; } I(G, [1, 1, 1, 0.95]); - const W = new Float32Array(L * 2); + const Z = new Float32Array(L * 2); for (let f = 0; f < L; f++) { - const X = f / Math.max(1, L - 1), x = X * 2 - 1, T = Z(g, X), v = C(g, X), w = T * 0.62 + v * 0.38, R = t ? Math.sin(X * Math.PI * 3 + h * 1) * 0.14 : 0, Y = t ? 1 / (1 + Math.max(-0.7, R) * 0.8) : 1, F = ka(-w * 0.62 * Y, -0.95, 0); - W[f * 2] = x, W[f * 2 + 1] = F; + const X = f / Math.max(1, L - 1), x = X * 2 - 1, K = S(g, X), j = W(g, X), w = K * 0.62 + j * 0.38, R = t ? Math.sin(X * Math.PI * 3 + C * 1) * 0.14 : 0, V = t ? 1 / (1 + Math.max(-0.7, R) * 0.8) : 1, O = Na(-w * 0.62 * V, -0.95, 0); + Z[f * 2] = x, Z[f * 2 + 1] = O; } - I(W, [1, 1, 1, 0.9]); + I(Z, [1, 1, 1, 0.9]); } catch (L) { (b = console.debug) == null || b.call(console, L); } }, destroy() { - var g, A, p, b; + var g, y, p, b; try { n.deleteBuffer(u); } catch (L) { @@ -18140,7 +18167,7 @@ void main() { try { n.deleteProgram(c); } catch (L) { - (A = console.debug) == null || A.call(console, L); + (y = console.debug) == null || y.call(console, L); } try { n.deleteShader(l); @@ -18161,58 +18188,58 @@ function DA({ mode: n, pauseDuringExecution: i = null } = {}) { - var v, w, R; + var j, w, R; if (!e || !t) return { destroy() { } }; - const o = i == null ? !!(fe != null && fe.VIEWER_PAUSE_DURING_EXECUTION) : !!i; - let r = null, l = !1, a = null, c = null, s = null, d = null, u = null, I = null, y = 0, S = !1; - const C = 1e3 / ka((fe == null ? void 0 : fe.VIEWER_AUDIO_VIS_FPS) ?? 24, 8, 60); - let g = Fu(n); - const A = () => { - var Y; + const o = i == null ? !!(he != null && he.VIEWER_PAUSE_DURING_EXECUTION) : !!i; + let r = null, l = !1, a = null, c = null, s = null, d = null, u = null, I = null, A = 0, h = !1; + const W = 1e3 / Na((he == null ? void 0 : he.VIEWER_AUDIO_VIS_FPS) ?? 24, 8, 60); + let g = Ou(n); + const y = () => { + var V; try { - const F = ka(window.devicePixelRatio || 1, 1, 2), N = Math.max(32, Math.floor((e.clientWidth || 640) * F)), V = Math.max(24, Math.floor((e.clientHeight || 140) * F)); - e.width !== N && (e.width = N), e.height !== V && (e.height = V); - } catch (F) { - (Y = console.debug) == null || Y.call(console, F); + const O = Na(window.devicePixelRatio || 1, 1, 2), k = Math.max(32, Math.floor((e.clientWidth || 640) * O)), Y = Math.max(24, Math.floor((e.clientHeight || 140) * O)); + e.width !== k && (e.width = k), e.height !== Y && (e.height = Y); + } catch (O) { + (V = console.debug) == null || V.call(console, O); } - }, p = (Y = g) => { - var F, N, V, k, K; - g = Fu(Y); + }, p = (V = g) => { + var O, k, Y, N, U; + g = Ou(V); try { - (F = I == null ? void 0 : I.destroy) == null || F.call(I); - } catch (z) { - (N = console.debug) == null || N.call(console, z); - } - I = null; - try { - A(); - } catch (z) { - (V = console.debug) == null || V.call(console, z); - } - try { - g === "artistic" && !(fe != null && fe.VIEWER_DISABLE_WEBGL_AUDIO) && (I = KA(e, { pseudo3d: !0 })); + (O = I == null ? void 0 : I.destroy) == null || O.call(I); } catch (z) { (k = console.debug) == null || k.call(console, z); } + I = null; + try { + y(); + } catch (z) { + (Y = console.debug) == null || Y.call(console, z); + } + try { + g === "artistic" && !(he != null && he.VIEWER_DISABLE_WEBGL_AUDIO) && (I = UA(e, { pseudo3d: !0 })); + } catch (z) { + (N = console.debug) == null || N.call(console, z); + } if (!I) try { - I = UA(e); + I = BA(e); } catch (z) { - (K = console.debug) == null || K.call(console, z), I = null; + (U = console.debug) == null || U.call(console, z), I = null; } - return y = 0, g; + return A = 0, g; }, b = () => { if (!(l || s)) try { - const Y = window.AudioContext || window.webkitAudioContext; - if (!Y) return; - a = new Y(), c = a.createMediaElementSource(t), s = a.createAnalyser(), s.fftSize = 1024, s.smoothingTimeConstant = 0.8, c.connect(s), s.connect(a.destination), d = new Uint8Array(s.frequencyBinCount), u = new Uint8Array(s.fftSize), I || p(g); + const V = window.AudioContext || window.webkitAudioContext; + if (!V) return; + a = new V(), c = a.createMediaElementSource(t), s = a.createAnalyser(), s.fftSize = 1024, s.smoothingTimeConstant = 0.8, c.connect(s), s.connect(a.destination), d = new Uint8Array(s.frequencyBinCount), u = new Uint8Array(s.fftSize), I || p(g); } catch { s = null; } - }, L = (Y) => { - var F; + }, L = (V) => { + var O; if (!l) { try { r = requestAnimationFrame(L); @@ -18220,88 +18247,88 @@ function DA({ r = null; return; } - if (!S && !(!s || !I) && !(Y - y < C)) { - y = Y; + if (!h && !(!s || !I) && !(V - A < W)) { + A = V; try { - A(), s.getByteFrequencyData(d), s.getByteTimeDomainData(u), I.draw(d, u, Y); - } catch (N) { - (F = console.debug) == null || F.call(console, N); + y(), s.getByteFrequencyData(d), s.getByteTimeDomainData(u), I.draw(d, u, V); + } catch (k) { + (O = console.debug) == null || O.call(console, k); } } } - }, h = async () => { - var Y, F; + }, C = async () => { + var V, O; try { - if (S || (b(), !a)) return; + if (h || (b(), !a)) return; if (a.state === "suspended") try { await a.resume(); - } catch (N) { - (Y = console.debug) == null || Y.call(console, N); + } catch (k) { + (V = console.debug) == null || V.call(console, k); } r == null && (r = requestAnimationFrame(L)); - } catch (N) { - (F = console.debug) == null || F.call(console, N); + } catch (k) { + (O = console.debug) == null || O.call(console, k); } }, G = () => { - var Y; + var V; try { r != null && cancelAnimationFrame(r); - } catch (F) { - (Y = console.debug) == null || Y.call(console, F); + } catch (O) { + (V = console.debug) == null || V.call(console, O); } r = null; - }, W = () => { - h(); - }, f = () => G(), X = () => G(), x = () => A(), T = (Y) => { - var N; + }, Z = () => { + C(); + }, f = () => G(), X = () => G(), x = () => y(), K = (V) => { + var k; if (!o) return; - if (S = !!String(((N = Y == null ? void 0 : Y.detail) == null ? void 0 : N.active_prompt_id) || "").trim(), S) { + if (h = !!String(((k = V == null ? void 0 : V.detail) == null ? void 0 : k.active_prompt_id) || "").trim(), h) { G(); return; } - t != null && t.paused || h(); + t != null && t.paused || C(); }; try { - A(), p(g); - } catch (Y) { - (v = console.debug) == null || v.call(console, Y); + y(), p(g); + } catch (V) { + (j = console.debug) == null || j.call(console, V); } try { - t.addEventListener("play", W, { passive: !0 }), t.addEventListener("pause", f, { passive: !0 }), t.addEventListener("ended", X, { passive: !0 }), window.addEventListener("resize", x, { passive: !0 }), o && (window.addEventListener(ht.RUNTIME_STATUS, T), String(((w = window == null ? void 0 : window.__MJR_EXECUTION_RUNTIME__) == null ? void 0 : w.active_prompt_id) || "").trim() && (S = !0)); - } catch (Y) { - (R = console.debug) == null || R.call(console, Y); + t.addEventListener("play", Z, { passive: !0 }), t.addEventListener("pause", f, { passive: !0 }), t.addEventListener("ended", X, { passive: !0 }), window.addEventListener("resize", x, { passive: !0 }), o && (window.addEventListener(ft.RUNTIME_STATUS, K), String(((w = window == null ? void 0 : window.__MJR_EXECUTION_RUNTIME__) == null ? void 0 : w.active_prompt_id) || "").trim() && (h = !0)); + } catch (V) { + (R = console.debug) == null || R.call(console, V); } return { - setMode(Y) { - return l ? g : p(Y); + setMode(V) { + return l ? g : p(V); }, destroy() { - var Y, F, N, V, k, K, z, B, J; + var V, O, k, Y, N, U, z, T, J; if (!l) { l = !0, G(); try { - t.removeEventListener("play", W), t.removeEventListener("pause", f), t.removeEventListener("ended", X), window.removeEventListener("resize", x), window.removeEventListener(ht.RUNTIME_STATUS, T); + t.removeEventListener("play", Z), t.removeEventListener("pause", f), t.removeEventListener("ended", X), window.removeEventListener("resize", x), window.removeEventListener(ft.RUNTIME_STATUS, K); } catch (P) { - (Y = console.debug) == null || Y.call(console, P); + (V = console.debug) == null || V.call(console, P); } try { - (F = I == null ? void 0 : I.destroy) == null || F.call(I); - } catch (P) { - (N = console.debug) == null || N.call(console, P); - } - try { - (V = c == null ? void 0 : c.disconnect) == null || V.call(c); + (O = I == null ? void 0 : I.destroy) == null || O.call(I); } catch (P) { (k = console.debug) == null || k.call(console, P); } try { - (K = s == null ? void 0 : s.disconnect) == null || K.call(s); + (Y = c == null ? void 0 : c.disconnect) == null || Y.call(c); + } catch (P) { + (N = console.debug) == null || N.call(console, P); + } + try { + (U = s == null ? void 0 : s.disconnect) == null || U.call(s); } catch (P) { (z = console.debug) == null || z.call(console, P); } try { - (B = a == null ? void 0 : a.close) == null || B.call(a); + (T = a == null ? void 0 : a.close) == null || T.call(a); } catch (P) { (J = console.debug) == null || J.call(console, P); } @@ -18310,14 +18337,14 @@ function DA({ } }; } -const EA = (() => { +const HA = (() => { try { return new URL("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAIAAABAH0oBAAAIf3RFWHRwcm9tcHQAeyI5IjogeyJpbnB1dHMiOiB7ImZpbGVuYW1lX3ByZWZpeCI6ICJQUk9KRUNUUy8yNjAxX1RFU1QvMDJfT1VUL0lNQUdFUy8yNjAyMDcvVGVzdC9aX0ltYWdlX1R1cmJvLzI2MDIwN19UZXN0XyIsICJpbWFnZXMiOiBbIjU3OjgiLCAwXX0sICJjbGFzc190eXBlIjogIlNhdmVJbWFnZSIsICJfbWV0YSI6IHsidGl0bGUiOiAiU2F2ZSBJbWFnZSJ9fSwgIjU4IjogeyJpbnB1dHMiOiB7InZhbHVlIjogIkJsdXJyeSBjdXRlIHNtYWxsIGRpbm9zYXVydXMgbGlrZSBjcmVhdHVyZSBzaWxob3VldHRlIHdpdGggaGVhZHBob25lIGluIGEgY2luZW1hdGljIHNsb3ctc2h1dHRlciBwYW4sIHdhcm0gYmFja2xpdCBzdW5zZXQgZ3JhZGllbnQgZnJvbSBkZWVwIHJlZCB0byBvcmFuZ2UgYW5kIGdvbGQsIGdsb3dpbmcgaGF6ZSBhbmQgYmxvb20sIHJpbS1saXQgaGFpciBoYWxvLCBnZW50bGUgbW90aW9uLWJsdXIgdHJhaWwsIHNvZnQtZm9jdXMgZmFjaWFsIGZlYXR1cmVzLCBzdWJ0bGUgZmlsbSBncmFpbiwgYXRtb3NwaGVyaWMgZm9nLCBzaGFsbG93IGRlcHRoIG9mIGZpZWxkLCBtaW5pbWFsIGNvbXBvc2l0aW9uLCBkcmVhbXkgbm9zdGFsZ2ljIG1vb2QsIHZpbnRhZ2UgbGVucyBzb2Z0bmVzcyBhbmQgc21vb3RoIGNvbG9yIHRyYW5zaXRpb25zLiJ9LCAiY2xhc3NfdHlwZSI6ICJQcmltaXRpdmVTdHJpbmdNdWx0aWxpbmUiLCAiX21ldGEiOiB7InRpdGxlIjogIlByb21wdCJ9fSwgIjU3OjMwIjogeyJpbnB1dHMiOiB7ImNsaXBfbmFtZSI6ICJxd2VuXzNfNGIuc2FmZXRlbnNvcnMiLCAidHlwZSI6ICJsdW1pbmEyIiwgImRldmljZSI6ICJkZWZhdWx0In0sICJjbGFzc190eXBlIjogIkNMSVBMb2FkZXIiLCAiX21ldGEiOiB7InRpdGxlIjogIkxvYWQgQ0xJUCJ9fSwgIjU3OjI5IjogeyJpbnB1dHMiOiB7InZhZV9uYW1lIjogImFlLnNhZmV0ZW5zb3JzIn0sICJjbGFzc190eXBlIjogIlZBRUxvYWRlciIsICJfbWV0YSI6IHsidGl0bGUiOiAiTG9hZCBWQUUifX0sICI1NzozMyI6IHsiaW5wdXRzIjogeyJjb25kaXRpb25pbmciOiBbIjU3OjI3IiwgMF19LCAiY2xhc3NfdHlwZSI6ICJDb25kaXRpb25pbmdaZXJvT3V0IiwgIl9tZXRhIjogeyJ0aXRsZSI6ICJDb25kaXRpb25pbmdaZXJvT3V0In19LCAiNTc6OCI6IHsiaW5wdXRzIjogeyJzYW1wbGVzIjogWyI1NzozIiwgMF0sICJ2YWUiOiBbIjU3OjI5IiwgMF19LCAiY2xhc3NfdHlwZSI6ICJWQUVEZWNvZGUiLCAiX21ldGEiOiB7InRpdGxlIjogIlZBRSBEZWNvZGUifX0sICI1NzoyOCI6IHsiaW5wdXRzIjogeyJ1bmV0X25hbWUiOiAiel9pbWFnZV90dXJib19iZjE2LnNhZmV0ZW5zb3JzIiwgIndlaWdodF9kdHlwZSI6ICJkZWZhdWx0In0sICJjbGFzc190eXBlIjogIlVORVRMb2FkZXIiLCAiX21ldGEiOiB7InRpdGxlIjogIkxvYWQgRGlmZnVzaW9uIE1vZGVsIn19LCAiNTc6MjciOiB7ImlucHV0cyI6IHsidGV4dCI6IFsiNTgiLCAwXSwgImNsaXAiOiBbIjU3OjMwIiwgMF19LCAiY2xhc3NfdHlwZSI6ICJDTElQVGV4dEVuY29kZSIsICJfbWV0YSI6IHsidGl0bGUiOiAiQ0xJUCBUZXh0IEVuY29kZSAoUHJvbXB0KSJ9fSwgIjU3OjEzIjogeyJpbnB1dHMiOiB7IndpZHRoIjogMTI4MCwgImhlaWdodCI6IDcyMCwgImJhdGNoX3NpemUiOiAxfSwgImNsYXNzX3R5cGUiOiAiRW1wdHlTRDNMYXRlbnRJbWFnZSIsICJfbWV0YSI6IHsidGl0bGUiOiAiRW1wdHlTRDNMYXRlbnRJbWFnZSJ9fSwgIjU3OjMiOiB7ImlucHV0cyI6IHsic2VlZCI6IDY0OTI5MjEyMjcxODY3MSwgInN0ZXBzIjogNCwgImNmZyI6IDEuMCwgInNhbXBsZXJfbmFtZSI6ICJyZXNfbXVsdGlzdGVwIiwgInNjaGVkdWxlciI6ICJzaW1wbGUiLCAiZGVub2lzZSI6IDEuMCwgIm1vZGVsIjogWyI1NzoxMSIsIDBdLCAicG9zaXRpdmUiOiBbIjU3OjI3IiwgMF0sICJuZWdhdGl2ZSI6IFsiNTc6MzMiLCAwXSwgImxhdGVudF9pbWFnZSI6IFsiNTc6MTMiLCAwXX0sICJjbGFzc190eXBlIjogIktTYW1wbGVyIiwgIl9tZXRhIjogeyJ0aXRsZSI6ICJLU2FtcGxlciJ9fSwgIjU3OjExIjogeyJpbnB1dHMiOiB7InNoaWZ0IjogMy4wLCAibW9kZWwiOiBbIjU3OjI4IiwgMF19LCAiY2xhc3NfdHlwZSI6ICJNb2RlbFNhbXBsaW5nQXVyYUZsb3ciLCAiX21ldGEiOiB7InRpdGxlIjogIk1vZGVsU2FtcGxpbmdBdXJhRmxvdyJ9fX2E/dbiAABnQnRFWHR3b3JrZmxvdwB7ImlkIjogIjlhZTYwODJiLWM3ZjQtNDMzYy05OTcxLTdhOGY2NWEzZWE2NSIsICJyZXZpc2lvbiI6IDAsICJsYXN0X25vZGVfaWQiOiA2MSwgImxhc3RfbGlua19pZCI6IDY4LCAibm9kZXMiOiBbeyJpZCI6IDYwLCAidHlwZSI6ICJTYXZlSW1hZ2UiLCAicG9zIjogWzExNzAsIDYzMF0sICJzaXplIjogWzc4MCwgNjYwXSwgImZsYWdzIjoge30sICJvcmRlciI6IDYsICJtb2RlIjogNCwgImlucHV0cyI6IFt7Im5hbWUiOiAiaW1hZ2VzIiwgInR5cGUiOiAiSU1BR0UiLCAibGluayI6IDY1fV0sICJvdXRwdXRzIjogW10sICJwcm9wZXJ0aWVzIjogeyJjbnJfaWQiOiAiY29tZnktY29yZSIsICJ2ZXIiOiAiMC4zLjY0IiwgIk5vZGUgbmFtZSBmb3IgUyZSIjogIlNhdmVJbWFnZSIsICJlbmFibGVUYWJzIjogZmFsc2UsICJ0YWJXaWR0aCI6IDY1LCAidGFiWE9mZnNldCI6IDEwLCAiaGFzU2Vjb25kVGFiIjogZmFsc2UsICJzZWNvbmRUYWJUZXh0IjogIlNlbmQgQmFjayIsICJzZWNvbmRUYWJPZmZzZXQiOiA4MCwgInNlY29uZFRhYldpZHRoIjogNjV9LCAid2lkZ2V0c192YWx1ZXMiOiBbIlBST0pFQ1RTLzI2MDFfVEVTVC8wMl9PVVQvSU1BR0VTLzI2MDIwNy9UZXN0L1pfSW1hZ2VfVHVyYm8vMjYwMjA3X1Rlc3RfIl19LCB7ImlkIjogMzUsICJ0eXBlIjogIk1hcmtkb3duTm90ZSIsICJwb3MiOiBbLTQ0MCwgMTkwXSwgInNpemUiOiBbNTEwLCA2MDBdLCAiZmxhZ3MiOiB7ImNvbGxhcHNlZCI6IGZhbHNlfSwgIm9yZGVyIjogMCwgIm1vZGUiOiAwLCAiaW5wdXRzIjogW10sICJvdXRwdXRzIjogW10sICJ0aXRsZSI6ICJNb2RlbCBsaW5rIiwgInByb3BlcnRpZXMiOiB7fSwgIndpZGdldHNfdmFsdWVzIjogWyIjIyBSZXBvcnQgd29ya2Zsb3cgaXNzdWVcblxuSWYgeW91IGZvdW5kIGFueSBpc3N1ZXMgd2hlbiBydW5uaW5nIHRoaXMgd29ya2Zsb3csIFtyZXBvcnQgdGVtcGxhdGUgaXNzdWUgaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL0NvbWZ5LU9yZy93b3JrZmxvd190ZW1wbGF0ZXMvaXNzdWVzKVxuXG5cbiMjIE1vZGVsIGxpbmtzXG5cbioqdGV4dF9lbmNvZGVycyoqXG5cbi0gW3F3ZW5fM180Yi5zYWZldGVuc29yc10oaHR0cHM6Ly9odWdnaW5nZmFjZS5jby9Db21meS1Pcmcvel9pbWFnZV90dXJiby9yZXNvbHZlL21haW4vc3BsaXRfZmlsZXMvdGV4dF9lbmNvZGVycy9xd2VuXzNfNGIuc2FmZXRlbnNvcnMpXG5cbioqbG9yYXMqKlxuXG4tIFtwaXhlbF9hcnRfc3R5bGVfel9pbWFnZV90dXJiby5zYWZldGVuc29yc10oaHR0cHM6Ly9odWdnaW5nZmFjZS5jby90YXJuNTkvcGl4ZWxfYXJ0X3N0eWxlX2xvcmFfel9pbWFnZV90dXJiby9yZXNvbHZlL21haW4vcGl4ZWxfYXJ0X3N0eWxlX3pfaW1hZ2VfdHVyYm8uc2FmZXRlbnNvcnMpXG5cbioqZGlmZnVzaW9uX21vZGVscyoqXG5cbi0gW3pfaW1hZ2VfdHVyYm9fYmYxNi5zYWZldGVuc29yc10oaHR0cHM6Ly9odWdnaW5nZmFjZS5jby9Db21meS1Pcmcvel9pbWFnZV90dXJiby9yZXNvbHZlL21haW4vc3BsaXRfZmlsZXMvZGlmZnVzaW9uX21vZGVscy96X2ltYWdlX3R1cmJvX2JmMTYuc2FmZXRlbnNvcnMpXG5cbioqdmFlKipcblxuLSBbYWUuc2FmZXRlbnNvcnNdKGh0dHBzOi8vaHVnZ2luZ2ZhY2UuY28vQ29tZnktT3JnL3pfaW1hZ2VfdHVyYm8vcmVzb2x2ZS9tYWluL3NwbGl0X2ZpbGVzL3ZhZS9hZS5zYWZldGVuc29ycylcblxuXG5Nb2RlbCBTdG9yYWdlIExvY2F0aW9uXG5cbmBgYFxuXHVkODNkXHVkY2MyIENvbWZ5VUkvXG5cdTI1MWNcdTI1MDBcdTI1MDAgXHVkODNkXHVkY2MyIG1vZGVscy9cblx1MjUwMiAgIFx1MjUxY1x1MjUwMFx1MjUwMCBcdWQ4M2RcdWRjYzIgdGV4dF9lbmNvZGVycy9cblx1MjUwMiAgIFx1MjUwMiAgICAgIFx1MjUxNFx1MjUwMFx1MjUwMCBxd2VuXzNfNGIuc2FmZXRlbnNvcnNcblx1MjUwMiAgIFx1MjUxY1x1MjUwMFx1MjUwMCBcdWQ4M2RcdWRjYzIgbG9yYXMvXG5cdTI1MDIgICBcdTI1MDIgICAgICBcdTI1MTRcdTI1MDBcdTI1MDAgcGl4ZWxfYXJ0X3N0eWxlX3pfaW1hZ2VfdHVyYm8uc2FmZXRlbnNvcnNcblx1MjUwMiAgIFx1MjUxY1x1MjUwMFx1MjUwMCBcdWQ4M2RcdWRjYzIgZGlmZnVzaW9uX21vZGVscy9cblx1MjUwMiAgIFx1MjUwMiAgICAgIFx1MjUxNFx1MjUwMFx1MjUwMCB6X2ltYWdlX3R1cmJvX2JmMTYuc2FmZXRlbnNvcnNcblx1MjUwMiAgIFx1MjUxNFx1MjUwMFx1MjUwMCBcdWQ4M2RcdWRjYzIgdmFlL1xuXHUyNTAyICAgICAgICAgIFx1MjUxNFx1MjUwMFx1MjUwMCBhZS5zYWZldGVuc29yc1xuYGBgXG4iXSwgImNvbG9yIjogIiM0MzIiLCAiYmdjb2xvciI6ICIjMDAwIn0sIHsiaWQiOiA2MSwgInR5cGUiOiAiU3RyaW5nQ29uY2F0ZW5hdGUiLCAicG9zIjogWzE0MCwgNTAwXSwgInNpemUiOiBbNDAwLCAyMDBdLCAiZmxhZ3MiOiB7fSwgIm9yZGVyIjogMywgIm1vZGUiOiA0LCAiaW5wdXRzIjogW3sibmFtZSI6ICJzdHJpbmdfYiIsICJ0eXBlIjogIlNUUklORyIsICJ3aWRnZXQiOiB7Im5hbWUiOiAic3RyaW5nX2IifSwgImxpbmsiOiA2N31dLCAib3V0cHV0cyI6IFt7Im5hbWUiOiAiU1RSSU5HIiwgInR5cGUiOiAiU1RSSU5HIiwgImxpbmtzIjogWzY2XX1dLCAicHJvcGVydGllcyI6IHsiY25yX2lkIjogImNvbWZ5LWNvcmUiLCAidmVyIjogIjAuNy4wIiwgIk5vZGUgbmFtZSBmb3IgUyZSIjogIlN0cmluZ0NvbmNhdGVuYXRlIiwgImVuYWJsZVRhYnMiOiBmYWxzZSwgInRhYldpZHRoIjogNjUsICJ0YWJYT2Zmc2V0IjogMTAsICJoYXNTZWNvbmRUYWIiOiBmYWxzZSwgInNlY29uZFRhYlRleHQiOiAiU2VuZCBCYWNrIiwgInNlY29uZFRhYk9mZnNldCI6IDgwLCAic2Vjb25kVGFiV2lkdGgiOiA2NX0sICJ3aWRnZXRzX3ZhbHVlcyI6IFsiUGl4ZWwgYXJ0IHN0eWxlLCIsICIiLCAiIl19LCB7ImlkIjogNTksICJ0eXBlIjogImQwOTdiNjQ1LTRkM2EtNGJiNy04YjBlLTcwZTYwMWNmMDdjOSIsICJwb3MiOiBbNzIwLCA2MzBdLCAic2l6ZSI6IFs0MDAsIDQ3MF0sICJmbGFncyI6IHt9LCAib3JkZXIiOiA1LCAibW9kZSI6IDQsICJpbnB1dHMiOiBbeyJuYW1lIjogInRleHQiLCAidHlwZSI6ICJTVFJJTkciLCAid2lkZ2V0IjogeyJuYW1lIjogInRleHQifSwgImxpbmsiOiA2Nn0sIHsibGFiZWwiOiAibG9yYV9zdHJlbmd0aCIsICJuYW1lIjogInN0cmVuZ3RoX21vZGVsIiwgInR5cGUiOiAiRkxPQVQiLCAid2lkZ2V0IjogeyJuYW1lIjogInN0cmVuZ3RoX21vZGVsIn0sICJsaW5rIjogbnVsbH1dLCAib3V0cHV0cyI6IFt7Im5hbWUiOiAiSU1BR0UiLCAidHlwZSI6ICJJTUFHRSIsICJsaW5rcyI6IFs2NV19XSwgInByb3BlcnRpZXMiOiB7InByb3h5V2lkZ2V0cyI6IFtbIi0xIiwgInRleHQiXSwgWyItMSIsICJ3aWR0aCJdLCBbIi0xIiwgImhlaWdodCJdLCBbIi0xIiwgImxvcmFfbmFtZSJdLCBbIi0xIiwgInN0cmVuZ3RoX21vZGVsIl0sIFsiMyIsICJzZWVkIl0sIFsiMyIsICJjb250cm9sX2FmdGVyX2dlbmVyYXRlIl1dLCAiY25yX2lkIjogImNvbWZ5LWNvcmUiLCAidmVyIjogIjAuMy43MyIsICJlbmFibGVUYWJzIjogZmFsc2UsICJ0YWJXaWR0aCI6IDY1LCAidGFiWE9mZnNldCI6IDEwLCAiaGFzU2Vjb25kVGFiIjogZmFsc2UsICJzZWNvbmRUYWJUZXh0IjogIlNlbmQgQmFjayIsICJzZWNvbmRUYWJPZmZzZXQiOiA4MCwgInNlY29uZFRhYldpZHRoIjogNjV9LCAid2lkZ2V0c192YWx1ZXMiOiBbIiIsIDEwMjQsIDEwMjQsICJwaXhlbF9hcnRfc3R5bGVfel9pbWFnZV90dXJiby5zYWZldGVuc29ycyIsIDFdfSwgeyJpZCI6IDksICJ0eXBlIjogIlNhdmVJbWFnZSIsICJwb3MiOiBbMTE2MCwgLTExMF0sICJzaXplIjogWzc4MCwgNjYwXSwgImZsYWdzIjoge30sICJvcmRlciI6IDQsICJtb2RlIjogMCwgImlucHV0cyI6IFt7Im5hbWUiOiAiaW1hZ2VzIiwgInR5cGUiOiAiSU1BR0UiLCAibGluayI6IDYyfV0sICJvdXRwdXRzIjogW10sICJwcm9wZXJ0aWVzIjogeyJjbnJfaWQiOiAiY29tZnktY29yZSIsICJ2ZXIiOiAiMC4zLjY0IiwgIk5vZGUgbmFtZSBmb3IgUyZSIjogIlNhdmVJbWFnZSIsICJlbmFibGVUYWJzIjogZmFsc2UsICJ0YWJXaWR0aCI6IDY1LCAidGFiWE9mZnNldCI6IDEwLCAiaGFzU2Vjb25kVGFiIjogZmFsc2UsICJzZWNvbmRUYWJUZXh0IjogIlNlbmQgQmFjayIsICJzZWNvbmRUYWJPZmZzZXQiOiA4MCwgInNlY29uZFRhYldpZHRoIjogNjV9LCAid2lkZ2V0c192YWx1ZXMiOiBbIlBST0pFQ1RTLzI2MDFfVEVTVC8wMl9PVVQvSU1BR0VTLzI2MDIwNy9UZXN0L1pfSW1hZ2VfVHVyYm8vMjYwMjA3X1Rlc3RfIl19LCB7ImlkIjogNTcsICJ0eXBlIjogImYyZmRlYmY2LWRmYWYtNDNiNi05ZWIyLTdmNzA2MTNjZmRjMSIsICJwb3MiOiBbNzIwLCAtMTEwXSwgInNpemUiOiBbNDAwLCA0NzBdLCAiZmxhZ3MiOiB7fSwgIm9yZGVyIjogMiwgIm1vZGUiOiAwLCAiaW5wdXRzIjogW3sibGFiZWwiOiAicHJvbXB0IiwgIm5hbWUiOiAidGV4dCIsICJ0eXBlIjogIlNUUklORyIsICJ3aWRnZXQiOiB7Im5hbWUiOiAidGV4dCJ9LCAibGluayI6IDYzfV0sICJvdXRwdXRzIjogW3sibmFtZSI6ICJJTUFHRSIsICJ0eXBlIjogIklNQUdFIiwgImxpbmtzIjogWzYyXX1dLCAicHJvcGVydGllcyI6IHsicHJveHlXaWRnZXRzIjogW1siLTEiLCAidGV4dCJdLCBbIi0xIiwgIndpZHRoIl0sIFsiLTEiLCAiaGVpZ2h0Il0sIFsiMyIsICJzZWVkIl0sIFsiMyIsICJjb250cm9sX2FmdGVyX2dlbmVyYXRlIl1dLCAiY25yX2lkIjogImNvbWZ5LWNvcmUiLCAidmVyIjogIjAuMy43MyIsICJlbmFibGVUYWJzIjogZmFsc2UsICJ0YWJXaWR0aCI6IDY1LCAidGFiWE9mZnNldCI6IDEwLCAiaGFzU2Vjb25kVGFiIjogZmFsc2UsICJzZWNvbmRUYWJUZXh0IjogIlNlbmQgQmFjayIsICJzZWNvbmRUYWJPZmZzZXQiOiA4MCwgInNlY29uZFRhYldpZHRoIjogNjV9LCAid2lkZ2V0c192YWx1ZXMiOiBbIiIsIDEyODAsIDcyMF19LCB7ImlkIjogNTgsICJ0eXBlIjogIlByaW1pdGl2ZVN0cmluZ011bHRpbGluZSIsICJwb3MiOiBbMTUwLjI0MzUyNzQ4ODI2NTk1LCAtMzMuNTM5MjMyMTU0MTYxOTY1XSwgInNpemUiOiBbNDAwLCAyMDBdLCAiZmxhZ3MiOiB7fSwgIm9yZGVyIjogMSwgIm1vZGUiOiAwLCAiaW5wdXRzIjogW10sICJvdXRwdXRzIjogW3sibmFtZSI6ICJTVFJJTkciLCAidHlwZSI6ICJTVFJJTkciLCAibGlua3MiOiBbNjMsIDY3XX1dLCAidGl0bGUiOiAiUHJvbXB0IiwgInByb3BlcnRpZXMiOiB7ImNucl9pZCI6ICJjb21meS1jb3JlIiwgInZlciI6ICIwLjcuMCIsICJOb2RlIG5hbWUgZm9yIFMmUiI6ICJQcmltaXRpdmVTdHJpbmdNdWx0aWxpbmUiLCAiZW5hYmxlVGFicyI6IGZhbHNlLCAidGFiV2lkdGgiOiA2NSwgInRhYlhPZmZzZXQiOiAxMCwgImhhc1NlY29uZFRhYiI6IGZhbHNlLCAic2Vjb25kVGFiVGV4dCI6ICJTZW5kIEJhY2siLCAic2Vjb25kVGFiT2Zmc2V0IjogODAsICJzZWNvbmRUYWJXaWR0aCI6IDY1fSwgIndpZGdldHNfdmFsdWVzIjogWyJCbHVycnkgY3V0ZSBzbWFsbCBkaW5vc2F1cnVzIGxpa2UgY3JlYXR1cmUgc2lsaG91ZXR0ZSB3aXRoIGhlYWRwaG9uZSBpbiBhIGNpbmVtYXRpYyBzbG93LXNodXR0ZXIgcGFuLCB3YXJtIGJhY2tsaXQgc3Vuc2V0IGdyYWRpZW50IGZyb20gZGVlcCByZWQgdG8gb3JhbmdlIGFuZCBnb2xkLCBnbG93aW5nIGhhemUgYW5kIGJsb29tLCByaW0tbGl0IGhhaXIgaGFsbywgZ2VudGxlIG1vdGlvbi1ibHVyIHRyYWlsLCBzb2Z0LWZvY3VzIGZhY2lhbCBmZWF0dXJlcywgc3VidGxlIGZpbG0gZ3JhaW4sIGF0bW9zcGhlcmljIGZvZywgc2hhbGxvdyBkZXB0aCBvZiBmaWVsZCwgbWluaW1hbCBjb21wb3NpdGlvbiwgZHJlYW15IG5vc3RhbGdpYyBtb29kLCB2aW50YWdlIGxlbnMgc29mdG5lc3MgYW5kIHNtb290aCBjb2xvciB0cmFuc2l0aW9ucy4iXX1dLCAibGlua3MiOiBbWzYyLCA1NywgMCwgOSwgMCwgIklNQUdFIl0sIFs2MywgNTgsIDAsIDU3LCAwLCAiU1RSSU5HIl0sIFs2NSwgNTksIDAsIDYwLCAwLCAiSU1BR0UiXSwgWzY2LCA2MSwgMCwgNTksIDAsICJTVFJJTkciXSwgWzY3LCA1OCwgMCwgNjEsIDAsICJTVFJJTkciXV0sICJncm91cHMiOiBbXSwgImRlZmluaXRpb25zIjogeyJzdWJncmFwaHMiOiBbeyJpZCI6ICJmMmZkZWJmNi1kZmFmLTQzYjYtOWViMi03ZjcwNjEzY2ZkYzEiLCAidmVyc2lvbiI6IDEsICJzdGF0ZSI6IHsibGFzdEdyb3VwSWQiOiA0LCAibGFzdE5vZGVJZCI6IDM0LCAibGFzdExpbmtJZCI6IDM3LCAibGFzdFJlcm91dGVJZCI6IDB9LCAicmV2aXNpb24iOiAwLCAiY29uZmlnIjoge30sICJuYW1lIjogIlRleHQgdG8gSW1hZ2UgKFotSW1hZ2UtVHVyYm8pIiwgImlucHV0Tm9kZSI6IHsiaWQiOiAtMTAsICJib3VuZGluZyI6IFstODAsIDQyNSwgMTIwLCAxMDBdfSwgIm91dHB1dE5vZGUiOiB7ImlkIjogLTIwLCAiYm91bmRpbmciOiBbMTQ5MCwgNDE1LCAxMjAsIDYwXX0sICJpbnB1dHMiOiBbeyJpZCI6ICJmYjE3ODY2OS1lNzQyLTRhNTMtOGE2OS03ZGY1OTgzNGRmZDgiLCAibmFtZSI6ICJ0ZXh0IiwgInR5cGUiOiAiU1RSSU5HIiwgImxpbmtJZHMiOiBbMzRdLCAibGFiZWwiOiAicHJvbXB0IiwgInBvcyI6IFsyMCwgNDQ1XX0sIHsiaWQiOiAiZGQ3ODBiM2MtMjNlOS00NmZmLTg0NjktMTU2MDA4ZjQyZTVhIiwgIm5hbWUiOiAid2lkdGgiLCAidHlwZSI6ICJJTlQiLCAibGlua0lkcyI6IFszNV0sICJwb3MiOiBbMjAsIDQ2NV19LCB7ImlkIjogIjdiMDhkNTQ2LTZiYjAtNGVmOS04MmU5LWZmYWU1ZTFlZTZiYyIsICJuYW1lIjogImhlaWdodCIsICJ0eXBlIjogIklOVCIsICJsaW5rSWRzIjogWzM2XSwgInBvcyI6IFsyMCwgNDg1XX1dLCAib3V0cHV0cyI6IFt7ImlkIjogIjFmYTcyYTIxLWNlMDAtNDk1Mi04MTRlLTFmMmZmYmU4N2QxZCIsICJuYW1lIjogIklNQUdFIiwgInR5cGUiOiAiSU1BR0UiLCAibGlua0lkcyI6IFsxNl0sICJsb2NhbGl6ZWRfbmFtZSI6ICJJTUFHRSIsICJwb3MiOiBbMTUxMCwgNDM1XX1dLCAid2lkZ2V0cyI6IFtdLCAibm9kZXMiOiBbeyJpZCI6IDMwLCAidHlwZSI6ICJDTElQTG9hZGVyIiwgInBvcyI6IFsxMTAsIDMzMF0sICJzaXplIjogWzI3MCwgMTA2XSwgImZsYWdzIjoge30sICJvcmRlciI6IDAsICJtb2RlIjogMCwgImlucHV0cyI6IFtdLCAib3V0cHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogIkNMSVAiLCAibmFtZSI6ICJDTElQIiwgInR5cGUiOiAiQ0xJUCIsICJsaW5rcyI6IFsyOF19XSwgInByb3BlcnRpZXMiOiB7ImNucl9pZCI6ICJjb21meS1jb3JlIiwgInZlciI6ICIwLjMuNzMiLCAiTm9kZSBuYW1lIGZvciBTJlIiOiAiQ0xJUExvYWRlciIsICJtb2RlbHMiOiBbeyJuYW1lIjogInF3ZW5fM180Yi5zYWZldGVuc29ycyIsICJ1cmwiOiAiaHR0cHM6Ly9odWdnaW5nZmFjZS5jby9Db21meS1Pcmcvel9pbWFnZV90dXJiby9yZXNvbHZlL21haW4vc3BsaXRfZmlsZXMvdGV4dF9lbmNvZGVycy9xd2VuXzNfNGIuc2FmZXRlbnNvcnMiLCAiZGlyZWN0b3J5IjogInRleHRfZW5jb2RlcnMifV0sICJlbmFibGVUYWJzIjogZmFsc2UsICJ0YWJXaWR0aCI6IDY1LCAidGFiWE9mZnNldCI6IDEwLCAiaGFzU2Vjb25kVGFiIjogZmFsc2UsICJzZWNvbmRUYWJUZXh0IjogIlNlbmQgQmFjayIsICJzZWNvbmRUYWJPZmZzZXQiOiA4MCwgInNlY29uZFRhYldpZHRoIjogNjV9LCAid2lkZ2V0c192YWx1ZXMiOiBbInF3ZW5fM180Yi5zYWZldGVuc29ycyIsICJsdW1pbmEyIiwgImRlZmF1bHQiXX0sIHsiaWQiOiAyOSwgInR5cGUiOiAiVkFFTG9hZGVyIiwgInBvcyI6IFsxMTAsIDQ4MF0sICJzaXplIjogWzI3MCwgNThdLCAiZmxhZ3MiOiB7fSwgIm9yZGVyIjogMSwgIm1vZGUiOiAwLCAiaW5wdXRzIjogW10sICJvdXRwdXRzIjogW3sibG9jYWxpemVkX25hbWUiOiAiVkFFIiwgIm5hbWUiOiAiVkFFIiwgInR5cGUiOiAiVkFFIiwgImxpbmtzIjogWzI3XX1dLCAicHJvcGVydGllcyI6IHsiY25yX2lkIjogImNvbWZ5LWNvcmUiLCAidmVyIjogIjAuMy43MyIsICJOb2RlIG5hbWUgZm9yIFMmUiI6ICJWQUVMb2FkZXIiLCAibW9kZWxzIjogW3sibmFtZSI6ICJhZS5zYWZldGVuc29ycyIsICJ1cmwiOiAiaHR0cHM6Ly9odWdnaW5nZmFjZS5jby9Db21meS1Pcmcvel9pbWFnZV90dXJiby9yZXNvbHZlL21haW4vc3BsaXRfZmlsZXMvdmFlL2FlLnNhZmV0ZW5zb3JzIiwgImRpcmVjdG9yeSI6ICJ2YWUifV0sICJlbmFibGVUYWJzIjogZmFsc2UsICJ0YWJXaWR0aCI6IDY1LCAidGFiWE9mZnNldCI6IDEwLCAiaGFzU2Vjb25kVGFiIjogZmFsc2UsICJzZWNvbmRUYWJUZXh0IjogIlNlbmQgQmFjayIsICJzZWNvbmRUYWJPZmZzZXQiOiA4MCwgInNlY29uZFRhYldpZHRoIjogNjV9LCAid2lkZ2V0c192YWx1ZXMiOiBbImFlLnNhZmV0ZW5zb3JzIl19LCB7ImlkIjogMzMsICJ0eXBlIjogIkNvbmRpdGlvbmluZ1plcm9PdXQiLCAicG9zIjogWzY0MCwgNjIwXSwgInNpemUiOiBbMjA0LjEzNDc2NTYyNSwgMjZdLCAiZmxhZ3MiOiB7fSwgIm9yZGVyIjogOCwgIm1vZGUiOiAwLCAiaW5wdXRzIjogW3sibG9jYWxpemVkX25hbWUiOiAiY29uZGl0aW9uaW5nIiwgIm5hbWUiOiAiY29uZGl0aW9uaW5nIiwgInR5cGUiOiAiQ09ORElUSU9OSU5HIiwgImxpbmsiOiAzMn1dLCAib3V0cHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogIkNPTkRJVElPTklORyIsICJuYW1lIjogIkNPTkRJVElPTklORyIsICJ0eXBlIjogIkNPTkRJVElPTklORyIsICJsaW5rcyI6IFszM119XSwgInByb3BlcnRpZXMiOiB7ImNucl9pZCI6ICJjb21meS1jb3JlIiwgInZlciI6ICIwLjMuNzMiLCAiTm9kZSBuYW1lIGZvciBTJlIiOiAiQ29uZGl0aW9uaW5nWmVyb091dCIsICJlbmFibGVUYWJzIjogZmFsc2UsICJ0YWJXaWR0aCI6IDY1LCAidGFiWE9mZnNldCI6IDEwLCAiaGFzU2Vjb25kVGFiIjogZmFsc2UsICJzZWNvbmRUYWJUZXh0IjogIlNlbmQgQmFjayIsICJzZWNvbmRUYWJPZmZzZXQiOiA4MCwgInNlY29uZFRhYldpZHRoIjogNjV9LCAid2lkZ2V0c192YWx1ZXMiOiBbXX0sIHsiaWQiOiA4LCAidHlwZSI6ICJWQUVEZWNvZGUiLCAicG9zIjogWzEyMjAsIDE2MF0sICJzaXplIjogWzIxMCwgNDZdLCAiZmxhZ3MiOiB7fSwgIm9yZGVyIjogNSwgIm1vZGUiOiAwLCAiaW5wdXRzIjogW3sibG9jYWxpemVkX25hbWUiOiAic2FtcGxlcyIsICJuYW1lIjogInNhbXBsZXMiLCAidHlwZSI6ICJMQVRFTlQiLCAibGluayI6IDE0fSwgeyJsb2NhbGl6ZWRfbmFtZSI6ICJ2YWUiLCAibmFtZSI6ICJ2YWUiLCAidHlwZSI6ICJWQUUiLCAibGluayI6IDI3fV0sICJvdXRwdXRzIjogW3sibG9jYWxpemVkX25hbWUiOiAiSU1BR0UiLCAibmFtZSI6ICJJTUFHRSIsICJ0eXBlIjogIklNQUdFIiwgInNsb3RfaW5kZXgiOiAwLCAibGlua3MiOiBbMTZdfV0sICJwcm9wZXJ0aWVzIjogeyJjbnJfaWQiOiAiY29tZnktY29yZSIsICJ2ZXIiOiAiMC4zLjY0IiwgIk5vZGUgbmFtZSBmb3IgUyZSIjogIlZBRURlY29kZSIsICJlbmFibGVUYWJzIjogZmFsc2UsICJ0YWJXaWR0aCI6IDY1LCAidGFiWE9mZnNldCI6IDEwLCAiaGFzU2Vjb25kVGFiIjogZmFsc2UsICJzZWNvbmRUYWJUZXh0IjogIlNlbmQgQmFjayIsICJzZWNvbmRUYWJPZmZzZXQiOiA4MCwgInNlY29uZFRhYldpZHRoIjogNjV9LCAid2lkZ2V0c192YWx1ZXMiOiBbXX0sIHsiaWQiOiAyOCwgInR5cGUiOiAiVU5FVExvYWRlciIsICJwb3MiOiBbMTEwLCAyMDBdLCAic2l6ZSI6IFsyNzAsIDgyXSwgImZsYWdzIjoge30sICJvcmRlciI6IDIsICJtb2RlIjogMCwgImlucHV0cyI6IFtdLCAib3V0cHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogIk1PREVMIiwgIm5hbWUiOiAiTU9ERUwiLCAidHlwZSI6ICJNT0RFTCIsICJsaW5rcyI6IFsyNl19XSwgInByb3BlcnRpZXMiOiB7ImNucl9pZCI6ICJjb21meS1jb3JlIiwgInZlciI6ICIwLjMuNzMiLCAiTm9kZSBuYW1lIGZvciBTJlIiOiAiVU5FVExvYWRlciIsICJtb2RlbHMiOiBbeyJuYW1lIjogInpfaW1hZ2VfdHVyYm9fYmYxNi5zYWZldGVuc29ycyIsICJ1cmwiOiAiaHR0cHM6Ly9odWdnaW5nZmFjZS5jby9Db21meS1Pcmcvel9pbWFnZV90dXJiby9yZXNvbHZlL21haW4vc3BsaXRfZmlsZXMvZGlmZnVzaW9uX21vZGVscy96X2ltYWdlX3R1cmJvX2JmMTYuc2FmZXRlbnNvcnMiLCAiZGlyZWN0b3J5IjogImRpZmZ1c2lvbl9tb2RlbHMifV0sICJlbmFibGVUYWJzIjogZmFsc2UsICJ0YWJXaWR0aCI6IDY1LCAidGFiWE9mZnNldCI6IDEwLCAiaGFzU2Vjb25kVGFiIjogZmFsc2UsICJzZWNvbmRUYWJUZXh0IjogIlNlbmQgQmFjayIsICJzZWNvbmRUYWJPZmZzZXQiOiA4MCwgInNlY29uZFRhYldpZHRoIjogNjV9LCAid2lkZ2V0c192YWx1ZXMiOiBbInpfaW1hZ2VfdHVyYm9fYmYxNi5zYWZldGVuc29ycyIsICJkZWZhdWx0Il0sICJjb2xvciI6ICIjRkYwMDAwIn0sIHsiaWQiOiAyNywgInR5cGUiOiAiQ0xJUFRleHRFbmNvZGUiLCAicG9zIjogWzQzMCwgMjAwXSwgInNpemUiOiBbNDEwLCAzNzBdLCAiZmxhZ3MiOiB7fSwgIm9yZGVyIjogNywgIm1vZGUiOiAwLCAiaW5wdXRzIjogW3sibG9jYWxpemVkX25hbWUiOiAiY2xpcCIsICJuYW1lIjogImNsaXAiLCAidHlwZSI6ICJDTElQIiwgImxpbmsiOiAyOH0sIHsibG9jYWxpemVkX25hbWUiOiAidGV4dCIsICJuYW1lIjogInRleHQiLCAidHlwZSI6ICJTVFJJTkciLCAid2lkZ2V0IjogeyJuYW1lIjogInRleHQifSwgImxpbmsiOiAzNH1dLCAib3V0cHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogIkNPTkRJVElPTklORyIsICJuYW1lIjogIkNPTkRJVElPTklORyIsICJ0eXBlIjogIkNPTkRJVElPTklORyIsICJsaW5rcyI6IFszMCwgMzJdfV0sICJwcm9wZXJ0aWVzIjogeyJjbnJfaWQiOiAiY29tZnktY29yZSIsICJ2ZXIiOiAiMC4zLjczIiwgIk5vZGUgbmFtZSBmb3IgUyZSIjogIkNMSVBUZXh0RW5jb2RlIiwgImVuYWJsZVRhYnMiOiBmYWxzZSwgInRhYldpZHRoIjogNjUsICJ0YWJYT2Zmc2V0IjogMTAsICJoYXNTZWNvbmRUYWIiOiBmYWxzZSwgInNlY29uZFRhYlRleHQiOiAiU2VuZCBCYWNrIiwgInNlY29uZFRhYk9mZnNldCI6IDgwLCAic2Vjb25kVGFiV2lkdGgiOiA2NX0sICJ3aWRnZXRzX3ZhbHVlcyI6IFsiIl19LCB7ImlkIjogMTMsICJ0eXBlIjogIkVtcHR5U0QzTGF0ZW50SW1hZ2UiLCAicG9zIjogWzExMCwgNjMwXSwgInNpemUiOiBbMjYwLCAxMTBdLCAiZmxhZ3MiOiB7fSwgIm9yZGVyIjogNiwgIm1vZGUiOiAwLCAiaW5wdXRzIjogW3sibG9jYWxpemVkX25hbWUiOiAid2lkdGgiLCAibmFtZSI6ICJ3aWR0aCIsICJ0eXBlIjogIklOVCIsICJ3aWRnZXQiOiB7Im5hbWUiOiAid2lkdGgifSwgImxpbmsiOiAzNX0sIHsibG9jYWxpemVkX25hbWUiOiAiaGVpZ2h0IiwgIm5hbWUiOiAiaGVpZ2h0IiwgInR5cGUiOiAiSU5UIiwgIndpZGdldCI6IHsibmFtZSI6ICJoZWlnaHQifSwgImxpbmsiOiAzNn1dLCAib3V0cHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogIkxBVEVOVCIsICJuYW1lIjogIkxBVEVOVCIsICJ0eXBlIjogIkxBVEVOVCIsICJzbG90X2luZGV4IjogMCwgImxpbmtzIjogWzE3XX1dLCAicHJvcGVydGllcyI6IHsiY25yX2lkIjogImNvbWZ5LWNvcmUiLCAidmVyIjogIjAuMy42NCIsICJOb2RlIG5hbWUgZm9yIFMmUiI6ICJFbXB0eVNEM0xhdGVudEltYWdlIiwgImVuYWJsZVRhYnMiOiBmYWxzZSwgInRhYldpZHRoIjogNjUsICJ0YWJYT2Zmc2V0IjogMTAsICJoYXNTZWNvbmRUYWIiOiBmYWxzZSwgInNlY29uZFRhYlRleHQiOiAiU2VuZCBCYWNrIiwgInNlY29uZFRhYk9mZnNldCI6IDgwLCAic2Vjb25kVGFiV2lkdGgiOiA2NX0sICJ3aWRnZXRzX3ZhbHVlcyI6IFsxMjgwLCA3MjAsIDFdfSwgeyJpZCI6IDMsICJ0eXBlIjogIktTYW1wbGVyIiwgInBvcyI6IFs4ODAsIDI3MF0sICJzaXplIjogWzMxNSwgMjYyXSwgImZsYWdzIjoge30sICJvcmRlciI6IDQsICJtb2RlIjogMCwgImlucHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogIm1vZGVsIiwgIm5hbWUiOiAibW9kZWwiLCAidHlwZSI6ICJNT0RFTCIsICJsaW5rIjogMTN9LCB7ImxvY2FsaXplZF9uYW1lIjogInBvc2l0aXZlIiwgIm5hbWUiOiAicG9zaXRpdmUiLCAidHlwZSI6ICJDT05ESVRJT05JTkciLCAibGluayI6IDMwfSwgeyJsb2NhbGl6ZWRfbmFtZSI6ICJuZWdhdGl2ZSIsICJuYW1lIjogIm5lZ2F0aXZlIiwgInR5cGUiOiAiQ09ORElUSU9OSU5HIiwgImxpbmsiOiAzM30sIHsibG9jYWxpemVkX25hbWUiOiAibGF0ZW50X2ltYWdlIiwgIm5hbWUiOiAibGF0ZW50X2ltYWdlIiwgInR5cGUiOiAiTEFURU5UIiwgImxpbmsiOiAxN31dLCAib3V0cHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogIkxBVEVOVCIsICJuYW1lIjogIkxBVEVOVCIsICJ0eXBlIjogIkxBVEVOVCIsICJzbG90X2luZGV4IjogMCwgImxpbmtzIjogWzE0XX1dLCAicHJvcGVydGllcyI6IHsiY25yX2lkIjogImNvbWZ5LWNvcmUiLCAidmVyIjogIjAuMy42NCIsICJOb2RlIG5hbWUgZm9yIFMmUiI6ICJLU2FtcGxlciIsICJlbmFibGVUYWJzIjogZmFsc2UsICJ0YWJXaWR0aCI6IDY1LCAidGFiWE9mZnNldCI6IDEwLCAiaGFzU2Vjb25kVGFiIjogZmFsc2UsICJzZWNvbmRUYWJUZXh0IjogIlNlbmQgQmFjayIsICJzZWNvbmRUYWJPZmZzZXQiOiA4MCwgInNlY29uZFRhYldpZHRoIjogNjV9LCAid2lkZ2V0c192YWx1ZXMiOiBbNjQ5MjkyMTIyNzE4NjcxLCAicmFuZG9taXplIiwgNCwgMSwgInJlc19tdWx0aXN0ZXAiLCAic2ltcGxlIiwgMV19LCB7ImlkIjogMTEsICJ0eXBlIjogIk1vZGVsU2FtcGxpbmdBdXJhRmxvdyIsICJwb3MiOiBbODgwLCAxNjBdLCAic2l6ZSI6IFszMTAsIDYwXSwgImZsYWdzIjoge30sICJvcmRlciI6IDMsICJtb2RlIjogMCwgImlucHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogIm1vZGVsIiwgIm5hbWUiOiAibW9kZWwiLCAidHlwZSI6ICJNT0RFTCIsICJsaW5rIjogMjZ9XSwgIm91dHB1dHMiOiBbeyJsb2NhbGl6ZWRfbmFtZSI6ICJNT0RFTCIsICJuYW1lIjogIk1PREVMIiwgInR5cGUiOiAiTU9ERUwiLCAic2xvdF9pbmRleCI6IDAsICJsaW5rcyI6IFsxM119XSwgInByb3BlcnRpZXMiOiB7ImNucl9pZCI6ICJjb21meS1jb3JlIiwgInZlciI6ICIwLjMuNjQiLCAiTm9kZSBuYW1lIGZvciBTJlIiOiAiTW9kZWxTYW1wbGluZ0F1cmFGbG93IiwgImVuYWJsZVRhYnMiOiBmYWxzZSwgInRhYldpZHRoIjogNjUsICJ0YWJYT2Zmc2V0IjogMTAsICJoYXNTZWNvbmRUYWIiOiBmYWxzZSwgInNlY29uZFRhYlRleHQiOiAiU2VuZCBCYWNrIiwgInNlY29uZFRhYk9mZnNldCI6IDgwLCAic2Vjb25kVGFiV2lkdGgiOiA2NX0sICJ3aWRnZXRzX3ZhbHVlcyI6IFszXX1dLCAiZ3JvdXBzIjogW3siaWQiOiAyLCAidGl0bGUiOiAiU3RlcDIgLSBJbWFnZSBzaXplIiwgImJvdW5kaW5nIjogWzEwMCwgNTYwLCAyOTAsIDIwMF0sICJjb2xvciI6ICIjM2Y3ODllIiwgImZvbnRfc2l6ZSI6IDI0LCAiZmxhZ3MiOiB7fX0sIHsiaWQiOiAzLCAidGl0bGUiOiAiU3RlcDMgLSBQcm9tcHQiLCAiYm91bmRpbmciOiBbNDEwLCAxMzAsIDQ1MCwgNTQwXSwgImNvbG9yIjogIiMzZjc4OWUiLCAiZm9udF9zaXplIjogMjQsICJmbGFncyI6IHt9fSwgeyJpZCI6IDQsICJ0aXRsZSI6ICJTdGVwMSAtIExvYWQgbW9kZWxzIiwgImJvdW5kaW5nIjogWzEwMCwgMTMwLCAyOTAsIDQxMy42XSwgImNvbG9yIjogIiMzZjc4OWUiLCAiZm9udF9zaXplIjogMjQsICJmbGFncyI6IHt9fV0sICJsaW5rcyI6IFt7ImlkIjogMzIsICJvcmlnaW5faWQiOiAyNywgIm9yaWdpbl9zbG90IjogMCwgInRhcmdldF9pZCI6IDMzLCAidGFyZ2V0X3Nsb3QiOiAwLCAidHlwZSI6ICJDT05ESVRJT05JTkcifSwgeyJpZCI6IDI2LCAib3JpZ2luX2lkIjogMjgsICJvcmlnaW5fc2xvdCI6IDAsICJ0YXJnZXRfaWQiOiAxMSwgInRhcmdldF9zbG90IjogMCwgInR5cGUiOiAiTU9ERUwifSwgeyJpZCI6IDE0LCAib3JpZ2luX2lkIjogMywgIm9yaWdpbl9zbG90IjogMCwgInRhcmdldF9pZCI6IDgsICJ0YXJnZXRfc2xvdCI6IDAsICJ0eXBlIjogIkxBVEVOVCJ9LCB7ImlkIjogMjcsICJvcmlnaW5faWQiOiAyOSwgIm9yaWdpbl9zbG90IjogMCwgInRhcmdldF9pZCI6IDgsICJ0YXJnZXRfc2xvdCI6IDEsICJ0eXBlIjogIlZBRSJ9LCB7ImlkIjogMTMsICJvcmlnaW5faWQiOiAxMSwgIm9yaWdpbl9zbG90IjogMCwgInRhcmdldF9pZCI6IDMsICJ0YXJnZXRfc2xvdCI6IDAsICJ0eXBlIjogIk1PREVMIn0sIHsiaWQiOiAzMCwgIm9yaWdpbl9pZCI6IDI3LCAib3JpZ2luX3Nsb3QiOiAwLCAidGFyZ2V0X2lkIjogMywgInRhcmdldF9zbG90IjogMSwgInR5cGUiOiAiQ09ORElUSU9OSU5HIn0sIHsiaWQiOiAzMywgIm9yaWdpbl9pZCI6IDMzLCAib3JpZ2luX3Nsb3QiOiAwLCAidGFyZ2V0X2lkIjogMywgInRhcmdldF9zbG90IjogMiwgInR5cGUiOiAiQ09ORElUSU9OSU5HIn0sIHsiaWQiOiAxNywgIm9yaWdpbl9pZCI6IDEzLCAib3JpZ2luX3Nsb3QiOiAwLCAidGFyZ2V0X2lkIjogMywgInRhcmdldF9zbG90IjogMywgInR5cGUiOiAiTEFURU5UIn0sIHsiaWQiOiAyOCwgIm9yaWdpbl9pZCI6IDMwLCAib3JpZ2luX3Nsb3QiOiAwLCAidGFyZ2V0X2lkIjogMjcsICJ0YXJnZXRfc2xvdCI6IDAsICJ0eXBlIjogIkNMSVAifSwgeyJpZCI6IDE2LCAib3JpZ2luX2lkIjogOCwgIm9yaWdpbl9zbG90IjogMCwgInRhcmdldF9pZCI6IC0yMCwgInRhcmdldF9zbG90IjogMCwgInR5cGUiOiAiSU1BR0UifSwgeyJpZCI6IDM0LCAib3JpZ2luX2lkIjogLTEwLCAib3JpZ2luX3Nsb3QiOiAwLCAidGFyZ2V0X2lkIjogMjcsICJ0YXJnZXRfc2xvdCI6IDEsICJ0eXBlIjogIlNUUklORyJ9LCB7ImlkIjogMzUsICJvcmlnaW5faWQiOiAtMTAsICJvcmlnaW5fc2xvdCI6IDEsICJ0YXJnZXRfaWQiOiAxMywgInRhcmdldF9zbG90IjogMCwgInR5cGUiOiAiSU5UIn0sIHsiaWQiOiAzNiwgIm9yaWdpbl9pZCI6IC0xMCwgIm9yaWdpbl9zbG90IjogMiwgInRhcmdldF9pZCI6IDEzLCAidGFyZ2V0X3Nsb3QiOiAxLCAidHlwZSI6ICJJTlQifV0sICJleHRyYSI6IHsid29ya2Zsb3dSZW5kZXJlclZlcnNpb24iOiAiTEcifX0sIHsiaWQiOiAiZDA5N2I2NDUtNGQzYS00YmI3LThiMGUtNzBlNjAxY2YwN2M5IiwgInZlcnNpb24iOiAxLCAic3RhdGUiOiB7Imxhc3RHcm91cElkIjogNCwgImxhc3ROb2RlSWQiOiAzNiwgImxhc3RMaW5rSWQiOiA0MSwgImxhc3RSZXJvdXRlSWQiOiAwfSwgInJldmlzaW9uIjogMCwgImNvbmZpZyI6IHt9LCAibmFtZSI6ICJUZXh0IHRvIEltYWdlIChaLUltYWdlLVR1cmJvIHdpdGggTG9SQSkiLCAiaW5wdXROb2RlIjogeyJpZCI6IC0xMCwgImJvdW5kaW5nIjogWy04MCwgNDI1LCAxMjAsIDE0MF19LCAib3V0cHV0Tm9kZSI6IHsiaWQiOiAtMjAsICJib3VuZGluZyI6IFsxNDkwLCA0MTUsIDEyMCwgNjBdfSwgImlucHV0cyI6IFt7ImlkIjogImZiMTc4NjY5LWU3NDItNGE1My04YTY5LTdkZjU5ODM0ZGZkOCIsICJuYW1lIjogInRleHQiLCAidHlwZSI6ICJTVFJJTkciLCAibGlua0lkcyI6IFszNF0sICJwb3MiOiBbMjAsIDQ0NV19LCB7ImlkIjogImRkNzgwYjNjLTIzZTktNDZmZi04NDY5LTE1NjAwOGY0MmU1YSIsICJuYW1lIjogIndpZHRoIiwgInR5cGUiOiAiSU5UIiwgImxpbmtJZHMiOiBbMzVdLCAicG9zIjogWzIwLCA0NjVdfSwgeyJpZCI6ICI3YjA4ZDU0Ni02YmIwLTRlZjktODJlOS1mZmFlNWUxZWU2YmMiLCAibmFtZSI6ICJoZWlnaHQiLCAidHlwZSI6ICJJTlQiLCAibGlua0lkcyI6IFszNl0sICJwb3MiOiBbMjAsIDQ4NV19LCB7ImlkIjogIjg0MGNkNTMxLWZmYzUtNDk0OS04OTg2LTM5YjIyNzI1ZDZlYSIsICJuYW1lIjogImxvcmFfbmFtZSIsICJ0eXBlIjogIkNPTUJPIiwgImxpbmtJZHMiOiBbNDBdLCAicG9zIjogWzIwLCA1MDVdfSwgeyJpZCI6ICIzOGM5ZWMwNy1jN2UzLTQyMGMtOGFkNS0zMWVmYmQxMmUyNTgiLCAibmFtZSI6ICJzdHJlbmd0aF9tb2RlbCIsICJ0eXBlIjogIkZMT0FUIiwgImxpbmtJZHMiOiBbNDFdLCAibGFiZWwiOiAibG9yYV9zdHJlbmd0aCIsICJwb3MiOiBbMjAsIDUyNV19XSwgIm91dHB1dHMiOiBbeyJpZCI6ICIxZmE3MmEyMS1jZTAwLTQ5NTItODE0ZS0xZjJmZmJlODdkMWQiLCAibmFtZSI6ICJJTUFHRSIsICJ0eXBlIjogIklNQUdFIiwgImxpbmtJZHMiOiBbMTZdLCAibG9jYWxpemVkX25hbWUiOiAiSU1BR0UiLCAicG9zIjogWzE1MTAsIDQzNV19XSwgIndpZGdldHMiOiBbXSwgIm5vZGVzIjogW3siaWQiOiAzMCwgInR5cGUiOiAiQ0xJUExvYWRlciIsICJwb3MiOiBbMTEwLCAzMzBdLCAic2l6ZSI6IFsyNzAsIDEwNl0sICJmbGFncyI6IHt9LCAib3JkZXIiOiAwLCAibW9kZSI6IDQsICJpbnB1dHMiOiBbXSwgIm91dHB1dHMiOiBbeyJsb2NhbGl6ZWRfbmFtZSI6ICJDTElQIiwgIm5hbWUiOiAiQ0xJUCIsICJ0eXBlIjogIkNMSVAiLCAibGlua3MiOiBbMjhdfV0sICJwcm9wZXJ0aWVzIjogeyJjbnJfaWQiOiAiY29tZnktY29yZSIsICJ2ZXIiOiAiMC4zLjczIiwgIk5vZGUgbmFtZSBmb3IgUyZSIjogIkNMSVBMb2FkZXIiLCAibW9kZWxzIjogW3sibmFtZSI6ICJxd2VuXzNfNGIuc2FmZXRlbnNvcnMiLCAidXJsIjogImh0dHBzOi8vaHVnZ2luZ2ZhY2UuY28vQ29tZnktT3JnL3pfaW1hZ2VfdHVyYm8vcmVzb2x2ZS9tYWluL3NwbGl0X2ZpbGVzL3RleHRfZW5jb2RlcnMvcXdlbl8zXzRiLnNhZmV0ZW5zb3JzIiwgImRpcmVjdG9yeSI6ICJ0ZXh0X2VuY29kZXJzIn1dLCAiZW5hYmxlVGFicyI6IGZhbHNlLCAidGFiV2lkdGgiOiA2NSwgInRhYlhPZmZzZXQiOiAxMCwgImhhc1NlY29uZFRhYiI6IGZhbHNlLCAic2Vjb25kVGFiVGV4dCI6ICJTZW5kIEJhY2siLCAic2Vjb25kVGFiT2Zmc2V0IjogODAsICJzZWNvbmRUYWJXaWR0aCI6IDY1fSwgIndpZGdldHNfdmFsdWVzIjogWyJxd2VuXzNfNGIuc2FmZXRlbnNvcnMiLCAibHVtaW5hMiIsICJkZWZhdWx0Il19LCB7ImlkIjogMjksICJ0eXBlIjogIlZBRUxvYWRlciIsICJwb3MiOiBbMTEwLCA0ODBdLCAic2l6ZSI6IFsyNzAsIDU4XSwgImZsYWdzIjoge30sICJvcmRlciI6IDEsICJtb2RlIjogNCwgImlucHV0cyI6IFtdLCAib3V0cHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogIlZBRSIsICJuYW1lIjogIlZBRSIsICJ0eXBlIjogIlZBRSIsICJsaW5rcyI6IFsyN119XSwgInByb3BlcnRpZXMiOiB7ImNucl9pZCI6ICJjb21meS1jb3JlIiwgInZlciI6ICIwLjMuNzMiLCAiTm9kZSBuYW1lIGZvciBTJlIiOiAiVkFFTG9hZGVyIiwgIm1vZGVscyI6IFt7Im5hbWUiOiAiYWUuc2FmZXRlbnNvcnMiLCAidXJsIjogImh0dHBzOi8vaHVnZ2luZ2ZhY2UuY28vQ29tZnktT3JnL3pfaW1hZ2VfdHVyYm8vcmVzb2x2ZS9tYWluL3NwbGl0X2ZpbGVzL3ZhZS9hZS5zYWZldGVuc29ycyIsICJkaXJlY3RvcnkiOiAidmFlIn1dLCAiZW5hYmxlVGFicyI6IGZhbHNlLCAidGFiV2lkdGgiOiA2NSwgInRhYlhPZmZzZXQiOiAxMCwgImhhc1NlY29uZFRhYiI6IGZhbHNlLCAic2Vjb25kVGFiVGV4dCI6ICJTZW5kIEJhY2siLCAic2Vjb25kVGFiT2Zmc2V0IjogODAsICJzZWNvbmRUYWJXaWR0aCI6IDY1fSwgIndpZGdldHNfdmFsdWVzIjogWyJhZS5zYWZldGVuc29ycyJdfSwgeyJpZCI6IDMzLCAidHlwZSI6ICJDb25kaXRpb25pbmdaZXJvT3V0IiwgInBvcyI6IFs2NDAsIDYyMF0sICJzaXplIjogWzIwNC4xMzQ3NjU2MjUsIDI2XSwgImZsYWdzIjoge30sICJvcmRlciI6IDksICJtb2RlIjogNCwgImlucHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogImNvbmRpdGlvbmluZyIsICJuYW1lIjogImNvbmRpdGlvbmluZyIsICJ0eXBlIjogIkNPTkRJVElPTklORyIsICJsaW5rIjogMzJ9XSwgIm91dHB1dHMiOiBbeyJsb2NhbGl6ZWRfbmFtZSI6ICJDT05ESVRJT05JTkciLCAibmFtZSI6ICJDT05ESVRJT05JTkciLCAidHlwZSI6ICJDT05ESVRJT05JTkciLCAibGlua3MiOiBbMzNdfV0sICJwcm9wZXJ0aWVzIjogeyJjbnJfaWQiOiAiY29tZnktY29yZSIsICJ2ZXIiOiAiMC4zLjczIiwgIk5vZGUgbmFtZSBmb3IgUyZSIjogIkNvbmRpdGlvbmluZ1plcm9PdXQiLCAiZW5hYmxlVGFicyI6IGZhbHNlLCAidGFiV2lkdGgiOiA2NSwgInRhYlhPZmZzZXQiOiAxMCwgImhhc1NlY29uZFRhYiI6IGZhbHNlLCAic2Vjb25kVGFiVGV4dCI6ICJTZW5kIEJhY2siLCAic2Vjb25kVGFiT2Zmc2V0IjogODAsICJzZWNvbmRUYWJXaWR0aCI6IDY1fSwgIndpZGdldHNfdmFsdWVzIjogW119LCB7ImlkIjogOCwgInR5cGUiOiAiVkFFRGVjb2RlIiwgInBvcyI6IFsxMjIwLCAxNjBdLCAic2l6ZSI6IFsyMTAsIDQ2XSwgImZsYWdzIjoge30sICJvcmRlciI6IDUsICJtb2RlIjogNCwgImlucHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogInNhbXBsZXMiLCAibmFtZSI6ICJzYW1wbGVzIiwgInR5cGUiOiAiTEFURU5UIiwgImxpbmsiOiAxNH0sIHsibG9jYWxpemVkX25hbWUiOiAidmFlIiwgIm5hbWUiOiAidmFlIiwgInR5cGUiOiAiVkFFIiwgImxpbmsiOiAyN31dLCAib3V0cHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogIklNQUdFIiwgIm5hbWUiOiAiSU1BR0UiLCAidHlwZSI6ICJJTUFHRSIsICJzbG90X2luZGV4IjogMCwgImxpbmtzIjogWzE2XX1dLCAicHJvcGVydGllcyI6IHsiY25yX2lkIjogImNvbWZ5LWNvcmUiLCAidmVyIjogIjAuMy42NCIsICJOb2RlIG5hbWUgZm9yIFMmUiI6ICJWQUVEZWNvZGUiLCAiZW5hYmxlVGFicyI6IGZhbHNlLCAidGFiV2lkdGgiOiA2NSwgInRhYlhPZmZzZXQiOiAxMCwgImhhc1NlY29uZFRhYiI6IGZhbHNlLCAic2Vjb25kVGFiVGV4dCI6ICJTZW5kIEJhY2siLCAic2Vjb25kVGFiT2Zmc2V0IjogODAsICJzZWNvbmRUYWJXaWR0aCI6IDY1fSwgIndpZGdldHNfdmFsdWVzIjogW119LCB7ImlkIjogMjcsICJ0eXBlIjogIkNMSVBUZXh0RW5jb2RlIiwgInBvcyI6IFs0MzAsIDIwMF0sICJzaXplIjogWzQxMCwgMzcwXSwgImZsYWdzIjoge30sICJvcmRlciI6IDgsICJtb2RlIjogNCwgImlucHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogImNsaXAiLCAibmFtZSI6ICJjbGlwIiwgInR5cGUiOiAiQ0xJUCIsICJsaW5rIjogMjh9LCB7ImxvY2FsaXplZF9uYW1lIjogInRleHQiLCAibmFtZSI6ICJ0ZXh0IiwgInR5cGUiOiAiU1RSSU5HIiwgIndpZGdldCI6IHsibmFtZSI6ICJ0ZXh0In0sICJsaW5rIjogMzR9XSwgIm91dHB1dHMiOiBbeyJsb2NhbGl6ZWRfbmFtZSI6ICJDT05ESVRJT05JTkciLCAibmFtZSI6ICJDT05ESVRJT05JTkciLCAidHlwZSI6ICJDT05ESVRJT05JTkciLCAibGlua3MiOiBbMzAsIDMyXX1dLCAicHJvcGVydGllcyI6IHsiY25yX2lkIjogImNvbWZ5LWNvcmUiLCAidmVyIjogIjAuMy43MyIsICJOb2RlIG5hbWUgZm9yIFMmUiI6ICJDTElQVGV4dEVuY29kZSIsICJlbmFibGVUYWJzIjogZmFsc2UsICJ0YWJXaWR0aCI6IDY1LCAidGFiWE9mZnNldCI6IDEwLCAiaGFzU2Vjb25kVGFiIjogZmFsc2UsICJzZWNvbmRUYWJUZXh0IjogIlNlbmQgQmFjayIsICJzZWNvbmRUYWJPZmZzZXQiOiA4MCwgInNlY29uZFRhYldpZHRoIjogNjV9LCAid2lkZ2V0c192YWx1ZXMiOiBbIiJdfSwgeyJpZCI6IDEzLCAidHlwZSI6ICJFbXB0eVNEM0xhdGVudEltYWdlIiwgInBvcyI6IFsxMTAsIDYzMF0sICJzaXplIjogWzI2MCwgMTEwXSwgImZsYWdzIjoge30sICJvcmRlciI6IDcsICJtb2RlIjogNCwgImlucHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogIndpZHRoIiwgIm5hbWUiOiAid2lkdGgiLCAidHlwZSI6ICJJTlQiLCAid2lkZ2V0IjogeyJuYW1lIjogIndpZHRoIn0sICJsaW5rIjogMzV9LCB7ImxvY2FsaXplZF9uYW1lIjogImhlaWdodCIsICJuYW1lIjogImhlaWdodCIsICJ0eXBlIjogIklOVCIsICJ3aWRnZXQiOiB7Im5hbWUiOiAiaGVpZ2h0In0sICJsaW5rIjogMzZ9XSwgIm91dHB1dHMiOiBbeyJsb2NhbGl6ZWRfbmFtZSI6ICJMQVRFTlQiLCAibmFtZSI6ICJMQVRFTlQiLCAidHlwZSI6ICJMQVRFTlQiLCAic2xvdF9pbmRleCI6IDAsICJsaW5rcyI6IFsxN119XSwgInByb3BlcnRpZXMiOiB7ImNucl9pZCI6ICJjb21meS1jb3JlIiwgInZlciI6ICIwLjMuNjQiLCAiTm9kZSBuYW1lIGZvciBTJlIiOiAiRW1wdHlTRDNMYXRlbnRJbWFnZSIsICJlbmFibGVUYWJzIjogZmFsc2UsICJ0YWJXaWR0aCI6IDY1LCAidGFiWE9mZnNldCI6IDEwLCAiaGFzU2Vjb25kVGFiIjogZmFsc2UsICJzZWNvbmRUYWJUZXh0IjogIlNlbmQgQmFjayIsICJzZWNvbmRUYWJPZmZzZXQiOiA4MCwgInNlY29uZFRhYldpZHRoIjogNjV9LCAid2lkZ2V0c192YWx1ZXMiOiBbMTAyNCwgMTAyNCwgMV19LCB7ImlkIjogMywgInR5cGUiOiAiS1NhbXBsZXIiLCAicG9zIjogWzg4MCwgMjcwXSwgInNpemUiOiBbMzE1LCAyNjJdLCAiZmxhZ3MiOiB7fSwgIm9yZGVyIjogNCwgIm1vZGUiOiA0LCAiaW5wdXRzIjogW3sibG9jYWxpemVkX25hbWUiOiAibW9kZWwiLCAibmFtZSI6ICJtb2RlbCIsICJ0eXBlIjogIk1PREVMIiwgImxpbmsiOiAxM30sIHsibG9jYWxpemVkX25hbWUiOiAicG9zaXRpdmUiLCAibmFtZSI6ICJwb3NpdGl2ZSIsICJ0eXBlIjogIkNPTkRJVElPTklORyIsICJsaW5rIjogMzB9LCB7ImxvY2FsaXplZF9uYW1lIjogIm5lZ2F0aXZlIiwgIm5hbWUiOiAibmVnYXRpdmUiLCAidHlwZSI6ICJDT05ESVRJT05JTkciLCAibGluayI6IDMzfSwgeyJsb2NhbGl6ZWRfbmFtZSI6ICJsYXRlbnRfaW1hZ2UiLCAibmFtZSI6ICJsYXRlbnRfaW1hZ2UiLCAidHlwZSI6ICJMQVRFTlQiLCAibGluayI6IDE3fV0sICJvdXRwdXRzIjogW3sibG9jYWxpemVkX25hbWUiOiAiTEFURU5UIiwgIm5hbWUiOiAiTEFURU5UIiwgInR5cGUiOiAiTEFURU5UIiwgInNsb3RfaW5kZXgiOiAwLCAibGlua3MiOiBbMTRdfV0sICJwcm9wZXJ0aWVzIjogeyJjbnJfaWQiOiAiY29tZnktY29yZSIsICJ2ZXIiOiAiMC4zLjY0IiwgIk5vZGUgbmFtZSBmb3IgUyZSIjogIktTYW1wbGVyIiwgImVuYWJsZVRhYnMiOiBmYWxzZSwgInRhYldpZHRoIjogNjUsICJ0YWJYT2Zmc2V0IjogMTAsICJoYXNTZWNvbmRUYWIiOiBmYWxzZSwgInNlY29uZFRhYlRleHQiOiAiU2VuZCBCYWNrIiwgInNlY29uZFRhYk9mZnNldCI6IDgwLCAic2Vjb25kVGFiV2lkdGgiOiA2NX0sICJ3aWRnZXRzX3ZhbHVlcyI6IFsyNDEwNjI3OTQzNjk1OTUsICJyYW5kb21pemUiLCA0LCAxLCAicmVzX211bHRpc3RlcCIsICJzaW1wbGUiLCAxXX0sIHsiaWQiOiAyOCwgInR5cGUiOiAiVU5FVExvYWRlciIsICJwb3MiOiBbMTEwLCAyMDBdLCAic2l6ZSI6IFsyNzAsIDgyXSwgImZsYWdzIjoge30sICJvcmRlciI6IDIsICJtb2RlIjogNCwgImlucHV0cyI6IFtdLCAib3V0cHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogIk1PREVMIiwgIm5hbWUiOiAiTU9ERUwiLCAidHlwZSI6ICJNT0RFTCIsICJsaW5rcyI6IFszOF19XSwgInByb3BlcnRpZXMiOiB7ImNucl9pZCI6ICJjb21meS1jb3JlIiwgInZlciI6ICIwLjMuNzMiLCAiTm9kZSBuYW1lIGZvciBTJlIiOiAiVU5FVExvYWRlciIsICJtb2RlbHMiOiBbeyJuYW1lIjogInpfaW1hZ2VfdHVyYm9fYmYxNi5zYWZldGVuc29ycyIsICJ1cmwiOiAiaHR0cHM6Ly9odWdnaW5nZmFjZS5jby9Db21meS1Pcmcvel9pbWFnZV90dXJiby9yZXNvbHZlL21haW4vc3BsaXRfZmlsZXMvZGlmZnVzaW9uX21vZGVscy96X2ltYWdlX3R1cmJvX2JmMTYuc2FmZXRlbnNvcnMiLCAiZGlyZWN0b3J5IjogImRpZmZ1c2lvbl9tb2RlbHMifV0sICJlbmFibGVUYWJzIjogZmFsc2UsICJ0YWJXaWR0aCI6IDY1LCAidGFiWE9mZnNldCI6IDEwLCAiaGFzU2Vjb25kVGFiIjogZmFsc2UsICJzZWNvbmRUYWJUZXh0IjogIlNlbmQgQmFjayIsICJzZWNvbmRUYWJPZmZzZXQiOiA4MCwgInNlY29uZFRhYldpZHRoIjogNjV9LCAid2lkZ2V0c192YWx1ZXMiOiBbInpfaW1hZ2VfdHVyYm9fYmYxNi5zYWZldGVuc29ycyIsICJkZWZhdWx0Il0sICJjb2xvciI6ICIjRkYwMDAwIn0sIHsiaWQiOiAzNiwgInR5cGUiOiAiTm90ZSIsICJwb3MiOiBbNTEwLCAtMTMwXSwgInNpemUiOiBbMjEwLCA4OF0sICJmbGFncyI6IHt9LCAib3JkZXIiOiAzLCAibW9kZSI6IDQsICJpbnB1dHMiOiBbXSwgIm91dHB1dHMiOiBbXSwgInRpdGxlIjogIkxvUkEgdHJpZ2dlciB3b3JkIiwgInByb3BlcnRpZXMiOiB7fSwgIndpZGdldHNfdmFsdWVzIjogWyJQaXhlbCBhcnQgc3R5bGUiXSwgImNvbG9yIjogIiM0MzIiLCAiYmdjb2xvciI6ICIjMDAwIn0sIHsiaWQiOiAxMSwgInR5cGUiOiAiTW9kZWxTYW1wbGluZ0F1cmFGbG93IiwgInBvcyI6IFs4ODAsIDE2MF0sICJzaXplIjogWzMxMCwgNjBdLCAiZmxhZ3MiOiB7fSwgIm9yZGVyIjogNiwgIm1vZGUiOiA0LCAiaW5wdXRzIjogW3sibG9jYWxpemVkX25hbWUiOiAibW9kZWwiLCAibmFtZSI6ICJtb2RlbCIsICJ0eXBlIjogIk1PREVMIiwgImxpbmsiOiAzOX1dLCAib3V0cHV0cyI6IFt7ImxvY2FsaXplZF9uYW1lIjogIk1PREVMIiwgIm5hbWUiOiAiTU9ERUwiLCAidHlwZSI6ICJNT0RFTCIsICJzbG90X2luZGV4IjogMCwgImxpbmtzIjogWzEzXX1dLCAicHJvcGVydGllcyI6IHsiY25yX2lkIjogImNvbWZ5LWNvcmUiLCAidmVyIjogIjAuMy42NCIsICJOb2RlIG5hbWUgZm9yIFMmUiI6ICJNb2RlbFNhbXBsaW5nQXVyYUZsb3ciLCAiZW5hYmxlVGFicyI6IGZhbHNlLCAidGFiV2lkdGgiOiA2NSwgInRhYlhPZmZzZXQiOiAxMCwgImhhc1NlY29uZFRhYiI6IGZhbHNlLCAic2Vjb25kVGFiVGV4dCI6ICJTZW5kIEJhY2siLCAic2Vjb25kVGFiT2Zmc2V0IjogODAsICJzZWNvbmRUYWJXaWR0aCI6IDY1fSwgIndpZGdldHNfdmFsdWVzIjogWzNdfSwgeyJpZCI6IDM1LCAidHlwZSI6ICJMb3JhTG9hZGVyTW9kZWxPbmx5IiwgInBvcyI6IFs0NTAsIDEwXSwgInNpemUiOiBbMzcwLCA4Ml0sICJmbGFncyI6IHt9LCAib3JkZXIiOiAxMCwgIm1vZGUiOiA0LCAiaW5wdXRzIjogW3sibG9jYWxpemVkX25hbWUiOiAibW9kZWwiLCAibmFtZSI6ICJtb2RlbCIsICJ0eXBlIjogIk1PREVMIiwgImxpbmsiOiAzOH0sIHsibG9jYWxpemVkX25hbWUiOiAibG9yYV9uYW1lIiwgIm5hbWUiOiAibG9yYV9uYW1lIiwgInR5cGUiOiAiQ09NQk8iLCAid2lkZ2V0IjogeyJuYW1lIjogImxvcmFfbmFtZSJ9LCAibGluayI6IDQwfSwgeyJsb2NhbGl6ZWRfbmFtZSI6ICJzdHJlbmd0aF9tb2RlbCIsICJuYW1lIjogInN0cmVuZ3RoX21vZGVsIiwgInR5cGUiOiAiRkxPQVQiLCAid2lkZ2V0IjogeyJuYW1lIjogInN0cmVuZ3RoX21vZGVsIn0sICJsaW5rIjogNDF9XSwgIm91dHB1dHMiOiBbeyJsb2NhbGl6ZWRfbmFtZSI6ICJNT0RFTCIsICJuYW1lIjogIk1PREVMIiwgInR5cGUiOiAiTU9ERUwiLCAibGlua3MiOiBbMzldfV0sICJwcm9wZXJ0aWVzIjogeyJjbnJfaWQiOiAiY29tZnktY29yZSIsICJ2ZXIiOiAiMC4zLjc1IiwgIk5vZGUgbmFtZSBmb3IgUyZSIjogIkxvcmFMb2FkZXJNb2RlbE9ubHkiLCAibW9kZWxzIjogW3sibmFtZSI6ICJwaXhlbF9hcnRfc3R5bGVfel9pbWFnZV90dXJiby5zYWZldGVuc29ycyIsICJ1cmwiOiAiaHR0cHM6Ly9odWdnaW5nZmFjZS5jby90YXJuNTkvcGl4ZWxfYXJ0X3N0eWxlX2xvcmFfel9pbWFnZV90dXJiby9yZXNvbHZlL21haW4vcGl4ZWxfYXJ0X3N0eWxlX3pfaW1hZ2VfdHVyYm8uc2FmZXRlbnNvcnMiLCAiZGlyZWN0b3J5IjogImxvcmFzIn1dLCAiZW5hYmxlVGFicyI6IGZhbHNlLCAidGFiV2lkdGgiOiA2NSwgInRhYlhPZmZzZXQiOiAxMCwgImhhc1NlY29uZFRhYiI6IGZhbHNlLCAic2Vjb25kVGFiVGV4dCI6ICJTZW5kIEJhY2siLCAic2Vjb25kVGFiT2Zmc2V0IjogODAsICJzZWNvbmRUYWJXaWR0aCI6IDY1fSwgIndpZGdldHNfdmFsdWVzIjogWyJwaXhlbF9hcnRfc3R5bGVfel9pbWFnZV90dXJiby5zYWZldGVuc29ycyIsIDFdfV0sICJncm91cHMiOiBbeyJpZCI6IDIsICJ0aXRsZSI6ICJTdGVwMiAtIEltYWdlIHNpemUiLCAiYm91bmRpbmciOiBbMTAwLCA1NjAsIDI5MCwgMjAwXSwgImNvbG9yIjogIiMzZjc4OWUiLCAiZm9udF9zaXplIjogMjQsICJmbGFncyI6IHt9fSwgeyJpZCI6IDMsICJ0aXRsZSI6ICJTdGVwMyAtIFByb21wdCIsICJib3VuZGluZyI6IFs0MTAsIDEzMCwgNDUwLCA1NDBdLCAiY29sb3IiOiAiIzNmNzg5ZSIsICJmb250X3NpemUiOiAyNCwgImZsYWdzIjoge319LCB7ImlkIjogNCwgInRpdGxlIjogIlN0ZXAxIC0gTG9hZCBtb2RlbHMiLCAiYm91bmRpbmciOiBbMTAwLCAxMzAsIDI5MCwgNDEzLjZdLCAiY29sb3IiOiAiIzNmNzg5ZSIsICJmb250X3NpemUiOiAyNCwgImZsYWdzIjoge319XSwgImxpbmtzIjogW3siaWQiOiAzMiwgIm9yaWdpbl9pZCI6IDI3LCAib3JpZ2luX3Nsb3QiOiAwLCAidGFyZ2V0X2lkIjogMzMsICJ0YXJnZXRfc2xvdCI6IDAsICJ0eXBlIjogIkNPTkRJVElPTklORyJ9LCB7ImlkIjogMTQsICJvcmlnaW5faWQiOiAzLCAib3JpZ2luX3Nsb3QiOiAwLCAidGFyZ2V0X2lkIjogOCwgInRhcmdldF9zbG90IjogMCwgInR5cGUiOiAiTEFURU5UIn0sIHsiaWQiOiAyNywgIm9yaWdpbl9pZCI6IDI5LCAib3JpZ2luX3Nsb3QiOiAwLCAidGFyZ2V0X2lkIjogOCwgInRhcmdldF9zbG90IjogMSwgInR5cGUiOiAiVkFFIn0sIHsiaWQiOiAxMywgIm9yaWdpbl9pZCI6IDExLCAib3JpZ2luX3Nsb3QiOiAwLCAidGFyZ2V0X2lkIjogMywgInRhcmdldF9zbG90IjogMCwgInR5cGUiOiAiTU9ERUwifSwgeyJpZCI6IDMwLCAib3JpZ2luX2lkIjogMjcsICJvcmlnaW5fc2xvdCI6IDAsICJ0YXJnZXRfaWQiOiAzLCAidGFyZ2V0X3Nsb3QiOiAxLCAidHlwZSI6ICJDT05ESVRJT05JTkcifSwgeyJpZCI6IDMzLCAib3JpZ2luX2lkIjogMzMsICJvcmlnaW5fc2xvdCI6IDAsICJ0YXJnZXRfaWQiOiAzLCAidGFyZ2V0X3Nsb3QiOiAyLCAidHlwZSI6ICJDT05ESVRJT05JTkcifSwgeyJpZCI6IDE3LCAib3JpZ2luX2lkIjogMTMsICJvcmlnaW5fc2xvdCI6IDAsICJ0YXJnZXRfaWQiOiAzLCAidGFyZ2V0X3Nsb3QiOiAzLCAidHlwZSI6ICJMQVRFTlQifSwgeyJpZCI6IDI4LCAib3JpZ2luX2lkIjogMzAsICJvcmlnaW5fc2xvdCI6IDAsICJ0YXJnZXRfaWQiOiAyNywgInRhcmdldF9zbG90IjogMCwgInR5cGUiOiAiQ0xJUCJ9LCB7ImlkIjogMTYsICJvcmlnaW5faWQiOiA4LCAib3JpZ2luX3Nsb3QiOiAwLCAidGFyZ2V0X2lkIjogLTIwLCAidGFyZ2V0X3Nsb3QiOiAwLCAidHlwZSI6ICJJTUFHRSJ9LCB7ImlkIjogMzQsICJvcmlnaW5faWQiOiAtMTAsICJvcmlnaW5fc2xvdCI6IDAsICJ0YXJnZXRfaWQiOiAyNywgInRhcmdldF9zbG90IjogMSwgInR5cGUiOiAiU1RSSU5HIn0sIHsiaWQiOiAzNSwgIm9yaWdpbl9pZCI6IC0xMCwgIm9yaWdpbl9zbG90IjogMSwgInRhcmdldF9pZCI6IDEzLCAidGFyZ2V0X3Nsb3QiOiAwLCAidHlwZSI6ICJJTlQifSwgeyJpZCI6IDM2LCAib3JpZ2luX2lkIjogLTEwLCAib3JpZ2luX3Nsb3QiOiAyLCAidGFyZ2V0X2lkIjogMTMsICJ0YXJnZXRfc2xvdCI6IDEsICJ0eXBlIjogIklOVCJ9LCB7ImlkIjogMzgsICJvcmlnaW5faWQiOiAyOCwgIm9yaWdpbl9zbG90IjogMCwgInRhcmdldF9pZCI6IDM1LCAidGFyZ2V0X3Nsb3QiOiAwLCAidHlwZSI6ICJNT0RFTCJ9LCB7ImlkIjogMzksICJvcmlnaW5faWQiOiAzNSwgIm9yaWdpbl9zbG90IjogMCwgInRhcmdldF9pZCI6IDExLCAidGFyZ2V0X3Nsb3QiOiAw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", import.meta.url).href; } catch { return ""; } })(); -function HA({ +function EA({ overlay: e, state: t, mediaTransform: n, @@ -18331,69 +18358,69 @@ function HA({ maxProcPixels: d, maxProcPixelsVideo: u, disableWebGL: I, - videoGradeThrottleFps: y, - safeAddListener: S, - safeCall: Z + videoGradeThrottleFps: A, + safeAddListener: h, + safeCall: S } = {}) { - const C = Z || bt, g = S || Qe, A = (w) => { - var R, Y; + const W = S || It, g = h || $e, y = (w) => { + var R, V; try { - const F = String((w == null ? void 0 : w.ext) || "").trim().toLowerCase(); - if (F) return F.startsWith(".") ? F : `.${F}`; - } catch (F) { - (R = console.debug) == null || R.call(console, F); + const O = String((w == null ? void 0 : w.ext) || "").trim().toLowerCase(); + if (O) return O.startsWith(".") ? O : `.${O}`; + } catch (O) { + (R = console.debug) == null || R.call(console, O); } try { - const F = String((w == null ? void 0 : w.filename) || (w == null ? void 0 : w.filepath) || "").trim(), N = F.lastIndexOf("."); - if (N >= 0) return F.slice(N).toLowerCase(); - } catch (F) { - (Y = console.debug) == null || Y.call(console, F); + const O = String((w == null ? void 0 : w.filename) || (w == null ? void 0 : w.filepath) || "").trim(), k = O.lastIndexOf("."); + if (k >= 0) return O.slice(k).toLowerCase(); + } catch (O) { + (V = console.debug) == null || V.call(console, O); } return ""; }, p = (w) => { - const R = A(w); + const R = y(w); return R === ".gif" || R === ".webp"; }, b = (w, R) => { - var V, k, K, z, B, J; - const Y = document.createElement("img"); - Y.className = "mjr-viewer-media"; + var Y, N, U, z, T, J; + const V = document.createElement("img"); + V.className = "mjr-viewer-media"; try { - (w == null ? void 0 : w.id) != null && (Y != null && Y.dataset) && (Y.dataset.mjrAssetId = String(w.id)); + (w == null ? void 0 : w.id) != null && (V != null && V.dataset) && (V.dataset.mjrAssetId = String(w.id)); } catch (P) { - (V = console.debug) == null || V.call(console, P); + (Y = console.debug) == null || Y.call(console, P); } - Y.alt = String((w == null ? void 0 : w.filename) || "") || "image"; + V.alt = String((w == null ? void 0 : w.filename) || "") || "image"; try { - Y.decoding = "async"; + V.decoding = "async"; } catch (P) { - (k = console.debug) == null || k.call(console, P); + (N = console.debug) == null || N.call(console, P); } try { - Y.loading = "eager"; + V.loading = "eager"; } catch (P) { - (K = console.debug) == null || K.call(console, P); + (U = console.debug) == null || U.call(console, P); } try { - Y.draggable = !1; + V.draggable = !1; } catch (P) { (z = console.debug) == null || z.call(console, P); } - Y.src = R, Y.style.cssText = ` + V.src = R, V.style.cssText = ` max-width: 100%; max-height: 100%; display: block; transform: ${(n == null ? void 0 : n()) || ""}; transform-origin: center center; `; - const F = () => { - var P, H; + const O = () => { + var P, E; try { requestAnimationFrame(() => { var $; try { t != null && t._userInteracted || (i == null || i(), o == null || o(), r == null || r()); - } catch (E) { - ($ = console.debug) == null || $.call(console, E); + } catch (H) { + ($ = console.debug) == null || $.call(console, H); } }); } catch ($) { @@ -18402,17 +18429,17 @@ function HA({ try { l == null || l(); } catch ($) { - (H = console.debug) == null || H.call(console, $); + (E = console.debug) == null || E.call(console, $); } - }, N = () => { - var P, H; + }, k = () => { + var P, E; try { const $ = document.createElement("canvas"); $.className = "mjr-viewer-media"; try { (w == null ? void 0 : w.id) != null && ($ != null && $.dataset) && ($.dataset.mjrAssetId = String(w.id)); - } catch (E) { - (P = console.debug) == null || P.call(console, E); + } catch (H) { + (P = console.debug) == null || P.call(console, H); } L($, w), $.style.cssText = ` max-width: 100%; @@ -18420,132 +18447,132 @@ function HA({ display: block; transform: ${(n == null ? void 0 : n()) || ""}; transform-origin: center center; - `, fo($, "Failed to load image"), Y.replaceWith($); + `, fo($, "Failed to load image"), V.replaceWith($); } catch ($) { - (H = console.debug) == null || H.call(console, $); + (E = console.debug) == null || E.call(console, $); } }; try { - Y.addEventListener("load", F, { once: !0 }); + V.addEventListener("load", O, { once: !0 }); } catch (P) { - (B = console.debug) == null || B.call(console, P); + (T = console.debug) == null || T.call(console, P); } try { - Y.addEventListener("error", N, { once: !0 }); + V.addEventListener("error", k, { once: !0 }); } catch (P) { (J = console.debug) == null || J.call(console, P); } - return Y; + return V; }, L = (w, R) => { - var Y; + var V; try { if (!w || !(w instanceof HTMLCanvasElement)) return; - const F = Number(R == null ? void 0 : R.width) || 0, N = Number(R == null ? void 0 : R.height) || 0; - if (!(F > 0 && N > 0)) return; - !Number(w._mjrNaturalW) && !Number(w._mjrNaturalH) && (w._mjrNaturalW = F, w._mjrNaturalH = N); - } catch (F) { - (Y = console.debug) == null || Y.call(console, F); + const O = Number(R == null ? void 0 : R.width) || 0, k = Number(R == null ? void 0 : R.height) || 0; + if (!(O > 0 && k > 0)) return; + !Number(w._mjrNaturalW) && !Number(w._mjrNaturalH) && (w._mjrNaturalW = O, w._mjrNaturalH = k); + } catch (O) { + (V = console.debug) == null || V.call(console, O); } - }, h = (w) => { + }, C = (w) => { var R; try { - const Y = Number(w); - if (Number.isFinite(Y) && Y > 0) return Y; - const F = String(w || "").trim(); - if (!F) return null; - if (F.includes("/")) { - const [V, k] = F.split("/"), K = Number(V), z = Number(k); - if (Number.isFinite(K) && Number.isFinite(z) && z !== 0) return K / z; + const V = Number(w); + if (Number.isFinite(V) && V > 0) return V; + const O = String(w || "").trim(); + if (!O) return null; + if (O.includes("/")) { + const [Y, N] = O.split("/"), U = Number(Y), z = Number(N); + if (Number.isFinite(U) && Number.isFinite(z) && z !== 0) return U / z; } - const N = Number.parseFloat(F); - if (Number.isFinite(N) && N > 0) return N; - } catch (Y) { - (R = console.debug) == null || R.call(console, Y); + const k = Number.parseFloat(O); + if (Number.isFinite(k) && k > 0) return k; + } catch (V) { + (R = console.debug) == null || R.call(console, V); } return null; }, G = (w) => { try { - const R = w == null ? void 0 : w.metadata_raw, Y = R && typeof R == "object" ? R : null, F = (Y == null ? void 0 : Y.raw_ffprobe) || {}, N = (F == null ? void 0 : F.video_stream) || {}; - return h( - (Y == null ? void 0 : Y.fps) ?? (Y == null ? void 0 : Y.frame_rate) ?? (w == null ? void 0 : w.fps) ?? (N == null ? void 0 : N.avg_frame_rate) ?? (N == null ? void 0 : N.r_frame_rate) + const R = w == null ? void 0 : w.metadata_raw, V = R && typeof R == "object" ? R : null, O = (V == null ? void 0 : V.raw_ffprobe) || {}, k = (O == null ? void 0 : O.video_stream) || {}; + return C( + (V == null ? void 0 : V.fps) ?? (V == null ? void 0 : V.frame_rate) ?? (w == null ? void 0 : w.fps) ?? (k == null ? void 0 : k.avg_frame_rate) ?? (k == null ? void 0 : k.r_frame_rate) ); } catch { return null; } - }, W = (w, R, Y, F = "metadata") => { - var N; + }, Z = (w, R, V, O = "metadata") => { + var k; try { - const V = Number(Y); - if (!Number.isFinite(V) || V <= 0) return; - const k = Math.round(V * 1e3) / 1e3, K = Number((w == null ? void 0 : w._mjrDetectedFps) || 0) || 0; - if (K > 0 && Math.abs(K - k) < 0.01) return; - w._mjrDetectedFps = k, window.dispatchEvent( + const Y = Number(V); + if (!Number.isFinite(Y) || Y <= 0) return; + const N = Math.round(Y * 1e3) / 1e3, U = Number((w == null ? void 0 : w._mjrDetectedFps) || 0) || 0; + if (U > 0 && Math.abs(U - N) < 0.01) return; + w._mjrDetectedFps = N, window.dispatchEvent( new CustomEvent("mjr:viewer-fps-detected", { detail: { - fps: k, - source: String(F || "metadata"), + fps: N, + source: String(O || "metadata"), assetId: (R == null ? void 0 : R.id) != null ? String(R.id) : "" } }) ); - } catch (V) { - (N = console.debug) == null || N.call(console, V); + } catch (Y) { + (k = console.debug) == null || k.call(console, Y); } }, f = (w, R) => { - var Y, F, N; + var V, O, k; try { - const V = G(R); - V && W(w, R, V, "asset-metadata"); - } catch (V) { - (Y = console.debug) == null || Y.call(console, V); + const Y = G(R); + Y && Z(w, R, Y, "asset-metadata"); + } catch (Y) { + (V = console.debug) == null || V.call(console, Y); } try { w.addEventListener( "loadedmetadata", () => { - var V; + var Y; try { - const k = G(R); - k && W(w, R, k, "loadedmetadata"); - } catch (k) { - (V = console.debug) == null || V.call(console, k); + const N = G(R); + N && Z(w, R, N, "loadedmetadata"); + } catch (N) { + (Y = console.debug) == null || Y.call(console, N); } }, { once: !0 } ); - } catch (V) { - (F = console.debug) == null || F.call(console, V); + } catch (Y) { + (O = console.debug) == null || O.call(console, Y); } try { if (typeof (w == null ? void 0 : w.requestVideoFrameCallback) != "function") return; - let V = null, k = 0, K = 0; - const z = 10, B = (J, P) => { - var H; + let Y = null, N = 0, U = 0; + const z = 10, T = (J, P) => { + var E; try { const $ = Number(P == null ? void 0 : P.mediaTime); if (Number.isFinite($) && $ >= 0) { - if (V != null) { - const E = $ - V; - E > 0 && E < 1 && (K += E, k += 1); + if (Y != null) { + const H = $ - Y; + H > 0 && H < 1 && (U += H, N += 1); } - V = $; + Y = $; } - if (k >= 3) { - const E = K / Math.max(1, k), oe = E > 0 ? 1 / E : 0; - Number.isFinite(oe) && oe > 1 && W(w, R, oe, "rvfc"); + if (N >= 3) { + const H = U / Math.max(1, N), ne = H > 0 ? 1 / H : 0; + Number.isFinite(ne) && ne > 1 && Z(w, R, ne, "rvfc"); } - k < z && w.requestVideoFrameCallback(B); + N < z && w.requestVideoFrameCallback(T); } catch ($) { - (H = console.debug) == null || H.call(console, $); + (E = console.debug) == null || E.call(console, $); } }; - w.requestVideoFrameCallback(B); - } catch (V) { - (N = console.debug) == null || N.call(console, V); + w.requestVideoFrameCallback(T); + } catch (Y) { + (k = console.debug) == null || k.call(console, Y); } - }, X = (w, R, { compare: Y = !1 } = {}) => { - const F = document.createElement("div"); - if (F.style.cssText = ` + }, X = (w, R, { compare: V = !1 } = {}) => { + const O = document.createElement("div"); + if (O.style.cssText = ` width: 100%; height: 100%; display: flex; @@ -18555,16 +18582,16 @@ function HA({ gap: 12px; color: rgba(255,255,255,0.85); padding: 14px; - background-image: linear-gradient(rgba(0,0,0,0.42), rgba(0,0,0,0.42)), url('${EA}'); + background-image: linear-gradient(rgba(0,0,0,0.42), rgba(0,0,0,0.42)), url('${HA}'); background-size: cover; background-position: center center; background-repeat: no-repeat; - `, !Y) { - const k = document.createElement("div"); - k.textContent = String((w == null ? void 0 : w.filename) || "Audio"), k.style.cssText = "font-size: 12px; opacity: 0.9; max-width: 90%; text-align: center; overflow: hidden; text-overflow: ellipsis;", F.appendChild(k); + `, !V) { + const N = document.createElement("div"); + N.textContent = String((w == null ? void 0 : w.filename) || "Audio"), N.style.cssText = "font-size: 12px; opacity: 0.9; max-width: 90%; text-align: center; overflow: hidden; text-overflow: ellipsis;", O.appendChild(N); } - const N = document.createElement("canvas"); - N.className = "mjr-viewer-audio-viz", N.style.cssText = ` + const k = document.createElement("canvas"); + k.className = "mjr-viewer-audio-viz", k.style.cssText = ` width: min(1920px, 96%); aspect-ratio: 16 / 9; height: auto; @@ -18574,25 +18601,25 @@ function HA({ border-radius: 10px; background: transparent; `; - const V = document.createElement("audio"); - V.className = "mjr-viewer-audio-src", V.src = R, V.controls = !1, V.autoplay = !0, V.preload = "metadata", V.style.cssText = "width: min(680px, 90%);"; + const Y = document.createElement("audio"); + Y.className = "mjr-viewer-audio-src", Y.src = R, Y.controls = !1, Y.autoplay = !0, Y.preload = "metadata", Y.style.cssText = "width: min(680px, 90%);"; try { - const k = DA({ - canvas: N, - audioEl: V, + const N = DA({ + canvas: k, + audioEl: Y, mode: t == null ? void 0 : t.audioVisualizerMode, pauseDuringExecution: !0 }); - V._mjrAudioViz = k, N._mjrProc = k; + Y._mjrAudioViz = N, k._mjrProc = N; } catch { - V._mjrAudioViz = null, N._mjrProc = null; + Y._mjrAudioViz = null, k._mjrProc = null; } - return F.appendChild(N), F.appendChild(V), F; + return O.appendChild(k), O.appendChild(Y), O; }; function x(w, R) { - var V, k, K, z, B, J, P, H, $, E, oe; - const Y = document.createElement("div"); - Y.className = "mjr-video-host", Y.style.cssText = ` + var Y, N, U, z, T, J, P, E, $, H, ne; + const V = document.createElement("div"); + V.className = "mjr-video-host", V.style.cssText = ` width: 100%; height: 100%; display: flex; @@ -18600,41 +18627,41 @@ function HA({ justify-content: center; position: relative; `; - const F = String((w == null ? void 0 : w.kind) || "").toLowerCase(); - if (ku(w) || F === "model3d") - return Xu(w, R, { + const O = String((w == null ? void 0 : w.kind) || "").toLowerCase(); + if (Xu(w) || O === "model3d") + return Nu(w, R, { hostClassName: "mjr-model3d-host mjr-viewer-model3d-host", canvasClassName: "mjr-viewer-media mjr-model3d-render-canvas", pauseDuringExecution: !0, scheduleOverlayRedraw: l, onReady: () => { - var M, j; + var M, v; try { requestAnimationFrame(() => { - var O; + var F; try { t != null && t._userInteracted || (i == null || i(), o == null || o(), r == null || r()); } catch (D) { - (O = console.debug) == null || O.call(console, D); + (F = console.debug) == null || F.call(console, D); } }); - } catch (O) { - (M = console.debug) == null || M.call(console, O); + } catch (F) { + (M = console.debug) == null || M.call(console, F); } try { l == null || l(); - } catch (O) { - (j = console.debug) == null || j.call(console, O); + } catch (F) { + (v = console.debug) == null || v.call(console, F); } } }); - if (F && F !== "image" && F !== "video" && F !== "audio") { + if (O && O !== "image" && O !== "video" && O !== "audio") { const M = document.createElement("canvas"); M.className = "mjr-viewer-media"; try { (w == null ? void 0 : w.id) != null && (M != null && M.dataset) && (M.dataset.mjrAssetId = String(w.id)); - } catch (j) { - (V = console.debug) == null || V.call(console, j); + } catch (v) { + (Y = console.debug) == null || Y.call(console, v); } L(M, w), M.style.cssText = ` max-width: 100%; @@ -18644,20 +18671,20 @@ function HA({ transform-origin: center center; `; try { - fo(M, `Unsupported file type: ${F}`); - } catch (j) { - (k = console.debug) == null || k.call(console, j); + fo(M, `Unsupported file type: ${O}`); + } catch (v) { + (N = console.debug) == null || N.call(console, v); } return M; } - if (F === "audio") return X(w, R, { compare: !1 }); - if (F === "video") { + if (O === "audio") return X(w, R, { compare: !1 }); + if (O === "video") { const M = document.createElement("canvas"); M.className = "mjr-viewer-media"; try { (w == null ? void 0 : w.id) != null && (M != null && M.dataset) && (M.dataset.mjrAssetId = String(w.id)); - } catch (O) { - (K = console.debug) == null || K.call(console, O); + } catch (F) { + (U = console.debug) == null || U.call(console, F); } L(M, w), M.style.cssText = ` max-width: 100%; @@ -18667,28 +18694,28 @@ function HA({ transform: ${(n == null ? void 0 : n()) || ""}; transform-origin: center center; `; - const j = document.createElement("video"); - j.className = "mjr-viewer-video-src", j.src = R, j.controls = !1, j.loop = !0, j.playsInline = !0, j.muted = !0, j.autoplay = !0, j.preload = "auto"; + const v = document.createElement("video"); + v.className = "mjr-viewer-video-src", v.src = R, v.controls = !1, v.loop = !0, v.playsInline = !0, v.muted = !0, v.autoplay = !0, v.preload = "auto"; try { - "decode" in HTMLVideoElement.prototype && (j.decoding = "async"); + "decode" in HTMLVideoElement.prototype && (v.decoding = "async"); } catch { } - j.style.cssText = "position:absolute; width:1px; height:1px; opacity:0; pointer-events:none;", f(j, w); + v.style.cssText = "position:absolute; width:1px; height:1px; opacity:0; pointer-events:none;", f(v, w); try { M._mjrProc = Ru({ canvas: M, - videoEl: j, - disableWebGL: I || !!fe.VIEWER_DISABLE_WEBGL_VIDEO, + videoEl: v, + disableWebGL: I || !!he.VIEWER_DISABLE_WEBGL_VIDEO, pauseDuringExecution: !0, getGradeParams: a, isDefaultGrade: c, tonemap: s, maxProcPixelsVideo: u, - throttleFps: y, + throttleFps: A, safeAddListener: g, - safeCall: C, + safeCall: W, onReady: () => { - var O, D; + var F, D; try { requestAnimationFrame(() => { var q; @@ -18699,7 +18726,7 @@ function HA({ } }); } catch (q) { - (O = console.debug) == null || O.call(console, q); + (F = console.debug) == null || F.call(console, q); } try { l == null || l(); @@ -18707,17 +18734,17 @@ function HA({ (D = console.debug) == null || D.call(console, q); } } - }), (B = (z = M._mjrProc) == null ? void 0 : z.setParams) == null || B.call(z, a == null ? void 0 : a()); - } catch (O) { - (J = console.debug) == null || J.call(console, O); + }), (T = (z = M._mjrProc) == null ? void 0 : z.setParams) == null || T.call(z, a == null ? void 0 : a()); + } catch (F) { + (J = console.debug) == null || J.call(console, F); } try { - j.addEventListener( + v.addEventListener( "canplay", () => { - var O, D; + var F, D; try { - const q = (O = j.play) == null ? void 0 : O.call(j); + const q = (F = v.play) == null ? void 0 : F.call(v); q && typeof q.catch == "function" && q.catch(() => { var ee; try { @@ -18725,8 +18752,8 @@ function HA({ M, "Autoplay blocked (press Space / Play)" ); - } catch (ce) { - (ee = console.debug) == null || ee.call(console, ce); + } catch (ae) { + (ee = console.debug) == null || ee.call(console, ae); } }); } catch { @@ -18739,21 +18766,21 @@ function HA({ }, { once: !0 } ); - } catch (O) { - (P = console.debug) == null || P.call(console, O); + } catch (F) { + (P = console.debug) == null || P.call(console, F); } - return Y.appendChild(M), Y.appendChild(j), Y; + return V.appendChild(M), V.appendChild(v), V; } if (p(w)) return b(w, R); - const N = document.createElement("canvas"); - N.className = "mjr-viewer-media"; + const k = document.createElement("canvas"); + k.className = "mjr-viewer-media"; try { - (w == null ? void 0 : w.id) != null && (N != null && N.dataset) && (N.dataset.mjrAssetId = String(w.id)); + (w == null ? void 0 : w.id) != null && (k != null && k.dataset) && (k.dataset.mjrAssetId = String(w.id)); } catch (M) { - (H = console.debug) == null || H.call(console, M); + (E = console.debug) == null || E.call(console, M); } - L(N, w), N.style.cssText = ` + L(k, w), k.style.cssText = ` max-width: 100%; max-height: 100%; object-fit: contain; @@ -18762,78 +18789,78 @@ function HA({ transform-origin: center center; `; try { - N._mjrProc = Lu({ - canvas: N, + k._mjrProc = Lu({ + canvas: k, url: R, getGradeParams: a, isDefaultGrade: c, tonemap: s, maxProcPixels: d, onReady: () => { - var M, j; + var M, v; try { requestAnimationFrame(() => { - var O; + var F; try { t != null && t._userInteracted || (i == null || i(), o == null || o(), r == null || r()); } catch (D) { - (O = console.debug) == null || O.call(console, D); + (F = console.debug) == null || F.call(console, D); } }); - } catch (O) { - (M = console.debug) == null || M.call(console, O); + } catch (F) { + (M = console.debug) == null || M.call(console, F); } try { l == null || l(); - } catch (O) { - (j = console.debug) == null || j.call(console, O); + } catch (F) { + (v = console.debug) == null || v.call(console, F); } } - }), (E = ($ = N._mjrProc) == null ? void 0 : $.setParams) == null || E.call($, a == null ? void 0 : a()); + }), (H = ($ = k._mjrProc) == null ? void 0 : $.setParams) == null || H.call($, a == null ? void 0 : a()); } catch (M) { - (oe = console.debug) == null || oe.call(console, M); + (ne = console.debug) == null || ne.call(console, M); } - return N; + return k; } - function T(w, R) { - var N, V, k, K, z, B, J, P, H, $; - const Y = String((w == null ? void 0 : w.kind) || "").toLowerCase(); - if (ku(w) || Y === "model3d") - return Xu(w, R, { + function K(w, R) { + var k, Y, N, U, z, T, J, P, E, $; + const V = String((w == null ? void 0 : w.kind) || "").toLowerCase(); + if (Xu(w) || V === "model3d") + return Nu(w, R, { hostClassName: "mjr-model3d-host mjr-viewer-model3d-host", canvasClassName: "mjr-viewer-media mjr-model3d-render-canvas", pauseDuringExecution: !0, scheduleOverlayRedraw: l, onReady: () => { - var E, oe; + var H, ne; try { requestAnimationFrame(() => { var M; try { t != null && t._userInteracted || (i == null || i(), o == null || o(), r == null || r()); - } catch (j) { - (M = console.debug) == null || M.call(console, j); + } catch (v) { + (M = console.debug) == null || M.call(console, v); } }); } catch (M) { - (E = console.debug) == null || E.call(console, M); + (H = console.debug) == null || H.call(console, M); } try { l == null || l(); } catch (M) { - (oe = console.debug) == null || oe.call(console, M); + (ne = console.debug) == null || ne.call(console, M); } } }); - if (Y && Y !== "image" && Y !== "video" && Y !== "audio") { - const E = document.createElement("canvas"); - E.className = "mjr-viewer-media"; + if (V && V !== "image" && V !== "video" && V !== "audio") { + const H = document.createElement("canvas"); + H.className = "mjr-viewer-media"; try { - (w == null ? void 0 : w.id) != null && (E != null && E.dataset) && (E.dataset.mjrAssetId = String(w.id)); - } catch (oe) { - (N = console.debug) == null || N.call(console, oe); + (w == null ? void 0 : w.id) != null && (H != null && H.dataset) && (H.dataset.mjrAssetId = String(w.id)); + } catch (ne) { + (k = console.debug) == null || k.call(console, ne); } - L(E, w), E.style.cssText = ` + L(H, w), H.style.cssText = ` max-width: 100%; max-height: 100%; display: block; @@ -18841,24 +18868,24 @@ function HA({ transform-origin: center center; `; try { - fo(E, `Unsupported file type: ${Y}`); - } catch (oe) { - (V = console.debug) == null || V.call(console, oe); + fo(H, `Unsupported file type: ${V}`); + } catch (ne) { + (Y = console.debug) == null || Y.call(console, ne); } - return E; + return H; } - if (Y === "audio") return X(w, R, { compare: !0 }); - if (Y === "video") { - const E = document.createElement("div"); - E.style.cssText = "width:100%; height:100%; position:relative; display:flex; align-items:center; justify-content:center;"; - const oe = document.createElement("canvas"); - oe.className = "mjr-viewer-media"; + if (V === "audio") return X(w, R, { compare: !0 }); + if (V === "video") { + const H = document.createElement("div"); + H.style.cssText = "width:100%; height:100%; position:relative; display:flex; align-items:center; justify-content:center;"; + const ne = document.createElement("canvas"); + ne.className = "mjr-viewer-media"; try { - (w == null ? void 0 : w.id) != null && (oe != null && oe.dataset) && (oe.dataset.mjrAssetId = String(w.id)); - } catch (j) { - (k = console.debug) == null || k.call(console, j); + (w == null ? void 0 : w.id) != null && (ne != null && ne.dataset) && (ne.dataset.mjrAssetId = String(w.id)); + } catch (v) { + (N = console.debug) == null || N.call(console, v); } - L(oe, w), oe.style.cssText = ` + L(ne, w), ne.style.cssText = ` max-width: 100%; max-height: 100%; object-fit: contain; @@ -18874,19 +18901,19 @@ function HA({ } M.style.cssText = "position:absolute; width:1px; height:1px; opacity:0; pointer-events:none;", f(M, w); try { - oe._mjrProc = Ru({ - canvas: oe, + ne._mjrProc = Ru({ + canvas: ne, videoEl: M, pauseDuringExecution: !0, getGradeParams: a, isDefaultGrade: c, tonemap: s, maxProcPixelsVideo: u, - throttleFps: y, + throttleFps: A, safeAddListener: g, - safeCall: C, + safeCall: W, onReady: () => { - var j, O; + var v, F; try { requestAnimationFrame(() => { var D; @@ -18897,30 +18924,30 @@ function HA({ } }); } catch (D) { - (j = console.debug) == null || j.call(console, D); + (v = console.debug) == null || v.call(console, D); } try { l == null || l(); } catch (D) { - (O = console.debug) == null || O.call(console, D); + (F = console.debug) == null || F.call(console, D); } } - }), (z = (K = oe._mjrProc) == null ? void 0 : K.setParams) == null || z.call(K, a == null ? void 0 : a()); - } catch (j) { - (B = console.debug) == null || B.call(console, j); + }), (z = (U = ne._mjrProc) == null ? void 0 : U.setParams) == null || z.call(U, a == null ? void 0 : a()); + } catch (v) { + (T = console.debug) == null || T.call(console, v); } - return E.appendChild(oe), E.appendChild(M), E; + return H.appendChild(ne), H.appendChild(M), H; } if (p(w)) return b(w, R); - const F = document.createElement("canvas"); - F.className = "mjr-viewer-media"; + const O = document.createElement("canvas"); + O.className = "mjr-viewer-media"; try { - (w == null ? void 0 : w.id) != null && (F != null && F.dataset) && (F.dataset.mjrAssetId = String(w.id)); - } catch (E) { - (J = console.debug) == null || J.call(console, E); + (w == null ? void 0 : w.id) != null && (O != null && O.dataset) && (O.dataset.mjrAssetId = String(w.id)); + } catch (H) { + (J = console.debug) == null || J.call(console, H); } - L(F, w), F.style.cssText = ` + L(O, w), O.style.cssText = ` max-width: 100%; max-height: 100%; display: block; @@ -18928,55 +18955,55 @@ function HA({ transform-origin: center center; `; try { - F._mjrProc = Lu({ - canvas: F, + O._mjrProc = Lu({ + canvas: O, url: R, getGradeParams: a, isDefaultGrade: c, tonemap: s, maxProcPixels: d, onReady: () => { - var E, oe; + var H, ne; try { requestAnimationFrame(() => { var M; try { t != null && t._userInteracted || (i == null || i(), o == null || o(), r == null || r()); - } catch (j) { - (M = console.debug) == null || M.call(console, j); + } catch (v) { + (M = console.debug) == null || M.call(console, v); } }); } catch (M) { - (E = console.debug) == null || E.call(console, M); + (H = console.debug) == null || H.call(console, M); } try { l == null || l(); } catch (M) { - (oe = console.debug) == null || oe.call(console, M); + (ne = console.debug) == null || ne.call(console, M); } } - }), (H = (P = F._mjrProc) == null ? void 0 : P.setParams) == null || H.call(P, a == null ? void 0 : a()); - } catch (E) { - ($ = console.debug) == null || $.call(console, E); + }), (E = (P = O._mjrProc) == null ? void 0 : P.setParams) == null || E.call(P, a == null ? void 0 : a()); + } catch (H) { + ($ = console.debug) == null || $.call(console, H); } - return F; + return O; } return { createMediaElement: x, - createCompareMediaElement: T, + createCompareMediaElement: K, applyTransformToVisibleMedia: () => { - var w, R, Y; + var w, R, V; try { - const F = (n == null ? void 0 : n()) || "", N = ((w = e == null ? void 0 : e.querySelectorAll) == null ? void 0 : w.call(e, ".mjr-viewer-media")) || []; - for (const V of N) + const O = (n == null ? void 0 : n()) || "", k = ((w = e == null ? void 0 : e.querySelectorAll) == null ? void 0 : w.call(e, ".mjr-viewer-media")) || []; + for (const Y of k) try { - if (V != null && V._mjrDisableViewerTransform) continue; - V.style.transform = F; - } catch (k) { - (R = console.debug) == null || R.call(console, k); + if (Y != null && Y._mjrDisableViewerTransform) continue; + Y.style.transform = O; + } catch (N) { + (R = console.debug) == null || R.call(console, N); } - } catch (F) { - (Y = console.debug) == null || Y.call(console, F); + } catch (O) { + (V = console.debug) == null || V.call(console, O); } } }; @@ -19002,11 +19029,11 @@ function qA({ buildAssetViewURL: e, IMAGE_PRELOAD_EXTENSIONS: t, state: n }) { try { n._preloadRefs = n._preloadRefs || /* @__PURE__ */ new Set(), n._preloadRefs.add(c); const d = () => { - var u, I, y; + var u, I, A; try { (I = (u = n._preloadRefs) == null ? void 0 : u.delete) == null || I.call(u, c); - } catch (S) { - (y = console.debug) == null || y.call(console, S); + } catch (h) { + (A = console.debug) == null || A.call(console, h); } }; c.addEventListener("load", d, { once: !0, passive: !0 }), c.addEventListener("error", d, { once: !0, passive: !0 }); @@ -19015,7 +19042,7 @@ function qA({ buildAssetViewURL: e, IMAGE_PRELOAD_EXTENSIONS: t, state: n }) { } } function l(c, s) { - var u, I, y; + var u, I, A; if (!c || !s || !o(c)) return; const d = i(c) || s; if (d) { @@ -19023,21 +19050,21 @@ function qA({ buildAssetViewURL: e, IMAGE_PRELOAD_EXTENSIONS: t, state: n }) { if (n._preloadedAssetKeys.add(d), n._preloadedAssetKeys.size > 250) try { n._preloadedAssetKeys.clear(); - } catch (S) { - (u = console.debug) == null || u.call(console, S); + } catch (h) { + (u = console.debug) == null || u.call(console, h); } } try { - const S = new Image(); - S.decoding = "async"; + const h = new Image(); + h.decoding = "async"; try { - S.loading = "lazy"; - } catch (Z) { - (I = console.debug) == null || I.call(console, Z); + h.loading = "lazy"; + } catch (S) { + (I = console.debug) == null || I.call(console, S); } - S.alt = "", S.src = s, r(S); - } catch (S) { - (y = console.debug) == null || y.call(console, S); + h.alt = "", h.src = s, r(h); + } catch (h) { + (A = console.debug) == null || A.call(console, h); } } function a(c, s) { @@ -19053,17 +19080,17 @@ function qA({ buildAssetViewURL: e, IMAGE_PRELOAD_EXTENSIONS: t, state: n }) { ]; for (const I of u) { if (I < 0 || I >= d.length) continue; - const y = d[I]; - if (!y) continue; - const S = e(y); - l(y, S); + const A = d[I]; + if (!A) continue; + const h = e(A); + l(A, h); } } return { preloadAdjacentAssets: a, preloadImageForAsset: l, trackPreloadRef: r }; } function PA(e) { var i, o, r, l, a, c, s; - const t = FC(); + const t = Oh(); if (t.length) { const d = t[t.length - 1]; for (const u of t) @@ -19087,7 +19114,7 @@ function PA(e) { } } const n = e(); - return RC(n), n._mjrViewerAPI; + return Rh(n), n._mjrViewerAPI; } function QA({ state: e, @@ -19103,72 +19130,72 @@ function QA({ isPlayableViewerKind: d, collectPlayableMediaElements: u, pickPrimaryPlayableMedia: I, - mountUnifiedMediaControls: y, - installFollowerVideoSync: S, - getViewerInfo: Z, - scheduleOverlayRedraw: C, + mountUnifiedMediaControls: A, + installFollowerVideoSync: h, + getViewerInfo: S, + scheduleOverlayRedraw: W, viewerInfoCacheGet: g, - viewerInfoCacheSet: A + viewerInfoCacheSet: y }) { function p() { - var L, h, G, W, f, X, x, T, v, w, R, Y, F, N, V, k; + var L, C, G, Z, f, X, x, K, j, w, R, V, O, k, Y, N; try { e._videoControlsDestroy && e._videoControlsDestroy(); - } catch (K) { - (L = console.debug) == null || L.call(console, K); + } catch (U) { + (L = console.debug) == null || L.call(console, U); } e._videoControlsDestroy = null, e._videoControlsMounted = null, e._activeVideoEl = null, e._activeVideoAssetId = null, e.nativeFps = null; try { - (G = (h = e._videoSyncAbort) == null ? void 0 : h.abort) == null || G.call(h); - } catch (K) { - (W = console.debug) == null || W.call(console, K); + (G = (C = e._videoSyncAbort) == null ? void 0 : C.abort) == null || G.call(C); + } catch (U) { + (Z = console.debug) == null || Z.call(console, U); } e._videoSyncAbort = null; try { (X = (f = e._videoMetaAbort) == null ? void 0 : f.abort) == null || X.call(f); - } catch (K) { - (x = console.debug) == null || x.call(console, K); + } catch (U) { + (x = console.debug) == null || x.call(console, U); } e._videoMetaAbort = null; try { - (v = (T = e._videoFpsEventAbort) == null ? void 0 : T.abort) == null || v.call(T); - } catch (K) { - (w = console.debug) == null || w.call(console, K); + (j = (K = e._videoFpsEventAbort) == null ? void 0 : K.abort) == null || j.call(K); + } catch (U) { + (w = console.debug) == null || w.call(console, U); } e._videoFpsEventAbort = null; try { - (Y = (R = e._scopesVideoAbort) == null ? void 0 : R.abort) == null || Y.call(R); - } catch (K) { - (F = console.debug) == null || F.call(console, K); + (V = (R = e._scopesVideoAbort) == null ? void 0 : R.abort) == null || V.call(R); + } catch (U) { + (O = console.debug) == null || O.call(console, U); } e._scopesVideoAbort = null; try { r.innerHTML = ""; - } catch (K) { - (N = console.debug) == null || N.call(console, K); + } catch (U) { + (k = console.debug) == null || k.call(console, U); } try { r.style.display = "none"; - } catch (K) { - (V = console.debug) == null || V.call(console, K); + } catch (U) { + (Y = console.debug) == null || Y.call(console, U); } try { o.style.display = ""; - } catch (K) { - (k = console.debug) == null || k.call(console, K); + } catch (U) { + (N = console.debug) == null || N.call(console, U); } } async function b() { - var L, h, G, W, f, X, x, T, v, w, R, Y, F, N, V, k, K, z, B, J, P, H, $, E, oe, M, j, O, D, q, ee, ce, ue, U, Q; + var L, C, G, Z, f, X, x, K, j, w, R, V, O, k, Y, N, U, z, T, J, P, E, $, H, ne, M, v, F, D, q, ee, ae, ue, B, Q; try { const _ = e.assets[e.currentIndex], le = (_ == null ? void 0 : _.id) ?? null; if (!d(_ == null ? void 0 : _.kind)) { p(); return; } - let de = null, se = []; + let ce = null, de = []; try { - se = u({ + de = u({ mode: e.mode, VIEWER_MODES: n, singleView: l, @@ -19176,259 +19203,259 @@ function QA({ sideView: c }); } catch { - se = []; + de = []; } try { - de = I(se); + ce = I(de); } catch { - de = se[0] || null; + ce = de[0] || null; } - if (!de) { + if (!ce) { p(); return; } - if (e._activeVideoEl && e._activeVideoEl === de && e._activeVideoAssetId === le && e._videoControlsDestroy) { + if (e._activeVideoEl && e._activeVideoEl === ce && e._activeVideoAssetId === le && e._videoControlsDestroy) { try { o.style.display = "none", r.style.display = ""; - } catch (we) { - (L = console.debug) == null || L.call(console, we); + } catch (Me) { + (L = console.debug) == null || L.call(console, Me); } return; } p(); try { o.style.display = "none"; - } catch (we) { - (h = console.debug) == null || h.call(console, we); + } catch (Me) { + (C = console.debug) == null || C.call(console, Me); } try { r.style.display = ""; - } catch (we) { - (G = console.debug) == null || G.call(console, we); + } catch (Me) { + (G = console.debug) == null || G.call(console, Me); } - let ge, je; + let ge, Le; try { - const we = ($e) => { + const Me = (it) => { try { - const qe = PI($e), Ue = QI($e, qe); - return { fps: qe, frameCount: Ue }; + const qe = PI(it), Pe = QI(it, qe); + return { fps: qe, frameCount: Pe }; } catch { return { fps: null, frameCount: null }; } - }, Je = we(_); - if (Je.fps != null && (ge = Je.fps), Je.frameCount != null && (je = Je.frameCount), ge == null || je == null) { - const $e = (W = s == null ? void 0 : s.getCached) == null ? void 0 : W.call(s, _ == null ? void 0 : _.id), qe = $e != null && $e.data ? we($e.data) : { fps: null, frameCount: null }; - ge == null && qe.fps != null && (ge = qe.fps), je == null && qe.frameCount != null && (je = qe.frameCount); + }, Fe = Me(_); + if (Fe.fps != null && (ge = Fe.fps), Fe.frameCount != null && (Le = Fe.frameCount), ge == null || Le == null) { + const it = (Z = s == null ? void 0 : s.getCached) == null ? void 0 : Z.call(s, _ == null ? void 0 : _.id), qe = it != null && it.data ? Me(it.data) : { fps: null, frameCount: null }; + ge == null && qe.fps != null && (ge = qe.fps), Le == null && qe.frameCount != null && (Le = qe.frameCount); } - } catch (we) { - (f = console.debug) == null || f.call(console, we); + } catch (Me) { + (f = console.debug) == null || f.call(console, Me); } try { if (ge == null) { - const we = Number(de == null ? void 0 : de._mjrDetectedFps); - Number.isFinite(we) && we > 0 && (ge = we); + const Me = Number(ce == null ? void 0 : ce._mjrDetectedFps); + Number.isFinite(Me) && Me > 0 && (ge = Me); } - } catch (we) { - (X = console.debug) == null || X.call(console, we); + } catch (Me) { + (X = console.debug) == null || X.call(console, Me); } - const Se = String((_ == null ? void 0 : _.kind) || "").toLowerCase() === "audio" ? "audio" : "video", ke = y(de, { + const xe = String((_ == null ? void 0 : _.kind) || "").toLowerCase() === "audio" ? "audio" : "video", Xe = A(ce, { variant: "viewerbar", hostEl: r, fullscreenEl: i, initialFps: ge, - initialFrameCount: je, + initialFrameCount: Le, initialPlaybackRate: Number(e == null ? void 0 : e.playbackRate) || 1, - mediaKind: Se + mediaKind: xe }); - e._videoControlsMounted = ke || null, e._videoControlsDestroy = (ke == null ? void 0 : ke.destroy) || null, e._activeVideoEl = de, e._activeVideoAssetId = le; + e._videoControlsMounted = Xe || null, e._videoControlsDestroy = (Xe == null ? void 0 : Xe.destroy) || null, e._activeVideoEl = ce, e._activeVideoAssetId = le; try { e.nativeFps = Number(ge) > 0 ? Number(ge) : null; - } catch (we) { - (x = console.debug) == null || x.call(console, we); + } catch (Me) { + (x = console.debug) == null || x.call(console, Me); } try { - if (Se === "audio") { - const we = (T = de.play) == null ? void 0 : T.call(de); - we && typeof we.catch == "function" && we.catch(() => { + if (xe === "audio") { + const Me = (K = ce.play) == null ? void 0 : K.call(ce); + Me && typeof Me.catch == "function" && Me.catch(() => { }); } - } catch (we) { - (v = console.debug) == null || v.call(console, we); + } catch (Me) { + (j = console.debug) == null || j.call(console, Me); } try { - if (Se === "video" && e.mode === (n == null ? void 0 : n.SINGLE)) { - de.muted = !1; - const Je = (w = de.play) == null ? void 0 : w.call(de); - Je && typeof Je.catch == "function" && Je.catch(() => { + if (xe === "video" && e.mode === (n == null ? void 0 : n.SINGLE)) { + ce.muted = !1; + const Fe = (w = ce.play) == null ? void 0 : w.call(ce); + Fe && typeof Fe.catch == "function" && Fe.catch(() => { }); } - } catch (we) { - (R = console.debug) == null || R.call(console, we); + } catch (Me) { + (R = console.debug) == null || R.call(console, Me); } try { - (F = (Y = e._scopesVideoAbort) == null ? void 0 : Y.abort) == null || F.call(Y); - } catch (we) { - (N = console.debug) == null || N.call(console, we); + (O = (V = e._scopesVideoAbort) == null ? void 0 : V.abort) == null || O.call(V); + } catch (Me) { + (k = console.debug) == null || k.call(console, Me); } - if (Se === "video") + if (xe === "video") try { - const we = new AbortController(); - e._scopesVideoAbort = we; - const Je = () => { - var Te; + const Me = new AbortController(); + e._scopesVideoAbort = Me; + const Fe = () => { + var Re; try { if (String((e == null ? void 0 : e.scopesMode) || "off") === "off") return; - } catch (Oe) { - (Te = console.debug) == null || Te.call(console, Oe); + } catch (rt) { + (Re = console.debug) == null || Re.call(console, rt); } - C(); + W(); }; - de.addEventListener("seeked", Je, { - signal: we.signal, + ce.addEventListener("seeked", Fe, { + signal: Me.signal, passive: !0 - }), de.addEventListener("loadeddata", Je, { - signal: we.signal, + }), ce.addEventListener("loadeddata", Fe, { + signal: Me.signal, passive: !0 - }), de.addEventListener("play", Je, { signal: we.signal, passive: !0 }), de.addEventListener("pause", Je, { - signal: we.signal, + }), ce.addEventListener("play", Fe, { signal: Me.signal, passive: !0 }), ce.addEventListener("pause", Fe, { + signal: Me.signal, passive: !0 }); const qe = 1e3 / Math.max( 1, Math.min(30, Math.floor(Number(t.VIEWER_SCOPES_FPS) || 10)) - ), Ue = () => { - var Te, Oe, pt, Me; - if (!we.signal.aborted) { + ), Pe = () => { + var Re, rt, Te, qt; + if (!Me.signal.aborted) { try { if (document != null && document.hidden) return; - } catch (Xt) { - (Te = console.debug) == null || Te.call(console, Xt); + } catch (kt) { + (Re = console.debug) == null || Re.call(console, kt); } try { if (i.style.display === "none") return; - } catch (Xt) { - (Oe = console.debug) == null || Oe.call(console, Xt); + } catch (kt) { + (rt = console.debug) == null || rt.call(console, kt); } try { - if (String((e == null ? void 0 : e.scopesMode) || "off") !== "off" && !de.paused) { - const Xt = performance.now(), Mt = Number(e == null ? void 0 : e._scopesLastAt) || 0; - Xt - Mt >= qe && (e._scopesLastAt = Xt, C()); + if (String((e == null ? void 0 : e.scopesMode) || "off") !== "off" && !ce.paused) { + const kt = performance.now(), we = Number(e == null ? void 0 : e._scopesLastAt) || 0; + kt - we >= qe && (e._scopesLastAt = kt, W()); } - } catch (Xt) { - (pt = console.debug) == null || pt.call(console, Xt); + } catch (kt) { + (Te = console.debug) == null || Te.call(console, kt); } try { - requestAnimationFrame(Ue); - } catch (Xt) { - (Me = console.debug) == null || Me.call(console, Xt); + requestAnimationFrame(Pe); + } catch (kt) { + (qt = console.debug) == null || qt.call(console, kt); } } }; try { - requestAnimationFrame(Ue); - } catch (Te) { - (V = console.debug) == null || V.call(console, Te); + requestAnimationFrame(Pe); + } catch (Re) { + (Y = console.debug) == null || Y.call(console, Re); } - } catch (we) { - (k = console.debug) == null || k.call(console, we); + } catch (Me) { + (N = console.debug) == null || N.call(console, Me); } else e._scopesVideoAbort = null; try { - (z = (K = e._videoSyncAbort) == null ? void 0 : K.abort) == null || z.call(K); - } catch (we) { - (B = console.debug) == null || B.call(console, we); + (z = (U = e._videoSyncAbort) == null ? void 0 : U.abort) == null || z.call(U); + } catch (Me) { + (T = console.debug) == null || T.call(console, Me); } try { - if (e._videoSyncAbort = null, Se === "video" && se.length > 1) { - const we = se.filter((Je) => Je && Je !== de); - e._videoSyncAbort = S(de, we); + if (e._videoSyncAbort = null, xe === "video" && de.length > 1) { + const Me = de.filter((Fe) => Fe && Fe !== ce); + e._videoSyncAbort = h(ce, Me); } - } catch (we) { - (J = console.debug) == null || J.call(console, we); + } catch (Me) { + (J = console.debug) == null || J.call(console, Me); } - if (Se === "video") { + if (xe === "video") { try { - const we = (Ue) => yo(Ue), Je = (Ue) => { - const Te = Number(Ue); - return !Number.isFinite(Te) || Te <= 0 ? null : Math.floor(Te); - }, $e = (Ue) => { - var Te, Oe; + const Me = (Pe) => yo(Pe), Fe = (Pe) => { + const Re = Number(Pe); + return !Number.isFinite(Re) || Re <= 0 ? null : Math.floor(Re); + }, it = (Pe) => { + var Re, rt; try { - if (!Ue || typeof Ue != "object") return; - const pt = we((Ue == null ? void 0 : Ue.fps) ?? (Ue == null ? void 0 : Ue.fps_raw) ?? (Ue == null ? void 0 : Ue.frame_rate)), Me = Je(Ue == null ? void 0 : Ue.frame_count); - (pt != null || Me != null) && ((Te = ke == null ? void 0 : ke.setMediaInfo) == null || Te.call(ke, { fps: pt, frameCount: Me })); - } catch (pt) { - (Oe = console.debug) == null || Oe.call(console, pt); + if (!Pe || typeof Pe != "object") return; + const Te = Me((Pe == null ? void 0 : Pe.fps) ?? (Pe == null ? void 0 : Pe.fps_raw) ?? (Pe == null ? void 0 : Pe.frame_rate)), qt = Fe(Pe == null ? void 0 : Pe.frame_count); + (Te != null || qt != null) && ((Re = Xe == null ? void 0 : Xe.setMediaInfo) == null || Re.call(Xe, { fps: Te, frameCount: qt })); + } catch (Te) { + (rt = console.debug) == null || rt.call(console, Te); } }; try { - const Ue = g(_ == null ? void 0 : _.id); - Ue && $e(Ue); - } catch (Ue) { - (P = console.debug) == null || P.call(console, Ue); + const Pe = g(_ == null ? void 0 : _.id); + Pe && it(Pe); + } catch (Pe) { + (P = console.debug) == null || P.call(console, Pe); } try { - ($ = (H = e._videoMetaAbort) == null ? void 0 : H.abort) == null || $.call(H); - } catch (Ue) { - (E = console.debug) == null || E.call(console, Ue); + ($ = (E = e._videoMetaAbort) == null ? void 0 : E.abort) == null || $.call(E); + } catch (Pe) { + (H = console.debug) == null || H.call(console, Pe); } const qe = new AbortController(); e._videoMetaAbort = qe, (async () => { - var Ue, Te; + var Pe, Re; try { - const Oe = await Z(_ == null ? void 0 : _.id, { signal: qe.signal }); - if (!(Oe != null && Oe.ok) || !Oe.data || e._activeVideoEl !== de) return; + const rt = await S(_ == null ? void 0 : _.id, { signal: qe.signal }); + if (!(rt != null && rt.ok) || !rt.data || e._activeVideoEl !== ce) return; try { - A(_ == null ? void 0 : _.id, Oe.data); - } catch (pt) { - (Ue = console.debug) == null || Ue.call(console, pt); + y(_ == null ? void 0 : _.id, rt.data); + } catch (Te) { + (Pe = console.debug) == null || Pe.call(console, Te); } - $e(Oe.data); - } catch (Oe) { - (Te = console.debug) == null || Te.call(console, Oe); + it(rt.data); + } catch (rt) { + (Re = console.debug) == null || Re.call(console, rt); } })(); - } catch (we) { - (oe = console.debug) == null || oe.call(console, we); + } catch (Me) { + (ne = console.debug) == null || ne.call(console, Me); } try { - (j = (M = e._videoFpsEventAbort) == null ? void 0 : M.abort) == null || j.call(M); - } catch (we) { - (O = console.debug) == null || O.call(console, we); + (v = (M = e._videoFpsEventAbort) == null ? void 0 : M.abort) == null || v.call(M); + } catch (Me) { + (F = console.debug) == null || F.call(console, Me); } try { - const we = new AbortController(); - e._videoFpsEventAbort = we, window.addEventListener( + const Me = new AbortController(); + e._videoFpsEventAbort = Me, window.addEventListener( "mjr:viewer-fps-detected", - (Je) => { - var $e, qe; + (Fe) => { + var it, qe; try { - const Ue = (Je == null ? void 0 : Je.detail) || {}, Te = String((Ue == null ? void 0 : Ue.assetId) || ""), Oe = String((_ == null ? void 0 : _.id) ?? ""); - if (!Te || !Oe || Te !== Oe || e._activeVideoEl !== de) return; - const pt = Number(Ue == null ? void 0 : Ue.fps); - if (!Number.isFinite(pt) || pt <= 0) return; - e.nativeFps = pt, ($e = ke == null ? void 0 : ke.setMediaInfo) == null || $e.call(ke, { fps: pt }); - } catch (Ue) { - (qe = console.debug) == null || qe.call(console, Ue); + const Pe = (Fe == null ? void 0 : Fe.detail) || {}, Re = String((Pe == null ? void 0 : Pe.assetId) || ""), rt = String((_ == null ? void 0 : _.id) ?? ""); + if (!Re || !rt || Re !== rt || e._activeVideoEl !== ce) return; + const Te = Number(Pe == null ? void 0 : Pe.fps); + if (!Number.isFinite(Te) || Te <= 0) return; + e.nativeFps = Te, (it = Xe == null ? void 0 : Xe.setMediaInfo) == null || it.call(Xe, { fps: Te }); + } catch (Pe) { + (qe = console.debug) == null || qe.call(console, Pe); } }, - { signal: we.signal, passive: !0 } + { signal: Me.signal, passive: !0 } ); - } catch (we) { - (D = console.debug) == null || D.call(console, we); + } catch (Me) { + (D = console.debug) == null || D.call(console, Me); } } else { try { (ee = (q = e._videoMetaAbort) == null ? void 0 : q.abort) == null || ee.call(q); - } catch (we) { - (ce = console.debug) == null || ce.call(console, we); + } catch (Me) { + (ae = console.debug) == null || ae.call(console, Me); } e._videoMetaAbort = null; try { - (U = (ue = e._videoFpsEventAbort) == null ? void 0 : ue.abort) == null || U.call(ue); - } catch (we) { - (Q = console.debug) == null || Q.call(console, we); + (B = (ue = e._videoFpsEventAbort) == null ? void 0 : ue.abort) == null || B.call(ue); + } catch (Me) { + (Q = console.debug) == null || Q.call(console, Me); } e._videoFpsEventAbort = null; } @@ -19438,7 +19465,7 @@ function QA({ } return { destroyPlayerBar: p, syncPlayerBar: b }; } -const Xa = "min(400px, 42vw)", Ou = `calc(${Xa} + 24px)`, zu = "mjr-viewer-modern-theme"; +const ka = "min(400px, 42vw)", Fu = `calc(${ka} + 24px)`, zu = "mjr-viewer-modern-theme"; function _A() { var e; try { @@ -19547,7 +19574,7 @@ function _A() { } .mjr-viewer-geninfo { - width: ${Xa} !important; + width: ${ka} !important; top: 16px !important; bottom: 16px !important; border-radius: 20px; @@ -19651,7 +19678,7 @@ const $A = 84, eW = 56, tW = 74, Ju = 0.45, nW = "0px 240px 0px 240px", iW = 350 return ""; } })(); -function us(e) { +function ms(e) { var t; try { e != null && e._mjrFilmstripReleaseTimer && (clearTimeout(e._mjrFilmstripReleaseTimer), e._mjrFilmstripReleaseTimer = null); @@ -19670,7 +19697,7 @@ function Tu(e) { (n = console.debug) == null || n.call(console, i); } } -function Mc(e) { +function Gc(e) { var t, n; if (e) try { @@ -19690,10 +19717,10 @@ function rb(e) { (n = console.debug) == null || n.call(console, i); } } -function Ul(e, { releaseSrc: t = !0 } = {}) { +function Bl(e, { releaseSrc: t = !0 } = {}) { var n, i; if (e) { - us(e), rb(e); + ms(e), rb(e); try { e._mjrFilmstripInView = !1; } catch (o) { @@ -19739,35 +19766,35 @@ function rW({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: i }) { const u = () => { try { return new IntersectionObserver( - (v) => { - var Y, F; + (j) => { + var V, O; const w = o.style.display !== "none", R = !document.hidden; - for (const N of v) { - const V = N.target; - if (!(V instanceof HTMLVideoElement)) continue; - const k = N.isIntersecting || N.intersectionRatio > 0; + for (const k of j) { + const Y = k.target; + if (!(Y instanceof HTMLVideoElement)) continue; + const N = k.isIntersecting || k.intersectionRatio > 0; try { - V._mjrFilmstripInView = k; + Y._mjrFilmstripInView = N; } catch (z) { - (Y = console.debug) == null || Y.call(console, z); + (V = console.debug) == null || V.call(console, z); } - if (k && (us(V), Tu(V)), k && N.intersectionRatio >= Ju && w && R ? Mc(V) : rb(V), !k) { - us(V); + if (N && (ms(Y), Tu(Y)), N && k.intersectionRatio >= Ju && w && R ? Gc(Y) : rb(Y), !N) { + ms(Y); try { - V._mjrFilmstripReleaseTimer = setTimeout(() => { + Y._mjrFilmstripReleaseTimer = setTimeout(() => { var z; try { - if (!V.isConnected) { - Ul(V, { releaseSrc: !0 }); + if (!Y.isConnected) { + Bl(Y, { releaseSrc: !0 }); return; } - V._mjrFilmstripInView || Ul(V, { releaseSrc: !0 }); - } catch (B) { - (z = console.debug) == null || z.call(console, B); + Y._mjrFilmstripInView || Bl(Y, { releaseSrc: !0 }); + } catch (T) { + (z = console.debug) == null || z.call(console, T); } }, iW); } catch (z) { - (F = console.debug) == null || F.call(console, z); + (O = console.debug) == null || O.call(console, z); } } } @@ -19781,63 +19808,63 @@ function rW({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: i }) { } catch { return null; } - }, I = (v) => { - var w, R, Y; - if (v) { + }, I = (j) => { + var w, R, V; + if (j) { try { - v._mjrFilmstripInView = !1; - } catch (F) { - (w = console.debug) == null || w.call(console, F); + j._mjrFilmstripInView = !1; + } catch (O) { + (w = console.debug) == null || w.call(console, O); } - c.add(v); + c.add(j); try { - a || (a = u()), (R = a == null ? void 0 : a.observe) == null || R.call(a, v); - } catch (F) { - (Y = console.debug) == null || Y.call(console, F); + a || (a = u()), (R = a == null ? void 0 : a.observe) == null || R.call(a, j); + } catch (O) { + (V = console.debug) == null || V.call(console, O); } } - }, y = ({ releaseSrc: v = !1 } = {}) => { + }, A = ({ releaseSrc: j = !1 } = {}) => { for (const w of Array.from(c)) - Ul(w, { releaseSrc: v }); - }, S = () => { - var v; + Bl(w, { releaseSrc: j }); + }, h = () => { + var j; for (const w of Array.from(c)) try { if (!(w != null && w._mjrFilmstripInView) || !(w != null && w.isConnected)) continue; - Tu(w), Mc(w); + Tu(w), Gc(w); } catch (R) { - (v = console.debug) == null || v.call(console, R); + (j = console.debug) == null || j.call(console, R); } - }, Z = ({ releaseSrc: v = !0 } = {}) => { + }, S = ({ releaseSrc: j = !0 } = {}) => { var w, R; try { (w = a == null ? void 0 : a.disconnect) == null || w.call(a); - } catch (Y) { - (R = console.debug) == null || R.call(console, Y); + } catch (V) { + (R = console.debug) == null || R.call(console, V); } - a = null, y({ releaseSrc: v }), c.clear(); - }, C = () => { - var v, w; + a = null, A({ releaseSrc: j }), c.clear(); + }, W = () => { + var j, w; try { - return !!((w = (v = window == null ? void 0 : window.matchMedia) == null ? void 0 : v.call(window, "(prefers-reduced-motion: reduce)")) != null && w.matches); + return !!((w = (j = window == null ? void 0 : window.matchMedia) == null ? void 0 : j.call(window, "(prefers-reduced-motion: reduce)")) != null && w.matches); } catch { return !1; } - }, g = (v, w = 1.08) => { - var R, Y, F, N; - if (!(!v || C())) { + }, g = (j, w = 1.08) => { + var R, V, O, k; + if (!(!j || W())) { try { - (Y = (R = v._mjrFilmstripBounce) == null ? void 0 : R.cancel) == null || Y.call(R); - } catch (V) { - (F = console.debug) == null || F.call(console, V); + (V = (R = j._mjrFilmstripBounce) == null ? void 0 : R.cancel) == null || V.call(R); + } catch (Y) { + (O = console.debug) == null || O.call(console, Y); } try { - if (typeof v.animate != "function") return; - const V = Math.min(1.18, w + 0.07), k = Math.max(1, w - 0.03), K = v.animate( + if (typeof j.animate != "function") return; + const Y = Math.min(1.18, w + 0.07), N = Math.max(1, w - 0.03), U = j.animate( [ { transform: `scale(${w})` }, - { transform: `scale(${V})` }, - { transform: `scale(${k})` }, + { transform: `scale(${Y})` }, + { transform: `scale(${N})` }, { transform: `scale(${w})` } ], { @@ -19845,20 +19872,20 @@ function rW({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: i }) { easing: "cubic-bezier(0.22, 0.9, 0.32, 1.15)" } ); - v._mjrFilmstripBounce = K, K.onfinish = () => { + j._mjrFilmstripBounce = U, U.onfinish = () => { var z; try { - v._mjrFilmstripBounce === K && (v._mjrFilmstripBounce = null); - } catch (B) { - (z = console.debug) == null || z.call(console, B); + j._mjrFilmstripBounce === U && (j._mjrFilmstripBounce = null); + } catch (T) { + (z = console.debug) == null || z.call(console, T); } }; - } catch (V) { - (N = console.debug) == null || N.call(console, V); + } catch (Y) { + (k = console.debug) == null || k.call(console, Y); } } - }, A = (v, w) => { - var N; + }, y = (j, w) => { + var k; const R = document.createElement("div"); R.className = "mjr-filmstrip-item", R.dataset.fidx = String(w), R.style.cssText = ` position: relative; @@ -19875,10 +19902,10 @@ function rW({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: i }) { transform: scale(1); transition: border-color 0.16s ease, opacity 0.16s ease, transform 0.18s ease, box-shadow 0.18s ease, filter 0.18s ease; `; - const Y = String((v == null ? void 0 : v.kind) || "").toLowerCase(), F = t(v); - if (F && Y === "video") { - const V = document.createElement("video"); - V.className = "mjr-filmstrip-thumb", V.muted = !0, V.loop = !0, V.autoplay = !0, V.controls = !1, V.playsInline = !0, V.preload = "none", V.dataset.lazySrc = F, V.style.cssText = ` + const V = String((j == null ? void 0 : j.kind) || "").toLowerCase(), O = t(j); + if (O && V === "video") { + const Y = document.createElement("video"); + Y.className = "mjr-filmstrip-thumb", Y.muted = !0, Y.loop = !0, Y.autoplay = !0, Y.controls = !1, Y.playsInline = !0, Y.preload = "none", Y.dataset.lazySrc = O, Y.style.cssText = ` width: 100%; height: 100%; object-fit: cover; @@ -19886,124 +19913,124 @@ function rW({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: i }) { pointer-events: none; `; try { - V.disablePictureInPicture = !0; - } catch (k) { - (N = console.debug) == null || N.call(console, k); + Y.disablePictureInPicture = !0; + } catch (N) { + (k = console.debug) == null || k.call(console, N); } - return V.addEventListener( + return Y.addEventListener( "loadeddata", () => { - var k; + var N; try { - V._mjrFilmstripInView && o.style.display !== "none" && !document.hidden && Mc(V); - } catch (K) { - (k = console.debug) == null || k.call(console, K); + Y._mjrFilmstripInView && o.style.display !== "none" && !document.hidden && Gc(Y); + } catch (U) { + (N = console.debug) == null || N.call(console, U); } }, { passive: !0 } - ), V.addEventListener( + ), Y.addEventListener( "error", () => { - var k; + var N; try { - V.style.display = "none"; - } catch (K) { - (k = console.debug) == null || k.call(console, K); + Y.style.display = "none"; + } catch (U) { + (N = console.debug) == null || N.call(console, U); } - Ul(V, { releaseSrc: !0 }), p(R); + Bl(Y, { releaseSrc: !0 }), p(R); }, { once: !0 } - ), R.appendChild(V), h(R), I(V), R; + ), R.appendChild(Y), C(R), I(Y), R; } - if (Y === "audio") { - const V = String( - (v == null ? void 0 : v.thumbnail_url) || (v == null ? void 0 : v.thumb_url) || oW || "" + if (V === "audio") { + const Y = String( + (j == null ? void 0 : j.thumbnail_url) || (j == null ? void 0 : j.thumb_url) || oW || "" ).trim(); - if (V) { - const k = document.createElement("img"); - k.className = "mjr-filmstrip-thumb", k.loading = "lazy", k.decoding = "async", k.src = V, k.alt = String((v == null ? void 0 : v.filename) || "Audio"), k.draggable = !1, k.style.cssText = ` + if (Y) { + const N = document.createElement("img"); + N.className = "mjr-filmstrip-thumb", N.loading = "lazy", N.decoding = "async", N.src = Y, N.alt = String((j == null ? void 0 : j.filename) || "Audio"), N.draggable = !1, N.style.cssText = ` width: 100%; height: 100%; object-fit: cover; display: block; pointer-events: none; - `, k.addEventListener( + `, N.addEventListener( "error", () => { - var K; + var U; try { - k.style.display = "none"; + N.style.display = "none"; } catch (z) { - (K = console.debug) == null || K.call(console, z); + (U = console.debug) == null || U.call(console, z); } b(R); }, { once: !0 } - ), R.appendChild(k); + ), R.appendChild(N); } else b(R); return f(R), R; } - if (Y === "model3d") { - const V = (() => { + if (V === "model3d") { + const Y = (() => { try { - const k = String((v == null ? void 0 : v.filename) || "").trim(); - if (!k) return ""; - const K = k + ".png", z = String((v == null ? void 0 : v.subfolder) || "").trim(), B = String((v == null ? void 0 : v.type) || "output").trim(); - return v != null && v.root_id ? t({ ...v, filename: K, kind: "image" }) : ul(K, z || null, B); + const N = String((j == null ? void 0 : j.filename) || "").trim(); + if (!N) return ""; + const U = N + ".png", z = String((j == null ? void 0 : j.subfolder) || "").trim(), T = String((j == null ? void 0 : j.type) || "output").trim(); + return j != null && j.root_id ? t({ ...j, filename: U, kind: "image" }) : ul(U, z || null, T); } catch { return ""; } })(); - if (V) { - const k = document.createElement("img"); - k.className = "mjr-filmstrip-thumb", k.loading = "lazy", k.decoding = "async", k.src = V, k.alt = String((v == null ? void 0 : v.filename) || "3D Model"), k.draggable = !1, k.style.cssText = ` + if (Y) { + const N = document.createElement("img"); + N.className = "mjr-filmstrip-thumb", N.loading = "lazy", N.decoding = "async", N.src = Y, N.alt = String((j == null ? void 0 : j.filename) || "3D Model"), N.draggable = !1, N.style.cssText = ` width: 100%; height: 100%; object-fit: cover; display: block; pointer-events: none; - `, k.addEventListener( + `, N.addEventListener( "error", () => { - var K; + var U; try { - k.style.display = "none"; + N.style.display = "none"; } catch (z) { - (K = console.debug) == null || K.call(console, z); + (U = console.debug) == null || U.call(console, z); } G(R); }, { once: !0 } - ), R.appendChild(k); + ), R.appendChild(N); } else G(R); - return W(R), R; + return Z(R), R; } - if (F) { - const V = document.createElement("img"); - return V.className = "mjr-filmstrip-thumb", V.loading = "lazy", V.decoding = "async", V.src = F, V.style.cssText = ` + if (O) { + const Y = document.createElement("img"); + return Y.className = "mjr-filmstrip-thumb", Y.loading = "lazy", Y.decoding = "async", Y.src = O, Y.style.cssText = ` width: 100%; height: 100%; object-fit: cover; display: block; pointer-events: none; - `, V.addEventListener( + `, Y.addEventListener( "error", () => { - var k; + var N; try { - V.style.display = "none"; - } catch (K) { - (k = console.debug) == null || k.call(console, K); + Y.style.display = "none"; + } catch (U) { + (N = console.debug) == null || N.call(console, U); } }, { once: !0 } - ), R.appendChild(V), R; + ), R.appendChild(Y), R; } return L(R), R; }; - function p(v) { + function p(j) { var R; const w = document.createElement("div"); w.style.cssText = ` @@ -20015,12 +20042,12 @@ function rW({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: i }) { letter-spacing: 0.04em; `, w.textContent = "VIDEO"; try { - v.appendChild(w); - } catch (Y) { - (R = console.debug) == null || R.call(console, Y); + j.appendChild(w); + } catch (V) { + (R = console.debug) == null || R.call(console, V); } } - function b(v) { + function b(j) { var R; const w = document.createElement("div"); w.style.cssText = ` @@ -20032,12 +20059,12 @@ function rW({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: i }) { letter-spacing: 0.04em; `, w.textContent = "AUDIO"; try { - v.appendChild(w); - } catch (Y) { - (R = console.debug) == null || R.call(console, Y); + j.appendChild(w); + } catch (V) { + (R = console.debug) == null || R.call(console, V); } } - function L(v) { + function L(j) { var R; const w = document.createElement("div"); w.style.cssText = ` @@ -20047,12 +20074,12 @@ function rW({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: i }) { pointer-events: none; `, w.textContent = "?"; try { - v.appendChild(w); - } catch (Y) { - (R = console.debug) == null || R.call(console, Y); + j.appendChild(w); + } catch (V) { + (R = console.debug) == null || R.call(console, V); } } - function h(v) { + function C(j) { const w = document.createElement("div"); w.style.cssText = ` position: absolute; bottom: 2px; right: 2px; @@ -20061,9 +20088,9 @@ function rW({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: i }) { padding: 2px 3px; border-radius: 2px; pointer-events: none; letter-spacing: 0.02em; - `, w.textContent = "VID", v.appendChild(w); + `, w.textContent = "VID", j.appendChild(w); } - function G(v) { + function G(j) { var R; const w = document.createElement("div"); w.style.cssText = ` @@ -20075,12 +20102,12 @@ function rW({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: i }) { letter-spacing: 0.04em; `, w.textContent = "3D"; try { - v.appendChild(w); - } catch (Y) { - (R = console.debug) == null || R.call(console, Y); + j.appendChild(w); + } catch (V) { + (R = console.debug) == null || R.call(console, V); } } - function W(v) { + function Z(j) { const w = document.createElement("div"); w.style.cssText = ` position: absolute; bottom: 2px; right: 2px; @@ -20090,9 +20117,9 @@ function rW({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: i }) { pointer-events: none; letter-spacing: 0.02em; font-weight: 700; - `, w.textContent = "3D", v.appendChild(w); + `, w.textContent = "3D", j.appendChild(w); } - function f(v) { + function f(j) { const w = document.createElement("div"); w.style.cssText = ` position: absolute; bottom: 2px; right: 2px; @@ -20101,70 +20128,70 @@ function rW({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: i }) { padding: 2px 3px; border-radius: 2px; pointer-events: none; letter-spacing: 0.02em; - `, w.textContent = "AUD", v.appendChild(w); + `, w.textContent = "AUD", j.appendChild(w); } const X = () => { - Z({ releaseSrc: !0 }), r.innerHTML = "", l = []; - const v = Array.isArray(e.assets) ? e.assets : []; - if (v.length < 2) { + S({ releaseSrc: !0 }), r.innerHTML = "", l = []; + const j = Array.isArray(e.assets) ? e.assets : []; + if (j.length < 2) { o.style.display = "none"; return; } o.style.display = ""; - for (let w = 0; w < v.length; w++) { - const R = A(v[w], w); + for (let w = 0; w < j.length; w++) { + const R = y(j[w], w); r.appendChild(R), l.push(R); } - T(!1); - }, x = (v = {}) => { - const w = v.isSingle !== !1, R = i != null && e.compareAsset != null, Y = Array.isArray(e.assets) ? e.assets : []; - if (!w && !R || Y.length < 2) { - o.style.display = "none", y({ releaseSrc: !1 }); + K(!1); + }, x = (j = {}) => { + const w = j.isSingle !== !1, R = i != null && e.compareAsset != null, V = Array.isArray(e.assets) ? e.assets : []; + if (!w && !R || V.length < 2) { + o.style.display = "none", A({ releaseSrc: !1 }); return; } - o.style.display = "", S(), T(!0); + o.style.display = "", h(), K(!0); }; - function T(v) { - var F; + function K(j) { + var O; const w = Number(e.currentIndex) || 0; let R = -1; i && e.compareAsset != null && (R = (Array.isArray(e.assets) ? e.assets : []).indexOf(e.compareAsset)); - for (let N = 0; N < l.length; N++) - N === w ? (l[N].style.borderColor = "rgba(255, 255, 255, 0.98)", l[N].style.opacity = "1", l[N].style.transform = "scale(1.08)", l[N].style.filter = "saturate(1.12) brightness(1.08)", l[N].style.boxShadow = "0 0 0 1px rgba(255,255,255,0.45), 0 0 18px rgba(160,220,255,0.38), 0 8px 16px rgba(0,0,0,0.38)") : N === R ? (l[N].style.borderColor = "rgba(120, 186, 255, 0.98)", l[N].style.opacity = "0.96", l[N].style.transform = "scale(1.04)", l[N].style.filter = "saturate(1.07) brightness(1.03)", l[N].style.boxShadow = "0 0 0 1px rgba(120,186,255,0.38), 0 0 14px rgba(120,186,255,0.32), 0 6px 14px rgba(0,0,0,0.32)") : (l[N].style.borderColor = "transparent", l[N].style.opacity = "0.5", l[N].style.transform = "scale(1)", l[N].style.filter = "none", l[N].style.boxShadow = "none"); + for (let k = 0; k < l.length; k++) + k === w ? (l[k].style.borderColor = "rgba(255, 255, 255, 0.98)", l[k].style.opacity = "1", l[k].style.transform = "scale(1.08)", l[k].style.filter = "saturate(1.12) brightness(1.08)", l[k].style.boxShadow = "0 0 0 1px rgba(255,255,255,0.45), 0 0 18px rgba(160,220,255,0.38), 0 8px 16px rgba(0,0,0,0.38)") : k === R ? (l[k].style.borderColor = "rgba(120, 186, 255, 0.98)", l[k].style.opacity = "0.96", l[k].style.transform = "scale(1.04)", l[k].style.filter = "saturate(1.07) brightness(1.03)", l[k].style.boxShadow = "0 0 0 1px rgba(120,186,255,0.38), 0 0 14px rgba(120,186,255,0.32), 0 6px 14px rgba(0,0,0,0.32)") : (l[k].style.borderColor = "transparent", l[k].style.opacity = "0.5", l[k].style.transform = "scale(1)", l[k].style.filter = "none", l[k].style.boxShadow = "none"); w !== s && l[w] && g(l[w], 1.08), R >= 0 && R !== d && l[R] && g(l[R], 1.04), s = w, d = R; - const Y = l[w]; - if (Y) + const V = l[w]; + if (V) try { - Y.scrollIntoView({ - behavior: v ? "smooth" : "instant", + V.scrollIntoView({ + behavior: j ? "smooth" : "instant", block: "nearest", inline: "center" }); } catch { try { - const N = Y.offsetLeft - o.clientWidth / 2 + Y.offsetWidth / 2; + const k = V.offsetLeft - o.clientWidth / 2 + V.offsetWidth / 2; o.scrollTo({ - left: Math.max(0, N), - behavior: v ? "smooth" : "instant" + left: Math.max(0, k), + behavior: j ? "smooth" : "instant" }); - } catch (N) { - (F = console.debug) == null || F.call(console, N); + } catch (k) { + (O = console.debug) == null || O.call(console, k); } } } return o.addEventListener( "click", - (v) => { + (j) => { var w; try { - v.stopPropagation(); - const R = v.target.closest("[data-fidx]"); + j.stopPropagation(); + const R = j.target.closest("[data-fidx]"); if (!R) return; - const Y = Number(R.dataset.fidx); - if (!Number.isFinite(Y) || Y < 0) return; - const F = Array.isArray(e.assets) ? e.assets : []; - if (Y >= F.length) return; - i && (v.ctrlKey || v.metaKey) ? i(Y) : n(Y); + const V = Number(R.dataset.fidx); + if (!Number.isFinite(V) || V < 0) return; + const O = Array.isArray(e.assets) ? e.assets : []; + if (V >= O.length) return; + i && (j.ctrlKey || j.metaKey) ? i(V) : n(V); } catch (R) { (w = console.debug) == null || w.call(console, R); } @@ -20172,10 +20199,10 @@ function rW({ state: e, buildAssetViewURL: t, onNavigate: n, onCompare: i }) { !0 ), o.addEventListener( "wheel", - (v) => { + (j) => { var w; try { - v.stopPropagation(); + j.stopPropagation(); } catch (R) { (w = console.debug) == null || w.call(console, R); } @@ -20292,15 +20319,15 @@ function aW({ background: rgba(9,12,16,0.72); transform: translate3d(0,0,0); `; - const y = document.createElement("canvas"); - y.width = 120, y.height = 120, y.style.cssText = "width:100%; height:100%; display:block; image-rendering: pixelated;", I.appendChild(y), s.appendChild(d), s.appendChild(u), s.appendChild(I), r.appendChild(s); - const S = document.createElement("div"); - S.className = "mjr-viewer-geninfo mjr-viewer-geninfo--right", S.style.cssText = ` + const A = document.createElement("canvas"); + A.width = 120, A.height = 120, A.style.cssText = "width:100%; height:100%; display:block; image-rendering: pixelated;", I.appendChild(A), s.appendChild(d), s.appendChild(u), s.appendChild(I), r.appendChild(s); + const h = document.createElement("div"); + h.className = "mjr-viewer-geninfo mjr-viewer-geninfo--right", h.style.cssText = ` position: absolute; top: 16px; right: 16px; bottom: 16px; - width: ${Xa}; + width: ${ka}; display: none; flex-direction: column; overflow: hidden; @@ -20310,8 +20337,8 @@ function aW({ backdrop-filter: blur(10px); z-index: 10001; `; - const Z = document.createElement("div"); - Z.style.cssText = ` + const S = document.createElement("div"); + S.style.cssText = ` display: flex; align-items: center; justify-content: space-between; @@ -20320,22 +20347,22 @@ function aW({ border-bottom: 1px solid rgba(255,255,255,0.10); color: rgba(255,255,255,0.92); `; - const C = document.createElement("div"); - C.textContent = "Generation Info", C.style.cssText = "font-size: 13px; font-weight: 600;", Z.appendChild(C); + const W = document.createElement("div"); + W.textContent = "Generation Info", W.style.cssText = "font-size: 13px; font-weight: 600;", S.appendChild(W); const g = document.createElement("div"); g.style.cssText = ` flex: 1; overflow: auto; padding: 14px; color: rgba(255,255,255,0.92); - `, S.appendChild(Z), S.appendChild(g); - const A = document.createElement("div"); - A.className = "mjr-viewer-geninfo mjr-viewer-geninfo--left", A.style.cssText = ` + `, h.appendChild(S), h.appendChild(g); + const y = document.createElement("div"); + y.className = "mjr-viewer-geninfo mjr-viewer-geninfo--left", y.style.cssText = ` position: absolute; top: 16px; left: 16px; bottom: 16px; - width: ${Xa}; + width: ${ka}; display: none; flex-direction: column; overflow: hidden; @@ -20345,7 +20372,7 @@ function aW({ backdrop-filter: blur(10px); z-index: 10001; `; - const p = Z.cloneNode(!0); + const p = S.cloneNode(!0); p.replaceChildren(); const b = document.createElement("div"); b.textContent = "Generation Info (A)", b.style.cssText = "font-size: 13px; font-weight: 600;", p.appendChild(b); @@ -20355,9 +20382,9 @@ function aW({ overflow: auto; padding: 14px; color: rgba(255,255,255,0.92); - `, A.appendChild(p), A.appendChild(L), o.appendChild(r); - const h = document.createElement("div"); - h.className = "mjr-viewer-footer", h.style.cssText = ` + `, y.appendChild(p), y.appendChild(L), o.appendChild(r); + const C = document.createElement("div"); + C.className = "mjr-viewer-footer", C.style.cssText = ` display: flex; justify-content: space-between; align-items: center; @@ -20370,15 +20397,15 @@ function aW({ `; const G = fl("<", "Previous (Left Arrow)"); G.classList.add("mjr-viewer-nav-btn", "mjr-viewer-nav-btn--prev"), G.style.fontSize = "24px"; - const W = document.createElement("span"); - W.className = "mjr-viewer-index", W.style.cssText = "font-size: 14px; font-weight: 500;"; + const Z = document.createElement("span"); + Z.className = "mjr-viewer-index", Z.style.cssText = "font-size: 14px; font-weight: 500;"; const f = fl(">", "Next (Right Arrow)"); f.classList.add("mjr-viewer-nav-btn", "mjr-viewer-nav-btn--next"), f.style.fontSize = "24px"; const X = document.createElement("div"); - X.className = "mjr-viewer-nav", X.style.cssText = "display:flex; align-items:center; gap:20px;", X.appendChild(G), X.appendChild(W), X.appendChild(f); + X.className = "mjr-viewer-nav", X.style.cssText = "display:flex; align-items:center; gap:20px;", X.appendChild(G), X.appendChild(Z), X.appendChild(f); const x = document.createElement("div"); - x.className = "mjr-viewer-playerbar", x.style.cssText = "display:none; width: 100%;", h.appendChild(X), h.appendChild(x); - const T = rW({ + x.className = "mjr-viewer-playerbar", x.style.cssText = "display:none; width: 100%;", C.appendChild(X), C.appendChild(x); + const K = rW({ state: e, buildAssetViewURL: t, onNavigate: n, @@ -20394,20 +20421,20 @@ function aW({ gridCanvas: d, probeTooltip: u, loupeWrap: I, - loupeCanvas: y, - genInfoOverlay: S, - genInfoTitle: C, + loupeCanvas: A, + genInfoOverlay: h, + genInfoTitle: W, genInfoBody: g, - genInfoOverlayLeft: A, + genInfoOverlayLeft: y, genInfoTitleLeft: b, genInfoBodyLeft: L, - footer: h, + footer: C, prevBtn: G, - indexInfo: W, + indexInfo: Z, nextBtn: f, navBar: X, playerBarHost: x, - filmstrip: T + filmstrip: K }; } function li(e, t) { @@ -20465,20 +20492,20 @@ function sW({ overlay: e, requestClose: t }) { (n = console.debug) == null || n.call(console, i); } } -let ko = null, Xo = null, ti = null, No = null, vi = null, Na = null; +let Xo = null, No = null, ti = null, ko = null, vi = null, Ra = null; function dW() { - ko || import("./abCompare-BmccB9jW.js").then((e) => { - ko = e; - }), Xo || import("./sideBySide-DsvoFFQr.js").then((e) => { + Xo || import("./abCompare-BmccB9jW.js").then((e) => { Xo = e; - }), ti || import("./model3dRenderer-BJokSmes.js").then((e) => { - ti = e; - }), No || import("./scopes-B0qS9yvv.js").then((e) => { + }), No || import("./sideBySide-Cxerzz-Z.js").then((e) => { No = e; - }), vi || import("./genInfo-CgFRoaPM.js").then((e) => { + }), ti || import("./model3dRenderer-B8p2IdLl.js").then((e) => { + ti = e; + }), ko || import("./scopes-BfKBxPqI.js").then((e) => { + ko = e; + }), vi || import("./genInfo-cg-2k0dV.js").then((e) => { vi = e; - }), Na || import("./frameExport-D5sexOhA.js").then((e) => { - Na = e; + }), Ra || import("./frameExport-D5sexOhA.js").then((e) => { + Ra = e; }); } const jt = { @@ -20487,15 +20514,15 @@ const jt = { SIDE_BY_SIDE: "sidebyside" }; function uW() { - var St, Yt, Gt, Qt, Yn, wn, xn, en, Vn, pn, Nn; + var gt, Wt, Vt, _t, Xt, tn, Ln, Mn, Xn, rn, vn; dW(), _A(); const e = lW(), t = iA(e), n = t.unsubs || [], i = TZ(); i.mode = jt.SINGLE; try { - const ae = tA(); - ae && typeof ae == "object" && (typeof ae.analysisMode == "string" && (i.analysisMode = ae.analysisMode || "none"), typeof ae.loupeEnabled == "boolean" && (i.loupeEnabled = ae.loupeEnabled), typeof ae.probeEnabled == "boolean" && (i.probeEnabled = ae.probeEnabled), typeof ae.hudEnabled == "boolean" && (i.hudEnabled = ae.hudEnabled), typeof ae.genInfoOpen == "boolean" && (i.genInfoOpen = ae.genInfoOpen), typeof ae.audioVisualizerMode == "string" && (i.audioVisualizerMode = ae.audioVisualizerMode || "artistic"), typeof ae.abWipePercent == "number" && Number.isFinite(ae.abWipePercent) && ae.abWipePercent >= 0 && ae.abWipePercent <= 100 && (i._abWipePercent = ae.abWipePercent)); - } catch (ae) { - (St = console.debug) == null || St.call(console, ae); + const re = tA(); + re && typeof re == "object" && (typeof re.analysisMode == "string" && (i.analysisMode = re.analysisMode || "none"), typeof re.loupeEnabled == "boolean" && (i.loupeEnabled = re.loupeEnabled), typeof re.probeEnabled == "boolean" && (i.probeEnabled = re.probeEnabled), typeof re.hudEnabled == "boolean" && (i.hudEnabled = re.hudEnabled), typeof re.genInfoOpen == "boolean" && (i.genInfoOpen = re.genInfoOpen), typeof re.audioVisualizerMode == "string" && (i.audioVisualizerMode = re.audioVisualizerMode || "artistic"), typeof re.abWipePercent == "number" && Number.isFinite(re.abWipePercent) && re.abWipePercent >= 0 && re.abWipePercent <= 100 && (i._abWipePercent = re.abWipePercent)); + } catch (re) { + (gt = console.debug) == null || gt.call(console, re); } const o = /* @__PURE__ */ new Set([ "png", @@ -20513,121 +20540,121 @@ function uW() { ]); let r = null, l = null; function a() { - var ae; + var re; try { - return ((ae = r == null ? void 0 : r.mediaTransform) == null ? void 0 : ae.call(r)) || ""; + return ((re = r == null ? void 0 : r.mediaTransform) == null ? void 0 : re.call(r)) || ""; } catch { return ""; } } function c() { - var ae, he; + var re, Ie; try { - (ae = r == null ? void 0 : r.clampPanToBounds) == null || ae.call(r); - } catch (ve) { - (he = console.debug) == null || he.call(console, ve); + (re = r == null ? void 0 : r.clampPanToBounds) == null || re.call(r); + } catch (Ge) { + (Ie = console.debug) == null || Ie.call(console, Ge); } } function s() { - var ae, he; + var re, Ie; try { - (ae = r == null ? void 0 : r.applyTransform) == null || ae.call(r); - } catch (ve) { - (he = console.debug) == null || he.call(console, ve); + (re = r == null ? void 0 : r.applyTransform) == null || re.call(r); + } catch (Ge) { + (Ie = console.debug) == null || Ie.call(console, Ge); } } - function d(ae, he) { - var ve, Fe; + function d(re, Ie) { + var Ge, Je; try { - (ve = r == null ? void 0 : r.setZoom) == null || ve.call(r, ae, he); + (Ge = r == null ? void 0 : r.setZoom) == null || Ge.call(r, re, Ie); } catch (_e) { - (Fe = console.debug) == null || Fe.call(console, _e); + (Je = console.debug) == null || Je.call(console, _e); } } function u() { - var ae, he; + var re, Ie; try { - (ae = r == null ? void 0 : r.updatePanCursor) == null || ae.call(r); - } catch (ve) { - (he = console.debug) == null || he.call(console, ve); + (re = r == null ? void 0 : r.updatePanCursor) == null || re.call(r); + } catch (Ge) { + (Ie = console.debug) == null || Ie.call(console, Ge); } } function I() { - var ae; + var re; try { - return ((ae = r == null ? void 0 : r.getPrimaryMedia) == null ? void 0 : ae.call(r)) || null; + return ((re = r == null ? void 0 : r.getPrimaryMedia) == null ? void 0 : re.call(r)) || null; } catch { return null; } } - function y(ae) { - var he; + function A(re) { + var Ie; try { - return ((he = r == null ? void 0 : r.getMediaNaturalSize) == null ? void 0 : he.call(r, ae)) || { w: 0, h: 0 }; + return ((Ie = r == null ? void 0 : r.getMediaNaturalSize) == null ? void 0 : Ie.call(r, re)) || { w: 0, h: 0 }; } catch { return { w: 0, h: 0 }; } } + function h() { + var re; + try { + return ((re = r == null ? void 0 : r.getViewportRect) == null ? void 0 : re.call(r)) || null; + } catch { + return null; + } + } function S() { - var ae; + var re; try { - return ((ae = r == null ? void 0 : r.getViewportRect) == null ? void 0 : ae.call(r)) || null; + return ((re = r == null ? void 0 : r.computeOneToOneZoom) == null ? void 0 : re.call(r)) ?? null; } catch { return null; } } - function Z() { - var ae; + function W() { + var re, Ie; try { - return ((ae = r == null ? void 0 : r.computeOneToOneZoom) == null ? void 0 : ae.call(r)) ?? null; - } catch { - return null; + (re = r == null ? void 0 : r.updateMediaNaturalSize) == null || re.call(r); + } catch (Ge) { + (Ie = console.debug) == null || Ie.call(console, Ge); } } - function C() { - var ae, he; + function g(re, Ie) { + var Ge; try { - (ae = r == null ? void 0 : r.updateMediaNaturalSize) == null || ae.call(r); - } catch (ve) { - (he = console.debug) == null || he.call(console, ve); - } - } - function g(ae, he) { - var ve; - try { - return ((ve = l == null ? void 0 : l.createMediaElement) == null ? void 0 : ve.call(l, ae, he)) || document.createElement("div"); + return ((Ge = l == null ? void 0 : l.createMediaElement) == null ? void 0 : Ge.call(l, re, Ie)) || document.createElement("div"); } catch { return document.createElement("div"); } } - function A(ae, he) { - var ve; + function y(re, Ie) { + var Ge; try { - return ((ve = l == null ? void 0 : l.createCompareMediaElement) == null ? void 0 : ve.call(l, ae, he)) || document.createElement("div"); + return ((Ge = l == null ? void 0 : l.createCompareMediaElement) == null ? void 0 : Ge.call(l, re, Ie)) || document.createElement("div"); } catch { return document.createElement("div"); } } function p() { - var he, ve, Fe; - let ae = !1; + var Ie, Ge, Je; + let re = !1; try { - const _e = i.mode === jt.AB_COMPARE ? B : i.mode === jt.SIDE_BY_SIDE ? J : z, et = Array.from(((he = _e == null ? void 0 : _e.querySelectorAll) == null ? void 0 : he.call(_e, ".mjr-viewer-audio-viz")) || []); - for (const tt of et) + const _e = i.mode === jt.AB_COMPARE ? T : i.mode === jt.SIDE_BY_SIDE ? J : z, Qe = Array.from(((Ie = _e == null ? void 0 : _e.querySelectorAll) == null ? void 0 : Ie.call(_e, ".mjr-viewer-audio-viz")) || []); + for (const et of Qe) try { - const st = (tt == null ? void 0 : tt._mjrProc) || null; - if (!(st != null && st.setMode)) continue; - st.setMode(i.audioVisualizerMode), ae = !0; - } catch (st) { - (ve = console.debug) == null || ve.call(console, st); + const mt = (et == null ? void 0 : et._mjrProc) || null; + if (!(mt != null && mt.setMode)) continue; + mt.setMode(i.audioVisualizerMode), re = !0; + } catch (mt) { + (Ge = console.debug) == null || Ge.call(console, mt); } } catch (_e) { - (Fe = console.debug) == null || Fe.call(console, _e); + (Je = console.debug) == null || Je.call(console, _e); } - return ae; + return re; } - let b = null, L = () => He(), h = document.createElement("div"); - h.className = "mjr-viewer-header", h.style.cssText = ` + let b = null, L = () => fe(), C = document.createElement("div"); + C.className = "mjr-viewer-header", C.style.cssText = ` display: flex; flex-direction: column; gap: 8px; @@ -20639,555 +20666,555 @@ function uW() { `; let G = document.createElement("span"); G.className = "mjr-viewer-filename", G.style.cssText = "font-size: 14px; font-weight: 500; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;"; - let W = document.createElement("div"); - W.className = "mjr-viewer-badges", W.style.cssText = "display:flex; gap:8px; align-items:center; flex-wrap:wrap;"; - let f = null, X = null, x = null, T = null, v = null, w = null, R = null, Y = null, F = null, N = null, V = null; + let Z = document.createElement("div"); + Z.className = "mjr-viewer-badges", Z.style.cssText = "display:flex; gap:8px; align-items:center; flex-wrap:wrap;"; + let f = null, X = null, x = null, K = null, j = null, w = null, R = null, V = null, O = null, k = null, Y = null; try { - h.appendChild(G), h.appendChild(W); - } catch (ae) { - (Yt = console.debug) == null || Yt.call(console, ae); + C.appendChild(G), C.appendChild(Z); + } catch (re) { + (Wt = console.debug) == null || Wt.call(console, re); } try { b = cA({ VIEWER_MODES: jt, state: i, lifecycle: t, - getCanAB: () => nt(), + getCanAB: () => lt(), onToggleFullscreen: () => { - var ae, he, ve; + var re, Ie, Ge; try { if (document.fullscreenElement) try { document.exitFullscreen(); - } catch (Fe) { - (he = console.debug) == null || he.call(console, Fe); + } catch (Je) { + (Ie = console.debug) == null || Ie.call(console, Je); } else try { e.requestFullscreen(); - } catch (Fe) { - (ae = console.debug) == null || ae.call(console, Fe); + } catch (Je) { + (re = console.debug) == null || re.call(console, Je); } - } catch (Fe) { - (ve = console.debug) == null || ve.call(console, Fe); + } catch (Je) { + (Ge = console.debug) == null || Ge.call(console, Je); } }, // Close button should fully tear down the viewer (remove overlay + listeners) to avoid leaks/ghost UI. onClose: () => L == null ? void 0 : L(), - onMode: (ae) => { - var he, ve, Fe; + onMode: (re) => { + var Ie, Ge, Je; try { - if (ae === jt.AB_COMPARE && !nt() || ae === jt.SIDE_BY_SIDE && !ut()) return; - i.mode = ae, dt(); + if (re === jt.AB_COMPARE && !lt() || re === jt.SIDE_BY_SIDE && !wt()) return; + i.mode = re, tt(); try { - (he = b == null ? void 0 : b.syncToolsUIFromState) == null || he.call(b); + (Ie = b == null ? void 0 : b.syncToolsUIFromState) == null || Ie.call(b); } catch (_e) { - (ve = console.debug) == null || ve.call(console, _e); + (Ge = console.debug) == null || Ge.call(console, _e); } } catch (_e) { - (Fe = console.debug) == null || Fe.call(console, _e); + (Je = console.debug) == null || Je.call(console, _e); } }, onZoomIn: () => { - var ae; + var re; try { d((Number(i.zoom) || 1) + 0.25, { clientX: i._lastPointerX, clientY: i._lastPointerY }); - } catch (he) { - (ae = console.debug) == null || ae.call(console, he); + } catch (Ie) { + (re = console.debug) == null || re.call(console, Ie); } }, onZoomOut: () => { - var ae; + var re; try { d((Number(i.zoom) || 1) - 0.25, { clientX: i._lastPointerX, clientY: i._lastPointerY }); - } catch (he) { - (ae = console.debug) == null || ae.call(console, he); + } catch (Ie) { + (re = console.debug) == null || re.call(console, Ie); } }, onZoomReset: () => { - var ae; + var re; try { d(1); - } catch (he) { - (ae = console.debug) == null || ae.call(console, he); + } catch (Ie) { + (re = console.debug) == null || re.call(console, Ie); } }, onZoomOneToOne: () => { - var ae, he; + var re, Ie; try { - const ve = () => { - const Fe = Z(); - if (Fe == null) return !1; - const _e = Math.abs((Number(i.zoom) || 1) - Fe) < 0.01; - return d(_e ? 1 : Fe, { + const Ge = () => { + const Je = S(); + if (Je == null) return !1; + const _e = Math.abs((Number(i.zoom) || 1) - Je) < 0.01; + return d(_e ? 1 : Je, { clientX: i._lastPointerX, clientY: i._lastPointerY }), !0; }; - if (ve()) return; + if (Ge()) return; try { requestAnimationFrame(() => { - var Fe, _e; + var Je, _e; try { - C(); - } catch (et) { - (Fe = console.debug) == null || Fe.call(console, et); + W(); + } catch (Qe) { + (Je = console.debug) == null || Je.call(console, Qe); } try { - ve(); - } catch (et) { - (_e = console.debug) == null || _e.call(console, et); + Ge(); + } catch (Qe) { + (_e = console.debug) == null || _e.call(console, Qe); } }); - } catch (Fe) { - (ae = console.debug) == null || ae.call(console, Fe); + } catch (Je) { + (re = console.debug) == null || re.call(console, Je); } - } catch (ve) { - (he = console.debug) == null || he.call(console, ve); + } catch (Ge) { + (Ie = console.debug) == null || Ie.call(console, Ge); } }, onCompareModeChanged: () => { - var ae; + var re; try { - i.mode === jt.AB_COMPARE && (Re(), yt()); - } catch (he) { - (ae = console.debug) == null || ae.call(console, he); + i.mode === jt.AB_COMPARE && (Oe(), dt()); + } catch (Ie) { + (re = console.debug) == null || re.call(console, Ie); } }, onExportFrame: () => { - var ae; + var re; try { Ee({ toClipboard: !1 }); - } catch (he) { - (ae = console.debug) == null || ae.call(console, he); + } catch (Ie) { + (re = console.debug) == null || re.call(console, Ie); } }, onCopyFrame: () => { - var ae; + var re; try { Ee({ toClipboard: !0 }); - } catch (he) { - (ae = console.debug) == null || ae.call(console, he); + } catch (Ie) { + (re = console.debug) == null || re.call(console, Ie); } }, onAudioVizModeChanged: () => { - var ae; + var re; try { - const he = i.assets[i.currentIndex]; - if (String((he == null ? void 0 : he.kind) || "") !== "audio") return; - p() || (Re(), yt()); - } catch (he) { - (ae = console.debug) == null || ae.call(console, he); + const Ie = i.assets[i.currentIndex]; + if (String((Ie == null ? void 0 : Ie.kind) || "") !== "audio") return; + p() || (Oe(), dt()); + } catch (Ie) { + (re = console.debug) == null || re.call(console, Ie); } }, onToolsChanged: () => { - var ae, he, ve, Fe, _e, et, tt, st, Vt, Bt, Rt; + var re, Ie, Ge, Je, _e, Qe, et, mt, Lt, Tt, Ot; try { - (ae = b == null ? void 0 : b.syncToolsUIFromState) == null || ae.call(b); + (re = b == null ? void 0 : b.syncToolsUIFromState) == null || re.call(b); } catch (Ct) { - (he = console.debug) == null || he.call(console, Ct); + (Ie = console.debug) == null || Ie.call(console, Ct); } try { nA(i); } catch (Ct) { - (ve = console.debug) == null || ve.call(console, Ct); + (Ge = console.debug) == null || Ge.call(console, Ct); } try { - It(); + at(); } catch (Ct) { - (Fe = console.debug) == null || Fe.call(console, Ct); + (Je = console.debug) == null || Je.call(console, Ct); } try { if (i.mode === jt.AB_COMPARE) { const Ct = String(i.abCompareMode || "wipe"); - Ct !== "wipe" && Ct !== "wipeV" && ((_e = B == null ? void 0 : B._mjrDiffRequest) == null || _e.call(B)); + Ct !== "wipe" && Ct !== "wipeV" && ((_e = T == null ? void 0 : T._mjrDiffRequest) == null || _e.call(T)); } + } catch (Ct) { + (Qe = console.debug) == null || Qe.call(console, Ct); + } + try { + i.probeEnabled || (E.style.display = "none"); } catch (Ct) { (et = console.debug) == null || et.call(console, Ct); } - try { - i.probeEnabled || (H.style.display = "none"); - } catch (Ct) { - (tt = console.debug) == null || tt.call(console, Ct); - } try { i.loupeEnabled || ($.style.display = "none"); } catch (Ct) { - (st = console.debug) == null || st.call(console, Ct); + (mt = console.debug) == null || mt.call(console, Ct); } try { - Oe(); + rt(); } catch (Ct) { - (Vt = console.debug) == null || Vt.call(console, Ct); + (Lt = console.debug) == null || Lt.call(console, Ct); } try { - pe == null || pe(); + ye == null || ye(); } catch (Ct) { - (Bt = console.debug) == null || Bt.call(console, Ct); + (Tt = console.debug) == null || Tt.call(console, Ct); } try { - Ot(); + Pt(); } catch (Ct) { - (Rt = console.debug) == null || Rt.call(console, Ct); + (Ot = console.debug) == null || Ot.call(console, Ct); } } - }), b != null && b.headerEl && (h = b.headerEl), b != null && b.headerTopEl && (V = b.headerTopEl), b != null && b.filenameEl && (G = b.filenameEl), b != null && b.badgesBarEl && (W = b.badgesBarEl), b != null && b.filenameRightEl && (f = b.filenameRightEl), b != null && b.badgesBarRightEl && (X = b.badgesBarRightEl), b != null && b.leftAreaEl && (v = b.leftAreaEl), b != null && b.leftMetaEl && (w = b.leftMetaEl), b != null && b.centerAreaEl && (R = b.centerAreaEl), b != null && b.rightMetaEl && (x = b.rightMetaEl), b != null && b.rightAreaEl && (T = b.rightAreaEl), b != null && b.titleLineEl && (Y = b.titleLineEl), b != null && b.titleWrapEl && (F = b.titleWrapEl), b != null && b.modeButtonsEl && (N = b.modeButtonsEl); - } catch (ae) { - (Gt = console.debug) == null || Gt.call(console, ae); + }), b != null && b.headerEl && (C = b.headerEl), b != null && b.headerTopEl && (Y = b.headerTopEl), b != null && b.filenameEl && (G = b.filenameEl), b != null && b.badgesBarEl && (Z = b.badgesBarEl), b != null && b.filenameRightEl && (f = b.filenameRightEl), b != null && b.badgesBarRightEl && (X = b.badgesBarRightEl), b != null && b.leftAreaEl && (j = b.leftAreaEl), b != null && b.leftMetaEl && (w = b.leftMetaEl), b != null && b.centerAreaEl && (R = b.centerAreaEl), b != null && b.rightMetaEl && (x = b.rightMetaEl), b != null && b.rightAreaEl && (K = b.rightAreaEl), b != null && b.titleLineEl && (V = b.titleLineEl), b != null && b.titleWrapEl && (O = b.titleWrapEl), b != null && b.modeButtonsEl && (k = b.modeButtonsEl); + } catch (re) { + (Vt = console.debug) == null || Vt.call(console, re); } const { - contentRow: k, - content: K, + contentRow: N, + content: U, singleView: z, - abView: B, + abView: T, sideView: J, gridCanvas: P, - probeTooltip: H, + probeTooltip: E, loupeWrap: $, - loupeCanvas: E, - genInfoOverlay: oe, + loupeCanvas: H, + genInfoOverlay: ne, genInfoTitle: M, - genInfoBody: j, - genInfoOverlayLeft: O, + genInfoBody: v, + genInfoOverlayLeft: F, genInfoTitleLeft: D, genInfoBodyLeft: q, footer: ee, - prevBtn: ce, + prevBtn: ae, indexInfo: ue, - nextBtn: U, + nextBtn: B, navBar: Q, playerBarHost: _, filmstrip: le } = aW({ state: i, - buildAssetViewURL: Ki, - onNavigate: (ae) => { - var he; + buildAssetViewURL: Ui, + onNavigate: (re) => { + var Ie; try { - i.compareAsset != null && (i.compareAsset = null, i.mode = jt.SINGLE), i.currentIndex = ae, dt(); - } catch (ve) { - (he = console.debug) == null || he.call(console, ve); + i.compareAsset != null && (i.compareAsset = null, i.mode = jt.SINGLE), i.currentIndex = re, tt(); + } catch (Ge) { + (Ie = console.debug) == null || Ie.call(console, Ge); } }, - onCompare: (ae) => { - var he; + onCompare: (re) => { + var Ie; try { - const ve = Array.isArray(i.assets) ? i.assets : [], Fe = ve[ae]; - if (!Fe || Fe === ve[i.currentIndex]) return; - if (Fe === i.compareAsset) { - i.compareAsset = null, i.mode = jt.SINGLE, dt(); + const Ge = Array.isArray(i.assets) ? i.assets : [], Je = Ge[re]; + if (!Je || Je === Ge[i.currentIndex]) return; + if (Je === i.compareAsset) { + i.compareAsset = null, i.mode = jt.SINGLE, tt(); return; } - ve.length === 2 ? (i.compareAsset = ve[1 - i.currentIndex], i.mode = se() ? jt.SIDE_BY_SIDE : jt.AB_COMPARE) : (i.compareAsset = Fe, i.mode = ut() ? jt.SIDE_BY_SIDE : jt.AB_COMPARE), dt(); - } catch (ve) { - (he = console.debug) == null || he.call(console, ve); + Ge.length === 2 ? (i.compareAsset = Ge[1 - i.currentIndex], i.mode = de() ? jt.SIDE_BY_SIDE : jt.AB_COMPARE) : (i.compareAsset = Je, i.mode = wt() ? jt.SIDE_BY_SIDE : jt.AB_COMPARE), tt(); + } catch (Ge) { + (Ie = console.debug) == null || Ie.call(console, Ge); } } }); - e.appendChild(h), e.appendChild(k); - function de() { - var ae; + e.appendChild(C), e.appendChild(N); + function ce() { + var re; try { if (i.compareAsset) return i.compareAsset; - const he = Array.isArray(i.assets) ? i.assets : []; - if (he.length === 2) - return he[1 - (i.currentIndex || 0)] || null; - } catch (he) { - (ae = console.debug) == null || ae.call(console, he); + const Ie = Array.isArray(i.assets) ? i.assets : []; + if (Ie.length === 2) + return Ie[1 - (i.currentIndex || 0)] || null; + } catch (Ie) { + (re = console.debug) == null || re.call(console, Ie); } return null; } - function se() { - var ae, he, ve, Fe; + function de() { + var re, Ie, Ge, Je; try { - const _e = ((ae = i.assets) == null ? void 0 : ae[i.currentIndex]) || null; - return (((he = ti == null ? void 0 : ti.isModel3DAsset) == null ? void 0 : he.call(ti, _e)) ?? !1) || (((ve = ti == null ? void 0 : ti.isModel3DAsset) == null ? void 0 : ve.call(ti, de())) ?? !1); + const _e = ((re = i.assets) == null ? void 0 : re[i.currentIndex]) || null; + return (((Ie = ti == null ? void 0 : ti.isModel3DAsset) == null ? void 0 : Ie.call(ti, _e)) ?? !1) || (((Ge = ti == null ? void 0 : ti.isModel3DAsset) == null ? void 0 : Ge.call(ti, ce())) ?? !1); } catch (_e) { - (Fe = console.debug) == null || Fe.call(console, _e); + (Je = console.debug) == null || Je.call(console, _e); } return !1; } - e.appendChild(le.el), e.appendChild(ee), e.appendChild(oe), e.appendChild(O), sW({ + e.appendChild(le.el), e.appendChild(ee), e.appendChild(ne), e.appendChild(F), sW({ overlay: e, requestClose: () => L() }); const ge = pA({ state: i, VIEWER_MODES: jt, - APP_CONFIG: fe, + APP_CONFIG: he, getAssetMetadata: gl, getAssetsBatch: Bs - }), je = 300 * 1e3, Se = 256, ke = /* @__PURE__ */ new Map(), we = () => { - var ae, he; + }), Le = 300 * 1e3, xe = 256, Xe = /* @__PURE__ */ new Map(), Me = () => { + var re, Ie; try { - const ve = Date.now(); - for (const [et, tt] of ke.entries()) { - const st = Number(tt == null ? void 0 : tt.at) || 0; - (!st || ve - st > je) && ke.delete(et); + const Ge = Date.now(); + for (const [Qe, et] of Xe.entries()) { + const mt = Number(et == null ? void 0 : et.at) || 0; + (!mt || Ge - mt > Le) && Xe.delete(Qe); } - if (ke.size <= Se) return; - const Fe = Array.from(ke.entries()).sort( - (et, tt) => { - var st, Vt; - return (Number((st = et == null ? void 0 : et[1]) == null ? void 0 : st.at) || 0) - (Number((Vt = tt == null ? void 0 : tt[1]) == null ? void 0 : Vt.at) || 0); + if (Xe.size <= xe) return; + const Je = Array.from(Xe.entries()).sort( + (Qe, et) => { + var mt, Lt; + return (Number((mt = Qe == null ? void 0 : Qe[1]) == null ? void 0 : mt.at) || 0) - (Number((Lt = et == null ? void 0 : et[1]) == null ? void 0 : Lt.at) || 0); } - ), _e = ke.size - Se; - for (let et = 0; et < _e; et += 1) { - const tt = (ae = Fe == null ? void 0 : Fe[et]) == null ? void 0 : ae[0]; - tt != null && ke.delete(tt); + ), _e = Xe.size - xe; + for (let Qe = 0; Qe < _e; Qe += 1) { + const et = (re = Je == null ? void 0 : Je[Qe]) == null ? void 0 : re[0]; + et != null && Xe.delete(et); } - } catch (ve) { - (he = console.debug) == null || he.call(console, ve); + } catch (Ge) { + (Ie = console.debug) == null || Ie.call(console, Ge); } - }, Je = (ae) => { + }, Fe = (re) => { try { - const he = String(ae ?? ""); - if (!he) return null; - const ve = ke.get(he); - if (!ve || typeof ve != "object") return null; - const Fe = Number(ve == null ? void 0 : ve.at) || 0; - return !Fe || Date.now() - Fe > je ? (ke.delete(he), null) : (ve == null ? void 0 : ve.data) || null; + const Ie = String(re ?? ""); + if (!Ie) return null; + const Ge = Xe.get(Ie); + if (!Ge || typeof Ge != "object") return null; + const Je = Number(Ge == null ? void 0 : Ge.at) || 0; + return !Je || Date.now() - Je > Le ? (Xe.delete(Ie), null) : (Ge == null ? void 0 : Ge.data) || null; } catch { return null; } - }, $e = (ae, he) => { - var ve; + }, it = (re, Ie) => { + var Ge; try { - const Fe = String(ae ?? ""); - if (!Fe || !he) return; - ke.set(Fe, { data: he, at: Date.now() }), we(); - } catch (Fe) { - (ve = console.debug) == null || ve.call(console, Fe); + const Je = String(re ?? ""); + if (!Je || !Ie) return; + Xe.set(Je, { data: Ie, at: Date.now() }), Me(); + } catch (Je) { + (Ge = console.debug) == null || Ge.call(console, Je); } }, qe = async () => { - var ae, he; + var re, Ie; try { - await ((ae = ge == null ? void 0 : ge.hydrateVisibleMetadata) == null ? void 0 : ae.call(ge)); - } catch (ve) { - (he = console.debug) == null || he.call(console, ve); + await ((re = ge == null ? void 0 : ge.hydrateVisibleMetadata) == null ? void 0 : re.call(ge)); + } catch (Ge) { + (Ie = console.debug) == null || Ie.call(console, Ge); } }; try { - r = FA({ + r = OA({ overlay: e, - content: K, + content: U, singleView: z, - abView: B, + abView: T, sideView: J, state: i, VIEWER_MODES: jt, - scheduleOverlayRedraw: Oe, + scheduleOverlayRedraw: rt, lifecycle: t }); } catch { r = null; } - const Ue = (ae, he, ve) => { - var Fe; + const Pe = (re, Ie, Ge) => { + var Je; try { - ae.clearRect(0, 0, he, ve); + re.clearRect(0, 0, Ie, Ge); } catch (_e) { - (Fe = console.debug) == null || Fe.call(console, _e); + (Je = console.debug) == null || Je.call(console, _e); } }; - let Te = null; - function Oe(ae) { - var he, ve; + let Re = null; + function rt(re) { + var Ie, Ge; try { if (e.style.display === "none") return; - if (ae === !0) { - Te != null && (cancelAnimationFrame(Te), Te = null); + if (re === !0) { + Re != null && (cancelAnimationFrame(Re), Re = null); try { - Xt(); - } catch (Fe) { - (he = console.debug) == null || he.call(console, Fe); + kt(); + } catch (Je) { + (Ie = console.debug) == null || Ie.call(console, Je); } return; } - if (Te != null) return; - Te = requestAnimationFrame(() => { - var Fe; - Te = null; + if (Re != null) return; + Re = requestAnimationFrame(() => { + var Je; + Re = null; try { - Xt(); + kt(); } catch (_e) { - (Fe = console.debug) == null || Fe.call(console, _e); + (Je = console.debug) == null || Je.call(console, _e); } }); - } catch (Fe) { - (ve = console.debug) == null || ve.call(console, Fe); + } catch (Je) { + (Ge = console.debug) == null || Ge.call(console, Je); } } - const Me = gA({ + const qt = gA({ gridCanvas: P, - content: K, + content: U, state: i, VIEWER_MODES: jt, getPrimaryMedia: () => { - var ae, he, ve, Fe; + var re, Ie, Ge, Je; try { if ((i == null ? void 0 : i.mode) === jt.SINGLE) - return ((ae = z == null ? void 0 : z.querySelector) == null ? void 0 : ae.call(z, ".mjr-viewer-media")) || null; + return ((re = z == null ? void 0 : z.querySelector) == null ? void 0 : re.call(z, ".mjr-viewer-media")) || null; if ((i == null ? void 0 : i.mode) === jt.AB_COMPARE) - return ((he = B == null ? void 0 : B.querySelector) == null ? void 0 : he.call(B, ".mjr-viewer-media")) || null; + return ((Ie = T == null ? void 0 : T.querySelector) == null ? void 0 : Ie.call(T, ".mjr-viewer-media")) || null; if ((i == null ? void 0 : i.mode) === jt.SIDE_BY_SIDE) - return ((ve = J == null ? void 0 : J.querySelector) == null ? void 0 : ve.call(J, ".mjr-viewer-media")) || null; + return ((Ge = J == null ? void 0 : J.querySelector) == null ? void 0 : Ge.call(J, ".mjr-viewer-media")) || null; } catch (_e) { - (Fe = console.debug) == null || Fe.call(console, _e); + (Je = console.debug) == null || Je.call(console, _e); } return null; }, - getViewportRect: S, - clearCanvas: Ue - }), Xt = () => { - var Fe, _e, et, tt, st, Vt, Bt, Rt, Ct, zt; - const ae = (() => { + getViewportRect: h, + clearCanvas: Pe + }), kt = () => { + var Je, _e, Qe, et, mt, Lt, Tt, Ot, Ct, gn; + const re = (() => { try { - const gt = Number(i == null ? void 0 : i._panHintAt) || 0; - return gt > 0 && Date.now() - gt < 900; + const pt = Number(i == null ? void 0 : i._panHintAt) || 0; + return pt > 0 && Date.now() - pt < 900; } catch { return !1; } })(); try { - const gt = (i == null ? void 0 : i.mode) === jt.SINGLE && !!(i != null && i.hudEnabled), mn = String((i == null ? void 0 : i.scopesMode) || "off") !== "off", wt = !!(i != null && i.overlayMaskEnabled); - P.style.display = i.gridMode === 0 && !wt && !ae && !gt && !mn ? "none" : ""; - } catch (gt) { - (Fe = console.debug) == null || Fe.call(console, gt); + const pt = (i == null ? void 0 : i.mode) === jt.SINGLE && !!(i != null && i.hudEnabled), zt = String((i == null ? void 0 : i.scopesMode) || "off") !== "off", ht = !!(i != null && i.overlayMaskEnabled); + P.style.display = i.gridMode === 0 && !ht && !re && !pt && !zt ? "none" : ""; + } catch (pt) { + (Je = console.debug) == null || Je.call(console, pt); } - const he = Me.ensureCanvasSize(); - if (!(he.w > 0 && he.h > 0)) return; + const Ie = qt.ensureCanvasSize(); + if (!(Ie.w > 0 && Ie.h > 0)) return; if ((() => { - const gt = (i == null ? void 0 : i.mode) === jt.SINGLE && !!(i != null && i.hudEnabled); - return (Number(i.gridMode) || 0) !== 0 || !!(i != null && i.overlayMaskEnabled) || gt; + const pt = (i == null ? void 0 : i.mode) === jt.SINGLE && !!(i != null && i.hudEnabled); + return (Number(i.gridMode) || 0) !== 0 || !!(i != null && i.overlayMaskEnabled) || pt; })()) - Me.redrawGrid(he); + qt.redrawGrid(Ie); else try { - const gt = P.getContext("2d"); - gt && Ue(gt, he.w, he.h); - } catch (gt) { - (_e = console.debug) == null || _e.call(console, gt); + const pt = P.getContext("2d"); + pt && Pe(pt, Ie.w, Ie.h); + } catch (pt) { + (_e = console.debug) == null || _e.call(console, pt); } - if (ae) + if (re) try { - const gt = P.getContext("2d"); - if (gt) { - const mn = (et = K == null ? void 0 : K.getBoundingClientRect) == null ? void 0 : et.call(K), wt = Number(i == null ? void 0 : i._panHintX), on = Number(i == null ? void 0 : i._panHintY), rn = mn && Number.isFinite(wt) ? wt - mn.left : he.w / 2, hn = mn && Number.isFinite(on) ? on - mn.top : he.h * 0.78, ln = 10, gn = Math.max(ln, Math.min(he.w - ln, rn)), nn = Math.max(ln, Math.min(he.h - ln, hn)); - gt.save(), gt.font = "12px var(--comfy-font, ui-sans-serif, system-ui)", gt.textAlign = "center", gt.textBaseline = "middle"; - const An = "Zoom in to pan", vn = gt.measureText(An), un = Math.min(he.w - 2 * ln, Math.max(140, vn.width + 26)), Mn = 26; - gt.fillStyle = "rgba(0,0,0,0.65)", gt.strokeStyle = "rgba(255,255,255,0.18)", gt.lineWidth = 1, gt.beginPath(); - const yn = gn - un / 2, Ut = nn - Mn / 2, Jt = 10; - gt.moveTo(yn + Jt, Ut), gt.arcTo(yn + un, Ut, yn + un, Ut + Mn, Jt), gt.arcTo(yn + un, Ut + Mn, yn, Ut + Mn, Jt), gt.arcTo(yn, Ut + Mn, yn, Ut, Jt), gt.arcTo(yn, Ut, yn + un, Ut, Jt), gt.closePath(), gt.fill(), gt.stroke(), gt.fillStyle = "rgba(255,255,255,0.92)", gt.fillText(An, gn, nn), gt.restore(); + const pt = P.getContext("2d"); + if (pt) { + const zt = (Qe = U == null ? void 0 : U.getBoundingClientRect) == null ? void 0 : Qe.call(U), ht = Number(i == null ? void 0 : i._panHintX), on = Number(i == null ? void 0 : i._panHintY), an = zt && Number.isFinite(ht) ? ht - zt.left : Ie.w / 2, hn = zt && Number.isFinite(on) ? on - zt.top : Ie.h * 0.78, cn = 10, bn = Math.max(cn, Math.min(Ie.w - cn, an)), ln = Math.max(cn, Math.min(Ie.h - cn, hn)); + pt.save(), pt.font = "12px var(--comfy-font, ui-sans-serif, system-ui)", pt.textAlign = "center", pt.textBaseline = "middle"; + const Wn = "Zoom in to pan", Yn = pt.measureText(Wn), In = Math.min(Ie.w - 2 * cn, Math.max(140, Yn.width + 26)), Gn = 26; + pt.fillStyle = "rgba(0,0,0,0.65)", pt.strokeStyle = "rgba(255,255,255,0.18)", pt.lineWidth = 1, pt.beginPath(); + const fn = bn - In / 2, Kt = ln - Gn / 2, Jt = 10; + pt.moveTo(fn + Jt, Kt), pt.arcTo(fn + In, Kt, fn + In, Kt + Gn, Jt), pt.arcTo(fn + In, Kt + Gn, fn, Kt + Gn, Jt), pt.arcTo(fn, Kt + Gn, fn, Kt, Jt), pt.arcTo(fn, Kt, fn + In, Kt, Jt), pt.closePath(), pt.fill(), pt.stroke(), pt.fillStyle = "rgba(255,255,255,0.92)", pt.fillText(Wn, bn, ln), pt.restore(); } - } catch (gt) { - (tt = console.debug) == null || tt.call(console, gt); + } catch (pt) { + (et = console.debug) == null || et.call(console, pt); } try { - const gt = String((i == null ? void 0 : i.scopesMode) || "off"); - if (gt !== "off") { - const mn = P.getContext("2d"); - if (mn) { - let wt = z; - (i == null ? void 0 : i.mode) === jt.AB_COMPARE ? wt = B : (i == null ? void 0 : i.mode) === jt.SIDE_BY_SIDE && (wt = J); - const on = ((st = wt == null ? void 0 : wt.querySelector) == null ? void 0 : st.call(wt, "canvas.mjr-viewer-media")) || ((Vt = e == null ? void 0 : e.querySelector) == null ? void 0 : Vt.call(e, "canvas.mjr-viewer-media")); - on && on instanceof HTMLCanvasElement && ((Bt = No == null ? void 0 : No.drawScopesLight) == null || Bt.call(No, mn, { w: he.w, h: he.h }, on, { - mode: gt, + const pt = String((i == null ? void 0 : i.scopesMode) || "off"); + if (pt !== "off") { + const zt = P.getContext("2d"); + if (zt) { + let ht = z; + (i == null ? void 0 : i.mode) === jt.AB_COMPARE ? ht = T : (i == null ? void 0 : i.mode) === jt.SIDE_BY_SIDE && (ht = J); + const on = ((mt = ht == null ? void 0 : ht.querySelector) == null ? void 0 : mt.call(ht, "canvas.mjr-viewer-media")) || ((Lt = e == null ? void 0 : e.querySelector) == null ? void 0 : Lt.call(e, "canvas.mjr-viewer-media")); + on && on instanceof HTMLCanvasElement && ((Tt = ko == null ? void 0 : ko.drawScopesLight) == null || Tt.call(ko, zt, { w: Ie.w, h: Ie.h }, on, { + mode: pt, channel: i == null ? void 0 : i.channel })); } } - } catch (gt) { - (Rt = console.debug) == null || Rt.call(console, gt); + } catch (pt) { + (Ot = console.debug) == null || Ot.call(console, pt); } if (i.mode !== jt.SINGLE) { try { - H.style.display = "none"; - } catch (gt) { - (Ct = console.debug) == null || Ct.call(console, gt); + E.style.display = "none"; + } catch (pt) { + (Ct = console.debug) == null || Ct.call(console, pt); } try { $.style.display = "none"; - } catch (gt) { - (zt = console.debug) == null || zt.call(console, gt); + } catch (pt) { + (gn = console.debug) == null || gn.call(console, pt); } } - }, Mt = (ae) => { - var he, ve, Fe, _e; - if (ae) { + }, we = (re) => { + var Ie, Ge, Je, _e; + if (re) { try { - for (const et of Array.from(ae.childNodes || [])) + for (const Qe of Array.from(re.childNodes || [])) try { - (he = et == null ? void 0 : et._mjrDispose) == null || he.call(et); - } catch (tt) { - (ve = console.debug) == null || ve.call(console, tt); + (Ie = Qe == null ? void 0 : Qe._mjrDispose) == null || Ie.call(Qe); + } catch (et) { + (Ge = console.debug) == null || Ge.call(console, et); } - } catch (et) { - (Fe = console.debug) == null || Fe.call(console, et); + } catch (Qe) { + (Je = console.debug) == null || Je.call(console, Qe); } try { - ae.replaceChildren(); - } catch (et) { - (_e = console.debug) == null || _e.call(console, et); + re.replaceChildren(); + } catch (Qe) { + (_e = console.debug) == null || _e.call(console, Qe); } } }, me = () => { - var ae, he, ve, Fe; + var re, Ie, Ge, Je; try { - (he = (ae = i._genInfoAbort) == null ? void 0 : ae.abort) == null || he.call(ae); + (Ie = (re = i._genInfoAbort) == null ? void 0 : re.abort) == null || Ie.call(re); } catch (_e) { - (ve = console.debug) == null || ve.call(console, _e); + (Ge = console.debug) == null || Ge.call(console, _e); } i._genInfoAbort = null; try { i._genInfoReqId = (Number(i._genInfoReqId) || 0) + 1; } catch (_e) { - (Fe = console.debug) == null || Fe.call(console, _e); + (Je = console.debug) == null || Je.call(console, _e); } - }, Pe = async (ae, { signal: he } = {}) => { - var ve; + }, He = async (re, { signal: Ie } = {}) => { + var Ge; try { - return await ((ve = vi == null ? void 0 : vi.ensureViewerMetadataAsset) == null ? void 0 : ve.call(vi, ae, { + return await ((Ge = vi == null ? void 0 : vi.ensureViewerMetadataAsset) == null ? void 0 : Ge.call(vi, re, { getAssetMetadata: gl, - getFileMetadataScoped: Eg, + getFileMetadataScoped: Hg, metadataCache: ge, - signal: he + signal: Ie })); } catch { - return ae; + return re; } - }, Le = (ae) => { + }, Ye = (re) => { try { - if (!ae || typeof ae != "object" || ae != null && ae.geninfo || ae != null && ae.prompt || ae != null && ae.workflow || ae != null && ae.metadata) return !1; - if (String((ae == null ? void 0 : ae.mime) || (ae == null ? void 0 : ae.mimetype) || (ae == null ? void 0 : ae.type) || "").toLowerCase().startsWith("video/")) return !0; - const Fe = String( - (ae == null ? void 0 : ae.filepath) || (ae == null ? void 0 : ae.path) || (ae == null ? void 0 : ae.filename) || (ae == null ? void 0 : ae.name) || "" + if (!re || typeof re != "object" || re != null && re.geninfo || re != null && re.prompt || re != null && re.workflow || re != null && re.metadata) return !1; + if (String((re == null ? void 0 : re.mime) || (re == null ? void 0 : re.mimetype) || (re == null ? void 0 : re.type) || "").toLowerCase().startsWith("video/")) return !0; + const Je = String( + (re == null ? void 0 : re.filepath) || (re == null ? void 0 : re.path) || (re == null ? void 0 : re.filename) || (re == null ? void 0 : re.name) || "" ).toLowerCase().split(".").pop() || ""; - return ["mp4", "webm", "mov", "mkv", "avi", "m4v", "gif"].includes(Fe), !0; + return ["mp4", "webm", "mov", "mkv", "avi", "m4v", "gif"].includes(Je), !0; } catch { return !1; } - }, Ot = async () => { - var Bt, Rt, Ct, zt, gt, mn; - const ae = nt(), he = ut(), ve = i.mode, Fe = !!(i != null && i.genInfoOpen) && !(i != null && i.distractionFree), _e = Fe && (ve === jt.AB_COMPARE && ae || ve === jt.SIDE_BY_SIDE && he), et = _e && ve === jt.SIDE_BY_SIDE && !(i != null && i.compareAsset) && (((Bt = i == null ? void 0 : i.assets) == null ? void 0 : Bt.length) ?? 0) > 2; + }, Pt = async () => { + var Tt, Ot, Ct, gn, pt, zt; + const re = lt(), Ie = wt(), Ge = i.mode, Je = !!(i != null && i.genInfoOpen) && !(i != null && i.distractionFree), _e = Je && (Ge === jt.AB_COMPARE && re || Ge === jt.SIDE_BY_SIDE && Ie), Qe = _e && Ge === jt.SIDE_BY_SIDE && !(i != null && i.compareAsset) && (((Tt = i == null ? void 0 : i.assets) == null ? void 0 : Tt.length) ?? 0) > 2; try { - if (oe.style.display = Fe ? "flex" : "none", O.style.display = _e ? "flex" : "none", e.style.paddingRight = Fe ? Ou : "0px", e.style.paddingLeft = _e ? Ou : "0px", !Fe) { + if (ne.style.display = Je ? "flex" : "none", F.style.display = _e ? "flex" : "none", e.style.paddingRight = Je ? Fu : "0px", e.style.paddingLeft = _e ? Fu : "0px", !Je) { me(); try { - Mt(j); - } catch (wt) { - (Rt = console.debug) == null || Rt.call(console, wt); + we(v); + } catch (ht) { + (Ot = console.debug) == null || Ot.call(console, ht); } try { - Mt(q); - } catch (wt) { - (Ct = console.debug) == null || Ct.call(console, wt); + we(q); + } catch (ht) { + (Ct = console.debug) == null || Ct.call(console, ht); } return; } @@ -21195,195 +21222,195 @@ function uW() { return; } me(); - const tt = (Number(i == null ? void 0 : i._genInfoReqId) || 0) + 1; + const et = (Number(i == null ? void 0 : i._genInfoReqId) || 0) + 1; try { - i._genInfoReqId = tt; - } catch (wt) { - (zt = console.debug) == null || zt.call(console, wt); + i._genInfoReqId = et; + } catch (ht) { + (gn = console.debug) == null || gn.call(console, ht); } - const st = new AbortController(); - i._genInfoAbort = st; - const Vt = ({ left: wt, leftExtra: on, right: rn, rightExtra: hn, single: ln }) => { - var An, vn; + const mt = new AbortController(); + i._genInfoAbort = mt; + const Lt = ({ left: ht, leftExtra: on, right: an, rightExtra: hn, single: cn }) => { + var Wn, Yn; try { - Mt(j); - } catch (un) { - (An = console.debug) == null || An.call(console, un); + we(v); + } catch (In) { + (Wn = console.debug) == null || Wn.call(console, In); } try { - Mt(q); - } catch (un) { - (vn = console.debug) == null || vn.call(console, un); + we(q); + } catch (In) { + (Yn = console.debug) == null || Yn.call(console, In); } - const gn = () => { - var un; + const bn = () => { + var In; try { - i != null && i.genInfoOpen || (i.genInfoOpen = !0), Ot(); - } catch (Mn) { - (un = console.debug) == null || un.call(console, Mn); + i != null && i.genInfoOpen || (i.genInfoOpen = !0), Pt(); + } catch (Gn) { + (In = console.debug) == null || In.call(console, Gn); } - }, nn = (un, Mn, yn, Ut) => { + }, ln = (In, Gn, fn, Kt) => { var Jt, ro, lo, ao; - if (un) + if (In) try { try { - const it = (Jt = vi == null ? void 0 : vi.buildViewerMetadataBlocks) == null ? void 0 : Jt.call(vi, { - title: Mn, - asset: yn, - ui: { loading: !!Ut, onRetry: gn } + const ot = (Jt = vi == null ? void 0 : vi.buildViewerMetadataBlocks) == null ? void 0 : Jt.call(vi, { + title: Gn, + asset: fn, + ui: { loading: !!Kt, onRetry: bn } }); - if (it) { - un.appendChild(it); + if (ot) { + In.appendChild(ot); return; } - } catch (it) { - (ro = console.debug) == null || ro.call(console, it); + } catch (ot) { + (ro = console.debug) == null || ro.call(console, ot); } - const hi = document.createElement("div"); - if (hi.style.cssText = "display:flex; flex-direction:column; gap:10px; margin-bottom: 14px;", Mn) { - const it = document.createElement("div"); - it.textContent = Mn, it.style.cssText = "font-size: 12px; font-weight: 600; letter-spacing: 0.02em; color: rgba(255,255,255,0.86);", hi.appendChild(it); + const Ci = document.createElement("div"); + if (Ci.style.cssText = "display:flex; flex-direction:column; gap:10px; margin-bottom: 14px;", Gn) { + const ot = document.createElement("div"); + ot.textContent = Gn, ot.style.cssText = "font-size: 12px; font-weight: 600; letter-spacing: 0.02em; color: rgba(255,255,255,0.86);", Ci.appendChild(ot); } const Ve = document.createElement("div"); - Ve.style.cssText = "padding: 10px 12px; border-radius: 10px; border: 1px solid rgba(255,255,255,0.12); background: rgba(255,255,255,0.06); color: rgba(255,255,255,0.72);", Ve.textContent = "No generation data found for this file.", hi.appendChild(Ve); + Ve.style.cssText = "padding: 10px 12px; border-radius: 10px; border: 1px solid rgba(255,255,255,0.12); background: rgba(255,255,255,0.06); color: rgba(255,255,255,0.72);", Ve.textContent = "No generation data found for this file.", Ci.appendChild(Ve); try { - const it = yn == null ? void 0 : yn.metadata_raw; - if (it != null) { - const xt = document.createElement("details"); - xt.style.cssText = "border: 1px solid rgba(255,255,255,0.10); border-radius: 10px; background: rgba(255,255,255,0.04); overflow: hidden;"; - const an = document.createElement("summary"); - an.textContent = "Raw metadata", an.style.cssText = "cursor: pointer; padding: 10px 12px; color: rgba(255,255,255,0.78); user-select: none;"; - const sn = document.createElement("pre"); - sn.style.cssText = "margin:0; padding: 10px 12px; max-height: 280px; overflow:auto; font-size: 11px; line-height: 1.35; color: rgba(255,255,255,0.86);"; - let Bn = ""; + const ot = fn == null ? void 0 : fn.metadata_raw; + if (ot != null) { + const St = document.createElement("details"); + St.style.cssText = "border: 1px solid rgba(255,255,255,0.10); border-radius: 10px; background: rgba(255,255,255,0.04); overflow: hidden;"; + const sn = document.createElement("summary"); + sn.textContent = "Raw metadata", sn.style.cssText = "cursor: pointer; padding: 10px 12px; color: rgba(255,255,255,0.78); user-select: none;"; + const un = document.createElement("pre"); + un.style.cssText = "margin:0; padding: 10px 12px; max-height: 280px; overflow:auto; font-size: 11px; line-height: 1.35; color: rgba(255,255,255,0.86);"; + let Kn = ""; try { - typeof it == "string" ? Bn = it : Bn = JSON.stringify(it, null, 2); + typeof ot == "string" ? Kn = ot : Kn = JSON.stringify(ot, null, 2); } catch { - Bn = String(it); + Kn = String(ot); } - Bn.length > 4e4 && (Bn = `${Bn.slice(0, 4e4)} -…(truncated)…`), sn.textContent = Bn, xt.appendChild(an), xt.appendChild(sn), hi.appendChild(xt); + Kn.length > 4e4 && (Kn = `${Kn.slice(0, 4e4)} +…(truncated)…`), un.textContent = Kn, St.appendChild(sn), St.appendChild(un), Ci.appendChild(St); } - } catch (it) { - (lo = console.debug) == null || lo.call(console, it); + } catch (ot) { + (lo = console.debug) == null || lo.call(console, ot); } - un.appendChild(hi); - } catch (hi) { - (ao = console.debug) == null || ao.call(console, hi); + In.appendChild(Ci); + } catch (Ci) { + (ao = console.debug) == null || ao.call(console, Ci); } }; - _e ? (wt && (D.textContent = wt.title || "Asset A", nn( + _e ? (ht && (D.textContent = ht.title || "Asset A", ln( q, on ? "Asset A" : "", - wt.asset, - wt.loading - )), on && nn(q, "Asset C", on.asset, on.loading), rn && (M.textContent = rn.title || "Asset B", nn( - j, + ht.asset, + ht.loading + )), on && ln(q, "Asset C", on.asset, on.loading), an && (M.textContent = an.title || "Asset B", ln( + v, hn ? "Asset B" : "", - rn.asset, - rn.loading - )), hn && nn(j, "Asset D", hn.asset, hn.loading)) : ln && (M.textContent = ln.title || "Generation Info", nn(j, "", ln.asset, ln.loading)); + an.asset, + an.loading + )), hn && ln(v, "Asset D", hn.asset, hn.loading)) : cn && (M.textContent = cn.title || "Generation Info", ln(v, "", cn.asset, cn.loading)); }; try { - const wt = ((gt = i == null ? void 0 : i.assets) == null ? void 0 : gt[i == null ? void 0 : i.currentIndex]) || null; - if (!wt) { - Vt({}); + const ht = ((pt = i == null ? void 0 : i.assets) == null ? void 0 : pt[i == null ? void 0 : i.currentIndex]) || null; + if (!ht) { + Lt({}); return; } - let on = null, rn = null, hn = null, ln = null, gn = null; - _e ? ve === jt.SIDE_BY_SIDE ? i != null && i.compareAsset ? (on = wt, rn = i.compareAsset) : (on = i.assets[0] || null, rn = i.assets[1] || null, et && (hn = i.assets[2] || null, ln = i.assets[3] || null)) : (on = wt, rn = (i == null ? void 0 : i.compareAsset) || (i.assets.length === 2 ? i.assets[1 - i.currentIndex] : null)) : gn = wt; - const nn = (An) => { - var vn, un; - return An ? ((un = (vn = ge == null ? void 0 : ge.getCached) == null ? void 0 : vn.call(ge, An.id)) == null ? void 0 : un.data) || An : null; + let on = null, an = null, hn = null, cn = null, bn = null; + _e ? Ge === jt.SIDE_BY_SIDE ? i != null && i.compareAsset ? (on = ht, an = i.compareAsset) : (on = i.assets[0] || null, an = i.assets[1] || null, Qe && (hn = i.assets[2] || null, cn = i.assets[3] || null)) : (on = ht, an = (i == null ? void 0 : i.compareAsset) || (i.assets.length === 2 ? i.assets[1 - i.currentIndex] : null)) : bn = ht; + const ln = (Wn) => { + var Yn, In; + return Wn ? ((In = (Yn = ge == null ? void 0 : ge.getCached) == null ? void 0 : Yn.call(ge, Wn.id)) == null ? void 0 : In.data) || Wn : null; }; - if (Vt({ + if (Lt({ left: _e ? { - title: et ? "Assets A & C" : "Asset A", - asset: nn(on), - loading: Le(nn(on)) + title: Qe ? "Assets A & C" : "Asset A", + asset: ln(on), + loading: Ye(ln(on)) } : null, - leftExtra: et && hn ? { - asset: nn(hn), - loading: Le(nn(hn)) + leftExtra: Qe && hn ? { + asset: ln(hn), + loading: Ye(ln(hn)) } : null, right: _e ? { - title: et ? "Assets B & D" : "Asset B", - asset: nn(rn), - loading: Le(nn(rn)) + title: Qe ? "Assets B & D" : "Asset B", + asset: ln(an), + loading: Ye(ln(an)) } : null, - rightExtra: et && ln ? { - asset: nn(ln), - loading: Le(nn(ln)) + rightExtra: Qe && cn ? { + asset: ln(cn), + loading: Ye(ln(cn)) } : null, single: _e ? null : { title: "Generation Info", - asset: nn(gn), - loading: Le(nn(gn)) + asset: ln(bn), + loading: Ye(ln(bn)) } - }), i._genInfoReqId !== tt) return; + }), i._genInfoReqId !== et) return; if (_e) { - const An = on ? await Pe(on, { signal: st.signal }) : null, vn = rn ? await Pe(rn, { signal: st.signal }) : null, un = hn ? await Pe(hn, { signal: st.signal }) : null, Mn = ln ? await Pe(ln, { signal: st.signal }) : null; - if (i._genInfoReqId !== tt) return; - Vt({ + const Wn = on ? await He(on, { signal: mt.signal }) : null, Yn = an ? await He(an, { signal: mt.signal }) : null, In = hn ? await He(hn, { signal: mt.signal }) : null, Gn = cn ? await He(cn, { signal: mt.signal }) : null; + if (i._genInfoReqId !== et) return; + Lt({ left: { - title: et ? "Assets A & C" : "Asset A", - asset: An, + title: Qe ? "Assets A & C" : "Asset A", + asset: Wn, loading: !1 }, - leftExtra: et && un ? { asset: un, loading: !1 } : null, + leftExtra: Qe && In ? { asset: In, loading: !1 } : null, right: { - title: et ? "Assets B & D" : "Asset B", - asset: vn, + title: Qe ? "Assets B & D" : "Asset B", + asset: Yn, loading: !1 }, - rightExtra: et && Mn ? { asset: Mn, loading: !1 } : null + rightExtra: Qe && Gn ? { asset: Gn, loading: !1 } : null }); } else { - const An = gn ? await Pe(gn, { signal: st.signal }) : null; - if (i._genInfoReqId !== tt) return; - Vt({ + const Wn = bn ? await He(bn, { signal: mt.signal }) : null; + if (i._genInfoReqId !== et) return; + Lt({ single: { title: "Generation Info", - asset: An, + asset: Wn, loading: !1 } }); } - } catch (wt) { - (mn = console.debug) == null || mn.call(console, wt); + } catch (ht) { + (zt = console.debug) == null || zt.call(console, ht); } }; - let Xe = null; - function Ee(ae) { - var he, ve; + let ke = null; + function Ee(re) { + var Ie, Ge; try { - return !Xe && Na && (Xe = Na.createFrameExporter({ + return !ke && Ra && (ke = Ra.createFrameExporter({ state: i, VIEWER_MODES: jt, singleView: z, - abView: B, + abView: T, sideView: J - })), (he = Xe == null ? void 0 : Xe.exportCurrentFrame) == null ? void 0 : he.call(Xe, ae); - } catch (Fe) { - (ve = console.debug) == null || ve.call(console, Fe); + })), (Ie = ke == null ? void 0 : ke.exportCurrentFrame) == null ? void 0 : Ie.call(ke, re); + } catch (Je) { + (Ge = console.debug) == null || Ge.call(console, Je); } } const Ke = () => { - var tt, st, Vt, Bt, Rt, Ct, zt, gt, mn; - const ae = (wt) => { + var et, mt, Lt, Tt, Ot, Ct, gn, pt, zt; + const re = (ht) => { var on; try { - wt && wt.replaceChildren(); - } catch (rn) { - (on = console.debug) == null || on.call(console, rn); + ht && ht.replaceChildren(); + } catch (an) { + (on = console.debug) == null || on.call(console, an); } }; - ae(W), ae(X); - const he = (wt, { showName: on } = {}) => { - var An, vn, un, Mn; - if (!wt) return null; - const rn = document.createElement("div"); - rn.className = "mjr-viewer-asset-pill", rn.style.cssText = ` + re(Z), re(X); + const Ie = (ht, { showName: on } = {}) => { + var Wn, Yn, In, Gn; + if (!ht) return null; + const an = document.createElement("div"); + an.className = "mjr-viewer-asset-pill", an.style.cssText = ` display: inline-flex; align-items: center; gap: 8px; @@ -21396,247 +21423,247 @@ function uW() { overflow: hidden; `; const hn = document.createElement("span"); - hn.textContent = String(wt.filename || ""), hn.style.cssText = "max-width:200px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; opacity:0.95;"; - const ln = bZ( - wt.filename, - wt.kind, - !!(wt != null && wt._mjrNameCollision) + hn.textContent = String(ht.filename || ""), hn.style.cssText = "max-width:200px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; opacity:0.95;"; + const cn = bZ( + ht.filename, + ht.kind, + !!(ht != null && ht._mjrNameCollision) ); try { - ln.style.position = "static", ln.style.top = "", ln.style.left = "", ln.style.padding = "2px 6px", ln.style.fontSize = "10px", ln.style.borderRadius = "6px", ln.style.pointerEvents = "none"; - } catch (yn) { - (An = console.debug) == null || An.call(console, yn); + cn.style.position = "static", cn.style.top = "", cn.style.left = "", cn.style.padding = "2px 6px", cn.style.fontSize = "10px", cn.style.borderRadius = "6px", cn.style.pointerEvents = "none"; + } catch (fn) { + (Wn = console.debug) == null || Wn.call(console, fn); } - const gn = Ya(wt.rating || 0); - if (gn) + const bn = Xa(ht.rating || 0); + if (bn) try { - gn.style.position = "static", gn.style.top = "", gn.style.right = "", gn.style.padding = "2px 6px", gn.style.fontSize = "12px"; - } catch (yn) { - (vn = console.debug) == null || vn.call(console, yn); + bn.style.position = "static", bn.style.top = "", bn.style.right = "", bn.style.padding = "2px 6px", bn.style.fontSize = "12px"; + } catch (fn) { + (Yn = console.debug) == null || Yn.call(console, fn); } - const nn = JI(Array.isArray(wt.tags) ? wt.tags : []); - if (nn) + const ln = JI(Array.isArray(ht.tags) ? ht.tags : []); + if (ln) try { - nn.style.position = "static", nn.style.bottom = "", nn.style.left = "", nn.style.maxWidth = "220px", nn.style.pointerEvents = "none"; - } catch (yn) { - (un = console.debug) == null || un.call(console, yn); + ln.style.position = "static", ln.style.bottom = "", ln.style.left = "", ln.style.maxWidth = "220px", ln.style.pointerEvents = "none"; + } catch (fn) { + (In = console.debug) == null || In.call(console, fn); } - rn.appendChild(ln), on && rn.appendChild(hn), gn && rn.appendChild(gn), nn && nn.style.display !== "none" && rn.appendChild(nn); + an.appendChild(cn), on && an.appendChild(hn), bn && an.appendChild(bn), ln && ln.style.display !== "none" && an.appendChild(ln); try { - wt.filepath && (rn.title = String(wt.filepath)); - } catch (yn) { - (Mn = console.debug) == null || Mn.call(console, yn); + ht.filepath && (an.title = String(ht.filepath)); + } catch (fn) { + (Gn = console.debug) == null || Gn.call(console, fn); } - return rn; - }, ve = i.mode === jt.SINGLE, Fe = i.mode === jt.AB_COMPARE && nt(), _e = i.mode === jt.SIDE_BY_SIDE && ut(); - if ((Fe || _e) && X) { - const wt = ((tt = i.assets) == null ? void 0 : tt[i.currentIndex]) || null, on = _e && i.compareAsset != null, rn = Fe ? i.compareAsset != null ? wt : ((st = i.assets) == null ? void 0 : st[0]) || null : on ? wt : ((Vt = i.assets) == null ? void 0 : Vt[0]) || null, hn = Fe ? i.compareAsset != null ? i.compareAsset : ((Bt = i.assets) == null ? void 0 : Bt[1]) || null : on ? i.compareAsset : ((Ct = i.assets) == null ? void 0 : Ct[Math.max(0, (((Rt = i.assets) == null ? void 0 : Rt.length) || 1) - 1)]) || null, ln = he(rn, { showName: !1 }), gn = he(hn, { showName: !1 }); + return an; + }, Ge = i.mode === jt.SINGLE, Je = i.mode === jt.AB_COMPARE && lt(), _e = i.mode === jt.SIDE_BY_SIDE && wt(); + if ((Je || _e) && X) { + const ht = ((et = i.assets) == null ? void 0 : et[i.currentIndex]) || null, on = _e && i.compareAsset != null, an = Je ? i.compareAsset != null ? ht : ((mt = i.assets) == null ? void 0 : mt[0]) || null : on ? ht : ((Lt = i.assets) == null ? void 0 : Lt[0]) || null, hn = Je ? i.compareAsset != null ? i.compareAsset : ((Tt = i.assets) == null ? void 0 : Tt[1]) || null : on ? i.compareAsset : ((Ct = i.assets) == null ? void 0 : Ct[Math.max(0, (((Ot = i.assets) == null ? void 0 : Ot.length) || 1) - 1)]) || null, cn = Ie(an, { showName: !1 }), bn = Ie(hn, { showName: !1 }); try { - ln && W.appendChild(ln); - } catch (nn) { - (zt = console.debug) == null || zt.call(console, nn); + cn && Z.appendChild(cn); + } catch (ln) { + (gn = console.debug) == null || gn.call(console, ln); } try { - gn && X.appendChild(gn); - } catch (nn) { - (gt = console.debug) == null || gt.call(console, nn); + bn && X.appendChild(bn); + } catch (ln) { + (pt = console.debug) == null || pt.call(console, ln); } return; } - const et = ve ? [i.assets[i.currentIndex]].filter(Boolean) : Array.isArray(i.assets) ? i.assets.slice(0, 4) : []; - for (const wt of et) { - const on = he(wt, { showName: !ve }); + const Qe = Ge ? [i.assets[i.currentIndex]].filter(Boolean) : Array.isArray(i.assets) ? i.assets.slice(0, 4) : []; + for (const ht of Qe) { + const on = Ie(ht, { showName: !Ge }); if (on) try { - W.appendChild(on); - } catch (rn) { - (mn = console.debug) == null || mn.call(console, rn); + Z.appendChild(on); + } catch (an) { + (zt = console.debug) == null || zt.call(console, an); } } }; - function nt() { - return (i.assets.length === 2 || i.compareAsset != null) && !se(); + function lt() { + return (i.assets.length === 2 || i.compareAsset != null) && !de(); } - function ut() { - const ae = i.assets.length; - return ae >= 2 && ae <= 4 || ae >= 1 && i.compareAsset != null; + function wt() { + const re = i.assets.length; + return re >= 2 && re <= 4 || re >= 1 && i.compareAsset != null; } - function It() { - var he, ve, Fe, _e; - const ae = !!(i != null && i.distractionFree); + function at() { + var Ie, Ge, Je, _e; + const re = !!(i != null && i.distractionFree); try { - h.style.display = ae ? "none" : ""; - } catch (et) { - (he = console.debug) == null || he.call(console, et); + C.style.display = re ? "none" : ""; + } catch (Qe) { + (Ie = console.debug) == null || Ie.call(console, Qe); } try { - ee.style.display = ae ? "none" : ""; - } catch (et) { - (ve = console.debug) == null || ve.call(console, et); + ee.style.display = re ? "none" : ""; + } catch (Qe) { + (Ge = console.debug) == null || Ge.call(console, Qe); } try { - e.classList.toggle("mjr-viewer-focus", ae); - } catch (et) { - (Fe = console.debug) == null || Fe.call(console, et); + e.classList.toggle("mjr-viewer-focus", re); + } catch (Qe) { + (Je = console.debug) == null || Je.call(console, Qe); } try { - ae && (e.style.paddingRight = "0px", e.style.paddingLeft = "0px", oe.style.display = "none", O.style.display = "none"); - } catch (et) { - (_e = console.debug) == null || _e.call(console, et); + re && (e.style.paddingRight = "0px", e.style.paddingLeft = "0px", ne.style.display = "none", F.style.display = "none"); + } catch (Qe) { + (_e = console.debug) == null || _e.call(console, Qe); } } - function dt() { - var Vt, Bt, Rt, Ct, zt, gt, mn, wt, on, rn, hn, ln, gn, nn, An, vn, un, Mn, yn; + function tt() { + var Lt, Tt, Ot, Ct, gn, pt, zt, ht, on, an, hn, cn, bn, ln, Wn, Yn, In, Gn, fn; i.zoom = 1, i.panX = 0, i.panY = 0, i.targetZoom = 1; try { i.mode !== jt.AB_COMPARE && i.mode !== jt.SIDE_BY_SIDE && i.compareAsset != null && (i.compareAsset = null); - } catch (Ut) { - (Vt = console.debug) == null || Vt.call(console, Ut); + } catch (Kt) { + (Lt = console.debug) == null || Lt.call(console, Kt); } - const ae = i.assets[i.currentIndex], he = i.mode === jt.AB_COMPARE && nt(), ve = i.mode === jt.SIDE_BY_SIDE && ut(), Fe = he && i.compareAsset != null, _e = ve && i.compareAsset != null, et = he ? (Fe ? ae : (Bt = i.assets) == null ? void 0 : Bt[0]) || null : ve ? (_e ? ae : (Rt = i.assets) == null ? void 0 : Rt[0]) || null : ae || null, tt = he ? (Fe ? i.compareAsset : (Ct = i.assets) == null ? void 0 : Ct[1]) || null : ve ? _e ? i.compareAsset : Array.isArray(i.assets) && i.assets.length >= 2 ? i.assets[i.assets.length - 1] : null : null; + const re = i.assets[i.currentIndex], Ie = i.mode === jt.AB_COMPARE && lt(), Ge = i.mode === jt.SIDE_BY_SIDE && wt(), Je = Ie && i.compareAsset != null, _e = Ge && i.compareAsset != null, Qe = Ie ? (Je ? re : (Tt = i.assets) == null ? void 0 : Tt[0]) || null : Ge ? (_e ? re : (Ot = i.assets) == null ? void 0 : Ot[0]) || null : re || null, et = Ie ? (Je ? i.compareAsset : (Ct = i.assets) == null ? void 0 : Ct[1]) || null : Ge ? _e ? i.compareAsset : Array.isArray(i.assets) && i.assets.length >= 2 ? i.assets[i.assets.length - 1] : null : null; try { - G.textContent = (et == null ? void 0 : et.filename) || ""; - } catch (Ut) { - (zt = console.debug) == null || zt.call(console, Ut); + G.textContent = (Qe == null ? void 0 : Qe.filename) || ""; + } catch (Kt) { + (gn = console.debug) == null || gn.call(console, Kt); } try { - x && f && tt && tt !== et ? (x.style.display = "flex", T && (T.style.display = "flex"), f.textContent = (tt == null ? void 0 : tt.filename) || "", v && w && Y && (v.style.display = "flex", w.appendChild(Y), Y.style.justifyContent = "flex-start"), V && (V.style.justifyContent = "center", V.style.paddingLeft = "84px"), R && (R.style.flex = "0 0 auto"), F && (F.style.flex = "0 0 auto"), G && (G.style.textAlign = "left")) : x && f && (x.style.display = "none", T && (T.style.display = "none"), f.textContent = "", v && (v.style.display = "none"), F && Y && N && (F.insertBefore(Y, N), Y.style.justifyContent = "center"), V && (V.style.justifyContent = "center", V.style.paddingLeft = "12px"), R && (R.style.flex = "1 1 auto"), F && (F.style.flex = ""), G && (G.style.textAlign = "center")); - } catch (Ut) { - (gt = console.debug) == null || gt.call(console, Ut); + x && f && et && et !== Qe ? (x.style.display = "flex", K && (K.style.display = "flex"), f.textContent = (et == null ? void 0 : et.filename) || "", j && w && V && (j.style.display = "flex", w.appendChild(V), V.style.justifyContent = "flex-start"), Y && (Y.style.justifyContent = "center", Y.style.paddingLeft = "84px"), R && (R.style.flex = "0 0 auto"), O && (O.style.flex = "0 0 auto"), G && (G.style.textAlign = "left")) : x && f && (x.style.display = "none", K && (K.style.display = "none"), f.textContent = "", j && (j.style.display = "none"), O && V && k && (O.insertBefore(V, k), V.style.justifyContent = "center"), Y && (Y.style.justifyContent = "center", Y.style.paddingLeft = "12px"), R && (R.style.flex = "1 1 auto"), O && (O.style.flex = ""), G && (G.style.textAlign = "center")); + } catch (Kt) { + (pt = console.debug) == null || pt.call(console, Kt); } - i.mode === jt.AB_COMPARE && nt() ? ue.textContent = "2 selected" : i.mode === jt.SIDE_BY_SIDE && ut() ? ue.textContent = i.compareAsset != null ? "2 selected" : `${i.assets.length} selected` : ue.textContent = `${i.currentIndex + 1} / ${i.assets.length}`, i.mode === jt.AB_COMPARE && !nt() && (i.mode = ut() ? jt.SIDE_BY_SIDE : jt.SINGLE), i.mode === jt.SIDE_BY_SIDE && !ut() && (i.mode = jt.SINGLE); + i.mode === jt.AB_COMPARE && lt() ? ue.textContent = "2 selected" : i.mode === jt.SIDE_BY_SIDE && wt() ? ue.textContent = i.compareAsset != null ? "2 selected" : `${i.assets.length} selected` : ue.textContent = `${i.currentIndex + 1} / ${i.assets.length}`, i.mode === jt.AB_COMPARE && !lt() && (i.mode = wt() ? jt.SIDE_BY_SIDE : jt.SINGLE), i.mode === jt.SIDE_BY_SIDE && !wt() && (i.mode = jt.SINGLE); try { - (mn = b == null ? void 0 : b.syncModeButtons) == null || mn.call(b, { canAB: nt, canSide: ut }); - } catch (Ut) { - (wt = console.debug) == null || wt.call(console, Ut); + (zt = b == null ? void 0 : b.syncModeButtons) == null || zt.call(b, { canAB: lt, canSide: wt }); + } catch (Kt) { + (ht = console.debug) == null || ht.call(console, Kt); } - z.style.display = i.mode === jt.SINGLE ? "flex" : "none", B.style.display = i.mode === jt.AB_COMPARE ? "block" : "none", J.style.display = i.mode === jt.SIDE_BY_SIDE ? "flex" : "none"; + z.style.display = i.mode === jt.SINGLE ? "flex" : "none", T.style.display = i.mode === jt.AB_COMPARE ? "block" : "none", J.style.display = i.mode === jt.SIDE_BY_SIDE ? "flex" : "none"; try { i.mode !== jt.SINGLE && (di(z), z.replaceChildren()); - } catch (Ut) { - (on = console.debug) == null || on.call(console, Ut); + } catch (Kt) { + (on = console.debug) == null || on.call(console, Kt); } try { - i.mode !== jt.AB_COMPARE && (di(B), B.replaceChildren()); - } catch (Ut) { - (rn = console.debug) == null || rn.call(console, Ut); + i.mode !== jt.AB_COMPARE && (di(T), T.replaceChildren()); + } catch (Kt) { + (an = console.debug) == null || an.call(console, Kt); } try { i.mode !== jt.SIDE_BY_SIDE && (di(J), J.replaceChildren()); - } catch (Ut) { - (hn = console.debug) == null || hn.call(console, Ut); + } catch (Kt) { + (hn = console.debug) == null || hn.call(console, Kt); } Ke(); - const st = i.mode === jt.AB_COMPARE && nt() || i.mode === jt.SIDE_BY_SIDE && ut(); + const mt = i.mode === jt.AB_COMPARE && lt() || i.mode === jt.SIDE_BY_SIDE && wt(); try { - ce.style.display = st ? "none" : "", U.style.display = st ? "none" : ""; - } catch (Ut) { - (ln = console.debug) == null || ln.call(console, Ut); + ae.style.display = mt ? "none" : "", B.style.display = mt ? "none" : ""; + } catch (Kt) { + (cn = console.debug) == null || cn.call(console, Kt); } - Re(), Wt(i.assets, i.currentIndex), yt(); + Oe(), Rt(i.assets, i.currentIndex), dt(); try { - (gn = b == null ? void 0 : b.syncToolsUIFromState) == null || gn.call(b); - } catch (Ut) { - (nn = console.debug) == null || nn.call(console, Ut); + (bn = b == null ? void 0 : b.syncToolsUIFromState) == null || bn.call(b); + } catch (Kt) { + (ln = console.debug) == null || ln.call(console, Kt); } try { - It(); - } catch (Ut) { - (An = console.debug) == null || An.call(console, Ut); + at(); + } catch (Kt) { + (Wn = console.debug) == null || Wn.call(console, Kt); } try { - pe == null || pe(); - } catch (Ut) { - (vn = console.debug) == null || vn.call(console, Ut); + ye == null || ye(); + } catch (Kt) { + (Yn = console.debug) == null || Yn.call(console, Kt); } - Oe(); + rt(); try { - Ot(); - } catch (Ut) { - (un = console.debug) == null || un.call(console, Ut); + Pt(); + } catch (Kt) { + (In = console.debug) == null || In.call(console, Kt); } try { qe().then(() => { - var Ut; + var Kt; try { Ke(); } catch (Jt) { - (Ut = console.debug) == null || Ut.call(console, Jt); + (Kt = console.debug) == null || Kt.call(console, Jt); } }); - } catch (Ut) { - (Mn = console.debug) == null || Mn.call(console, Ut); + } catch (Kt) { + (Gn = console.debug) == null || Gn.call(console, Kt); } try { - const Ut = i.mode === jt.SINGLE; - le.sync({ isSingle: Ut }); - } catch (Ut) { - (yn = console.debug) == null || yn.call(console, Ut); + const Kt = i.mode === jt.SINGLE; + le.sync({ isSingle: Kt }); + } catch (Kt) { + (fn = console.debug) == null || fn.call(console, Kt); } } - function Re() { - var ve, Fe, _e, et, tt; - const ae = i.assets[i.currentIndex]; - if (!ae) return; - const he = Ki(ae); - if (!he) { + function Oe() { + var Ge, Je, _e, Qe, et; + const re = i.assets[i.currentIndex]; + if (!re) return; + const Ie = Ui(re); + if (!Ie) { try { di(z); - } catch (st) { - (ve = console.debug) == null || ve.call(console, st); + } catch (mt) { + (Ge = console.debug) == null || Ge.call(console, mt); } try { z.replaceChildren(); - const st = document.createElement("div"); - st.className = "mjr-viewer-media", st.style.cssText = "color:#ff9a9a; font-size:13px; padding:16px; text-align:center;", st.textContent = "Cannot open asset: missing or invalid filename/path.", z.appendChild(st); - } catch (st) { - (Fe = console.debug) == null || Fe.call(console, st); + const mt = document.createElement("div"); + mt.className = "mjr-viewer-media", mt.style.cssText = "color:#ff9a9a; font-size:13px; padding:16px; text-align:center;", mt.textContent = "Cannot open asset: missing or invalid filename/path.", z.appendChild(mt); + } catch (mt) { + (Je = console.debug) == null || Je.call(console, mt); } return; } if (i.mode === jt.SINGLE) { try { di(z); - } catch (Vt) { - (_e = console.debug) == null || _e.call(console, Vt); + } catch (Lt) { + (_e = console.debug) == null || _e.call(console, Lt); } z.innerHTML = "", i._mediaW = 0, i._mediaH = 0; - const st = g(ae, he); - z.appendChild(st); - } else i.mode === jt.AB_COMPARE ? nt() && ((et = ko == null ? void 0 : ko.renderABCompareView) == null || et.call(ko, { - abView: B, + const mt = g(re, Ie); + z.appendChild(mt); + } else i.mode === jt.AB_COMPARE ? lt() && ((Qe = Xo == null ? void 0 : Xo.renderABCompareView) == null || Qe.call(Xo, { + abView: T, state: i, - currentAsset: ae, - viewUrl: he, - buildAssetViewURL: Ki, - createCompareMediaElement: A, + currentAsset: re, + viewUrl: Ie, + buildAssetViewURL: Ui, + createCompareMediaElement: y, destroyMediaProcessorsIn: di - })) : i.mode === jt.SIDE_BY_SIDE && ut() && ((tt = Xo == null ? void 0 : Xo.renderSideBySideView) == null || tt.call(Xo, { + })) : i.mode === jt.SIDE_BY_SIDE && wt() && ((et = No == null ? void 0 : No.renderSideBySideView) == null || et.call(No, { sideView: J, state: i, - currentAsset: ae, - viewUrl: he, - buildAssetViewURL: Ki, + currentAsset: re, + viewUrl: Ie, + buildAssetViewURL: Ui, createMediaElement: g, destroyMediaProcessorsIn: di })); s(), u(); } const { - preloadAdjacentAssets: Wt + preloadAdjacentAssets: Rt } = qA({ - buildAssetViewURL: Ki, + buildAssetViewURL: Ui, IMAGE_PRELOAD_EXTENSIONS: o, state: i - }), { destroyPlayerBar: lt, syncPlayerBar: qt } = QA({ + }), { destroyPlayerBar: nt, syncPlayerBar: Mt } = QA({ state: i, - APP_CONFIG: fe, + APP_CONFIG: he, VIEWER_MODES: jt, overlay: e, navBar: Q, playerBarHost: _, singleView: z, - abView: B, + abView: T, sideView: J, metadataHydrator: ge, isPlayableViewerKind: QZ, @@ -21645,227 +21672,227 @@ function uW() { mountUnifiedMediaControls: eA, installFollowerVideoSync: mA, getViewerInfo: Dg, - scheduleOverlayRedraw: Oe, - viewerInfoCacheGet: Je, - viewerInfoCacheSet: $e - }), yt = () => qt(), mt = fe.VIEWER_MAX_PROC_PIXELS ?? 12e6, kt = () => ({ + scheduleOverlayRedraw: rt, + viewerInfoCacheGet: Fe, + viewerInfoCacheSet: it + }), dt = () => Mt(), bt = he.VIEWER_MAX_PROC_PIXELS ?? 12e6, Yt = () => ({ exposureEV: Number(i.exposureEV) || 0, gamma: Math.max(0.1, Math.min(3, Number(i.gamma) || 1)), channel: i.channel || "rgb", analysisMode: i.analysisMode || "none", zebraThreshold: Math.max(0, Math.min(1, Number(i.zebraThreshold) || 0.95)) }), $t = () => { - var he, ve, Fe, _e; - const ae = kt(); + var Ie, Ge, Je, _e; + const re = Yt(); try { - const et = e.querySelectorAll(".mjr-viewer-media"); - for (const tt of et) + const Qe = e.querySelectorAll(".mjr-viewer-media"); + for (const et of Qe) try { - const st = tt == null ? void 0 : tt._mjrProc; - st != null && st.setParams && st.setParams(ae); - } catch (st) { - (he = console.debug) == null || he.call(console, st); + const mt = et == null ? void 0 : et._mjrProc; + mt != null && mt.setParams && mt.setParams(re); + } catch (mt) { + (Ie = console.debug) == null || Ie.call(console, mt); } - } catch (et) { - (ve = console.debug) == null || ve.call(console, et); + } catch (Qe) { + (Ge = console.debug) == null || Ge.call(console, Qe); } try { - (i == null ? void 0 : i.mode) === jt.AB_COMPARE && ((Fe = B == null ? void 0 : B._mjrDiffRequest) == null || Fe.call(B)); - } catch (et) { - (_e = console.debug) == null || _e.call(console, et); + (i == null ? void 0 : i.mode) === jt.AB_COMPARE && ((Je = T == null ? void 0 : T._mjrDiffRequest) == null || Je.call(T)); + } catch (Qe) { + (_e = console.debug) == null || _e.call(console, Qe); } - }, Tt = (ae) => { + }, nn = (re) => { try { - if (!ae) return !0; - const he = Number(ae.exposureEV) || 0, ve = Number(ae.gamma) || 1, Fe = String(ae.channel || "rgb"), _e = String(ae.analysisMode || "none"); - return Math.abs(he) < 1e-4 && Math.abs(ve - 1) < 1e-4 && Fe === "rgb" && _e === "none"; + if (!re) return !0; + const Ie = Number(re.exposureEV) || 0, Ge = Number(re.gamma) || 1, Je = String(re.channel || "rgb"), _e = String(re.analysisMode || "none"); + return Math.abs(Ie) < 1e-4 && Math.abs(Ge - 1) < 1e-4 && Je === "rgb" && _e === "none"; } catch { return !0; } - }, te = fe.VIEWER_MAX_PROC_PIXELS_VIDEO ?? 3e6, ye = fe.VIEWER_VIDEO_GRADE_THROTTLE_FPS ?? 15; + }, ie = he.VIEWER_MAX_PROC_PIXELS_VIDEO ?? 3e6, pe = he.VIEWER_VIDEO_GRADE_THROTTLE_FPS ?? 15; try { - l = HA({ + l = EA({ overlay: e, state: i, mediaTransform: a, - updateMediaNaturalSize: C, + updateMediaNaturalSize: W, clampPanToBounds: c, applyTransform: s, - scheduleOverlayRedraw: Oe, - getGradeParams: kt, - isDefaultGrade: Tt, + scheduleOverlayRedraw: rt, + getGradeParams: Yt, + isDefaultGrade: nn, tonemap: null, - maxProcPixels: mt, - maxProcPixelsVideo: te, - disableWebGL: !!fe.VIEWER_DISABLE_WEBGL_VIDEO, - videoGradeThrottleFps: ye, - safeAddListener: Qe, - safeCall: bt + maxProcPixels: bt, + maxProcPixelsVideo: ie, + disableWebGL: !!he.VIEWER_DISABLE_WEBGL_VIDEO, + videoGradeThrottleFps: pe, + safeAddListener: $e, + safeCall: It }); } catch { l = null; } n.push( - Qe(ce, "click", () => { - i.currentIndex > 0 && (i.currentIndex--, dt()); + $e(ae, "click", () => { + i.currentIndex > 0 && (i.currentIndex--, tt()); }) ), n.push( - Qe(U, "click", () => { - i.currentIndex < i.assets.length - 1 && (i.currentIndex++, dt()); + $e(B, "click", () => { + i.currentIndex < i.assets.length - 1 && (i.currentIndex++, tt()); }) ); - let We = null; - const pe = () => { - var ae; + let Ce = null; + const ye = () => { + var re; try { - if (We != null) return; - We = requestAnimationFrame(() => { - var he; - We = null; + if (Ce != null) return; + Ce = requestAnimationFrame(() => { + var Ie; + Ce = null; try { $t(); - } catch (ve) { - (he = console.debug) == null || he.call(console, ve); + } catch (Ge) { + (Ie = console.debug) == null || Ie.call(console, Ge); } }); - } catch (he) { - (ae = console.debug) == null || ae.call(console, he); + } catch (Ie) { + (re = console.debug) == null || re.call(console, Ie); } }, De = () => { - var ae, he; + var re, Ie; try { - (ae = b == null ? void 0 : b.syncToolsUIFromState) == null || ae.call(b); - } catch (ve) { - (he = console.debug) == null || he.call(console, ve); + (re = b == null ? void 0 : b.syncToolsUIFromState) == null || re.call(b); + } catch (Ge) { + (Ie = console.debug) == null || Ie.call(console, Ge); } - }, ot = (ae) => { + }, ut = (re) => { if (!Array.isArray(i.assets) || i.assets.length === 0) return !1; - const he = i.currentIndex + ae; - return he < 0 || he >= i.assets.length ? !1 : (i.currentIndex = he, dt(), !0); - }, Zt = (ae) => { - var et, tt, st, Vt, Bt, Rt; + const Ie = i.currentIndex + re; + return Ie < 0 || Ie >= i.assets.length ? !1 : (i.currentIndex = Ie, tt(), !0); + }, At = (re) => { + var Qe, et, mt, Lt, Tt, Ot; if (e.style.display === "none") return; try { - const Ct = ae.target; + const Ct = re.target; if (Ct && (Ct.tagName === "INPUT" || Ct.tagName === "TEXTAREA" || Ct.tagName === "SELECT" || Ct.isContentEditable)) return; + } catch (Ct) { + (Qe = console.debug) == null || Qe.call(console, Ct); + } + try { + if (!U.contains(re.target)) return; } catch (Ct) { (et = console.debug) == null || et.call(console, Ct); } try { - if (!K.contains(ae.target)) return; + if ((mt = ti == null ? void 0 : ti.isModel3DInteractionTarget) != null && mt.call(ti, re == null ? void 0 : re.target)) return; } catch (Ct) { - (tt = console.debug) == null || tt.call(console, Ct); + (Lt = console.debug) == null || Lt.call(console, Ct); } try { - if ((st = ti == null ? void 0 : ti.isModel3DInteractionTarget) != null && st.call(ti, ae == null ? void 0 : ae.target)) return; + re.preventDefault(), re.stopPropagation(), (Tt = re.stopImmediatePropagation) == null || Tt.call(re); } catch (Ct) { - (Vt = console.debug) == null || Vt.call(console, Ct); + (Ot = console.debug) == null || Ot.call(console, Ct); } + const Ie = Number(re.deltaX) || 0, Ge = Number(re.deltaY) || 0; + if (re.shiftKey && Ge) { + const Ct = Ge > 0 ? 1 : -1; + if (ut(Ct)) return; + } + if (Math.abs(Ie) > Math.abs(Ge) && Math.abs(Ie) > 30) { + const Ct = Ie > 0 ? 1 : -1; + if (ut(Ct)) return; + } + if (!Ge) return; + const Je = Math.exp(-Ge * 15e-4), _e = (Number(i.zoom) || 1) * Je; + d(_e, { clientX: re.clientX, clientY: re.clientY }); + }, Ht = (re, Ie, Ge, { offsetX: Je = 16, offsetY: _e = 16 } = {}) => { + var Qe; try { - ae.preventDefault(), ae.stopPropagation(), (Bt = ae.stopImmediatePropagation) == null || Bt.call(ae); - } catch (Ct) { - (Rt = console.debug) == null || Rt.call(console, Ct); + const et = h(); + if (!et) return; + const mt = U.getBoundingClientRect(), Lt = (Number(Ie) || 0) - mt.left, Tt = (Number(Ge) || 0) - mt.top, Ot = Number(re.offsetWidth) || 0, Ct = Number(re.offsetHeight) || 0; + let gn = Lt + Je, pt = Tt + _e; + const zt = 10; + gn = Math.max(zt, Math.min(gn, et.width - Ot - zt)), pt = Math.max(zt, Math.min(pt, et.height - Ct - zt)), re.style.left = `${Math.round(gn)}px`, re.style.top = `${Math.round(pt)}px`; + } catch (et) { + (Qe = console.debug) == null || Qe.call(console, et); } - const he = Number(ae.deltaX) || 0, ve = Number(ae.deltaY) || 0; - if (ae.shiftKey && ve) { - const Ct = ve > 0 ? 1 : -1; - if (ot(Ct)) return; - } - if (Math.abs(he) > Math.abs(ve) && Math.abs(he) > 30) { - const Ct = he > 0 ? 1 : -1; - if (ot(Ct)) return; - } - if (!ve) return; - const Fe = Math.exp(-ve * 15e-4), _e = (Number(i.zoom) || 1) * Fe; - d(_e, { clientX: ae.clientX, clientY: ae.clientY }); - }, tn = (ae, he, ve, { offsetX: Fe = 16, offsetY: _e = 16 } = {}) => { - var et; - try { - const tt = S(); - if (!tt) return; - const st = K.getBoundingClientRect(), Vt = (Number(he) || 0) - st.left, Bt = (Number(ve) || 0) - st.top, Rt = Number(ae.offsetWidth) || 0, Ct = Number(ae.offsetHeight) || 0; - let zt = Vt + Fe, gt = Bt + _e; - const mn = 10; - zt = Math.max(mn, Math.min(zt, tt.width - Rt - mn)), gt = Math.max(mn, Math.min(gt, tt.height - Ct - mn)), ae.style.left = `${Math.round(zt)}px`, ae.style.top = `${Math.round(gt)}px`; - } catch (tt) { - (et = console.debug) == null || et.call(console, tt); - } - }, Pt = bA({ + }, Qt = bA({ state: i, - loupeCanvas: E, + loupeCanvas: H, loupeWrap: $, - getMediaNaturalSize: y, - positionOverlayBox: tn - }), vt = IA({ + getMediaNaturalSize: A, + positionOverlayBox: Ht + }), xt = IA({ overlay: e, - content: K, + content: U, state: i, VIEWER_MODES: jt, getPrimaryMedia: I, - getMediaNaturalSize: y, - getViewportRect: S, - positionOverlayBox: tn, - probeTooltip: H, + getMediaNaturalSize: A, + getViewportRect: h, + positionOverlayBox: Ht, + probeTooltip: E, loupeWrap: $, - onLoupeRedraw: Pt.redraw, + onLoupeRedraw: Qt.redraw, lifecycle: t }); try { - if (!K._mjrOverlayResizeBound && "ResizeObserver" in window) { + if (!U._mjrOverlayResizeBound && "ResizeObserver" in window) { try { - (Yn = (Qt = e._mjrResizeObserver) == null ? void 0 : Qt.disconnect) == null || Yn.call(Qt); - } catch (he) { - (wn = console.debug) == null || wn.call(console, he); + (Xt = (_t = e._mjrResizeObserver) == null ? void 0 : _t.disconnect) == null || Xt.call(_t); + } catch (Ie) { + (tn = console.debug) == null || tn.call(console, Ie); } - const ae = new ResizeObserver(() => { - var he; + const re = new ResizeObserver(() => { + var Ie; try { i._viewportCache = null; - } catch (ve) { - (he = console.debug) == null || he.call(console, ve); + } catch (Ge) { + (Ie = console.debug) == null || Ie.call(console, Ge); } - Oe(); + rt(); }); try { - ae.observe(K); - } catch (he) { - (xn = console.debug) == null || xn.call(console, he); + re.observe(U); + } catch (Ie) { + (Ln = console.debug) == null || Ln.call(console, Ie); } - e._mjrResizeObserver = ae, n.push(() => { - var he; + e._mjrResizeObserver = re, n.push(() => { + var Ie; try { - ae.disconnect(); - } catch (ve) { - (he = console.debug) == null || he.call(console, ve); + re.disconnect(); + } catch (Ge) { + (Ie = console.debug) == null || Ie.call(console, Ge); } - }), K._mjrOverlayResizeBound = !0; + }), U._mjrOverlayResizeBound = !0; } - } catch (ae) { - (en = console.debug) == null || en.call(console, ae); + } catch (re) { + (Mn = console.debug) == null || Mn.call(console, re); } - const re = dA({ + const Gt = dA({ overlay: e, - content: K, + content: U, singleView: z, state: i, VIEWER_MODES: jt, - computeOneToOneZoom: Z, + computeOneToOneZoom: S, setZoom: d, - scheduleOverlayRedraw: Oe, - scheduleApplyGrade: pe, + scheduleOverlayRedraw: rt, + scheduleApplyGrade: ye, syncToolsUIFromState: De, - applyDistractionFreeUI: It, - navigateViewerAssets: ot, - closeViewer: He, + applyDistractionFreeUI: at, + navigateViewerAssets: ut, + closeViewer: fe, renderBadges: Ke, - updateAssetRating: Ho, + updateAssetRating: Eo, safeDispatchCustomEvent: oi, - ASSET_RATING_CHANGED_EVENT: Fi, - probeTooltip: H, + ASSET_RATING_CHANGED_EVENT: Oi, + probeTooltip: E, loupeWrap: $, - renderGenInfoPanel: Ot, + renderGenInfoPanel: Pt, getVideoControls: () => { try { return (i == null ? void 0 : i._videoControlsMounted) || null; @@ -21875,239 +21902,239 @@ function uW() { }, lifecycle: t }); - let ne = []; - const Ie = () => { - var ae, he, ve; + let je = []; + const oe = () => { + var re, Ie, Ge; try { - for (const Fe of ne) bt(Fe); - } catch (Fe) { - (ae = console.debug) == null || ae.call(console, Fe); + for (const Je of je) It(Je); + } catch (Je) { + (re = console.debug) == null || re.call(console, Je); } - ne = []; + je = []; try { - (he = re == null ? void 0 : re.unbind) == null || he.call(re); - } catch (Fe) { - (ve = console.debug) == null || ve.call(console, Fe); + (Ie = Gt == null ? void 0 : Gt.unbind) == null || Ie.call(Gt); + } catch (Je) { + (Ge = console.debug) == null || Ge.call(console, Je); } - }, Ne = () => { - var ae, he, ve, Fe, _e, et; - Ie(); + }, se = () => { + var re, Ie, Ge, Je, _e, Qe; + oe(); try { - ne.push( - Qe(e, "click", (tt) => { - var st; + je.push( + $e(e, "click", (et) => { + var mt; try { - if (tt.target !== e) return; - } catch (Vt) { - (st = console.debug) == null || st.call(console, Vt); + if (et.target !== e) return; + } catch (Lt) { + (mt = console.debug) == null || mt.call(console, Lt); } - He(); + fe(); }) ); - } catch (tt) { - (ae = console.debug) == null || ae.call(console, tt); + } catch (et) { + (re = console.debug) == null || re.call(console, et); } try { - ne.push( - Qe(K, "wheel", Zt, { passive: !1, capture: !0 }) + je.push( + $e(U, "wheel", At, { passive: !1, capture: !0 }) ); - } catch (tt) { - (he = console.debug) == null || he.call(console, tt); + } catch (et) { + (Ie = console.debug) == null || Ie.call(console, et); } try { - let tt = null; - const st = 60, Vt = 80; - ne.push( - Qe(K, "touchstart", (Bt) => { - var Rt, Ct; + let et = null; + const mt = 60, Lt = 80; + je.push( + $e(U, "touchstart", (Tt) => { + var Ot, Ct; try { - if (((Rt = Bt.touches) == null ? void 0 : Rt.length) !== 1) return; - const zt = Bt.touches[0]; - tt = { x: zt.clientX, y: zt.clientY, t: Date.now() }; - } catch (zt) { - (Ct = console.debug) == null || Ct.call(console, zt); + if (((Ot = Tt.touches) == null ? void 0 : Ot.length) !== 1) return; + const gn = Tt.touches[0]; + et = { x: gn.clientX, y: gn.clientY, t: Date.now() }; + } catch (gn) { + (Ct = console.debug) == null || Ct.call(console, gn); } }, { passive: !0 }) - ), ne.push( - Qe(K, "touchend", (Bt) => { - var Rt, Ct; + ), je.push( + $e(U, "touchend", (Tt) => { + var Ot, Ct; try { - if (!tt) return; - if (((Rt = Bt.changedTouches) == null ? void 0 : Rt.length) !== 1) { - tt = null; + if (!et) return; + if (((Ot = Tt.changedTouches) == null ? void 0 : Ot.length) !== 1) { + et = null; return; } - const zt = Bt.changedTouches[0], gt = zt.clientX - tt.x, mn = zt.clientY - tt.y, wt = Date.now() - tt.t; - if (tt = null, wt > 600 || Math.abs(mn) > Vt) return; - if (Math.abs(gt) >= st) { - const on = gt < 0 ? 1 : -1; - ot(on); + const gn = Tt.changedTouches[0], pt = gn.clientX - et.x, zt = gn.clientY - et.y, ht = Date.now() - et.t; + if (et = null, ht > 600 || Math.abs(zt) > Lt) return; + if (Math.abs(pt) >= mt) { + const on = pt < 0 ? 1 : -1; + ut(on); } - } catch (zt) { - (Ct = console.debug) == null || Ct.call(console, zt); + } catch (gn) { + (Ct = console.debug) == null || Ct.call(console, gn); } }, { passive: !0 }) - ), ne.push( - Qe(K, "touchcancel", () => { - tt = null; + ), je.push( + $e(U, "touchcancel", () => { + et = null; }, { passive: !0 }) ); - } catch (tt) { - (ve = console.debug) == null || ve.call(console, tt); + } catch (et) { + (Ge = console.debug) == null || Ge.call(console, et); } try { - ne.push( - Qe( - K, + je.push( + $e( + U, "mousemove", - (tt) => { - var st; + (et) => { + var mt; try { - i._lastPointerX = tt.clientX, i._lastPointerY = tt.clientY; - } catch (Vt) { - (st = console.debug) == null || st.call(console, Vt); + i._lastPointerX = et.clientX, i._lastPointerY = et.clientY; + } catch (Lt) { + (mt = console.debug) == null || mt.call(console, Lt); } }, { passive: !0, capture: !0 } ) ); - } catch (tt) { - (Fe = console.debug) == null || Fe.call(console, tt); + } catch (et) { + (Je = console.debug) == null || Je.call(console, et); } try { - (_e = re == null ? void 0 : re.bind) == null || _e.call(re); - } catch (tt) { - (et = console.debug) == null || et.call(console, tt); + (_e = Gt == null ? void 0 : Gt.bind) == null || _e.call(Gt); + } catch (et) { + (Qe = console.debug) == null || Qe.call(console, et); } }; try { if (!e._mjrBadgeSyncBound) { - const ae = (ve) => { - var Fe, _e, et, tt, st; + const re = (Ge) => { + var Je, _e, Qe, et, mt; try { - const Vt = (Fe = ve == null ? void 0 : ve.detail) == null ? void 0 : Fe.assetId, Bt = (_e = ve == null ? void 0 : ve.detail) == null ? void 0 : _e.rating; - if (Vt == null) return; - for (const Rt of i.assets || []) - (Rt == null ? void 0 : Rt.id) != null && String(Rt.id) === String(Vt) && (Rt.rating = Bt); + const Lt = (Je = Ge == null ? void 0 : Ge.detail) == null ? void 0 : Je.assetId, Tt = (_e = Ge == null ? void 0 : Ge.detail) == null ? void 0 : _e.rating; + if (Lt == null) return; + for (const Ot of i.assets || []) + (Ot == null ? void 0 : Ot.id) != null && String(Ot.id) === String(Lt) && (Ot.rating = Tt); try { - (et = ge == null ? void 0 : ge.deleteCached) == null || et.call(ge, Vt); - } catch (Rt) { - (tt = console.debug) == null || tt.call(console, Rt); + (Qe = ge == null ? void 0 : ge.deleteCached) == null || Qe.call(ge, Lt); + } catch (Ot) { + (et = console.debug) == null || et.call(console, Ot); } Ke(); - } catch (Vt) { - (st = console.debug) == null || st.call(console, Vt); + } catch (Lt) { + (mt = console.debug) == null || mt.call(console, Lt); } - }, he = (ve) => { - var Fe, _e, et, tt, st; + }, Ie = (Ge) => { + var Je, _e, Qe, et, mt; try { - const Vt = (Fe = ve == null ? void 0 : ve.detail) == null ? void 0 : Fe.assetId, Bt = (_e = ve == null ? void 0 : ve.detail) == null ? void 0 : _e.tags; - if (Vt == null) return; - for (const Rt of i.assets || []) - (Rt == null ? void 0 : Rt.id) != null && String(Rt.id) === String(Vt) && (Rt.tags = Bt); + const Lt = (Je = Ge == null ? void 0 : Ge.detail) == null ? void 0 : Je.assetId, Tt = (_e = Ge == null ? void 0 : Ge.detail) == null ? void 0 : _e.tags; + if (Lt == null) return; + for (const Ot of i.assets || []) + (Ot == null ? void 0 : Ot.id) != null && String(Ot.id) === String(Lt) && (Ot.tags = Tt); try { - (et = ge == null ? void 0 : ge.deleteCached) == null || et.call(ge, Vt); - } catch (Rt) { - (tt = console.debug) == null || tt.call(console, Rt); + (Qe = ge == null ? void 0 : ge.deleteCached) == null || Qe.call(ge, Lt); + } catch (Ot) { + (et = console.debug) == null || et.call(console, Ot); } Ke(); - } catch (Vt) { - (st = console.debug) == null || st.call(console, Vt); + } catch (Lt) { + (mt = console.debug) == null || mt.call(console, Lt); } }; n.push( - Qe(window, Fi, ae, { + $e(window, Oi, re, { passive: !0 }) ), n.push( - Qe(window, Do, he, { passive: !0 }) + $e(window, Do, Ie, { passive: !0 }) ), e._mjrBadgeSyncBound = !0; } - } catch (ae) { - (Vn = console.debug) == null || Vn.call(console, ae); + } catch (re) { + (Xn = console.debug) == null || Xn.call(console, re); } - function He() { - var he, ve, Fe, _e, et, tt, st, Vt, Bt, Rt, Ct, zt, gt, mn, wt, on, rn, hn, ln, gn, nn, An, vn, un, Mn, yn, Ut, Jt, ro, lo, ao, hi, Ve, it, xt, an, sn, Bn, Yi, ki, Ji, ci, Ci, Yr, kr, Xr; + function fe() { + var Ie, Ge, Je, _e, Qe, et, mt, Lt, Tt, Ot, Ct, gn, pt, zt, ht, on, an, hn, cn, bn, ln, Wn, Yn, In, Gn, fn, Kt, Jt, ro, lo, ao, Ci, Ve, ot, St, sn, un, Kn, Vi, Xi, Ji, ci, hi, Vr, Xr, Nr; try { - i.distractionFree = !1, It(); - } catch (Ht) { - (he = console.debug) == null || he.call(console, Ht); + i.distractionFree = !1, at(); + } catch (Et) { + (Ie = console.debug) == null || Ie.call(console, Et); } try { - (ve = ge == null ? void 0 : ge.abort) == null || ve.call(ge); - } catch (Ht) { - (Fe = console.debug) == null || Fe.call(console, Ht); + (Ge = ge == null ? void 0 : ge.abort) == null || Ge.call(ge); + } catch (Et) { + (Je = console.debug) == null || Je.call(console, Et); } try { - lt(); - } catch (Ht) { - (_e = console.debug) == null || _e.call(console, Ht); + nt(); + } catch (Et) { + (_e = console.debug) == null || _e.call(console, Et); } try { - (tt = (et = i._scopesVideoAbort) == null ? void 0 : et.abort) == null || tt.call(et); - } catch (Ht) { - (st = console.debug) == null || st.call(console, Ht); + (et = (Qe = i._scopesVideoAbort) == null ? void 0 : Qe.abort) == null || et.call(Qe); + } catch (Et) { + (mt = console.debug) == null || mt.call(console, Et); } i._scopesVideoAbort = null; try { i._panHintTimer && clearTimeout(i._panHintTimer); - } catch (Ht) { - (Vt = console.debug) == null || Vt.call(console, Ht); + } catch (Et) { + (Lt = console.debug) == null || Lt.call(console, Et); } i._panHintTimer = null; try { i._panHintAt = 0; - } catch (Ht) { - (Bt = console.debug) == null || Bt.call(console, Ht); + } catch (Et) { + (Tt = console.debug) == null || Tt.call(console, Et); } try { - (Ct = (Rt = B == null ? void 0 : B._mjrSyncAbort) == null ? void 0 : Rt.abort) == null || Ct.call(Rt); - } catch (Ht) { - (zt = console.debug) == null || zt.call(console, Ht); + (Ct = (Ot = T == null ? void 0 : T._mjrSyncAbort) == null ? void 0 : Ot.abort) == null || Ct.call(Ot); + } catch (Et) { + (gn = console.debug) == null || gn.call(console, Et); } try { - (mn = (gt = B == null ? void 0 : B._mjrDiffAbort) == null ? void 0 : gt.abort) == null || mn.call(gt); - } catch (Ht) { - (wt = console.debug) == null || wt.call(console, Ht); + (zt = (pt = T == null ? void 0 : T._mjrDiffAbort) == null ? void 0 : pt.abort) == null || zt.call(pt); + } catch (Et) { + (ht = console.debug) == null || ht.call(console, Et); } try { - B._mjrSyncAbort = null; - } catch (Ht) { - (on = console.debug) == null || on.call(console, Ht); + T._mjrSyncAbort = null; + } catch (Et) { + (on = console.debug) == null || on.call(console, Et); } try { - B._mjrDiffAbort = null; - } catch (Ht) { - (rn = console.debug) == null || rn.call(console, Ht); + T._mjrDiffAbort = null; + } catch (Et) { + (an = console.debug) == null || an.call(console, Et); } try { - (ln = (hn = J == null ? void 0 : J._mjrSyncAbort) == null ? void 0 : hn.abort) == null || ln.call(hn); - } catch (Ht) { - (gn = console.debug) == null || gn.call(console, Ht); + (cn = (hn = J == null ? void 0 : J._mjrSyncAbort) == null ? void 0 : hn.abort) == null || cn.call(hn); + } catch (Et) { + (bn = console.debug) == null || bn.call(console, Et); } try { J._mjrSyncAbort = null; - } catch (Ht) { - (nn = console.debug) == null || nn.call(console, Ht); + } catch (Et) { + (ln = console.debug) == null || ln.call(console, Et); } try { - (vn = (An = B == null ? void 0 : B._mjrSliderAbort) == null ? void 0 : An.abort) == null || vn.call(An); - } catch (Ht) { - (un = console.debug) == null || un.call(console, Ht); + (Yn = (Wn = T == null ? void 0 : T._mjrSliderAbort) == null ? void 0 : Wn.abort) == null || Yn.call(Wn); + } catch (Et) { + (In = console.debug) == null || In.call(console, Et); } try { - B._mjrSliderAbort = null; - } catch (Ht) { - (Mn = console.debug) == null || Mn.call(console, Ht); + T._mjrSliderAbort = null; + } catch (Et) { + (Gn = console.debug) == null || Gn.call(console, Et); } try { - const Ht = (yn = e.querySelectorAll) == null ? void 0 : yn.call(e, "video, audio"); - if (Ht && Ht.length) - for (const $n of Ht) { + const Et = (fn = e.querySelectorAll) == null ? void 0 : fn.call(e, "video, audio"); + if (Et && Et.length) + for (const $n of Et) { try { $n.muted = !0; } catch (qn) { - (Ut = console.debug) == null || Ut.call(console, qn); + (Kt = console.debug) == null || Kt.call(console, qn); } try { (Jt = $n.pause) == null || Jt.call($n); @@ -22122,65 +22149,65 @@ function uW() { try { const qn = (ao = $n.querySelectorAll) == null ? void 0 : ao.call($n, "source"); if (qn && qn.length) - for (const Sl of qn) + for (const Gl of qn) try { - Sl.remove(); - } catch (Gl) { - (hi = console.debug) == null || hi.call(console, Gl); + Gl.remove(); + } catch (Sl) { + (Ci = console.debug) == null || Ci.call(console, Sl); } } catch (qn) { (Ve = console.debug) == null || Ve.call(console, qn); } try { - (it = $n.removeAttribute) == null || it.call($n, "src"); + (ot = $n.removeAttribute) == null || ot.call($n, "src"); } catch (qn) { - (xt = console.debug) == null || xt.call(console, qn); + (St = console.debug) == null || St.call(console, qn); } try { - (an = $n.load) == null || an.call($n); + (sn = $n.load) == null || sn.call($n); } catch (qn) { - (sn = console.debug) == null || sn.call(console, qn); + (un = console.debug) == null || un.call(console, qn); } } - } catch (Ht) { - (Bn = console.debug) == null || Bn.call(console, Ht); + } catch (Et) { + (Kn = console.debug) == null || Kn.call(console, Et); } try { di(z), z.replaceChildren(); - } catch (Ht) { - (Yi = console.debug) == null || Yi.call(console, Ht); + } catch (Et) { + (Vi = console.debug) == null || Vi.call(console, Et); } try { - di(B), B.replaceChildren(); - } catch (Ht) { - (ki = console.debug) == null || ki.call(console, Ht); + di(T), T.replaceChildren(); + } catch (Et) { + (Xi = console.debug) == null || Xi.call(console, Et); } try { di(J), J.replaceChildren(); - } catch (Ht) { - (Ji = console.debug) == null || Ji.call(console, Ht); + } catch (Et) { + (Ji = console.debug) == null || Ji.call(console, Et); } try { i.genInfoOpen = !1; - } catch (Ht) { - (ci = console.debug) == null || ci.call(console, Ht); + } catch (Et) { + (ci = console.debug) == null || ci.call(console, Et); } try { me(); - } catch (Ht) { - (Ci = console.debug) == null || Ci.call(console, Ht); + } catch (Et) { + (hi = console.debug) == null || hi.call(console, Et); } try { - oe.style.display = "none", Mt(j); - } catch (Ht) { - (Yr = console.debug) == null || Yr.call(console, Ht); + ne.style.display = "none", we(v); + } catch (Et) { + (Vr = console.debug) == null || Vr.call(console, Et); } try { - O.style.display = "none", Mt(q); - } catch (Ht) { - (kr = console.debug) == null || kr.call(console, Ht); + F.style.display = "none", we(q); + } catch (Et) { + (Xr = console.debug) == null || Xr.call(console, Et); } - e.style.display = "none", e.style.pointerEvents = "none", Ie(); + e.style.display = "none", e.style.pointerEvents = "none", oe(); try { document.body.style.overflow = i._prevBodyOverflow ?? ""; } catch { @@ -22188,37 +22215,37 @@ function uW() { } try { i._prevFocusedElement && typeof i._prevFocusedElement.focus == "function" && i._prevFocusedElement.focus(), i._prevFocusedElement = null; - } catch (Ht) { - (Xr = console.debug) == null || Xr.call(console, Ht); + } catch (Et) { + (Nr = console.debug) == null || Nr.call(console, Et); } - const ae = i == null ? void 0 : i._prevHotkeyScope; - wr(ae || "panel"), i._prevHotkeyScope = null; + const re = i == null ? void 0 : i._prevHotkeyScope; + wr(re || "panel"), i._prevHotkeyScope = null; } - const rt = { - open(ae, he = 0, ve = null) { - var Fe, _e, et, tt, st, Vt; - Ne(), i.assets = Array.isArray(ae) ? ae : [ae], i.currentIndex = Math.max(0, Math.min(he, i.assets.length - 1)), i.distractionFree = !1; + const Be = { + open(re, Ie = 0, Ge = null) { + var Je, _e, Qe, et, mt, Lt; + se(), i.assets = Array.isArray(re) ? re : [re], i.currentIndex = Math.max(0, Math.min(Ie, i.assets.length - 1)), i.distractionFree = !1; try { le.rebuild(); - } catch (Bt) { - (Fe = console.debug) == null || Fe.call(console, Bt); + } catch (Tt) { + (Je = console.debug) == null || Je.call(console, Tt); } i.zoom = 1, i.panX = 0, i.panY = 0, i.targetZoom = 1, i._userInteracted = !1, i._panHintAt = 0; try { i._panHintTimer && clearTimeout(i._panHintTimer); - } catch (Bt) { - (_e = console.debug) == null || _e.call(console, Bt); + } catch (Tt) { + (_e = console.debug) == null || _e.call(console, Tt); } - i._panHintTimer = null, i._lastPointerX = null, i._lastPointerY = null, i._mediaW = 0, i._mediaH = 0, i.compareAsset = ve, i.gridMode = 0, me(), i._probe = null; + i._panHintTimer = null, i._lastPointerX = null, i._lastPointerY = null, i._mediaW = 0, i._mediaH = 0, i.compareAsset = Ge, i.gridMode = 0, me(), i._probe = null; try { - H.style.display = "none"; - } catch (Bt) { - (et = console.debug) == null || et.call(console, Bt); + E.style.display = "none"; + } catch (Tt) { + (Qe = console.debug) == null || Qe.call(console, Tt); } try { $.style.display = "none"; - } catch (Bt) { - (tt = console.debug) == null || tt.call(console, Bt); + } catch (Tt) { + (et = console.debug) == null || et.call(console, Tt); } e.style.display = "flex", e.style.pointerEvents = "auto"; try { @@ -22232,49 +22259,49 @@ function uW() { } catch { i._prevBodyOverflow = ""; } - document.body.style.overflow = "hidden", i._prevHotkeyScope = Mo().scope || null, wr("viewer"), dt(); + document.body.style.overflow = "hidden", i._prevHotkeyScope = Mo().scope || null, wr("viewer"), tt(); try { De(); - } catch (Bt) { - (st = console.debug) == null || st.call(console, Bt); + } catch (Tt) { + (mt = console.debug) == null || mt.call(console, Tt); } try { - pe(); - } catch (Bt) { - (Vt = console.debug) == null || Vt.call(console, Bt); + ye(); + } catch (Tt) { + (Lt = console.debug) == null || Lt.call(console, Tt); } - Oe(); + rt(); }, close() { - He(); + fe(); }, - setMode(ae) { - Object.values(jt).includes(ae) && (i.mode = ae, dt()); + setMode(re) { + Object.values(jt).includes(re) && (i.mode = re, tt()); }, - setCompareAsset(ae) { - i.compareAsset = ae, dt(); + setCompareAsset(re) { + i.compareAsset = re, tt(); }, dispose() { - var ae, he, ve, Fe, _e, et, tt, st, Vt, Bt, Rt, Ct, zt, gt, mn, wt, on, rn, hn, ln, gn, nn, An, vn, un, Mn, yn, Ut; + var re, Ie, Ge, Je, _e, Qe, et, mt, Lt, Tt, Ot, Ct, gn, pt, zt, ht, on, an, hn, cn, bn, ln, Wn, Yn, In, Gn, fn, Kt; try { - He(); + fe(); } catch (Jt) { - (ae = console.debug) == null || ae.call(console, Jt); + (re = console.debug) == null || re.call(console, Jt); } try { - ke.clear(); + Xe.clear(); } catch (Jt) { - (he = console.debug) == null || he.call(console, Jt); + (Ie = console.debug) == null || Ie.call(console, Jt); } try { di(z); } catch (Jt) { - (ve = console.debug) == null || ve.call(console, Jt); + (Ge = console.debug) == null || Ge.call(console, Jt); } try { - di(B); + di(T); } catch (Jt) { - (Fe = console.debug) == null || Fe.call(console, Jt); + (Je = console.debug) == null || Je.call(console, Jt); } try { di(J); @@ -22282,98 +22309,98 @@ function uW() { (_e = console.debug) == null || _e.call(console, Jt); } try { - Te != null && cancelAnimationFrame(Te); + Re != null && cancelAnimationFrame(Re); + } catch (Jt) { + (Qe = console.debug) == null || Qe.call(console, Jt); + } + try { + Ce != null && cancelAnimationFrame(Ce); } catch (Jt) { (et = console.debug) == null || et.call(console, Jt); } try { - We != null && cancelAnimationFrame(We); + (mt = xt == null ? void 0 : xt.dispose) == null || mt.call(xt); } catch (Jt) { - (tt = console.debug) == null || tt.call(console, Jt); + (Lt = console.debug) == null || Lt.call(console, Jt); } try { - (st = vt == null ? void 0 : vt.dispose) == null || st.call(vt); + (Tt = Gt == null ? void 0 : Gt.dispose) == null || Tt.call(Gt); } catch (Jt) { - (Vt = console.debug) == null || Vt.call(console, Jt); + (Ot = console.debug) == null || Ot.call(console, Jt); } try { - (Bt = re == null ? void 0 : re.dispose) == null || Bt.call(re); + (gn = (Ct = e._mjrResizeObserver) == null ? void 0 : Ct.disconnect) == null || gn.call(Ct); } catch (Jt) { - (Rt = console.debug) == null || Rt.call(console, Jt); - } - try { - (zt = (Ct = e._mjrResizeObserver) == null ? void 0 : Ct.disconnect) == null || zt.call(Ct); - } catch (Jt) { - (gt = console.debug) == null || gt.call(console, Jt); + (pt = console.debug) == null || pt.call(console, Jt); } try { e._mjrResizeObserver = null; } catch (Jt) { - (mn = console.debug) == null || mn.call(console, Jt); + (zt = console.debug) == null || zt.call(console, Jt); } try { - (wt = ge == null ? void 0 : ge.dispose) == null || wt.call(ge); + (ht = ge == null ? void 0 : ge.dispose) == null || ht.call(ge); } catch (Jt) { (on = console.debug) == null || on.call(console, Jt); } try { JZ(e); } catch (Jt) { - (rn = console.debug) == null || rn.call(console, Jt); + (an = console.debug) == null || an.call(console, Jt); } try { - for (const Jt of e._mjrViewerUnsubs || []) bt(Jt); + for (const Jt of e._mjrViewerUnsubs || []) It(Jt); } catch (Jt) { (hn = console.debug) == null || hn.call(console, Jt); } try { e._mjrViewerUnsubs = []; } catch (Jt) { - (ln = console.debug) == null || ln.call(console, Jt); + (cn = console.debug) == null || cn.call(console, Jt); } try { - (nn = (gn = i._preloadRefs) == null ? void 0 : gn.clear) == null || nn.call(gn); + (ln = (bn = i._preloadRefs) == null ? void 0 : bn.clear) == null || ln.call(bn); } catch (Jt) { - (An = console.debug) == null || An.call(console, Jt); + (Wn = console.debug) == null || Wn.call(console, Jt); } try { - (un = (vn = i._preloadedAssetKeys) == null ? void 0 : vn.clear) == null || un.call(vn); + (In = (Yn = i._preloadedAssetKeys) == null ? void 0 : Yn.clear) == null || In.call(Yn); } catch (Jt) { - (Mn = console.debug) == null || Mn.call(console, Jt); + (Gn = console.debug) == null || Gn.call(console, Jt); } try { - (yn = e.remove) == null || yn.call(e); + (fn = e.remove) == null || fn.call(e); } catch (Jt) { - (Ut = console.debug) == null || Ut.call(console, Jt); + (Kt = console.debug) == null || Kt.call(console, Jt); } } }; try { - L = () => rt.close(); - } catch (ae) { - (pn = console.debug) == null || pn.call(console, ae); + L = () => Be.close(); + } catch (re) { + (rn = console.debug) == null || rn.call(console, re); } - e._mjrViewerAPI = rt; + e._mjrViewerAPI = Be; try { zZ({ overlayEl: e, getCurrentAsset: () => i.assets[i.currentIndex], - getCurrentViewUrl: (ae) => Ki(ae), + getCurrentViewUrl: (re) => Ui(re), onAssetChanged: () => { - var ae; + var re; try { Ke(); - } catch (he) { - (ae = console.debug) == null || ae.call(console, he); + } catch (Ie) { + (re = console.debug) == null || re.call(console, Ie); } } }); - } catch (ae) { - (Nn = console.debug) == null || Nn.call(console, ae); + } catch (re) { + (vn = console.debug) == null || vn.call(console, re); } return e; } -function ms() { +function gs() { return PA(uW); } function mW(e) { @@ -22384,14 +22411,14 @@ function gW(e, t) { const n = Array.isArray(e) ? e.filter(Boolean) : []; return n.length ? n : t ? [t] : []; } -function tc({ assets: e = [], asset: t = null, index: n = 0, mode: i = "" } = {}) { +function nc({ assets: e = [], asset: t = null, index: n = 0, mode: i = "" } = {}) { var a, c, s; const o = gW(e, t); if (!o.length) return !1; const r = Math.max(0, Math.min(Number(n) || 0, o.length - 1)), l = mW(i); try { return window.dispatchEvent( - new CustomEvent(ht.OPEN_VIEWER, { + new CustomEvent(ft.OPEN_VIEWER, { detail: { assets: o, index: r, @@ -22403,7 +22430,7 @@ function tc({ assets: e = [], asset: t = null, index: n = 0, mode: i = "" } = {} (a = console.debug) == null || a.call(console, d); } try { - const d = ms(); + const d = gs(); return d.open(o, r), l && ((c = d.setMode) == null || c.call(d, l)), !0; } catch (d) { (s = console.debug) == null || s.call(console, d); @@ -22429,120 +22456,120 @@ function IW(e, t) { function lb(e) { const t = /* @__PURE__ */ new Map(); let n = null, i = 0, o = [], r = !1, l = !1, a = !1, c = new AbortController(), s = new AbortController(), d = !1; - const u = 8, I = 8, y = 200, S = 360, Z = 280, C = 80, g = 140, A = (k, K = "y") => { + const u = 8, I = 8, A = 200, h = 360, S = 280, W = 80, g = 140, y = (N, U = "y") => { var J; - if (!k) return !1; - const z = (J = globalThis.getComputedStyle) == null ? void 0 : J.call(globalThis, k), B = String(K === "x" ? (z == null ? void 0 : z.overflowX) || (z == null ? void 0 : z.overflow) || "" : (z == null ? void 0 : z.overflowY) || (z == null ? void 0 : z.overflow) || ""); - return /(auto|scroll|overlay)/i.test(B) ? K === "x" ? Number(k.scrollWidth || 0) > Number(k.clientWidth || 0) + 1 : Number(k.scrollHeight || 0) > Number(k.clientHeight || 0) + 1 : !1; - }, p = (k, K) => { - let z = k instanceof HTMLElement ? k : K; - for (; z && z !== K; ) { - if (A(z, "y") || A(z, "x")) return z; + if (!N) return !1; + const z = (J = globalThis.getComputedStyle) == null ? void 0 : J.call(globalThis, N), T = String(U === "x" ? (z == null ? void 0 : z.overflowX) || (z == null ? void 0 : z.overflow) || "" : (z == null ? void 0 : z.overflowY) || (z == null ? void 0 : z.overflow) || ""); + return /(auto|scroll|overlay)/i.test(T) ? U === "x" ? Number(N.scrollWidth || 0) > Number(N.clientWidth || 0) + 1 : Number(N.scrollHeight || 0) > Number(N.clientHeight || 0) + 1 : !1; + }, p = (N, U) => { + let z = N instanceof HTMLElement ? N : U; + for (; z && z !== U; ) { + if (y(z, "y") || y(z, "x")) return z; z = z.parentElement; } - return A(K, "y") || A(K, "x") ? K : null; - }, b = (k) => { - var B; - if (!k || k._mjrInteractionGuardsBound) return; - const K = (J) => { + return y(U, "y") || y(U, "x") ? U : null; + }, b = (N) => { + var T; + if (!N || N._mjrInteractionGuardsBound) return; + const U = (J) => { var P; try { J.stopPropagation(); - } catch (H) { - (P = console.debug) == null || P.call(console, H); + } catch (E) { + (P = console.debug) == null || P.call(console, E); } }, z = (J) => { - var E, oe; - const P = p(J == null ? void 0 : J.target, k), H = Number((J == null ? void 0 : J.deltaX) || 0), $ = Number((J == null ? void 0 : J.deltaY) || 0); + var H, ne; + const P = p(J == null ? void 0 : J.target, N), E = Number((J == null ? void 0 : J.deltaX) || 0), $ = Number((J == null ? void 0 : J.deltaY) || 0); if (P) try { - $ && (P.scrollTop = Number(P.scrollTop || 0) + $), H && (P.scrollLeft = Number(P.scrollLeft || 0) + H); + $ && (P.scrollTop = Number(P.scrollTop || 0) + $), E && (P.scrollLeft = Number(P.scrollLeft || 0) + E); } catch (M) { - (E = console.debug) == null || E.call(console, M); + (H = console.debug) == null || H.call(console, M); } try { J.preventDefault(); } catch (M) { - (oe = console.debug) == null || oe.call(console, M); + (ne = console.debug) == null || ne.call(console, M); } - K(J); + U(J); }; try { - k.addEventListener("wheel", z, { passive: !1, capture: !0 }), k.addEventListener("mousedown", K), k.addEventListener("touchmove", K, { passive: !0 }), k._mjrInteractionGuardsBound = !0; + N.addEventListener("wheel", z, { passive: !1, capture: !0 }), N.addEventListener("mousedown", U), N.addEventListener("touchmove", U, { passive: !0 }), N._mjrInteractionGuardsBound = !0; } catch (J) { - (B = console.debug) == null || B.call(console, J); + (T = console.debug) == null || T.call(console, J); } - }, L = (k) => { - var K; - if (!(!k || !(k instanceof HTMLElement))) { - b(k), k._mjrPortal || (k._mjrPortal = { - parent: k.parentNode, - nextSibling: k.nextSibling - }), k.classList.add("mjr-popover-portal"); + }, L = (N) => { + var U; + if (!(!N || !(N instanceof HTMLElement))) { + b(N), N._mjrPortal || (N._mjrPortal = { + parent: N.parentNode, + nextSibling: N.nextSibling + }), N.classList.add("mjr-popover-portal"); try { - k.parentNode !== document.body && document.body.appendChild(k); + N.parentNode !== document.body && document.body.appendChild(N); } catch (z) { - (K = console.debug) == null || K.call(console, z); + (U = console.debug) == null || U.call(console, z); } } - }, h = (k) => { + }, C = (N) => { var z; - const K = k == null ? void 0 : k._mjrPortal; - if (K) { - k.classList.remove("mjr-popover-portal"); + const U = N == null ? void 0 : N._mjrPortal; + if (U) { + N.classList.remove("mjr-popover-portal"); try { - const B = K.parent; - B && B instanceof HTMLElement && (K.nextSibling && K.nextSibling.parentNode === B ? B.insertBefore(k, K.nextSibling) : B.appendChild(k)); - } catch (B) { - (z = console.debug) == null || z.call(console, B); + const T = U.parent; + T && T instanceof HTMLElement && (U.nextSibling && U.nextSibling.parentNode === T ? T.insertBefore(N, U.nextSibling) : T.appendChild(N)); + } catch (T) { + (z = console.debug) == null || z.call(console, T); } } - }, G = (k, K) => { + }, G = (N, U) => { var z; - if (!(!k || !K)) + if (!(!N || !U)) try { - const B = K.getBoundingClientRect(), J = e.getBoundingClientRect(); - L(k), k.style.position = "fixed", k.style.margin = "0"; + const T = U.getBoundingClientRect(), J = e.getBoundingClientRect(); + L(N), N.style.position = "fixed", N.style.margin = "0"; const P = Math.max( - y, + A, Math.min( - S, + h, J.width - I * 2, window.innerWidth - I * 2 ) ); - k.style.maxWidth = `${P}px`; - const H = k.offsetWidth || Math.min(Z, P), $ = k.offsetHeight || 1; - let E = B.left; - E = Math.max( + N.style.maxWidth = `${P}px`; + const E = N.offsetWidth || Math.min(S, P), $ = N.offsetHeight || 1; + let H = T.left; + H = Math.max( J.left + I, - Math.min(E, J.right - H - I) + Math.min(H, J.right - E - I) ); - let oe = B.bottom + u; - const M = Math.min(J.bottom, window.innerHeight) - I, j = Math.max(J.top, 0) + I; - oe + $ > M && B.top - u - $ >= j && (oe = B.top - u - $), oe = Math.max(j, Math.min(oe, M - C)); - const O = M - oe; - k.style.maxHeight = `${Math.max(g, O)}px`, k.style.overflowX = "hidden", k.style.overflowY = "auto", k.style.overscrollBehavior = "contain", k.style.left = `${Math.round(E)}px`, k.style.top = `${Math.round(oe)}px`; - } catch (B) { - (z = console.debug) == null || z.call(console, B); + let ne = T.bottom + u; + const M = Math.min(J.bottom, window.innerHeight) - I, v = Math.max(J.top, 0) + I; + ne + $ > M && T.top - u - $ >= v && (ne = T.top - u - $), ne = Math.max(v, Math.min(ne, M - W)); + const F = M - ne; + N.style.maxHeight = `${Math.max(g, F)}px`, N.style.overflowX = "hidden", N.style.overflowY = "auto", N.style.overscrollBehavior = "contain", N.style.left = `${Math.round(H)}px`, N.style.top = `${Math.round(ne)}px`; + } catch (T) { + (z = console.debug) == null || z.call(console, T); } - }, W = () => { + }, Z = () => { t.size && (i && cancelAnimationFrame(i), i = requestAnimationFrame(() => { i = 0; - for (const k of t.values()) G(k.popover, k.anchor); + for (const N of t.values()) G(N.popover, N.anchor); })); - }, f = (k) => { - IW(k == null ? void 0 : k.target, t) || W(); + }, f = (N) => { + IW(N == null ? void 0 : N.target, t) || Z(); }, X = () => { - var k, K, z, B; + var N, U, z, T; if (t.size) { try { - a || (window.addEventListener("resize", W, { + a || (window.addEventListener("resize", Z, { passive: !0, signal: c.signal }), a = !0); } catch (J) { - (k = console.debug) == null || k.call(console, J); + (N = console.debug) == null || N.call(console, J); } try { l || (window.addEventListener("scroll", f, { @@ -22551,132 +22578,132 @@ function lb(e) { signal: c.signal }), l = !0); } catch (J) { - (K = console.debug) == null || K.call(console, J); + (U = console.debug) == null || U.call(console, J); } try { - n || (n = new ResizeObserver(W), n.observe(e)); + n || (n = new ResizeObserver(Z), n.observe(e)); } catch (J) { (z = console.debug) == null || z.call(console, J); } try { r || (e.addEventListener("scroll", f, { passive: !0 }), r = !0); } catch (J) { - (B = console.debug) == null || B.call(console, J); + (T = console.debug) == null || T.call(console, J); } } }, x = () => { - var k, K, z, B, J, P; + var N, U, z, T, J, P; if (!t.size) { try { - a && window.removeEventListener("resize", W); - } catch (H) { - (k = console.debug) == null || k.call(console, H); + a && window.removeEventListener("resize", Z); + } catch (E) { + (N = console.debug) == null || N.call(console, E); } a = !1; try { l && window.removeEventListener("scroll", f, { capture: !0 }); - } catch (H) { - (K = console.debug) == null || K.call(console, H); + } catch (E) { + (U = console.debug) == null || U.call(console, E); } try { l && window.removeEventListener("scroll", f, !0); - } catch (H) { - (z = console.debug) == null || z.call(console, H); + } catch (E) { + (z = console.debug) == null || z.call(console, E); } l = !1; try { r && e.removeEventListener("scroll", f); - } catch (H) { - (B = console.debug) == null || B.call(console, H); + } catch (E) { + (T = console.debug) == null || T.call(console, E); } r = !1; try { n && n.disconnect(); - } catch (H) { - (J = console.debug) == null || J.call(console, H); + } catch (E) { + (J = console.debug) == null || J.call(console, E); } n = null; try { c.abort(); - } catch (H) { - (P = console.debug) == null || P.call(console, H); + } catch (E) { + (P = console.debug) == null || P.call(console, E); } d || (c = new AbortController()); } - }, T = (k) => { - var K, z; - if (k) { + }, K = (N) => { + var U, z; + if (N) { try { - k.style.display = "none"; - } catch (B) { - (K = console.debug) == null || K.call(console, B); + N.style.display = "none"; + } catch (T) { + (U = console.debug) == null || U.call(console, T); } try { - h(k); - } catch (B) { - (z = console.debug) == null || z.call(console, B); + C(N); + } catch (T) { + (z = console.debug) == null || z.call(console, T); } - t.delete(k), x(); + t.delete(N), x(); } - }, v = (k, K) => { - !k || !K || (t.set(k, { popover: k, anchor: K }), X(), G(k, K), W()); - }, w = (k, K) => { - if (!k || !K) return; - const B = t.has(k) || k.style.display === "block" ? "none" : "block"; - k.style.display = B, B !== "none" ? v(k, K) : T(k); + }, j = (N, U) => { + !N || !U || (t.set(N, { popover: N, anchor: U }), X(), G(N, U), Z()); + }, w = (N, U) => { + if (!N || !U) return; + const T = t.has(N) || N.style.display === "block" ? "none" : "block"; + N.style.display = T, T !== "none" ? j(N, U) : K(N); }, R = () => { - var k; - for (const K of t.values()) + var N; + for (const U of t.values()) try { - h(K.popover); + C(U.popover); } catch (z) { - (k = console.debug) == null || k.call(console, z); + (N = console.debug) == null || N.call(console, z); } - for (const K of Array.from(t.keys())) T(K); + for (const U of Array.from(t.keys())) K(U); t.clear(), x(); - }, Y = (k) => { - o = Array.isArray(k) ? k.filter(Boolean) : []; - }, F = (k) => { - var z, B, J; - const K = k.target; - if (K) { + }, V = (N) => { + o = Array.isArray(N) ? N.filter(Boolean) : []; + }, O = (N) => { + var z, T, J; + const U = N.target; + if (U) { for (const P of t.values()) { try { - if (P != null && P.popover && P.popover.contains(K)) return; - } catch (H) { - (z = console.debug) == null || z.call(console, H); + if (P != null && P.popover && P.popover.contains(U)) return; + } catch (E) { + (z = console.debug) == null || z.call(console, E); } try { - if (P != null && P.anchor && P.anchor.contains(K)) return; - } catch (H) { - (B = console.debug) == null || B.call(console, H); + if (P != null && P.anchor && P.anchor.contains(U)) return; + } catch (E) { + (T = console.debug) == null || T.call(console, E); } } for (const P of o) try { - if (P && typeof P.contains == "function" && P.contains(K)) return; - } catch (H) { - (J = console.debug) == null || J.call(console, H); + if (P && typeof P.contains == "function" && P.contains(U)) return; + } catch (E) { + (J = console.debug) == null || J.call(console, E); } R(); } - }, N = () => { - var k, K; + }, k = () => { + var N, U; try { - (k = s == null ? void 0 : s.abort) == null || k.call(s); + (N = s == null ? void 0 : s.abort) == null || N.call(s); } catch (z) { - (K = console.debug) == null || K.call(console, z); + (U = console.debug) == null || U.call(console, z); } - s = new AbortController(), document.addEventListener("mousedown", F, { + s = new AbortController(), document.addEventListener("mousedown", O, { signal: s.signal }); - }, V = () => { - var k, K, z, B, J; + }, Y = () => { + var N, U, z, T, J; d = !0; try { - (k = s == null ? void 0 : s.abort) == null || k.call(s); + (N = s == null ? void 0 : s.abort) == null || N.call(s); } catch (P) { - (K = console.debug) == null || K.call(console, P); + (U = console.debug) == null || U.call(console, P); } s = null; try { @@ -22687,7 +22714,7 @@ function lb(e) { try { c.abort(); } catch (P) { - (B = console.debug) == null || B.call(console, P); + (T = console.debug) == null || T.call(console, P); } c = null; try { @@ -22696,14 +22723,14 @@ function lb(e) { (J = console.debug) == null || J.call(console, P); } }; - return N(), { - open: v, - close: T, + return k(), { + open: j, + close: K, toggle: w, closeAll: R, - scheduleReposition: W, - setDismissWhitelist: Y, - dispose: V + scheduleReposition: Z, + setDismissWhitelist: V, + dispose: Y }; } const Rn = { @@ -22752,14 +22779,14 @@ function Jn(e, t) { const n = e.key.toLowerCase() === t.key.toLowerCase() || e.key === t.key, i = !!t.ctrl === (e.ctrlKey || e.metaKey), o = !!t.shift === e.shiftKey, r = !!t.alt === e.altKey; return n && i && o && r; } -const Bo = /* @__PURE__ */ new Map(); +const Ko = /* @__PURE__ */ new Map(); function Qo(e, t, n) { var l, a; const i = e == null ? void 0 : e.id; if (!i) return; const o = String(i); try { - const c = Bo.get(o); + const c = Ko.get(o); c && clearTimeout(c); } catch (c) { (l = console.debug) == null || l.call(console, c); @@ -22771,22 +22798,22 @@ function Qo(e, t, n) { } const r = setTimeout(async () => { try { - Bo.delete(o); - const c = await Ho(i, t); + Ko.delete(o); + const c = await Eo(i, t); if (!(c != null && c.ok)) { - Ze((c == null ? void 0 : c.error) || m("toast.ratingUpdateFailed"), "error"); + Ae((c == null ? void 0 : c.error) || m("toast.ratingUpdateFailed"), "error"); return; } - Ze(m("toast.ratingSetN", { n: t }), "success", 1500), oi( - Fi, + Ae(m("toast.ratingSetN", { n: t }), "success", 1500), oi( + Oi, { assetId: String(i), rating: t }, { warnPrefix: "[GridKeyboard]" } ); } catch (c) { - console.error("[GridKeyboard] Rating update failed:", c), Ze(m("toast.ratingUpdateError"), "error"); + console.error("[GridKeyboard] Rating update failed:", c), Ae(m("toast.ratingUpdateError"), "error"); } }, 350); - Bo.set(o, r); + Ko.set(o, r); } function ab({ gridContainer: e, @@ -22808,11 +22835,11 @@ function ab({ } }; let c = null, s = null, d = !1; const u = ({ assets: f = [], index: X = 0, mode: x = "" } = {}) => { - tc({ assets: f, index: X, mode: x }); + nc({ assets: f, index: X, mode: x }); }, I = () => { var f, X; try { - Ds(e); + ja(e); } catch (x) { (f = console.debug) == null || f.call(console, x); } @@ -22821,13 +22848,13 @@ function ab({ } catch (x) { (X = console.debug) == null || X.call(console, x); } - }, y = () => { + }, A = () => { try { return n() || []; } catch { return []; } - }, S = () => { + }, h = () => { var f; try { if (typeof (e == null ? void 0 : e._mjrGetRenderedCards) == "function") { @@ -22842,66 +22869,66 @@ function ab({ } catch { return []; } - }, Z = () => { + }, S = () => { try { const f = i(); - return f || y()[0] || null; + return f || A()[0] || null; } catch { return null; } - }, C = () => { + }, W = () => { var f, X, x; try { if (Array.isArray((f = t == null ? void 0 : t()) == null ? void 0 : f.assets) && t().assets.length) return t().assets; - } catch (T) { - (X = console.debug) == null || X.call(console, T); + } catch (K) { + (X = console.debug) == null || X.call(console, K); } try { if (typeof (e == null ? void 0 : e._mjrGetAssets) == "function") { - const T = e._mjrGetAssets(); - if (Array.isArray(T) && T.length) return T; + const K = e._mjrGetAssets(); + if (Array.isArray(K) && K.length) return K; } - } catch (T) { - (x = console.debug) == null || x.call(console, T); + } catch (K) { + (x = console.debug) == null || x.call(console, K); } try { - return S().map((T) => T == null ? void 0 : T._mjrAsset).filter(Boolean); + return h().map((K) => K == null ? void 0 : K._mjrAsset).filter(Boolean); } catch { return []; } }, g = () => { var f; try { - const X = S(); + const X = h(); if (X.length >= 2) { - const x = Math.round(X[0].getBoundingClientRect().top), T = X.filter((v) => { + const x = Math.round(X[0].getBoundingClientRect().top), K = X.filter((j) => { try { - return Math.abs(Math.round(v.getBoundingClientRect().top) - x) <= 4; + return Math.abs(Math.round(j.getBoundingClientRect().top) - x) <= 4; } catch { return !1; } }); - if (T.length >= 1) return Math.max(1, T.length); + if (K.length >= 1) return Math.max(1, K.length); } if (X.length >= 1) { - const x = X[0].getBoundingClientRect(), T = e.getBoundingClientRect(), v = Math.max(1, Math.round(x.width)), w = Math.max(1, Math.round(T.width)); - return Math.max(1, Math.floor(w / v)); + const x = X[0].getBoundingClientRect(), K = e.getBoundingClientRect(), j = Math.max(1, Math.round(x.width)), w = Math.max(1, Math.round(K.width)); + return Math.max(1, Math.floor(w / j)); } } catch (X) { (f = console.debug) == null || f.call(console, X); } return 1; - }, A = (f, X) => { - var v; - const x = Array.isArray(f) ? f.map(String).filter(Boolean) : [], T = String(X || x[0] || ""); + }, y = (f, X) => { + var j; + const x = Array.isArray(f) ? f.map(String).filter(Boolean) : [], K = String(X || x[0] || ""); try { - typeof (e == null ? void 0 : e._mjrSetSelection) == "function" ? e._mjrSetSelection(x, T) : (e.dataset.mjrSelectedAssetIds = JSON.stringify(x), e.dataset.mjrSelectedAssetId = T); + typeof (e == null ? void 0 : e._mjrSetSelection) == "function" ? e._mjrSetSelection(x, K) : (e.dataset.mjrSelectedAssetIds = JSON.stringify(x), e.dataset.mjrSelectedAssetId = K); } catch (w) { - (v = console.debug) == null || v.call(console, w); + (j = console.debug) == null || j.call(console, w); } }, p = (f) => { - var x, T, v; + var x, K, j; const X = String(f || "").trim(); if (X) { try { @@ -22914,54 +22941,54 @@ function ab({ } try { const w = typeof CSS < "u" && (CSS != null && CSS.escape) ? CSS.escape(X) : X.replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1"), R = e.querySelector(`.mjr-asset-card[data-mjr-asset-id="${w}"]`); - (T = R == null ? void 0 : R.scrollIntoView) == null || T.call(R, { block: "nearest", inline: "nearest" }); + (K = R == null ? void 0 : R.scrollIntoView) == null || K.call(R, { block: "nearest", inline: "nearest" }); } catch (w) { - (v = console.debug) == null || v.call(console, w); + (j = console.debug) == null || j.call(console, w); } } }, b = (f) => { - var K, z, B; + var U, z, T; const X = String(f.key || ""); if (!(X === "ArrowLeft" || X === "ArrowRight" || X === "ArrowUp" || X === "ArrowDown") && !(X === "Home" || X === "End") || f.ctrlKey || f.altKey || f.metaKey) return !1; - const v = C(); - if (!Array.isArray(v) || v.length === 0) return !1; - const w = Z(), R = String( - (w == null ? void 0 : w.id) || ((K = e == null ? void 0 : e.dataset) == null ? void 0 : K.mjrSelectedAssetId) || "" + const j = W(); + if (!Array.isArray(j) || j.length === 0) return !1; + const w = S(), R = String( + (w == null ? void 0 : w.id) || ((U = e == null ? void 0 : e.dataset) == null ? void 0 : U.mjrSelectedAssetId) || "" ); - let Y = v.findIndex((J) => String((J == null ? void 0 : J.id) || "") === R); - const F = Y >= 0; - Y < 0 && (Y = 0); - const N = Math.max(1, g()); - let V = Y; - if (X === "ArrowLeft" ? V -= 1 : X === "ArrowRight" ? V += 1 : X === "ArrowUp" ? V -= N : X === "ArrowDown" ? V += N : X === "Home" ? V = 0 : X === "End" && (V = v.length - 1), V = Math.max(0, Math.min(v.length - 1, V)), F && V === Y && X !== "Home" && X !== "End") + let V = j.findIndex((J) => String((J == null ? void 0 : J.id) || "") === R); + const O = V >= 0; + V < 0 && (V = 0); + const k = Math.max(1, g()); + let Y = V; + if (X === "ArrowLeft" ? Y -= 1 : X === "ArrowRight" ? Y += 1 : X === "ArrowUp" ? Y -= k : X === "ArrowDown" ? Y += k : X === "Home" ? Y = 0 : X === "End" && (Y = j.length - 1), Y = Math.max(0, Math.min(j.length - 1, Y)), O && Y === V && X !== "Home" && X !== "End") return !1; - const k = String(((z = v[V]) == null ? void 0 : z.id) || ""); - if (!k) return !1; + const N = String(((z = j[Y]) == null ? void 0 : z.id) || ""); + if (!N) return !1; if (I(), f.shiftKey) { let J = String((e == null ? void 0 : e._mjrSelectionAnchorId) || ""); - J || (J = R || k); - const P = v.findIndex((M) => String((M == null ? void 0 : M.id) || "") === J), H = P >= 0 ? P : Y, $ = Math.min(H, V), E = Math.max(H, V), oe = v.slice($, E + 1).map((M) => String((M == null ? void 0 : M.id) || "")).filter(Boolean); - A(oe, k); + J || (J = R || N); + const P = j.findIndex((M) => String((M == null ? void 0 : M.id) || "") === J), E = P >= 0 ? P : V, $ = Math.min(E, Y), H = Math.max(E, Y), ne = j.slice($, H + 1).map((M) => String((M == null ? void 0 : M.id) || "")).filter(Boolean); + y(ne, N); } else - e._mjrSelectionAnchorId = k, A([k], k); - p(k); + e._mjrSelectionAnchorId = N, y([N], N); + p(N); try { l == null || l(); } catch (J) { - (B = console.debug) == null || B.call(console, J); + (T = console.debug) == null || T.call(console, J); } return !0; }, L = async (f) => { - var Y, F, N, V, k, K, z, B, J, P, H, $, E, oe, M; + var V, O, k, Y, N, U, z, T, J, P, E, $, H, ne, M; const X = f.target; if (X && (X.tagName === "INPUT" || X.tagName === "TEXTAREA" || X.isContentEditable) || Mo().scope === "viewer") return; if (document.activeElement !== document.body) { - const j = document.activeElement, O = e.contains(j), D = j && j.contains && j.contains(e), q = (Y = j == null ? void 0 : j.closest) == null ? void 0 : Y.call(j, ".mjr-asset-card"); - if (!O && !D && !q) + const v = document.activeElement, F = e.contains(v), D = v && v.contains && v.contains(e), q = (V = v == null ? void 0 : v.closest) == null ? void 0 : V.call(v, ".mjr-asset-card"); + if (!F && !D && !q) return; } else { - const j = So(); - if (j && j !== e) + const v = Go(); + if (v && v !== e) return; } const x = () => { @@ -22972,107 +22999,107 @@ function ab({ x(); return; } - } catch (j) { - (F = console.debug) == null || F.call(console, j); + } catch (v) { + (O = console.debug) == null || O.call(console, v); } - const T = y(), v = Z(), w = t(), R = !!Mo().ratingHotkeysActive; + const K = A(), j = S(), w = t(), R = !!Mo().ratingHotkeysActive; if (!f.ctrlKey && !f.altKey && !f.metaKey && !f.shiftKey) { - if (!R && Jn(f, Rn.RATING_1) && v != null && v.id) { - x(), Qo(v, 1, a); + if (!R && Jn(f, Rn.RATING_1) && j != null && j.id) { + x(), Qo(j, 1, a); return; } - if (!R && Jn(f, Rn.RATING_2) && v != null && v.id) { - x(), Qo(v, 2, a); + if (!R && Jn(f, Rn.RATING_2) && j != null && j.id) { + x(), Qo(j, 2, a); return; } - if (!R && Jn(f, Rn.RATING_3) && v != null && v.id) { - x(), Qo(v, 3, a); + if (!R && Jn(f, Rn.RATING_3) && j != null && j.id) { + x(), Qo(j, 3, a); return; } - if (!R && Jn(f, Rn.RATING_4) && v != null && v.id) { - x(), Qo(v, 4, a); + if (!R && Jn(f, Rn.RATING_4) && j != null && j.id) { + x(), Qo(j, 4, a); return; } - if (!R && Jn(f, Rn.RATING_5) && v != null && v.id) { - x(), Qo(v, 5, a); + if (!R && Jn(f, Rn.RATING_5) && j != null && j.id) { + x(), Qo(j, 5, a); return; } - if (!R && Jn(f, Rn.RATING_RESET) && v != null && v.id) { - x(), Qo(v, 0, a); + if (!R && Jn(f, Rn.RATING_RESET) && j != null && j.id) { + x(), Qo(j, 0, a); return; } } - if ((Jn(f, Rn.OPEN_VIEWER) || Jn(f, Rn.OPEN_VIEWER_ALT)) && T.length > 0) { + if ((Jn(f, Rn.OPEN_VIEWER) || Jn(f, Rn.OPEN_VIEWER_ALT)) && K.length > 0) { x(); try { - if (T.length >= 2 && T.length <= 4) - u({ assets: T, index: 0 }); + if (K.length >= 2 && K.length <= 4) + u({ assets: K, index: 0 }); else { - let j = []; + let v = []; if (Array.isArray(w == null ? void 0 : w.assets) && w.assets.length) - j = w.assets; + v = w.assets; else if (typeof (e == null ? void 0 : e._mjrGetAssets) == "function") { const D = e._mjrGetAssets(); - Array.isArray(D) && D.length && (j = D); + Array.isArray(D) && D.length && (v = D); } else - j = S().map((q) => q._mjrAsset).filter(Boolean); - const O = j.findIndex((D) => String(D == null ? void 0 : D.id) === String(v == null ? void 0 : v.id)); - u({ assets: j, index: Math.max(0, O) }); + v = h().map((q) => q._mjrAsset).filter(Boolean); + const F = v.findIndex((D) => String(D == null ? void 0 : D.id) === String(j == null ? void 0 : j.id)); + u({ assets: v, index: Math.max(0, F) }); } - } catch (j) { - console.error("[GridKeyboard] Open viewer failed:", j); + } catch (v) { + console.error("[GridKeyboard] Open viewer failed:", v); } return; } - if (Jn(f, Rn.METADATA_PANEL) && v) { - x(), o(v); + if (Jn(f, Rn.METADATA_PANEL) && j) { + x(), o(j); return; } - if (Jn(f, Rn.COMPARE_AB) && T.length === 2) { + if (Jn(f, Rn.COMPARE_AB) && K.length === 2) { x(); try { - u({ assets: T, index: 0, mode: "ab" }); - } catch (j) { - (N = console.debug) == null || N.call(console, j); + u({ assets: K, index: 0, mode: "ab" }); + } catch (v) { + (k = console.debug) == null || k.call(console, v); } return; } - if (Jn(f, Rn.SIDE_BY_SIDE) && T.length >= 2 && T.length <= 4) { + if (Jn(f, Rn.SIDE_BY_SIDE) && K.length >= 2 && K.length <= 4) { x(); try { - u({ assets: T, index: 0, mode: "sidebyside" }); - } catch (j) { - (V = console.debug) == null || V.call(console, j); + u({ assets: K, index: 0, mode: "sidebyside" }); + } catch (v) { + (Y = console.debug) == null || Y.call(console, v); } return; } - if (Jn(f, Rn.EDIT_TAGS) && v != null && v.id) { - x(), r(v); + if (Jn(f, Rn.EDIT_TAGS) && j != null && j.id) { + x(), r(j); return; } - if (Jn(f, Rn.ADD_TO_COLLECTION) && (T.length > 0 || v)) { + if (Jn(f, Rn.ADD_TO_COLLECTION) && (K.length > 0 || j)) { x(); - const j = T.length > 0 ? T : [v], O = e.getBoundingClientRect(); + const v = K.length > 0 ? K : [j], F = e.getBoundingClientRect(); await rd({ - x: O.left + O.width / 2, - y: O.top + O.height / 2, - assets: j + x: F.left + F.width / 2, + y: F.top + F.height / 2, + assets: v }); return; } if (Jn(f, Rn.REMOVE_FROM_COLLECTION)) { - const j = w == null ? void 0 : w.collectionId; - if (j && (T.length > 0 || v)) { + const v = w == null ? void 0 : w.collectionId; + if (v && (K.length > 0 || j)) { x(); try { - const D = (T.length > 0 ? T : [v]).map( + const D = (K.length > 0 ? K : [j]).map( (ee) => { - var ce; - return String((ee == null ? void 0 : ee.filepath) || (ee == null ? void 0 : ee.path) || ((ce = ee == null ? void 0 : ee.file_info) == null ? void 0 : ce.filepath) || "").trim(); + var ae; + return String((ee == null ? void 0 : ee.filepath) || (ee == null ? void 0 : ee.path) || ((ae = ee == null ? void 0 : ee.file_info) == null ? void 0 : ae.filepath) || "").trim(); } ).filter(Boolean); if (!D.length) { - Ze( + Ae( m( "toast.removeFromCollectionFailed", "No valid files to remove from collection" @@ -23081,9 +23108,9 @@ function ab({ ); return; } - const q = await Og(j, D); + const q = await Fg(v, D); if (!(q != null && q.ok)) { - Ze( + Ae( (q == null ? void 0 : q.error) || m( "toast.removeFromCollectionFailed", "Failed to remove from collection" @@ -23099,19 +23126,19 @@ function ab({ }) ); } catch (ee) { - (k = console.debug) == null || k.call(console, ee); + (N = console.debug) == null || N.call(console, ee); } - Ze( + Ae( m("toast.removedFromCollection", "Removed from collection"), "success", 1400 ); - } catch (O) { - Ze( + } catch (F) { + Ae( m( "toast.removeFromCollectionError", "Error removing from collection: {error}", - { error: (O == null ? void 0 : O.message) || String(O || "") } + { error: (F == null ? void 0 : F.message) || String(F || "") } ), "error" ); @@ -23119,55 +23146,55 @@ function ab({ return; } } - if (Jn(f, Rn.COPY_PATH) && v != null && v.filepath) { + if (Jn(f, Rn.COPY_PATH) && j != null && j.filepath) { x(); try { - await navigator.clipboard.writeText(v.filepath), Ze(m("toast.pathCopied"), "success", 2e3); + await navigator.clipboard.writeText(j.filepath), Ae(m("toast.pathCopied"), "success", 2e3); } catch { - Ze(m("toast.pathCopyFailed"), "error"); + Ae(m("toast.pathCopyFailed"), "error"); } return; } - if (Jn(f, Rn.DOWNLOAD) && v != null && v.filepath) { + if (Jn(f, Rn.DOWNLOAD) && j != null && j.filepath) { x(); - const j = Ea(v.filepath), O = document.createElement("a"); - O.href = j, O.download = v.filename || "download", document.body.appendChild(O), O.click(), document.body.removeChild(O), Ze( + const v = Ea(j.filepath), F = document.createElement("a"); + F.href = v, F.download = j.filename || "download", document.body.appendChild(F), F.click(), document.body.removeChild(F), Ae( m("toast.downloadingFile", "Downloading {filename}...", { - filename: v.filename + filename: j.filename }), "info", 3e3 ); return; } - if (Jn(f, Rn.OPEN_IN_FOLDER) && v != null && v.id) { + if (Jn(f, Rn.OPEN_IN_FOLDER) && j != null && j.id) { x(); - const j = await zs(v.id); - j != null && j.ok ? Ze(m("toast.openedInFolder"), "info", 2e3) : Ze((j == null ? void 0 : j.error) || m("toast.openFolderFailed"), "error"); + const v = await Js(j.id); + v != null && v.ok ? Ae(m("toast.openedInFolder"), "info", 2e3) : Ae((v == null ? void 0 : v.error) || m("toast.openFolderFailed"), "error"); return; } - if (Jn(f, Rn.RENAME) && v != null && v.id) { + if (Jn(f, Rn.RENAME) && j != null && j.id) { x(); - const j = v.filename || "", O = await Vi( + const v = j.filename || "", F = await Yi( m("dialog.rename.title", "Rename file"), - j - ), D = ad(O, j); - if (D && D !== j) { + v + ), D = ad(F, v); + if (D && D !== v) { const q = ld(D); if (!q.valid) { - Ze(q.reason, "error"); + Ae(q.reason, "error"); return; } try { - const ee = await Js(v, D); + const ee = await Ts(j, D); if (ee != null && ee.ok) { - const ce = (K = ee == null ? void 0 : ee.data) == null ? void 0 : K.asset; - ce && typeof ce == "object" ? Object.assign(v, ce) : (v.filename = D, v.filepath = (z = v.filepath) == null ? void 0 : z.replace(/[^\\/]+$/, D), v.path && (v.path = String(v.path).replace(/[^\\/]+$/, D)), v.file_info && typeof v.file_info == "object" && (v.file_info.filename = D, v.file_info.filepath && (v.file_info.filepath = String( - v.file_info.filepath - ).replace(/[^\\/]+$/, D)), v.file_info.path && (v.file_info.path = String(v.file_info.path).replace( + const ae = (U = ee == null ? void 0 : ee.data) == null ? void 0 : U.asset; + ae && typeof ae == "object" ? Object.assign(j, ae) : (j.filename = D, j.filepath = (z = j.filepath) == null ? void 0 : z.replace(/[^\\/]+$/, D), j.path && (j.path = String(j.path).replace(/[^\\/]+$/, D)), j.file_info && typeof j.file_info == "object" && (j.file_info.filename = D, j.file_info.filepath && (j.file_info.filepath = String( + j.file_info.filepath + ).replace(/[^\\/]+$/, D)), j.file_info.path && (j.file_info.path = String(j.file_info.path).replace( /[^\\/]+$/, D - )))), Ze(m("toast.fileRenamedSuccess"), "success"); + )))), Ae(m("toast.fileRenamedSuccess"), "success"); try { window.dispatchEvent( new CustomEvent("mjr:reload-grid", { @@ -23175,13 +23202,13 @@ function ab({ }) ); } catch (ue) { - (B = console.debug) == null || B.call(console, ue); + (T = console.debug) == null || T.call(console, ue); } a(); } else - Ze((ee == null ? void 0 : ee.error) || m("toast.fileRenameFailed"), "error"); + Ae((ee == null ? void 0 : ee.error) || m("toast.fileRenameFailed"), "error"); } catch (ee) { - Ze( + Ae( m("toast.errorRenaming", "Error renaming file: {error}", { error: (ee == null ? void 0 : ee.message) || String(ee || "") }), @@ -23191,16 +23218,16 @@ function ab({ } return; } - if ((Jn(f, Rn.DELETE) || Jn(f, Rn.DELETE_ALT)) && (v != null && v.id || T.length > 0)) { + if ((Jn(f, Rn.DELETE) || Jn(f, Rn.DELETE_ALT)) && (j != null && j.id || K.length > 0)) { x(); - const j = T.length > 0 ? T : [v]; - let O = 0, D = 0; + const v = K.length > 0 ? K : [j]; + let F = 0, D = 0; const q = []; - for (const ee of j) + for (const ee of v) if (ee != null && ee.id) try { - const ce = await Sa(ee.id); - ce != null && ce.ok ? (O++, q.push(String(ee.id))) : D++; + const ae = await Ga(ee.id); + ae != null && ae.ok ? (F++, q.push(String(ee.id))) : D++; } catch { D++; } @@ -23210,66 +23237,66 @@ function ab({ if (typeof ee == "function") ee(q); else - for (const ce of q) { + for (const ae of q) { const ue = e.querySelector( - `[data-mjr-asset-id="${ce}"]` + `[data-mjr-asset-id="${ae}"]` ); (J = ue == null ? void 0 : ue.remove) == null || J.call(ue); } } catch (ee) { (P = console.debug) == null || P.call(console, ee); } - D === 0 ? Ze( - O === 1 ? m("toast.filesDeletedShort", "{n} files deleted", { n: O }) : m("toast.filesDeletedShort", "{n} files deleted", { - n: O + D === 0 ? Ae( + F === 1 ? m("toast.filesDeletedShort", "{n} files deleted", { n: F }) : m("toast.filesDeletedShort", "{n} files deleted", { + n: F }), "success" - ) : Ze( + ) : Ae( m("toast.filesDeletedShortPartial", "{success} deleted, {failed} failed", { - success: O, + success: F, failed: D }), "warning" ); try { if (typeof (e == null ? void 0 : e._mjrSetSelection) == "function") { - const ee = T.filter((ce) => !q.includes(String((ce == null ? void 0 : ce.id) || ""))).map((ce) => String((ce == null ? void 0 : ce.id) || "")).filter(Boolean); + const ee = K.filter((ae) => !q.includes(String((ae == null ? void 0 : ae.id) || ""))).map((ae) => String((ae == null ? void 0 : ae.id) || "")).filter(Boolean); e._mjrSetSelection(ee, ee[0] || ""); } } catch (ee) { - (H = console.debug) == null || H.call(console, ee); + (E = console.debug) == null || E.call(console, ee); } l(); return; } if (Jn(f, Rn.SELECT_ALL)) { x(); - let j = []; + let v = []; try { if (Array.isArray(w == null ? void 0 : w.assets) && w.assets.length) - j = w.assets.map((O) => String((O == null ? void 0 : O.id) || "")).filter(Boolean); + v = w.assets.map((F) => String((F == null ? void 0 : F.id) || "")).filter(Boolean); else if (typeof (e == null ? void 0 : e._mjrGetAssets) == "function") { - const O = e._mjrGetAssets(); - Array.isArray(O) && (j = O.map((D) => String((D == null ? void 0 : D.id) || "")).filter(Boolean)); + const F = e._mjrGetAssets(); + Array.isArray(F) && (v = F.map((D) => String((D == null ? void 0 : D.id) || "")).filter(Boolean)); } - } catch (O) { - ($ = console.debug) == null || $.call(console, O); + } catch (F) { + ($ = console.debug) == null || $.call(console, F); } - if (!j.length) + if (!v.length) try { - j = S().map((O) => { + v = h().map((F) => { var D; - return String(((D = O == null ? void 0 : O._mjrAsset) == null ? void 0 : D.id) || ""); + return String(((D = F == null ? void 0 : F._mjrAsset) == null ? void 0 : D.id) || ""); }).filter(Boolean); - } catch (O) { - (E = console.debug) == null || E.call(console, O); + } catch (F) { + (H = console.debug) == null || H.call(console, F); } try { - typeof (e == null ? void 0 : e._mjrSetSelection) == "function" ? e._mjrSetSelection(j, j[0] || "") : (S().forEach((D) => { + typeof (e == null ? void 0 : e._mjrSetSelection) == "function" ? e._mjrSetSelection(v, v[0] || "") : (h().forEach((D) => { D.classList.add("is-selected"), D.setAttribute("aria-selected", "true"); - }), e.dataset.mjrSelectedAssetIds = JSON.stringify(j), e.dataset.mjrSelectedAssetId = String(j[0] || "")); - } catch (O) { - (oe = console.debug) == null || oe.call(console, O); + }), e.dataset.mjrSelectedAssetIds = JSON.stringify(v), e.dataset.mjrSelectedAssetId = String(v[0] || "")); + } catch (F) { + (ne = console.debug) == null || ne.call(console, F); } l(); return; @@ -23277,52 +23304,52 @@ function ab({ if (Jn(f, Rn.DESELECT_ALL)) { x(); try { - typeof (e == null ? void 0 : e._mjrSetSelection) == "function" ? e._mjrSetSelection([], "") : (S().filter( - (O) => { + typeof (e == null ? void 0 : e._mjrSetSelection) == "function" ? e._mjrSetSelection([], "") : (h().filter( + (F) => { var D, q; - return (q = (D = O == null ? void 0 : O.classList) == null ? void 0 : D.contains) == null ? void 0 : q.call(D, "is-selected"); + return (q = (D = F == null ? void 0 : F.classList) == null ? void 0 : D.contains) == null ? void 0 : q.call(D, "is-selected"); } - ).forEach((O) => { - O.classList.remove("is-selected"), O.setAttribute("aria-selected", "false"); + ).forEach((F) => { + F.classList.remove("is-selected"), F.setAttribute("aria-selected", "false"); }), delete e.dataset.mjrSelectedAssetIds, delete e.dataset.mjrSelectedAssetId); - } catch (j) { - (M = console.debug) == null || M.call(console, j); + } catch (v) { + (M = console.debug) == null || M.call(console, v); } l(); return; } - }, h = () => { + }, C = () => { d || (c = L, s = () => I(), document.addEventListener("keydown", c, !0), e.addEventListener("pointerdown", s, !0), e.addEventListener("focusin", s, !0), d = !0); }, G = () => { var f; if (!(!d || !c)) { document.removeEventListener("keydown", c, !0), s && (e.removeEventListener("pointerdown", s, !0), e.removeEventListener("focusin", s, !0)), c = null, s = null, d = !1; - for (const X of Bo.values()) + for (const X of Ko.values()) try { clearTimeout(X); } catch (x) { (f = console.debug) == null || f.call(console, x); } - Bo.clear(); + Ko.clear(); } }; - return { bind: h, unbind: G, dispose: () => { + return { bind: C, unbind: G, dispose: () => { var f; G(); - for (const X of Bo.values()) + for (const X of Ko.values()) try { clearTimeout(X); } catch (x) { (f = console.debug) == null || f.call(console, x); } - Bo.clear(); + Ko.clear(); } }; } -function Gi(e) { +function Si(e) { const t = Rn[e]; return t ? bW(t) : ""; } -function Bu() { +function Ku() { return { open: !1, x: 0, @@ -23331,11 +23358,11 @@ function Bu() { title: "" }; } -const Dt = Vs({ +const Ut = Vs({ portalOwnerId: "", mountedPortalIds: [], - main: Bu(), - submenu: Bu(), + main: Ku(), + submenu: Ku(), tags: { open: !1, x: 0, @@ -23360,38 +23387,38 @@ function yW(e = "") { } function fW() { const e = `mjr-grid-context-menu-portal-${pW++}`; - return Dt.mountedPortalIds.push(e), Dt.portalOwnerId || (Dt.portalOwnerId = e), e; -} -function hW(e) { - const t = Dt.mountedPortalIds.filter((n) => n !== e); - Dt.mountedPortalIds.splice( - 0, - Dt.mountedPortalIds.length, - ...t - ), Dt.portalOwnerId === e && (Dt.portalOwnerId = Dt.mountedPortalIds[0] || ""); + return Ut.mountedPortalIds.push(e), Ut.portalOwnerId || (Ut.portalOwnerId = e), e; } function CW(e) { - return String(Dt.portalOwnerId || "") === String(e || ""); + const t = Ut.mountedPortalIds.filter((n) => n !== e); + Ut.mountedPortalIds.splice( + 0, + Ut.mountedPortalIds.length, + ...t + ), Ut.portalOwnerId === e && (Ut.portalOwnerId = Ut.mountedPortalIds[0] || ""); } -function Uu({ x: e = 0, y: t = 0, items: n = [], title: i = "" } = {}) { - yW("grid"), db(), Ir(), Dt.main.open = !0, Dt.main.x = Number(e) || 0, Dt.main.y = Number(t) || 0, Dt.main.items = Array.isArray(n) ? n.filter(Boolean) : [], Dt.main.title = String(i || ""); +function hW(e) { + return String(Ut.portalOwnerId || "") === String(e || ""); +} +function Bu({ x: e = 0, y: t = 0, items: n = [], title: i = "" } = {}) { + yW("grid"), db(), Ir(), Ut.main.open = !0, Ut.main.x = Number(e) || 0, Ut.main.y = Number(t) || 0, Ut.main.items = Array.isArray(n) ? n.filter(Boolean) : [], Ut.main.title = String(i || ""); } function sb() { - cb(Dt.main), Ir(); + cb(Ut.main), Ir(); } function ZW({ x: e = 0, y: t = 0, items: n = [], title: i = "" } = {}) { - Dt.submenu.open = !0, Dt.submenu.x = Number(e) || 0, Dt.submenu.y = Number(t) || 0, Dt.submenu.items = Array.isArray(n) ? n.filter(Boolean) : [], Dt.submenu.title = String(i || ""); + Ut.submenu.open = !0, Ut.submenu.x = Number(e) || 0, Ut.submenu.y = Number(t) || 0, Ut.submenu.items = Array.isArray(n) ? n.filter(Boolean) : [], Ut.submenu.title = String(i || ""); } function Ir() { - cb(Dt.submenu); + cb(Ut.submenu); } function AW({ x: e = 0, y: t = 0, asset: n = null, onChanged: i = null } = {}) { - sb(), Dt.tags.open = !!n, Dt.tags.x = Number(e) || 0, Dt.tags.y = Number(t) || 0, Dt.tags.asset = n || null, Dt.tags.onChanged = typeof i == "function" ? i : null; + sb(), Ut.tags.open = !!n, Ut.tags.x = Number(e) || 0, Ut.tags.y = Number(t) || 0, Ut.tags.asset = n || null, Ut.tags.onChanged = typeof i == "function" ? i : null; } function db() { - Dt.tags.open = !1, Dt.tags.x = 0, Dt.tags.y = 0, Dt.tags.asset = null, Dt.tags.onChanged = null; + Ut.tags.open = !1, Ut.tags.x = 0, Ut.tags.y = 0, Ut.tags.asset = null, Ut.tags.onChanged = null; } -function Vo() { +function Yo() { sb(), db(); } let ub = 1; @@ -23523,7 +23550,7 @@ const WW = (e) => { } catch (I) { (u = console.debug) == null || u.call(console, I); } -}, SW = (e) => { +}, GW = (e) => { var n, i; const t = []; if (!e) return t; @@ -23546,7 +23573,7 @@ const WW = (e) => { (i = console.debug) == null || i.call(console, o); } return t; -}, GW = (e, t) => { +}, SW = (e, t) => { try { const n = String(t ?? ""); return (e || []).findIndex((i) => String((i == null ? void 0 : i.id) ?? "") === n); @@ -23574,7 +23601,7 @@ function ll(e, t = null) { } return n; } -const Hi = (e) => { +const Ei = (e) => { var t, n; try { const i = e ? "grid-contextmenu" : "grid-contextmenu-global"; @@ -23593,7 +23620,7 @@ async function xW(e, t) { root_id: String(e.root_id || e.rootId || ((o = e == null ? void 0 : e.file_info) == null ? void 0 : o.root_id) || "").trim() || void 0 }; if (!n.filename) return { ok: !1, error: "Missing filename" }; - const i = await Et(ct.INDEX_FILES, { files: [n], incremental: !1 }); + const i = await Dt(st.INDEX_FILES, { files: [n], incremental: !1 }); if (!(i != null && i.ok)) return i || { ok: !1, error: "Index refresh failed" }; if ((e == null ? void 0 : e.id) != null) try { @@ -23602,14 +23629,14 @@ async function xW(e, t) { Object.assign(e, a.data); const c = ll(e, a.data), s = (r = c == null ? void 0 : c.querySelector) == null ? void 0 : r.call(c, ".mjr-workflow-dot"); if (s) { - const d = ec(c._mjrAsset); + const d = tc(c._mjrAsset); d && s.replaceWith(d); } } } catch (a) { (l = console.debug) == null || l.call(console, a); } - return Hi(t), { ok: !0, data: { refreshed: !0 } }; + return Ei(t), { ok: !0, data: { refreshed: !0 } }; } function $o(e, t, n) { var o, r; @@ -23625,28 +23652,28 @@ function $o(e, t, n) { (r = console.debug) == null || r.call(console, l); } if (i) { - KI(String(i), t, { + UI(String(i), t, { successMessage: t > 0 ? `Rating set to ${t} stars` : "Rating cleared", errorMessage: "Failed to update rating", warnPrefix: "[GridContextMenu]", onSuccess: () => { oi( - Fi, + Oi, { assetId: String(i), rating: t }, { warnPrefix: "[GridContextMenu]" } ); }, onFailure: (l) => { ai(l, "[GridContextMenu] Rating update", { - showToast: fe.DEBUG_VERBOSE_ERRORS + showToast: he.DEBUG_VERBOSE_ERRORS }); } }); return; } - Ho(e, t).catch((l) => { + Eo(e, t).catch((l) => { ai(l, "[GridContextMenu] Rating update", { - showToast: fe.DEBUG_VERBOSE_ERRORS + showToast: he.DEBUG_VERBOSE_ERRORS }); }); } @@ -23706,23 +23733,23 @@ function LW({ currentPath: e, gridContainer: t }) { null, async () => { try { - const n = await Vi(m("dialog.newFolderName", "New folder name"), ""), i = String(n || "").trim(); + const n = await Yi(m("dialog.newFolderName", "New folder name"), ""), i = String(n || "").trim(); if (!i) return; - const o = await Hr({ + const o = await Er({ op: "create", path: e, name: i }); if (!(o != null && o.ok)) { - Ze((o == null ? void 0 : o.error) || "Failed to create folder", "error"); + Ae((o == null ? void 0 : o.error) || "Failed to create folder", "error"); return; } - Hi(t), Ze( + Ei(t), Ae( m("toast.folderCreated", "Folder created: {name}", { name: i }), "success" ); } catch (n) { - Ze( + Ae( m("toast.createFolderFailedDetail", "Create folder failed: {error}", { error: (n == null ? void 0 : n.message) || String(n || "") }), @@ -23733,7 +23760,7 @@ function LW({ currentPath: e, gridContainer: t }) { ) ]; } -function VW({ asset: e, gridContainer: t, panelState: n }) { +function YW({ asset: e, gridContainer: t, panelState: n }) { const i = String((e == null ? void 0 : e.filepath) || "").trim(), o = [ jn(m("ctx.openFolder", "Open folder"), "pi pi-folder-open", null, () => { var r; @@ -23751,21 +23778,21 @@ function VW({ asset: e, gridContainer: t, panelState: n }) { jn(m("ctx.pinAsBrowserRoot"), "pi pi-bookmark", null, async () => { var a, c; if (!i) { - Ze(m("toast.unableResolveFolderPath"), "error"); + Ae(m("toast.unableResolveFolderPath"), "error"); return; } - const r = await Vi( + const r = await Yi( m("dialog.browserRootLabelOptional"), String((e == null ? void 0 : e.filename) || "") - ), l = await Et(ct.CUSTOM_ROOTS, { + ), l = await Dt(st.CUSTOM_ROOTS, { path: i, label: String(r || "").trim() || void 0 }); if (!(l != null && l.ok)) { - Ze((l == null ? void 0 : l.error) || m("toast.pinFolderFailed"), "error"); + Ae((l == null ? void 0 : l.error) || m("toast.pinFolderFailed"), "error"); return; } - Ze(m("toast.folderPinnedAsBrowserRoot"), "success"); + Ae(m("toast.folderPinnedAsBrowserRoot"), "success"); try { window.dispatchEvent( new CustomEvent("mjr:custom-roots-changed", { @@ -23781,20 +23808,20 @@ function VW({ asset: e, gridContainer: t, panelState: n }) { rl(), jn(m("ctx.createFolderHere"), "pi pi-plus", null, async () => { try { - const r = await Vi(m("dialog.newFolderName"), ""), l = String(r || "").trim(); + const r = await Yi(m("dialog.newFolderName"), ""), l = String(r || "").trim(); if (!l) return; - const a = await Hr({ + const a = await Er({ op: "create", path: i, name: l }); if (!(a != null && a.ok)) { - Ze((a == null ? void 0 : a.error) || m("toast.createFolderFailed"), "error"); + Ae((a == null ? void 0 : a.error) || m("toast.createFolderFailed"), "error"); return; } - Hi(t), Ze(m("toast.folderCreated", { name: l }), "success"); + Ei(t), Ae(m("toast.folderCreated", { name: l }), "success"); } catch (r) { - Ze( + Ae( m("toast.createFolderFailedDetail", { error: (r == null ? void 0 : r.message) || String(r || "") }), @@ -23804,20 +23831,20 @@ function VW({ asset: e, gridContainer: t, panelState: n }) { }), jn(m("ctx.renameFolder"), "pi pi-pencil", null, async () => { try { - const r = String((e == null ? void 0 : e.filename) || "").trim(), l = await Vi(m("dialog.renameFolder"), r), a = String(l || "").trim(); + const r = String((e == null ? void 0 : e.filename) || "").trim(), l = await Yi(m("dialog.renameFolder"), r), a = String(l || "").trim(); if (!a || a === r) return; - const c = await Hr({ + const c = await Er({ op: "rename", path: i, name: a }); if (!(c != null && c.ok)) { - Ze((c == null ? void 0 : c.error) || m("toast.renameFolderFailed"), "error"); + Ae((c == null ? void 0 : c.error) || m("toast.renameFolderFailed"), "error"); return; } - Hi(t), Ze(m("toast.folderRenamed"), "success"); + Ei(t), Ae(m("toast.folderRenamed"), "success"); } catch (r) { - Ze( + Ae( m("toast.renameFolderFailedDetail", { error: (r == null ? void 0 : r.message) || String(r || "") }), @@ -23827,23 +23854,23 @@ function VW({ asset: e, gridContainer: t, panelState: n }) { }), jn(m("ctx.moveFolder"), "pi pi-arrow-right", null, async () => { try { - const r = await Vi( + const r = await Yi( m("dialog.destinationDirectoryPath"), "" ), l = String(r || "").trim(); if (!l) return; - const a = await Hr({ + const a = await Er({ op: "move", path: i, destination: l }); if (!(a != null && a.ok)) { - Ze((a == null ? void 0 : a.error) || m("toast.moveFolderFailed"), "error"); + Ae((a == null ? void 0 : a.error) || m("toast.moveFolderFailed"), "error"); return; } - Hi(t), Ze(m("toast.folderMoved"), "success"); + Ei(t), Ae(m("toast.folderMoved"), "success"); } catch (r) { - Ze( + Ae( m("toast.moveFolderFailedDetail", { error: (r == null ? void 0 : r.message) || String(r || "") }), @@ -23859,18 +23886,18 @@ function VW({ asset: e, gridContainer: t, panelState: n }) { if (!await yi( m("dialog.deleteFolderRecursive", { name: r }) )) return; - const a = await Hr({ + const a = await Er({ op: "delete", path: i, recursive: !0 }); if (!(a != null && a.ok)) { - Ze((a == null ? void 0 : a.error) || m("toast.deleteFolderFailed"), "error"); + Ae((a == null ? void 0 : a.error) || m("toast.deleteFolderFailed"), "error"); return; } - Hi(t), Ze(m("toast.folderDeleted"), "success"); + Ei(t), Ae(m("toast.folderDeleted"), "success"); } catch (r) { - Ze( + Ae( m("toast.deleteFolderFailedDetail", { error: (r == null ? void 0 : r.message) || String(r || "") }), @@ -23880,7 +23907,7 @@ function VW({ asset: e, gridContainer: t, panelState: n }) { }) ), o; } -function YW({ +function VW({ asset: e, card: t, gridContainer: n, @@ -23894,9 +23921,9 @@ function YW({ effectiveSelectionCount: c, isMultiSelected: s, hasSelection: d - } = l, u = [], I = ({ assets: g = [], index: A = 0, mode: p = "" } = {}) => tc({ assets: g, index: A, mode: p }); + } = l, u = [], I = ({ assets: g = [], index: y = 0, mode: p = "" } = {}) => nc({ assets: g, index: y, mode: p }); u.push( - jn("Open Viewer", "pi pi-image", Gi("OPEN_VIEWER"), () => { + jn("Open Viewer", "pi pi-image", Si("OPEN_VIEWER"), () => { var g; try { const p = (d ? da(n) : []).filter((G) => !ua(G)), b = p.length; @@ -23904,63 +23931,63 @@ function YW({ I({ assets: p, index: 0 }); return; } - const L = SW(n).filter( + const L = GW(n).filter( (G) => !ua(G) - ), h = GW(L, e == null ? void 0 : e.id); - if (!L.length || h < 0) return; - I({ assets: L, index: Math.max(0, h) }); - } catch (A) { - (g = console.debug) == null || g.call(console, A); + ), C = SW(L, e == null ? void 0 : e.id); + if (!L.length || C < 0) return; + I({ assets: L, index: Math.max(0, C) }); + } catch (y) { + (g = console.debug) == null || g.call(console, y); } }), jn( m("ctx.showMetadataPanel", "Show metadata panel"), "pi pi-info-circle", - Gi("METADATA_PANEL"), + Si("METADATA_PANEL"), () => { var g; try { MW(n, t, e, i); - const A = n == null ? void 0 : n._mjrOpenDetails; - typeof A == "function" && A(); - } catch (A) { - (g = console.debug) == null || g.call(console, A); + const y = n == null ? void 0 : n._mjrOpenDetails; + typeof y == "function" && y(); + } catch (y) { + (g = console.debug) == null || g.call(console, y); } } ) ); - const y = (d ? a : []).filter( + const A = (d ? a : []).filter( (g) => !ua(g) - ), S = y.length; - S === 2 && u.push( + ), h = A.length; + h === 2 && u.push( jn( "Compare A/B (2 selected)", "pi pi-clone", - Gi("COMPARE_AB"), + Si("COMPARE_AB"), () => { var g; try { - I({ assets: y, index: 0, mode: "ab" }); - } catch (A) { - (g = console.debug) == null || g.call(console, A); + I({ assets: A, index: 0, mode: "ab" }); + } catch (y) { + (g = console.debug) == null || g.call(console, y); } } ) - ), S >= 2 && S <= 4 && u.push( + ), h >= 2 && h <= 4 && u.push( jn( - `Side-by-side (2x2) (${S} selected)`, + `Side-by-side (2x2) (${h} selected)`, "pi pi-table", - Gi("SIDE_BY_SIDE"), + Si("SIDE_BY_SIDE"), () => { var g; try { I({ - assets: y, + assets: A, index: 0, mode: "sidebyside" }); - } catch (A) { - (g = console.debug) == null || g.call(console, A); + } catch (y) { + (g = console.debug) == null || g.call(console, y); } } ) @@ -23968,39 +23995,39 @@ function YW({ jn( m("ctx.openInFolder", "Open in folder"), "pi pi-folder-open", - Gi("OPEN_IN_FOLDER"), + Si("OPEN_IN_FOLDER"), async () => { - const g = await zs(e); - g != null && g.ok ? Ze(m("toast.openedInFolder"), "info", 2e3) : Ze((g == null ? void 0 : g.error) || m("toast.openFolderFailed"), "error"); + const g = await Js(e); + g != null && g.ok ? Ae(m("toast.openedInFolder"), "info", 2e3) : Ae((g == null ? void 0 : g.error) || m("toast.openFolderFailed"), "error"); }, { disabled: !(e != null && e.id || _o(e)) } ), jn( m("ctx.copyPath", "Copy path"), "pi pi-copy", - Gi("COPY_PATH"), + Si("COPY_PATH"), async () => { const g = e != null && e.filepath ? String(e.filepath) : ""; if (!g) { - Ze(m("toast.noFilePath"), "error"); + Ae(m("toast.noFilePath"), "error"); return; } try { - await navigator.clipboard.writeText(g), Ze(m("toast.pathCopied"), "success", 2e3); - } catch (A) { - console.warn(m("log.clipboardCopyFailed", "Clipboard copy failed"), A), Ze(m("toast.pathCopyFailed"), "error"); + await navigator.clipboard.writeText(g), Ae(m("toast.pathCopied"), "success", 2e3); + } catch (y) { + console.warn(m("log.clipboardCopyFailed", "Clipboard copy failed"), y), Ae(m("toast.pathCopyFailed"), "error"); } } ), jn( m("ctx.download", "Download"), "pi pi-download", - Gi("DOWNLOAD"), + Si("DOWNLOAD"), () => { if (!(e != null && e.filepath)) return; - const g = Ea(e.filepath), A = e.filename || "download", p = document.createElement("a"); - p.href = g, p.download = A, document.body.appendChild(p), p.click(), document.body.removeChild(p), Ze( - m("toast.downloadingFile", "Downloading {filename}...", { filename: A }), + const g = Ea(e.filepath), y = e.filename || "download", p = document.createElement("a"); + p.href = g, p.download = y, document.body.appendChild(p), p.click(), document.body.removeChild(p), Ae( + m("toast.downloadingFile", "Downloading {filename}...", { filename: y }), "info", 3e3 ); @@ -24010,38 +24037,38 @@ function YW({ jn( "Add to collection...", "pi pi-bookmark", - Gi("ADD_TO_COLLECTION"), + Si("ADD_TO_COLLECTION"), async () => { - const g = da(n), A = g.length ? g : [e]; - await rd({ x: o, y: r, assets: A }); + const g = da(n), y = g.length ? g : [e]; + await rd({ x: o, y: r, assets: y }); } ) ); - const Z = String((i == null ? void 0 : i.collectionId) || "").trim(); - if (Z) { + const S = String((i == null ? void 0 : i.collectionId) || "").trim(); + if (S) { const g = da(n), p = (g.length ? g : [e]).map(_o).filter(Boolean), b = p.length > 1 ? `Remove from collection (${p.length})` : "Remove from collection"; u.push( jn(b, "pi pi-bookmark", null, async () => { if (!p.length) { - Ze(m("toast.noFilePath"), "error"); + Ae(m("toast.noFilePath"), "error"); return; } - const L = await Og(Z, p); + const L = await Fg(S, p); if (!(L != null && L.ok)) { - Ze((L == null ? void 0 : L.error) || m("toast.removeFromCollectionFailed"), "error"); + Ae((L == null ? void 0 : L.error) || m("toast.removeFromCollectionFailed"), "error"); return; } - Hi(n); + Ei(n); }) ); } - const C = !!(e != null && e.id || _o(e)); + const W = !!(e != null && e.id || _o(e)); return u.push( rl(), jn( m("ctx.editTags", "Edit tags"), "pi pi-tags", - Gi("EDIT_TAGS"), + Si("EDIT_TAGS"), () => { Ib(o + 6, r + 6, e, () => { ll(e, { @@ -24058,9 +24085,9 @@ function YW({ "1-5 >", null, { - disabled: !C, + disabled: !W, closeOnSelect: !1, - submenu: vW(e, C) + submenu: vW(e, W) } ), rl(), @@ -24070,21 +24097,21 @@ function YW({ null, async () => { if (e != null && e.filename || e != null && e.id) { - Ze(m("toast.rescanningFile", "Rescanning file..."), "info", 1600); + Ae(m("toast.rescanningFile", "Rescanning file..."), "info", 1600); try { const g = await xW(e, n); - g != null && g.ok ? Ze( + g != null && g.ok ? Ae( m("toast.metadataRefreshed", "Metadata refreshed{suffix}", { suffix: "" }), "success", 1800 - ) : Ze( + ) : Ae( (g == null ? void 0 : g.error) || m("toast.resetFailed", "Failed to reset index"), "error" ); } catch (g) { - Ze( + Ae( `${m("toast.resetFailed", "Failed to reset index")}: ${(g == null ? void 0 : g.message) || String(g || "")}`, "error" ); @@ -24096,28 +24123,28 @@ function YW({ jn( "Rename...", "pi pi-pencil", - Gi("RENAME"), + Si("RENAME"), async () => { - var L, h; + var L, C; if (!(e != null && e.id || _o(e))) return; - const g = e.filename || "", A = await Vi( + const g = e.filename || "", y = await Yi( m("dialog.rename.title", "Rename file"), g - ), p = ad(A, g); + ), p = ad(y, g); if (!p || p === g) return; const b = ld(p); if (!b.valid) { - Ze(b.reason, "error"); + Ae(b.reason, "error"); return; } try { - const G = await Js(e, p); + const G = await Ts(e, p); if (!(G != null && G.ok)) { - Ze((G == null ? void 0 : G.error) || m("toast.fileRenameFailed"), "error"); + Ae((G == null ? void 0 : G.error) || m("toast.fileRenameFailed"), "error"); return; } - const W = (L = G == null ? void 0 : G.data) == null ? void 0 : L.asset; - W && typeof W == "object" ? (Object.assign(e, W), ll(e, W)) : (e.filename = p, e.filepath && (e.filepath = String(e.filepath).replace(/[^\\/]+$/, p)), e.path && (e.path = String(e.path).replace(/[^\\/]+$/, p)), e.file_info && typeof e.file_info == "object" && (e.file_info.filename = p, e.file_info.filepath && (e.file_info.filepath = String(e.file_info.filepath).replace( + const Z = (L = G == null ? void 0 : G.data) == null ? void 0 : L.asset; + Z && typeof Z == "object" ? (Object.assign(e, Z), ll(e, Z)) : (e.filename = p, e.filepath && (e.filepath = String(e.filepath).replace(/[^\\/]+$/, p)), e.path && (e.path = String(e.path).replace(/[^\\/]+$/, p)), e.file_info && typeof e.file_info == "object" && (e.file_info.filename = p, e.file_info.filepath && (e.file_info.filepath = String(e.file_info.filepath).replace( /[^\\/]+$/, p )), e.file_info.path && (e.file_info.path = String(e.file_info.path).replace( @@ -24129,10 +24156,10 @@ function YW({ path: e.path, file_info: e.file_info })); - const f = mb(e.id), X = (h = f == null ? void 0 : f.querySelector) == null ? void 0 : h.call(f, ".mjr-filename"); - X && (X.textContent = e.filename || p), Ze(m("toast.fileRenamedSuccess"), "success"), Hi(n); + const f = mb(e.id), X = (C = f == null ? void 0 : f.querySelector) == null ? void 0 : C.call(f, ".mjr-filename"); + X && (X.textContent = e.filename || p), Ae(m("toast.fileRenamedSuccess"), "success"), Ei(n); } catch (G) { - Ze( + Ae( m("toast.errorRenaming", "Error renaming file: {error}", { error: (G == null ? void 0 : G.message) || String(G || "") }), @@ -24146,39 +24173,39 @@ function YW({ jn( `Delete ${c} files...`, "pi pi-trash", - Gi("DELETE"), + Si("DELETE"), async () => { - if (await cs(Number(c) || 0)) + if (await ss(Number(c) || 0)) try { - let A = 0, p = 0; + let y = 0, p = 0; const b = []; let L = 0; - const h = a.length ? a : [e]; - for (const G of h) { - const W = await Sa(G); - W != null && W.ok ? (A += 1, (G == null ? void 0 : G.id) != null ? b.push(String(G.id)) : L += 1) : p += 1; + const C = a.length ? a : [e]; + for (const G of C) { + const Z = await Ga(G); + Z != null && Z.ok ? (y += 1, (G == null ? void 0 : G.id) != null ? b.push(String(G.id)) : L += 1) : p += 1; } if (b.length) { - const G = ls(n, b); + const G = as(n, b); i && Array.isArray(G == null ? void 0 : G.selectedIds) && (i.selectedAssetIds = G.selectedIds, i.activeAssetId = G.selectedIds[0] || ""); } - L > 0 && Hi(n), p === 0 ? Ze( + L > 0 && Ei(n), p === 0 ? Ae( m("toast.filesDeletedSuccessN", "{n} files deleted successfully!", { - n: A + n: y }), "success" - ) : Ze( + ) : Ae( m( "toast.filesDeletedPartial", "{success} files deleted, {failed} failed.", - { success: A, failed: p } + { success: y, failed: p } ), "warning" ); - } catch (A) { - Ze( + } catch (y) { + Ae( m("toast.errorDeleting", "Error deleting file: {error}", { - error: (A == null ? void 0 : A.message) || String(A || "") + error: (y == null ? void 0 : y.message) || String(y || "") }), "error" ); @@ -24189,25 +24216,25 @@ function YW({ jn( m("ctx.delete", "Delete"), "pi pi-trash", - Gi("DELETE"), + Si("DELETE"), async () => { - if (await cs(1, e == null ? void 0 : e.filename)) + if (await ss(1, e == null ? void 0 : e.filename)) try { - const A = await Sa(e); - if (!(A != null && A.ok)) { - Ze((A == null ? void 0 : A.error) || m("toast.fileDeleteFailed"), "error"); + const y = await Ga(e); + if (!(y != null && y.ok)) { + Ae((y == null ? void 0 : y.error) || m("toast.fileDeleteFailed"), "error"); return; } if (e != null && e.id) { - const p = ls(n, [String(e.id)]); + const p = as(n, [String(e.id)]); i && Array.isArray(p == null ? void 0 : p.selectedIds) && (i.selectedAssetIds = p.selectedIds, i.activeAssetId = p.selectedIds[0] || ""); } else - Hi(n); - Ze(m("toast.fileDeletedSuccess"), "success"); - } catch (A) { - Ze( + Ei(n); + Ae(m("toast.fileDeletedSuccess"), "success"); + } catch (y) { + Ae( m("toast.errorDeleting", "Error deleting file: {error}", { - error: (A == null ? void 0 : A.message) || String(A || "") + error: (y == null ? void 0 : y.message) || String(y || "") }), "error" ); @@ -24245,7 +24272,7 @@ function sd({ if (!gb(r)) return; const u = String(((d = e == null ? void 0 : e.dataset) == null ? void 0 : d.mjrSubfolder) || "").trim(); if (!u) return; - o.preventDefault(), o.stopPropagation(), Uu({ + o.preventDefault(), o.stopPropagation(), Bu({ x: o.clientX, y: o.clientY, items: LW({ currentPath: u, gridContainer: e }) @@ -24255,7 +24282,7 @@ function sd({ o.preventDefault(), o.stopPropagation(); const a = l._mjrAsset; if (!a) return; - const c = jW(e), s = ua(a) ? VW({ asset: a, gridContainer: e, panelState: r }) : YW({ + const c = jW(e), s = ua(a) ? YW({ asset: a, gridContainer: e, panelState: r }) : VW({ asset: a, card: l, gridContainer: e, @@ -24264,7 +24291,7 @@ function sd({ pointerY: o.clientY, selection: c }); - Uu({ + Bu({ x: o.clientX, y: o.clientY, items: s @@ -24294,20 +24321,20 @@ function sd({ (l = console.debug) == null || l.call(console, s); } try { - UI(); + BI(); } catch (s) { (a = console.debug) == null || a.call(console, s); } try { - Vo(); + Yo(); } catch (s) { (c = console.debug) == null || c.call(console, s); } }; return e._mjrGridContextMenuUnbind = i, i; } -const Ku = Fi; -function kW(e) { +const Uu = Oi; +function XW(e) { var n; const t = String(e ?? ""); try { @@ -24318,7 +24345,7 @@ function kW(e) { } return t.replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1"); } -function XW(e, t = null) { +function NW(e, t = null) { var n, i, o; if (!e) return []; try { @@ -24349,7 +24376,7 @@ function Du(e, t, n) { (o = console.debug) == null || o.call(console, r); } } -async function NW(e, t, n = 5) { +async function kW(e, t, n = 5) { const i = Math.max(1, Number(n) || 1); let o = 0; const r = [], l = async () => { @@ -24374,14 +24401,14 @@ function bb({ gridContainer: e, createRatingBadge: t } = {}) { const d = c == null ? void 0 : c._mjrAsset, u = d == null ? void 0 : d.id; if (u != null) { try { - const I = await Ho(u, s); + const I = await Eo(u, s); if (!(I != null && I.ok)) { - Ze((I == null ? void 0 : I.error) || m("toast.ratingUpdateFailed"), "error"); + Ae((I == null ? void 0 : I.error) || m("toast.ratingUpdateFailed"), "error"); return; } - Ze(m("toast.ratingSetN", { n: s }), "success", 1500); + Ae(m("toast.ratingSetN", { n: s }), "success", 1500); } catch { - Ze(m("toast.ratingUpdateError"), "error"); + Ae(m("toast.ratingUpdateError"), "error"); return; } Du(c, t, s); @@ -24391,27 +24418,27 @@ function bb({ gridContainer: e, createRatingBadge: t } = {}) { var c, s; if (!(n || !e)) { n = !0, yu(!0), i = async (d) => { - var C; + var W; if (Mo().scope === "viewer" || d.defaultPrevented) return; const u = String(d.key || ""); if (u !== "0" && u !== "1" && u !== "2" && u !== "3" && u !== "4" && u !== "5") return; const I = document.querySelector(".mjr-viewer-overlay"); if (I && I.style.display !== "none" || !(e.contains(d.target) || e === d.target)) return; - const S = u === "0" ? 0 : Number(u); - if (!Number.isFinite(S)) return; - const Z = XW(e, d.target); - Z.length && (Z.length > 0 && (d.preventDefault(), d.stopPropagation(), (C = d.stopImmediatePropagation) == null || C.call(d)), await NW(Z, (g) => r(g, S), 5)); + const h = u === "0" ? 0 : Number(u); + if (!Number.isFinite(h)) return; + const S = NW(e, d.target); + S.length && (S.length > 0 && (d.preventDefault(), d.stopPropagation(), (W = d.stopImmediatePropagation) == null || W.call(d)), await kW(S, (g) => r(g, h), 5)); }, o = (d) => { - var S; - const u = (d == null ? void 0 : d.detail) || {}, I = u.assetId ?? u.id ?? null, y = Number(u.rating); - if (!(!I || !Number.isFinite(y))) + var h; + const u = (d == null ? void 0 : d.detail) || {}, I = u.assetId ?? u.id ?? null, A = Number(u.rating); + if (!(!I || !Number.isFinite(A))) try { - const Z = e.querySelector( - `.mjr-asset-card[data-mjr-asset-id="${kW(I)}"]` + const S = e.querySelector( + `.mjr-asset-card[data-mjr-asset-id="${XW(I)}"]` ); - Z && Du(Z, t, y); - } catch (Z) { - (S = console.debug) == null || S.call(console, Z); + S && Du(S, t, A); + } catch (S) { + (h = console.debug) == null || h.call(console, S); } }; try { @@ -24420,7 +24447,7 @@ function bb({ gridContainer: e, createRatingBadge: t } = {}) { (c = console.debug) == null || c.call(console, d); } try { - window.addEventListener(Ku, o); + window.addEventListener(Uu, o); } catch (d) { (s = console.debug) == null || s.call(console, d); } @@ -24435,7 +24462,7 @@ function bb({ gridContainer: e, createRatingBadge: t } = {}) { (c = console.debug) == null || c.call(console, d); } try { - window.removeEventListener(Ku, o); + window.removeEventListener(Uu, o); } catch (d) { (s = console.debug) == null || s.call(console, d); } @@ -24467,12 +24494,12 @@ function RW(e) { var t; return String(((t = e == null ? void 0 : e.dataset) == null ? void 0 : t.mjrGroupStacks) || "") === "1"; } -function FW(e) { +function OW(e) { const t = String((e == null ? void 0 : e.stack_id) || "").trim(); return t ? `stack:${t}` : ""; } -function OW(e, t, n) { - return RW(e) && FW(t) || n; +function FW(e, t, n) { + return RW(e) && OW(t) || n; } function zW(e) { var t, n, i; @@ -24500,7 +24527,7 @@ function JW(e, t, n) { if (!s || !d) return; const u = Array.isArray(d._mjrDupMembers) ? d._mjrDupMembers : [d], I = u.length; s.dispatchEvent( - new CustomEvent(ht.OPEN_STACK_GROUP, { + new CustomEvent(ft.OPEN_STACK_GROUP, { bubbles: !0, detail: { asset: d, @@ -24518,10 +24545,10 @@ function JW(e, t, n) { r.title = `${l} — click to compare all copies`, r.innerHTML = `${o}`; } function yb(e, t = void 0) { - const n = Up(), i = Kp(e, t); + const n = Bp(), i = Up(e, t); return i.use(n), { app: i, pinia: n }; } -const Ra = /* @__PURE__ */ new Map(); +const Oa = /* @__PURE__ */ new Map(); function TW(e, t, n) { try { window.dispatchEvent( @@ -24536,26 +24563,26 @@ function TW(e, t, n) { } catch { } } -function BW(e) { +function KW(e) { const t = document.createElement("div"); return t.dataset.mjrKeepAliveHost = String(e || "_mjrVueApp"), t.style.height = "100%", t.style.width = "100%", t.style.minHeight = "0", t.style.display = "flex", t.style.flexDirection = "column", t.style.overflow = "hidden", t; } -function UW(e, t) { +function BW(e, t) { var n; !e || !t || (e.style.height = "100%", e.style.minHeight = "0", e.style.display = "flex", e.style.flexDirection = "column", e.style.overflow = "hidden", !(e.firstChild === t && e.childNodes.length === 1) && (e.replaceChildren(t), TW((n = t == null ? void 0 : t.dataset) == null ? void 0 : n.mjrKeepAliveHost, t, e))); } function dd(e, t, n = "_mjrVueApp") { if (!e) return !1; - let i = Ra.get(n), o = !1; + let i = Oa.get(n), o = !1; if (!i) { - const r = BW(n), { app: l } = yb(t); - l.mount(r), i = { app: l, host: r, container: null }, Ra.set(n, i), o = !0; + const r = KW(n), { app: l } = yb(t); + l.mount(r), i = { app: l, host: r, container: null }, Oa.set(n, i), o = !0; } - return UW(e, i.host), i.container = e, o; + return BW(e, i.host), i.container = e, o; } function ud(e, t = "_mjrVueApp") { var i, o; - const n = Ra.get(t); + const n = Oa.get(t); if (n != null && n.app) { try { n.app.unmount(); @@ -24565,7 +24592,7 @@ function ud(e, t = "_mjrVueApp") { (o = (i = n.host) == null ? void 0 : i.remove) == null || o.call(i); } catch { } - Ra.delete(t); + Oa.delete(t); } } function er(e, t, n) { @@ -24575,24 +24602,24 @@ function er(e, t, n) { let d; n.key && ((a = n.debug) != null && a.call(n)) && (d = Date.now()); const u = e(); - if (!(u.length !== i.length || u.some((S, Z) => i[Z] !== S))) + if (!(u.length !== i.length || u.some((h, S) => i[S] !== h))) return o; i = u; - let y; - if (n.key && ((c = n.debug) != null && c.call(n)) && (y = Date.now()), o = t(...u), n.key && ((s = n.debug) != null && s.call(n))) { - const S = Math.round((Date.now() - d) * 100) / 100, Z = Math.round((Date.now() - y) * 100) / 100, C = Z / 16, g = (A, p) => { - for (A = String(A); A.length < p; ) - A = " " + A; - return A; + let A; + if (n.key && ((c = n.debug) != null && c.call(n)) && (A = Date.now()), o = t(...u), n.key && ((s = n.debug) != null && s.call(n))) { + const h = Math.round((Date.now() - d) * 100) / 100, S = Math.round((Date.now() - A) * 100) / 100, W = S / 16, g = (y, p) => { + for (y = String(y); y.length < p; ) + y = " " + y; + return y; }; console.info( - `%c⏱ ${g(Z, 5)} /${g(S, 5)} ms`, + `%c⏱ ${g(S, 5)} /${g(h, 5)} ms`, ` font-size: .6rem; font-weight: bold; color: hsl(${Math.max( 0, - Math.min(120 - 120 * C, 120) + Math.min(120 - 120 * W, 120) )}deg 100% 31%);`, n == null ? void 0 : n.key ); @@ -24603,20 +24630,20 @@ function er(e, t, n) { i = a; }, l; } -function Eu(e, t) { +function Hu(e, t) { if (e === void 0) throw new Error("Unexpected undefined"); return e; } -const KW = (e, t) => Math.abs(e - t) < 1.01, DW = (e, t, n) => { +const UW = (e, t) => Math.abs(e - t) < 1.01, DW = (e, t, n) => { let i; return function(...o) { e.clearTimeout(i), i = e.setTimeout(() => t.apply(this, o), n); }; -}, Hu = (e) => { +}, Eu = (e) => { const { offsetWidth: t, offsetHeight: n } = e; return { width: t, height: n }; -}, EW = (e) => e, HW = (e) => { +}, HW = (e) => e, EW = (e) => { const t = Math.max(e.startIndex - e.overscan, 0), n = Math.min(e.endIndex + e.overscan, e.count - 1), i = []; for (let o = t; o <= n; o++) i.push(o); @@ -24632,7 +24659,7 @@ const KW = (e, t) => Math.abs(e - t) < 1.01, DW = (e, t, n) => { const { width: a, height: c } = l; t({ width: Math.round(a), height: Math.round(c) }); }; - if (o(Hu(n)), !i.ResizeObserver) + if (o(Eu(n)), !i.ResizeObserver) return () => { }; const r = new i.ResizeObserver((l) => { @@ -24645,7 +24672,7 @@ const KW = (e, t) => Math.abs(e - t) < 1.01, DW = (e, t, n) => { return; } } - o(Hu(n)); + o(Eu(n)); }; e.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(a) : a(); }); @@ -24747,8 +24774,8 @@ class _W { scrollPaddingStart: 0, scrollPaddingEnd: 0, horizontal: !1, - getItemKey: EW, - rangeExtractor: HW, + getItemKey: HW, + rangeExtractor: EW, onChange: () => { }, measureElement: fb, @@ -24863,29 +24890,29 @@ class _W { void 0 ); for (let I = 0; I < s; I++) { - const y = d[I]; - y && (u[y.lane] = I); + const A = d[I]; + A && (u[A.lane] = I); } for (let I = s; I < n; I++) { - const y = r(I), S = this.laneAssignments.get(I); - let Z, C; - if (S !== void 0 && this.options.lanes > 1) { - Z = S; - const b = u[Z], L = b !== void 0 ? d[b] : void 0; - C = L ? L.end + this.options.gap : i + o; + const A = r(I), h = this.laneAssignments.get(I); + let S, W; + if (h !== void 0 && this.options.lanes > 1) { + S = h; + const b = u[S], L = b !== void 0 ? d[b] : void 0; + W = L ? L.end + this.options.gap : i + o; } else { const b = this.options.lanes === 1 ? d[I - 1] : this.getFurthestMeasurement(d, I); - C = b ? b.end + this.options.gap : i + o, Z = b ? b.lane : I % this.options.lanes, this.options.lanes > 1 && this.laneAssignments.set(I, Z); + W = b ? b.end + this.options.gap : i + o, S = b ? b.lane : I % this.options.lanes, this.options.lanes > 1 && this.laneAssignments.set(I, S); } - const g = c.get(y), A = typeof g == "number" ? g : this.options.estimateSize(I), p = C + A; + const g = c.get(A), y = typeof g == "number" ? g : this.options.estimateSize(I), p = W + y; d[I] = { index: I, - start: C, - size: A, + start: W, + size: y, end: p, - key: y, - lane: Z - }, u[Z] = I; + key: A, + lane: S + }, u[S] = I; } return this.measurementsCache = d, d; }, @@ -24988,11 +25015,11 @@ class _W { ), this.getVirtualItemForOffset = (n) => { const i = this.getMeasurements(); if (i.length !== 0) - return Eu( - i[hb( + return Hu( + i[Cb( 0, i.length - 1, - (o) => Eu(i[o]).start, + (o) => Hu(i[o]).start, n )] ); @@ -25111,7 +25138,7 @@ class _W { return; } const i = this.scrollState.index != null ? this.getOffsetForIndex(this.scrollState.index, this.scrollState.align) : void 0, o = i ? i[0] : this.scrollState.lastTargetOffset, r = 1, l = o !== this.scrollState.lastTargetOffset; - if (!l && KW(o, this.getScrollOffset())) { + if (!l && UW(o, this.getScrollOffset())) { if (this.scrollState.stableFrames++, this.scrollState.stableFrames >= r) { this.scrollState = null; return; @@ -25124,7 +25151,7 @@ class _W { this.scheduleScrollReconcile(); } } -const hb = (e, t, n, i) => { +const Cb = (e, t, n, i) => { for (; e <= t; ) { const o = (e + t) / 2 | 0, r = n(o); if (r < i) @@ -25148,7 +25175,7 @@ function $W({ startIndex: 0, endIndex: o }; - let l = hb( + let l = Cb( 0, o, r, @@ -25173,17 +25200,17 @@ function $W({ return { startIndex: l, endIndex: a }; } function e1(e) { - const t = new _W(xe(e)), n = Ys(t), i = t._didMount(); - return cn( - () => xe(e).getScrollElement(), + const t = new _W(ve(e)), n = Xs(t), i = t._didMount(); + return dn( + () => ve(e).getScrollElement(), (o) => { o && t._willUpdate(); }, { immediate: !0 } - ), cn( - () => xe(e), + ), dn( + () => ve(e), (o) => { t.setOptions({ ...o, @@ -25204,11 +25231,11 @@ function t1(e) { observeElementRect: qW, observeElementOffset: PW, scrollToFn: QW, - ...xe(e) + ...ve(e) })) ); } -const Qr = "application/x-mjr-asset", Cb = /* @__PURE__ */ new Set([".png", ".jpg", ".jpeg", ".webp", ".gif", ".bmp", ".avif"]), Zb = /* @__PURE__ */ new Set([".mp4", ".mov", ".mkv", ".webm", ".avi"]), Ab = /* @__PURE__ */ new Set([".wav", ".mp3", ".flac", ".ogg", ".m4a", ".aac", ".opus"]), Wb = /* @__PURE__ */ new Set([ +const Qr = "application/x-mjr-asset", hb = /* @__PURE__ */ new Set([".png", ".jpg", ".jpeg", ".webp", ".gif", ".bmp", ".avif"]), Zb = /* @__PURE__ */ new Set([".mp4", ".mov", ".mkv", ".webm", ".avi"]), Ab = /* @__PURE__ */ new Set([".wav", ".mp3", ".flac", ".ogg", ".m4a", ".aac", ".opus"]), Wb = /* @__PURE__ */ new Set([ ".obj", ".fbx", ".glb", @@ -25257,7 +25284,7 @@ const Qr = "application/x-mjr-asset", Cb = /* @__PURE__ */ new Set([".png", ".jp }, r1 = (e) => { if (!e) return !1; const t = e.lastIndexOf("."); - return t === -1 ? !1 : Cb.has(e.slice(t).toLowerCase()); + return t === -1 ? !1 : hb.has(e.slice(t).toLowerCase()); }, l1 = (e) => e ? String(e.kind || "").toLowerCase() === "image" ? !0 : r1(e.filename) : !1, a1 = (e) => { if (!e) return !1; const t = e.lastIndexOf("."); @@ -25290,50 +25317,50 @@ const Qr = "application/x-mjr-asset", Cb = /* @__PURE__ */ new Set([".png", ".jp if (!n) return !1; const i = (n.split(/[?#]/)[0].split(".").pop() || "").toLowerCase(); return i ? t && i === String(t).toLowerCase() ? !0 : Zb.has(`.${i}`) : !1; -}, nc = (e, t, n) => { +}, ic = (e, t, n) => { if (!e || e.type !== "combo" || !e.options) return !1; const i = Array.isArray(e.options.values) && e.options.values || e.options.values && Array.isArray(e.options.values.values) && e.options.values.values || null; return Array.isArray(i) ? i.some((o) => { const r = typeof o == "string" ? o : (o == null ? void 0 : o.content) ?? (o == null ? void 0 : o.value) ?? (o == null ? void 0 : o.text); return n(r, t); }) : !1; -}, b1 = (e, t) => nc(e, t, wb), Mb = (e, t) => { +}, b1 = (e, t) => ic(e, t, wb), Mb = (e, t) => { if (typeof e != "string") return !1; const n = e.trim().toLowerCase(); if (!n) return !1; const i = (n.split(/[?#]/)[0].split(".").pop() || "").toLowerCase(); - return i ? t && i === String(t).toLowerCase() ? !0 : Cb.has(`.${i}`) : !1; -}, p1 = (e, t) => nc(e, t, Mb), Sb = (e, t) => { + return i ? t && i === String(t).toLowerCase() ? !0 : hb.has(`.${i}`) : !1; +}, p1 = (e, t) => ic(e, t, Mb), Gb = (e, t) => { if (typeof e != "string") return !1; const n = e.trim().toLowerCase(); if (!n) return !1; const i = (n.split(/[?#]/)[0].split(".").pop() || "").toLowerCase(); return i ? t && i === String(t).toLowerCase() ? !0 : Ab.has(`.${i}`) : !1; -}, y1 = (e, t) => nc(e, t, Sb), Gb = (e, t) => { +}, y1 = (e, t) => ic(e, t, Gb), Sb = (e, t) => { if (typeof e != "string") return !1; const n = e.trim().toLowerCase(); if (!n) return !1; const i = (n.split(/[?#]/)[0].split(".").pop() || "").toLowerCase(); return i ? t && i === String(t).toLowerCase() ? !0 : Wb.has(`.${i}`) : !1; -}, f1 = (e, t) => nc(e, t, Gb), Fa = /* @__PURE__ */ new WeakMap(); -let Oa = !1; -function h1(e) { +}, f1 = (e, t) => ic(e, t, Sb), Fa = /* @__PURE__ */ new WeakMap(); +let za = !1; +function C1(e) { return e && Fa.get(e) || null; } -function C1(e, t) { +function h1(e, t) { return e ? typeof t == "function" ? (Fa.set(e, t), t) : (Fa.delete(e), null) : null; } function Z1(e) { e && Fa.delete(e); } function A1() { - Oa = !0; + za = !0; } function W1() { - return Oa ? (Oa = !1, !0) : !1; + return za ? (za = !1, !0) : !1; } function $u() { - Oa = !1; + za = !1; } const w1 = (e) => { var n; @@ -25344,7 +25371,7 @@ const w1 = (e) => { if (!n) return !1; const i = t.clientX, o = t.clientY; return i >= n.left && i <= n.right && o >= n.top && o <= n.bottom; -}, Yo = (e) => { +}, Vo = (e) => { var t, n, i, o, r, l; try { (n = (t = e == null ? void 0 : e.graph) == null ? void 0 : t.setDirtyCanvas) == null || n.call(t, !0, !0); @@ -25356,13 +25383,13 @@ const w1 = (e) => { } catch (a) { (l = console.debug) == null || l.call(console, a); } -}, gs = (e) => { +}, Is = (e) => { try { return new URL(String(e || ""), window.location.href).href; } catch { return String(e || ""); } -}, M1 = () => Qp("mjr_", 24), S1 = (e) => { +}, M1 = () => Qp("mjr_", 24), G1 = (e) => { const t = e && typeof e == "object" ? e : null; if (!t) return null; const n = t.filename || t.name; @@ -25416,11 +25443,11 @@ const w1 = (e) => { !d || typeof d != "object" || n.push(d); } return n; -}, G1 = /* @__PURE__ */ new Set([".png", ".jpg", ".jpeg", ".webp", ".avif", ".mp4", ".mov"]), x1 = (e) => { +}, S1 = /* @__PURE__ */ new Set([".png", ".jpg", ".jpeg", ".webp", ".avif", ".mp4", ".mov"]), x1 = (e) => { if (!e || typeof e != "object") return !1; if (e.has_workflow || e.has_generation_data) return !0; const t = String(e.ext || e.filename || "").toLowerCase(), n = t.includes(".") ? t.slice(t.lastIndexOf(".")) : `.${t}`; - return G1.has(n); + return S1.has(n); }, j1 = (e) => { var n; if (!e || typeof e != "object") return ""; @@ -25438,7 +25465,7 @@ const w1 = (e) => { if (!r) continue; const l = document.createElement("a"); try { - l.href = gs(r), l.download = i.filename || i.name || "download", l.style.display = "none", document.body.appendChild(l), l.click(), setTimeout(() => { + l.href = Is(r), l.download = i.filename || i.name || "download", l.style.display = "none", document.body.appendChild(l), l.click(), setTimeout(() => { try { l.remove(); } catch { @@ -25457,26 +25484,26 @@ const w1 = (e) => { if (!e || !t) return; const r = xb(n, i); if (Array.isArray(r) && r.length > 1) { - const I = r.map(S1).filter(Boolean); + const I = r.map(G1).filter(Boolean); if (I.length > 1) { - let y = ""; + let A = ""; try { - y = M1(); - } catch (S) { - console.warn("[DragOut] failed to create secure batch token", S); + A = M1(); + } catch (h) { + console.warn("[DragOut] failed to create secure batch token", h); } - if (y) { + if (A) { try { - Et(ct.BATCH_ZIP_CREATE, { token: y, items: I }).catch(() => { + Dt(st.BATCH_ZIP_CREATE, { token: A, items: I }).catch(() => { }); - } catch (C) { - (s = console.debug) == null || s.call(console, C); + } catch (W) { + (s = console.debug) == null || s.call(console, W); } - const S = gs(iy(y)), Z = `Majoor_Batch_${I.length}.zip`; + const h = Is(iy(A)), S = `Majoor_Batch_${I.length}.zip`; try { - e.setData("text/uri-list", S), e.setData("DownloadURL", `application/zip:${Z}:${S}`), e.effectAllowed = "copy"; - } catch (C) { - (d = console.debug) == null || d.call(console, C); + e.setData("text/uri-list", h), e.setData("DownloadURL", `application/zip:${S}:${h}`), e.effectAllowed = "copy"; + } catch (W) { + (d = console.debug) == null || d.call(console, W); } return; } @@ -25484,13 +25511,13 @@ const w1 = (e) => { } const l = t.filename || t.name; if (!l) return; - const a = gs(o), c = I1(l); + const a = Is(o), c = I1(l); try { e.setData("text/uri-list", a), e.setData("DownloadURL", `${c}:${l}:${a}`), e.effectAllowed = "copy"; } catch (I) { (u = console.debug) == null || u.call(console, I); } -}, V1 = (e, { asset: t, containerEl: n, card: i }) => { +}, Y1 = (e, { asset: t, containerEl: n, card: i }) => { var o, r; if (!(!e || !t)) try { @@ -25501,13 +25528,13 @@ const w1 = (e) => { const d = c.length, u = t.filename || t.name || "file", I = m( "dialog.stripMetadataBody", "Would you like to download a clean copy with ComfyUI workflow and generation metadata removed?" - ), y = d > 1 ? `${m("dialog.stripMetadataBatchHeader", `You dragged ${d} files outside ComfyUI.`)} + ), A = d > 1 ? `${m("dialog.stripMetadataBatchHeader", `You dragged ${d} files outside ComfyUI.`)} ${I}` : `${m("dialog.stripMetadataHeader", `You dragged "${u}" outside ComfyUI.`)} ${I}`; - yi(y, m("dialog.stripMetadataTitle", "Strip ComfyUI Metadata?")).then((S) => { - S && v1(c); + yi(A, m("dialog.stripMetadataTitle", "Strip ComfyUI Metadata?")).then((h) => { + h && v1(c); }).catch(() => { }); } catch (l) { @@ -25519,8 +25546,8 @@ ${I}`; let t = tm.get(e); return t || (t = { node: null, prev: null }, tm.set(e, t)), t; }, nm = (e, t, n) => { - var S, Z, C; - const i = ((S = e == null ? void 0 : e.canvas) == null ? void 0 : S.canvas) || document.querySelector("canvas"), o = (Z = e == null ? void 0 : e.canvas) == null ? void 0 : Z.graph, r = (C = e == null ? void 0 : e.canvas) == null ? void 0 : C.ds; + var h, S, W; + const i = ((h = e == null ? void 0 : e.canvas) == null ? void 0 : h.canvas) || document.querySelector("canvas"), o = (S = e == null ? void 0 : e.canvas) == null ? void 0 : S.graph, r = (W = e == null ? void 0 : e.canvas) == null ? void 0 : W.ds; if (!i || !o || !r) return null; const l = i.getBoundingClientRect(); if (t < l.left || t > l.right || n < l.top || n > l.bottom) @@ -25528,17 +25555,17 @@ ${I}`; const a = Number(r.scale) || 1, c = r.offset || [0, 0], s = Array.isArray(c) ? Number(c[0]) || 0 : Number(c == null ? void 0 : c.x) || 0, d = Array.isArray(c) ? Number(c[1]) || 0 : Number(c == null ? void 0 : c.y) || 0, u = (t - l.left) / a - s, I = (n - l.top) / a - d; if (typeof o.getNodeOnPos == "function") return o.getNodeOnPos(u, I); - const y = o._nodes || []; - for (let g = y.length - 1; g >= 0; g--) { - const A = y[g]; - if (!(A != null && A.pos) || !(A != null && A.size)) continue; - const p = A.size[0]; - let b = A.size[1]; - if (A.flags && A.flags.collapsed && (b = 30), u >= A.pos[0] && I >= A.pos[1] && u <= A.pos[0] + p && I <= A.pos[1] + b) - return A; + const A = o._nodes || []; + for (let g = A.length - 1; g >= 0; g--) { + const y = A[g]; + if (!(y != null && y.pos) || !(y != null && y.size)) continue; + const p = y.size[0]; + let b = y.size[1]; + if (y.flags && y.flags.collapsed && (b = 30), u >= y.pos[0] && I >= y.pos[1] && u <= y.pos[0] + p && I <= y.pos[1] + b) + return y; } return null; -}, Y1 = (e, t, n) => { +}, V1 = (e, t, n) => { const i = jb(e); !t || i.node === t || (br(e, n), i.node = t, i.prev = { color: t.color, bgcolor: t.bgcolor }, t.bgcolor = "#3355ff", t.color = "#a9c4ff", n(e)); }, br = (e, t) => { @@ -25552,7 +25579,7 @@ ${I}`; } n.node = null, n.prev = null, t(e); } -}, k1 = (e, t) => { +}, X1 = (e, t) => { if (!e || e.type !== "combo" || !e.options) return; let n = e.options.values, i = e.options; if (typeof n == "function") @@ -25563,7 +25590,7 @@ ${I}`; else return; n.some((r) => typeof r == "string" ? r === t : ((r == null ? void 0 : r.content) ?? (r == null ? void 0 : r.value) ?? (r == null ? void 0 : r.text)) === t) || (n.length === 0 || typeof n[0] == "string" ? n.unshift(t) : n.unshift({ content: t, text: t, value: t }), i.values = n); -}, X1 = /* @__PURE__ */ new Set(["number", "int", "float", "boolean", "toggle", "checkbox"]), N1 = ["output", "save", "export", "folder", "dir"], R1 = ["file", "path"], F1 = ["path", "file", "input", "src", "source"], O1 = (e, t, n) => { +}, N1 = /* @__PURE__ */ new Set(["number", "int", "float", "boolean", "toggle", "checkbox"]), k1 = ["output", "save", "export", "folder", "dir"], R1 = ["file", "path"], O1 = ["path", "file", "input", "src", "source"], F1 = (e, t, n) => { var s; const i = e == null ? void 0 : e.widgets; if (!Array.isArray(i) || !i.length) return null; @@ -25571,19 +25598,19 @@ ${I}`; for (const d of i) { if (!d) continue; const u = String((d == null ? void 0 : d.type) || "").toLowerCase(), I = d == null ? void 0 : d.value; - if (X1.has(u) || typeof I == "number" || typeof I == "boolean") continue; - const y = u === "text" || u === "string" || u === "combo", S = typeof (d == null ? void 0 : d.callback) == "function" && typeof I == "string"; - if (!y && !S) continue; - const Z = String((d == null ? void 0 : d.name) || (d == null ? void 0 : d.label) || "").toLowerCase().trim(); - let C = 0; - n.exactNames.has(Z) && (C += 100), Z === "file" && l && u === "combo" && n.comboChecker(d, o) && (C += 100); - const g = n.mediaTerms.some((b) => Z.includes(b)), A = F1.some((b) => Z.includes(b)); - g && A && (C += 80), R1.some((b) => Z.includes(b)) && (C += 35); + if (N1.has(u) || typeof I == "number" || typeof I == "boolean") continue; + const A = u === "text" || u === "string" || u === "combo", h = typeof (d == null ? void 0 : d.callback) == "function" && typeof I == "string"; + if (!A && !h) continue; + const S = String((d == null ? void 0 : d.name) || (d == null ? void 0 : d.label) || "").toLowerCase().trim(); + let W = 0; + n.exactNames.has(S) && (W += 100), S === "file" && l && u === "combo" && n.comboChecker(d, o) && (W += 100); + const g = n.mediaTerms.some((b) => S.includes(b)), y = O1.some((b) => S.includes(b)); + g && y && (W += 80), R1.some((b) => S.includes(b)) && (W += 35); for (const { terms: b, score: L } of n.extraTerms) - b.some((h) => Z.includes(h)) && (C += L); - N1.some((b) => Z.includes(b)) && (C -= 90), n.exactSingleNames.has(Z) && (typeof I == "string" && I.trim() === "" || n.looksLikeFn(I, o) ? C += 25 : C -= 10), l && (C += 15); + b.some((C) => S.includes(C)) && (W += L); + k1.some((b) => S.includes(b)) && (W -= 90), n.exactSingleNames.has(S) && (typeof I == "string" && I.trim() === "" || n.looksLikeFn(I, o) ? W += 25 : W -= 10), l && (W += 15); const p = typeof I == "string" && I.trim() === ""; - p && (C += 3), u === "combo" && n.comboChecker(d, o) && (C += 12), a.push({ w: d, score: C, emptyValue: p, combo: u === "combo" }); + p && (W += 3), u === "combo" && n.comboChecker(d, o) && (W += 12), a.push({ w: d, score: W, emptyValue: p, combo: u === "combo" }); } if (!a.length) return null; a.sort((d, u) => u.score !== d.score ? u.score - d.score : u.emptyValue !== d.emptyValue ? u.emptyValue ? 1 : -1 : u.combo !== d.combo ? u.combo ? 1 : -1 : 0); @@ -25619,10 +25646,10 @@ ${I}`; mediaTerms: ["audio", "sound", "music"], extraTerms: [{ terms: ["media", "track"], score: 45 }], exactSingleNames: /* @__PURE__ */ new Set(["audio"]), - looksLikeFn: Sb, + looksLikeFn: Gb, comboChecker: y1, scoreKey: "__mjrAudioPickScore" -}, B1 = { +}, K1 = { exactNames: /* @__PURE__ */ new Set([ "model_path", "input_model", @@ -25653,13 +25680,13 @@ ${I}`; mediaTerms: ["model", "mesh", "geometry", "scene", "object", "point", "cloud", "splat"], extraTerms: [{ terms: ["asset", "resource"], score: 30 }], exactSingleNames: /* @__PURE__ */ new Set(["model", "mesh", "geometry"]), - looksLikeFn: Gb, + looksLikeFn: Sb, comboChecker: f1, scoreKey: "__mjrModel3DPickScore" }, im = (e, t, n) => { const i = String((t == null ? void 0 : t.kind) || "").toLowerCase(); - return O1(e, n, i === "model3d" ? B1 : i === "audio" ? T1 : i === "image" ? J1 : z1); -}, U1 = async ({ post: e, endpoint: t, payload: n, index: i = !0, purpose: o = null }) => { + return F1(e, n, i === "model3d" ? K1 : i === "audio" ? T1 : i === "image" ? J1 : z1); +}, B1 = async ({ post: e, endpoint: t, payload: n, index: i = !0, purpose: o = null }) => { const r = { index: !!i, files: [ @@ -25681,7 +25708,7 @@ ${I}`; purpose: o = null }) => { var c; - const r = await U1({ post: e, endpoint: t, payload: n, index: i, purpose: o }); + const r = await B1({ post: e, endpoint: t, payload: n, index: i, purpose: o }); if (!(r != null && r.ok)) return console.warn("Majoor: stage-to-input failed", (r == null ? void 0 : r.error) || r), null; const l = Array.isArray((c = r.data) == null ? void 0 : c.staged) ? r.data.staged[0] : null; @@ -25691,13 +25718,13 @@ ${I}`; name: (l == null ? void 0 : l.name) || null, subfolder: (l == null ? void 0 : l.subfolder) || "" } : null; -}, K1 = async ({ post: e, endpoint: t, payload: n, index: i = !0, purpose: o = null }) => { +}, U1 = async ({ post: e, endpoint: t, payload: n, index: i = !0, purpose: o = null }) => { const r = await vb({ post: e, endpoint: t, payload: n, index: i, purpose: o }); return (r == null ? void 0 : r.relativePath) || null; }, al = () => { const e = Qn(); return e && typeof e == "object" ? e : null; -}, D1 = (e) => i1(e, { buildCustomViewURL: mg, buildViewURL: ul }), po = /* @__PURE__ */ new Map(), Lb = 6e4, om = 20, E1 = 5 * 1024 * 1024, H1 = 5e3, q1 = 2e4, P1 = 256, Q1 = 8192, _1 = /[\u0000-\u001f\u007f]/, $1 = /\u0000/, ew = (e) => _1.test(String(e || "")), tw = (e) => $1.test(String(e || "")), nw = (e) => { +}, D1 = (e) => i1(e, { buildCustomViewURL: mg, buildViewURL: ul }), po = /* @__PURE__ */ new Map(), Lb = 6e4, om = 20, H1 = 5 * 1024 * 1024, E1 = 5e3, q1 = 2e4, P1 = 256, Q1 = 8192, _1 = /[\u0000-\u001f\u007f]/, $1 = /\u0000/, ew = (e) => _1.test(String(e || "")), tw = (e) => $1.test(String(e || "")), nw = (e) => { if (!e || typeof e != "object" || Array.isArray(e)) return !1; const t = Number(e.id); if (!Number.isFinite(t)) return !1; @@ -25719,10 +25746,10 @@ ${I}`; } return !1; }, rm = (e) => { - if (!e || typeof e != "object" || !Array.isArray(e.nodes) || !Array.isArray(e.links) || e.nodes.length > H1 || e.links.length > q1 || !e.nodes.every(nw) || !e.links.every(iw)) return !1; + if (!e || typeof e != "object" || !Array.isArray(e.nodes) || !Array.isArray(e.links) || e.nodes.length > E1 || e.links.length > q1 || !e.nodes.every(nw) || !e.links.every(iw)) return !1; try { const t = JSON.stringify(e).length; - if (!Number.isFinite(t) || t <= 0 || t > E1) return !1; + if (!Number.isFinite(t) || t <= 0 || t > H1) return !1; } catch { return !1; } @@ -25750,67 +25777,67 @@ ${I}`; (o = console.debug) == null || o.call(console, r); } }, rw = async (e, t = null) => { - var a, c, s, d, u, I, y, S, Z, C, g, A, p, b, L; + var a, c, s, d, u, I, A, h, S, W, g, y, p, b, L; const n = e && typeof e == "object" ? e : null, i = Mi(n), o = (n == null ? void 0 : n.filename) || (t ? String(t).split(/[\\/]/).pop() : null), r = al(), l = n != null && n.filename ? `${n.type || "output"}:${n.filename}:${n.subfolder || ""}:${i}` : t ? `path:${t}` : null; if (l) { - const h = po.get(l), G = Date.now(); - if (h && G - (h.at || 0) < Lb) { - if (h.workflow && rm(h.workflow)) + const C = po.get(l), G = Date.now(); + if (C && G - (C.at || 0) < Lb) { + if (C.workflow && rm(C.workflow)) try { if (typeof (r == null ? void 0 : r.loadGraphData) == "function") - return r.loadGraphData(h.workflow), nr(r, o), !0; + return r.loadGraphData(C.workflow), nr(r, o), !0; if (typeof ((c = (a = r == null ? void 0 : r.canvas) == null ? void 0 : a.graph) == null ? void 0 : c.configure) == "function") { - r.canvas.graph.configure(h.workflow), nr(r, o); + r.canvas.graph.configure(C.workflow), nr(r, o); try { (d = (s = r.canvas).setDirty) == null || d.call(s, !0, !0); - } catch (W) { - (u = console.debug) == null || u.call(console, W); + } catch (Z) { + (u = console.debug) == null || u.call(console, Z); } return !0; } if (typeof ((I = r == null ? void 0 : r.graph) == null ? void 0 : I.configure) == "function") - return r.graph.configure(h.workflow), nr(r, o), !0; - } catch (W) { - (y = console.debug) == null || y.call(console, W); + return r.graph.configure(C.workflow), nr(r, o), !0; + } catch (Z) { + (A = console.debug) == null || A.call(console, Z); } return !1; } } try { - let h = null, G = null; + let C = null, G = null; if (n != null && n.filename) { - const W = `${ct.WORKFLOW_QUICK}?type=${encodeURIComponent(n.type || "output")}&filename=${encodeURIComponent(n.filename)}&subfolder=${encodeURIComponent(n.subfolder || "")}` + (i ? `&root_id=${encodeURIComponent(i)}` : ""), f = await Ft(W); - f != null && f.ok && f.workflow && (G = f.workflow), G || (h = `${ct.METADATA}?workflow_only=1&type=${encodeURIComponent(n.type || "output")}&filename=${encodeURIComponent(n.filename)}&subfolder=${encodeURIComponent(n.subfolder || "")}&root_id=${encodeURIComponent(i)}`); - } else t && (h = `${ct.METADATA}?workflow_only=1&path=${encodeURIComponent(String(t))}`); - if (!G && h) { - const W = await Ft(h); - if (!(W != null && W.ok) || !W.data) + const Z = `${st.WORKFLOW_QUICK}?type=${encodeURIComponent(n.type || "output")}&filename=${encodeURIComponent(n.filename)}&subfolder=${encodeURIComponent(n.subfolder || "")}` + (i ? `&root_id=${encodeURIComponent(i)}` : ""), f = await Ft(Z); + f != null && f.ok && f.workflow && (G = f.workflow), G || (C = `${st.METADATA}?workflow_only=1&type=${encodeURIComponent(n.type || "output")}&filename=${encodeURIComponent(n.filename)}&subfolder=${encodeURIComponent(n.subfolder || "")}&root_id=${encodeURIComponent(i)}`); + } else t && (C = `${st.METADATA}?workflow_only=1&path=${encodeURIComponent(String(t))}`); + if (!G && C) { + const Z = await Ft(C); + if (!(Z != null && Z.ok) || !Z.data) return !1; - G = (S = W.data) == null ? void 0 : S.workflow; + G = (h = Z.data) == null ? void 0 : h.workflow; } if (!rm(G)) return !1; if (l && (po.set(l, { workflow: G, at: Date.now() }), ow()), typeof (r == null ? void 0 : r.loadGraphData) == "function") return r.loadGraphData(G), nr(r, o), !0; - if (typeof ((C = (Z = r == null ? void 0 : r.canvas) == null ? void 0 : Z.graph) == null ? void 0 : C.configure) == "function") { + if (typeof ((W = (S = r == null ? void 0 : r.canvas) == null ? void 0 : S.graph) == null ? void 0 : W.configure) == "function") { r.canvas.graph.configure(G), nr(r, o); try { - (A = (g = r.canvas).setDirty) == null || A.call(g, !0, !0); - } catch (W) { - (p = console.debug) == null || p.call(console, W); + (y = (g = r.canvas).setDirty) == null || y.call(g, !0, !0); + } catch (Z) { + (p = console.debug) == null || p.call(console, Z); } return !0; } if (typeof ((b = r == null ? void 0 : r.graph) == null ? void 0 : b.configure) == "function") return r.graph.configure(G), nr(r, o), !0; - } catch (h) { - (L = console.debug) == null || L.call(console, h); + } catch (C) { + (L = console.debug) == null || L.call(console, C); } return !1; }; function lw(e) { return (t) => { - var s, d, u, I, y; + var s, d, u, I, A; const n = t == null ? void 0 : t.dataTransfer; if (!n) return; const i = (d = (s = t == null ? void 0 : t.target) == null ? void 0 : s.closest) == null ? void 0 : d.call(s, ".mjr-asset-card"); @@ -25826,39 +25853,39 @@ function lw(e) { }; try { n.setData(Qr, JSON.stringify(a)), n.setData("text/plain", String(o.filename || "")); - const S = D1(a); - L1({ dt: n, asset: o, containerEl: e, card: i, viewUrl: S }); - } catch (S) { - (u = console.debug) == null || u.call(console, S); + const h = D1(a); + L1({ dt: n, asset: o, containerEl: e, card: i, viewUrl: h }); + } catch (h) { + (u = console.debug) == null || u.call(console, h); } try { i.addEventListener( "dragend", - (S) => { - V1(S, { asset: o, containerEl: e, card: i }); + (h) => { + Y1(h, { asset: o, containerEl: e, card: i }); }, { once: !0 } ); - } catch (S) { - (I = console.debug) == null || I.call(console, S); + } catch (h) { + (I = console.debug) == null || I.call(console, h); } const c = i.querySelector("img") || i.querySelector("video") || i.querySelector("canvas"); if (c && c instanceof HTMLElement) try { n.setDragImage(c, 10, 10); - } catch (S) { - (y = console.debug) == null || y.call(console, S); + } catch (h) { + (A = console.debug) == null || A.call(console, h); } }; } const aw = (e) => { if (!e) return () => { }; - const t = h1(e); + const t = C1(e); if (typeof t == "function") return t; const n = lw(e); - return e.addEventListener("dragstart", n, !0), C1(e, () => { + return e.addEventListener("dragstart", n, !0), h1(e, () => { var o; try { e.removeEventListener("dragstart", n, !0); @@ -25879,13 +25906,13 @@ function cw() { if (!_u(l)) return; const a = nm(o, i.clientX, i.clientY), c = String((l == null ? void 0 : l.filename) || "").split(".").pop() || "", s = a ? im(a, l, c) : null; if (a && s) { - i.preventDefault(), (u = i.stopImmediatePropagation) == null || u.call(i), i.stopPropagation(), Y1(o, a, Yo), i.dataTransfer.dropEffect = "copy", tr("dragover", { node: a == null ? void 0 : a.title, widget: s == null ? void 0 : s.name }); + i.preventDefault(), (u = i.stopImmediatePropagation) == null || u.call(i), i.stopPropagation(), V1(o, a, Vo), i.dataTransfer.dropEffect = "copy", tr("dragover", { node: a == null ? void 0 : a.title, widget: s == null ? void 0 : s.name }); return; } - br(o, Yo), em(o, i) && (i.preventDefault(), i.dataTransfer.dropEffect = "copy"); + br(o, Vo), em(o, i) && (i.preventDefault(), i.dataTransfer.dropEffect = "copy"); }, onDrop: async (i) => { - var u, I, y, S, Z; + var u, I, A, h, S; A1(); const o = al(); if (!Array.from(((u = i == null ? void 0 : i.dataTransfer) == null ? void 0 : u.types) || []).includes(Qr)) return; @@ -25893,45 +25920,45 @@ function cw() { if (!_u(l) || !em(o, i)) return; const a = nm(o, i.clientX, i.clientY), c = String((l == null ? void 0 : l.filename) || "").split(".").pop() || "", s = a ? im(a, l, c) : null; if (!a || !s) { - br(o, Yo), i.preventDefault(), (I = i.stopImmediatePropagation) == null || I.call(i), i.stopPropagation(); - const C = vb({ - post: Et, - endpoint: ct.STAGE_TO_INPUT, + br(o, Vo), i.preventDefault(), (I = i.stopImmediatePropagation) == null || I.call(i), i.stopPropagation(); + const W = vb({ + post: Dt, + endpoint: st.STAGE_TO_INPUT, payload: l, index: !1 - }), g = rw(l), [A, p] = await Promise.all([g, C]); - if (A) { + }), g = rw(l), [y, p] = await Promise.all([g, W]); + if (y) { tr("drop canvas loaded workflow", { file: l == null ? void 0 : l.filename }); return; } const b = p == null ? void 0 : p.relativePath; if (!b) { - tr("drop canvas stage failed"), Ze(`Failed to load file: "${l == null ? void 0 : l.filename}". Staging failed.`, "error"); + tr("drop canvas stage failed"), Ae(`Failed to load file: "${l == null ? void 0 : l.filename}". Staging failed.`, "error"); return; } - tr("drop canvas staged", { value: b }), Ze(`Staged to input: ${b}`, "success", 4e3); + tr("drop canvas staged", { value: b }), Ae(`Staged to input: ${b}`, "success", 4e3); return; } - i.preventDefault(), (y = i.stopImmediatePropagation) == null || y.call(i), i.stopPropagation(), br(o, Yo); - const d = await K1({ - post: Et, - endpoint: ct.STAGE_TO_INPUT, + i.preventDefault(), (A = i.stopImmediatePropagation) == null || A.call(i), i.stopPropagation(), br(o, Vo); + const d = await U1({ + post: Dt, + endpoint: st.STAGE_TO_INPUT, payload: l, index: !1 }); if (d) { - s.type === "combo" && k1(s, d), s.value = d; + s.type === "combo" && X1(s, d), s.value = d; try { - (S = s.callback) == null || S.call(s, s.value); - } catch (C) { - (Z = console.debug) == null || Z.call(console, C); + (h = s.callback) == null || h.call(s, s.value); + } catch (W) { + (S = console.debug) == null || S.call(console, W); } - Yo(o), tr("drop inject", { node: a == null ? void 0 : a.title, widget: s == null ? void 0 : s.name, value: d }); + Vo(o), tr("drop inject", { node: a == null ? void 0 : a.title, widget: s == null ? void 0 : s.name, value: d }); } }, onDragLeave: () => { const i = al(); - br(i, Yo), tr("dragleave"); + br(i, Vo), tr("dragleave"); } }; } @@ -25948,7 +25975,7 @@ function sw() { (o = console.debug) == null || o.call(console, l); } try { - br(al(), Yo); + br(al(), Vo); } catch (l) { (r = console.debug) == null || r.call(console, l); } @@ -25958,10 +25985,10 @@ function dw() { Ro || (Ro = sw(), pr = 0), pr += 1; let e = !1; return ({ force: t = !1 } = {}) => { - e || (e = !0, Vb({ force: t })); + e || (e = !0, Yb({ force: t })); }; } -function Vb({ force: e = !1 } = {}) { +function Yb({ force: e = !1 } = {}) { var t, n; if (!Ro) { pr = 0, $u(); @@ -25979,7 +26006,7 @@ function Vb({ force: e = !1 } = {}) { } Ro = null, $u(); } -function Yb(e) { +function Vb(e) { if (!e) return null; const t = Number(e); if (!isNaN(t)) @@ -25987,153 +26014,153 @@ function Yb(e) { const n = new Date(e); return isNaN(n.getTime()) ? null : n; } -function za(e) { - const t = Yb(e); +function Ja(e) { + const t = Vb(e); if (!t) return ""; const n = t.getDate().toString().padStart(2, "0"), i = (t.getMonth() + 1).toString().padStart(2, "0"); return `${n}/${i}`; } -function Ja(e) { - const t = Yb(e); +function Ta(e) { + const t = Vb(e); if (!t) return ""; const n = t.getHours().toString().padStart(2, "0"), i = t.getMinutes().toString().padStart(2, "0"); return `${n}:${i}`; } -function kb(e) { +function Xb(e) { if (!e) return ""; if (e < 60) return `${Math.round(e)}s`; const t = Math.floor(e / 60), n = Math.round(e % 60); return `${t}m ${n}s`; } -const Kl = "__MJR_MEDIA_BLOB_CACHE__", lm = 2e3, Sc = 1440 * 60 * 1e3, uw = 600 * 1e3; +const Ul = "__MJR_MEDIA_BLOB_CACHE__", lm = 2e3, Sc = 1440 * 60 * 1e3, uw = 600 * 1e3; function mw() { - var y; + var A; const e = /* @__PURE__ */ new Map(); let t = null; function n() { t || (t = setInterval(i, uw)); } function i() { - var S; + var h; try { - const Z = Date.now(); - for (const [C, g] of e) - g.refcount <= 0 && Z > g.expiresAt && (o(g), e.delete(C)); - } catch (Z) { - (S = console.debug) == null || S.call(console, Z); + const S = Date.now(); + for (const [W, g] of e) + g.refcount <= 0 && S > g.expiresAt && (o(g), e.delete(W)); + } catch (S) { + (h = console.debug) == null || h.call(console, S); } } - function o(S) { - var Z, C; + function o(h) { + var S, W; try { - (Z = S == null ? void 0 : S.blobUrl) != null && Z.startsWith("blob:") && URL.revokeObjectURL(S.blobUrl); + (S = h == null ? void 0 : h.blobUrl) != null && S.startsWith("blob:") && URL.revokeObjectURL(h.blobUrl); } catch (g) { - (C = console.debug) == null || C.call(console, g); + (W = console.debug) == null || W.call(console, g); } } function r() { - let S = null, Z = 1 / 0; - for (const [C, g] of e) - g.refcount > 0 || g.expiresAt < Z && (Z = g.expiresAt, S = C); - S && (o(e.get(S)), e.delete(S)); + let h = null, S = 1 / 0; + for (const [W, g] of e) + g.refcount > 0 || g.expiresAt < S && (S = g.expiresAt, h = W); + h && (o(e.get(h)), e.delete(h)); } - function l(S) { - S.expiresAt = Date.now() + Sc; + function l(h) { + h.expiresAt = Date.now() + Sc; } - function a(S) { + function a(h) { try { - return String(S || "").trim(); + return String(h || "").trim(); } catch { return ""; } } - function c(S) { - var Z; + function c(h) { + var S; try { - const C = a(S); - if (!C) return; - const g = e.get(C); - g ? (g.hasError = !0, l(g)) : (e.size >= lm && r(), e.set(C, { blobUrl: null, refcount: 0, expiresAt: Date.now() + Sc, hasError: !0 }), n()); - } catch (C) { - (Z = console.debug) == null || Z.call(console, C); + const W = a(h); + if (!W) return; + const g = e.get(W); + g ? (g.hasError = !0, l(g)) : (e.size >= lm && r(), e.set(W, { blobUrl: null, refcount: 0, expiresAt: Date.now() + Sc, hasError: !0 }), n()); + } catch (W) { + (S = console.debug) == null || S.call(console, W); } } - function s(S) { - var Z, C; + function s(h) { + var S, W; try { - const g = a(S); - return g ? !!((Z = e.get(g)) != null && Z.hasError) : !1; + const g = a(h); + return g ? !!((S = e.get(g)) != null && S.hasError) : !1; } catch (g) { - return (C = console.debug) == null || C.call(console, g), !1; + return (W = console.debug) == null || W.call(console, g), !1; } } - async function d(S) { - var Z; + async function d(h) { + var S; try { - const C = a(S); - if (!C) return null; - const g = e.get(C); + const W = a(h); + if (!W) return null; + const g = e.get(W); if (g != null && g.hasError) return null; if (g != null && g.blobUrl) return g.refcount += 1, l(g), g.blobUrl; - const A = await fetch(S, { credentials: "same-origin" }); - if (!A.ok) - return c(S), null; - const p = await A.blob(), b = URL.createObjectURL(p); - return e.size >= lm && r(), e.set(C, { blobUrl: b, refcount: 1, expiresAt: Date.now() + Sc, hasError: !1 }), n(), b; - } catch (C) { - return (Z = console.debug) == null || Z.call(console, C), c(S), null; + const y = await fetch(h, { credentials: "same-origin" }); + if (!y.ok) + return c(h), null; + const p = await y.blob(), b = URL.createObjectURL(p); + return e.size >= lm && r(), e.set(W, { blobUrl: b, refcount: 1, expiresAt: Date.now() + Sc, hasError: !1 }), n(), b; + } catch (W) { + return (S = console.debug) == null || S.call(console, W), c(h), null; } } - function u(S) { - var Z; + function u(h) { + var S; try { - const C = a(S); - if (!C) return; - const g = e.get(C); + const W = a(h); + if (!W) return; + const g = e.get(W); g && (g.refcount = Math.max(0, g.refcount - 1)); - } catch (C) { - (Z = console.debug) == null || Z.call(console, C); + } catch (W) { + (S = console.debug) == null || S.call(console, W); } } function I() { - var S; + var h; try { t && (clearInterval(t), t = null); - for (const Z of e.values()) o(Z); + for (const S of e.values()) o(S); e.clear(); - } catch (Z) { - (S = console.debug) == null || S.call(console, Z); + } catch (S) { + (h = console.debug) == null || h.call(console, S); } } try { window.addEventListener("beforeunload", I, { once: !0 }); - } catch (S) { - (y = console.debug) == null || y.call(console, S); + } catch (h) { + (A = console.debug) == null || A.call(console, h); } return { markError: c, hasError: s, acquireUrl: d, releaseUrl: u, dispose: I }; } function gw() { var t, n, i, o, r; try { - if (window[Kl]) return window[Kl]; + if (window[Ul]) return window[Ul]; } catch (l) { (t = console.debug) == null || t.call(console, l); } try { - (i = (n = window[Kl]) == null ? void 0 : n.dispose) == null || i.call(n); + (i = (n = window[Ul]) == null ? void 0 : n.dispose) == null || i.call(n); } catch (l) { (o = console.debug) == null || o.call(console, l); } const e = mw(); try { - window[Kl] = e; + window[Ul] = e; } catch (l) { (r = console.debug) == null || r.call(console, l); } return e; } -const Jr = gw(), Vr = (e, t) => { +const Jr = gw(), Yr = (e, t) => { const n = e.__vccOpts || e; for (const [i, o] of t) n[i] = o; @@ -26154,21 +26181,21 @@ const Jr = gw(), Vr = (e, t) => { const t = e, n = ze(() => Math.max(0, Math.min(5, Number(t.rating) || 0))), i = ze(() => n.value > 0), o = ze( () => m("rating.title", "Rating: {n} star{n, plural, one {} other {s}}", { n: n.value }) ); - return (r, l) => i.value ? (be(), Ce("div", { + return (r, l) => i.value ? (be(), Ze("div", { key: 0, class: "mjr-rating-badge", title: o.value }, [ - (be(!0), Ce(Nt, null, Cn(n.value, (a) => (be(), Ce("span", { + (be(!0), Ze(Nt, null, Zn(n.value, (a) => (be(), Ze("span", { key: a, - style: Lt({ + style: vt({ color: "var(--mjr-rating-color, var(--mjr-star-active, #FFD45A))", marginRight: a < n.value ? "2px" : "0" }) }, " ★ ", 4))), 128)) - ], 8, Iw)) : ft("", !0); + ], 8, Iw)) : yt("", !0); } -}, pw = /* @__PURE__ */ Vr(bw, [["__scopeId", "data-v-821bf1b1"]]), yw = ["title"], fw = { +}, pw = /* @__PURE__ */ Yr(bw, [["__scopeId", "data-v-821bf1b1"]]), yw = ["title"], fw = { __name: "TagsBadge", props: { tags: { @@ -26196,35 +26223,35 @@ const Jr = gw(), Vr = (e, t) => { const l = n.value; return l.length <= 5 ? l.join(", ") : l.slice(0, 5).join(", ") + ` +${l.length - 5}`; }); - return (l, a) => i.value ? (be(), Ce("div", { + return (l, a) => i.value ? (be(), Ze("div", { key: 0, class: "mjr-tags-badge", title: o.value, style: { color: "var(--mjr-tag-color, #90CAF9)" } - }, Ye(r.value), 9, yw)) : ft("", !0); + }, Ne(r.value), 9, yw)) : yt("", !0); } -}, hw = /* @__PURE__ */ Vr(fw, [["__scopeId", "data-v-15044260"]]), Cw = ["title"], Zw = { +}, Cw = /* @__PURE__ */ Yr(fw, [["__scopeId", "data-v-15044260"]]), hw = ["title"], Zw = { __name: "GenTimeBadge", props: { genTimeMs: { type: [Number, String], default: 0 } }, setup(e) { const t = e, n = ze(() => od(t.genTimeMs)), i = ze(() => n.value > 0), o = ze(() => zI(n.value)), r = ze(() => id(n.value)); - return (l, a) => i.value ? (be(), Ce("div", { + return (l, a) => i.value ? (be(), Ze("div", { key: 0, class: "mjr-gentime-badge", title: o.value.title, - style: Lt({ color: r.value }) - }, Ye(o.value.text), 13, Cw)) : ft("", !0); + style: vt({ color: r.value }) + }, Ne(o.value.text), 13, hw)) : yt("", !0); } -}, Aw = /* @__PURE__ */ Vr(Zw, [["__scopeId", "data-v-60fe3677"]]), Ww = { +}, Aw = /* @__PURE__ */ Yr(Zw, [["__scopeId", "data-v-60fe3677"]]), Ww = { key: 0, class: "mjr-live-placeholder-wash", "aria-hidden": "true" }, ww = ["alt", "src"], Mw = { key: 1, class: "mjr-media-error-placeholder" -}, Sw = ["data-src", "poster"], Gw = ["src"], xw = { +}, Gw = ["data-src", "poster"], Sw = ["src"], xw = { class: "mjr-audio-waveform-overlay", style: { position: "absolute", inset: "0", display: "flex", "align-items": "center", "justify-content": "center", "pointer-events": "none", color: "white" } }, jw = { @@ -26237,22 +26264,22 @@ const Jr = gw(), Vr = (e, t) => { key: 4, class: "mjr-model3d-thumb-icon", style: { position: "absolute", inset: "0", display: "flex", "align-items": "center", "justify-content": "center", color: "rgba(255,255,255,0.7)" } -}, Vw = ["data-mjr-ext", "data-mjr-badge-bg", "title"], Yw = ["title"], kw = { +}, Yw = ["data-mjr-ext", "data-mjr-badge-bg", "title"], Vw = ["title"], Xw = { key: 6, class: "mjr-card-hover-info" -}, Xw = { +}, Nw = { key: 0, class: "mjr-hover-prompt" -}, Nw = { +}, kw = { key: 1, class: "mjr-hover-gentime" }, Rw = { class: "mjr-card-info mjr-card-meta", style: { position: "relative", padding: "6px 8px", "min-width": "0" } -}, Fw = ["title"], Ow = { +}, Ow = ["title"], Fw = { class: "mjr-card-meta-row", style: { "font-size": "0.85em", opacity: "0.7", "line-height": "1.4", "white-space": "nowrap", overflow: "hidden", "text-overflow": "ellipsis", "padding-right": "16px" } -}, zw = ["title"], Jw = ["title"], Tw = ["title"], Bw = ["title"], Uw = ["title"], Kw = ["aria-label", "title"], Dw = { class: "mjr-stack-group-button-count" }, Ew = ["aria-label", "title"], Hw = { class: "mjr-dup-stack-count" }, am = { +}, zw = ["title"], Jw = ["title"], Tw = ["title"], Kw = ["title"], Bw = ["title"], Uw = ["aria-label", "title"], Dw = { class: "mjr-stack-group-button-count" }, Hw = ["aria-label", "title"], Ew = { class: "mjr-dup-stack-count" }, am = { __name: "AssetCardInner", props: { /** shallowReactive asset object from createVueCard() in GridView_impl.js */ @@ -26286,22 +26313,22 @@ const Jr = gw(), Vr = (e, t) => { } } async function o(Q) { - var _, le, de, se, ge; + var _, le, ce, de, ge; if (Q) try { - const je = String(((_ = Q.dataset) == null ? void 0 : _.src) || "").trim(); - if (!je || Q.getAttribute("src")) return; - if (Jr.hasError(je)) { - Q.src = je; + const Le = String(((_ = Q.dataset) == null ? void 0 : _.src) || "").trim(); + if (!Le || Q.getAttribute("src")) return; + if (Jr.hasError(Le)) { + Q.src = Le; return; } - const Se = await Jr.acquireUrl(je); - Se ? (Q.src = Se, Q._mjrCachedSrc = je) : Q.src = je, (le = Q.load) == null || le.call(Q); - } catch (je) { - (de = console.debug) == null || de.call(console, je); + const xe = await Jr.acquireUrl(Le); + xe ? (Q.src = xe, Q._mjrCachedSrc = Le) : Q.src = Le, (le = Q.load) == null || le.call(Q); + } catch (Le) { + (ce = console.debug) == null || ce.call(console, Le); try { - const Se = String(((se = Q.dataset) == null ? void 0 : se.src) || "").trim(); - Se && !Q.getAttribute("src") && (Q.src = Se, (ge = Q.load) == null || ge.call(Q)); + const xe = String(((de = Q.dataset) == null ? void 0 : de.src) || "").trim(); + xe && !Q.getAttribute("src") && (Q.src = xe, (ge = Q.load) == null || ge.call(Q)); } catch { } } @@ -26309,27 +26336,27 @@ const Jr = gw(), Vr = (e, t) => { function r(Q, _) { if (!Q || !_) return; const le = () => { - var se, ge, je, Se; + var de, ge, Le, xe; try { - (je = (se = _.play) == null ? void 0 : (ge = se.call(_)).catch) == null || je.call(ge, () => { + (Le = (de = _.play) == null ? void 0 : (ge = de.call(_)).catch) == null || Le.call(ge, () => { }); - } catch (ke) { - (Se = console.debug) == null || Se.call(console, ke); + } catch (Xe) { + (xe = console.debug) == null || xe.call(console, Xe); } - }, de = () => { - var se, ge; + }, ce = () => { + var de, ge; try { - (se = _.pause) == null || se.call(_), _.currentTime = 0; - } catch (je) { - (ge = console.debug) == null || ge.call(console, je); + (de = _.pause) == null || de.call(_), _.currentTime = 0; + } catch (Le) { + (ge = console.debug) == null || ge.call(console, Le); } }; - Q.addEventListener("mouseenter", le), Q.addEventListener("mouseleave", de), _._mjrHoverCleanup = () => { - var se; + Q.addEventListener("mouseenter", le), Q.addEventListener("mouseleave", ce), _._mjrHoverCleanup = () => { + var de; try { - Q.removeEventListener("mouseenter", le), Q.removeEventListener("mouseleave", de); + Q.removeEventListener("mouseenter", le), Q.removeEventListener("mouseleave", ce); } catch (ge) { - (se = console.debug) == null || se.call(console, ge); + (de = console.debug) == null || de.call(console, ge); } }; } @@ -26337,13 +26364,13 @@ const Jr = gw(), Vr = (e, t) => { if (!Q) return; const _ = new IntersectionObserver( (le) => { - var de, se, ge, je, Se; - for (const ke of le) + var ce, de, ge, Le, xe; + for (const Xe of le) try { - ke.isIntersecting ? (ge = (de = Q.play) == null ? void 0 : (se = de.call(Q)).catch) == null || ge.call(se, () => { - }) : ((je = Q.pause) == null || je.call(Q), Q.currentTime = 0); - } catch (we) { - (Se = console.debug) == null || Se.call(console, we); + Xe.isIntersecting ? (ge = (ce = Q.play) == null ? void 0 : (de = ce.call(Q)).catch) == null || ge.call(de, () => { + }) : ((Le = Q.pause) == null || Le.call(Q), Q.currentTime = 0); + } catch (Me) { + (xe = console.debug) == null || xe.call(console, Me); } }, { threshold: 0.25 } @@ -26352,18 +26379,18 @@ const Jr = gw(), Vr = (e, t) => { var le; try { _.unobserve(Q), _.disconnect(); - } catch (de) { - (le = console.debug) == null || le.call(console, de); + } catch (ce) { + (le = console.debug) == null || le.call(console, ce); } }; } function a(Q) { - var _, le, de, se; + var _, le, ce, de; if (Q) try { - (_ = Q._mjrHoverCleanup) == null || _.call(Q), Q._mjrHoverCleanup = null, (le = Q._mjrAutoplayCleanup) == null || le.call(Q), Q._mjrAutoplayCleanup = null, (de = Q.pause) == null || de.call(Q), Q.currentTime = 0; + (_ = Q._mjrHoverCleanup) == null || _.call(Q), Q._mjrHoverCleanup = null, (le = Q._mjrAutoplayCleanup) == null || le.call(Q), Q._mjrAutoplayCleanup = null, (ce = Q.pause) == null || ce.call(Q), Q.currentTime = 0; } catch (ge) { - (se = console.debug) == null || se.call(console, ge); + (de = console.debug) == null || de.call(console, ge); } } function c(Q, _, le) { @@ -26372,66 +26399,66 @@ const Jr = gw(), Vr = (e, t) => { function s(Q) { Q && a(Q); } - const d = e, u = ze(() => String(d.asset.kind || "image").toLowerCase()), I = ze(() => u.value === "image"), y = ze(() => u.value === "video"), S = ze(() => u.value === "audio"), Z = ze(() => u.value === "model3d"), C = ze(() => Ki(d.asset) || ""), g = ze( + const d = e, u = ze(() => String(d.asset.kind || "image").toLowerCase()), I = ze(() => u.value === "image"), A = ze(() => u.value === "video"), h = ze(() => u.value === "audio"), S = ze(() => u.value === "model3d"), W = ze(() => Ui(d.asset) || ""), g = ze( () => String(d.asset.thumbnail_url || d.asset.thumb_url || d.asset.poster || "").trim() - ), A = ze(() => String(d.asset.filename || "")), p = ze(() => { - const Q = A.value; + ), y = ze(() => String(d.asset.filename || "")), p = ze(() => { + const Q = y.value; return Q.includes(".") ? Q.split(".").pop().toUpperCase() : ""; }), b = ze(() => { - const Q = A.value; + const Q = y.value; return Q.includes(".") ? Q.slice(0, Q.lastIndexOf(".")) : Q; - }), L = ze(() => Number(d.asset.rating) || 0), h = ze(() => d.asset.tags || []), G = ze(() => { + }), L = ze(() => Number(d.asset.rating) || 0), C = ze(() => d.asset.tags || []), G = ze(() => { var _; const Q = d.asset.generation_time_ms ?? ((_ = d.asset.metadata) == null ? void 0 : _.generation_time_ms) ?? 0; return od(Q); - }), W = ze(() => G.value > 0), f = ze(() => zI(G.value)), X = ze(() => id(G.value)), x = ze(() => String(d.asset.positive_prompt || "").trim()), T = ze( + }), Z = ze(() => G.value > 0), f = ze(() => zI(G.value)), X = ze(() => id(G.value)), x = ze(() => String(d.asset.positive_prompt || "").trim()), K = ze( () => { var Q, _, le; return ((Q = d.asset) == null ? void 0 : Q._mjrLivePlaceholder) === !0 || ((_ = d.asset) == null ? void 0 : _.is_live_placeholder) === !0 || String(((le = d.asset) == null ? void 0 : le.id) || "").trim().toLowerCase().startsWith("live:"); } - ), v = ze( + ), j = ze( () => { var Q; return String(((Q = d.asset) == null ? void 0 : Q._mjrLiveLabel) || "In progress").trim() || "In progress"; } ), w = ze( - () => `${v.value}: waiting for indexed asset data` + () => `${j.value}: waiting for indexed asset data` ), R = ze(() => { const { width: Q, height: _ } = d.asset; return Q && _ ? `${Q}x${_}` : ""; - }), Y = ze( - () => d.asset.duration ? kb(d.asset.duration) : "" - ), F = ze( + }), V = ze( + () => d.asset.duration ? Xb(d.asset.duration) : "" + ), O = ze( () => d.asset.generation_time || d.asset.file_creation_time || d.asset.mtime || d.asset.created_at - ), N = ze(() => F.value ? za(F.value) : ""), V = ze(() => F.value ? Ja(F.value) : ""), k = ze(() => !!d.asset._mjrNameCollision && !d.asset._mjrDupStack), K = ze(() => k.value ? "var(--mjr-badge-duplicate-alert, #ff1744)" : { + ), k = ze(() => O.value ? Ja(O.value) : ""), Y = ze(() => O.value ? Ta(O.value) : ""), N = ze(() => !!d.asset._mjrNameCollision && !d.asset._mjrDupStack), U = ze(() => N.value ? "var(--mjr-badge-duplicate-alert, #ff1744)" : { image: "var(--mjr-badge-image, #2196F3)", video: "var(--mjr-badge-video, #F44336)", audio: "var(--mjr-badge-audio, #4CAF50)", model3d: "var(--mjr-badge-model3d, #9C27B0)" - }[u.value] || "var(--mjr-badge-image, #888)"), z = Dp("mjrStackService", null), B = ze(() => !z || !String(d.asset.stack_id || "").trim() ? !1 : Number(d.asset.stack_asset_count || d.asset._mjrFeedGroupCount || 0) > 1), J = ze( + }[u.value] || "var(--mjr-badge-image, #888)"), z = Dp("mjrStackService", null), T = ze(() => !z || !String(d.asset.stack_id || "").trim() ? !1 : Number(d.asset.stack_asset_count || d.asset._mjrFeedGroupCount || 0) > 1), J = ze( () => Number(d.asset.stack_asset_count || d.asset._mjrFeedGroupCount || 0) || 0 - ), P = ze(() => !!d.asset._mjrDupStack && Number(d.asset._mjrDupCount || 0) >= 2), H = ze(() => Number(d.asset._mjrDupCount || 0) || 0); + ), P = ze(() => !!d.asset._mjrDupStack && Number(d.asset._mjrDupCount || 0) >= 2), E = ze(() => Number(d.asset._mjrDupCount || 0) || 0); async function $(Q) { var _, le; Q.preventDefault(), Q.stopPropagation(); try { await ((_ = z == null ? void 0 : z.openStackGroup) == null ? void 0 : _.call(z, d.asset)); - } catch (de) { - (le = console.debug) == null || le.call(console, de); + } catch (ce) { + (le = console.debug) == null || le.call(console, ce); } } - function E(Q) { + function H(Q) { var _, le; Q.preventDefault(), Q.stopPropagation(); try { (_ = z == null ? void 0 : z.openDupGroup) == null || _.call(z, d.asset); - } catch (de) { - (le = console.debug) == null || le.call(console, de); + } catch (ce) { + (le = console.debug) == null || le.call(console, ce); } } - const oe = Ae(null), M = Ae(null), j = Ae(null), O = Ae(null), D = Ae(!1), q = Ae(""); - cn( - () => [j.value, C.value], + const ne = We(null), M = We(null), v = We(null), F = We(null), D = We(!1), q = We(""); + dn( + () => [v.value, W.value], async ([Q, _]) => { if (!(!Q || !_ || D.value)) try { @@ -26442,42 +26469,42 @@ const Jr = gw(), Vr = (e, t) => { }, { immediate: !0 } ); - const ee = Ae(fe.GRID_VIDEO_AUTOPLAY_MODE || "hover"); - function ce() { - ee.value = fe.GRID_VIDEO_AUTOPLAY_MODE || "hover"; + const ee = We(he.GRID_VIDEO_AUTOPLAY_MODE || "hover"); + function ae() { + ee.value = he.GRID_VIDEO_AUTOPLAY_MODE || "hover"; } Dn(() => { - window.addEventListener("mjr-settings-changed", ce); - }), cn(M, (Q, _) => { + window.addEventListener("mjr-settings-changed", ae); + }), dn(M, (Q, _) => { if (_) try { s(_); } catch { } - if (Q && oe.value) + if (Q && ne.value) try { - o(Q), c(oe.value, Q, ee.value); + o(Q), c(ne.value, Q, ee.value); } catch { } - }), cn(ee, (Q) => { - const _ = M.value, le = oe.value; + }), dn(ee, (Q) => { + const _ = M.value, le = ne.value; _ && le && c(le, _, Q); }), _n(() => { - window.removeEventListener("mjr-settings-changed", ce); + window.removeEventListener("mjr-settings-changed", ae); const Q = M.value; if (Q) try { s(Q); } catch { } - }), Ep(() => { - const Q = O.value; + }), Hp(() => { + const Q = F.value; if (!Q) return; const _ = d.asset; (_ == null ? void 0 : _.has_workflow) ?? (_ == null || _.hasWorkflow), (_ == null ? void 0 : _.has_generation_data) ?? (_ == null || _.hasGenerationData), (_ == null ? void 0 : _.has_ai_info) ?? (_ == null ? void 0 : _.hasAiInfo) ?? (_ == null || _.ai_indexed), (_ == null ? void 0 : _.has_ai_auto_tags) ?? (_ == null ? void 0 : _.hasAiAutoTags) ?? (_ == null ? void 0 : _.auto_tags) ?? (_ == null || _.autoTags), (_ == null ? void 0 : _.has_ai_enhanced_caption) ?? (_ == null ? void 0 : _.hasAiEnhancedCaption) ?? (_ == null ? void 0 : _.enhanced_caption) ?? (_ == null || _.enhancedCaption), (_ == null ? void 0 : _.has_ai_vector) ?? (_ == null ? void 0 : _.hasAiVector) ?? (_ == null ? void 0 : _.vector_indexed) ?? (_ == null || _.vectorIndexed); try { Q.textContent = ""; - const le = ec(_); + const le = tc(_); le && Q.appendChild(le); } catch { } @@ -26485,55 +26512,55 @@ const Jr = gw(), Vr = (e, t) => { function ue(Q) { D.value = !0; try { - Jr.markError(C.value); + Jr.markError(W.value); } catch { } } - function U(Q) { - var le, de; - if (!k.value) return; + function B(Q) { + var le, ce; + if (!N.value) return; Q.preventDefault(), Q.stopPropagation(); - const _ = (de = (le = Q.target) == null ? void 0 : le.closest) == null ? void 0 : de.call(le, ".mjr-asset-card"); + const _ = (ce = (le = Q.target) == null ? void 0 : le.closest) == null ? void 0 : ce.call(le, ".mjr-asset-card"); _ && _.dispatchEvent( new CustomEvent("mjr:badge-duplicates-focus", { bubbles: !0, detail: { - filename: A.value, - filenameKey: A.value.toLowerCase(), + filename: y.value, + filenameKey: y.value.toLowerCase(), count: Number(d.asset._mjrNameCollisionCount || 0), paths: Array.isArray(d.asset._mjrNameCollisionPaths) ? d.asset._mjrNameCollisionPaths : [] } }) ); } - return (Q, _) => (be(), Ce(Nt, null, [ - ie("div", { + return (Q, _) => (be(), Ze(Nt, null, [ + te("div", { class: "mjr-thumb", ref_key: "thumbRef", - ref: oe + ref: ne }, [ - T.value ? (be(), Ce("div", Ww)) : ft("", !0), - I.value ? (be(), Ce(Nt, { key: 1 }, [ - D.value ? ft("", !0) : (be(), Ce("img", { + K.value ? (be(), Ze("div", Ww)) : yt("", !0), + I.value ? (be(), Ze(Nt, { key: 1 }, [ + D.value ? yt("", !0) : (be(), Ze("img", { key: 0, ref_key: "imgRef", - ref: j, + ref: v, class: "mjr-thumb-media", - alt: A.value, + alt: y.value, loading: "lazy", decoding: "async", - src: q.value || C.value, + src: q.value || W.value, onError: ue }, null, 40, ww)), - D.value ? (be(), Ce("div", Mw, [..._[12] || (_[12] = [ - ie("i", { class: "pi pi-image" }, null, -1) - ])])) : ft("", !0) - ], 64)) : y.value ? (be(), Ce(Nt, { key: 2 }, [ - ie("video", { + D.value ? (be(), Ze("div", Mw, [..._[12] || (_[12] = [ + te("i", { class: "pi pi-image" }, null, -1) + ])])) : yt("", !0) + ], 64)) : A.value ? (be(), Ze(Nt, { key: 2 }, [ + te("video", { ref_key: "videoRef", ref: M, class: "mjr-thumb-media", - "data-src": C.value, + "data-src": W.value, poster: g.value || void 0, muted: "", loop: "", @@ -26543,170 +26570,170 @@ const Jr = gw(), Vr = (e, t) => { draggable: !1, tabindex: -1, style: { "pointer-events": "none" } - }, null, 8, Sw), - _[13] || (_[13] = ie("div", { class: "mjr-thumb-play" }, [ - ie("i", { class: "pi pi-play" }) + }, null, 8, Gw), + _[13] || (_[13] = te("div", { class: "mjr-thumb-play" }, [ + te("i", { class: "pi pi-play" }) ], -1)) - ], 64)) : S.value ? (be(), Ce(Nt, { key: 3 }, [ - xe(t) ? (be(), Ce("img", { + ], 64)) : h.value ? (be(), Ze(Nt, { key: 3 }, [ + ve(t) ? (be(), Ze("img", { key: 0, class: "mjr-thumb-media", - src: xe(t), + src: ve(t), draggable: !1, loading: "lazy", alt: "" - }, null, 8, Gw)) : ft("", !0), - ie("div", xw, [ - (be(), Ce("svg", jw, [ - (be(), Ce(Nt, null, Cn(n, ([le, de, se, ge], je) => ie("rect", { - key: je, + }, null, 8, Sw)) : yt("", !0), + te("div", xw, [ + (be(), Ze("svg", jw, [ + (be(), Ze(Nt, null, Zn(n, ([le, ce, de, ge], Le) => te("rect", { + key: Le, x: le, - y: de, - width: se, + y: ce, + width: de, height: ge, rx: "1.5" }, null, 8, vw)), 64)) ])) ]) - ], 64)) : Z.value ? (be(), Ce("div", Lw, [..._[14] || (_[14] = [ - ie("i", { + ], 64)) : S.value ? (be(), Ze("div", Lw, [..._[14] || (_[14] = [ + te("i", { class: "pi pi-box", style: { "font-size": "2.5rem" } }, null, -1) - ])])) : ft("", !0), - ie("div", { + ])])) : yt("", !0), + te("div", { class: "mjr-file-badge mjr-badge-ext", "data-mjr-ext": p.value, - "data-mjr-badge-bg": K.value, - style: Lt({ + "data-mjr-badge-bg": U.value, + style: vt({ position: "absolute", top: "6px", left: "6px", zIndex: 10, - background: K.value, + background: U.value, color: "#fff", padding: "2px 5px", borderRadius: "4px", fontSize: "10px", fontWeight: "700", - pointerEvents: k.value ? "auto" : "none", - cursor: k.value ? "pointer" : "default" + pointerEvents: N.value ? "auto" : "none", + cursor: N.value ? "pointer" : "default" }), - title: k.value ? `${p.value} — duplicate filename (${e.asset._mjrNameCollisionCount || 2} files)` : `${p.value} file`, - onClick: U - }, Ye(p.value) + Ye(k.value ? "+" : ""), 13, Vw), - fn(pw, { + title: N.value ? `${p.value} — duplicate filename (${e.asset._mjrNameCollisionCount || 2} files)` : `${p.value} file`, + onClick: B + }, Ne(p.value) + Ne(N.value ? "+" : ""), 13, Yw), + Cn(pw, { rating: L.value, class: "mjr-badge-rating" }, null, 8, ["rating"]), - fn(hw, { - tags: h.value, + Cn(Cw, { + tags: C.value, class: "mjr-badge-tags" }, null, 8, ["tags"]), - fn(Aw, { "gen-time-ms": G.value }, null, 8, ["gen-time-ms"]), - T.value ? (be(), Ce("div", { + Cn(Aw, { "gen-time-ms": G.value }, null, 8, ["gen-time-ms"]), + K.value ? (be(), Ze("div", { key: 5, class: "mjr-live-pill", title: w.value }, [ - _[15] || (_[15] = ie("span", { + _[15] || (_[15] = te("span", { class: "mjr-live-pill-dot", "aria-hidden": "true" }, null, -1)), - ie("span", null, Ye(v.value), 1) - ], 8, Yw)) : ft("", !0), - x.value || W.value ? (be(), Ce("div", kw, [ - x.value ? (be(), Ce("div", Xw, Ye(x.value), 1)) : ft("", !0), - W.value ? (be(), Ce("div", Nw, "⏱ " + Ye(f.value.text), 1)) : ft("", !0) - ])) : ft("", !0) + te("span", null, Ne(j.value), 1) + ], 8, Vw)) : yt("", !0), + x.value || Z.value ? (be(), Ze("div", Xw, [ + x.value ? (be(), Ze("div", Nw, Ne(x.value), 1)) : yt("", !0), + Z.value ? (be(), Ze("div", kw, "⏱ " + Ne(f.value.text), 1)) : yt("", !0) + ])) : yt("", !0) ], 512), - ie("div", Rw, [ - ie("div", { + te("div", Rw, [ + te("div", { class: "mjr-card-filename", - title: A.value, + title: y.value, style: { overflow: "hidden", "text-overflow": "ellipsis", "white-space": "nowrap", "margin-bottom": "4px", "padding-right": "12px" } - }, Ye(b.value), 9, Fw), - ie("div", Ow, [ - R.value ? (be(), Ce("span", { + }, Ne(b.value), 9, Ow), + te("div", Fw, [ + R.value ? (be(), Ze("span", { key: 0, class: "mjr-meta-res", title: `Resolution: ${R.value}` - }, Ye(R.value), 9, zw)) : ft("", !0), - Y.value ? (be(), Ce("span", { + }, Ne(R.value), 9, zw)) : yt("", !0), + V.value ? (be(), Ze("span", { key: 1, class: "mjr-meta-duration", - title: `Duration: ${Y.value}` - }, Ye(Y.value), 9, Jw)) : ft("", !0), - N.value ? (be(), Ce("span", { + title: `Duration: ${V.value}` + }, Ne(V.value), 9, Jw)) : yt("", !0), + k.value ? (be(), Ze("span", { key: 2, class: "mjr-meta-date", - title: `Date: ${N.value}` - }, Ye(N.value), 9, Tw)) : ft("", !0), - V.value ? (be(), Ce("span", { + title: `Date: ${k.value}` + }, Ne(k.value), 9, Tw)) : yt("", !0), + Y.value ? (be(), Ze("span", { key: 3, class: "mjr-meta-date mjr-meta-time-val", - title: `Time: ${V.value}` - }, Ye(V.value), 9, Bw)) : ft("", !0), - W.value ? (be(), Ce("span", { + title: `Time: ${Y.value}` + }, Ne(Y.value), 9, Kw)) : yt("", !0), + Z.value ? (be(), Ze("span", { key: 4, class: "mjr-meta-gentime", - style: Lt({ color: X.value, fontWeight: "500" }), + style: vt({ color: X.value, fontWeight: "500" }), title: f.value.title - }, Ye(f.value.text), 13, Uw)) : ft("", !0) + }, Ne(f.value.text), 13, Bw)) : yt("", !0) ]), - ie("div", { + te("div", { ref_key: "dotWrapperRef", - ref: O, + ref: F, class: "mjr-card-dot-wrapper", style: { position: "absolute", right: "8px", bottom: "6px", "z-index": "2" } }, null, 512) ]), - B.value ? (be(), Ce("button", { + T.value ? (be(), Ze("button", { key: 0, type: "button", class: "mjr-stack-group-button", "aria-label": `Open generation group in grid (${J.value} assets)`, title: `Open generation group in grid (${J.value} assets)`, onClick: $, - onPointerdown: _[0] || (_[0] = On(() => { + onPointerdown: _[0] || (_[0] = Fn(() => { }, ["stop"])), - onMousedown: _[1] || (_[1] = On(() => { + onMousedown: _[1] || (_[1] = Fn(() => { }, ["stop", "prevent"])), - onTouchstartPassive: _[2] || (_[2] = On(() => { + onTouchstartPassive: _[2] || (_[2] = Fn(() => { }, ["stop"])), - onDblclick: _[3] || (_[3] = On(() => { + onDblclick: _[3] || (_[3] = Fn(() => { }, ["stop"])), - onKeydown: _[4] || (_[4] = On(() => { + onKeydown: _[4] || (_[4] = Fn(() => { }, ["stop"])), - onDragstart: _[5] || (_[5] = On(() => { + onDragstart: _[5] || (_[5] = Fn(() => { }, ["stop", "prevent"])) }, [ - _[16] || (_[16] = ie("span", { class: "pi pi-clone" }, null, -1)), - ie("span", Dw, Ye(J.value), 1) - ], 40, Kw)) : ft("", !0), - P.value ? (be(), Ce("button", { + _[16] || (_[16] = te("span", { class: "pi pi-clone" }, null, -1)), + te("span", Dw, Ne(J.value), 1) + ], 40, Uw)) : yt("", !0), + P.value ? (be(), Ze("button", { key: 1, type: "button", class: "mjr-dup-stack-button", - "aria-label": `${H.value} duplicate${H.value > 1 ? "s" : ""} — click to compare all copies`, - title: `${H.value} duplicate${H.value > 1 ? "s" : ""} — click to compare all copies`, - onClick: E, - onPointerdown: _[6] || (_[6] = On(() => { + "aria-label": `${E.value} duplicate${E.value > 1 ? "s" : ""} — click to compare all copies`, + title: `${E.value} duplicate${E.value > 1 ? "s" : ""} — click to compare all copies`, + onClick: H, + onPointerdown: _[6] || (_[6] = Fn(() => { }, ["stop"])), - onMousedown: _[7] || (_[7] = On(() => { + onMousedown: _[7] || (_[7] = Fn(() => { }, ["stop", "prevent"])), - onTouchstartPassive: _[8] || (_[8] = On(() => { + onTouchstartPassive: _[8] || (_[8] = Fn(() => { }, ["stop"])), - onDblclick: _[9] || (_[9] = On(() => { + onDblclick: _[9] || (_[9] = Fn(() => { }, ["stop"])), - onKeydown: _[10] || (_[10] = On(() => { + onKeydown: _[10] || (_[10] = Fn(() => { }, ["stop"])), - onDragstart: _[11] || (_[11] = On(() => { + onDragstart: _[11] || (_[11] = Fn(() => { }, ["stop", "prevent"])) }, [ - _[17] || (_[17] = ie("span", { class: "pi pi-copy" }, null, -1)), - ie("span", Hw, Ye(H.value), 1) - ], 40, Ew)) : ft("", !0) + _[17] || (_[17] = te("span", { class: "pi pi-copy" }, null, -1)), + te("span", Ew, Ne(E.value), 1) + ], 40, Hw)) : yt("", !0) ], 64)); } }, qw = ["data-mjr-asset-id", "data-mjr-filename-key", "data-mjr-stem", "aria-label", "aria-selected"], Pw = { @@ -26719,8 +26746,8 @@ const Jr = gw(), Vr = (e, t) => { selected: { type: Boolean, default: !1 } }, setup(e) { - return (t, n) => (be(), Ce("div", { - class: Zn(["mjr-asset-card mjr-card mjr-folder-card", { "is-selected": e.selected }]), + return (t, n) => (be(), Ze("div", { + class: An(["mjr-asset-card mjr-card mjr-folder-card", { "is-selected": e.selected }]), role: "button", tabindex: 0, draggable: "true", @@ -26732,33 +26759,33 @@ const Jr = gw(), Vr = (e, t) => { "aria-label": `Folder ${e.asset.filename}`, "aria-selected": e.selected ? "true" : "false" }, [ - n[1] || (n[1] = ie("div", { + n[1] || (n[1] = te("div", { class: "mjr-thumb", style: { display: "flex", "align-items": "center", "justify-content": "center" } }, [ - ie("svg", { + te("svg", { width: "64", height: "64", viewBox: "0 0 24 24", "aria-hidden": "true" }, [ - ie("path", { + te("path", { fill: "#F4C74A", d: "M10 4H4c-1.1 0-2 .9-2 2v1h20V8c0-1.1-.9-2-2-2h-8l-2-2z" }), - ie("path", { + te("path", { fill: "#D9A730", d: "M20 6H4c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2z" }) ]) ], -1)), - ie("div", Pw, [ - ie("div", { + te("div", Pw, [ + te("div", { class: "mjr-card-filename", title: e.asset.filename, style: { overflow: "hidden", "text-overflow": "ellipsis", "white-space": "nowrap", "margin-bottom": "4px" } - }, Ye(e.asset.filename), 9, Qw), - n[0] || (n[0] = ie("div", { class: "mjr-card-meta-row" }, null, -1)) + }, Ne(e.asset.filename), 9, Qw), + n[0] || (n[0] = te("div", { class: "mjr-card-meta-row" }, null, -1)) ]) ], 10, qw)); } @@ -26767,7 +26794,7 @@ function Dl(e) { return Array.from(e || []).map((t) => String(t || "").trim()).filter(Boolean); } function _w() { - const e = Hp({ + const e = Ep({ query: "*", offset: 0, total: null, @@ -26798,8 +26825,8 @@ function _w() { } }; const t = ze(() => new Set(Dl(e.selectedIds))); - function n(I = "", { error: y = !1 } = {}) { - e.statusMessage = String(I || ""), e.statusError = !!y; + function n(I = "", { error: A = !1 } = {}) { + e.statusMessage = String(I || ""), e.statusError = !!A; } function i() { e.statusMessage = "", e.statusError = !1; @@ -26813,33 +26840,33 @@ function _w() { function l() { e.seenKeys = /* @__PURE__ */ new Set(), e.assetIdSet = /* @__PURE__ */ new Set(), e.filenameCounts = /* @__PURE__ */ new Map(), e.nonImageSiblingKeys = /* @__PURE__ */ new Set(), e.stemMap = /* @__PURE__ */ new Map(), e.renderedFilenameMap = /* @__PURE__ */ new Map(), e.hiddenPngSiblings = 0; } - function a({ query: I = "*", total: y = null, done: S = !1 } = {}) { - e.query = String(I || "*") || "*", e.offset = 0, e.total = y == null ? null : Number(y) || 0, e.done = !!S, e.assets = [], l(); + function a({ query: I = "*", total: A = null, done: h = !1 } = {}) { + e.query = String(I || "*") || "*", e.offset = 0, e.total = A == null ? null : Number(A) || 0, e.done = !!h, e.assets = [], l(); } - function c(I, y = "", { preserveAnchor: S = !1 } = {}) { - const Z = Array.from(new Set(Dl(I))), C = String(y || Z[0] || "").trim(); - return e.selectedIds = Z, e.activeId = C, S || (C ? e.selectionAnchorId = C : Z.length || (e.selectionAnchorId = "")), { - selectedIds: Z, - activeId: C + function c(I, A = "", { preserveAnchor: h = !1 } = {}) { + const S = Array.from(new Set(Dl(I))), W = String(A || S[0] || "").trim(); + return e.selectedIds = S, e.activeId = W, h || (W ? e.selectionAnchorId = W : S.length || (e.selectionAnchorId = "")), { + selectedIds: S, + activeId: W }; } - function s(I, { activeId: y = "" } = {}) { - const S = new Set(Dl(I)), Z = Dl(e.selectedIds).filter((A) => S.has(A)), C = String(y || e.activeId || Z[0] || "").trim(), g = S.has(C) ? C : Z[0] || ""; - return c(Z, g, { preserveAnchor: !0 }); + function s(I, { activeId: A = "" } = {}) { + const h = new Set(Dl(I)), S = Dl(e.selectedIds).filter((y) => h.has(y)), W = String(A || e.activeId || S[0] || "").trim(), g = h.has(W) ? W : S[0] || ""; + return c(S, g, { preserveAnchor: !0 }); } function d() { const I = t.value; return (Array.isArray(e.assets) ? e.assets : []).filter( - (y) => I.has(String((y == null ? void 0 : y.id) || "")) + (A) => I.has(String((A == null ? void 0 : A.id) || "")) ); } function u() { const I = String(e.activeId || "").trim(); if (I) { - const y = (Array.isArray(e.assets) ? e.assets : []).find( - (S) => String((S == null ? void 0 : S.id) || "") === I + const A = (Array.isArray(e.assets) ? e.assets : []).find( + (h) => String((h == null ? void 0 : h.id) || "") === I ); - if (y) return y; + if (A) return A; } return d()[0] || null; } @@ -26866,7 +26893,7 @@ function $w(e) { return (t = console.debug) == null || t.call(console, n), !1; } } -function Xb(e, { requireClientRect: t = !0 } = {}) { +function Nb(e, { requireClientRect: t = !0 } = {}) { var n, i, o, r; if (!e || typeof e != "object") return !1; try { @@ -26897,12 +26924,12 @@ function Xb(e, { requireClientRect: t = !0 } = {}) { return t ? $w(e) : !0; } function e0(e) { - return Xb(e, { requireClientRect: !0 }); + return Nb(e, { requireClientRect: !0 }); } function md(e, t = null) { var o; const n = t || e; - if (!e0(n) || e && e !== n && !Xb(e, { requireClientRect: !1 })) + if (!e0(n) || e && e !== n && !Nb(e, { requireClientRect: !1 })) return !1; try { const r = Number((n == null ? void 0 : n.clientWidth) || 0) || 0, l = Number((n == null ? void 0 : n.clientHeight) || 0) || 0; @@ -26914,13 +26941,13 @@ function md(e, t = null) { const t0 = { __name: "FloatingViewerHost", setup(e) { - const t = Ae(null); + const t = We(null); let n = null; return Dn(() => { - n = XC(t.value); + n = Nh(t.value); }), _n(() => { n == null || n(), n = null; - }), (i, o) => (be(), Ce("div", { + }), (i, o) => (be(), Ze("div", { ref_key: "hostRef", ref: t, class: "mjr-viewer-runtime-host mjr-viewer-runtime-host--floating", @@ -26930,13 +26957,13 @@ const t0 = { }, n0 = { __name: "ViewerOverlayHost", setup(e) { - const t = Ae(null); + const t = We(null); let n = null; return Dn(() => { - n = YC(t.value); + n = Vh(t.value); }), _n(() => { n == null || n(), n = null; - }), (i, o) => (be(), Ce("div", { + }), (i, o) => (be(), Ze("div", { ref_key: "hostRef", ref: t, class: "mjr-viewer-runtime-host mjr-viewer-runtime-host--main", @@ -26964,290 +26991,290 @@ const t0 = { }, emits: ["update:modelValue", "tags-change"], setup(e, { emit: t }) { - var N; - function n(V) { + var k; + function n(Y) { try { - const k = String(V ?? "").trim(); - if (!k || k.length > u0) return null; - for (let K = 0; K < k.length; K += 1) { - const z = k.charCodeAt(K); + const N = String(Y ?? "").trim(); + if (!N || N.length > u0) return null; + for (let U = 0; U < N.length; U += 1) { + const z = N.charCodeAt(U); if (z <= 31 || z === 127) return null; } - return /[;,]/.test(k) ? null : k; + return /[;,]/.test(N) ? null : N; } catch { return null; } } - function i(V) { + function i(Y) { try { - return String(V ?? "").replace(/[\x00-\x1f\x7f]/g, "").trim() || null; + return String(Y ?? "").replace(/[\x00-\x1f\x7f]/g, "").trim() || null; } catch { return null; } } - function o(V) { - const k = i(V); - return k ? k.toLowerCase() : ""; + function o(Y) { + const N = i(Y); + return N ? N.toLowerCase() : ""; } - function r(V) { - const k = [], K = /* @__PURE__ */ new Set(); - for (const z of Array.isArray(V) ? V : []) { - const B = i(z); - if (!B) continue; - const J = B.toLowerCase(); - if (!K.has(J) && (K.add(J), k.push(B), k.length >= sm)) + function r(Y) { + const N = [], U = /* @__PURE__ */ new Set(); + for (const z of Array.isArray(Y) ? Y : []) { + const T = i(z); + if (!T) continue; + const J = T.toLowerCase(); + if (!U.has(J) && (U.add(J), N.push(T), N.length >= sm)) break; } - return k; + return N; } - function l(V) { - if (Array.isArray(V)) - return r(V); - if (typeof V == "string") { - const k = V.trim(); - if (!k) return []; + function l(Y) { + if (Array.isArray(Y)) + return r(Y); + if (typeof Y == "string") { + const N = Y.trim(); + if (!N) return []; try { - const K = JSON.parse(k); - if (Array.isArray(K)) return r(K); + const U = JSON.parse(N); + if (Array.isArray(U)) return r(U); } catch { - return r(k.split(",")); + return r(N.split(",")); } } return []; } - function a(V, k) { - if (!Array.isArray(V) || !Array.isArray(k) || V.length !== k.length) return !1; - for (let K = 0; K < V.length; K += 1) - if (V[K] !== k[K]) return !1; + function a(Y, N) { + if (!Array.isArray(Y) || !Array.isArray(N) || Y.length !== N.length) return !1; + for (let U = 0; U < Y.length; U += 1) + if (Y[U] !== N[U]) return !1; return !0; } - const c = e, s = t, d = l(((N = c.asset) == null ? void 0 : N.tags) ?? c.modelValue ?? []), u = Ae([...d]), I = Ae(null), y = Ae(""), S = Ae(!1), Z = Ae(-1), C = Ae([]), g = Ae(!1); - let A = !1, p = !1, b = null, L = [...d]; - const h = (V) => Math.min(100 * 2 ** Math.max(0, V - 1), 2e3), G = (V) => new Promise((k) => setTimeout(k, V)), W = () => setTimeout(() => S.value = !1, 200), f = ze(() => { - const V = y.value.toLowerCase().trim(); - if (!V) return []; - const k = new Set(u.value.map((K) => o(K)).filter(Boolean)); - return C.value.filter((K) => { - const z = o(K); - return K.toLowerCase().includes(V) && (!z || !k.has(z)); + const c = e, s = t, d = l(((k = c.asset) == null ? void 0 : k.tags) ?? c.modelValue ?? []), u = We([...d]), I = We(null), A = We(""), h = We(!1), S = We(-1), W = We([]), g = We(!1); + let y = !1, p = !1, b = null, L = [...d]; + const C = (Y) => Math.min(100 * 2 ** Math.max(0, Y - 1), 2e3), G = (Y) => new Promise((N) => setTimeout(N, Y)), Z = () => setTimeout(() => h.value = !1, 200), f = ze(() => { + const Y = A.value.toLowerCase().trim(); + if (!Y) return []; + const N = new Set(u.value.map((U) => o(U)).filter(Boolean)); + return W.value.filter((U) => { + const z = o(U); + return U.toLowerCase().includes(Y) && (!z || !N.has(z)); }).slice(0, 10); }), X = ze(() => f.value.length > 0); - function x(V) { - if (A) return; - const k = l(V); - L = [...k], a(k, u.value) || (u.value = [...k]); + function x(Y) { + if (y) return; + const N = l(Y); + L = [...N], a(N, u.value) || (u.value = [...N]); } - function T(V) { - var z, B; - const k = [...V], K = ((z = c.asset) == null ? void 0 : z.id) != null ? String(c.asset.id) : ""; - s("update:modelValue", k), s("tags-change", { assetId: (B = c.asset) == null ? void 0 : B.id, tags: k }), oi(Do, { - assetId: K, - tags: k + function K(Y) { + var z, T; + const N = [...Y], U = ((z = c.asset) == null ? void 0 : z.id) != null ? String(c.asset.id) : ""; + s("update:modelValue", N), s("tags-change", { assetId: (T = c.asset) == null ? void 0 : T.id, tags: N }), oi(Do, { + assetId: U, + tags: N }); } - async function v() { - var k, K, z, B, J, P, H; + async function j() { + var N, U, z, T, J, P, E; if (c.disabled) return; - if (A) { + if (y) { p = !0; try { - (k = b == null ? void 0 : b.abort) == null || k.call(b); + (N = b == null ? void 0 : b.abort) == null || N.call(b); } catch ($) { - (K = console.debug) == null || K.call(console, $); + (U = console.debug) == null || U.call(console, $); } return; } - A = !0, g.value = !0; - let V = 0; - for (; V < 10; ) { - V > 0 && await G(h(V)), V += 1; - const $ = l(u.value), E = typeof AbortController < "u" ? new AbortController() : null; - b = E; - let oe = null; + y = !0, g.value = !0; + let Y = 0; + for (; Y < 10; ) { + Y > 0 && await G(C(Y)), Y += 1; + const $ = l(u.value), H = typeof AbortController < "u" ? new AbortController() : null; + b = H; + let ne = null; try { - oe = await mh(c.asset, $, E ? { signal: E.signal } : {}); - } catch (j) { - console.error("Failed to update tags:", j); + ne = await mC(c.asset, $, H ? { signal: H.signal } : {}); + } catch (v) { + console.error("Failed to update tags:", v); } - if (!(oe != null && oe.ok)) { - if ((oe == null ? void 0 : oe.code) === "ABORTED") { + if (!(ne != null && ne.ok)) { + if ((ne == null ? void 0 : ne.code) === "ABORTED") { if (p) { p = !1; continue; } break; } - const j = [...L]; - u.value = j, s("update:modelValue", j), Ze((oe == null ? void 0 : oe.error) || m("toast.tagsUpdateFailed", "Failed to update tags"), "error"), A = !1, b = null, g.value = !1; + const v = [...L]; + u.value = v, s("update:modelValue", v), Ae((ne == null ? void 0 : ne.error) || m("toast.tagsUpdateFailed", "Failed to update tags"), "error"), y = !1, b = null, g.value = !1; return; } try { - const j = ((z = oe == null ? void 0 : oe.data) == null ? void 0 : z.asset_id) ?? null; - j != null && !fi(c.asset.id) && (c.asset.id = j); - } catch (j) { - (B = console.debug) == null || B.call(console, j); + const v = ((z = ne == null ? void 0 : ne.data) == null ? void 0 : z.asset_id) ?? null; + v != null && !fi(c.asset.id) && (c.asset.id = v); + } catch (v) { + (T = console.debug) == null || T.call(console, v); } const M = l( - Array.isArray((J = oe == null ? void 0 : oe.data) == null ? void 0 : J.tags) ? oe.data.tags : $ + Array.isArray((J = ne == null ? void 0 : ne.data) == null ? void 0 : J.tags) ? ne.data.tags : $ ); L = [...M]; try { c.asset.tags = [...M]; - } catch (j) { - (P = console.debug) == null || P.call(console, j); + } catch (v) { + (P = console.debug) == null || P.call(console, v); } - if (p || (u.value = [...M]), T(M), Ze(m("toast.tagsUpdated", "Tags updated"), "success", 1e3), !p) break; + if (p || (u.value = [...M]), K(M), Ae(m("toast.tagsUpdated", "Tags updated"), "success", 1e3), !p) break; p = !1; } - if (V >= 10) { + if (Y >= 10) { const $ = [...L]; u.value = $; try { c.asset.tags = [...$]; - } catch (E) { - (H = console.debug) == null || H.call(console, E); + } catch (H) { + (E = console.debug) == null || E.call(console, H); } - s("update:modelValue", $), Ze(m("toast.tagsUpdateFailed", "Failed to update tags"), "error"); + s("update:modelValue", $), Ae(m("toast.tagsUpdateFailed", "Failed to update tags"), "error"); } - A = !1, b = null, g.value = !1; + y = !1, b = null, g.value = !1; } Dn(async () => { try { - const V = await gh(); - V != null && V.ok && Array.isArray(V == null ? void 0 : V.data) && (C.value = r(V.data)); - } catch (V) { - console.warn("Failed to load available tags:", V); + const Y = await gC(); + Y != null && Y.ok && Array.isArray(Y == null ? void 0 : Y.data) && (W.value = r(Y.data)); + } catch (Y) { + console.warn("Failed to load available tags:", Y); } }), xr(() => { - var V, k; + var Y, N; try { - (V = b == null ? void 0 : b.abort) == null || V.call(b); - } catch (K) { - (k = console.debug) == null || k.call(console, K); + (Y = b == null ? void 0 : b.abort) == null || Y.call(b); + } catch (U) { + (N = console.debug) == null || N.call(console, U); } }); - function w(V) { + function w(Y) { if (c.disabled) return; - const k = n(V); - if (!k) return; - const K = o(k); - if (K && !u.value.some((z) => o(z) === K)) { + const N = n(Y); + if (!N) return; + const U = o(N); + if (U && !u.value.some((z) => o(z) === U)) { if (u.value.length >= sm) { - Ze(m("toast.maxTagsReached", "Maximum number of tags reached"), "warning"); + Ae(m("toast.maxTagsReached", "Maximum number of tags reached"), "warning"); return; } - u.value = [...u.value, k], v(); + u.value = [...u.value, N], j(); } } - function R(V) { - if (c.disabled || V < 0 || V >= u.value.length) return; - const k = [...u.value]; - k.splice(V, 1), u.value = k, v(); + function R(Y) { + if (c.disabled || Y < 0 || Y >= u.value.length) return; + const N = [...u.value]; + N.splice(Y, 1), u.value = N, j(); } - function Y(V) { - if (V.key === "Enter" || V.key === ",") { - V.preventDefault(); - const k = y.value.trim(); - k && (w(k), y.value = "", S.value = !1, Z.value = -1); + function V(Y) { + if (Y.key === "Enter" || Y.key === ",") { + Y.preventDefault(); + const N = A.value.trim(); + N && (w(N), A.value = "", h.value = !1, S.value = -1); return; } - if (V.key === "Escape") { - S.value = !1, Z.value = -1; + if (Y.key === "Escape") { + h.value = !1, S.value = -1; return; } - if (V.key === "ArrowDown") { - V.preventDefault(), X.value && (Z.value = Math.min( - Z.value + 1, + if (Y.key === "ArrowDown") { + Y.preventDefault(), X.value && (S.value = Math.min( + S.value + 1, f.value.length - 1 )); return; } - if (V.key === "ArrowUp") { - V.preventDefault(), Z.value = Math.max(Z.value - 1, 0); + if (Y.key === "ArrowUp") { + Y.preventDefault(), S.value = Math.max(S.value - 1, 0); return; } - if (V.key === "Tab" && X.value) { - V.preventDefault(); - const k = f.value[Z.value] || f.value[0]; - k && (y.value = k); + if (Y.key === "Tab" && X.value) { + Y.preventDefault(); + const N = f.value[S.value] || f.value[0]; + N && (A.value = N); } } - function F(V) { - var k; - w(V), y.value = "", S.value = !1, Z.value = -1, (k = I.value) == null || k.focus(); + function O(Y) { + var N; + w(Y), A.value = "", h.value = !1, S.value = -1, (N = I.value) == null || N.focus(); } - return cn( + return dn( () => c.modelValue, - (V) => { - x(V); + (Y) => { + x(Y); } - ), cn( + ), dn( () => { - var V; - return (V = c.asset) == null ? void 0 : V.tags; + var Y; + return (Y = c.asset) == null ? void 0 : Y.tags; }, - (V) => { - x(V); + (Y) => { + x(Y); } - ), (V, k) => (be(), Ce("div", { - class: Zn(["mjr-tags-editor", { "is-disabled": e.disabled }]), + ), (Y, N) => (be(), Ze("div", { + class: An(["mjr-tags-editor", { "is-disabled": e.disabled }]), "aria-busy": g.value }, [ - ie("div", { + te("div", { class: "mjr-tags-display", role: "list", - "aria-label": xe(m)("tags.label", "Tags") + "aria-label": ve(m)("tags.label", "Tags") }, [ - u.value.length === 0 ? (be(), Ce("span", r0, Ye(xe(m)("msg.noTagsYet", "No tags yet...")), 1)) : (be(!0), Ce(Nt, { key: 1 }, Cn(u.value, (K, z) => (be(), Ce("div", { - key: K, + u.value.length === 0 ? (be(), Ze("span", r0, Ne(ve(m)("msg.noTagsYet", "No tags yet...")), 1)) : (be(!0), Ze(Nt, { key: 1 }, Zn(u.value, (U, z) => (be(), Ze("div", { + key: U, class: "mjr-tag-chip", role: "listitem" }, [ - qp(Ye(K) + " ", 1), - ie("button", { + qp(Ne(U) + " ", 1), + te("button", { type: "button", class: "mjr-tag-chip-remove", - "aria-label": xe(m)("tags.remove", "Remove tag"), + "aria-label": ve(m)("tags.remove", "Remove tag"), disabled: e.disabled, - onClick: (B) => R(z) + onClick: (T) => R(z) }, " × ", 8, l0) ]))), 128)) ], 8, o0), - ie("div", a0, [ - Ko(ie("input", { + te("div", a0, [ + Uo(te("input", { ref_key: "inputRef", ref: I, - "onUpdate:modelValue": k[0] || (k[0] = (K) => y.value = K), + "onUpdate:modelValue": N[0] || (N[0] = (U) => A.value = U), type: "text", class: "mjr-tag-input", - placeholder: xe(m)("sidebar.addTag", "Add tag..."), + placeholder: ve(m)("sidebar.addTag", "Add tag..."), disabled: e.disabled, - "aria-label": xe(m)("tags.addLabel", "Add tag"), + "aria-label": ve(m)("tags.addLabel", "Add tag"), "aria-autocomplete": X.value ? "list" : "none", - "aria-expanded": S.value, + "aria-expanded": h.value, "aria-haspopup": X.value ? "listbox" : void 0, - onFocus: k[1] || (k[1] = (K) => S.value = y.value.length > 0), - onInput: k[2] || (k[2] = (K) => S.value = y.value.length > 0), - onKeydown: Y, - onBlur: W + onFocus: N[1] || (N[1] = (U) => h.value = A.value.length > 0), + onInput: N[2] || (N[2] = (U) => h.value = A.value.length > 0), + onKeydown: V, + onBlur: Z }, null, 40, c0), [ - [Pp, y.value] + [Pp, A.value] ]), - Ko(ie("div", { + Uo(te("div", { class: "mjr-tags-dropdown", role: "listbox", - "aria-label": xe(m)("tags.suggestions", "Tag suggestions") + "aria-label": ve(m)("tags.suggestions", "Tag suggestions") }, [ - (be(!0), Ce(Nt, null, Cn(f.value, (K, z) => (be(), Ce("div", { - key: K, - class: Zn(["mjr-tag-suggestion", { "is-active": z === Z.value }]), + (be(!0), Ze(Nt, null, Zn(f.value, (U, z) => (be(), Ze("div", { + key: U, + class: An(["mjr-tag-suggestion", { "is-active": z === S.value }]), role: "option", - "aria-selected": z === Z.value, - onClick: (B) => F(K), - onMouseenter: (B) => Z.value = z - }, Ye(K), 43, d0))), 128)) + "aria-selected": z === S.value, + onClick: (T) => O(U), + onMouseenter: (T) => S.value = z + }, Ne(U), 43, d0))), 128)) ], 8, s0), [ - [yr, S.value && X.value] + [yr, h.value && X.value] ]) ]) ], 10, i0)); @@ -27264,22 +27291,22 @@ const t0 = { }, f0 = { key: 0, class: "mjr-context-menu-separator" -}, h0 = ["aria-disabled", "tabindex", "onClick"], C0 = { class: "mjr-context-menu-item-left" }, Z0 = { +}, C0 = ["aria-disabled", "tabindex", "onClick"], h0 = { class: "mjr-context-menu-item-left" }, Z0 = { key: 0, class: "mjr-context-menu-hint" }, A0 = { __name: "ViewerContextMenu", setup(e) { - const t = Ae(null), n = Ae(null), i = Ae(null); + const t = We(null), n = We(null), i = We(null); let o = null, r = null; - const l = ze(() => s(Kt.main, 10041)), a = ze(() => s(Kt.submenu, 10042)), c = ze(() => s(Kt.tags, 10043)); - function s(x, T) { + const l = ze(() => s(Bt.main, 10041)), a = ze(() => s(Bt.submenu, 10042)), c = ze(() => s(Bt.tags, 10043)); + function s(x, K) { return { position: "fixed", left: `${Math.round(Number(x == null ? void 0 : x.x) || 0)}px`, top: `${Math.round(Number(x == null ? void 0 : x.y) || 0)}px`, display: "block", - zIndex: String(T) + zIndex: String(K) }; } function d() { @@ -27290,43 +27317,43 @@ const t0 = { gr(); }, 180); } - function I(x, T) { - if (!(x != null && x.open) || !T) return; - const v = T.getBoundingClientRect(), w = Number(window.innerWidth || 0), R = Number(window.innerHeight || 0); - let Y = Number(x.x) || 0, F = Number(x.y) || 0; - Y + v.width > w && (Y = Math.max(8, w - v.width - 10)), F + v.height > R && (F = Math.max(8, R - v.height - 10)), Y < 8 && (Y = 8), F < 8 && (F = 8), x.x = Y, x.y = F; + function I(x, K) { + if (!(x != null && x.open) || !K) return; + const j = K.getBoundingClientRect(), w = Number(window.innerWidth || 0), R = Number(window.innerHeight || 0); + let V = Number(x.x) || 0, O = Number(x.y) || 0; + V + j.width > w && (V = Math.max(8, w - j.width - 10)), O + j.height > R && (O = Math.max(8, R - j.height - 10)), V < 8 && (V = 8), O < 8 && (O = 8), x.x = V, x.y = O; } - async function y(x, T) { - await wo(), I(x, (T == null ? void 0 : T.value) || null); + async function A(x, K) { + await wo(), I(x, (K == null ? void 0 : K.value) || null); } - function S(x) { - var T, v, w, R, Y; + function h(x) { + var K, j, w, R, V; try { - (R = (w = (v = (T = x == null ? void 0 : x.value) == null ? void 0 : T.querySelector) == null ? void 0 : v.call(T, '.mjr-context-menu-item:not([aria-disabled="true"])')) == null ? void 0 : w.focus) == null || R.call(w); - } catch (F) { - (Y = console.debug) == null || Y.call(console, F); + (R = (w = (j = (K = x == null ? void 0 : x.value) == null ? void 0 : K.querySelector) == null ? void 0 : j.call(K, '.mjr-context-menu-item:not([aria-disabled="true"])')) == null ? void 0 : w.focus) == null || R.call(w); + } catch (O) { + (V = console.debug) == null || V.call(console, O); } } - function Z(x, T) { + function S(x, K) { var R; if (!Array.isArray(x == null ? void 0 : x.submenu) || !x.submenu.length) { gr(); return; } d(); - const v = T == null ? void 0 : T.currentTarget, w = (R = v == null ? void 0 : v.getBoundingClientRect) == null ? void 0 : R.call(v); - YZ({ - x: Math.round(((w == null ? void 0 : w.right) || Kt.main.x || 0) + 6), - y: Math.round(((w == null ? void 0 : w.top) || Kt.main.y || 0) - 4), + const j = K == null ? void 0 : K.currentTarget, w = (R = j == null ? void 0 : j.getBoundingClientRect) == null ? void 0 : R.call(j); + VZ({ + x: Math.round(((w == null ? void 0 : w.right) || Bt.main.x || 0) + 6), + y: Math.round(((w == null ? void 0 : w.top) || Bt.main.y || 0) - 4), items: x.submenu, title: x.label || "" }); } - async function C(x, T, v = "main") { + async function W(x, K, j = "main") { var w; if (!(!x || x.type !== "item" || x.disabled)) { if (Array.isArray(x.submenu) && x.submenu.length) { - Z(x, T); + S(x, K); return; } try { @@ -27334,18 +27361,18 @@ const t0 = { } catch (R) { console.error("[ViewerContextMenu.vue] Action failed:", R); } finally { - x.closeOnSelect !== !1 ? Lo() : v === "submenu" && gr(); + x.closeOnSelect !== !1 ? Lo() : j === "submenu" && gr(); } } } - function g(x, T) { + function g(x, K) { if (Array.isArray(x == null ? void 0 : x.submenu) && x.submenu.length) { - Z(x, T); + S(x, K); return; } gr(); } - function A(x) { + function y(x) { Array.isArray(x == null ? void 0 : x.submenu) && x.submenu.length && u(); } function p() { @@ -27355,47 +27382,47 @@ const t0 = { u(); } function L(x) { - var w, R, Y, F, N, V; - const T = x == null ? void 0 : x.target; - ((R = (w = t.value) == null ? void 0 : w.contains) == null ? void 0 : R.call(w, T)) || ((F = (Y = n.value) == null ? void 0 : Y.contains) == null ? void 0 : F.call(Y, T)) || ((V = (N = i.value) == null ? void 0 : N.contains) == null ? void 0 : V.call(N, T)) || Lo(); + var w, R, V, O, k, Y; + const K = x == null ? void 0 : x.target; + ((R = (w = t.value) == null ? void 0 : w.contains) == null ? void 0 : R.call(w, K)) || ((O = (V = n.value) == null ? void 0 : V.contains) == null ? void 0 : O.call(V, K)) || ((Y = (k = i.value) == null ? void 0 : k.contains) == null ? void 0 : Y.call(k, K)) || Lo(); } - function h(x) { + function C(x) { (x == null ? void 0 : x.key) === "Escape" && Lo(); } function G() { Lo(); } - function W(x) { - var T; - String(((T = x == null ? void 0 : x.detail) == null ? void 0 : T.source) || "") !== "viewer" && Lo(); + function Z(x) { + var K; + String(((K = x == null ? void 0 : x.detail) == null ? void 0 : K.source) || "") !== "viewer" && Lo(); } function f(x) { - const T = Kt.tags.asset; - T && (T.tags = Array.isArray(x) ? [...x] : []); + const K = Bt.tags.asset; + K && (K.tags = Array.isArray(x) ? [...x] : []); } function X(x) { - var v, w, R; - const T = Array.isArray(x == null ? void 0 : x.tags) ? x.tags : []; + var j, w, R; + const K = Array.isArray(x == null ? void 0 : x.tags) ? x.tags : []; try { - (w = (v = Kt.tags).onChanged) == null || w.call(v, T); - } catch (Y) { - (R = console.debug) == null || R.call(console, Y); + (w = (j = Bt.tags).onChanged) == null || w.call(j, K); + } catch (V) { + (R = console.debug) == null || R.call(console, V); } } - return cn( - () => Kt.main.open, + return dn( + () => Bt.main.open, async (x) => { - x && (await y(Kt.main, t), S(t)); + x && (await A(Bt.main, t), h(t)); } - ), cn( - () => Kt.submenu.open, + ), dn( + () => Bt.submenu.open, async (x) => { - x && (await y(Kt.submenu, n), S(n)); + x && (await A(Bt.submenu, n), h(n)); } - ), cn( - () => Kt.tags.open, + ), dn( + () => Bt.tags.open, async (x) => { - x && await y(Kt.tags, i); + x && await A(Bt.tags, i); } ), Dn(() => { r = new AbortController(); @@ -27404,13 +27431,13 @@ const t0 = { passive: !0, signal: r.signal }; - window.addEventListener("pointerdown", L, x), window.addEventListener("keydown", h, { + window.addEventListener("pointerdown", L, x), window.addEventListener("keydown", C, { capture: !0, signal: r.signal }), window.addEventListener("scroll", G, x), window.addEventListener("wheel", G, x), window.addEventListener("resize", G, { passive: !0, signal: r.signal - }), window.addEventListener("mjr-close-all-menus", W, { + }), window.addEventListener("mjr-close-all-menus", Z, { signal: r.signal }); }), _n(() => { @@ -27418,113 +27445,113 @@ const t0 = { d(); try { r == null || r.abort(); - } catch (T) { - (x = console.debug) == null || x.call(console, T); + } catch (K) { + (x = console.debug) == null || x.call(console, K); } r = null, Lo(); - }), (x, T) => { - var v; - return be(), Pi(ks, { to: "body" }, [ - xe(Kt).main.open ? (be(), Ce("div", { + }), (x, K) => { + var j; + return be(), Pi(Ns, { to: "body" }, [ + ve(Bt).main.open ? (be(), Ze("div", { key: 0, ref_key: "mainMenuRef", ref: t, class: "mjr-viewer-context-menu mjr-context-menu", - style: Lt(l.value), + style: vt(l.value), role: "menu", "aria-label": "Viewer context menu" }, [ - (be(!0), Ce(Nt, null, Cn(xe(Kt).main.items, (w) => (be(), Ce(Nt, { + (be(!0), Ze(Nt, null, Zn(ve(Bt).main.items, (w) => (be(), Ze(Nt, { key: w.id }, [ - w.type === "separator" ? (be(), Ce("div", m0)) : (be(), Ce("button", { + w.type === "separator" ? (be(), Ze("div", m0)) : (be(), Ze("button", { key: 1, type: "button", - class: Zn(["mjr-context-menu-item", { + class: An(["mjr-context-menu-item", { "is-disabled": w.disabled, "has-submenu": Array.isArray(w.submenu) && w.submenu.length }]), role: "menuitem", "aria-disabled": w.disabled ? "true" : "false", tabindex: w.disabled ? -1 : 0, - onClick: (R) => C(w, R), + onClick: (R) => W(w, R), onMouseenter: (R) => g(w, R), - onMouseleave: (R) => A(w) + onMouseleave: (R) => y(w) }, [ - ie("span", I0, [ - w.iconClass ? (be(), Ce("i", { + te("span", I0, [ + w.iconClass ? (be(), Ze("i", { key: 0, - class: Zn(w.iconClass) - }, null, 2)) : ft("", !0), - ie("span", null, Ye(w.label), 1) + class: An(w.iconClass) + }, null, 2)) : yt("", !0), + te("span", null, Ne(w.label), 1) ]), - ie("span", b0, [ - w.rightHint ? (be(), Ce("span", p0, Ye(w.rightHint), 1)) : ft("", !0), - Array.isArray(w.submenu) && w.submenu.length ? (be(), Ce("span", y0, " > ")) : ft("", !0) + te("span", b0, [ + w.rightHint ? (be(), Ze("span", p0, Ne(w.rightHint), 1)) : yt("", !0), + Array.isArray(w.submenu) && w.submenu.length ? (be(), Ze("span", y0, " > ")) : yt("", !0) ]) ], 42, g0)) ], 64))), 128)) - ], 4)) : ft("", !0), - xe(Kt).submenu.open ? (be(), Ce("div", { + ], 4)) : yt("", !0), + ve(Bt).submenu.open ? (be(), Ze("div", { key: 1, ref_key: "submenuRef", ref: n, class: "mjr-viewer-rating-submenu mjr-context-menu", - style: Lt(a.value), + style: vt(a.value), role: "menu", "aria-label": "Viewer context submenu", onMouseenter: p, onMouseleave: b }, [ - (be(!0), Ce(Nt, null, Cn(xe(Kt).submenu.items, (w) => (be(), Ce(Nt, { + (be(!0), Ze(Nt, null, Zn(ve(Bt).submenu.items, (w) => (be(), Ze(Nt, { key: w.id }, [ - w.type === "separator" ? (be(), Ce("div", f0)) : (be(), Ce("button", { + w.type === "separator" ? (be(), Ze("div", f0)) : (be(), Ze("button", { key: 1, type: "button", - class: Zn(["mjr-context-menu-item", { "is-disabled": w.disabled }]), + class: An(["mjr-context-menu-item", { "is-disabled": w.disabled }]), role: "menuitem", "aria-disabled": w.disabled ? "true" : "false", tabindex: w.disabled ? -1 : 0, - onClick: (R) => C(w, R, "submenu") + onClick: (R) => W(w, R, "submenu") }, [ - ie("span", C0, [ - w.iconClass ? (be(), Ce("i", { + te("span", h0, [ + w.iconClass ? (be(), Ze("i", { key: 0, - class: Zn(w.iconClass) - }, null, 2)) : ft("", !0), - ie("span", null, Ye(w.label), 1) + class: An(w.iconClass) + }, null, 2)) : yt("", !0), + te("span", null, Ne(w.label), 1) ]), - w.rightHint ? (be(), Ce("span", Z0, Ye(w.rightHint), 1)) : ft("", !0) - ], 10, h0)) + w.rightHint ? (be(), Ze("span", Z0, Ne(w.rightHint), 1)) : yt("", !0) + ], 10, C0)) ], 64))), 128)) - ], 36)) : ft("", !0), - xe(Kt).tags.open && xe(Kt).tags.asset ? (be(), Ce("div", { + ], 36)) : yt("", !0), + ve(Bt).tags.open && ve(Bt).tags.asset ? (be(), Ze("div", { key: 2, ref_key: "tagsPopoverRef", ref: i, class: "mjr-viewer-popover", - style: Lt(c.value) + style: vt(c.value) }, [ - fn(gd, { - asset: xe(Kt).tags.asset, - "model-value": ((v = xe(Kt).tags.asset) == null ? void 0 : v.tags) || [], + Cn(gd, { + asset: ve(Bt).tags.asset, + "model-value": ((j = ve(Bt).tags.asset) == null ? void 0 : j.tags) || [], "onUpdate:modelValue": f, onTagsChange: X }, null, 8, ["asset", "model-value"]) - ], 4)) : ft("", !0) + ], 4)) : yt("", !0) ]); }; } }, W0 = { __name: "ViewerContextMenuPortal", setup(e) { - const t = Ae(""), n = ze(() => LZ(t.value)); + const t = We(""), n = ze(() => LZ(t.value)); return Dn(() => { t.value = jZ(); }), _n(() => { vZ(t.value), t.value = ""; - }), (i, o) => n.value ? (be(), Pi(A0, { key: 0 })) : ft("", !0); + }), (i, o) => n.value ? (be(), Pi(A0, { key: 0 })) : yt("", !0); } }, w0 = { __name: "ViewerPortal", @@ -27536,7 +27563,7 @@ const t0 = { if (!r.length) return; const l = Math.max(0, Math.min(Number(o == null ? void 0 : o.index) || 0, r.length - 1)), a = String((o == null ? void 0 : o.mode) || "").trim().toLowerCase(); try { - t || (t = ms()), (c = t.open) == null || c.call(t, r, l), (a === "ab" || a === "sidebyside") && ((s = t.setMode) == null || s.call(t, a)); + t || (t = gs()), (c = t.open) == null || c.call(t, r, l), (a === "ab" || a === "sidebyside") && ((s = t.setMode) == null || s.call(t, a)); } catch (u) { (d = console.debug) == null || d.call(console, u); } @@ -27549,19 +27576,19 @@ const t0 = { (i = console.debug) == null || i.call(console, l); } try { - t = ms(); + t = gs(); } catch (l) { (o = console.debug) == null || o.call(console, l); } try { - window.addEventListener(ht.OPEN_VIEWER, n); + window.addEventListener(ft.OPEN_VIEWER, n); } catch (l) { (r = console.debug) == null || r.call(console, l); } }), _n(() => { var i, o, r, l; try { - window.removeEventListener(ht.OPEN_VIEWER, n); + window.removeEventListener(ft.OPEN_VIEWER, n); } catch (a) { (i = console.debug) == null || i.call(console, a); } @@ -27576,10 +27603,10 @@ const t0 = { (l = console.debug) == null || l.call(console, a); } t = null; - }), (i, o) => (be(), Ce(Nt, null, [ - fn(n0), - fn(t0), - fn(W0) + }), (i, o) => (be(), Ze(Nt, null, [ + Cn(n0), + Cn(t0), + Cn(W0) ], 64)); } }; @@ -27599,19 +27626,19 @@ function M0() { (t = console.debug) == null || t.call(console, i); } try { - Vb({ force: !0 }); + Yb({ force: !0 }); } catch (i) { (n = console.debug) == null || n.call(console, i); } e = null; }); } -const S0 = { +const G0 = { __name: "GlobalRuntime", setup(e) { return M0(), (t, n) => (be(), Pi(w0)); } -}, G0 = !1, dn = { +}, S0 = !1, mn = { gridRenderCount: 0, gridRenderTotalMs: 0, searchQueryCount: 0, @@ -27622,23 +27649,23 @@ const S0 = { thumbnailLoadCount: 0, thumbnailLoadFailures: 0, errorCounts: {} -}, hl = /* @__PURE__ */ new Map(); -function Is(e) { +}, Cl = /* @__PURE__ */ new Map(); +function bs(e) { const t = performance.now(); - hl.set(e, t); + Cl.set(e, t); try { performance.mark(`${e}-start`); } catch { } } -function Nb(e, t) { - const n = hl.get(e); +function kb(e, t) { + const n = Cl.get(e); if (!n) return console.warn(`[Majoor Metrics] Timer not found: ${e}`), 0; const i = performance.now() - n; - if (hl.delete(e), t) { + if (Cl.delete(e), t) { const o = `${t}Count`, r = `${t}TotalMs`; - typeof dn[o] == "number" && (dn[o]++, dn[r] += i); + typeof mn[o] == "number" && (mn[o]++, mn[r] += i); } i > 100 && console.log(`[Majoor Metrics] ${e}: ${i.toFixed(2)}ms`); try { @@ -27648,7 +27675,7 @@ function Nb(e, t) { return i; } function x0(e) { - return hl.has(e); + return Cl.has(e); } function Rb(e) { try { @@ -27661,51 +27688,51 @@ function j0(e) { try { performance.mark(`${e}-end`), performance.measure(e, `${e}-start`, `${e}-end`); const i = ((t = performance.getEntriesByName(e)[0]) == null ? void 0 : t.duration) || 0; - return (G0 || i > 100) && console.log(`[Majoor Metrics] Measure ${e}: ${i.toFixed(2)}ms`), i; + return (S0 || i > 100) && console.log(`[Majoor Metrics] Measure ${e}: ${i.toFixed(2)}ms`), i; } catch { return null; } } function v0(e, t = !1) { - dn.apiCallCount++, dn.apiCallTotalMs += e, t && dn.apiErrorCount++; + mn.apiCallCount++, mn.apiCallTotalMs += e, t && mn.apiErrorCount++; } -function Fb(e) { - dn.gridRenderCount++, dn.gridRenderTotalMs += e; +function Ob(e) { + mn.gridRenderCount++, mn.gridRenderTotalMs += e; } function L0(e) { - dn.searchQueryCount++, dn.searchQueryTotalMs += e; + mn.searchQueryCount++, mn.searchQueryTotalMs += e; } -function V0(e) { - dn.thumbnailLoadCount++, e || dn.thumbnailLoadFailures++; +function Y0(e) { + mn.thumbnailLoadCount++, e || mn.thumbnailLoadFailures++; } -function Y0(e, t) { - dn.errorCounts[e] = (dn.errorCounts[e] || 0) + 1; +function V0(e, t) { + mn.errorCounts[e] = (mn.errorCounts[e] || 0) + 1; } -function Ob() { +function Fb() { return { - ...dn, + ...mn, averages: { - gridRenderMs: dn.gridRenderCount > 0 ? dn.gridRenderTotalMs / dn.gridRenderCount : 0, - searchQueryMs: dn.searchQueryCount > 0 ? dn.searchQueryTotalMs / dn.searchQueryCount : 0, - apiCallMs: dn.apiCallCount > 0 ? dn.apiCallTotalMs / dn.apiCallCount : 0 + gridRenderMs: mn.gridRenderCount > 0 ? mn.gridRenderTotalMs / mn.gridRenderCount : 0, + searchQueryMs: mn.searchQueryCount > 0 ? mn.searchQueryTotalMs / mn.searchQueryCount : 0, + apiCallMs: mn.apiCallCount > 0 ? mn.apiCallTotalMs / mn.apiCallCount : 0 }, rates: { - apiErrorRate: dn.apiCallCount > 0 ? (dn.apiErrorCount / dn.apiCallCount * 100).toFixed(2) + "%" : "0%", - thumbnailFailureRate: dn.thumbnailLoadCount > 0 ? (dn.thumbnailLoadFailures / dn.thumbnailLoadCount * 100).toFixed(2) + "%" : "0%" + apiErrorRate: mn.apiCallCount > 0 ? (mn.apiErrorCount / mn.apiCallCount * 100).toFixed(2) + "%" : "0%", + thumbnailFailureRate: mn.thumbnailLoadCount > 0 ? (mn.thumbnailLoadFailures / mn.thumbnailLoadCount * 100).toFixed(2) + "%" : "0%" } }; } -function k0(e) { - const t = `${e}Count`, n = `${e}TotalMs`, i = dn[t], o = dn[n]; +function X0(e) { + const t = `${e}Count`, n = `${e}TotalMs`, i = mn[t], o = mn[n]; return i > 0 ? o / i : 0; } -function X0() { - Object.keys(dn).forEach((e) => { - typeof dn[e] == "number" ? dn[e] = 0 : typeof dn[e] == "object" && (dn[e] = {}); - }), hl.clear(), console.log("[Majoor Metrics] Metrics reset"); -} function N0() { - const e = Ob(); + Object.keys(mn).forEach((e) => { + typeof mn[e] == "number" ? mn[e] = 0 : typeof mn[e] == "object" && (mn[e] = {}); + }), Cl.clear(), console.log("[Majoor Metrics] Metrics reset"); +} +function k0() { + const e = Fb(); console.group("[Majoor Assets Manager] Performance Metrics"), console.table({ "Grid Renders": e.gridRenderCount, "Avg Grid Render": `${e.averages.gridRenderMs.toFixed(2)}ms`, @@ -27718,23 +27745,23 @@ function N0() { "Thumbnail Loads": e.thumbnailLoadCount, "Thumbnail Failures": e.thumbnailLoadFailures, "Failure Rate": e.rates.thumbnailFailureRate - }), Object.keys(dn.errorCounts).length > 0 && console.log("Error Counts:", dn.errorCounts), console.groupEnd(); + }), Object.keys(mn.errorCounts).length > 0 && console.log("Error Counts:", mn.errorCounts), console.groupEnd(); } typeof window < "u" && (window.MajoorMetrics = { - startTimer: Is, - endTimer: Nb, + startTimer: bs, + endTimer: kb, hasTimer: x0, mark: Rb, measure: j0, trackApiCall: v0, - trackGridRender: Fb, + trackGridRender: Ob, trackSearchQuery: L0, - trackThumbnailLoad: V0, - trackError: Y0, - getMetricsReport: Ob, - getAverageDuration: k0, - resetMetrics: X0, - exportMetrics: N0 + trackThumbnailLoad: Y0, + trackError: V0, + getMetricsReport: Fb, + getAverageDuration: X0, + resetMetrics: N0, + exportMetrics: k0 }); const zb = [ { @@ -27748,7 +27775,7 @@ const zb = [ hintKey: "tool.ffprobe.hint" } ]; -let Gr = !1, dm = null, um = null; +let Sr = !1, dm = null, um = null; const Jb = "__MJR_STATUS_DOT_CACHE__", gi = { ACTIVE: "active", COOLDOWN: "cooldown", @@ -27760,14 +27787,14 @@ const Jb = "__MJR_STATUS_DOT_CACHE__", gi = { }; function ui(e) { var t; - Gr = !!e; + Sr = !!e; try { - globalThis._mjrMaintenanceActive = Gr; + globalThis._mjrMaintenanceActive = Sr; } catch (n) { (t = console.debug) == null || t.call(console, n); } } -function bs(e) { +function ps(e) { const t = Number(e); if (!Number.isFinite(t) || t <= 0) return "0 B"; const n = ["B", "KB", "MB", "GB", "TB"]; @@ -27777,7 +27804,7 @@ function bs(e) { const r = i >= 100 ? 0 : i >= 10 ? 1 : 2; return `${i.toFixed(r)} ${n[o]}`; } -function Cl(e, t, n = null) { +function hl(e, t, n = null) { if (!e) return; if (e.replaceChildren(), (Array.isArray(t) ? t.filter((o) => o != null && String(o).trim() !== "") : []).forEach((o, r) => { r > 0 && e.appendChild(document.createElement("br")), e.appendChild(document.createTextNode(String(o))); @@ -27793,7 +27820,7 @@ function Wi(e, t, n) { const i = document.createElement("span"); i.style.fontSize = "11px", i.style.opacity = "0.7", i.textContent = String(n || ""), e.appendChild(i); } -function Wn(e, t = "neutral", n = {}) { +function wn(e, t = "neutral", n = {}) { var a, c; if (!e) return; const i = (n == null ? void 0 : n.toast) !== !1, o = { @@ -27840,9 +27867,9 @@ function Wn(e, t = "neutral", n = {}) { browser: m("status.toast.browser", "Index status: browser scope") }, I = t === "error" ? "error" : t === "warning" ? "warning" : t === "success" ? "success" : "info"; try { - Ze(u[t] || u.info, I, 1800, { noHistory: !0 }); - } catch (y) { - (c = console.debug) == null || c.call(console, y); + Ae(u[t] || u.info, I, 1800, { noHistory: !0 }); + } catch (A) { + (c = console.debug) == null || c.call(console, A); } } } @@ -27851,7 +27878,7 @@ function ma(e) { const t = String(e || "").toLowerCase(); return t === "all" ? m("scope.allFull", "All (Inputs + Outputs)") : t === "input" || t === "inputs" ? m("scope.input", "Inputs") : t === "custom" ? m("scope.custom", "Browser") : m("scope.output", "Outputs"); } -function F0(e, t = "") { +function O0(e, t = "") { if (!e || typeof e != "object") return t ? m("status.watcher.disabledScoped", "Watcher: disabled ({scope})", { scope: ma(t) @@ -27881,7 +27908,7 @@ function mm(e = "") { try { (t = window == null ? void 0 : window.dispatchEvent) == null || t.call( window, - new CustomEvent(ht.OPEN_MESSAGE_HISTORY, { + new CustomEvent(ft.OPEN_MESSAGE_HISTORY, { detail: { reason: String(e || "status-action") } }) ); @@ -27901,12 +27928,12 @@ Cancel = continue without vectors` e || m("dialog.vectorsReset.title", "AI vectors") ); } -function O0(e = {}) { - var x, T; +function F0(e = {}) { + var x, K; const t = typeof (e == null ? void 0 : e.getScanContext) == "function" ? e.getScanContext : null; ui(!1); const n = document.createElement("div"); - n.style.cssText = "margin-bottom: 20px; padding: 12px; background: var(--bg-color, #1a1a1a); border-radius: 6px; border: 1px solid var(--border-color, #333); cursor: pointer; transition: all 0.2s;", Wn(n, "info", { toast: !1 }); + n.style.cssText = "margin-bottom: 20px; padding: 12px; background: var(--bg-color, #1a1a1a); border-radius: 6px; border: 1px solid var(--border-color, #333); cursor: pointer; transition: all 0.2s;", wn(n, "info", { toast: !1 }); const i = document.createElement("div"); i.style.cssText = "display: flex; align-items: center; gap: 10px; margin-bottom: 8px;"; const o = document.createElement("span"); @@ -27935,40 +27962,40 @@ function O0(e = {}) { background: rgba(255,255,255,0.04); color: inherit; `, I.title = m("status.dbBackupSelectHint", "Select a DB backup to restore"); - let y = !1, S = null; - const Z = (v) => { + let A = !1, h = null; + const S = (j) => { I.replaceChildren(); const w = document.createElement("option"); - w.value = "", w.textContent = String(v || ""), w.disabled = !0, w.selected = !0, I.appendChild(w), y = !1, I.disabled = !0, S && (S.disabled = !0); + w.value = "", w.textContent = String(j || ""), w.disabled = !0, w.selected = !0, I.appendChild(w), A = !1, I.disabled = !0, h && (h.disabled = !0); }; - Z(m("status.dbBackupLoading", "Loading DB backups...")); - const C = async (v = "") => { + S(m("status.dbBackupLoading", "Loading DB backups...")); + const W = async (j = "") => { var w; try { const R = await zf(); if (!(R != null && R.ok)) { - Z(m("status.dbBackupNone", "No DB backup found")); + S(m("status.dbBackupNone", "No DB backup found")); return; } - const Y = Array.isArray((w = R == null ? void 0 : R.data) == null ? void 0 : w.items) ? R.data.items : []; - if (!Y.length) { - Z(m("status.dbBackupNone", "No DB backup found")); + const V = Array.isArray((w = R == null ? void 0 : R.data) == null ? void 0 : w.items) ? R.data.items : []; + if (!V.length) { + S(m("status.dbBackupNone", "No DB backup found")); return; } I.replaceChildren(); - let F = !1; - for (const N of Y) { - const V = String((N == null ? void 0 : N.name) || ""); - if (!V) continue; - const k = Number((N == null ? void 0 : N.mtime) || 0), K = Number((N == null ? void 0 : N.size_bytes) || 0), z = k > 0 ? new Date(k * 1e3).toLocaleString() : "", B = `${V}${z ? ` (${z}` : ""}${K > 0 ? `, ${bs(K)}` : ""}${z ? ")" : ""}`, J = document.createElement("option"); - J.value = V, J.textContent = B, v && v === V && (J.selected = !0, F = !0), I.appendChild(J); + let O = !1; + for (const k of V) { + const Y = String((k == null ? void 0 : k.name) || ""); + if (!Y) continue; + const N = Number((k == null ? void 0 : k.mtime) || 0), U = Number((k == null ? void 0 : k.size_bytes) || 0), z = N > 0 ? new Date(N * 1e3).toLocaleString() : "", T = `${Y}${z ? ` (${z}` : ""}${U > 0 ? `, ${ps(U)}` : ""}${z ? ")" : ""}`, J = document.createElement("option"); + J.value = Y, J.textContent = T, j && j === Y && (J.selected = !0, O = !0), I.appendChild(J); } - y = I.childNodes.length > 0, I.disabled = !y, y && !F && I.childNodes[0] && (I.value = String(I.childNodes[0].value || "")), S && (S.disabled = !y); + A = I.childNodes.length > 0, I.disabled = !A, A && !O && I.childNodes[0] && (I.value = String(I.childNodes[0].value || "")), h && (h.disabled = !A); } catch { - Z(m("status.dbBackupNone", "No DB backup found")); + S(m("status.dbBackupNone", "No DB backup found")); } }; - C(), u.appendChild(I); + W(), u.appendChild(I); const g = document.createElement("button"); g.type = "button", g.textContent = m("btn.dbSave", "Save DB"), g.title = m("status.dbSaveHint", "Save a DB snapshot into archive folder"), g.style.cssText = ` padding: 5px 10px; @@ -27978,46 +28005,46 @@ function O0(e = {}) { background: transparent; color: inherit; cursor: pointer; - `, g.onclick = async (v) => { - var Y, F, N; - v.stopPropagation(), ui(!0); - const w = g.textContent, R = !!(S != null && S.disabled); - g.disabled = !0, S && (S.disabled = !0), g.textContent = m("btn.saving", "Saving..."), o.style.background = "var(--mjr-status-info, #64B5F6)", Wn(n, "info"); + `, g.onclick = async (j) => { + var V, O, k; + j.stopPropagation(), ui(!0); + const w = g.textContent, R = !!(h != null && h.disabled); + g.disabled = !0, h && (h.disabled = !0), g.textContent = m("btn.saving", "Saving..."), o.style.background = "var(--mjr-status-info, #64B5F6)", wn(n, "info"); try { - const V = await Jf(); - if (V != null && V.ok) { - const k = String(((Y = V == null ? void 0 : V.data) == null ? void 0 : Y.name) || "").trim(), K = Number(((F = V == null ? void 0 : V.data) == null ? void 0 : F.size_bytes) || 0); - Ze(m("toast.dbSaveSuccess", "Database backup saved"), "success", 2200, { + const Y = await Jf(); + if (Y != null && Y.ok) { + const N = String(((V = Y == null ? void 0 : Y.data) == null ? void 0 : V.name) || "").trim(), U = Number(((O = Y == null ? void 0 : Y.data) == null ? void 0 : O.size_bytes) || 0); + Ae(m("toast.dbSaveSuccess", "Database backup saved"), "success", 2200, { history: { title: m("btn.dbSave", "Save DB"), - detail: k ? `${k}${K > 0 ? ` | ${bs(K)}` : ""}` : m("toast.dbSaveSuccess", "Database backup saved"), + detail: N ? `${N}${U > 0 ? ` | ${ps(U)}` : ""}` : m("toast.dbSaveSuccess", "Database backup saved"), operation: "save_db", - source: k || "archive", + source: N || "archive", forceStore: !0 } - }), await C(k); + }), await W(N); } else - Ze( - (V == null ? void 0 : V.error) || m("toast.dbSaveFailed", "Failed to save DB backup"), + Ae( + (Y == null ? void 0 : Y.error) || m("toast.dbSaveFailed", "Failed to save DB backup"), "error" ); - } catch (V) { - Ze( - (V == null ? void 0 : V.message) || m("toast.dbSaveFailed", "Failed to save DB backup"), + } catch (Y) { + Ae( + (Y == null ? void 0 : Y.message) || m("toast.dbSaveFailed", "Failed to save DB backup"), "error" ); } finally { - ui(!1), g.disabled = !1, S && (S.disabled = R || !y), g.textContent = w; + ui(!1), g.disabled = !1, h && (h.disabled = R || !A), g.textContent = w; try { - const V = t ? t() : null; - await Ni(o, c, s, V, null, { + const Y = t ? t() : null; + await ki(o, c, s, Y, null, { force: !0 }); - } catch (V) { - (N = console.debug) == null || N.call(console, V); + } catch (Y) { + (k = console.debug) == null || k.call(console, Y); } } - }, u.appendChild(g), S = document.createElement("button"), S.type = "button", S.textContent = m("btn.dbRestore", "Restore"), S.title = m("status.dbRestoreHint", "Restore selected DB backup"), S.style.cssText = ` + }, u.appendChild(g), h = document.createElement("button"), h.type = "button", h.textContent = m("btn.dbRestore", "Restore"), h.title = m("status.dbRestoreHint", "Restore selected DB backup"), h.style.cssText = ` padding: 5px 10px; font-size: 11px; border-radius: 6px; @@ -28025,12 +28052,12 @@ function O0(e = {}) { background: transparent; color: inherit; cursor: pointer; - `, S.onclick = async (v) => { - var N, V; - v.stopPropagation(); + `, h.onclick = async (j) => { + var k, Y; + j.stopPropagation(); const w = String(I.value || ""); if (!w) { - Ze(m("toast.dbRestoreSelect", "Select a DB backup first"), "warning", 2e3); + Ae(m("toast.dbRestoreSelect", "Select a DB backup first"), "warning", 2e3); return; } if (!await yi( @@ -28042,7 +28069,7 @@ function O0(e = {}) { ${w}`, m("btn.dbRestore", "Restore DB") )) return; - Ze(m("toast.dbRestoreStarted", "DB restore started"), "info", 1800, { + Ae(m("toast.dbRestoreStarted", "DB restore started"), "info", 1800, { history: { trackId: "maintenance:restore_db", title: m("btn.dbRestore", "Restore DB"), @@ -28053,37 +28080,37 @@ ${w}`, forceStore: !0 } }), ui(!0); - const Y = S.textContent, F = !!g.disabled; - S.disabled = !0, g.disabled = !0, I.disabled = !0, S.textContent = m("btn.restoring", "Restoring..."), o.style.background = "var(--mjr-status-warning, #FFA726)", Wn(n, "warning"); + const V = h.textContent, O = !!g.disabled; + h.disabled = !0, g.disabled = !0, I.disabled = !0, h.textContent = m("btn.restoring", "Restoring..."), o.style.background = "var(--mjr-status-warning, #FFA726)", wn(n, "warning"); try { - const k = await Tf({ name: w, useLatest: !1 }); - k != null && k.ok ? await C(String(((N = k == null ? void 0 : k.data) == null ? void 0 : N.name) || w || "")) : Ze( - (k == null ? void 0 : k.error) || m("toast.dbRestoreFailed", "Failed to restore DB backup"), + const N = await Tf({ name: w, useLatest: !1 }); + N != null && N.ok ? await W(String(((k = N == null ? void 0 : N.data) == null ? void 0 : k.name) || w || "")) : Ae( + (N == null ? void 0 : N.error) || m("toast.dbRestoreFailed", "Failed to restore DB backup"), "error" ); - } catch (k) { - Ze( - (k == null ? void 0 : k.message) || m("toast.dbRestoreFailed", "Failed to restore DB backup"), + } catch (N) { + Ae( + (N == null ? void 0 : N.message) || m("toast.dbRestoreFailed", "Failed to restore DB backup"), "error" ); } finally { - ui(!1), S.disabled = !y, g.disabled = F, I.disabled = !y, S.textContent = Y, _r("db-restore"); + ui(!1), h.disabled = !A, g.disabled = O, I.disabled = !A, h.textContent = V, _r("db-restore"); try { - const k = t ? t() : null; - await Ni(o, c, s, k, null, { + const N = t ? t() : null; + await ki(o, c, s, N, null, { force: !0 }); - } catch (k) { - (V = console.debug) == null || V.call(console, k); + } catch (N) { + (Y = console.debug) == null || Y.call(console, N); } } - }, u.appendChild(S), a.appendChild(u); - const A = document.createElement("div"); - A.style.cssText = "margin-top: 10px; display: flex; justify-content: flex-end; gap: 8px;"; + }, u.appendChild(h), a.appendChild(u); + const y = document.createElement("div"); + y.style.cssText = "margin-top: 10px; display: flex; justify-content: flex-end; gap: 8px;"; const p = document.createElement("div"); p.style.cssText = "margin-top: 8px; font-size: 11px; opacity: 0.9; line-height: 1.35; white-space: pre-wrap;", p.textContent = ""; - const b = (v, w = "neutral") => { - const R = String(v || "").trim(); + const b = (j, w = "neutral") => { + const R = String(j || "").trim(); if (p.textContent = R, !R) { p.style.color = "inherit", p.style.opacity = "0.9"; return; @@ -28118,9 +28145,9 @@ ${w}`, L.style.borderColor = "rgba(255,255,255,0.6)", L.style.background = "rgba(255,255,255,0.08)"; }, L.onmouseleave = () => { L.style.borderColor = "rgba(255,255,255,0.25)", L.style.background = "transparent"; - }, L.onclick = async (v) => { - var F; - v.stopPropagation(); + }, L.onclick = async (j) => { + var O; + j.stopPropagation(); const w = await gm(m("btn.resetIndex", "Reset index")); if (!await yi( w ? m( @@ -28135,15 +28162,15 @@ Continue?` m("dialog.resetIndex.title", "Reset index?") )) return; mm("reset-index"), ui(!0); - const Y = L.textContent; - L.disabled = !0, L.textContent = m("btn.resetting"), o.style.background = "var(--mjr-status-info, #64B5F6)", Wn(n, "info"); + const V = L.textContent; + L.disabled = !0, L.textContent = m("btn.resetting"), o.style.background = "var(--mjr-status-info, #64B5F6)", wn(n, "info"); try { - const N = t ? t() : {}, V = String((N == null ? void 0 : N.scope) || "output").toLowerCase(), k = (N == null ? void 0 : N.customRootId) || (N == null ? void 0 : N.custom_root_id) || (N == null ? void 0 : N.root_id) || null, K = V === "custom" && !k, J = await _d({ - scope: K ? "all" : V, - customRootId: K ? null : k, + const k = t ? t() : {}, Y = String((k == null ? void 0 : k.scope) || "output").toLowerCase(), N = (k == null ? void 0 : k.customRootId) || (k == null ? void 0 : k.custom_root_id) || (k == null ? void 0 : k.root_id) || null, U = Y === "custom" && !N, J = await _d({ + scope: U ? "all" : Y, + customRootId: U ? null : N, reindex: !0, maintenance_force: !0, - hard_reset_db: V === "all" && !w, + hard_reset_db: Y === "all" && !w, clear_scan_journal: !0, clear_metadata_cache: !0, clear_asset_metadata: !0, @@ -28151,23 +28178,23 @@ Continue?` preserve_vectors: w, rebuild_fts: !0 }); - J != null && J.ok ? (o.style.background = "var(--mjr-status-success, #4CAF50)", Wn(n, "success")) : (o.style.background = "var(--mjr-status-error, #f44336)", Wn(n, "error")); + J != null && J.ok ? (o.style.background = "var(--mjr-status-success, #4CAF50)", wn(n, "success")) : (o.style.background = "var(--mjr-status-error, #f44336)", wn(n, "error")); } catch { - o.style.background = "var(--mjr-status-error, #f44336)", Wn(n, "error"); + o.style.background = "var(--mjr-status-error, #f44336)", wn(n, "error"); } finally { - ui(!1), L.disabled = !1, L.textContent = Y, _r("index-reset"); + ui(!1), L.disabled = !1, L.textContent = V, _r("index-reset"); try { - const N = t ? t() : null; - await Ni(o, c, s, N, null, { + const k = t ? t() : null; + await ki(o, c, s, k, null, { force: !0 }); - } catch (N) { - (F = console.debug) == null || F.call(console, N); + } catch (k) { + (O = console.debug) == null || O.call(console, k); } } }; - const h = document.createElement("button"); - h.type = "button", h.textContent = "Backfill vectors", h.title = "Compute missing AI vector embeddings for existing assets.", h.style.cssText = ` + const C = document.createElement("button"); + C.type = "button", C.textContent = "Backfill vectors", C.title = "Compute missing AI vector embeddings for existing assets.", C.style.cssText = ` padding: 5px 12px; font-size: 11px; border-radius: 6px; @@ -28176,18 +28203,18 @@ Continue?` color: inherit; cursor: pointer; transition: border 0.2s, background 0.2s; - `, h.onmouseenter = () => { - h.style.borderColor = "rgba(0, 188, 212, 0.8)", h.style.background = "rgba(0, 188, 212, 0.12)"; - }, h.onmouseleave = () => { - h.style.borderColor = "rgba(0, 188, 212, 0.45)", h.style.background = "transparent"; - }, h.onclick = async (v) => { - var B, J, P, H, $, E, oe, M, j; - v.stopPropagation(); - const w = t ? t() : {}, R = String((w == null ? void 0 : w.scope) || "output").toLowerCase(), Y = String( + `, C.onmouseenter = () => { + C.style.borderColor = "rgba(0, 188, 212, 0.8)", C.style.background = "rgba(0, 188, 212, 0.12)"; + }, C.onmouseleave = () => { + C.style.borderColor = "rgba(0, 188, 212, 0.45)", C.style.background = "transparent"; + }, C.onclick = async (j) => { + var T, J, P, E, $, H, ne, M, v; + j.stopPropagation(); + const w = t ? t() : {}, R = String((w == null ? void 0 : w.scope) || "output").toLowerCase(), V = String( (w == null ? void 0 : w.customRootId) || (w == null ? void 0 : w.custom_root_id) || (w == null ? void 0 : w.root_id) || "" ).trim(); - if (R === "custom" && !Y) { - Ze( + if (R === "custom" && !V) { + Ae( m( "status.customBrowserScanDisabledHint", "Use Outputs, Inputs, or All to run indexing scans" @@ -28200,71 +28227,71 @@ Continue?` ); return; } - const N = R || "output", V = ma(N); + const k = R || "output", Y = ma(k); mm("vector-backfill"); - const k = { + const N = { history: { - trackId: `vector-backfill:status:${N}:${Y || "default"}`, + trackId: `vector-backfill:status:${k}:${V || "default"}`, title: "Vector Backfill", - source: V, + source: Y, operation: "vector_backfill", forceStore: !0 } }; ui(!0); - const K = h.textContent, z = L.textContent; - h.disabled = !0, L.disabled = !0, h.textContent = "Backfilling...", b(`Backfill started (${V})...`, "info"), tl( - { summary: "Vector Backfill", detail: `Started (${V})` }, + const U = C.textContent, z = L.textContent; + C.disabled = !0, L.disabled = !0, C.textContent = "Backfilling...", b(`Backfill started (${Y})...`, "info"), tl( + { summary: "Vector Backfill", detail: `Started (${Y})` }, "info", 0, - { history: { ...k.history, status: "started", detail: `Started (${V})` } } - ), o.style.background = "var(--mjr-status-info, #64B5F6)", Wn(n, "info"); + { history: { ...N.history, status: "started", detail: `Started (${Y})` } } + ), o.style.background = "var(--mjr-status-info, #64B5F6)", wn(n, "info"); try { - const O = { - scope: N, + const F = { + scope: k, onProgress: (q) => { - const ee = String((q == null ? void 0 : q.status) || "").toLowerCase(), ce = (q == null ? void 0 : q.progress) || (q == null ? void 0 : q.result) || {}, ue = Number((ce == null ? void 0 : ce.candidates) || (ce == null ? void 0 : ce.processed) || 0), U = Number((ce == null ? void 0 : ce.candidate_total) || ue || 0), Q = Number((ce == null ? void 0 : ce.eligible_total) || (ce == null ? void 0 : ce.total_assets) || 0), _ = Number((ce == null ? void 0 : ce.indexed) || 0), le = Number((ce == null ? void 0 : ce.skipped) || 0), de = Number((ce == null ? void 0 : ce.errors) || 0); + const ee = String((q == null ? void 0 : q.status) || "").toLowerCase(), ae = (q == null ? void 0 : q.progress) || (q == null ? void 0 : q.result) || {}, ue = Number((ae == null ? void 0 : ae.candidates) || (ae == null ? void 0 : ae.processed) || 0), B = Number((ae == null ? void 0 : ae.candidate_total) || ue || 0), Q = Number((ae == null ? void 0 : ae.eligible_total) || (ae == null ? void 0 : ae.total_assets) || 0), _ = Number((ae == null ? void 0 : ae.indexed) || 0), le = Number((ae == null ? void 0 : ae.skipped) || 0), ce = Number((ae == null ? void 0 : ae.errors) || 0); if (ee === "queued") { b("Backfill queued…", "info"), tl( - { summary: "Vector Backfill", detail: `Queued (${V})` }, + { summary: "Vector Backfill", detail: `Queued (${Y})` }, "info", 0, { history: { - ...k.history, + ...N.history, status: "queued", - detail: `Queued (${V})`, + detail: `Queued (${Y})`, progress: { current: 0, total: 1, percent: 0, label: "queued" } } } ); return; } - if (ee === "running" || ue > 0 || U > 0 || Q > 0 || _ > 0 || le > 0 || de > 0) { - const se = Q > 0 ? `Indexed ${_}/${Q} assets, candidates ${U}, skipped ${le}, errors ${de}` : `Candidates ${ue}, indexed ${_}, skipped ${le}, errors ${de}`; + if (ee === "running" || ue > 0 || B > 0 || Q > 0 || _ > 0 || le > 0 || ce > 0) { + const de = Q > 0 ? `Indexed ${_}/${Q} assets, candidates ${B}, skipped ${le}, errors ${ce}` : `Candidates ${ue}, indexed ${_}, skipped ${le}, errors ${ce}`; b( - Q > 0 ? `Backfill running — indexed ${_}/${Q} assets, candidates ${U}, skipped ${le}, errors ${de}` : `Backfill running — candidates ${ue}, indexed ${_}, skipped ${le}, errors ${de}`, + Q > 0 ? `Backfill running — indexed ${_}/${Q} assets, candidates ${B}, skipped ${le}, errors ${ce}` : `Backfill running — candidates ${ue}, indexed ${_}, skipped ${le}, errors ${ce}`, "info" ), tl( - { summary: "Vector Backfill", detail: se }, + { summary: "Vector Backfill", detail: de }, "info", 0, { history: { - ...k.history, + ...N.history, status: "running", - detail: se, + detail: de, progress: { - current: Q > 0 ? _ : _ + le + de, - total: Q > 0 ? Q : Math.max(ue, _ + le + de), - percent: Q > 0 ? Math.round(_ / Q * 100) : Math.max(ue, _ + le + de) > 0 ? Math.round( - (_ + le + de) / Math.max(ue, _ + le + de) * 100 + current: Q > 0 ? _ : _ + le + ce, + total: Q > 0 ? Q : Math.max(ue, _ + le + ce), + percent: Q > 0 ? Math.round(_ / Q * 100) : Math.max(ue, _ + le + ce) > 0 ? Math.round( + (_ + le + ce) / Math.max(ue, _ + le + ce) * 100 ) : null, eligible_total: Q > 0 ? Q : void 0, - candidate_total: U > 0 ? U : void 0, + candidate_total: B > 0 ? B : void 0, indexed: _, skipped: le, - errors: de, + errors: ce, label: "running" } } @@ -28273,56 +28300,56 @@ Continue?` } } }; - N === "custom" && Y && (O.customRootId = Y); - const D = await Tg(64, O); + k === "custom" && V && (F.customRootId = V); + const D = await Tg(64, F); if (D != null && D.ok) { - const q = String(((B = D == null ? void 0 : D.data) == null ? void 0 : B.status) || "").toLowerCase(), ee = !!((J = D == null ? void 0 : D.data) != null && J.pending) || ["queued", "running", "pending"].includes(q), ce = ((P = D == null ? void 0 : D.data) == null ? void 0 : P.progress) || {}, ue = Number(((H = D == null ? void 0 : D.data) == null ? void 0 : H.processed) ?? (ce == null ? void 0 : ce.candidates) ?? 0), U = Number((($ = D == null ? void 0 : D.data) == null ? void 0 : $.indexed) ?? (ce == null ? void 0 : ce.indexed) ?? 0), Q = Number(((E = D == null ? void 0 : D.data) == null ? void 0 : E.skipped) ?? (ce == null ? void 0 : ce.skipped) ?? 0), _ = Number(((oe = D == null ? void 0 : D.data) == null ? void 0 : oe.errors) ?? (ce == null ? void 0 : ce.errors) ?? 0); + const q = String(((T = D == null ? void 0 : D.data) == null ? void 0 : T.status) || "").toLowerCase(), ee = !!((J = D == null ? void 0 : D.data) != null && J.pending) || ["queued", "running", "pending"].includes(q), ae = ((P = D == null ? void 0 : D.data) == null ? void 0 : P.progress) || {}, ue = Number(((E = D == null ? void 0 : D.data) == null ? void 0 : E.processed) ?? (ae == null ? void 0 : ae.candidates) ?? 0), B = Number((($ = D == null ? void 0 : D.data) == null ? void 0 : $.indexed) ?? (ae == null ? void 0 : ae.indexed) ?? 0), Q = Number(((H = D == null ? void 0 : D.data) == null ? void 0 : H.skipped) ?? (ae == null ? void 0 : ae.skipped) ?? 0), _ = Number(((ne = D == null ? void 0 : D.data) == null ? void 0 : ne.errors) ?? (ae == null ? void 0 : ae.errors) ?? 0); if (ee) { - const le = String(((M = D == null ? void 0 : D.data) == null ? void 0 : M.backfill_id) || "").trim(), de = m( + const le = String(((M = D == null ? void 0 : D.data) == null ? void 0 : M.backfill_id) || "").trim(), ce = m( "toast.vectorBackfillRunning", "Vector backfill still running in background{job}.", { job: le ? ` (${le.slice(0, 8)})` : "" } ); - Ze(de, "info", 4200, { + Ae(ce, "info", 4200, { history: { - ...k.history, + ...N.history, status: "running", detail: `Running in background${le ? ` (${le.slice(0, 8)})` : ""}.`, progress: { - current: U + Q + _, - total: Math.max(ue, U + Q + _), - percent: Math.max(ue, U + Q + _) > 0 ? Math.round( - (U + Q + _) / Math.max(ue, U + Q + _) * 100 + current: B + Q + _, + total: Math.max(ue, B + Q + _), + percent: Math.max(ue, B + Q + _) > 0 ? Math.round( + (B + Q + _) / Math.max(ue, B + Q + _) * 100 ) : null, - indexed: U, + indexed: B, skipped: Q, errors: _, label: "running" } } }), b( - `Backfill running in background — candidates ${ue}, indexed ${U}, skipped ${Q}, errors ${_}`, + `Backfill running in background — candidates ${ue}, indexed ${B}, skipped ${Q}, errors ${_}`, "info" - ), o.style.background = "var(--mjr-status-info, #64B5F6)", Wn(n, "info"); + ), o.style.background = "var(--mjr-status-info, #64B5F6)", wn(n, "info"); } else - Ze( + Ae( m( "toast.vectorBackfillComplete", "Vector backfill complete! Processed: {processed}, Indexed: {indexed}, Skipped: {skipped}", - { processed: ue, indexed: U, skipped: Q } + { processed: ue, indexed: B, skipped: Q } ), "success", 3e3, { history: { - ...k.history, + ...N.history, status: "succeeded", - detail: `Processed ${ue}, indexed ${U}, skipped ${Q}`, + detail: `Processed ${ue}, indexed ${B}, skipped ${Q}`, progress: { current: ue, total: ue, percent: ue > 0 ? 100 : null, - indexed: U, + indexed: B, skipped: Q, errors: _, label: "done" @@ -28330,46 +28357,46 @@ Continue?` } } ), b( - `Backfill OK — processed ${ue}, indexed ${U}, skipped ${Q}`, + `Backfill OK — processed ${ue}, indexed ${B}, skipped ${Q}`, "success" - ), o.style.background = "var(--mjr-status-success, #4CAF50)", Wn(n, "success"); + ), o.style.background = "var(--mjr-status-success, #4CAF50)", wn(n, "success"); } else { const q = String( (D == null ? void 0 : D.error) || m("toast.vectorBackfillFailedGeneric", "Backfill failed") - ), ee = String((D == null ? void 0 : D.code) || "").trim(), ce = Number((D == null ? void 0 : D.status) || 0) || 0, ue = [ee ? `code=${ee}` : "", ce ? `status=${ce}` : "", q].filter(Boolean).join(" | "); - Ze(ue, "error", 4500, { + ), ee = String((D == null ? void 0 : D.code) || "").trim(), ae = Number((D == null ? void 0 : D.status) || 0) || 0, ue = [ee ? `code=${ee}` : "", ae ? `status=${ae}` : "", q].filter(Boolean).join(" | "); + Ae(ue, "error", 4500, { history: { - ...k.history, + ...N.history, status: "failed", detail: ue, progress: { label: "failed", errors: 1 } } }), b(`Backfill ERROR — ${ue} -See console for full payload.`, "error"), console.error("[Majoor] Vector backfill failed response", D), o.style.background = "var(--mjr-status-error, #f44336)", Wn(n, "error"); +See console for full payload.`, "error"), console.error("[Majoor] Vector backfill failed response", D), o.style.background = "var(--mjr-status-error, #f44336)", wn(n, "error"); } - } catch (O) { - const D = String((O == null ? void 0 : O.message) || O || "Backfill failed"); - Ze(D, "error", 4500, { + } catch (F) { + const D = String((F == null ? void 0 : F.message) || F || "Backfill failed"); + Ae(D, "error", 4500, { history: { - ...k.history, + ...N.history, status: "failed", detail: D, progress: { label: "failed", errors: 1 } } }), b(`Backfill EXCEPTION — ${D} -See console for stack trace.`, "error"), console.error("[Majoor] Vector backfill exception", O), o.style.background = "var(--mjr-status-error, #f44336)", Wn(n, "error"); +See console for stack trace.`, "error"), console.error("[Majoor] Vector backfill exception", F), o.style.background = "var(--mjr-status-error, #f44336)", wn(n, "error"); } finally { - ui(!1), h.disabled = !1, L.disabled = !1, h.textContent = K, L.textContent = z, _r("vector-backfill"); + ui(!1), C.disabled = !1, L.disabled = !1, C.textContent = U, L.textContent = z, _r("vector-backfill"); try { - const O = t ? t() : null; - await Ni(o, c, s, O, null, { + const F = t ? t() : null; + await ki(o, c, s, F, null, { force: !0 }); - } catch (O) { - (j = console.debug) == null || j.call(console, O); + } catch (F) { + (v = console.debug) == null || v.call(console, F); } } - }, A.appendChild(h), A.appendChild(L), a.appendChild(p); + }, y.appendChild(C), y.appendChild(L), a.appendChild(p); const G = document.createElement("button"); G.type = "button", G.textContent = m("btn.deleteDb"), G.title = m("tooltip.deleteDb", "Force-delete database and rebuild from scratch"), G.style.cssText = ` padding: 5px 12px; @@ -28384,9 +28411,9 @@ See console for stack trace.`, "error"), console.error("[Majoor] Vector backfill G.style.borderColor = "rgba(255,80,80,0.8)", G.style.background = "rgba(255,80,80,0.12)"; }, G.onmouseleave = () => { G.style.borderColor = "rgba(255,80,80,0.4)", G.style.background = "transparent"; - }, G.onclick = async (v) => { - var F; - v.stopPropagation(); + }, G.onclick = async (j) => { + var O; + j.stopPropagation(); const w = await gm(m("btn.deleteDb", "Delete DB")); if (!await yi( w ? m( @@ -28403,10 +28430,10 @@ Continue?` m("btn.deleteDb", "Delete DB") )) return; ui(!0); - const Y = G.textContent; - G.disabled = !0, G.textContent = w ? m("btn.resetting", "Resetting...") : m("btn.deletingDb"), L.disabled = !0, o.style.background = "var(--mjr-status-info, #64B5F6)", Wn(n, "info"); + const V = G.textContent; + G.disabled = !0, G.textContent = w ? m("btn.resetting", "Resetting...") : m("btn.deletingDb"), L.disabled = !0, o.style.background = "var(--mjr-status-info, #64B5F6)", wn(n, "info"); try { - const N = w ? await _d({ + const k = w ? await _d({ scope: "all", reindex: !0, maintenance_force: !0, @@ -28417,27 +28444,27 @@ Continue?` clear_assets: !1, preserve_vectors: !0, rebuild_fts: !0 - }) : await Of(); - N != null && N.ok ? (globalThis._mjrCorruptToastShown = !1, o.style.background = "var(--mjr-status-success, #4CAF50)", Wn(n, "success")) : (o.style.background = "var(--mjr-status-error, #f44336)", Wn(n, "error")); + }) : await Ff(); + k != null && k.ok ? (globalThis._mjrCorruptToastShown = !1, o.style.background = "var(--mjr-status-success, #4CAF50)", wn(n, "success")) : (o.style.background = "var(--mjr-status-error, #f44336)", wn(n, "error")); } catch { - o.style.background = "var(--mjr-status-error, #f44336)", Wn(n, "error"); + o.style.background = "var(--mjr-status-error, #f44336)", wn(n, "error"); } finally { - ui(!1), G.disabled = !1, G.textContent = Y, L.disabled = !1, _r( + ui(!1), G.disabled = !1, G.textContent = V, L.disabled = !1, _r( w ? "index-reset-preserve-vectors" : "db-force-delete" ); try { - const N = t ? t() : null; - await Ni(o, c, s, N, null, { + const k = t ? t() : null; + await ki(o, c, s, k, null, { force: !0 }); - } catch (N) { - (F = console.debug) == null || F.call(console, N); + } catch (k) { + (O = console.debug) == null || O.call(console, k); } } - }, A.appendChild(G), a.appendChild(A), n.appendChild(i), n.appendChild(a); - const W = n.querySelector("#mjr-status-title"); - W && W.addEventListener("click", (v) => { - v.stopPropagation(); + }, y.appendChild(G), a.appendChild(y), n.appendChild(i), n.appendChild(a); + const Z = n.querySelector("#mjr-status-title"); + Z && Z.addEventListener("click", (j) => { + j.stopPropagation(); const w = n.querySelector("#mjr-status-body"); if (!w) return; const R = w.style.display === "none"; @@ -28445,106 +28472,106 @@ Continue?` }), bm(n, !0), n.onmouseenter = () => { n.style.transform = "translateY(-1px)"; }, n.onmouseleave = () => { - var v; - n.style.transform = "", Wn(n, ((v = n.dataset) == null ? void 0 : v.mjrStatusTone) || "neutral", { + var j; + n.style.transform = "", wn(n, ((j = n.dataset) == null ? void 0 : j.mjrStatusTone) || "neutral", { toast: !1 }); }; - const f = async (v) => { + const f = async (j) => { var w, R; try { - const Y = (v == null ? void 0 : v.detail) || {}, F = String((Y == null ? void 0 : Y.step) || ""); - if (!F) return; - const N = F === "started" || F === "stopping_workers" || F === "resetting_db" || F === "delete_db" || F === "recreate_db" || F === "replacing_files" || F === "restarting_scan"; - if (N ? ui(!0) : (F === "failed" || F === "done") && ui(!1), !(n != null && n.isConnected) || !(o != null && o.isConnected) || !(c != null && c.isConnected)) + const V = (j == null ? void 0 : j.detail) || {}, O = String((V == null ? void 0 : V.step) || ""); + if (!O) return; + const k = O === "started" || O === "stopping_workers" || O === "resetting_db" || O === "delete_db" || O === "recreate_db" || O === "replacing_files" || O === "restarting_scan"; + if (k ? ui(!0) : (O === "failed" || O === "done") && ui(!1), !(n != null && n.isConnected) || !(o != null && o.isConnected) || !(c != null && c.isConnected)) return; - if (N) { - o.style.background = "var(--mjr-status-info, #64B5F6)", Wn(n, "info", { toast: !1 }), Wi( + if (k) { + o.style.background = "var(--mjr-status-info, #64B5F6)", wn(n, "info", { toast: !1 }), Wi( c, m("status.pending", "Pending..."), m("status.dbRestoreInProgress", "Database restore in progress") ); return; } - if (F === "failed") { - o.style.background = "var(--mjr-status-error, #f44336)", Wn(n, "error", { toast: !1 }), Cl(c, [ + if (O === "failed") { + o.style.background = "var(--mjr-status-error, #f44336)", wn(n, "error", { toast: !1 }), hl(c, [ m("status.error", "Error"), String( - (Y == null ? void 0 : Y.message) || m("toast.dbRestoreFailed", "Failed to restore DB backup") + (V == null ? void 0 : V.message) || m("toast.dbRestoreFailed", "Failed to restore DB backup") ) ]); return; } - if (F === "done") { - o.style.background = "var(--mjr-status-success, #4CAF50)", Wn(n, "success", { toast: !1 }); - const V = String((Y == null ? void 0 : Y.operation) || ""), k = V === "delete_db" ? m( + if (O === "done") { + o.style.background = "var(--mjr-status-success, #4CAF50)", wn(n, "success", { toast: !1 }); + const Y = String((V == null ? void 0 : V.operation) || ""), N = Y === "delete_db" ? m( "toast.dbDeleteSuccess", "Database deleted and rebuilt. Files are being reindexed." - ) : V === "reset_index" ? m( + ) : Y === "reset_index" ? m( "toast.resetStarted", "Index reset started. Files will be reindexed in the background." ) : m("toast.dbRestoreSuccess", "Database backup restored"); - Wi(c, m("status.ready", "Ready"), k); + Wi(c, m("status.ready", "Ready"), N); try { - const K = t ? t() : null; + const U = t ? t() : null; setTimeout(() => { - Ni(o, c, s, K, null, { + ki(o, c, s, U, null, { force: !0 }); }, 600); - } catch (K) { - (w = console.debug) == null || w.call(console, K); + } catch (U) { + (w = console.debug) == null || w.call(console, U); } } - } catch (Y) { - (R = console.debug) == null || R.call(console, Y); + } catch (V) { + (R = console.debug) == null || R.call(console, V); } }; try { - const v = dm; - typeof v == "function" && window.removeEventListener("mjr-db-restore-status", v), dm = f, n._mjrDbRestoreStatusHandler = f, window.addEventListener("mjr-db-restore-status", f); - } catch (v) { - (x = console.debug) == null || x.call(console, v); + const j = dm; + typeof j == "function" && window.removeEventListener("mjr-db-restore-status", j), dm = f, n._mjrDbRestoreStatusHandler = f, window.addEventListener("mjr-db-restore-status", f); + } catch (j) { + (x = console.debug) == null || x.call(console, j); } - const X = (v) => { + const X = (j) => { var w, R; try { - const Y = (v == null ? void 0 : v.detail) || {}, F = Number(Y == null ? void 0 : Y.queue_remaining), N = Number(Y == null ? void 0 : Y.progress_value), V = Number(Y == null ? void 0 : Y.progress_max), k = Array.isArray(Y == null ? void 0 : Y.cached_nodes) ? Y.cached_nodes.length : 0, K = String((Y == null ? void 0 : Y.active_prompt_id) || "").trim(), z = Number.isFinite(N) && Number.isFinite(V) && V > 0 ? m("status.runtimeProgress", "Runtime progress: {value}/{max}", { - value: N, - max: V - }) : "", B = Number.isFinite(F) ? m("status.queueRemaining", "Queue remaining: {count}", { - count: Math.max(0, F) - }) : "", J = k > 0 ? m("status.executionCached", "Cached nodes reused: {count}", { - count: k - }) : "", P = K ? m("status.activePrompt", "Active prompt: {id}", { id: K }) : "", H = [z, B, J, P].filter(Boolean); - if (!H.length) return; + const V = (j == null ? void 0 : j.detail) || {}, O = Number(V == null ? void 0 : V.queue_remaining), k = Number(V == null ? void 0 : V.progress_value), Y = Number(V == null ? void 0 : V.progress_max), N = Array.isArray(V == null ? void 0 : V.cached_nodes) ? V.cached_nodes.length : 0, U = String((V == null ? void 0 : V.active_prompt_id) || "").trim(), z = Number.isFinite(k) && Number.isFinite(Y) && Y > 0 ? m("status.runtimeProgress", "Runtime progress: {value}/{max}", { + value: k, + max: Y + }) : "", T = Number.isFinite(O) ? m("status.queueRemaining", "Queue remaining: {count}", { + count: Math.max(0, O) + }) : "", J = N > 0 ? m("status.executionCached", "Cached nodes reused: {count}", { + count: N + }) : "", P = U ? m("status.activePrompt", "Active prompt: {id}", { id: U }) : "", E = [z, T, J, P].filter(Boolean); + if (!E.length) return; const $ = (w = c == null ? void 0 : c.querySelector) == null ? void 0 : w.call(c, "span"); - $ ? $.textContent = H.join(" | ") : Wi(c, m("status.ready", "Ready"), H.join(" | ")); - } catch (Y) { - (R = console.debug) == null || R.call(console, Y); + $ ? $.textContent = E.join(" | ") : Wi(c, m("status.ready", "Ready"), E.join(" | ")); + } catch (V) { + (R = console.debug) == null || R.call(console, V); } }; try { - const v = um; - typeof v == "function" && window.removeEventListener(ht.RUNTIME_STATUS, v), um = X, window.addEventListener(ht.RUNTIME_STATUS, X); - } catch (v) { - (T = console.debug) == null || T.call(console, v); + const j = um; + typeof j == "function" && window.removeEventListener(ft.RUNTIME_STATUS, j), um = X, window.addEventListener(ft.RUNTIME_STATUS, X); + } catch (j) { + (K = console.debug) == null || K.call(console, j); } return n; } async function Tb(e, t, n = null, i = null) { - var g, A, p, b, L, h; - if (Gr) { - Ze( + var g, y, p, b, L, C; + if (Sr) { + Ae( m("status.maintenanceBusy", "Database maintenance in progress. Please wait."), "warning", 2200 ); return; } - const o = ((A = (g = t == null ? void 0 : t.closest) == null ? void 0 : g.call(t, "#mjr-status-body")) == null ? void 0 : A.parentElement) || ((p = t == null ? void 0 : t.closest) == null ? void 0 : p.call(t, "div")), r = String((i == null ? void 0 : i.scope) || "output").toLowerCase(), l = (i == null ? void 0 : i.customRootId) || (i == null ? void 0 : i.custom_root_id) || (i == null ? void 0 : i.root_id) || null; + const o = ((y = (g = t == null ? void 0 : t.closest) == null ? void 0 : g.call(t, "#mjr-status-body")) == null ? void 0 : y.parentElement) || ((p = t == null ? void 0 : t.closest) == null ? void 0 : p.call(t, "div")), r = String((i == null ? void 0 : i.scope) || "output").toLowerCase(), l = (i == null ? void 0 : i.customRootId) || (i == null ? void 0 : i.custom_root_id) || (i == null ? void 0 : i.root_id) || null; if (r === "custom" && !l) { - e.style.background = "var(--mjr-status-info, #64B5F6)", Wn(o, "info"), Wi( + e.style.background = "var(--mjr-status-info, #64B5F6)", wn(o, "info"), Wi( t, m("status.customBrowserScanDisabled", "Custom browser mode: scan is disabled"), m( @@ -28555,9 +28582,9 @@ async function Tb(e, t, n = null, i = null) { return; } try { - const G = Date.now(), W = globalThis == null ? void 0 : globalThis._mjrScanInFlight; - if (W && typeof W == "object") { - const f = G - Number(W.at || 0); + const G = Date.now(), Z = globalThis == null ? void 0 : globalThis._mjrScanInFlight; + if (Z && typeof Z == "object") { + const f = G - Number(Z.at || 0); if (f >= 0 && f < 10 * 6e4) { Wi( t, @@ -28579,21 +28606,21 @@ async function Tb(e, t, n = null, i = null) { var G; try { globalThis != null && globalThis._mjrScanInFlight && (globalThis._mjrScanInFlight = null); - } catch (W) { - (G = console.debug) == null || G.call(console, W); + } catch (Z) { + (G = console.debug) == null || G.call(console, Z); } }, s = !0; let d = null; try { - const G = await Ft(ct.ROOTS); + const G = await Ft(st.ROOTS); G.ok && (d = G.data); } catch (G) { (L = console.debug) == null || L.call(console, G); } if (!d) { - const G = await Ft(ct.CONFIG); + const G = await Ft(st.CONFIG); if (!G.ok) { - e.style.background = "var(--mjr-status-error, #f44336)", Wn(o, "error"), t.textContent = m("status.errorGetConfig"), c(); + e.style.background = "var(--mjr-status-error, #f44336)", wn(o, "error"), t.textContent = m("status.errorGetConfig"), c(); return; } d = { output_directory: G.data.output_directory }; @@ -28603,10 +28630,10 @@ async function Tb(e, t, n = null, i = null) { if (r === "input") I = d != null && d.input_directory ? ` (${d.input_directory})` : ""; else if (r === "custom") { - const G = Array.isArray(d == null ? void 0 : d.custom_roots) ? d.custom_roots : [], W = l ? G.find((f) => (f == null ? void 0 : f.id) === l) : null; - I = W != null && W.path ? ` (${W.path})` : ""; + const G = Array.isArray(d == null ? void 0 : d.custom_roots) ? d.custom_roots : [], Z = l ? G.find((f) => (f == null ? void 0 : f.id) === l) : null; + I = Z != null && Z.path ? ` (${Z.path})` : ""; } else r === "output" && (I = d != null && d.output_directory ? ` (${d.output_directory})` : ""); - e.style.background = "var(--mjr-status-info, #64B5F6)", Wn(o, "info"), Wi( + e.style.background = "var(--mjr-status-info, #64B5F6)", wn(o, "info"), Wi( t, m("status.scanningScope", `Scanning ${u}${I}...`, { scope: u, @@ -28614,29 +28641,29 @@ async function Tb(e, t, n = null, i = null) { }), m("status.scanningHint", "This may take a while") ); - const y = Xn(), S = !!(((h = y == null ? void 0 : y.scan) == null ? void 0 : h.fastMode) ?? !0), Z = { + const A = kn(), h = !!(((C = A == null ? void 0 : A.scan) == null ? void 0 : C.fastMode) ?? !0), S = { scope: r, recursive: !0, incremental: s, - fast: S, + fast: h, background_metadata: !0 }; if (r === "custom") { if (!l) { - e.style.background = "var(--mjr-status-error, #f44336)", Wn(o, "error"), t.textContent = m("status.selectCustomFolder"), c(); + e.style.background = "var(--mjr-status-error, #f44336)", wn(o, "error"), t.textContent = m("status.selectCustomFolder"), c(); return; } - Z.custom_root_id = l; + S.custom_root_id = l; } - let C; + let W; try { - C = await Et(ct.SCAN, Z); + W = await Dt(st.SCAN, S); } finally { c(); } - if (C != null && C.ok) { - const G = C.data; - e.style.background = "var(--mjr-status-success, #4CAF50)", Wn(o, "success"), Wi( + if (W != null && W.ok) { + const G = W.data; + e.style.background = "var(--mjr-status-success, #4CAF50)", wn(o, "success"), Wi( t, m("toast.scanComplete"), m( @@ -28649,13 +28676,13 @@ async function Tb(e, t, n = null, i = null) { } ) ), _r("scan-complete"), setTimeout(() => { - Ni(e, t, n); + ki(e, t, n); }, 2e3); } else - e.style.background = "var(--mjr-status-error, #f44336)", Wn(o, "error"), Cl(t, [ - m("toast.scanFailed") + `: ${(C == null ? void 0 : C.error) || "Unknown error"}` + e.style.background = "var(--mjr-status-error, #f44336)", wn(o, "error"), hl(t, [ + m("toast.scanFailed") + `: ${(W == null ? void 0 : W.error) || "Unknown error"}` ]), setTimeout(() => { - Ni(e, t, n); + ki(e, t, n); }, 3e3); } function z0(e, t, n) { @@ -28670,7 +28697,7 @@ function z0(e, t, n) { border: 1px solid rgba(255, 255, 255, 0.1); `, i.textContent = `${t ? "✅" : "❌"} ${e}`, i.title = t ? m("status.toolAvailable", `${e} available`, { tool: e }) : n || m("status.toolUnavailable", `${e} unavailable`, { tool: e }), i.style.opacity = t ? "1" : "0.75", i; } -function ps(e, t = {}, n = {}) { +function ys(e, t = {}, n = {}) { if (!e) return; if (e.replaceChildren(), !t || Object.keys(t).length === 0) { e.textContent = m("status.discoveringTools"); @@ -28694,9 +28721,9 @@ function Im(e, t = null, n = {}) { return; } const l = zb.map(({ key: a, labelKey: c }) => { - var Z; - const s = m(c, a), d = t && a in t ? t[a] : void 0, u = a in n ? n[a] : void 0, I = d !== void 0 ? d : u, y = I == null ? m("status.unknown", "unknown") : I ? m("status.available", "available") : m("status.missing", "missing"), S = (Z = t == null ? void 0 : t.versions) == null ? void 0 : Z[a]; - return S ? `${s}: ${y} - ${S}` : `${s}: ${y}`; + var S; + const s = m(c, a), d = t && a in t ? t[a] : void 0, u = a in n ? n[a] : void 0, I = d !== void 0 ? d : u, A = I == null ? m("status.unknown", "unknown") : I ? m("status.available", "available") : m("status.missing", "missing"), h = (S = t == null ? void 0 : t.versions) == null ? void 0 : S[a]; + return h ? `${s}: ${A} - ${h}` : `${s}: ${A}`; }); o.textContent = l.join(" | "); } @@ -28726,102 +28753,102 @@ function T0(e, t) { const n = !!((l = e == null ? void 0 : e.database) != null && l.available), i = (t == null ? void 0 : t.diagnostics) || {}, o = !!(i != null && i.malformed), r = !!(i != null && i.locked); return !n || o ? m("status.dbHealthError", "DB health: error") : r ? m("status.dbHealthLocked", "DB health: locked") : m("status.dbHealthOk", "DB health: ok"); } -function B0(e, t) { +function K0(e, t) { const n = Number((e == null ? void 0 : e.total_assets) || 0), i = e == null ? void 0 : e.last_index_end, o = e == null ? void 0 : e.last_scan_end, r = t === "all" ? m("scope.all", "Inputs + Outputs") : t === "input" ? m("scope.input", "Inputs") : t === "custom" ? m("scope.custom", "Custom") : m("scope.output", "Outputs"); return !Number.isFinite(n) || n <= 0 ? `${m("status.indexHealthEmpty", "Index health: empty")} (${r})` : !i && !o ? `${m("status.indexHealthPartial", "Index health: partial")} (${r})` : `${m("status.indexHealthOk", "Index health: ok")} (${r})`; } -async function Ni(e, t, n = null, i = null, o = null, r = {}) { - var p, b, L, h, G, W, f, X, x, T, v, w, R, Y; +async function ki(e, t, n = null, i = null, o = null, r = {}) { + var p, b, L, C, G, Z, f, X, x, K, j, w, R, V; const l = ((b = (p = t == null ? void 0 : t.closest) == null ? void 0 : p.call(t, "#mjr-status-body")) == null ? void 0 : b.parentElement) || ((L = t == null ? void 0 : t.closest) == null ? void 0 : L.call(t, "div")), a = (r == null ? void 0 : r.signal) || null, c = !!(r != null && r.force); try { if (a != null && a.aborted) return null; - } catch (F) { - (h = console.debug) == null || h.call(console, F); + } catch (O) { + (C = console.debug) == null || C.call(console, O); } try { if (!(e != null && e.isConnected) || !(t != null && t.isConnected)) return null; - } catch (F) { - (G = console.debug) == null || G.call(console, F); + } catch (O) { + (G = console.debug) == null || G.call(console, O); } try { - if (!c && Gr) return null; - } catch (F) { - (W = console.debug) == null || W.call(console, F); + if (!c && Sr) return null; + } catch (O) { + (Z = console.debug) == null || Z.call(console, O); } o && typeof o == "object" && (o.lastCode = null, o.lastStatus = null); - const s = String((i == null ? void 0 : i.scope) || "output").toLowerCase(), d = (i == null ? void 0 : i.customRootId) || (i == null ? void 0 : i.custom_root_id) || (i == null ? void 0 : i.root_id) || null, u = s === "custom" && !d, I = u ? `${ct.HEALTH_COUNTERS}?scope=all` : s === "custom" ? `${ct.HEALTH_COUNTERS}?scope=custom&custom_root_id=${encodeURIComponent(String(d || ""))}` : `${ct.HEALTH_COUNTERS}?scope=${encodeURIComponent(s || "output")}`, y = !!(r != null && r.lightweight), S = c || !y || !(o && typeof o == "object" && o._auxCached); - let Z, C, g, A = null; - if (S) { - const [F, N, V] = await Promise.all([ + const s = String((i == null ? void 0 : i.scope) || "output").toLowerCase(), d = (i == null ? void 0 : i.customRootId) || (i == null ? void 0 : i.custom_root_id) || (i == null ? void 0 : i.root_id) || null, u = s === "custom" && !d, I = u ? `${st.HEALTH_COUNTERS}?scope=all` : s === "custom" ? `${st.HEALTH_COUNTERS}?scope=custom&custom_root_id=${encodeURIComponent(String(d || ""))}` : `${st.HEALTH_COUNTERS}?scope=${encodeURIComponent(s || "output")}`, A = !!(r != null && r.lightweight), h = c || !A || !(o && typeof o == "object" && o._auxCached); + let S, W, g, y = null; + if (h) { + const [O, k, Y] = await Promise.all([ Ft(I, a ? { signal: a } : void 0), - Ft(ct.HEALTH, a ? { signal: a } : void 0), - Ft(ct.HEALTH_DB, a ? { signal: a } : void 0) + Ft(st.HEALTH, a ? { signal: a } : void 0), + Ft(st.HEALTH_DB, a ? { signal: a } : void 0) ]); - Z = F, C = N, g = V; + S = O, W = k, g = Y; try { - const k = await Rf(a ? { signal: a } : void 0); - k != null && k.ok && (A = k.data); - } catch (k) { - (f = console.debug) == null || f.call(console, k); + const N = await Rf(a ? { signal: a } : void 0); + N != null && N.ok && (y = N.data); + } catch (N) { + (f = console.debug) == null || f.call(console, N); } - o && typeof o == "object" && (o._auxCached = !0, o._healthCache = C, o._dbDiagCache = g, o._toolsCache = A); + o && typeof o == "object" && (o._auxCached = !0, o._healthCache = W, o._dbDiagCache = g, o._toolsCache = y); } else - Z = await Ft(I, a ? { signal: a } : void 0), C = (o == null ? void 0 : o._healthCache) || null, g = (o == null ? void 0 : o._dbDiagCache) || null, A = (o == null ? void 0 : o._toolsCache) || null; + S = await Ft(I, a ? { signal: a } : void 0), W = (o == null ? void 0 : o._healthCache) || null, g = (o == null ? void 0 : o._dbDiagCache) || null, y = (o == null ? void 0 : o._toolsCache) || null; try { if (a != null && a.aborted) return null; - } catch (F) { - (X = console.debug) == null || X.call(console, F); + } catch (O) { + (X = console.debug) == null || X.call(console, O); } try { if (!(e != null && e.isConnected) || !(t != null && t.isConnected)) return null; - } catch (F) { - (x = console.debug) == null || x.call(console, F); + } catch (O) { + (x = console.debug) == null || x.call(console, O); } - if (o && typeof o == "object" && (o.lastCode = (Z == null ? void 0 : Z.code) || null, o.lastStatus = typeof (Z == null ? void 0 : Z.status) == "number" ? Z.status : null), Z.ok) { - const F = Z.data, N = F.total_assets || 0, V = F.with_workflows ?? 0, k = F.with_generation_data ?? 0, K = F.last_scan_end, z = K ? new Date(K).toLocaleString() : "N/A", B = F.tool_availability || {}, J = F.tool_paths || {}, P = m("status.dbSize", "Database size: {size}", { - size: bs(F.db_size_bytes || 0) - }), H = C != null && C.ok && (C != null && C.data) ? C.data.vector || {} : {}, $ = (H == null ? void 0 : H.enabled) !== !1, E = !!(H != null && H.loaded), oe = !!(H != null && H.degraded), M = String((H == null ? void 0 : H.last_error) || "").trim(), j = $ ? oe ? `AI vector: degraded${M ? ` (${M})` : ""}` : E ? "AI vector: loaded" : "AI vector: initializing" : "AI vector: disabled", O = T0( - (C == null ? void 0 : C.data) || null, + if (o && typeof o == "object" && (o.lastCode = (S == null ? void 0 : S.code) || null, o.lastStatus = typeof (S == null ? void 0 : S.status) == "number" ? S.status : null), S.ok) { + const O = S.data, k = O.total_assets || 0, Y = O.with_workflows ?? 0, N = O.with_generation_data ?? 0, U = O.last_scan_end, z = U ? new Date(U).toLocaleString() : "N/A", T = O.tool_availability || {}, J = O.tool_paths || {}, P = m("status.dbSize", "Database size: {size}", { + size: ps(O.db_size_bytes || 0) + }), E = W != null && W.ok && (W != null && W.data) ? W.data.vector || {} : {}, $ = (E == null ? void 0 : E.enabled) !== !1, H = !!(E != null && E.loaded), ne = !!(E != null && E.degraded), M = String((E == null ? void 0 : E.last_error) || "").trim(), v = $ ? ne ? `AI vector: degraded${M ? ` (${M})` : ""}` : H ? "AI vector: loaded" : "AI vector: initializing" : "AI vector: disabled", F = T0( + (W == null ? void 0 : W.data) || null, (g == null ? void 0 : g.data) || null - ), D = B0( - F, + ), D = K0( + O, u ? "all" : s - ), q = !!(C != null && C.ok && ((v = (T = C == null ? void 0 : C.data) == null ? void 0 : T.database) != null && v.available)), ee = g != null && g.ok ? ((w = g == null ? void 0 : g.data) == null ? void 0 : w.diagnostics) || {} : {}, ce = !!(ee != null && ee.malformed), ue = !!(ee != null && ee.locked), U = !!(ee != null && ee.maintenance_active); - ui(U); + ), q = !!(W != null && W.ok && ((j = (K = W == null ? void 0 : W.data) == null ? void 0 : K.database) != null && j.available)), ee = g != null && g.ok ? ((w = g == null ? void 0 : g.data) == null ? void 0 : w.diagnostics) || {} : {}, ae = !!(ee != null && ee.malformed), ue = !!(ee != null && ee.locked), B = !!(ee != null && ee.maintenance_active); + ui(B); const Q = Math.max( 0, - Number((F == null ? void 0 : F.enrichment_queue_length) || 0) || 0 - ), le = $a().active || Q > 0; + Number((O == null ? void 0 : O.enrichment_queue_length) || 0) || 0 + ), le = ec().active || Q > 0; vI(le, Q); - const de = Number(N) > 0, se = !!(F != null && F.last_index_end || F != null && F.last_scan_end), ge = de && se; - let je = "success"; - U || le ? je = "info" : !q || ce ? je = "error" : (ue || !ge || oe) && (je = "warning"); - const Se = u && je !== "error" ? "browser" : je; - let ke = F.watcher; + const ce = Number(k) > 0, de = !!(O != null && O.last_index_end || O != null && O.last_scan_end), ge = ce && de; + let Le = "success"; + B || le ? Le = "info" : !q || ae ? Le = "error" : (ue || !ge || ne) && (Le = "warning"); + const xe = u && Le !== "error" ? "browser" : Le; + let Xe = O.watcher; try { - if (!ke || typeof ke.enabled != "boolean") { - const qe = await Ng(a ? { signal: a } : void 0); - qe != null && qe.ok && qe.data && (ke = { + if (!Xe || typeof Xe.enabled != "boolean") { + const qe = await kg(a ? { signal: a } : void 0); + qe != null && qe.ok && qe.data && (Xe = { enabled: !!qe.data.enabled, - scope: ((R = F == null ? void 0 : F.watcher) == null ? void 0 : R.scope) || s, + scope: ((R = O == null ? void 0 : O.watcher) == null ? void 0 : R.scope) || s, custom_root_id: d || null }); } } catch (qe) { - (Y = console.debug) == null || Y.call(console, qe); + (V = console.debug) == null || V.call(console, qe); } - const we = u ? m("status.watcher.disabledScoped", "Watcher: disabled ({scope})", { + const Me = u ? m("status.watcher.disabledScoped", "Watcher: disabled ({scope})", { scope: m("scope.customBrowser", "Browser") - }) : F0(ke, s), Je = le ? m("status.enrichmentQueue", "Metadata enrichment queue: {count}", { + }) : O0(Xe, s), Fe = le ? m("status.enrichmentQueue", "Metadata enrichment queue: {count}", { count: Q }) : m("status.enrichmentIdle", "Metadata enrichment: idle"); - ps(n, B, J), Im(n, A, B); - const $e = s === "all" ? m("scope.allFull", "All (Inputs + Outputs)") : s === "input" ? m("scope.input", "Inputs") : s === "custom" ? m("scope.customBrowser", "Browser") : m("scope.output", "Outputs"); - return je === "error" ? (e.style.background = "var(--mjr-status-error, #f44336)", Wn(l, "error"), Wi( + ys(n, T, J), Im(n, y, T); + const it = s === "all" ? m("scope.allFull", "All (Inputs + Outputs)") : s === "input" ? m("scope.input", "Inputs") : s === "custom" ? m("scope.customBrowser", "Browser") : m("scope.output", "Outputs"); + return Le === "error" ? (e.style.background = "var(--mjr-status-error, #f44336)", wn(l, "error"), Wi( t, m("status.dbCorrupted", "Database appears corrupted or unavailable."), - [O, D, P, we].filter(Boolean).join(" | ") - ), F) : u ? (e.style.background = "var(--mjr-status-browser, #26A69A)", Wn(l, "browser"), Wi( + [F, D, P, Me].filter(Boolean).join(" | ") + ), O) : u ? (e.style.background = "var(--mjr-status-browser, #26A69A)", wn(l, "browser"), Wi( t, m("status.ready", "Ready"), [ @@ -28829,46 +28856,46 @@ async function Ni(e, t, n = null, i = null, o = null, r = {}) { "status.browserMetricsHidden", "Browser mode: global DB/index metrics hidden" ), - we + Me ].filter(Boolean).join(" | ") - ), F) : (N === 0 ? (e.style.background = Se === "browser" ? "var(--mjr-status-browser, #26A69A)" : je === "info" ? "var(--mjr-status-info, #64B5F6)" : je === "warning" ? "var(--mjr-status-warning, #FFA726)" : "var(--mjr-status-success, #4CAF50)", Wn(l, Se), Wi( + ), O) : (k === 0 ? (e.style.background = xe === "browser" ? "var(--mjr-status-browser, #26A69A)" : Le === "info" ? "var(--mjr-status-info, #64B5F6)" : Le === "warning" ? "var(--mjr-status-warning, #FFA726)" : "var(--mjr-status-success, #4CAF50)", wn(l, xe), Wi( t, - m("status.noAssets", `No assets indexed yet (${$e})`, { - scope: $e + m("status.noAssets", `No assets indexed yet (${it})`, { + scope: it }), [ m("status.clickToScan", "Click the dot to start a scan"), - j, - O, + v, + F, D, P, - we + Me ].filter(Boolean).join(" | ") - )) : (e.style.background = Se === "browser" ? "var(--mjr-status-browser, #26A69A)" : je === "info" ? "var(--mjr-status-info, #64B5F6)" : je === "warning" ? "var(--mjr-status-warning, #FFA726)" : "var(--mjr-status-success, #4CAF50)", Wn(l, Se), Cl( + )) : (e.style.background = xe === "browser" ? "var(--mjr-status-browser, #26A69A)" : Le === "info" ? "var(--mjr-status-info, #64B5F6)" : Le === "warning" ? "var(--mjr-status-warning, #FFA726)" : "var(--mjr-status-success, #4CAF50)", wn(l, xe), hl( t, [ m( "status.assetsIndexed", - `${N.toLocaleString()} assets indexed (${$e})`, - { count: N.toLocaleString(), scope: $e } + `${k.toLocaleString()} assets indexed (${it})`, + { count: k.toLocaleString(), scope: it } ), - q0(F), + q0(O), m( "status.withWorkflows", - `With workflows: ${V} - Generation data: ${k}`, - { workflows: V, gendata: k } + `With workflows: ${Y} - Generation data: ${N}`, + { workflows: Y, gendata: N } ), - Je, - j, - O, + Fe, + v, + F, D, P, - we + Me ], m("status.lastScan", `Last scan: ${z}`, { date: z }) - )), F); + )), O); } else { - if (ps(n, {}, {}), Im(n, A), e.style.background = "var(--mjr-status-error, #f44336)", Wn(l, "error"), (Z == null ? void 0 : Z.code) === "INVALID_RESPONSE" && (Z == null ? void 0 : Z.status) === 404) + if (ys(n, {}, {}), Im(n, y), e.style.background = "var(--mjr-status-error, #f44336)", wn(l, "error"), (S == null ? void 0 : S.code) === "INVALID_RESPONSE" && (S == null ? void 0 : S.status) === 404) Wi( t, m("status.apiNotFound", "Majoor API endpoints not found (404)"), @@ -28878,24 +28905,24 @@ async function Ni(e, t, n = null, i = null, o = null, r = {}) { ) ); else { - const F = String((Z == null ? void 0 : Z.error) || "").toLowerCase(); - F.includes("malform") || F.includes("corrupt") || F.includes("disk image") ? (Wi(t, m("status.dbCorrupted"), m("status.dbCorruptedHint")), globalThis._mjrCorruptToastShown || (globalThis._mjrCorruptToastShown = !0, Ze(m("toast.resetFailedCorrupt"), "error", 8e3))) : Cl(t, [ - Z.error || m("status.errorChecking", "Error checking status") + const O = String((S == null ? void 0 : S.error) || "").toLowerCase(); + O.includes("malform") || O.includes("corrupt") || O.includes("disk image") ? (Wi(t, m("status.dbCorrupted"), m("status.dbCorruptedHint")), globalThis._mjrCorruptToastShown || (globalThis._mjrCorruptToastShown = !0, Ae(m("toast.resetFailedCorrupt"), "error", 8e3))) : hl(t, [ + S.error || m("status.errorChecking", "Error checking status") ]); } - if (Z.code === "SERVICE_UNAVAILABLE") { - const F = U0( + if (S.code === "SERVICE_UNAVAILABLE") { + const O = B0( e, t, n, i ); - t.appendChild(document.createElement("br")), t.appendChild(F); + t.appendChild(document.createElement("br")), t.appendChild(O); } } return null; } -function U0(e, t, n = null, i = null) { +function B0(e, t, n = null, i = null) { const o = document.createElement("button"); return o.textContent = m("btn.retryServices"), o.style.cssText = ` padding: 4px 10px; @@ -28908,13 +28935,13 @@ function U0(e, t, n = null, i = null) { cursor: pointer; `, o.onclick = async () => { o.disabled = !0, o.textContent = m("btn.retrying"); - const r = await Et(ct.RETRY_SERVICES, {}); - o.disabled = !1, o.textContent = m("btn.retryServices"), r.ok ? Ni(e, t, n, i) : (Cl(t, [ + const r = await Dt(st.RETRY_SERVICES, {}); + o.disabled = !1, o.textContent = m("btn.retryServices"), r.ok ? ki(e, t, n, i) : (hl(t, [ r.error || m("status.retryFailed", "Retry failed") ]), t.appendChild(document.createElement("br")), t.appendChild(o)); }, o; } -function K0() { +function U0() { var e, t; try { const n = (e = localStorage == null ? void 0 : localStorage.getItem) == null ? void 0 : e.call(localStorage, Jb); @@ -28934,7 +28961,7 @@ function D0(e) { (n = console.debug) == null || n.call(console, i); } } -function E0(e) { +function H0(e) { const t = [], n = (i, o = 0) => { if (!(!i || o > 2)) { if (typeof i == "number" && Number.isFinite(i)) { @@ -28954,16 +28981,16 @@ function E0(e) { }; return n(e, 0), t; } -function H0(e) { +function E0(e) { var n, i; if (!e || typeof e != "object") return !1; - if (Gr) return !0; + if (Sr) return !0; try { - if ((n = $a()) != null && n.active) return !0; + if ((n = ec()) != null && n.active) return !0; } catch (o) { (i = console.debug) == null || i.call(console, o); } - return E0(e).some((o) => Number(o) > 0); + return H0(e).some((o) => Number(o) > 0); } function q0(e) { var i; @@ -28993,10 +29020,10 @@ function P0(e) { } function Q0(e, t, n) { var o, r; - const i = K0(); + const i = U0(); if (!i) return !1; try { - ps(n, i.tool_availability || {}, i.tool_paths || {}); + ys(n, i.tool_availability || {}, i.tool_paths || {}); } catch (l) { (o = console.debug) == null || o.call(console, l); } @@ -29011,7 +29038,7 @@ function Q0(e, t, n) { } } function _0(e, t, n) { - const i = P0(t), o = i && i !== String((n == null ? void 0 : n.lastSignature) || ""), r = H0(t); + const i = P0(t), o = i && i !== String((n == null ? void 0 : n.lastSignature) || ""), r = E0(t); let l = e || gi.ACTIVE, a = Number((n == null ? void 0 : n.cooldownStablePolls) || 0) || 0; return r || o ? (l = gi.ACTIVE, a = 0) : l === gi.ACTIVE ? (l = gi.COOLDOWN, a = 0) : l === gi.COOLDOWN ? (a += 1, a >= 3 && (l = gi.IDLE, a = 0)) : (l = o ? gi.ACTIVE : gi.IDLE, a = 0), { nextState: l, @@ -29022,30 +29049,30 @@ function _0(e, t, n) { }; } function $0(e, t, n, i = null, o = null, r = null) { - var g, A, p, b; + var g, y, p, b; const l = "__MJR_STATUS_POLL_DISPOSE__", a = { lastCode: null, lastStatus: null, _pollTick: 0, _auxCached: !1 }, c = { mode: gi.ACTIVE, cooldownStablePolls: 0, lastSignature: "" }, s = typeof AbortController < "u" ? new AbortController() : null, d = async () => { - var W, f, X; + var Z, f, X; try { - if ((W = s == null ? void 0 : s.signal) != null && W.aborted) return null; + if ((Z = s == null ? void 0 : s.signal) != null && Z.aborted) return null; } catch (x) { (f = console.debug) == null || f.call(console, x); } a._pollTick = Number(a._pollTick || 0) + 1; - const L = a._pollTick > 1 && a._pollTick % 4 !== 0, h = typeof r == "function" ? r() : null, G = await Ni( + const L = a._pollTick > 1 && a._pollTick % 4 !== 0, C = typeof r == "function" ? r() : null, G = await ki( e, t, i, - h, + C, a, { signal: (s == null ? void 0 : s.signal) || null, lightweight: L, // Keep status updates alive while maintenance is active (or stale). - force: !!Gr || a._pollTick <= 1 + force: !!Sr || a._pollTick <= 1 } ); if (G && typeof G == "object") { @@ -29065,7 +29092,7 @@ function $0(e, t, n, i = null, o = null, r = null) { try { (g = n._mjrStatusPollDispose) == null || g.call(n); } catch (L) { - (A = console.debug) == null || A.call(console, L); + (y = console.debug) == null || y.call(console, L); } try { const L = window == null ? void 0 : window[l]; @@ -29073,43 +29100,43 @@ function $0(e, t, n, i = null, o = null, r = null) { } catch (L) { (p = console.debug) == null || p.call(console, L); } - let u = null, I = 0, y = !1; - const S = () => { + let u = null, I = 0, A = !1; + const h = () => { var L; try { - const h = typeof document < "u" && !!document.hidden, G = typeof document < "u" && typeof document.hasFocus == "function" && !document.hasFocus(); - if (h || G) return 4; - } catch (h) { - (L = console.debug) == null || L.call(console, h); + const C = typeof document < "u" && !!document.hidden, G = typeof document < "u" && typeof document.hasFocus == "function" && !document.hasFocus(); + if (C || G) return 4; + } catch (C) { + (L = console.debug) == null || L.call(console, C); } return 1; - }, Z = () => { - const L = R0[c.mode] || Math.max(250, Number(fe.STATUS_POLL_INTERVAL) || 2e3), h = y ? Math.max(3e4, L) : I > 0 ? Math.min(6e4, Math.round(L * Math.min(8, 1 + I))) : L, G = Math.min(12e4, Math.round(h * S())); + }, S = () => { + const L = R0[c.mode] || Math.max(250, Number(he.STATUS_POLL_INTERVAL) || 2e3), C = A ? Math.max(3e4, L) : I > 0 ? Math.min(6e4, Math.round(L * Math.min(8, 1 + I))) : L, G = Math.min(12e4, Math.round(C * h())); u = setTimeout(async () => { - var f, X, x, T; + var f, X, x, K; try { if ((f = s == null ? void 0 : s.signal) != null && f.aborted) return; - } catch (v) { - (X = console.debug) == null || X.call(console, v); + } catch (j) { + (X = console.debug) == null || X.call(console, j); } - const W = await d(); - if (y = a.lastCode === "INVALID_RESPONSE" && a.lastStatus === 404, W ? I = 0 : y ? I = Math.min(999, I + 1) : (I = Math.min(999, I + 1), c.mode = gi.ACTIVE, c.cooldownStablePolls = 0), y && I >= 3) { + const Z = await d(); + if (A = a.lastCode === "INVALID_RESPONSE" && a.lastStatus === 404, Z ? I = 0 : A ? I = Math.min(999, I + 1) : (I = Math.min(999, I + 1), c.mode = gi.ACTIVE, c.cooldownStablePolls = 0), A && I >= 3) { try { (x = n._mjrStatusPollDispose) == null || x.call(n); - } catch (v) { - (T = console.debug) == null || T.call(console, v); + } catch (j) { + (K = console.debug) == null || K.call(console, j); } return; } - Z(); + S(); }, G); }; n._mjrStatusPollDispose = () => { - var L, h; + var L, C; try { (L = s == null ? void 0 : s.abort) == null || L.call(s); } catch (G) { - (h = console.debug) == null || h.call(console, G); + (C = console.debug) == null || C.call(console, G); } u && clearTimeout(u), u = null; }; @@ -29118,61 +29145,61 @@ function $0(e, t, n, i = null, o = null, r = null) { } catch (L) { (b = console.debug) == null || b.call(console, L); } - Z(); - const C = n.querySelector("#mjr-status-dot"); - C && (C.onclick = (L) => { + S(); + const W = n.querySelector("#mjr-status-dot"); + W && (W.onclick = (L) => { L.stopPropagation(); - const h = typeof r == "function" ? r() : null; - Tb(e, t, i, h); - }, C.title = m("status.clickToScan", "Click to scan")); + const C = typeof r == "function" ? r() : null; + Tb(e, t, i, C); + }, W.title = m("status.clickToScan", "Click to scan")); } -const Uo = Ys(null), ic = Ys(null); -function eM() { +const Bo = Xs(null), oc = Xs(null); +function e2() { return { - activeAsset: Uo, - onUpdateCallback: ic + activeAsset: Bo, + onUpdateCallback: oc }; } -function tM(e, t) { - ic.value = typeof t == "function" ? t : null, Uo.value = e ?? null; +function t2(e, t) { + oc.value = typeof t == "function" ? t : null, Bo.value = e ?? null; } -function nM() { - Uo.value = null, ic.value = null; +function n2() { + Bo.value = null, oc.value = null; } -function ys(e, t) { - if (!(!Uo.value || !e)) { - Uo.value = { - ...Uo.value, +function fs(e, t) { + if (!(!Bo.value || !e)) { + Bo.value = { + ...Bo.value, ...e }; try { - const n = t ?? ic.value; - typeof n == "function" && n(Uo.value); + const n = t ?? oc.value; + typeof n == "function" && n(Bo.value); } catch { } } } -const pm = 360, iM = 240, oM = 640; -function rM() { +const pm = 360, i2 = 240, o2 = 640; +function r2() { var e; try { - const t = Xn(), n = Number((e = t == null ? void 0 : t.sidebar) == null ? void 0 : e.widthPx); - return Number.isFinite(n) ? Math.max(iM, Math.min(oM, Math.round(n))) : pm; + const t = kn(), n = Number((e = t == null ? void 0 : t.sidebar) == null ? void 0 : e.widthPx); + return Number.isFinite(n) ? Math.max(i2, Math.min(o2, Math.round(n))) : pm; } catch { return pm; } } -function Bb(e, t) { +function Kb(e, t) { var o; if (!e) return; const n = String(((o = e == null ? void 0 : e.dataset) == null ? void 0 : o.position) || "right").toLowerCase() === "left", i = "var(--mjr-border, rgba(255,255,255,0.12))"; if (t) { - const r = `${rM()}px`; + const r = `${r2()}px`; e.style.flex = `0 0 ${r}`, e.style.width = r, e.style.maxWidth = r, e.style.minWidth = "0", e.style.overflow = "hidden", e.style.borderLeft = n ? "none" : `1px solid ${i}`, e.style.borderRight = n ? `1px solid ${i}` : "none"; } else e.style.flex = "0 0 0px", e.style.width = "0", e.style.maxWidth = "0", e.style.minWidth = "0", e.style.overflow = "hidden", e.style.borderLeft = "none", e.style.borderRight = "none"; } -function lM(e) { +function l2(e) { if (e == null) return !1; let t = e; if (typeof e == "string") { @@ -29193,9 +29220,9 @@ function lM(e) { return !1; } function ym(e) { - return e ? !!(e.geninfo || e.prompt || lM(e.metadata_raw)) : !1; + return e ? !!(e.geninfo || e.prompt || l2(e.metadata_raw)) : !1; } -async function aM(e, t, n) { +async function a2(e, t, n) { var c, s, d; if (!e || !t) return; const i = String((t == null ? void 0 : t.kind) || "").toLowerCase() === "folder"; @@ -29205,25 +29232,25 @@ async function aM(e, t, n) { (c = console.debug) == null || c.call(console, u); } const o = e._requestSeq = (e._requestSeq || 0) + 1; - (d = (s = e._currentFetchAbortController) == null ? void 0 : s.abort) == null || d.call(s), e._currentFetchAbortController = null, e.classList.add("is-open"), Bb(e, !0), e._currentAsset = t, e._currentFullAsset = t, e._ratingTagsSection = null, tM(t, n); + (d = (s = e._currentFetchAbortController) == null ? void 0 : s.abort) == null || d.call(s), e._currentFetchAbortController = null, e.classList.add("is-open"), Kb(e, !0), e._currentAsset = t, e._currentFullAsset = t, e._ratingTagsSection = null, t2(t, n); const r = () => { - var I, y; - (y = (I = e._currentFetchAbortController) == null ? void 0 : I.abort) == null || y.call(I); + var I, A; + (A = (I = e._currentFetchAbortController) == null ? void 0 : I.abort) == null || A.call(I); const u = typeof AbortController < "u" ? new AbortController() : null; return e._currentFetchAbortController = u, u != null && u.signal ? { signal: u.signal } : {}; }, l = (u = {}) => { if (e._requestSeq !== o || e._currentAsset !== t) return; const I = { ...e._currentFullAsset ?? t, ...u }; - e._currentFullAsset = I, ys(u, n); + e._currentFullAsset = I, fs(u, n); }; (async () => { - var S, Z, C, g, A; + var h, S, W, g, y; if (e._requestSeq !== o || e._currentAsset !== t) return; const u = r(), I = u.signal; if (i) { try { - const p = String((t == null ? void 0 : t.filepath) || (t == null ? void 0 : t.subfolder) || "").trim(), b = String((t == null ? void 0 : t.root_id) || (t == null ? void 0 : t.rootId) || "").trim(), L = b ? String((t == null ? void 0 : t.subfolder) || "").trim() : "", h = await Ih({ filepath: p, root_id: b, subfolder: L }, u); - !(I != null && I.aborted) && (h != null && h.ok) && h.data && l({ folder_info: h.data }); + const p = String((t == null ? void 0 : t.filepath) || (t == null ? void 0 : t.subfolder) || "").trim(), b = String((t == null ? void 0 : t.root_id) || (t == null ? void 0 : t.rootId) || "").trim(), L = b ? String((t == null ? void 0 : t.subfolder) || "").trim() : "", C = await IC({ filepath: p, root_id: b, subfolder: L }, u); + !(I != null && I.aborted) && (C != null && C.ok) && C.data && l({ folder_info: C.data }); } catch (p) { I != null && I.aborted || console.warn("Failed to load folder details:", p); } finally { @@ -29231,9 +29258,9 @@ async function aM(e, t, n) { } return; } - const y = () => e._currentFullAsset ?? t; + const A = () => e._currentFullAsset ?? t; try { - if (t.id && !ym(y()) && !y().exif) { + if (t.id && !ym(A()) && !A().exif) { const p = await gl(t.id, u); if (I != null && I.aborted) return; p != null && p.ok && p.data && l(p.data); @@ -29242,21 +29269,21 @@ async function aM(e, t, n) { I != null && I.aborted || console.warn("Failed to load full asset metadata:", p); } if (!(I != null && I.aborted)) { - if (!ym(y())) { - const p = String(((S = y()) == null ? void 0 : S.filename) || "").trim(), b = String(((Z = y()) == null ? void 0 : Z.type) || "output").trim().toLowerCase(), L = String(((C = y()) == null ? void 0 : C.subfolder) || "").trim(), h = String(((g = y()) == null ? void 0 : g.root_id) || ((A = y()) == null ? void 0 : A.rootId) || "").trim(); + if (!ym(A())) { + const p = String(((h = A()) == null ? void 0 : h.filename) || "").trim(), b = String(((S = A()) == null ? void 0 : S.type) || "output").trim().toLowerCase(), L = String(((W = A()) == null ? void 0 : W.subfolder) || "").trim(), C = String(((g = A()) == null ? void 0 : g.root_id) || ((y = A()) == null ? void 0 : y.rootId) || "").trim(); if (p) try { - const G = await Eg({ type: b, filename: p, subfolder: L, root_id: h }, u); + const G = await Hg({ type: b, filename: p, subfolder: L, root_id: C }, u); if (I != null && I.aborted) return; if (G != null && G.ok && G.data) { - const W = G.data; + const Z = G.data; l({ - prompt: y().prompt ?? W.prompt, - workflow: y().workflow ?? W.workflow, - geninfo: y().geninfo ?? W.geninfo, - exif: y().exif ?? W.exif, - ffprobe: y().ffprobe ?? W.ffprobe, - metadata_raw: y().metadata_raw ?? W + prompt: A().prompt ?? Z.prompt, + workflow: A().workflow ?? Z.workflow, + geninfo: A().geninfo ?? Z.geninfo, + exif: A().exif ?? Z.exif, + ffprobe: A().ffprobe ?? Z.ffprobe, + metadata_raw: A().metadata_raw ?? Z }); } } catch (G) { @@ -29267,10 +29294,10 @@ async function aM(e, t, n) { } })(); } -function Ub(e) { +function Bb(e) { var t, n, i, o; if (e) { - e._requestSeq = (e._requestSeq || 0) + 1, e.classList.remove("is-open"), Bb(e, !1), e._currentAsset = null, e._currentFullAsset = null, (n = (t = e._currentFetchAbortController) == null ? void 0 : t.abort) == null || n.call(t), e._currentFetchAbortController = null, nM(); + e._requestSeq = (e._requestSeq || 0) + 1, e.classList.remove("is-open"), Kb(e, !1), e._currentAsset = null, e._currentFullAsset = null, (n = (t = e._currentFetchAbortController) == null ? void 0 : t.abort) == null || n.call(t), e._currentFetchAbortController = null, n2(); try { (i = e.dispatchEvent) == null || i.call(e, new CustomEvent("mjr:sidebar-closed", { bubbles: !0 })); } catch (r) { @@ -29278,7 +29305,7 @@ function Ub(e) { } } } -const Id = "mjr_panel_state", cM = /* @__PURE__ */ new Set(["output", "input", "all", "custom"]); +const Id = "mjr_panel_state", c2 = /* @__PURE__ */ new Set(["output", "input", "all", "custom"]); function fm(e, t = !1) { if (typeof e == "boolean") return e; if (typeof e == "string") { @@ -29288,7 +29315,7 @@ function fm(e, t = !1) { } return !!t; } -function fs(e, t = 0) { +function Cs(e, t = 0) { const n = Number(e); return Number.isFinite(n) ? n : t; } @@ -29296,15 +29323,15 @@ function mi(e, t = "") { return e == null ? t : String(e); } function ir(e, t = 0, n = 1 / 0) { - return Math.max(t, Math.min(n, Math.floor(fs(e, t)))); + return Math.max(t, Math.min(n, Math.floor(Cs(e, t)))); } -function sM(e) { +function s2(e) { const t = mi(e || "output").toLowerCase(), n = t === "outputs" ? "output" : t === "inputs" ? "input" : t; - return cM.has(n) ? n : "output"; + return c2.has(n) ? n : "output"; } -function Kb(e) { +function Ub(e) { return !e || typeof e != "object" ? {} : { - scope: sM(e.scope), + scope: s2(e.scope), customRootId: mi(e.customRootId), customRootLabel: mi(e.customRootLabel), currentFolderRelativePath: mi(e.currentFolderRelativePath || e.subfolder), @@ -29315,8 +29342,8 @@ function Kb(e) { dateExactFilter: mi(e.dateExactFilter), workflowOnly: fm(e.workflowOnly, !1), minRating: ir(e.minRating, 0, 5), - minSizeMB: Math.max(0, fs(e.minSizeMB, 0)), - maxSizeMB: Math.max(0, fs(e.maxSizeMB, 0)), + minSizeMB: Math.max(0, Cs(e.minSizeMB, 0)), + maxSizeMB: Math.max(0, Cs(e.maxSizeMB, 0)), resolutionCompare: e.resolutionCompare === "lte" ? "lte" : "gte", minWidth: ir(e.minWidth), minHeight: ir(e.minHeight), @@ -29331,25 +29358,25 @@ function Kb(e) { sidebarOpen: fm(e.sidebarOpen, !1) }; } -function dM() { +function d2() { try { const e = localStorage.getItem(Id); - if (e) return Kb(JSON.parse(e)); + if (e) return Ub(JSON.parse(e)); } catch { } return {}; } -function uM(e) { +function u2(e) { try { const t = { ...e }; delete t.lastGridCount, delete t.lastGridTotal, delete t.viewScope, delete t.similarResults, delete t.similarTitle, delete t.similarSourceAssetId, localStorage.setItem(Id, JSON.stringify(t)); } catch { } } -const Go = rg("mjr-panel", () => { - const e = dM(), t = Ae(e.scope || "output"), n = Ae(e.customRootId || ""), i = Ae(e.customRootLabel || ""), o = Ae(e.currentFolderRelativePath || ""), r = Ae(e.collectionId || ""), l = Ae(e.collectionName || ""), a = Ae(e.kindFilter || ""), c = Ae(e.dateRangeFilter || ""), s = Ae(e.dateExactFilter || ""), d = Ae(e.workflowOnly || !1), u = Ae(e.minRating || 0), I = Ae(e.minSizeMB || 0), y = Ae(e.maxSizeMB || 0), S = Ae(e.resolutionCompare || "gte"), Z = Ae(e.minWidth || 0), C = Ae(e.minHeight || 0), g = Ae(e.maxWidth || 0), A = Ae(e.maxHeight || 0), p = Ae(e.workflowType || ""), b = Ae(e.sort || "mtime_desc"), L = Ae(e.searchQuery || ""), h = Ae(e.scrollTop || 0), G = Ae(e.activeAssetId || ""), W = Ae(e.selectedAssetIds || []), f = Ae(e.sidebarOpen || !1), X = Ae(0), x = Ae(0), T = Ae(""), v = Ae([]), w = Ae(""), R = Ae(""); - let Y = null; - cn( +const So = rg("mjr-panel", () => { + const e = d2(), t = We(e.scope || "output"), n = We(e.customRootId || ""), i = We(e.customRootLabel || ""), o = We(e.currentFolderRelativePath || ""), r = We(e.collectionId || ""), l = We(e.collectionName || ""), a = We(e.kindFilter || ""), c = We(e.dateRangeFilter || ""), s = We(e.dateExactFilter || ""), d = We(e.workflowOnly || !1), u = We(e.minRating || 0), I = We(e.minSizeMB || 0), A = We(e.maxSizeMB || 0), h = We(e.resolutionCompare || "gte"), S = We(e.minWidth || 0), W = We(e.minHeight || 0), g = We(e.maxWidth || 0), y = We(e.maxHeight || 0), p = We(e.workflowType || ""), b = We(e.sort || "mtime_desc"), L = We(e.searchQuery || ""), C = We(e.scrollTop || 0), G = We(e.activeAssetId || ""), Z = We(e.selectedAssetIds || []), f = We(e.sidebarOpen || !1), X = We(0), x = We(0), K = We(""), j = We([]), w = We(""), R = We(""); + let V = null; + dn( [ t, n, @@ -29363,23 +29390,23 @@ const Go = rg("mjr-panel", () => { d, u, I, - y, - S, - Z, - C, - g, A, + h, + S, + W, + g, + y, p, b, L, - h, + C, G, - W, + Z, f ], () => { - Y && clearTimeout(Y), Y = setTimeout(() => { - Y = null, uM({ + V && clearTimeout(V), V = setTimeout(() => { + V = null, u2({ scope: t.value, customRootId: n.value, customRootLabel: i.value, @@ -29392,53 +29419,53 @@ const Go = rg("mjr-panel", () => { workflowOnly: d.value, minRating: u.value, minSizeMB: I.value, - maxSizeMB: y.value, - resolutionCompare: S.value, - minWidth: Z.value, - minHeight: C.value, + maxSizeMB: A.value, + resolutionCompare: h.value, + minWidth: S.value, + minHeight: W.value, maxWidth: g.value, - maxHeight: A.value, + maxHeight: y.value, workflowType: p.value, sort: b.value, searchQuery: L.value, - scrollTop: h.value, + scrollTop: C.value, activeAssetId: G.value, - selectedAssetIds: W.value, + selectedAssetIds: Z.value, sidebarOpen: f.value }); }, 750); }, { deep: !0 } ); - const N = (B) => { - if (!(B.key !== Id || !B.newValue)) + const k = (T) => { + if (!(T.key !== Id || !T.newValue)) try { - const J = Kb(JSON.parse(B.newValue)); + const J = Ub(JSON.parse(T.newValue)); J.scope !== void 0 && (t.value = J.scope), J.customRootLabel !== void 0 && (i.value = J.customRootLabel), J.searchQuery !== void 0 && (L.value = J.searchQuery), J.sort !== void 0 && (b.value = J.sort), J.sidebarOpen !== void 0 && (f.value = J.sidebarOpen); } catch { } }; try { - window.addEventListener("storage", N); + window.addEventListener("storage", k); } catch { } ag(() => { try { - window.removeEventListener("storage", N); + window.removeEventListener("storage", k); } catch { } }); - function V() { - a.value = "", c.value = "", s.value = "", d.value = !1, u.value = 0, I.value = 0, y.value = 0, S.value = "gte", Z.value = 0, C.value = 0, g.value = 0, A.value = 0, p.value = "", L.value = ""; + function Y() { + a.value = "", c.value = "", s.value = "", d.value = !1, u.value = 0, I.value = 0, A.value = 0, h.value = "gte", S.value = 0, W.value = 0, g.value = 0, y.value = 0, p.value = "", L.value = ""; } - function k() { - W.value = [], G.value = ""; + function N() { + Z.value = [], G.value = ""; } - function K(B, J = "") { - W.value = Array.isArray(B) ? B.map(String).filter(Boolean) : [], G.value = J || W.value[0] || ""; + function U(T, J = "") { + Z.value = Array.isArray(T) ? T.map(String).filter(Boolean) : [], G.value = J || Z.value[0] || ""; } - function z(B, J = {}) { - t.value = B, o.value = J.folder || "", r.value = J.collectionId || "", l.value = J.collectionName || "", n.value = J.customRootId || "", i.value = J.customRootLabel || "", T.value = "", v.value = [], w.value = "", R.value = "", k(); + function z(T, J = {}) { + t.value = T, o.value = J.folder || "", r.value = J.collectionId || "", l.value = J.collectionName || "", n.value = J.customRootId || "", i.value = J.customRootLabel || "", K.value = "", j.value = [], w.value = "", R.value = "", N(); } return { // persistent @@ -29454,36 +29481,36 @@ const Go = rg("mjr-panel", () => { workflowOnly: d, minRating: u, minSizeMB: I, - maxSizeMB: y, - resolutionCompare: S, - minWidth: Z, - minHeight: C, + maxSizeMB: A, + resolutionCompare: h, + minWidth: S, + minHeight: W, maxWidth: g, - maxHeight: A, + maxHeight: y, workflowType: p, sort: b, searchQuery: L, - scrollTop: h, + scrollTop: C, activeAssetId: G, - selectedAssetIds: W, + selectedAssetIds: Z, sidebarOpen: f, // transient lastGridCount: X, lastGridTotal: x, - viewScope: T, - similarResults: v, + viewScope: K, + similarResults: j, similarTitle: w, similarSourceAssetId: R, // actions - resetFilters: V, - clearSelection: k, - setSelection: K, + resetFilters: Y, + clearSelection: N, + setSelection: U, navigateToScope: z }; }); function Al() { try { - return lg() ? Go() : null; + return lg() ? So() : null; } catch { return null; } @@ -29518,8 +29545,8 @@ function oo(e, t = []) { isPiniaOnly: !0 }; } -const Db = "mjr_panel_messages_v1", Eb = "mjr_panel_messages_last_read_v1", mM = "mjr_panel_messages_dismissed_builtin_ids_v1", hm = 120, gM = "/mjr/am/user-guide", IM = /* @__PURE__ */ new Set(["info", "success", "warning", "error"]), Hb = "mjr:panel-messages-changed"; -let Cm = !1, wi = []; +const Db = "mjr_panel_messages_v1", Hb = "mjr_panel_messages_last_read_v1", m2 = "mjr_panel_messages_dismissed_builtin_ids_v1", Cm = 120, g2 = "/mjr/am/user-guide", I2 = /* @__PURE__ */ new Set(["info", "success", "warning", "error"]), Eb = "mjr:panel-messages-changed"; +let hm = !1, wi = []; const qb = Object.freeze([ { id: "whats-new-2026-03-29-version-2-4-3", @@ -29588,7 +29615,7 @@ const qb = Object.freeze([ bodyKey: "msg.whatsNew.body.localUserGuide", actionLabel: "User Guide", actionLabelKey: "label.userGuide", - actionUrl: gM + actionUrl: g2 }, { id: "tip-2026-04-07-output-folder-override", @@ -29710,7 +29737,7 @@ const qb = Object.freeze([ actionLabelKey: "label.settingsGuide", actionUrl: "docs/SETTINGS_CONFIGURATION.md" } -]), bM = new Set( +]), b2 = new Set( qb.map((e) => String((e == null ? void 0 : e.id) || "").trim()).filter(Boolean) ); function Wl(e, t = 0) { @@ -29720,18 +29747,18 @@ function Wl(e, t = 0) { function Zl() { return Date.now(); } -function pM() { - return Xs(`msg-${Zl()}-`, 6); +function p2() { + return ks(`msg-${Zl()}-`, 6); } -function yM(e) { +function y2(e) { const t = String(e || "").trim().toLowerCase(); - return t === "warn" ? "warning" : t === "danger" ? "error" : IM.has(t) ? t : "info"; + return t === "warn" ? "warning" : t === "danger" ? "error" : I2.has(t) ? t : "info"; } -function fM(e) { - return bM.has(String(e || "").trim()); +function f2(e) { + return b2.has(String(e || "").trim()); } function Pb(e = {}) { - const t = String((e == null ? void 0 : e.id) || "").trim() || pM(), n = String((e == null ? void 0 : e.title) || "").trim() || "Info", i = String((e == null ? void 0 : e.titleKey) || "").trim(), o = String((e == null ? void 0 : e.emoji) || "").trim(), r = String((e == null ? void 0 : e.body) || "").trim(), l = String((e == null ? void 0 : e.bodyKey) || "").trim(), a = String((e == null ? void 0 : e.category) || "").trim() || "Info", c = String((e == null ? void 0 : e.categoryKey) || "").trim(), s = Wl(e == null ? void 0 : e.createdAt, Zl()), d = yM(e == null ? void 0 : e.level), u = String((e == null ? void 0 : e.actionLabel) || "").trim(), I = String((e == null ? void 0 : e.actionLabelKey) || "").trim(), y = String((e == null ? void 0 : e.actionUrl) || "").trim(); + const t = String((e == null ? void 0 : e.id) || "").trim() || p2(), n = String((e == null ? void 0 : e.title) || "").trim() || "Info", i = String((e == null ? void 0 : e.titleKey) || "").trim(), o = String((e == null ? void 0 : e.emoji) || "").trim(), r = String((e == null ? void 0 : e.body) || "").trim(), l = String((e == null ? void 0 : e.bodyKey) || "").trim(), a = String((e == null ? void 0 : e.category) || "").trim() || "Info", c = String((e == null ? void 0 : e.categoryKey) || "").trim(), s = Wl(e == null ? void 0 : e.createdAt, Zl()), d = y2(e == null ? void 0 : e.level), u = String((e == null ? void 0 : e.actionLabel) || "").trim(), I = String((e == null ? void 0 : e.actionLabelKey) || "").trim(), A = String((e == null ? void 0 : e.actionUrl) || "").trim(); return { id: t, title: n, @@ -29745,7 +29772,7 @@ function Pb(e = {}) { level: d, actionLabel: u, actionLabelKey: I, - actionUrl: y + actionUrl: A }; } function Qb(e, t) { @@ -29756,7 +29783,7 @@ function Qb(e, t) { return t; } } -function hM(e, t) { +function C2(e, t) { try { localStorage.setItem(e, JSON.stringify(t)); } catch { @@ -29764,31 +29791,31 @@ function hM(e, t) { } function _b() { try { - return Wl(localStorage.getItem(Eb), 0); + return Wl(localStorage.getItem(Hb), 0); } catch { return 0; } } -function CM(e) { +function h2(e) { try { - localStorage.setItem(Eb, String(Wl(e, Zl()))); + localStorage.setItem(Hb, String(Wl(e, Zl()))); } catch { } } -function ZM() { - const e = Qb(mM, []), t = Array.isArray(e) ? e : []; +function Z2() { + const e = Qb(m2, []), t = Array.isArray(e) ? e : []; return new Set( - t.map((n) => String(n || "").trim()).filter((n) => fM(n)) + t.map((n) => String(n || "").trim()).filter((n) => f2(n)) ); } function $b() { - wi.sort((e, t) => Number(t.createdAt || 0) - Number(e.createdAt || 0)), wi.length > hm && (wi = wi.slice(0, hm)); + wi.sort((e, t) => Number(t.createdAt || 0) - Number(e.createdAt || 0)), wi.length > Cm && (wi = wi.slice(0, Cm)); } -function AM() { - hM(Db, wi); +function A2() { + C2(Db, wi); } -function WM() { - const e = ZM(); +function W2() { + const e = Z2(); let t = !1; for (const n of qb) { const i = Pb(n); @@ -29807,13 +29834,13 @@ function WM() { }; JSON.stringify(r) !== JSON.stringify(l) && (wi[o] = l, t = !0); } - return t ? ($b(), AM(), !0) : !1; + return t ? ($b(), A2(), !0) : !1; } function ep() { var e; try { window.dispatchEvent( - new CustomEvent(Hb, { + new CustomEvent(Eb, { detail: { total: wi.length, unread: hs() @@ -29825,15 +29852,15 @@ function ep() { } } function wl() { - if (Cm) return; - Cm = !0; + if (hm) return; + hm = !0; const e = Qb(Db, []); wi = (Array.isArray(e) ? e : []).map(Pb), $b(); } -function wM() { - wl(), WM() && ep(); +function w2() { + wl(), W2() && ep(); } -function MM() { +function M2() { return wl(), wi.map((e) => ({ ...e })); } function hs() { @@ -29841,13 +29868,13 @@ function hs() { const e = _b(); return wi.reduce((t, n) => t + (Number(n.createdAt || 0) > e ? 1 : 0), 0); } -function SM() { +function G2() { return wl(), _b(); } -function Gc({ upTo: e = Zl() } = {}) { - wl(), CM(Wl(e, Zl())), ep(); +function xc({ upTo: e = Zl() } = {}) { + wl(), h2(Wl(e, Zl())), ep(); } -const GM = Object.freeze([ +const S2 = Object.freeze([ { id: "panel", titleKey: "msg.shortcuts.section.panel", @@ -29916,13 +29943,13 @@ const GM = Object.freeze([ ]) } ]); -function xM() { - return GM.map((e) => ({ +function x2() { + return S2.map((e) => ({ ...e, items: Array.isArray(e.items) ? e.items.map((t) => ({ ...t })) : [] })); } -function jM() { +function j2() { const e = document.createElement("div"); e.className = "mjr-shortcut-guide"; const t = document.createElement("div"); @@ -29930,7 +29957,7 @@ function jM() { "msg.shortcuts.intro", "Current keyboard shortcuts grouped by section for quick reference." ), e.appendChild(t); - for (const n of xM()) { + for (const n of x2()) { const i = document.createElement("section"); i.className = "mjr-shortcut-section"; const o = document.createElement("div"); @@ -29949,7 +29976,7 @@ function jM() { } return e; } -const vM = /* @__PURE__ */ new Set(["info", "success", "warning", "error"]); +const v2 = /* @__PURE__ */ new Set(["info", "success", "warning", "error"]); function Zm(e) { const t = Number(e); if (!Number.isFinite(t) || t <= 0) return ""; @@ -29965,13 +29992,13 @@ function Zm(e) { return ""; } } -function El(e, t, n, i) { +function Hl(e, t, n, i) { const o = String((e == null ? void 0 : e[t]) || "").trim(), r = String((e == null ? void 0 : e[n]) || i || "").trim() || String(i || ""); return o ? m(o, r) : r; } function tp(e) { const t = String(e || "").trim().toLowerCase(); - return t === "warn" ? "warning" : t === "danger" ? "error" : vM.has(t) ? t : "info"; + return t === "warn" ? "warning" : t === "danger" ? "error" : v2.has(t) ? t : "info"; } function Am(e) { var n, i; @@ -29984,13 +30011,13 @@ function Am(e) { return ""; } } -function LM(e) { +function L2(e) { const t = String((e == null ? void 0 : e.emoji) || "").trim(); if (t) return t; const n = tp(e == null ? void 0 : e.level); return n === "success" ? "✅" : n === "warning" ? "⚠️" : n === "error" ? "❌" : "💡"; } -function VM(e) { +function Y2(e) { switch (String(e || "").toLowerCase()) { case "success": return "✅"; @@ -30002,22 +30029,22 @@ function VM(e) { return "💡"; } } -function YM(e) { +function V2(e) { if (e != null && e.persistent) return "persistent"; const t = Number(e == null ? void 0 : e.durationMs); return !Number.isFinite(t) || t <= 0 ? "" : t < 1e4 ? `${(t / 1e3).toFixed(1)}s` : `${Math.round(t / 1e3)}s`; } -function kM(e) { +function X2(e) { const t = String(e || "").trim().toLowerCase(); return t ? t.replace(/[_-]+/g, " ") : ""; } -function XM(e) { +function N2(e) { const t = e == null ? void 0 : e.progress; if (!t || typeof t != "object") return ""; const n = String(t.label || "").trim(), i = Number(t.current), o = Number(t.total), r = Number(t.indexed), l = Number(t.skipped), a = Number(t.errors), c = []; return n && c.push(n), Number.isFinite(i) && Number.isFinite(o) && o > 0 && c.push(`${i}/${o}`), Number.isFinite(r) && c.push(`indexed ${r}`), Number.isFinite(l) && c.push(`skipped ${l}`), Number.isFinite(a) && a > 0 && c.push(`errors ${a}`), c.join(" | "); } -function NM(e) { +function k2(e) { const t = e == null ? void 0 : e.progress; if (!t || typeof t != "object") return null; const n = Number(t.percent); @@ -30037,20 +30064,20 @@ function Tr({ shortcutsPanel: c = null, markReadBtn: s = null } = {}) { - var S, Z, C; - const d = e === "messages", u = e === "history", I = e === "shortcuts", y = d ? m("label.messages", "Messages") : u ? m("label.toastHistory", "History") : m("msg.shortcuts.title", "Shortcut Guide"); + var h, S, W; + const d = e === "messages", u = e === "history", I = e === "shortcuts", A = d ? m("label.messages", "Messages") : u ? m("label.toastHistory", "History") : m("msg.shortcuts.title", "Shortcut Guide"); try { i == null || i.classList.toggle("is-active", d), i == null || i.setAttribute("aria-selected", d ? "true" : "false"), i == null || i.setAttribute("tabindex", d ? "0" : "-1"), o == null || o.classList.toggle("is-active", u), o == null || o.setAttribute("aria-selected", u ? "true" : "false"), o == null || o.setAttribute("tabindex", u ? "0" : "-1"), r == null || r.classList.toggle("is-active", I), r == null || r.setAttribute("aria-selected", I ? "true" : "false"), r == null || r.setAttribute("tabindex", I ? "0" : "-1"); } catch (g) { - (S = console.debug) == null || S.call(console, g); + (h = console.debug) == null || h.call(console, g); } try { - t && (t.textContent = y), (Z = n == null ? void 0 : n.setAttribute) == null || Z.call(n, "aria-label", y), l && (l.hidden = !d, l.style.display = d ? "" : "none", l.setAttribute("aria-hidden", d ? "false" : "true")), a && (a.hidden = !u, a.style.display = u ? "" : "none", a.setAttribute("aria-hidden", u ? "false" : "true")), c && (c.hidden = !I, c.style.display = I ? "" : "none", c.setAttribute("aria-hidden", I ? "false" : "true")), s && (s.hidden = !d); + t && (t.textContent = A), (S = n == null ? void 0 : n.setAttribute) == null || S.call(n, "aria-label", A), l && (l.hidden = !d, l.style.display = d ? "" : "none", l.setAttribute("aria-hidden", d ? "false" : "true")), a && (a.hidden = !u, a.style.display = u ? "" : "none", a.setAttribute("aria-hidden", u ? "false" : "true")), c && (c.hidden = !I, c.style.display = I ? "" : "none", c.setAttribute("aria-hidden", I ? "false" : "true")), s && (s.hidden = !d); } catch (g) { - (C = console.debug) == null || C.call(console, g); + (W = console.debug) == null || W.call(console, g); } } -function RM({ +function R2({ messageBtn: e = null, messagePopover: t = null, title: n = null, @@ -30064,198 +30091,198 @@ function RM({ messageTabBadge: d = null, shortcutsTabBtn: u = null, markReadBtn: I = null, - popovers: y = null, - onBeforeToggle: S = null, - signal: Z = null + popovers: A = null, + onBeforeToggle: h = null, + signal: S = null } = {}) { - var V, k, K, z, B, J, P; - wM(); - let C = "messages"; + var Y, N, U, z, T, J, P; + w2(); + let W = "messages"; const g = () => { - var $, E, oe; - const H = (($ = t == null ? void 0 : t.style) == null ? void 0 : $.display) === "block"; + var $, H, ne; + const E = (($ = t == null ? void 0 : t.style) == null ? void 0 : $.display) === "block"; try { - e == null || e.setAttribute("aria-expanded", H ? "true" : "false"); + e == null || e.setAttribute("aria-expanded", E ? "true" : "false"); } catch (M) { - (E = console.debug) == null || E.call(console, M); + (H = console.debug) == null || H.call(console, M); } try { - t == null || t.setAttribute("aria-hidden", H ? "false" : "true"); + t == null || t.setAttribute("aria-hidden", E ? "false" : "true"); } catch (M) { - (oe = console.debug) == null || oe.call(console, M); + (ne = console.debug) == null || ne.call(console, M); } - }, A = () => { + }, y = () => { if (!i) return; - const H = MM(), $ = SM(); - if (i.replaceChildren(), !H.length) { - const E = document.createElement("div"); - E.className = "mjr-messages-empty", E.textContent = m("msg.noMessages", "No messages for now."), i.appendChild(E); + const E = M2(), $ = G2(); + if (i.replaceChildren(), !E.length) { + const H = document.createElement("div"); + H.className = "mjr-messages-empty", H.textContent = m("msg.noMessages", "No messages for now."), i.appendChild(H); return; } - for (const E of H) { - const oe = document.createElement("article"); - oe.className = "mjr-message-item"; - const M = tp(E == null ? void 0 : E.level); - oe.classList.add(`mjr-message-item--${M}`); - const j = Number((E == null ? void 0 : E.createdAt) || 0); - j > Number($ || 0) && oe.classList.add("mjr-message-item--unread"); + for (const H of E) { + const ne = document.createElement("article"); + ne.className = "mjr-message-item"; + const M = tp(H == null ? void 0 : H.level); + ne.classList.add(`mjr-message-item--${M}`); + const v = Number((H == null ? void 0 : H.createdAt) || 0); + v > Number($ || 0) && ne.classList.add("mjr-message-item--unread"); const D = document.createElement("div"); D.className = "mjr-message-item-head"; const q = document.createElement("div"); q.className = "mjr-message-item-title-wrap"; const ee = document.createElement("span"); - ee.className = "mjr-message-item-emoji", ee.textContent = LM(E), ee.setAttribute("aria-hidden", "true"); - const ce = document.createElement("div"); - ce.className = "mjr-message-item-title", ce.textContent = El( - E, + ee.className = "mjr-message-item-emoji", ee.textContent = L2(H), ee.setAttribute("aria-hidden", "true"); + const ae = document.createElement("div"); + ae.className = "mjr-message-item-title", ae.textContent = Hl( + H, "titleKey", "title", m("label.info", "Info") ); const ue = document.createElement("span"); - ue.className = "mjr-message-item-category", ue.textContent = El( - E, + ue.className = "mjr-message-item-category", ue.textContent = Hl( + H, "categoryKey", "category", m("label.info", "Info") - ), q.appendChild(ee), q.appendChild(ce), D.appendChild(q), D.appendChild(ue); - const U = document.createElement("div"); - U.className = "mjr-message-item-meta", U.textContent = Zm(j); + ), q.appendChild(ee), q.appendChild(ae), D.appendChild(q), D.appendChild(ue); + const B = document.createElement("div"); + B.className = "mjr-message-item-meta", B.textContent = Zm(v); const Q = document.createElement("div"); - Q.className = "mjr-message-item-body", Q.textContent = El(E, "bodyKey", "body", ""), oe.appendChild(D), U.textContent && oe.appendChild(U), Q.textContent && oe.appendChild(Q); - const _ = Am(E == null ? void 0 : E.actionUrl), le = El( - E, + Q.className = "mjr-message-item-body", Q.textContent = Hl(H, "bodyKey", "body", ""), ne.appendChild(D), B.textContent && ne.appendChild(B), Q.textContent && ne.appendChild(Q); + const _ = Am(H == null ? void 0 : H.actionUrl), le = Hl( + H, "actionLabelKey", "actionLabel", m("label.readMe", "Read Me") ); if (_ && le) { - const de = document.createElement("a"); - de.className = "mjr-message-item-action", de.href = _, de.target = "_blank", de.rel = "noopener noreferrer", de.textContent = le, oe.appendChild(de); + const ce = document.createElement("a"); + ce.className = "mjr-message-item-action", ce.href = _, ce.target = "_blank", ce.rel = "noopener noreferrer", ce.textContent = le, ne.appendChild(ce); } - i.appendChild(oe); + i.appendChild(ne); } }, p = () => { if (!a) return; - const H = Py(); + const E = Py(); let $ = a.querySelector(".mjr-history-list"); if (!$) { - const E = document.createElement("div"); - E.className = "mjr-history-head"; - const oe = document.createElement("span"); - oe.className = "mjr-history-head-label", oe.textContent = m("label.recentActivity", "Recent activity"); + const H = document.createElement("div"); + H.className = "mjr-history-head"; + const ne = document.createElement("span"); + ne.className = "mjr-history-head-label", ne.textContent = m("label.recentActivity", "Recent activity"); const M = document.createElement("button"); M.type = "button", M.className = "mjr-btn mjr-history-clear-btn", M.textContent = m("btn.clearHistory", "Clear"), M.title = m("tooltip.clearToastHistory", "Clear toast history"), M.addEventListener( "click", - (j) => { - j.stopPropagation(), $y(), p(); + (v) => { + v.stopPropagation(), $y(), p(); }, - Z ? { signal: Z } : void 0 - ), E.appendChild(oe), E.appendChild(M), $ = document.createElement("div"), $.className = "mjr-history-list", a.replaceChildren(E, $); + S ? { signal: S } : void 0 + ), H.appendChild(ne), H.appendChild(M), $ = document.createElement("div"), $.className = "mjr-history-list", a.replaceChildren(H, $); } - if ($.replaceChildren(), !H.length) { - const E = document.createElement("div"); - E.className = "mjr-messages-empty", E.textContent = m("msg.noHistory", "No recent activity."), $.appendChild(E); + if ($.replaceChildren(), !E.length) { + const H = document.createElement("div"); + H.className = "mjr-messages-empty", H.textContent = m("msg.noHistory", "No recent activity."), $.appendChild(H); return; } - for (const E of H) { - const oe = document.createElement("div"); - oe.className = `mjr-history-item mjr-history-item--${String(E.type || "info")}`; + for (const H of E) { + const ne = document.createElement("div"); + ne.className = `mjr-history-item mjr-history-item--${String(H.type || "info")}`; const M = document.createElement("span"); - M.className = "mjr-history-item-icon", M.textContent = VM(E.type), M.setAttribute("aria-hidden", "true"); - const j = document.createElement("div"); - j.className = "mjr-history-item-content"; - const O = String(E.title || "").trim(), D = String(E.detail || "").trim(), q = String(E.message || "").trim(), ee = O || q, ce = O && D ? D : O ? "" : D, ue = document.createElement("div"); - ue.className = O ? "mjr-history-item-title" : "mjr-history-item-msg", ue.textContent = ee; - const U = document.createElement("div"); - U.className = "mjr-history-item-detail", U.textContent = ce; + M.className = "mjr-history-item-icon", M.textContent = Y2(H.type), M.setAttribute("aria-hidden", "true"); + const v = document.createElement("div"); + v.className = "mjr-history-item-content"; + const F = String(H.title || "").trim(), D = String(H.detail || "").trim(), q = String(H.message || "").trim(), ee = F || q, ae = F && D ? D : F ? "" : D, ue = document.createElement("div"); + ue.className = F ? "mjr-history-item-title" : "mjr-history-item-msg", ue.textContent = ee; + const B = document.createElement("div"); + B.className = "mjr-history-item-detail", B.textContent = ae; const Q = document.createElement("div"); Q.className = "mjr-history-item-meta"; const _ = document.createElement("span"); - _.className = "mjr-history-item-time", _.textContent = Zm(E.createdAt); + _.className = "mjr-history-item-time", _.textContent = Zm(H.createdAt); const le = document.createElement("span"); - le.className = "mjr-history-item-chip", le.textContent = YM(E); + le.className = "mjr-history-item-chip", le.textContent = V2(H); + const ce = document.createElement("span"); + ce.className = "mjr-history-item-chip", ce.textContent = String(H.source || "").trim(); const de = document.createElement("span"); - de.className = "mjr-history-item-chip", de.textContent = String(E.source || "").trim(); - const se = document.createElement("span"); - se.className = "mjr-history-item-chip", se.textContent = kM(E.status), j.appendChild(ue), U.textContent && j.appendChild(U), _.textContent && Q.appendChild(_), le.textContent && Q.appendChild(le), se.textContent && Q.appendChild(se), de.textContent && Q.appendChild(de), Q.childNodes.length && j.appendChild(Q); - const ge = XM(E), je = NM(E); - if (ge || je !== null) { - const we = document.createElement("div"); - if (we.className = "mjr-history-item-progress", ge) { - const Je = document.createElement("div"); - Je.className = "mjr-history-item-progress-summary", Je.textContent = ge, we.appendChild(Je); + de.className = "mjr-history-item-chip", de.textContent = X2(H.status), v.appendChild(ue), B.textContent && v.appendChild(B), _.textContent && Q.appendChild(_), le.textContent && Q.appendChild(le), de.textContent && Q.appendChild(de), ce.textContent && Q.appendChild(ce), Q.childNodes.length && v.appendChild(Q); + const ge = N2(H), Le = k2(H); + if (ge || Le !== null) { + const Me = document.createElement("div"); + if (Me.className = "mjr-history-item-progress", ge) { + const Fe = document.createElement("div"); + Fe.className = "mjr-history-item-progress-summary", Fe.textContent = ge, Me.appendChild(Fe); } - if (je !== null) { - const Je = document.createElement("div"); - Je.className = "mjr-history-item-progress-bar"; - const $e = document.createElement("div"); - $e.className = "mjr-history-item-progress-fill", $e.style.width = `${je}%`, Je.appendChild($e), we.appendChild(Je); + if (Le !== null) { + const Fe = document.createElement("div"); + Fe.className = "mjr-history-item-progress-bar"; + const it = document.createElement("div"); + it.className = "mjr-history-item-progress-fill", it.style.width = `${Le}%`, Fe.appendChild(it), Me.appendChild(Fe); } - j.appendChild(we); + v.appendChild(Me); } - const Se = Am(E == null ? void 0 : E.actionUrl), ke = String((E == null ? void 0 : E.actionLabel) || "").trim(); - if (Se && ke) { - const we = document.createElement("a"); - we.className = "mjr-history-item-action", we.href = Se, we.target = "_blank", we.rel = "noopener noreferrer", we.textContent = ke, j.appendChild(we); + const xe = Am(H == null ? void 0 : H.actionUrl), Xe = String((H == null ? void 0 : H.actionLabel) || "").trim(); + if (xe && Xe) { + const Me = document.createElement("a"); + Me.className = "mjr-history-item-action", Me.href = xe, Me.target = "_blank", Me.rel = "noopener noreferrer", Me.textContent = Xe, v.appendChild(Me); } - oe.appendChild(M), oe.appendChild(j), $.appendChild(oe); + ne.appendChild(M), ne.appendChild(v), $.appendChild(ne); } - }, b = (H, $) => { - if (!H) return; - const E = Math.max(0, Number($ || 0) || 0); - if (E <= 0) { - H.style.display = "none", H.textContent = ""; + }, b = (E, $) => { + if (!E) return; + const H = Math.max(0, Number($ || 0) || 0); + if (H <= 0) { + E.style.display = "none", E.textContent = ""; return; } - H.style.display = "inline-flex", H.textContent = E > 99 ? "99+" : String(E); + E.style.display = "inline-flex", E.textContent = H > 99 ? "99+" : String(H); }, L = () => { - const H = Qy(); - r && (r.style.display = H > 0 ? "inline-block" : "none"), b(l, H); - }, h = () => { - c && (c.childNodes.length > 0 || c.replaceChildren(jM())); + const E = Qy(); + r && (r.style.display = E > 0 ? "inline-block" : "none"), b(l, E); + }, C = () => { + c && (c.childNodes.length > 0 || c.replaceChildren(j2())); }, G = () => { if (!I) return; - const H = Math.max(0, Number(hs() || 0) || 0); - if (I.disabled = H <= 0, H > 0) { + const E = Math.max(0, Number(hs() || 0) || 0); + if (I.disabled = E <= 0, E > 0) { I.title = m("tooltip.markMessagesRead", "Mark all messages as read"); return; } I.title = m("tooltip.noUnreadMessages", "No unread messages"); - }, W = () => { - const H = Math.max(0, Number(hs() || 0) || 0); + }, Z = () => { + const E = Math.max(0, Number(hs() || 0) || 0); if (e) { - const $ = e.querySelector(".mjr-message-badge"), E = H > 0 ? m("tooltip.openMessagesUnread", "Messages ({count} unread)", { - count: H + const $ = e.querySelector(".mjr-message-badge"), H = E > 0 ? m("tooltip.openMessagesUnread", "Messages ({count} unread)", { + count: E }) : m("tooltip.openMessages", "Messages and updates"); - e.classList.toggle("mjr-message-has-unread", H > 0), e.title = E, e.setAttribute("aria-label", E), $ && (H <= 0 ? ($.style.display = "none", $.textContent = "") : ($.style.display = "inline-flex", $.textContent = H > 9 ? "9+" : String(H))); + e.classList.toggle("mjr-message-has-unread", E > 0), e.title = H, e.setAttribute("aria-label", H), $ && (E <= 0 ? ($.style.display = "none", $.textContent = "") : ($.style.display = "inline-flex", $.textContent = E > 9 ? "9+" : String(E))); } - b(d, H), G(); + b(d, E), G(); }, f = () => { - var H; - W(), L(), ((H = t == null ? void 0 : t.style) == null ? void 0 : H.display) === "block" && (C === "messages" && A(), C === "history" && p()); - }, X = Z ? { signal: Z } : void 0; + var E; + Z(), L(), ((E = t == null ? void 0 : t.style) == null ? void 0 : E.display) === "block" && (W === "messages" && y(), W === "history" && p()); + }, X = S ? { signal: S } : void 0; try { - window.addEventListener(Hb, f, X); - } catch (H) { - (V = console.debug) == null || V.call(console, H); + window.addEventListener(Eb, f, X); + } catch (E) { + (Y = console.debug) == null || Y.call(console, E); } try { window.addEventListener( - Sg, + Gg, () => { - var H; - L(), ((H = t == null ? void 0 : t.style) == null ? void 0 : H.display) === "block" && C === "history" && p(); + var E; + L(), ((E = t == null ? void 0 : t.style) == null ? void 0 : E.display) === "block" && W === "history" && p(); }, X ); - } catch (H) { - (k = console.debug) == null || k.call(console, H); + } catch (E) { + (N = console.debug) == null || N.call(console, E); } try { e && t && (t.id || (t.id = "mjr-messages-popover"), e.setAttribute("aria-haspopup", "dialog"), e.setAttribute("aria-controls", t.id)); - } catch (H) { - (K = console.debug) == null || K.call(console, H); + } catch (E) { + (U = console.debug) == null || U.call(console, E); } let x = null; try { @@ -30263,19 +30290,19 @@ function RM({ attributes: !0, attributeFilter: ["style"] })); - } catch (H) { - (z = console.debug) == null || z.call(console, H); + } catch (E) { + (z = console.debug) == null || z.call(console, E); } try { - (B = Z == null ? void 0 : Z.addEventListener) == null || B.call(Z, "abort", () => { - var H; - return (H = x == null ? void 0 : x.disconnect) == null ? void 0 : H.call(x); + (T = S == null ? void 0 : S.addEventListener) == null || T.call(S, "abort", () => { + var E; + return (E = x == null ? void 0 : x.disconnect) == null ? void 0 : E.call(x); }, { once: !0 }); - } catch (H) { - (J = console.debug) == null || J.call(console, H); + } catch (E) { + (J = console.debug) == null || J.call(console, E); } - W(), L(), g(), Tr({ - activeTab: C, + Z(), L(), g(), Tr({ + activeTab: W, title: n, messagePopover: t, messageTabBtn: s, @@ -30286,9 +30313,9 @@ function RM({ shortcutsPanel: c, markReadBtn: I }); - const T = () => { - C = "messages", Tr({ - activeTab: C, + const K = () => { + W = "messages", Tr({ + activeTab: W, title: n, messagePopover: t, messageTabBtn: s, @@ -30298,10 +30325,10 @@ function RM({ historyPanel: a, shortcutsPanel: c, markReadBtn: I - }), A(), Gc(), W(); - }, v = () => { - C = "history", Tr({ - activeTab: C, + }), y(), xc(), Z(); + }, j = () => { + W = "history", Tr({ + activeTab: W, title: n, messagePopover: t, messageTabBtn: s, @@ -30313,8 +30340,8 @@ function RM({ markReadBtn: I }), p(), _y(), L(); }, w = () => { - C = "shortcuts", Tr({ - activeTab: C, + W = "shortcuts", Tr({ + activeTab: W, title: n, messagePopover: t, messageTabBtn: s, @@ -30324,75 +30351,75 @@ function RM({ historyPanel: a, shortcutsPanel: c, markReadBtn: I - }), h(); - }, R = (H) => { - if (H === "messages") { - T(); + }), C(); + }, R = (E) => { + if (E === "messages") { + K(); return; } - if (H === "history") { - v(); + if (E === "history") { + j(); return; } w(); - }, Y = () => { - var $, E; - if (!t || !y || !e) return; + }, V = () => { + var $, H; + if (!t || !A || !e) return; if (!((($ = t == null ? void 0 : t.style) == null ? void 0 : $.display) === "block")) { try { - typeof S == "function" && S(); - } catch (oe) { - (E = console.debug) == null || E.call(console, oe); + typeof h == "function" && h(); + } catch (ne) { + (H = console.debug) == null || H.call(console, ne); } - y.toggle(t, e); + A.toggle(t, e); } - v(), g(), W(); + j(), g(), Z(); }; try { window.addEventListener( - ht.OPEN_MESSAGE_HISTORY, + ft.OPEN_MESSAGE_HISTORY, () => { - Y(); + V(); }, X ); - } catch (H) { - (P = console.debug) == null || P.call(console, H); + } catch (E) { + (P = console.debug) == null || P.call(console, E); } - const F = ["messages", "history", "shortcuts"], N = (H, $) => { - var M, j, O, D, q, ee, ce, ue; - const E = String((H == null ? void 0 : H.key) || "").toLowerCase(), oe = F.indexOf(String($ || "").toLowerCase()); - if (!(oe < 0)) { - if (E === "arrowright") { - H.preventDefault(); - const U = F[(oe + 1) % F.length]; - R(U), U === "messages" && ((M = s == null ? void 0 : s.focus) == null || M.call(s)), U === "history" && ((j = o == null ? void 0 : o.focus) == null || j.call(o)), U === "shortcuts" && ((O = u == null ? void 0 : u.focus) == null || O.call(u)); + const O = ["messages", "history", "shortcuts"], k = (E, $) => { + var M, v, F, D, q, ee, ae, ue; + const H = String((E == null ? void 0 : E.key) || "").toLowerCase(), ne = O.indexOf(String($ || "").toLowerCase()); + if (!(ne < 0)) { + if (H === "arrowright") { + E.preventDefault(); + const B = O[(ne + 1) % O.length]; + R(B), B === "messages" && ((M = s == null ? void 0 : s.focus) == null || M.call(s)), B === "history" && ((v = o == null ? void 0 : o.focus) == null || v.call(o)), B === "shortcuts" && ((F = u == null ? void 0 : u.focus) == null || F.call(u)); return; } - if (E === "arrowleft") { - H.preventDefault(); - const U = F[(oe + F.length - 1) % F.length]; - R(U), U === "messages" && ((D = s == null ? void 0 : s.focus) == null || D.call(s)), U === "history" && ((q = o == null ? void 0 : o.focus) == null || q.call(o)), U === "shortcuts" && ((ee = u == null ? void 0 : u.focus) == null || ee.call(u)); + if (H === "arrowleft") { + E.preventDefault(); + const B = O[(ne + O.length - 1) % O.length]; + R(B), B === "messages" && ((D = s == null ? void 0 : s.focus) == null || D.call(s)), B === "history" && ((q = o == null ? void 0 : o.focus) == null || q.call(o)), B === "shortcuts" && ((ee = u == null ? void 0 : u.focus) == null || ee.call(u)); return; } - if (E === "home") { - H.preventDefault(), T(), (ce = s == null ? void 0 : s.focus) == null || ce.call(s); + if (H === "home") { + E.preventDefault(), K(), (ae = s == null ? void 0 : s.focus) == null || ae.call(s); return; } - if (E === "end") { - H.preventDefault(), w(), (ue = u == null ? void 0 : u.focus) == null || ue.call(u); + if (H === "end") { + E.preventDefault(), w(), (ue = u == null ? void 0 : u.focus) == null || ue.call(u); return; } - (E === " " || E === "enter") && (H.preventDefault(), R($)); + (H === " " || H === "enter") && (E.preventDefault(), R($)); } }; return e == null || e.addEventListener( "click", - (H) => { - var $, E; - if (!(!t || !y || !e)) { - H.stopPropagation(), C = "messages", A(), h(), Tr({ - activeTab: C, + (E) => { + var $, H; + if (!(!t || !A || !e)) { + E.stopPropagation(), W = "messages", y(), C(), Tr({ + activeTab: W, title: n, messagePopover: t, messageTabBtn: s, @@ -30404,64 +30431,64 @@ function RM({ markReadBtn: I }); try { - typeof S == "function" && S(); - } catch (oe) { - ($ = console.debug) == null || $.call(console, oe); + typeof h == "function" && h(); + } catch (ne) { + ($ = console.debug) == null || $.call(console, ne); } - y.toggle(t, e), ((E = t == null ? void 0 : t.style) == null ? void 0 : E.display) === "block" && Gc(), g(), W(); + A.toggle(t, e), ((H = t == null ? void 0 : t.style) == null ? void 0 : H.display) === "block" && xc(), g(), Z(); } }, X ), s == null || s.addEventListener( "click", - (H) => { - H.preventDefault(), H.stopPropagation(), T(); + (E) => { + E.preventDefault(), E.stopPropagation(), K(); }, X ), s == null || s.addEventListener( "keydown", - (H) => N(H, "messages"), + (E) => k(E, "messages"), X ), o == null || o.addEventListener( "click", - (H) => { - H.preventDefault(), H.stopPropagation(), v(); + (E) => { + E.preventDefault(), E.stopPropagation(), j(); }, X ), o == null || o.addEventListener( "keydown", - (H) => N(H, "history"), + (E) => k(E, "history"), X ), u == null || u.addEventListener( "click", - (H) => { - H.preventDefault(), H.stopPropagation(), w(); + (E) => { + E.preventDefault(), E.stopPropagation(), w(); }, X ), u == null || u.addEventListener( "keydown", - (H) => N(H, "shortcuts"), + (E) => k(E, "shortcuts"), X ), I == null || I.addEventListener( "click", - (H) => { - H.preventDefault(), H.stopPropagation(), Gc(), A(), W(); + (E) => { + E.preventDefault(), E.stopPropagation(), xc(), y(), Z(); }, X ), { refresh: f, - render: A, - updateButtonState: W, - showMessagesTab: T, - showHistoryTab: v, + render: y, + updateButtonState: Z, + showMessagesTab: K, + showHistoryTab: j, showShortcutsTab: w, - openHistoryPopover: Y, + openHistoryPopover: V, close: () => { - !t || !y || (y.close(t), g()); + !t || !A || (A.close(t), g()); } }; } -function FM(e) { +function O2(e) { let t = e; for (let n = 0; n < 3 && !(!t || typeof t != "object" || !("value" in t)); n += 1) { const i = t.value; @@ -30470,9 +30497,9 @@ function FM(e) { } return t; } -function OM(e) { +function F2(e) { var i; - const t = FM(e); + const t = O2(e); if (!t) return null; const n = String((t == null ? void 0 : t.tagName) || "").toUpperCase(); if (n === "INPUT" || n === "TEXTAREA") return t; @@ -30486,11 +30513,11 @@ function OM(e) { } return null; } -function Cs(e) { - const t = OM(e), n = t ? t.value : typeof (e == null ? void 0 : e.value) == "string" ? e.value : ""; +function Zs(e) { + const t = F2(e), n = t ? t.value : typeof (e == null ? void 0 : e.value) == "string" ? e.value : ""; return String(n || "").trim() || "*"; } -function zM({ +function z2({ gridContainer: e, loadAssets: t, loadAssetsFromList: n, @@ -30529,19 +30556,19 @@ function zM({ "lastGridCount", "lastGridTotal" ]); - let d = !1, u = !1, I = {}, y = 0, S = 0; - const Z = 3e4, C = 15e4, g = 15e3, A = 30, p = async (R, Y = Z) => { - let F = null; + let d = !1, u = !1, I = {}, A = 0, h = 0; + const S = 3e4, W = 15e4, g = 15e3, y = 30, p = async (R, V = S) => { + let O = null; try { - const N = new Promise((V, k) => { - F = setTimeout(() => { - const K = new Error(`Grid reload watchdog timeout (${Y}ms)`); - K.name = "GridReloadTimeout", k(K); - }, Y); + const k = new Promise((Y, N) => { + O = setTimeout(() => { + const U = new Error(`Grid reload watchdog timeout (${V}ms)`); + U.name = "GridReloadTimeout", N(U); + }, V); }); - return await Promise.race([R(), N]); + return await Promise.race([R(), k]); } finally { - F && clearTimeout(F); + O && clearTimeout(O); } }, b = () => { var R; @@ -30553,27 +30580,27 @@ function zM({ }, L = () => { var R; try { - const Y = Xn(); - return !!(((R = Y == null ? void 0 : Y.ai) == null ? void 0 : R.vectorSearchEnabled) ?? !0); + const V = kn(); + return !!(((R = V == null ? void 0 : V.ai) == null ? void 0 : R.vectorSearchEnabled) ?? !0); } catch { return !0; } - }, h = (R, Y = "") => { + }, C = (R, V = "") => { try { if (R && typeof R == "object") - return String(R.error || R.message || Y || "").trim(); + return String(R.error || R.message || V || "").trim(); } catch { } try { - return String(R || Y || "").trim(); + return String(R || V || "").trim(); } catch { - return String(Y || "").trim(); + return String(V || "").trim(); } - }, G = (R = []) => !Array.isArray(R) || R.length === 0 ? !1 : R.some((Y) => { - if (String((Y == null ? void 0 : Y._matchType) || (Y == null ? void 0 : Y.matchType) || "").trim().toLowerCase().includes("semantic")) return !0; - const N = Number((Y == null ? void 0 : Y._vectorScore) ?? (Y == null ? void 0 : Y.vectorScore) ?? NaN); - return Number.isFinite(N) && N > 0; - }), W = () => { + }, G = (R = []) => !Array.isArray(R) || R.length === 0 ? !1 : R.some((V) => { + if (String((V == null ? void 0 : V._matchType) || (V == null ? void 0 : V.matchType) || "").trim().toLowerCase().includes("semantic")) return !0; + const k = Number((V == null ? void 0 : V._vectorScore) ?? (V == null ? void 0 : V.vectorScore) ?? NaN); + return Number.isFinite(k) && k > 0; + }), Z = () => { const R = String(c("currentFolderRelativePath", "") || "").trim(); return { subfolder: !(c("scope", "output") === "custom" && !c("customRootId", "")) && R ? R : null, @@ -30591,16 +30618,16 @@ function zM({ dateExact: String(c("dateExactFilter", "") || "").trim() || null }; }, f = async (R = "") => { - var N, V, k; - const Y = Date.now(); - if (Y - Number(S || 0) < g) return; - S = Y; + var k, Y, N; + const V = Date.now(); + if (V - Number(h || 0) < g) return; + h = V; try { - const K = await xa(); - if (K != null && K.ok && (K != null && K.data)) { - const z = Number(((N = K.data) == null ? void 0 : N.total) || 0) || 0, B = Number(((V = K.data) == null ? void 0 : V.eligible_total) || 0) || 0, J = Number(((k = K.data) == null ? void 0 : k.coverage_ratio) ?? NaN); + const U = await xa(); + if (U != null && U.ok && (U != null && U.data)) { + const z = Number(((k = U.data) == null ? void 0 : k.total) || 0) || 0, T = Number(((Y = U.data) == null ? void 0 : Y.eligible_total) || 0) || 0, J = Number(((N = U.data) == null ? void 0 : N.coverage_ratio) ?? NaN); if (z <= 10) { - Ze( + Ae( m( "toast.aiSearchNeedsBackfill", "AI search index is almost empty ({count} vectors). Run Enrich, then Vector Backfill for existing assets.", @@ -30611,14 +30638,14 @@ function zM({ ); return; } - if (B > 0 && Number.isFinite(J) && J > 0 && J < 0.75) { - Ze( + if (T > 0 && Number.isFinite(J) && J > 0 && J < 0.75) { + Ae( m( "toast.aiSearchPartiallyIndexed", "AI search index is only partially built ({indexed}/{eligible}, {percent}%). Run Vector Backfill for existing assets.", { indexed: z, - eligible: B, + eligible: T, percent: Math.round(J * 100) } ), @@ -30630,96 +30657,96 @@ function zM({ } } catch { } - const F = h( + const O = C( R, m( "toast.aiSearchUnavailable", "AI search is currently unavailable. Falling back to normal search." ) ); - Ze(F, "warn", 5200); - }, X = async (R, Y = {}) => { - var P, H; - let F = String(R || "").trim(); - const N = /^ai:\s*/i.test(F); - N && (F = F.replace(/^ai:\s*/i, "").trim()); - const V = L(), k = V && b(); - if (!V) - return await t(e, F || "*", Y); - const K = k || N; - let z = !1, B = ""; - if (K && F && F !== "*") { + Ae(O, "warn", 5200); + }, X = async (R, V = {}) => { + var P, E; + let O = String(R || "").trim(); + const k = /^ai:\s*/i.test(O); + k && (O = O.replace(/^ai:\s*/i, "").trim()); + const Y = L(), N = Y && b(); + if (!Y) + return await t(e, O || "*", V); + const U = N || k; + let z = !1, T = ""; + if (U && O && O !== "*") { z = !0; - const $ = W(); + const $ = Z(); try { - const E = await _f(F, { + const H = await _f(O, { topK: 100, scope: c("scope", "output") || "output", customRootId: c("customRootId", "") || "", ...$ }); - if (E != null && E.ok && Array.isArray(E.data) && E.data.length > 0 && G(E.data)) - return await n(e, E.data, { - title: `AI Search: "${F}" (${E.data.length} results)`, + if (H != null && H.ok && Array.isArray(H.data) && H.data.length > 0 && G(H.data)) + return await n(e, H.data, { + title: `AI Search: "${O}" (${H.data.length} results)`, reset: !0, - ...Y + ...V }); - (E == null ? void 0 : E.ok) === !1 && (B = h((E == null ? void 0 : E.error) || (E == null ? void 0 : E.message), B)); - } catch (E) { - B = h(E, B), (P = console.debug) == null || P.call(console, "[Majoor] Hybrid search failed, trying pure semantic", E); + (H == null ? void 0 : H.ok) === !1 && (T = C((H == null ? void 0 : H.error) || (H == null ? void 0 : H.message), T)); + } catch (H) { + T = C(H, T), (P = console.debug) == null || P.call(console, "[Majoor] Hybrid search failed, trying pure semantic", H); } try { - const E = await zg(F, { + const H = await zg(O, { topK: 100, scope: c("scope", "output") || "output", customRootId: c("customRootId", "") || "", ...$ }); - if (E != null && E.ok && Array.isArray(E.data) && E.data.length > 0) - return await n(e, E.data, { - title: `AI Search: "${F}" (${E.data.length} results)`, + if (H != null && H.ok && Array.isArray(H.data) && H.data.length > 0) + return await n(e, H.data, { + title: `AI Search: "${O}" (${H.data.length} results)`, reset: !0, - ...Y + ...V }); - (E == null ? void 0 : E.ok) === !1 && (B = h((E == null ? void 0 : E.error) || (E == null ? void 0 : E.message), B)); - } catch (E) { - B = h(E, B), (H = console.debug) == null || H.call(console, "[Majoor] Semantic search failed, falling back to FTS", E); + (H == null ? void 0 : H.ok) === !1 && (T = C((H == null ? void 0 : H.error) || (H == null ? void 0 : H.message), T)); + } catch (H) { + T = C(H, T), (E = console.debug) == null || E.call(console, "[Majoor] Semantic search failed, falling back to FTS", H); } } - const J = await t(e, F || "*", Y); - return z && B && (Number((J == null ? void 0 : J.count) || 0) || 0) === 0 && f(B), J; + const J = await t(e, O || "*", V); + return z && T && (Number((J == null ? void 0 : J.count) || 0) || 0) === 0 && f(T), J; }, x = async (R = {}) => { - var z, B, J, P, H, $, E, oe, M, j, O, D, q, ee, ce, ue; - const Y = String(e.dataset.mjrViewScope || "").trim().toLowerCase(), F = String(c("viewScope", (a == null ? void 0 : a.viewScope) || "") || "").trim().toLowerCase(); - e.dataset.mjrScope = c("scope", "output"), e.dataset.mjrViewScope = F, e.dataset.mjrCustomRootId = c("customRootId", "") || ""; - const N = c("currentFolderRelativePath", "") || ""; - e.dataset.mjrSubfolder = N, e.dataset.mjrFilterKind = c("kindFilter", "") || "", e.dataset.mjrFilterWorkflowOnly = c("workflowOnly", !1) ? "1" : "0", e.dataset.mjrFilterMinRating = String(c("minRating", 0) || 0), e.dataset.mjrFilterMinSizeMB = String(c("minSizeMB", 0) || 0), e.dataset.mjrFilterMaxSizeMB = String(c("maxSizeMB", 0) || 0), e.dataset.mjrFilterResolutionCompare = String(c("resolutionCompare", "gte") || "gte"), e.dataset.mjrFilterMinWidth = String(c("minWidth", 0) || 0), e.dataset.mjrFilterMinHeight = String(c("minHeight", 0) || 0), e.dataset.mjrFilterMaxWidth = String(c("maxWidth", 0) || 0), e.dataset.mjrFilterMaxHeight = String(c("maxHeight", 0) || 0), e.dataset.mjrFilterWorkflowType = String(c("workflowType", "") || ""), e.dataset.mjrFilterDateRange = c("dateRangeFilter", "") || "", e.dataset.mjrFilterDateExact = c("dateExactFilter", "") || "", e.dataset.mjrSort = c("sort", "mtime_desc") || "mtime_desc", e.dataset.mjrCollectionId = c("collectionId", "") || "", e.dataset.mjrSemanticMode = b() ? "1" : "0"; + var z, T, J, P, E, $, H, ne, M, v, F, D, q, ee, ae, ue; + const V = String(e.dataset.mjrViewScope || "").trim().toLowerCase(), O = String(c("viewScope", (a == null ? void 0 : a.viewScope) || "") || "").trim().toLowerCase(); + e.dataset.mjrScope = c("scope", "output"), e.dataset.mjrViewScope = O, e.dataset.mjrCustomRootId = c("customRootId", "") || ""; + const k = c("currentFolderRelativePath", "") || ""; + e.dataset.mjrSubfolder = k, e.dataset.mjrFilterKind = c("kindFilter", "") || "", e.dataset.mjrFilterWorkflowOnly = c("workflowOnly", !1) ? "1" : "0", e.dataset.mjrFilterMinRating = String(c("minRating", 0) || 0), e.dataset.mjrFilterMinSizeMB = String(c("minSizeMB", 0) || 0), e.dataset.mjrFilterMaxSizeMB = String(c("maxSizeMB", 0) || 0), e.dataset.mjrFilterResolutionCompare = String(c("resolutionCompare", "gte") || "gte"), e.dataset.mjrFilterMinWidth = String(c("minWidth", 0) || 0), e.dataset.mjrFilterMinHeight = String(c("minHeight", 0) || 0), e.dataset.mjrFilterMaxWidth = String(c("maxWidth", 0) || 0), e.dataset.mjrFilterMaxHeight = String(c("maxHeight", 0) || 0), e.dataset.mjrFilterWorkflowType = String(c("workflowType", "") || ""), e.dataset.mjrFilterDateRange = c("dateRangeFilter", "") || "", e.dataset.mjrFilterDateExact = c("dateExactFilter", "") || "", e.dataset.mjrSort = c("sort", "mtime_desc") || "mtime_desc", e.dataset.mjrCollectionId = c("collectionId", "") || "", e.dataset.mjrSemanticMode = b() ? "1" : "0"; try { e.dataset.mjrQuery = String((r == null ? void 0 : r()) ?? "*") || "*"; - } catch (U) { - (z = console.debug) == null || z.call(console, U); + } catch (B) { + (z = console.debug) == null || z.call(console, B); } - e.dataset.mjrGroupStacks = fe.EXECUTION_GROUPING_ENABLED && (c("scope", "output") === "output" || c("scope", "output") === "all") ? "1" : "0"; + e.dataset.mjrGroupStacks = he.EXECUTION_GROUPING_ENABLED && (c("scope", "output") === "output" || c("scope", "output") === "all") ? "1" : "0"; try { - const U = Array.isArray(c("selectedAssetIds", [])) ? c("selectedAssetIds", []).filter(Boolean).map(String) : []; - U.length ? (e.dataset.mjrSelectedAssetIds = JSON.stringify(U), e.dataset.mjrSelectedAssetId = String( - c("activeAssetId", "") || U[0] || "" + const B = Array.isArray(c("selectedAssetIds", [])) ? c("selectedAssetIds", []).filter(Boolean).map(String) : []; + B.length ? (e.dataset.mjrSelectedAssetIds = JSON.stringify(B), e.dataset.mjrSelectedAssetId = String( + c("activeAssetId", "") || B[0] || "" )) : (delete e.dataset.mjrSelectedAssetIds, delete e.dataset.mjrSelectedAssetId); - } catch (U) { - (B = console.debug) == null || B.call(console, U); + } catch (B) { + (T = console.debug) == null || T.call(console, B); } if (c("scope", "output") === "custom" && !c("customRootId", "") && !c("currentFolderRelativePath", "")) { try { o(e); - } catch (U) { - (J = console.debug) == null || J.call(console, U); + } catch (B) { + (J = console.debug) == null || J.call(console, B); } s("currentFolderRelativePath", ""); } if (c("collectionId", "")) { - const U = await (i == null ? void 0 : i(c("collectionId", ""))); - if (U != null && U.ok && U.data && Array.isArray(U.data.assets)) { - const Q = c("collectionName", "") ? `Collection: ${c("collectionName", "")}` : "Collection", _ = await n(e, U.data.assets, { + const B = await (i == null ? void 0 : i(c("collectionId", ""))); + if (B != null && B.ok && B.data && Array.isArray(B.data.assets)) { + const Q = c("collectionName", "") ? `Collection: ${c("collectionName", "")}` : "Collection", _ = await n(e, B.data.assets, { title: Q, reset: !0 }); @@ -30729,76 +30756,76 @@ function zM({ new CustomEvent("mjr:grid-stats", { detail: _ || {} }) ); } catch (le) { - (H = console.debug) == null || H.call(console, le); + (E = console.debug) == null || E.call(console, le); } return; } s("collectionId", ""), s("collectionName", ""); } - const V = F; - if (V === "similar") { - const U = Array.isArray(c("similarResults", [])) ? c("similarResults", []) : [], Q = Array.isArray(a == null ? void 0 : a.similarResults) ? a.similarResults : [], _ = U.length > 0 ? U : Q, le = String( + const Y = O; + if (Y === "similar") { + const B = Array.isArray(c("similarResults", [])) ? c("similarResults", []) : [], Q = Array.isArray(a == null ? void 0 : a.similarResults) ? a.similarResults : [], _ = B.length > 0 ? B : Q, le = String( c("similarSourceAssetId", (a == null ? void 0 : a.similarSourceAssetId) || "") || "" - ).trim(), de = String( + ).trim(), ce = String( c("similarTitle", (a == null ? void 0 : a.similarTitle) || "") || m("search.similarResults", "Similar to asset #{id} ({n} results)", { id: le || "?", n: _.length }) - ).trim(), se = await n(e, _, { - title: de || "Similar", + ).trim(), de = await n(e, _, { + title: ce || "Similar", reset: !0, ...R }); try { - s("lastGridCount", Number((se == null ? void 0 : se.count) || 0) || 0), s("lastGridTotal", Number((se == null ? void 0 : se.total) || 0) || 0), ($ = e.dispatchEvent) == null || $.call( + s("lastGridCount", Number((de == null ? void 0 : de.count) || 0) || 0), s("lastGridTotal", Number((de == null ? void 0 : de.total) || 0) || 0), ($ = e.dispatchEvent) == null || $.call( e, - new CustomEvent("mjr:grid-stats", { detail: se || {} }) + new CustomEvent("mjr:grid-stats", { detail: de || {} }) ); } catch (ge) { - (E = console.debug) == null || E.call(console, ge); + (H = console.debug) == null || H.call(console, ge); } return; } - const k = Y === "similar" && V !== "similar", K = await X(r(), { + const N = V === "similar" && Y !== "similar", U = await X(r(), { ...R, - preserveVisibleUntilReady: R.preserveVisibleUntilReady ?? !k + preserveVisibleUntilReady: R.preserveVisibleUntilReady ?? !N }); try { - const Q = !!((M = (oe = window.MajoorMetrics) == null ? void 0 : oe.hasTimer) != null && M.call(oe, "searchQuery")) ? (O = (j = window.MajoorMetrics) == null ? void 0 : j.endTimer) == null ? void 0 : O.call(j, "searchQuery", "searchQuery") : 0; + const Q = !!((M = (ne = window.MajoorMetrics) == null ? void 0 : ne.hasTimer) != null && M.call(ne, "searchQuery")) ? (F = (v = window.MajoorMetrics) == null ? void 0 : v.endTimer) == null ? void 0 : F.call(v, "searchQuery", "searchQuery") : 0; typeof Q == "number" && Q > 0 && ((q = (D = window.MajoorMetrics) == null ? void 0 : D.trackSearchQuery) == null || q.call(D, Q)); - } catch (U) { - (ee = console.debug) == null || ee.call(console, U); + } catch (B) { + (ee = console.debug) == null || ee.call(console, B); } try { - s("lastGridCount", Number((K == null ? void 0 : K.count) || 0) || 0), s("lastGridTotal", Number((K == null ? void 0 : K.total) || 0) || 0), (ce = e.dispatchEvent) == null || ce.call( + s("lastGridCount", Number((U == null ? void 0 : U.count) || 0) || 0), s("lastGridTotal", Number((U == null ? void 0 : U.total) || 0) || 0), (ae = e.dispatchEvent) == null || ae.call( e, - new CustomEvent("mjr:grid-stats", { detail: K || {} }) + new CustomEvent("mjr:grid-stats", { detail: U || {} }) ); - } catch (U) { - (ue = console.debug) == null || ue.call(console, U); + } catch (B) { + (ue = console.debug) == null || ue.call(console, B); } }; - let T = null; - const v = async () => { + let K = null; + const j = async () => { var R; if (u = !0, !d) { d = !0; try { for (; u; ) { - const Y = { ...I || {} }; + const V = { ...I || {} }; I = {}, u = !1; try { - const F = L() && (b() || String((r == null ? void 0 : r()) || "").length >= 12); + const O = L() && (b() || String((r == null ? void 0 : r()) || "").length >= 12); await p( - () => x(Y), - F ? C : Z + () => x(V), + O ? W : S ); - } catch (F) { + } catch (O) { try { - const N = Date.now(); - N - Number(y || 0) > 2e3 && (y = N, console.warn("[Majoor] Grid reload failed", F)); - } catch (N) { - (R = console.debug) == null || R.call(console, N); + const k = Date.now(); + k - Number(A || 0) > 2e3 && (A = k, console.warn("[Majoor] Grid reload failed", O)); + } catch (k) { + (R = console.debug) == null || R.call(console, k); } } } @@ -30807,13 +30834,13 @@ function zM({ } } }; - return { reloadGrid: (R = {}) => new Promise((Y, F) => { - I = { ...I || {}, ...R || {} }, T && clearTimeout(T), T = setTimeout(() => { - T = null, v().then(Y).catch(F); - }, A); + return { reloadGrid: (R = {}) => new Promise((V, O) => { + I = { ...I || {}, ...R || {} }, K && clearTimeout(K), K = setTimeout(() => { + K = null, j().then(V).catch(O); + }, y); }) }; } -function JM({ +function J2({ state: e, gridContainer: t, folderBreadcrumb: n, @@ -30826,59 +30853,59 @@ function JM({ "scope", "customRootId", "currentFolderRelativePath" - ]), s = [], d = (W) => String(W || "").trim().replaceAll("\\", "/"), u = (W) => /^[a-zA-Z]:$/.test(String(W || "").trim()), I = () => d(a("currentFolderRelativePath", "") || ""), y = (W, f) => { + ]), s = [], d = (Z) => String(Z || "").trim().replaceAll("\\", "/"), u = (Z) => /^[a-zA-Z]:$/.test(String(Z || "").trim()), I = () => d(a("currentFolderRelativePath", "") || ""), A = (Z, f) => { const X = d(f); - !Array.isArray(W) || !X && X !== "" || (W.length ? d(W[W.length - 1]) : null) === X || W.push(X); - }, S = (W, f) => { + !Array.isArray(Z) || !X && X !== "" || (Z.length ? d(Z[Z.length - 1]) : null) === X || Z.push(X); + }, h = (Z, f) => { const X = d(f); - if (!Array.isArray(W)) return null; - for (; W.length; ) { - const x = d(W.pop()); + if (!Array.isArray(Z)) return null; + for (; Z.length; ) { + const x = d(Z.pop()); if (x !== X) return x; } return null; - }, Z = (W) => { + }, S = (Z) => { var X; - const f = d(W); + const f = d(Z); c("currentFolderRelativePath", f); try { t != null && t.dataset && (t.dataset.mjrSubfolder = f); } catch (x) { (X = console.debug) == null || X.call(console, x); } - }, C = (W) => { - const f = d((W == null ? void 0 : W.subfolder) || ""); + }, W = (Z) => { + const f = d((Z == null ? void 0 : Z.subfolder) || ""); if (f) return f; - const X = d((W == null ? void 0 : W.filepath) || (W == null ? void 0 : W.path) || ""); + const X = d((Z == null ? void 0 : Z.filepath) || (Z == null ? void 0 : Z.path) || ""); if (X) - return String((W == null ? void 0 : W.kind) || "").toLowerCase() === "folder" ? X : g(X) || X; - const x = d((W == null ? void 0 : W.filename) || ""); + return String((Z == null ? void 0 : Z.kind) || "").toLowerCase() === "folder" ? X : g(X) || X; + const x = d((Z == null ? void 0 : Z.filename) || ""); if (!x) return I(); - const T = I(); - return T ? `${T}/${x}`.replace(/\/{2,}/g, "/") : x; - }, g = (W) => { - const f = d(W); + const K = I(); + return K ? `${K}/${x}`.replace(/\/{2,}/g, "/") : x; + }, g = (Z) => { + const f = d(Z); if (!f) return ""; const X = f.split("/").filter(Boolean); return X.length ? X.length === 1 ? u(X[0]) ? `${X[0]}/` : "" : (X.pop(), X.length === 1 && u(X[0]) ? `${X[0]}/` : X.join("/")) : ""; - }, A = () => { - var W, f; + }, y = () => { + var Z, f; try { r == null || r(); } catch (X) { - (W = console.debug) == null || W.call(console, X); + (Z = console.debug) == null || Z.call(console, X); } try { - h(); + C(); } catch (X) { (f = console.debug) == null || f.call(console, X); } }, p = () => { - var W, f; + var Z, f; try { t && typeof t.scrollTop == "number" && (t.scrollTop = 0); } catch (X) { - (W = console.debug) == null || W.call(console, X); + (Z = console.debug) == null || Z.call(console, X); } try { const X = (t == null ? void 0 : t.parentElement) || null; @@ -30886,18 +30913,18 @@ function JM({ } catch (X) { (f = console.debug) == null || f.call(console, X); } - }, b = async (W, { pushHistory: f = !0 } = {}) => { - const X = I(), x = d(W); - X !== x && (f && y(s, X), Z(x), p(), A(), await (o == null ? void 0 : o())); + }, b = async (Z, { pushHistory: f = !0 } = {}) => { + const X = I(), x = d(Z); + X !== x && (f && A(s, X), S(x), p(), y(), await (o == null ? void 0 : o())); }, L = async () => { - c("customRootId", ""), Z(""), p(), A(), await (o == null ? void 0 : o()); - }, h = () => { - const W = String(a("scope", "") || "") === "custom", f = String(a("currentFolderRelativePath", "") || "").trim().replaceAll("\\", "/"), X = W || !!f, x = String(a("customRootId", "") || "").trim(), T = (() => { + c("customRootId", ""), S(""), p(), y(), await (o == null ? void 0 : o()); + }, C = () => { + const Z = String(a("scope", "") || "") === "custom", f = String(a("currentFolderRelativePath", "") || "").trim().replaceAll("\\", "/"), X = Z || !!f, x = String(a("customRootId", "") || "").trim(), K = (() => { var z; if (!x) return ""; try { - const B = ((z = i == null ? void 0 : i.selectedOptions) == null ? void 0 : z[0]) || null; - return String((B == null ? void 0 : B.textContent) || "").trim(); + const T = ((z = i == null ? void 0 : i.selectedOptions) == null ? void 0 : z[0]) || null; + return String((T == null ? void 0 : T.textContent) || "").trim(); } catch { return ""; } @@ -30907,21 +30934,21 @@ function JM({ return; } n.style.display = "flex", n.replaceChildren(); - const v = document.createElement("button"); - v.type = "button", v.textContent = m("btn.back", "Back"), v.className = "mjr-btn-link"; - const w = !!String(a("customRootId", "") || "").trim(), R = w && !f, Y = !!f; - v.disabled = s.length === 0 && !R && !Y, v.style.cssText = "background:rgba(122,162,255,0.12);border:1px solid rgba(122,162,255,0.35);border-radius:6px;padding:2px 8px;font:inherit;color:var(--mjr-accent, #7aa2ff);cursor:pointer;", v.addEventListener( + const j = document.createElement("button"); + j.type = "button", j.textContent = m("btn.back", "Back"), j.className = "mjr-btn-link"; + const w = !!String(a("customRootId", "") || "").trim(), R = w && !f, V = !!f; + j.disabled = s.length === 0 && !R && !V, j.style.cssText = "background:rgba(122,162,255,0.12);border:1px solid rgba(122,162,255,0.35);border-radius:6px;padding:2px 8px;font:inherit;color:var(--mjr-accent, #7aa2ff);cursor:pointer;", j.addEventListener( "click", async () => { - const z = S(s, I()); + const z = h(s, I()); if (z != null) { await b(z, { pushHistory: !1 }); return; } - const B = I(); - if (B) { - const J = g(B); - if (J === B) { + const T = I(); + if (T) { + const J = g(T); + if (J === T) { w && await L(); return; } @@ -30931,9 +30958,9 @@ function JM({ R && await L(); }, { signal: l || void 0 } - ), n.appendChild(v); - const F = document.createElement("button"); - F.type = "button", F.textContent = m("btn.up", "Up"), F.className = "mjr-btn-link", F.disabled = !f || g(I()) === I(), F.style.cssText = "background:rgba(122,162,255,0.10);border:1px solid rgba(122,162,255,0.30);border-radius:6px;padding:2px 8px;font:inherit;color:var(--mjr-accent, #7aa2ff);cursor:pointer;", F.addEventListener( + ), n.appendChild(j); + const O = document.createElement("button"); + O.type = "button", O.textContent = m("btn.up", "Up"), O.className = "mjr-btn-link", O.disabled = !f || g(I()) === I(), O.style.cssText = "background:rgba(122,162,255,0.10);border:1px solid rgba(122,162,255,0.30);border-radius:6px;padding:2px 8px;font:inherit;color:var(--mjr-accent, #7aa2ff);cursor:pointer;", O.addEventListener( "click", async () => { const z = g(I()); @@ -30944,10 +30971,10 @@ function JM({ await b(z); }, { signal: l || void 0 } - ), n.appendChild(F); - const N = document.createElement("span"); - N.textContent = "|", N.style.opacity = "0.5", n.appendChild(N); - const V = (z, B, J = !1) => { + ), n.appendChild(O); + const k = document.createElement("span"); + k.textContent = "|", k.style.opacity = "0.5", n.appendChild(k); + const Y = (z, T, J = !1) => { const P = document.createElement("button"); return P.type = "button", P.textContent = z, P.className = "mjr-btn-link", P.style.cssText = `background:none;border:none;padding:0;color:${J ? "var(--mjr-text, inherit)" : "var(--mjr-accent, #7aa2ff)"};cursor:${J ? "default" : "pointer"};font:inherit;`, J ? P.disabled = !0 : P.addEventListener( "click", @@ -30956,50 +30983,50 @@ function JM({ await L(); return; } - await b(B); + await b(T); }, { signal: l || void 0 } ), P; }; - if (n.appendChild(V(m("label.computer", "Computer"), "", !f)), x) { + if (n.appendChild(Y(m("label.computer", "Computer"), "", !f)), x) { const z = document.createElement("span"); - z.textContent = "/", z.style.opacity = "0.6", n.appendChild(z), n.appendChild(V(T || x, "", !f)); + z.textContent = "/", z.style.opacity = "0.6", n.appendChild(z), n.appendChild(Y(K || x, "", !f)); } if (!f) return; - const k = f.split("/").filter(Boolean); - let K = ""; - for (let z = 0; z < k.length; z++) { - const B = document.createElement("span"); - B.textContent = "/", B.style.opacity = "0.6", n.appendChild(B), K ? K = `${K}/${k[z]}`.replace(/\/{2,}/g, "/") : K = u(k[z]) ? `${k[z]}/` : k[z], n.appendChild(V(k[z], K, z === k.length - 1)); + const N = f.split("/").filter(Boolean); + let U = ""; + for (let z = 0; z < N.length; z++) { + const T = document.createElement("span"); + T.textContent = "/", T.style.opacity = "0.6", n.appendChild(T), U ? U = `${U}/${N[z]}`.replace(/\/{2,}/g, "/") : U = u(N[z]) ? `${N[z]}/` : N[z], n.appendChild(Y(N[z], U, z === N.length - 1)); } }; return { - renderBreadcrumb: h, + renderBreadcrumb: C, resetHistory: () => { s.length = 0; }, bindGridFolderNavigation: () => { - var X, x, T; - const W = async (v) => { - var F, N; - const w = ((F = v == null ? void 0 : v.detail) == null ? void 0 : F.asset) || null, R = C(w || {}), Y = I(); - if (R !== Y) { - y(s, Y), Z(R), p(), A(); + var X, x, K; + const Z = async (j) => { + var O, k; + const w = ((O = j == null ? void 0 : j.detail) == null ? void 0 : O.asset) || null, R = W(w || {}), V = I(); + if (R !== V) { + A(s, V), S(R), p(), y(); try { await (o == null ? void 0 : o()); - } catch (V) { - (N = console.debug) == null || N.call(console, V); + } catch (Y) { + (k = console.debug) == null || k.call(console, Y); } } - }, f = async (v) => { - var Y, F; - const w = String(((Y = v == null ? void 0 : v.detail) == null ? void 0 : Y.subfolder) || "").trim().replaceAll("\\", "/"), R = I(); + }, f = async (j) => { + var V, O; + const w = String(((V = j == null ? void 0 : j.detail) == null ? void 0 : V.subfolder) || "").trim().replaceAll("\\", "/"), R = I(); if (w !== R) { - y(s, R), Z(w), p(), A(); + A(s, R), S(w), p(), y(); try { await (o == null ? void 0 : o()); - } catch (N) { - (F = console.debug) == null || F.call(console, N); + } catch (k) { + (O = console.debug) == null || O.call(console, k); } } }; @@ -31010,41 +31037,41 @@ function JM({ { signal: l || void 0 } - ), (x = t == null ? void 0 : t.addEventListener) == null || x.call(t, "mjr:open-folder-asset", W, { + ), (x = t == null ? void 0 : t.addEventListener) == null || x.call(t, "mjr:open-folder-asset", Z, { signal: l || void 0 }); try { t._mjrHasCustomSubfolderHandler = !0; - } catch (v) { - (T = console.debug) == null || T.call(console, v); + } catch (j) { + (K = console.debug) == null || K.call(console, j); } return () => { - var v, w, R, Y, F; + var j, w, R, V, O; try { - (v = t == null ? void 0 : t.removeEventListener) == null || v.call( + (j = t == null ? void 0 : t.removeEventListener) == null || j.call( t, "mjr:custom-subfolder-changed", f ); - } catch (N) { - (w = console.debug) == null || w.call(console, N); + } catch (k) { + (w = console.debug) == null || w.call(console, k); } try { - (R = t == null ? void 0 : t.removeEventListener) == null || R.call(t, "mjr:open-folder-asset", W); - } catch (N) { - (Y = console.debug) == null || Y.call(console, N); + (R = t == null ? void 0 : t.removeEventListener) == null || R.call(t, "mjr:open-folder-asset", Z); + } catch (k) { + (V = console.debug) == null || V.call(console, k); } try { t._mjrHasCustomSubfolderHandler = !1; - } catch (N) { - (F = console.debug) == null || F.call(console, N); + } catch (k) { + (O = console.debug) == null || O.call(console, k); } }; }, - notifyContext: A + notifyContext: y }; } -function TM({ +function T2({ state: e, tabButtons: t, customMenuBtn: n, @@ -31057,7 +31084,7 @@ function TM({ onBeforeReload: s = null }) { let d = 0; - const { panelStore: u, read: I, write: y, controllerState: S } = oo(e, [ + const { panelStore: u, read: I, write: A, controllerState: h } = oo(e, [ "scope", "customRootId", "currentFolderRelativePath", @@ -31067,40 +31094,40 @@ function TM({ "similarResults", "similarTitle", "similarSourceAssetId" - ]), Z = ({ + ]), S = ({ viewScope: L = "", - similarResults: h = [], + similarResults: C = [], similarTitle: G = "", - similarSourceAssetId: W = "" + similarSourceAssetId: Z = "" } = {}) => { - y("viewScope", L), y("similarResults", h), y("similarTitle", G), y("similarSourceAssetId", W); - }, C = () => { + A("viewScope", L), A("similarResults", C), A("similarTitle", G), A("similarSourceAssetId", Z); + }, W = () => { try { return !!(String(I("viewScope", "") || "").trim().toLowerCase() === "similar" || Array.isArray(I("similarResults", [])) && I("similarResults", []).length > 0 || String(I("similarTitle", "") || "").trim()); } catch { return !1; } }, g = () => { - Z(); - }, A = () => { + S(); + }, y = () => { var G; - const L = Object.values(t || {}), h = String(I("viewScope", "") || I("scope", "output")).toLowerCase(); - L.forEach((W) => { - var x, T, v; - const X = ((x = W == null ? void 0 : W.dataset) == null ? void 0 : x.scope) === h; - (v = (T = W == null ? void 0 : W.classList) == null ? void 0 : T.toggle) == null || v.call(T, "is-active", X); + const L = Object.values(t || {}), C = String(I("viewScope", "") || I("scope", "output")).toLowerCase(); + L.forEach((Z) => { + var x, K, j; + const X = ((x = Z == null ? void 0 : Z.dataset) == null ? void 0 : x.scope) === C; + (j = (K = Z == null ? void 0 : Z.classList) == null ? void 0 : K.toggle) == null || j.call(K, "is-active", X); }); try { - const W = t == null ? void 0 : t.tabSimilar; - W && (W.style.display = C() ? "" : "none"); - } catch (W) { - (G = console.debug) == null || G.call(console, W); + const Z = t == null ? void 0 : t.tabSimilar; + Z && (Z.style.display = W() ? "" : "none"); + } catch (Z) { + (G = console.debug) == null || G.call(console, Z); } n.style.display = "none", i.style.display = "none", o.close(i); }; return { setScope: async (L) => { - var X, x, T, v, w, R, Y; - const h = ++d, G = /* @__PURE__ */ new Set([ + var X, x, K, j, w, R, V; + const C = ++d, G = /* @__PURE__ */ new Set([ "output", "outputs", "input", @@ -31108,73 +31135,73 @@ function TM({ "all", "custom", "similar" - ]), W = String(L || "").toLowerCase(); - if (!G.has(W)) return; - if (W === "similar") { - if (!C()) return; - y("viewScope", "similar"), A(); + ]), Z = String(L || "").toLowerCase(); + if (!G.has(Z)) return; + if (Z === "similar") { + if (!W()) return; + A("viewScope", "similar"), y(); try { a == null || a(); - } catch (F) { - (X = console.debug) == null || X.call(console, F); + } catch (O) { + (X = console.debug) == null || X.call(console, O); } try { - await (s == null ? void 0 : s(S())); - } catch (F) { - (x = console.debug) == null || x.call(console, F); + await (s == null ? void 0 : s(h())); + } catch (O) { + (x = console.debug) == null || x.call(console, O); } await r(); return; } - y("collectionId", ""), y("collectionName", ""), y("searchQuery", ""), g(); - const f = W === "outputs" ? "output" : W === "inputs" ? "input" : W; + A("collectionId", ""), A("collectionName", ""), A("searchQuery", ""), g(); + const f = Z === "outputs" ? "output" : Z === "inputs" ? "input" : Z; if (u != null && u.navigateToScope) try { u.navigateToScope(f, { folder: "" }); - } catch (F) { - (T = console.debug) == null || T.call(console, F), y("scope", f), y("currentFolderRelativePath", ""); + } catch (O) { + (K = console.debug) == null || K.call(console, O), A("scope", f), A("currentFolderRelativePath", ""); } else - y("scope", f), y("currentFolderRelativePath", ""); - String(I("scope", f)) !== "custom" && y("customRootId", ""), A(); + A("scope", f), A("currentFolderRelativePath", ""); + String(I("scope", f)) !== "custom" && A("customRootId", ""), y(); try { a == null || a(); - } catch (F) { - (v = console.debug) == null || v.call(console, F); + } catch (O) { + (j = console.debug) == null || j.call(console, O); } try { - await (c == null ? void 0 : c(S())); - } catch (F) { - (w = console.debug) == null || w.call(console, F); + await (c == null ? void 0 : c(h())); + } catch (O) { + (w = console.debug) == null || w.call(console, O); } - if (h === d) { + if (C === d) { try { - await (s == null ? void 0 : s(S())); - } catch (F) { - (R = console.debug) == null || R.call(console, F); + await (s == null ? void 0 : s(h())); + } catch (O) { + (R = console.debug) == null || R.call(console, O); } - if (h === d) { + if (C === d) { try { l == null || l(); - } catch (F) { - (Y = console.debug) == null || Y.call(console, F); + } catch (O) { + (V = console.debug) == null || V.call(console, O); } await r(); } } - }, setActiveTabStyles: A, clearSimilarScope: async ({ reload: L = !0 } = {}) => { + }, setActiveTabStyles: y, clearSimilarScope: async ({ reload: L = !0 } = {}) => { var G; - const h = C(); - g(), y("searchQuery", ""), A(); + const C = W(); + g(), A("searchQuery", ""), y(); try { a == null || a(); - } catch (W) { - (G = console.debug) == null || G.call(console, W); + } catch (Z) { + (G = console.debug) == null || G.call(console, Z); } - !h || !L || await r(); + !C || !L || await r(); } }; } -const Ln = (e, t) => { +const Vn = (e, t) => { var n; if (e) try { @@ -31191,7 +31218,7 @@ const Ln = (e, t) => { (n = console.debug) == null || n.call(console, i); } }; -function BM({ +function K2({ state: e, gridContainer: t, filterBtn: n, @@ -31205,20 +31232,20 @@ function BM({ minSizeInput: d, maxSizeInput: u, minWidthInput: I, - minHeightInput: y, - maxWidthInput: S, - maxHeightInput: Z, - resolutionPresetSelect: C, + minHeightInput: A, + maxWidthInput: h, + maxHeightInput: S, + resolutionPresetSelect: W, dateRangeSelect: g, - dateExactInput: A, + dateExactInput: y, scopeController: p, sortController: b, updateSummaryBar: L, - reloadGrid: h, + reloadGrid: C, extraActions: G = null, - getExtraContext: W = null + getExtraContext: Z = null } = {}) { - const f = e && typeof e == "object" ? e : {}, { read: X, write: x, controllerState: T } = oo(e, [ + const f = e && typeof e == "object" ? e : {}, { read: X, write: x, controllerState: K } = oo(e, [ "searchQuery", "scope", "collectionId", @@ -31244,302 +31271,302 @@ function BM({ "similarResults", "similarTitle", "similarSourceAssetId" - ]), v = (k, K) => { - x(k, K); - }, w = (k, K = "") => X(k, K), R = () => ({ + ]), j = (N, U) => { + x(N, U); + }, w = (N, U = "") => X(N, U), R = () => ({ ...f || {}, - ...(T == null ? void 0 : T()) || {}, + ...(K == null ? void 0 : K()) || {}, customRootLabel: w("customRootLabel", "") - }), Y = () => { - var k, K; + }), V = () => { + var N, U; try { - (k = G == null ? void 0 : G.resetBrowserHistory) == null || k.call(G); + (N = G == null ? void 0 : G.resetBrowserHistory) == null || N.call(G); } catch (z) { - (K = console.debug) == null || K.call(console, z); + (U = console.debug) == null || U.call(console, z); } - }, F = () => { - var k, K, z, B; + }, O = () => { + var N, U, z, T; try { - const J = ((k = t == null ? void 0 : t.closest) == null ? void 0 : k.call(t, ".mjr-assets-manager")) || ((K = document.querySelector) == null ? void 0 : K.call(document, ".mjr-assets-manager")) || document.documentElement; + const J = ((N = t == null ? void 0 : t.closest) == null ? void 0 : N.call(t, ".mjr-assets-manager")) || ((U = document.querySelector) == null ? void 0 : U.call(document, ".mjr-assets-manager")) || document.documentElement; if (!((z = J == null ? void 0 : J.style) != null && z.setProperty)) return; J.style.setProperty( "--mjr-star-active", - String(fe.BADGE_STAR_COLOR || "#FFD45A") + String(he.BADGE_STAR_COLOR || "#FFD45A") ), J.style.setProperty( "--mjr-badge-image", - String(fe.BADGE_IMAGE_COLOR || "#2196F3") + String(he.BADGE_IMAGE_COLOR || "#2196F3") ), J.style.setProperty( "--mjr-badge-video", - String(fe.BADGE_VIDEO_COLOR || "#9C27B0") + String(he.BADGE_VIDEO_COLOR || "#9C27B0") ), J.style.setProperty( "--mjr-badge-audio", - String(fe.BADGE_AUDIO_COLOR || "#FF9800") + String(he.BADGE_AUDIO_COLOR || "#FF9800") ), J.style.setProperty( "--mjr-badge-model3d", - String(fe.BADGE_MODEL3D_COLOR || "#4CAF50") + String(he.BADGE_MODEL3D_COLOR || "#4CAF50") ), J.style.setProperty( "--mjr-badge-duplicate-alert", - String(fe.BADGE_DUPLICATE_ALERT_COLOR || "#FF1744") + String(he.BADGE_DUPLICATE_ALERT_COLOR || "#FF1744") ); } catch (J) { - (B = console.debug) == null || B.call(console, J); + (T = console.debug) == null || T.call(console, J); } - }, N = { + }, k = { clearQuery: async () => { - var k, K; + var N, U; try { - Ln(r, ""), v("searchQuery", ""); + Vn(r, ""), j("searchQuery", ""); } catch (z) { - (k = console.debug) == null || k.call(console, z); + (N = console.debug) == null || N.call(console, z); } try { - await (h == null ? void 0 : h()); + await (C == null ? void 0 : C()); } catch (z) { - (K = console.debug) == null || K.call(console, z); + (U = console.debug) == null || U.call(console, z); } }, clearCollection: async () => { - var k, K; + var N, U; try { - v("collectionId", ""), v("collectionName", ""); + j("collectionId", ""), j("collectionName", ""); } catch (z) { - (k = console.debug) == null || k.call(console, z); + (N = console.debug) == null || N.call(console, z); } try { - await (h == null ? void 0 : h()); + await (C == null ? void 0 : C()); } catch (z) { - (K = console.debug) == null || K.call(console, z); + (U = console.debug) == null || U.call(console, z); } }, clearScope: async () => { - var K, z, B, J, P; + var U, z, T, J, P; try { if (String((e == null ? void 0 : e.viewScope) || "").trim().toLowerCase() === "similar" && typeof (G == null ? void 0 : G.clearSimilarScope) == "function") { await G.clearSimilarScope(); return; } - } catch (H) { - (K = console.debug) == null || K.call(console, H); + } catch (E) { + (U = console.debug) == null || U.call(console, E); } - let k = !1; + let N = !1; try { - v("customRootId", ""), v("customRootLabel", ""), v("currentFolderRelativePath", ""), (z = t == null ? void 0 : t.dataset) == null || delete z.mjrSubfolder, Y(), typeof (p == null ? void 0 : p.setScope) == "function" ? (await p.setScope("output"), k = !0) : (v("scope", "output"), (B = p == null ? void 0 : p.setActiveTabStyles) == null || B.call(p)); - } catch (H) { - (J = console.debug) == null || J.call(console, H); + j("customRootId", ""), j("customRootLabel", ""), j("currentFolderRelativePath", ""), (z = t == null ? void 0 : t.dataset) == null || delete z.mjrSubfolder, V(), typeof (p == null ? void 0 : p.setScope) == "function" ? (await p.setScope("output"), N = !0) : (j("scope", "output"), (T = p == null ? void 0 : p.setActiveTabStyles) == null || T.call(p)); + } catch (E) { + (J = console.debug) == null || J.call(console, E); } try { - k || await (h == null ? void 0 : h()); - } catch (H) { - (P = console.debug) == null || P.call(console, H); + N || await (C == null ? void 0 : C()); + } catch (E) { + (P = console.debug) == null || P.call(console, E); } }, clearCustomRoot: async () => { - var k, K, z; + var N, U, z; try { - v("customRootId", ""), v("customRootLabel", ""), v("currentFolderRelativePath", ""), (k = t == null ? void 0 : t.dataset) == null || delete k.mjrSubfolder, Y(); - } catch (B) { - (K = console.debug) == null || K.call(console, B); + j("customRootId", ""), j("customRootLabel", ""), j("currentFolderRelativePath", ""), (N = t == null ? void 0 : t.dataset) == null || delete N.mjrSubfolder, V(); + } catch (T) { + (U = console.debug) == null || U.call(console, T); } try { - await (h == null ? void 0 : h()); - } catch (B) { - (z = console.debug) == null || z.call(console, B); + await (C == null ? void 0 : C()); + } catch (T) { + (z = console.debug) == null || z.call(console, T); } }, clearFolder: async () => { - var k, K, z; + var N, U, z; try { - v("currentFolderRelativePath", ""), (k = t == null ? void 0 : t.dataset) == null || delete k.mjrSubfolder, Y(); - } catch (B) { - (K = console.debug) == null || K.call(console, B); + j("currentFolderRelativePath", ""), (N = t == null ? void 0 : t.dataset) == null || delete N.mjrSubfolder, V(); + } catch (T) { + (U = console.debug) == null || U.call(console, T); } try { - await (h == null ? void 0 : h()); - } catch (B) { - (z = console.debug) == null || z.call(console, B); + await (C == null ? void 0 : C()); + } catch (T) { + (z = console.debug) == null || z.call(console, T); } }, clearKind: async () => { - var k, K; + var N, U; try { - v("kindFilter", ""), Ln(l, ""); + j("kindFilter", ""), Vn(l, ""); } catch (z) { - (k = console.debug) == null || k.call(console, z); + (N = console.debug) == null || N.call(console, z); } try { - await (h == null ? void 0 : h()); + await (C == null ? void 0 : C()); } catch (z) { - (K = console.debug) == null || K.call(console, z); + (U = console.debug) == null || U.call(console, z); } }, clearMinRating: async () => { - var k, K; + var N, U; try { - v("minRating", 0), Ln(s, "0"); + j("minRating", 0), Vn(s, "0"); } catch (z) { - (k = console.debug) == null || k.call(console, z); + (N = console.debug) == null || N.call(console, z); } try { - await (h == null ? void 0 : h()); + await (C == null ? void 0 : C()); } catch (z) { - (K = console.debug) == null || K.call(console, z); + (U = console.debug) == null || U.call(console, z); } }, clearWorkflowOnly: async () => { - var k, K; + var N, U; try { - v("workflowOnly", !1), Wm(a, !1); + j("workflowOnly", !1), Wm(a, !1); } catch (z) { - (k = console.debug) == null || k.call(console, z); + (N = console.debug) == null || N.call(console, z); } try { - await (h == null ? void 0 : h()); + await (C == null ? void 0 : C()); } catch (z) { - (K = console.debug) == null || K.call(console, z); + (U = console.debug) == null || U.call(console, z); } }, clearWorkflowType: async () => { - var k, K; + var N, U; try { - v("workflowType", ""), Ln(c, ""); + j("workflowType", ""), Vn(c, ""); } catch (z) { - (k = console.debug) == null || k.call(console, z); + (N = console.debug) == null || N.call(console, z); } try { - await (h == null ? void 0 : h()); + await (C == null ? void 0 : C()); } catch (z) { - (K = console.debug) == null || K.call(console, z); + (U = console.debug) == null || U.call(console, z); } }, clearSize: async () => { - var k, K; + var N, U; try { - v("minSizeMB", 0), v("maxSizeMB", 0), Ln(d, ""), Ln(u, ""); + j("minSizeMB", 0), j("maxSizeMB", 0), Vn(d, ""), Vn(u, ""); } catch (z) { - (k = console.debug) == null || k.call(console, z); + (N = console.debug) == null || N.call(console, z); } try { - await (h == null ? void 0 : h()); + await (C == null ? void 0 : C()); } catch (z) { - (K = console.debug) == null || K.call(console, z); + (U = console.debug) == null || U.call(console, z); } }, clearResolution: async () => { - var k, K; + var N, U; try { - v("minWidth", 0), v("minHeight", 0), v("maxWidth", 0), v("maxHeight", 0), Ln(I, ""), Ln(y, ""), Ln(S, ""), Ln(Z, ""), Ln(C, ""); + j("minWidth", 0), j("minHeight", 0), j("maxWidth", 0), j("maxHeight", 0), Vn(I, ""), Vn(A, ""), Vn(h, ""), Vn(S, ""), Vn(W, ""); } catch (z) { - (k = console.debug) == null || k.call(console, z); + (N = console.debug) == null || N.call(console, z); } try { - await (h == null ? void 0 : h()); + await (C == null ? void 0 : C()); } catch (z) { - (K = console.debug) == null || K.call(console, z); + (U = console.debug) == null || U.call(console, z); } }, clearDateRange: async () => { - var k, K; + var N, U; try { - v("dateRangeFilter", ""), Ln(g, ""); + j("dateRangeFilter", ""), Vn(g, ""); } catch (z) { - (k = console.debug) == null || k.call(console, z); + (N = console.debug) == null || N.call(console, z); } try { - await (h == null ? void 0 : h()); + await (C == null ? void 0 : C()); } catch (z) { - (K = console.debug) == null || K.call(console, z); + (U = console.debug) == null || U.call(console, z); } }, clearDateExact: async () => { - var k, K; + var N, U; try { - v("dateExactFilter", ""), Ln(A, ""); + j("dateExactFilter", ""), Vn(y, ""); } catch (z) { - (k = console.debug) == null || k.call(console, z); + (N = console.debug) == null || N.call(console, z); } try { - await (h == null ? void 0 : h()); + await (C == null ? void 0 : C()); } catch (z) { - (K = console.debug) == null || K.call(console, z); + (U = console.debug) == null || U.call(console, z); } }, clearSort: async () => { - var k, K, z, B; + var N, U, z, T; try { - v("sort", "mtime_desc"), (k = b == null ? void 0 : b.setSortIcon) == null || k.call(b, w("sort", "mtime_desc")), (K = b == null ? void 0 : b.renderSortMenu) == null || K.call(b); + j("sort", "mtime_desc"), (N = b == null ? void 0 : b.setSortIcon) == null || N.call(b, w("sort", "mtime_desc")), (U = b == null ? void 0 : b.renderSortMenu) == null || U.call(b); } catch (J) { (z = console.debug) == null || z.call(console, J); } try { - await (h == null ? void 0 : h()); + await (C == null ? void 0 : C()); } catch (J) { - (B = console.debug) == null || B.call(console, J); + (T = console.debug) == null || T.call(console, J); } }, clearAll: async () => { - var K, z, B, J, P, H, $, E, oe, M, j; - let k = !1; + var U, z, T, J, P, E, $, H, ne, M, v; + let N = !1; try { - Ln(r, ""); - } catch (O) { - (K = console.debug) == null || K.call(console, O); + Vn(r, ""); + } catch (F) { + (U = console.debug) == null || U.call(console, F); } try { - v("collectionId", ""), v("collectionName", ""), v("kindFilter", ""), v("workflowOnly", !1), v("minRating", 0), v("minSizeMB", 0), v("maxSizeMB", 0), v("minWidth", 0), v("minHeight", 0), v("maxWidth", 0), v("maxHeight", 0), v("resolutionCompare", "gte"), v("workflowType", ""), v("dateRangeFilter", ""), v("dateExactFilter", ""), v("sort", "mtime_desc"), v("customRootId", ""), v("customRootLabel", ""), v("currentFolderRelativePath", ""), (z = t == null ? void 0 : t.dataset) == null || delete z.mjrSubfolder, Y(); + j("collectionId", ""), j("collectionName", ""), j("kindFilter", ""), j("workflowOnly", !1), j("minRating", 0), j("minSizeMB", 0), j("maxSizeMB", 0), j("minWidth", 0), j("minHeight", 0), j("maxWidth", 0), j("maxHeight", 0), j("resolutionCompare", "gte"), j("workflowType", ""), j("dateRangeFilter", ""), j("dateExactFilter", ""), j("sort", "mtime_desc"), j("customRootId", ""), j("customRootLabel", ""), j("currentFolderRelativePath", ""), (z = t == null ? void 0 : t.dataset) == null || delete z.mjrSubfolder, V(); try { - await ((B = G == null ? void 0 : G.clearTransientContext) == null ? void 0 : B.call(G)); - } catch (O) { - (J = console.debug) == null || J.call(console, O); + await ((T = G == null ? void 0 : G.clearTransientContext) == null ? void 0 : T.call(G)); + } catch (F) { + (J = console.debug) == null || J.call(console, F); } - typeof (p == null ? void 0 : p.setScope) == "function" ? (await p.setScope("output"), k = !0) : (v("scope", "output"), (P = p == null ? void 0 : p.setActiveTabStyles) == null || P.call(p)); - } catch (O) { - (H = console.debug) == null || H.call(console, O); + typeof (p == null ? void 0 : p.setScope) == "function" ? (await p.setScope("output"), N = !0) : (j("scope", "output"), (P = p == null ? void 0 : p.setActiveTabStyles) == null || P.call(p)); + } catch (F) { + (E = console.debug) == null || E.call(console, F); } try { - Ln(l, ""), Wm(a, !1), Ln(c, ""), Ln(s, "0"), Ln(d, ""), Ln(u, ""), Ln(I, ""), Ln(y, ""), Ln(S, ""), Ln(Z, ""), Ln(C, ""), Ln(g, ""), Ln(A, ""); - } catch (O) { - ($ = console.debug) == null || $.call(console, O); + Vn(l, ""), Wm(a, !1), Vn(c, ""), Vn(s, "0"), Vn(d, ""), Vn(u, ""), Vn(I, ""), Vn(A, ""), Vn(h, ""), Vn(S, ""), Vn(W, ""), Vn(g, ""), Vn(y, ""); + } catch (F) { + ($ = console.debug) == null || $.call(console, F); } try { - (E = b == null ? void 0 : b.setSortIcon) == null || E.call(b, w("sort", "mtime_desc")), (oe = b == null ? void 0 : b.renderSortMenu) == null || oe.call(b); - } catch (O) { - (M = console.debug) == null || M.call(console, O); + (H = b == null ? void 0 : b.setSortIcon) == null || H.call(b, w("sort", "mtime_desc")), (ne = b == null ? void 0 : b.renderSortMenu) == null || ne.call(b); + } catch (F) { + (M = console.debug) == null || M.call(console, F); } try { - k || await (h == null ? void 0 : h()); - } catch (O) { - (j = console.debug) == null || j.call(console, O); + N || await (C == null ? void 0 : C()); + } catch (F) { + (v = console.debug) == null || v.call(console, F); } } }; if (G && typeof G == "object") { - const k = /* @__PURE__ */ new Set(["__proto__", "constructor", "prototype"]); - for (const [K, z] of Object.entries(G)) - k.has(String(K)) || (N[K] = z); + const N = /* @__PURE__ */ new Set(["__proto__", "constructor", "prototype"]); + for (const [U, z] of Object.entries(G)) + N.has(String(U)) || (k[U] = z); } return { update: () => { - var H, $, E, oe, M, j, O, D; - const k = String((r == null ? void 0 : r.value) || "").trim(), K = Cs(r), z = R(), B = !!(w("kindFilter", "") || w("workflowOnly", !1) || (Number(w("minRating", 0) || 0) || 0) > 0 || (Number(w("minSizeMB", 0) || 0) || 0) > 0 || (Number(w("maxSizeMB", 0) || 0) || 0) > 0 || (Number(w("minWidth", 0) || 0) || 0) > 0 || (Number(w("minHeight", 0) || 0) || 0) > 0 || (Number(w("maxWidth", 0) || 0) || 0) > 0 || (Number(w("maxHeight", 0) || 0) || 0) > 0 || String(w("workflowType", "") || "").trim().length > 0 || w("dateRangeFilter", "") || w("dateExactFilter", "")), J = String(w("sort", "mtime_desc") || "mtime_desc") !== "mtime_desc", P = !!w("collectionId", ""); + var E, $, H, ne, M, v, F, D; + const N = String((r == null ? void 0 : r.value) || "").trim(), U = Zs(r), z = R(), T = !!(w("kindFilter", "") || w("workflowOnly", !1) || (Number(w("minRating", 0) || 0) || 0) > 0 || (Number(w("minSizeMB", 0) || 0) || 0) > 0 || (Number(w("maxSizeMB", 0) || 0) || 0) > 0 || (Number(w("minWidth", 0) || 0) || 0) > 0 || (Number(w("minHeight", 0) || 0) || 0) > 0 || (Number(w("maxWidth", 0) || 0) || 0) > 0 || (Number(w("maxHeight", 0) || 0) || 0) > 0 || String(w("workflowType", "") || "").trim().length > 0 || w("dateRangeFilter", "") || w("dateExactFilter", "")), J = String(w("sort", "mtime_desc") || "mtime_desc") !== "mtime_desc", P = !!w("collectionId", ""); try { - ($ = (H = n == null ? void 0 : n.classList) == null ? void 0 : H.toggle) == null || $.call(H, "mjr-context-active", B), (oe = (E = i == null ? void 0 : i.classList) == null ? void 0 : E.toggle) == null || oe.call(E, "mjr-context-active", J), (j = (M = o == null ? void 0 : o.classList) == null ? void 0 : M.toggle) == null || j.call(M, "mjr-context-active", P); + ($ = (E = n == null ? void 0 : n.classList) == null ? void 0 : E.toggle) == null || $.call(E, "mjr-context-active", T), (ne = (H = i == null ? void 0 : i.classList) == null ? void 0 : H.toggle) == null || ne.call(H, "mjr-context-active", J), (v = (M = o == null ? void 0 : o.classList) == null ? void 0 : M.toggle) == null || v.call(M, "mjr-context-active", P); } catch (q) { - (O = console.debug) == null || O.call(console, q); + (F = console.debug) == null || F.call(console, q); } try { - const q = (typeof W == "function" ? W() || {} : {}) || {}; + const q = (typeof Z == "function" ? Z() || {} : {}) || {}; L == null || L({ state: z, gridContainer: t, - context: { rawQuery: k || K, ...q }, - actions: N + context: { rawQuery: N || U, ...q }, + actions: k }); } catch (q) { (D = console.debug) == null || D.call(console, q); } - F(); - }, actions: N }; + O(); + }, actions: k }; } -function UM({ +function B2({ state: e, customSelect: t, customRemoveBtn: n, @@ -31552,104 +31579,104 @@ function UM({ reloadGrid: s, onRootChanged: d = null }) { - const u = e && typeof e == "object" ? e : {}, { read: I, write: y } = oo(e, [ + const u = e && typeof e == "object" ? e : {}, { read: I, write: A } = oo(e, [ "customRootId", "customRootLabel", "currentFolderRelativePath" - ]), S = (g) => { - y("customRootLabel", String(g || "")); - }, Z = async (g = null) => { + ]), h = (g) => { + A("customRootLabel", String(g || "")); + }, S = async (g = null) => { var b; - const A = ((b = t.querySelector('option[value=""]')) == null ? void 0 : b.textContent) || m("label.selectFolder", "Select folder…"); + const y = ((b = t.querySelector('option[value=""]')) == null ? void 0 : b.textContent) || m("label.selectFolder", "Select folder…"); t.innerHTML = ""; const p = document.createElement("option"); p.value = "", p.textContent = m("msg.loading"), p.disabled = !0, t.appendChild(p), t.disabled = !0; try { - const L = await l(c.CUSTOM_ROOTS), h = L && L.ok && Array.isArray(L.data) ? L.data : []; + const L = await l(c.CUSTOM_ROOTS), C = L && L.ok && Array.isArray(L.data) ? L.data : []; t.innerHTML = ""; const G = document.createElement("option"); - G.value = "", G.textContent = A, t.appendChild(G), h.forEach((f) => { + G.value = "", G.textContent = y, t.appendChild(G), C.forEach((f) => { const X = document.createElement("option"); X.value = f.id, X.textContent = f.name || f.path || f.id, t.appendChild(X); }); - const W = g || I("customRootId", ""); - if (W && h.some((f) => f.id === W)) { - t.value = W, y("customRootId", W); + const Z = g || I("customRootId", ""); + if (Z && C.some((f) => f.id === Z)) { + t.value = Z, A("customRootId", Z); try { const f = t.options[t.selectedIndex]; - S(String((f == null ? void 0 : f.text) || "").trim()); + h(String((f == null ? void 0 : f.text) || "").trim()); } catch { - S(""); + h(""); } } else - t.value = "", y("customRootId", ""), S(""); + t.value = "", A("customRootId", ""), h(""); n.disabled = !I("customRootId", ""); } catch (L) { console.warn("Majoor: failed to load custom roots", L), t.innerHTML = ""; - const h = document.createElement("option"); - h.value = "", h.textContent = m("msg.errorLoadingFolders"), h.disabled = !0, t.appendChild(h); + const C = document.createElement("option"); + C.value = "", C.textContent = m("msg.errorLoadingFolders"), C.disabled = !0, t.appendChild(C); } finally { t.disabled = !1; } }; - return { refreshCustomRoots: Z, bind: ({ customAddBtn: g, customRemoveBtn: A }) => { - const p = [], b = (W, f, X) => { - if (!(!(W != null && W.addEventListener) || typeof X != "function")) { + return { refreshCustomRoots: S, bind: ({ customAddBtn: g, customRemoveBtn: y }) => { + const p = [], b = (Z, f, X) => { + if (!(!(Z != null && Z.addEventListener) || typeof X != "function")) { try { - W.addEventListener(f, X); + Z.addEventListener(f, X); } catch { return; } p.push(() => { var x; try { - W.removeEventListener(f, X); - } catch (T) { - (x = console.debug) == null || x.call(console, T); + Z.removeEventListener(f, X); + } catch (K) { + (x = console.debug) == null || x.call(console, K); } }); } }; return b(t, "change", async () => { - var W; + var Z; if (!t.disabled) { - y("customRootId", t.value || ""); + A("customRootId", t.value || ""); try { const f = t.options[t.selectedIndex]; - S(String((f == null ? void 0 : f.text) || "").trim()); + h(String((f == null ? void 0 : f.text) || "").trim()); } catch { - S(""); + h(""); } - y("currentFolderRelativePath", ""), A.disabled = !I("customRootId", ""); + A("currentFolderRelativePath", ""), y.disabled = !I("customRootId", ""); try { await (d == null ? void 0 : d(u)); } catch (f) { - (W = console.debug) == null || W.call(console, f); + (Z = console.debug) == null || Z.call(console, f); } await s(); } }), g && (g.disabled = !1, g.title = m("btn.add", "Add")), b(g, "click", async () => { - var T, v, w, R; - let W = ""; + var K, j, w, R; + let Z = ""; try { - const Y = await a(c.BROWSE_FOLDER, {}); - Y != null && Y.ok && (W = String(((T = Y == null ? void 0 : Y.data) == null ? void 0 : T.path) || "").trim()); - } catch (Y) { - (v = console.debug) == null || v.call(console, Y); + const V = await a(c.BROWSE_FOLDER, {}); + V != null && V.ok && (Z = String(((K = V == null ? void 0 : V.data) == null ? void 0 : K.path) || "").trim()); + } catch (V) { + (j = console.debug) == null || j.call(console, V); } - if (!W) { - const Y = await o( + if (!Z) { + const V = await o( m("dialog.enterFolderPath", "Enter folder path"), "" ); - W = String(Y || "").trim(); + Z = String(V || "").trim(); } - if (!W) return; + if (!Z) return; const f = await o( m("dialog.folderLabelOptional", "Folder label (optional)"), "" ), X = await a(c.CUSTOM_ROOTS, { - path: W, + path: Z, label: String(f || "").trim() || void 0 }); if (!(X != null && X.ok)) { @@ -31660,23 +31687,23 @@ function UM({ return; } const x = String(((w = X == null ? void 0 : X.data) == null ? void 0 : w.id) || "").trim() || null; - await Z(x); + await S(x); try { await (d == null ? void 0 : d(e)); - } catch (Y) { - (R = console.debug) == null || R.call(console, Y); + } catch (V) { + (R = console.debug) == null || R.call(console, V); } await s(), r(m("toast.folderAdded", "Folder added"), "success"); - }), b(A, "click", async () => { + }), b(y, "click", async () => { if (!I("customRootId", "")) return; - const W = t.options[t.selectedIndex], f = W ? W.text : m("label.thisFolder", "this folder"); + const Z = t.options[t.selectedIndex], f = Z ? Z.text : m("label.thisFolder", "this folder"); if (await i( m("dialog.removeFolder", `Remove the browser folder "${f}"?`, { name: f }), m("dialog.customFoldersTitle", "Majoor: Browser Folders") )) { - A.disabled = !0, A.textContent = m("btn.removing"); + y.disabled = !0, y.textContent = m("btn.removing"); try { const x = await a(c.CUSTOM_ROOTS_REMOVE, { id: I("customRootId", "") @@ -31688,7 +31715,7 @@ function UM({ ); return; } - r(m("toast.folderRemoved", "Folder removed"), "success"), y("customRootId", ""), S(""), y("currentFolderRelativePath", ""), await Z(), await s(); + r(m("toast.folderRemoved", "Folder removed"), "success"), A("customRootId", ""), h(""), A("currentFolderRelativePath", ""), await S(), await s(); } catch (x) { console.warn("Majoor: remove custom root failed", x), r( m( @@ -31698,21 +31725,21 @@ function UM({ "error" ); } finally { - A.disabled = !I("customRootId", ""), A.textContent = m("btn.remove"); + y.disabled = !I("customRootId", ""), y.textContent = m("btn.remove"); } } }), () => { - var W; + var Z; for (const f of p.splice(0)) try { f(); } catch (X) { - (W = console.debug) == null || W.call(console, X); + (Z = console.debug) == null || Z.call(console, X); } }; } }; } -function KM({ +function U2({ state: e, sortBtn: t, sortMenu: n, @@ -31729,15 +31756,15 @@ function KM({ { key: "rating_desc", label: m("sort.ratingHigh") }, { key: "size_desc", label: m("sort.sizeDesc") }, { key: "size_asc", label: m("sort.sizeAsc") } - ], d = (y) => { - const S = t.querySelector("i"); - S && (y === "name_asc" ? S.className = "pi pi-sort-alpha-down" : y === "name_desc" ? S.className = "pi pi-sort-alpha-up" : y === "mtime_asc" ? S.className = "pi pi-sort-amount-up-alt" : y === "rating_desc" ? S.className = "pi pi-star-fill" : y === "size_desc" ? S.className = "pi pi-sort-numeric-down-alt" : y === "size_asc" ? S.className = "pi pi-sort-numeric-up-alt" : S.className = "pi pi-sort-amount-down"); + ], d = (A) => { + const h = t.querySelector("i"); + h && (A === "name_asc" ? h.className = "pi pi-sort-alpha-down" : A === "name_desc" ? h.className = "pi pi-sort-alpha-up" : A === "mtime_asc" ? h.className = "pi pi-sort-amount-up-alt" : A === "rating_desc" ? h.className = "pi pi-star-fill" : A === "size_desc" ? h.className = "pi pi-sort-numeric-down-alt" : A === "size_asc" ? h.className = "pi pi-sort-numeric-up-alt" : h.className = "pi pi-sort-amount-down"); }, u = () => { n.replaceChildren(); - const y = s(); - for (const S of y) { - const Z = S.key === a("sort", "mtime_desc"), C = document.createElement("button"); - C.type = "button", C.className = "mjr-menu-item", C.style.cssText = ` + const A = s(); + for (const h of A) { + const S = h.key === a("sort", "mtime_desc"), W = document.createElement("button"); + W.type = "button", W.className = "mjr-menu-item", W.style.cssText = ` display:flex; align-items:center; justify-content:space-between; @@ -31745,70 +31772,70 @@ function KM({ gap:10px; padding:9px 10px; border-radius:9px; - border:1px solid ${Z ? "rgba(120,190,255,0.68)" : "rgba(120,190,255,0.18)"}; - background:${Z ? "linear-gradient(135deg, rgba(70,130,255,0.28), rgba(20,95,185,0.22))" : "linear-gradient(135deg, rgba(255,255,255,0.03), rgba(255,255,255,0.01))"}; - box-shadow:${Z ? "0 0 0 1px rgba(160,210,255,0.22) inset, 0 8px 18px rgba(35,95,185,0.26)" : "none"}; + border:1px solid ${S ? "rgba(120,190,255,0.68)" : "rgba(120,190,255,0.18)"}; + background:${S ? "linear-gradient(135deg, rgba(70,130,255,0.28), rgba(20,95,185,0.22))" : "linear-gradient(135deg, rgba(255,255,255,0.03), rgba(255,255,255,0.01))"}; + box-shadow:${S ? "0 0 0 1px rgba(160,210,255,0.22) inset, 0 8px 18px rgba(35,95,185,0.26)" : "none"}; transition: border-color 120ms ease, background 120ms ease, box-shadow 120ms ease; `; const g = document.createElement("span"); - g.className = "mjr-menu-item-label", g.textContent = S.label, g.style.cssText = `font-weight:${Z ? "700" : "600"}; color:${Z ? "rgba(208,234,255,0.98)" : "var(--fg-color, #e6edf7)"};`; - const A = document.createElement("i"); - A.className = "pi pi-check mjr-menu-item-check", A.style.cssText = `opacity:${Z ? "1" : "0"}; color: rgba(133,203,255,0.98);`, C.appendChild(g), C.appendChild(A), C.addEventListener("mouseenter", () => { - Z || (C.style.borderColor = "rgba(145,205,255,0.4)", C.style.background = "linear-gradient(135deg, rgba(80,140,255,0.18), rgba(32,100,200,0.14))"); - }), C.addEventListener("mouseleave", () => { - Z || (C.style.borderColor = "rgba(120,190,255,0.18)", C.style.background = "linear-gradient(135deg, rgba(255,255,255,0.03), rgba(255,255,255,0.01))"); - }), C.addEventListener("click", async () => { + g.className = "mjr-menu-item-label", g.textContent = h.label, g.style.cssText = `font-weight:${S ? "700" : "600"}; color:${S ? "rgba(208,234,255,0.98)" : "var(--fg-color, #e6edf7)"};`; + const y = document.createElement("i"); + y.className = "pi pi-check mjr-menu-item-check", y.style.cssText = `opacity:${S ? "1" : "0"}; color: rgba(133,203,255,0.98);`, W.appendChild(g), W.appendChild(y), W.addEventListener("mouseenter", () => { + S || (W.style.borderColor = "rgba(145,205,255,0.4)", W.style.background = "linear-gradient(135deg, rgba(80,140,255,0.18), rgba(32,100,200,0.14))"); + }), W.addEventListener("mouseleave", () => { + S || (W.style.borderColor = "rgba(120,190,255,0.18)", W.style.background = "linear-gradient(135deg, rgba(255,255,255,0.03), rgba(255,255,255,0.01))"); + }), W.addEventListener("click", async () => { var p; - c("sort", S.key), d(a("sort", "mtime_desc")), u(); + c("sort", h.key), d(a("sort", "mtime_desc")), u(); try { l == null || l(); } catch (b) { (p = console.debug) == null || p.call(console, b); } i.style.display = "none", o.close(i), await r(); - }), n.appendChild(C); + }), n.appendChild(W); } }; - return { bind: ({ onBeforeToggle: y } = {}) => { - d(a("sort", "mtime_desc")), u(), t.addEventListener("click", (S) => { - var Z; - S.stopPropagation(); + return { bind: ({ onBeforeToggle: A } = {}) => { + d(a("sort", "mtime_desc")), u(), t.addEventListener("click", (h) => { + var S; + h.stopPropagation(); try { - y == null || y(); - } catch (C) { - (Z = console.debug) == null || Z.call(console, C); + A == null || A(); + } catch (W) { + (S = console.debug) == null || S.call(console, W); } u(), o.toggle(i, t); }); }, renderSortMenu: u, setSortIcon: d }; } -const wm = "_mjrRescanning", DM = 1500, EM = (e) => /^\d+$/.test(String(e ?? "").trim()); -async function HM({ card: e, asset: t, sidebar: n, onAssetUpdated: i }) { - var d, u, I, y, S, Z, C, g, A, p, b, L; +const wm = "_mjrRescanning", D2 = 1500, H2 = (e) => /^\d+$/.test(String(e ?? "").trim()); +async function E2({ card: e, asset: t, sidebar: n, onAssetUpdated: i }) { + var d, u, I, A, h, S, W, g, y, p, b, L; if (!e || !t || globalThis._mjrMaintenanceActive) return; try { - const h = Date.now(), G = Number(e[wm] || 0) || 0; - if (h - G < DM) return; - e[wm] = h; - } catch (h) { - (d = console.debug) == null || d.call(console, h); + const C = Date.now(), G = Number(e[wm] || 0) || 0; + if (C - G < D2) return; + e[wm] = C; + } catch (C) { + (d = console.debug) == null || d.call(console, C); } const o = e.querySelector(".mjr-workflow-dot"); try { o && (aa(o, "pending", "Pending: metadata refresh in progress", { asset: t }), o.classList.add("mjr-pulse-animation"), o.style.cursor = "progress", o.title = m("tooltip.pendingRefresh", "Pending: metadata refresh in progress")); - } catch (h) { - (u = console.debug) == null || u.call(console, h); + } catch (C) { + (u = console.debug) == null || u.call(console, C); } try { - Ze( + Ae( m("toast.rescanUpdatingAiIndex", "Rescanning file + updating AI index..."), "info", 2200 ); - } catch (h) { - (I = console.debug) == null || I.call(console, h); + } catch (C) { + (I = console.debug) == null || I.call(console, C); } const r = { filename: t.filename, @@ -31818,17 +31845,17 @@ async function HM({ card: e, asset: t, sidebar: n, onAssetUpdated: i }) { }; let l = null, a = !1, c = !1, s = !1; try { - const h = await Et(ct.INDEX_FILES, { + const C = await Dt(st.INDEX_FILES, { files: [r], incremental: !1 }); - if (a = !!(h != null && h.ok), !a && o && (aa(o, "error", "Error: metadata refresh failed", { asset: t }), o.classList.remove("mjr-pulse-animation"), o.style.cursor = ""), EM(t == null ? void 0 : t.id)) { + if (a = !!(C != null && C.ok), !a && o && (aa(o, "error", "Error: metadata refresh failed", { asset: t }), o.classList.remove("mjr-pulse-animation"), o.style.cursor = ""), H2(t == null ? void 0 : t.id)) { c = !0; try { const G = await Jg(t.id); s = !!(G != null && G.ok); } catch (G) { - (y = console.debug) == null || y.call(console, G); + (A = console.debug) == null || A.call(console, G); } } if (a && t.id != null) { @@ -31838,45 +31865,45 @@ async function HM({ card: e, asset: t, sidebar: n, onAssetUpdated: i }) { } catch { try { o && (aa(o, "error", "Error: metadata refresh failed", { asset: t }), o.classList.remove("mjr-pulse-animation"), o.style.cursor = ""); - } catch (h) { - (S = console.debug) == null || S.call(console, h); + } catch (C) { + (h = console.debug) == null || h.call(console, C); } } try { if (l) { e._mjrAsset = l, typeof i == "function" && i(l); try { - if ((C = (Z = n == null ? void 0 : n.classList) == null ? void 0 : Z.contains) != null && C.call(Z, "is-open")) { - const h = ((g = n == null ? void 0 : n._currentAsset) == null ? void 0 : g.id) ?? ((A = n == null ? void 0 : n._currentFullAsset) == null ? void 0 : A.id) ?? null; - h != null && String(h) === String(l.id) && (n._mjrNeedsRefresh = !0); + if ((W = (S = n == null ? void 0 : n.classList) == null ? void 0 : S.contains) != null && W.call(S, "is-open")) { + const C = ((g = n == null ? void 0 : n._currentAsset) == null ? void 0 : g.id) ?? ((y = n == null ? void 0 : n._currentFullAsset) == null ? void 0 : y.id) ?? null; + C != null && String(C) === String(l.id) && (n._mjrNeedsRefresh = !0); } - } catch (h) { - (p = console.debug) == null || p.call(console, h); + } catch (C) { + (p = console.debug) == null || p.call(console, C); } } } finally { try { if (o && o.isConnected) { - const h = ec(l || t); - h && o.replaceWith(h); + const C = tc(l || t); + C && o.replaceWith(C); } } catch { try { o && (o.style.cursor = ""); - } catch (h) { - (b = console.debug) == null || b.call(console, h); + } catch (C) { + (b = console.debug) == null || b.call(console, C); } } } try { - a && s ? Ze( + a && s ? Ae( m( "toast.metadataVectorUpdated", "Metadata + AI vector index updated for this asset." ), "success", 2200 - ) : a && c && !s && Ze( + ) : a && c && !s && Ae( m( "toast.metadataUpdatedVectorFailed", "Metadata updated. AI vector index could not be updated." @@ -31884,8 +31911,8 @@ async function HM({ card: e, asset: t, sidebar: n, onAssetUpdated: i }) { "warning", 2600 ); - } catch (h) { - (L = console.debug) == null || L.call(console, h); + } catch (C) { + (L = console.debug) == null || L.call(console, C); } return l; } @@ -31923,7 +31950,7 @@ function Mm(e, t) { } } } -const Ta = (e) => { +const Ka = (e) => { var t; if (e == null) return ""; try { @@ -31934,19 +31961,19 @@ const Ta = (e) => { } return String(e).replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1"); }; -function Zs(e, t) { +function As(e, t) { var n, i; if (!e || !t) return null; try { return e.querySelector( - `.mjr-asset-card[data-mjr-asset-id="${Ta(t)}"]` + `.mjr-asset-card[data-mjr-asset-id="${Ka(t)}"]` ); } catch (o) { (n = console.debug) == null || n.call(console, o); } try { return e.querySelector( - `.mjr-asset-card[data-mjr-asset-id="${Ta(t)}"]` + `.mjr-asset-card[data-mjr-asset-id="${Ka(t)}"]` ); } catch (o) { (i = console.debug) == null || i.call(console, o); @@ -31958,7 +31985,7 @@ function np(e) { if (!e) return null; const t = (i = e.dataset) == null ? void 0 : i.mjrSelectedAssetId; if (t) { - const l = Zs(e, t); + const l = As(e, t); if (l) return l; } const n = (o = e.dataset) == null ? void 0 : o.mjrSelectedAssetIds; @@ -31966,7 +31993,7 @@ function np(e) { try { const l = JSON.parse(n); if (Array.isArray(l) && l.length) { - const a = Zs(e, l[0]); + const a = As(e, l[0]); if (a) return a; } } catch (l) { @@ -31974,7 +32001,7 @@ function np(e) { } return e.querySelector(".mjr-asset-card.is-selected"); } -function qM(e, { preventScroll: t = !0 } = {}) { +function q2(e, { preventScroll: t = !0 } = {}) { var n, i, o; if (e) try { @@ -31990,7 +32017,7 @@ function qM(e, { preventScroll: t = !0 } = {}) { function ip(e, { force: t = !1 } = {}) { if (!e || !t && !e._mjrFocusWithin) return; const n = np(e); - n && (qM(n), e._mjrFocusWithin = !0); + n && (q2(n), e._mjrFocusWithin = !0); } function ga(e) { var t, n; @@ -32008,7 +32035,7 @@ function ga(e) { (n = console.debug) == null || n.call(console, i); } } -function Sm(e) { +function Gm(e) { var n; if (e) try { @@ -32039,11 +32066,11 @@ function Sm(e) { t(); } } -function PM(e, t) { +function P2(e, t) { var n, i; e && (t ? (e.classList.add("is-selected"), (n = e.setAttribute) == null || n.call(e, "aria-selected", "true")) : (e.classList.remove("is-selected"), (i = e.setAttribute) == null || i.call(e, "aria-selected", "false"))); } -function oc(e) { +function rc(e) { try { if (typeof (e == null ? void 0 : e._mjrGetRenderedCards) == "function") { const t = e._mjrGetRenderedCards(); @@ -32058,11 +32085,11 @@ function oc(e) { return []; } } -function Gm(e) { +function Sm(e) { var t; if (e) try { - const n = oc(e).filter((i) => { + const n = rc(e).filter((i) => { var o, r; return (r = (o = i == null ? void 0 : i.classList) == null ? void 0 : o.contains) == null ? void 0 : r.call(o, "is-selected"); }).map((i) => { @@ -32074,7 +32101,7 @@ function Gm(e) { (t = console.debug) == null || t.call(console, n); } } -function Br(e, t, n = "") { +function Kr(e, t, n = "") { var o, r, l, a, c, s; if (!e) return []; const i = Array.from(t || []).map(String).filter(Boolean); @@ -32090,9 +32117,9 @@ function Br(e, t, n = "") { (r = console.debug) == null || r.call(console, d); } try { - for (const d of oc(e)) { + for (const d of rc(e)) { const u = (l = d == null ? void 0 : d.dataset) == null ? void 0 : l.mjrAssetId, I = u && i.includes(String(u)); - PM(d, !!I); + P2(d, !!I); } } catch (d) { (a = console.debug) == null || a.call(console, d); @@ -32121,9 +32148,9 @@ function bo({ gridContainer: e, state: t, activeId: n, readState: i = null, writ } catch (u) { (l = console.debug) == null || l.call(console, u); } - else (a = e.dataset) != null && a.mjrSelectedAssetId ? s = [String(e.dataset.mjrSelectedAssetId)].filter(Boolean) : s = oc(e).filter((u) => { - var I, y; - return (y = (I = u == null ? void 0 : u.classList) == null ? void 0 : I.contains) == null ? void 0 : y.call(I, "is-selected"); + else (a = e.dataset) != null && a.mjrSelectedAssetId ? s = [String(e.dataset.mjrSelectedAssetId)].filter(Boolean) : s = rc(e).filter((u) => { + var I, A; + return (A = (I = u == null ? void 0 : u.classList) == null ? void 0 : I.contains) == null ? void 0 : A.call(I, "is-selected"); }).map((u) => { var I; return (I = u == null ? void 0 : u.dataset) == null ? void 0 : I.mjrAssetId; @@ -32135,7 +32162,7 @@ function bo({ gridContainer: e, state: t, activeId: n, readState: i = null, writ (c = console.debug) == null || c.call(console, s); } } -function QM({ +function Q2({ gridContainer: e, sidebar: t, createRatingBadge: n, @@ -32144,7 +32171,7 @@ function QM({ closeSidebar: r, state: l }) { - var b, L, h, G; + var b, L, C, G; const { read: a, write: c } = oo(l, [ "activeAssetId", "selectedAssetIds", @@ -32156,28 +32183,28 @@ function QM({ return { dispose: e._mjrSidebarOpenDispose || (() => { }) }; e._mjrSidebarOpenBound = !0; - const s = (W) => { + const s = (Z) => { var X, x; e._mjrFocusWithin = !0; - const f = li(W.target, ".mjr-asset-card"); + const f = li(Z.target, ".mjr-asset-card"); if (f) try { e._mjrLastFocusedCardId = ((X = f.dataset) == null ? void 0 : X.mjrAssetId) || ""; - } catch (T) { - (x = console.debug) == null || x.call(console, T); + } catch (K) { + (x = console.debug) == null || x.call(console, K); } - }, d = (W) => { - const f = W == null ? void 0 : W.relatedTarget; + }, d = (Z) => { + const f = Z == null ? void 0 : Z.relatedTarget; f && e.contains(f) || (e._mjrFocusWithin = !1); }; try { e.addEventListener("focusin", s), e.addEventListener("focusout", d); - } catch (W) { - (b = console.debug) == null || b.call(console, W); + } catch (Z) { + (b = console.debug) == null || b.call(console, Z); } try { if (!e._mjrSelectionResizeObserver) { - const W = e.parentElement; + const Z = e.parentElement; let f = null, X = null; const x = () => { try { @@ -32185,77 +32212,77 @@ function QM({ } catch { return !1; } - }, T = () => { + }, K = () => { f && cancelAnimationFrame(f), X && clearTimeout(X), f = requestAnimationFrame(() => { f = null, x() && ga(e); }), X = setTimeout(() => { X = null, x() && ga(e); }, 160); - }, v = new ResizeObserver(() => T()); - W && v.observe(W), v.observe(e), e._mjrSelectionResizeObserver = v; + }, j = new ResizeObserver(() => K()); + Z && j.observe(Z), j.observe(e), e._mjrSelectionResizeObserver = j; } - } catch (W) { - (L = console.debug) == null || L.call(console, W); + } catch (Z) { + (L = console.debug) == null || L.call(console, Z); } - const u = (W, f, X) => { + const u = (Z, f, X) => { var x; try { - const T = (X == null ? void 0 : X.has_workflow) ?? (X == null ? void 0 : X.hasWorkflow) ?? f.has_workflow, v = (X == null ? void 0 : X.has_generation_data) ?? (X == null ? void 0 : X.hasGenerationData) ?? f.has_generation_data; - T !== void 0 && (f.has_workflow = T), v !== void 0 && (f.has_generation_data = v); - const w = W.querySelector(".mjr-workflow-dot"), R = ec(f); + const K = (X == null ? void 0 : X.has_workflow) ?? (X == null ? void 0 : X.hasWorkflow) ?? f.has_workflow, j = (X == null ? void 0 : X.has_generation_data) ?? (X == null ? void 0 : X.hasGenerationData) ?? f.has_generation_data; + K !== void 0 && (f.has_workflow = K), j !== void 0 && (f.has_generation_data = j); + const w = Z.querySelector(".mjr-workflow-dot"), R = tc(f); w && R && w.replaceWith(R); - } catch (T) { - (x = console.debug) == null || x.call(console, T); + } catch (K) { + (x = console.debug) == null || x.call(console, K); } if ((X == null ? void 0 : X.rating) !== void 0 && X.rating !== f.rating) { f.rating = X.rating; - const T = W.querySelector(".mjr-thumb"), v = W.querySelector(".mjr-rating-badge"), w = n(X.rating || 0); - v && w ? v.replaceWith(w) : v && !w ? v.remove() : !v && w && T && T.appendChild(w); + const K = Z.querySelector(".mjr-thumb"), j = Z.querySelector(".mjr-rating-badge"), w = n(X.rating || 0); + j && w ? j.replaceWith(w) : j && !w ? j.remove() : !j && w && K && K.appendChild(w); } if (X != null && X.tags && JSON.stringify(X.tags) !== JSON.stringify(f.tags)) { f.tags = X.tags; - const T = W.querySelector(".mjr-tags-badge"); - if (T) { - const v = i(X.tags || []); - T.replaceWith(v); + const K = Z.querySelector(".mjr-tags-badge"); + if (K) { + const j = i(X.tags || []); + K.replaceWith(j); } } - }, I = async (W) => { - var w, R, Y, F, N, V, k, K, z, B, J, P, H, $, E, oe, M, j, O, D, q, ee, ce, ue, U, Q; - if (W.defaultPrevented) return; - const f = li(W.target, ".mjr-asset-card"); + }, I = async (Z) => { + var w, R, V, O, k, Y, N, U, z, T, J, P, E, $, H, ne, M, v, F, D, q, ee, ae, ue, B, Q; + if (Z.defaultPrevented) return; + const f = li(Z.target, ".mjr-asset-card"); if (!f) return; - const X = li(W.target, ".mjr-workflow-dot"); + const X = li(Z.target, ".mjr-workflow-dot"); if (X && f.contains(X)) { const _ = f._mjrAsset; if (!_) return; - W.preventDefault(), W.stopPropagation(); + Z.preventDefault(), Z.stopPropagation(); const le = ((w = f == null ? void 0 : f.dataset) == null ? void 0 : w.mjrAssetId) || ""; - Br(e, le ? [le] : [], le), bo({ gridContainer: e, state: l, activeId: le, readState: a, writeState: c }); - const de = await HM({ + Kr(e, le ? [le] : [], le), bo({ gridContainer: e, state: l, activeId: le, readState: a, writeState: c }); + const ce = await E2({ card: f, asset: _, sidebar: t, - onAssetUpdated: (se) => u(f, _, se) + onAssetUpdated: (de) => u(f, _, de) }); try { - const se = ((R = t == null ? void 0 : t._currentAsset) == null ? void 0 : R.id) ?? ((Y = t == null ? void 0 : t._currentFullAsset) == null ? void 0 : Y.id) ?? null; - de && ((N = (F = t == null ? void 0 : t.classList) == null ? void 0 : F.contains) != null && N.call(F, "is-open")) && se != null && String(se) === String(de.id) && await o( + const de = ((R = t == null ? void 0 : t._currentAsset) == null ? void 0 : R.id) ?? ((V = t == null ? void 0 : t._currentFullAsset) == null ? void 0 : V.id) ?? null; + ce && ((k = (O = t == null ? void 0 : t.classList) == null ? void 0 : O.contains) != null && k.call(O, "is-open")) && de != null && String(de) === String(ce.id) && await o( t, - de, + ce, (ge) => u(f, _, ge) ); - } catch (se) { - (V = console.debug) == null || V.call(console, se); + } catch (de) { + (Y = console.debug) == null || Y.call(console, de); } return; } - const x = li(W.target, "a, button, input, textarea, select, label"); + const x = li(Z.target, "a, button, input, textarea, select, label"); if (x && f.contains(x)) return; - const T = f._mjrAsset; - if (!T) return; + const K = f._mjrAsset; + if (!K) return; if (e != null && e._mjrSelectionManagedByVue) { - const _ = String(((k = f == null ? void 0 : f.dataset) == null ? void 0 : k.mjrAssetId) || "").trim(); + const _ = String(((N = f == null ? void 0 : f.dataset) == null ? void 0 : N.mjrAssetId) || "").trim(); bo({ gridContainer: e, state: l, @@ -32264,16 +32291,16 @@ function QM({ writeState: c }); try { - if ((z = (K = t == null ? void 0 : t.classList) == null ? void 0 : K.contains) != null && z.call(K, "is-open")) { + if ((z = (U = t == null ? void 0 : t.classList) == null ? void 0 : U.contains) != null && z.call(U, "is-open")) { await o( t, - T, - (le) => u(f, T, le) + K, + (le) => u(f, K, le) ); try { c("sidebarOpen", !0); } catch (le) { - (B = console.debug) == null || B.call(console, le); + (T = console.debug) == null || T.call(console, le); } } } catch (le) { @@ -32281,25 +32308,25 @@ function QM({ } return; } - if (W.preventDefault(), W.stopPropagation(), !!(W.ctrlKey || W.metaKey || W.shiftKey)) { - const _ = oc(e), le = _.indexOf(f); - if (W.shiftKey) { - let Se = []; + if (Z.preventDefault(), Z.stopPropagation(), !!(Z.ctrlKey || Z.metaKey || Z.shiftKey)) { + const _ = rc(e), le = _.indexOf(f); + if (Z.shiftKey) { + let xe = []; try { - typeof (e == null ? void 0 : e._mjrGetAssets) == "function" && (Se = e._mjrGetAssets() || []); - } catch (ke) { - (oe = console.debug) == null || oe.call(console, ke); + typeof (e == null ? void 0 : e._mjrGetAssets) == "function" && (xe = e._mjrGetAssets() || []); + } catch (Xe) { + (ne = console.debug) == null || ne.call(console, Xe); } - if (Array.isArray(Se) && Se.length) { - const ke = ((M = f == null ? void 0 : f.dataset) == null ? void 0 : M.mjrAssetId) || "", we = Se.findIndex( - (qe) => String((qe == null ? void 0 : qe.id) || "") === String(ke) - ), Je = Number(e._mjrLastSelectedIndex), $e = Number.isFinite(Je) ? Je : we; - if (we >= 0 && $e >= 0) { - const qe = Math.min($e, we), Ue = Math.max($e, we), Te = Se.slice(qe, Ue + 1).map((Oe) => String((Oe == null ? void 0 : Oe.id) || "")).filter(Boolean); - Br(e, Te, ke || Te[0] || ""), e._mjrLastSelectedIndex = we, bo({ + if (Array.isArray(xe) && xe.length) { + const Xe = ((M = f == null ? void 0 : f.dataset) == null ? void 0 : M.mjrAssetId) || "", Me = xe.findIndex( + (qe) => String((qe == null ? void 0 : qe.id) || "") === String(Xe) + ), Fe = Number(e._mjrLastSelectedIndex), it = Number.isFinite(Fe) ? Fe : Me; + if (Me >= 0 && it >= 0) { + const qe = Math.min(it, Me), Pe = Math.max(it, Me), Re = xe.slice(qe, Pe + 1).map((rt) => String((rt == null ? void 0 : rt.id) || "")).filter(Boolean); + Kr(e, Re, Xe || Re[0] || ""), e._mjrLastSelectedIndex = Me, bo({ gridContainer: e, state: l, - activeId: ke || "", + activeId: Xe || "", readState: a, writeState: c }); @@ -32307,43 +32334,43 @@ function QM({ } } } - const de = String(((j = f == null ? void 0 : f.dataset) == null ? void 0 : j.mjrAssetId) || "").trim(); + const ce = String(((v = f == null ? void 0 : f.dataset) == null ? void 0 : v.mjrAssetId) || "").trim(); le >= 0 && (e._mjrLastSelectedIndex = le); - const se = /* @__PURE__ */ new Set(); + const de = /* @__PURE__ */ new Set(); try { - const Se = (O = e.dataset) == null ? void 0 : O.mjrSelectedAssetIds; - if (Se) { - const ke = JSON.parse(Se); - if (Array.isArray(ke)) - for (const we of ke) { - const Je = String(we || "").trim(); - Je && se.add(Je); + const xe = (F = e.dataset) == null ? void 0 : F.mjrSelectedAssetIds; + if (xe) { + const Xe = JSON.parse(xe); + if (Array.isArray(Xe)) + for (const Me of Xe) { + const Fe = String(Me || "").trim(); + Fe && de.add(Fe); } } else { - const ke = String(((D = e.dataset) == null ? void 0 : D.mjrSelectedAssetId) || "").trim(); - ke && se.add(ke); + const Xe = String(((D = e.dataset) == null ? void 0 : D.mjrSelectedAssetId) || "").trim(); + Xe && de.add(Xe); } - } catch (Se) { - (q = console.debug) == null || q.call(console, Se); + } catch (xe) { + (q = console.debug) == null || q.call(console, xe); } - if (!se.size) - for (const Se of _) { - const ke = String(((ee = Se == null ? void 0 : Se.dataset) == null ? void 0 : ee.mjrAssetId) || "").trim(); - ke && (ue = (ce = Se.classList) == null ? void 0 : ce.contains) != null && ue.call(ce, "is-selected") && se.add(ke); + if (!de.size) + for (const xe of _) { + const Xe = String(((ee = xe == null ? void 0 : xe.dataset) == null ? void 0 : ee.mjrAssetId) || "").trim(); + Xe && (ue = (ae = xe.classList) == null ? void 0 : ae.contains) != null && ue.call(ae, "is-selected") && de.add(Xe); } - de && (se.has(de) ? se.delete(de) : se.add(de)); - const ge = Array.from(se), je = se.has(de) ? de : ge[0] || ""; - Br(e, ge, je), bo({ + ce && (de.has(ce) ? de.delete(ce) : de.add(ce)); + const ge = Array.from(de), Le = de.has(ce) ? ce : ge[0] || ""; + Kr(e, ge, Le), bo({ gridContainer: e, state: l, - activeId: je, + activeId: Le, readState: a, writeState: c }); return; } else { if (f.classList.contains("is-selected")) { - Br(e, [], ""), bo({ + Kr(e, [], ""), bo({ gridContainer: e, state: l, activeId: "", @@ -32353,7 +32380,7 @@ function QM({ return; } const le = (P = f == null ? void 0 : f.dataset) == null ? void 0 : P.mjrAssetId; - Br(e, le ? [le] : [], le || ""), bo({ + Kr(e, le ? [le] : [], le || ""), bo({ gridContainer: e, state: l, activeId: le || "", @@ -32361,35 +32388,35 @@ function QM({ writeState: c }); try { - ($ = (H = t == null ? void 0 : t.classList) == null ? void 0 : H.contains) != null && $.call(H, "is-open") && o( + ($ = (E = t == null ? void 0 : t.classList) == null ? void 0 : E.contains) != null && $.call(E, "is-open") && o( t, - T, - (de) => u(f, T, de) + K, + (ce) => u(f, K, ce) ); - } catch (de) { - (E = console.debug) == null || E.call(console, de); + } catch (ce) { + (H = console.debug) == null || H.call(console, ce); } } try { - ga(e), (U = f == null ? void 0 : f.focus) == null || U.call(f, { preventScroll: !0 }); + ga(e), (B = f == null ? void 0 : f.focus) == null || B.call(f, { preventScroll: !0 }); } catch (_) { (Q = console.debug) == null || Q.call(console, _); } }; e.addEventListener("click", I); - const y = async () => { - var x, T, v, w, R, Y, F, N, V, k, K; - const W = String(a("activeAssetId", "") || ""); + const A = async () => { + var x, K, j, w, R, V, O, k, Y, N, U; + const Z = String(a("activeAssetId", "") || ""); let f = null; - if (W) + if (Z) try { f = e.querySelector( - `.mjr-asset-card[data-mjr-asset-id="${Ta(W)}"]` + `.mjr-asset-card[data-mjr-asset-id="${Ka(Z)}"]` ); } catch { try { f = e.querySelector( - `.mjr-asset-card[data-mjr-asset-id="${Ta(W)}"]` + `.mjr-asset-card[data-mjr-asset-id="${Ka(Z)}"]` ); } catch (z) { (x = console.debug) == null || x.call(console, z); @@ -32398,27 +32425,27 @@ function QM({ f || (f = e.querySelector(".mjr-asset-card.is-selected")); const X = f == null ? void 0 : f._mjrAsset; if (X) { - Mm(e, f), Gm(e), bo({ + Mm(e, f), Sm(e), bo({ gridContainer: e, state: l, - activeId: (T = f == null ? void 0 : f.dataset) == null ? void 0 : T.mjrAssetId, + activeId: (K = f == null ? void 0 : f.dataset) == null ? void 0 : K.mjrAssetId, readState: a, writeState: c }); try { - const z = !!((w = (v = t == null ? void 0 : t.classList) == null ? void 0 : v.contains) != null && w.call(v, "is-open")), B = ((R = t == null ? void 0 : t._currentAsset) == null ? void 0 : R.id) ?? ((Y = t == null ? void 0 : t._currentFullAsset) == null ? void 0 : Y.id) ?? null; - if (z && B != null && String(B) === String(X.id) && typeof r == "function") { + const z = !!((w = (j = t == null ? void 0 : t.classList) == null ? void 0 : j.contains) != null && w.call(j, "is-open")), T = ((R = t == null ? void 0 : t._currentAsset) == null ? void 0 : R.id) ?? ((V = t == null ? void 0 : t._currentFullAsset) == null ? void 0 : V.id) ?? null; + if (z && T != null && String(T) === String(X.id) && typeof r == "function") { r(t); try { c("sidebarOpen", !1); } catch (J) { - (F = console.debug) == null || F.call(console, J); + (O = console.debug) == null || O.call(console, J); } - ip(e, { force: !0 }), Sm(e); + ip(e, { force: !0 }), Gm(e); return; } } catch (z) { - (N = console.debug) == null || N.call(console, z); + (k = console.debug) == null || k.call(console, z); } try { await o( @@ -32429,27 +32456,27 @@ function QM({ try { c("sidebarOpen", !0); } catch (z) { - (V = console.debug) == null || V.call(console, z); + (Y = console.debug) == null || Y.call(console, z); } - Sm(e), (k = f == null ? void 0 : f.focus) == null || k.call(f, { preventScroll: !0 }); + Gm(e), (N = f == null ? void 0 : f.focus) == null || N.call(f, { preventScroll: !0 }); } catch (z) { - (K = console.debug) == null || K.call(console, z); + (U = console.debug) == null || U.call(console, z); } } - }, S = async () => { - var x, T, v, w, R; + }, h = async () => { + var x, K, j, w, R; try { - if (!!!((T = (x = t == null ? void 0 : t.classList) == null ? void 0 : x.contains) != null && T.call(x, "is-open"))) return !1; + if (!!!((K = (x = t == null ? void 0 : t.classList) == null ? void 0 : x.contains) != null && K.call(x, "is-open"))) return !1; } catch { return !1; } - const W = String(a("activeAssetId", "") || "").trim(); - if (!W) return !1; + const Z = String(a("activeAssetId", "") || "").trim(); + if (!Z) return !1; let f = null; try { - f = Zs(e, W); - } catch (Y) { - (v = console.debug) == null || v.call(console, Y); + f = As(e, Z); + } catch (V) { + (j = console.debug) == null || j.call(console, V); } const X = f == null ? void 0 : f._mjrAsset; if (!X) return !1; @@ -32457,71 +32484,71 @@ function QM({ await o( t, X, - (Y) => u(f, X, Y) + (V) => u(f, X, V) ); try { c("sidebarOpen", !0); - } catch (Y) { - (w = console.debug) == null || w.call(console, Y); + } catch (V) { + (w = console.debug) == null || w.call(console, V); } return !0; - } catch (Y) { - (R = console.debug) == null || R.call(console, Y); + } catch (V) { + (R = console.debug) == null || R.call(console, V); } return !1; }; - let Z = !1; - const C = () => { - var W, f; + let S = !1; + const W = () => { + var Z, f; try { - if (!((f = (W = t == null ? void 0 : t.classList) == null ? void 0 : W.contains) != null && f.call(W, "is-open"))) return; + if (!((f = (Z = t == null ? void 0 : t.classList) == null ? void 0 : Z.contains) != null && f.call(Z, "is-open"))) return; } catch { return; } - Z || (Z = !0, queueMicrotask(async () => { + S || (S = !0, queueMicrotask(async () => { var X; - Z = !1; + S = !1; try { - await S(); + await h(); } catch (x) { (X = console.debug) == null || X.call(console, x); } })); }; - e.addEventListener("mjr:selection-changed", C); - const g = (W) => { - var v, w, R, Y, F, N; - if (W.defaultPrevented || (((w = (v = W.key) == null ? void 0 : v.toLowerCase) == null ? void 0 : w.call(v)) || "") !== "d" || W.ctrlKey || W.metaKey || W.altKey || ((R = W.target) == null ? void 0 : R.isContentEditable) || ((F = (Y = W.target) == null ? void 0 : Y.closest) == null ? void 0 : F.call(Y, "input, textarea, select, [contenteditable='true']"))) return; - const x = li(W.target, ".mjr-asset-card"); - !x || !x._mjrAsset || (W.preventDefault(), W.stopPropagation(), Mm(e, x), Gm(e), bo({ + e.addEventListener("mjr:selection-changed", W); + const g = (Z) => { + var j, w, R, V, O, k; + if (Z.defaultPrevented || (((w = (j = Z.key) == null ? void 0 : j.toLowerCase) == null ? void 0 : w.call(j)) || "") !== "d" || Z.ctrlKey || Z.metaKey || Z.altKey || ((R = Z.target) == null ? void 0 : R.isContentEditable) || ((O = (V = Z.target) == null ? void 0 : V.closest) == null ? void 0 : O.call(V, "input, textarea, select, [contenteditable='true']"))) return; + const x = li(Z.target, ".mjr-asset-card"); + !x || !x._mjrAsset || (Z.preventDefault(), Z.stopPropagation(), Mm(e, x), Sm(e), bo({ gridContainer: e, state: l, - activeId: (N = x == null ? void 0 : x.dataset) == null ? void 0 : N.mjrAssetId, + activeId: (k = x == null ? void 0 : x.dataset) == null ? void 0 : k.mjrAssetId, readState: a, writeState: c - }), y()); + }), A()); }; e.addEventListener("keydown", g); - const A = () => { - var W; + const y = () => { + var Z; try { c("sidebarOpen", !1); } catch (f) { - (W = console.debug) == null || W.call(console, f); + (Z = console.debug) == null || Z.call(console, f); } }; - (h = t == null ? void 0 : t.addEventListener) == null || h.call(t, "mjr:sidebar-closed", A); + (C = t == null ? void 0 : t.addEventListener) == null || C.call(t, "mjr:sidebar-closed", y); try { - e._mjrOpenDetails = y; - } catch (W) { - (G = console.debug) == null || G.call(console, W); + e._mjrOpenDetails = A; + } catch (Z) { + (G = console.debug) == null || G.call(console, Z); } const p = () => { - var W, f, X, x, T, v, w, R, Y, F, N, V, k, K; + var Z, f, X, x, K, j, w, R, V, O, k, Y, N, U; try { e.removeEventListener("click", I); } catch (z) { - (W = console.debug) == null || W.call(console, z); + (Z = console.debug) == null || Z.call(console, z); } try { e.removeEventListener("focusin", s); @@ -32539,44 +32566,44 @@ function QM({ (x = console.debug) == null || x.call(console, z); } try { - e.removeEventListener("mjr:selection-changed", C); + e.removeEventListener("mjr:selection-changed", W); } catch (z) { - (T = console.debug) == null || T.call(console, z); + (K = console.debug) == null || K.call(console, z); } try { - (v = t == null ? void 0 : t.removeEventListener) == null || v.call(t, "mjr:sidebar-closed", A); + (j = t == null ? void 0 : t.removeEventListener) == null || j.call(t, "mjr:sidebar-closed", y); } catch (z) { (w = console.debug) == null || w.call(console, z); } try { - e._mjrOpenDetails === y && delete e._mjrOpenDetails; + e._mjrOpenDetails === A && delete e._mjrOpenDetails; } catch (z) { (R = console.debug) == null || R.call(console, z); } try { - (F = (Y = e._mjrSelectionResizeObserver) == null ? void 0 : Y.disconnect) == null || F.call(Y); - } catch (z) { - (N = console.debug) == null || N.call(console, z); - } - try { - delete e._mjrSelectionResizeObserver; - } catch (z) { - (V = console.debug) == null || V.call(console, z); - } - try { - delete e._mjrSidebarOpenBound; + (O = (V = e._mjrSelectionResizeObserver) == null ? void 0 : V.disconnect) == null || O.call(V); } catch (z) { (k = console.debug) == null || k.call(console, z); } + try { + delete e._mjrSelectionResizeObserver; + } catch (z) { + (Y = console.debug) == null || Y.call(console, z); + } + try { + delete e._mjrSidebarOpenBound; + } catch (z) { + (N = console.debug) == null || N.call(console, z); + } try { delete e._mjrSidebarOpenDispose; } catch (z) { - (K = console.debug) == null || K.call(console, z); + (U = console.debug) == null || U.call(console, z); } }; - return e._mjrSidebarOpenDispose = p, { dispose: p, toggleDetails: y, refreshActiveAsset: S }; + return e._mjrSidebarOpenDispose = p, { dispose: p, toggleDetails: A, refreshActiveAsset: h }; } -function _M({ +function _2({ onTriggerScan: e, getScanContext: t, onToggleDetails: n, @@ -32600,34 +32627,34 @@ function _M({ "Escape", "Tab" ]), u = () => a || c, I = (g) => { - var A, p; + var y, p; if (u()) return !0; try { const b = g == null ? void 0 : g.target; if (s && b && typeof s.contains == "function" && (s === b || s.contains(b))) return !0; } catch (b) { - (A = console.debug) == null || A.call(console, b); + (y = console.debug) == null || y.call(console, b); } try { return !!(s != null && s.isConnected) && document.activeElement === document.body; } catch (b) { return (p = console.debug) == null || p.call(console, b), !1; } - }, y = (g) => { - var A, p, b, L, h; + }, A = (g) => { + var y, p, b, L, C; try { - if ((p = (A = g == null ? void 0 : g.target) == null ? void 0 : A.closest) == null ? void 0 : p.call(A, ".mjr-grid")) return !0; + if ((p = (y = g == null ? void 0 : g.target) == null ? void 0 : y.closest) == null ? void 0 : p.call(y, ".mjr-grid")) return !0; } catch (G) { (b = console.debug) == null || b.call(console, G); } try { - const G = So(); + const G = Go(); return G ? document.activeElement === document.body ? !0 : ((L = G.contains) == null ? void 0 : L.call(G, document.activeElement)) || !1 : !1; } catch (G) { - return (h = console.debug) == null || h.call(console, G), !1; + return (C = console.debug) == null || C.call(console, G), !1; } - }, S = { + }, h = { focusin: () => { a = !0; }, @@ -32641,100 +32668,100 @@ function _M({ c = !1; }, keydown: (g) => { - var b, L, h, G, W, f, X, x, T, v, w, R, Y, F, N, V; + var b, L, C, G, Z, f, X, x, K, j, w, R, V, O, k, Y; if (Mo().scope === "viewer" || !I(g)) return; - const A = ((L = (b = g.key) == null ? void 0 : b.toLowerCase) == null ? void 0 : L.call(b)) || "", p = ((h = g.target) == null ? void 0 : h.isContentEditable) || ((W = (G = g.target) == null ? void 0 : G.closest) == null ? void 0 : W.call(G, "input, textarea, select, [contenteditable='true']")); - if (A === "s" && (g.ctrlKey || g.metaKey)) { + const y = ((L = (b = g.key) == null ? void 0 : b.toLowerCase) == null ? void 0 : L.call(b)) || "", p = ((C = g.target) == null ? void 0 : C.isContentEditable) || ((Z = (G = g.target) == null ? void 0 : G.closest) == null ? void 0 : Z.call(G, "input, textarea, select, [contenteditable='true']")); + if (y === "s" && (g.ctrlKey || g.metaKey)) { g.preventDefault(), g.stopPropagation(), (f = g.stopImmediatePropagation) == null || f.call(g); try { - const k = typeof t == "function" ? t() : null; - e == null || e(k); - } catch (k) { - (X = console.debug) == null || X.call(console, k); + const N = typeof t == "function" ? t() : null; + e == null || e(N); + } catch (N) { + (X = console.debug) == null || X.call(console, N); } return; } - if ((A === "f" || A === "k") && (g.ctrlKey || g.metaKey)) { + if ((y === "f" || y === "k") && (g.ctrlKey || g.metaKey)) { g.preventDefault(), g.stopPropagation(), (x = g.stopImmediatePropagation) == null || x.call(g); try { o == null || o(); - } catch (k) { - (T = console.debug) == null || T.call(console, k); + } catch (N) { + (K = console.debug) == null || K.call(console, N); } return; } - if (A === "h" && (g.ctrlKey || g.metaKey)) { - g.preventDefault(), g.stopPropagation(), (v = g.stopImmediatePropagation) == null || v.call(g); + if (y === "h" && (g.ctrlKey || g.metaKey)) { + g.preventDefault(), g.stopPropagation(), (j = g.stopImmediatePropagation) == null || j.call(g); try { r == null || r(); - } catch (k) { - (w = console.debug) == null || w.call(console, k); + } catch (N) { + (w = console.debug) == null || w.call(console, N); } return; } - if (A === "d" && !g.ctrlKey && !g.metaKey && !g.altKey) { + if (y === "d" && !g.ctrlKey && !g.metaKey && !g.altKey) { if (p) return; g.preventDefault(), g.stopPropagation(), (R = g.stopImmediatePropagation) == null || R.call(g); try { n == null || n(); - } catch (k) { - (Y = console.debug) == null || Y.call(console, k); + } catch (N) { + (V = console.debug) == null || V.call(console, N); } return; } - if (A === "v" && !g.altKey && !(g.shiftKey && (g.ctrlKey || g.metaKey))) { + if (y === "v" && !g.altKey && !(g.shiftKey && (g.ctrlKey || g.metaKey))) { if (p) return; - g.preventDefault(), g.stopPropagation(), (F = g.stopImmediatePropagation) == null || F.call(g); + g.preventDefault(), g.stopPropagation(), (O = g.stopImmediatePropagation) == null || O.call(g); try { i == null || i(); - } catch (k) { - (N = console.debug) == null || N.call(console, k); + } catch (N) { + (k = console.debug) == null || k.call(console, N); } return; } if (d.has(g.key) && I(g)) { - if (p || y(g)) return; - g.preventDefault(), g.stopPropagation(), (V = g.stopImmediatePropagation) == null || V.call(g); + if (p || A(g)) return; + g.preventDefault(), g.stopPropagation(), (Y = g.stopImmediatePropagation) == null || Y.call(g); } } - }, Z = (g) => { - var A, p; + }, S = (g) => { + var y, p; if (!(!g || s === g)) { - s && C(), s = g; + s && W(), s = g; try { - s.addEventListener("focusin", S.focusin), s.addEventListener("focusout", S.focusout), s.addEventListener("mouseenter", S.mouseenter), s.addEventListener("mouseleave", S.mouseleave); + s.addEventListener("focusin", h.focusin), s.addEventListener("focusout", h.focusout), s.addEventListener("mouseenter", h.mouseenter), s.addEventListener("mouseleave", h.mouseleave); } catch (b) { - (A = console.debug) == null || A.call(console, b); + (y = console.debug) == null || y.call(console, b); } try { - window.addEventListener("keydown", S.keydown, { capture: !0 }); + window.addEventListener("keydown", h.keydown, { capture: !0 }); } catch (b) { (p = console.debug) == null || p.call(console, b); } wr("panel"); } - }, C = () => { - var g, A; + }, W = () => { + var g, y; if (s) { try { - s.removeEventListener("focusin", S.focusin), s.removeEventListener("focusout", S.focusout), s.removeEventListener("mouseenter", S.mouseenter), s.removeEventListener("mouseleave", S.mouseleave); + s.removeEventListener("focusin", h.focusin), s.removeEventListener("focusout", h.focusout), s.removeEventListener("mouseenter", h.mouseenter), s.removeEventListener("mouseleave", h.mouseleave); } catch (p) { (g = console.debug) == null || g.call(console, p); } try { - window.removeEventListener("keydown", S.keydown, { capture: !0 }); + window.removeEventListener("keydown", h.keydown, { capture: !0 }); } catch (p) { - (A = console.debug) == null || A.call(console, p); + (y = console.debug) == null || y.call(console, p); } Mo().scope === "panel" && wr(null), s = null; } }; - return { bind: Z, dispose: C }; + return { bind: S, dispose: W }; } function xm(e) { return Array.isArray(e) ? e.map((t) => String(t || "").trim()).filter(Boolean) : []; } -function $M({ +function $2({ gridContainer: e, readSelectedAssetIds: t = () => [], readActiveAssetId: n = () => "", @@ -32757,15 +32784,15 @@ function $M({ const a = (d) => { var u, I; try { - const y = (d == null ? void 0 : d.detail) || {}, S = xm(y.selectedIds); - i(S), o(String(y.activeId || S[0] || "").trim()); - } catch (y) { - (u = console.debug) == null || u.call(console, y); + const A = (d == null ? void 0 : d.detail) || {}, h = xm(A.selectedIds); + i(h), o(String(A.activeId || h[0] || "").trim()); + } catch (A) { + (u = console.debug) == null || u.call(console, A); } try { r((d == null ? void 0 : d.detail) || {}); - } catch (y) { - (I = console.debug) == null || I.call(console, y); + } catch (A) { + (I = console.debug) == null || I.call(console, A); } }; try { @@ -32777,13 +32804,13 @@ function $M({ } return { restoreSelectionState: ({ scrollTop: d = 0 } = {}) => { - var y, S, Z, C; + var A, h, S, W; const u = xm(t()), I = String(n() || u[0] || "").trim(); if (!(!u.length && !I)) { try { typeof (e == null ? void 0 : e._mjrSetSelection) == "function" && e._mjrSetSelection(u, I); } catch (g) { - (y = console.debug) == null || y.call(console, g); + (A = console.debug) == null || A.call(console, g); } if (I) { try { @@ -32792,18 +32819,18 @@ function $M({ return; } } catch (g) { - (S = console.debug) == null || S.call(console, g); + (h = console.debug) == null || h.call(console, g); } try { const g = e.querySelector( - `.mjr-asset-card[data-mjr-asset-id="${vC(I)}"]` + `.mjr-asset-card[data-mjr-asset-id="${vh(I)}"]` ); - (Z = g == null ? void 0 : g.scrollIntoView) == null || Z.call(g, { + (S = g == null ? void 0 : g.scrollIntoView) == null || S.call(g, { block: "nearest", behavior: "instant" }); } catch (g) { - (C = console.debug) == null || C.call(console, g); + (W = console.debug) == null || W.call(console, g); } } } @@ -32818,7 +32845,7 @@ function $M({ } }; } -function e2(e) { +function eM(e) { var t; try { if (typeof requestAnimationFrame == "function") { @@ -32830,7 +32857,7 @@ function e2(e) { } setTimeout(e, 0); } -function t2(e = {}, t = "*") { +function tM(e = {}, t = "*") { return e.scope === "output" && !e.collectionId && t === "*" && !e.kindFilter && !e.workflowOnly && !(Number(e.minRating || 0) > 0) && !(Number(e.minSizeMB || 0) > 0) && !(Number(e.maxSizeMB || 0) > 0) && !(Number(e.minWidth || 0) > 0) && !(Number(e.minHeight || 0) > 0) && !(Number(e.maxWidth || 0) > 0) && !(Number(e.maxHeight || 0) > 0) && !String(e.workflowType || "").trim() && !e.dateRangeFilter && !e.dateExactFilter; } function op({ @@ -32849,182 +32876,182 @@ function op({ toggleSidebarDetails: u = () => { }, getQuery: I = () => "*", - getScope: y = () => "output", - loadAssets: S = null, - lifecycleSignal: Z = null + getScope: A = () => "output", + loadAssets: h = null, + lifecycleSignal: S = null } = {}) { - let C = 0, g = !1, A = null, p = null, b = null, L = 0, h = !0; + let W = 0, g = !1, y = null, p = null, b = null, L = 0, C = !0; const G = () => { - var Y; + var V; try { - const F = typeof n == "function" ? n() : t; - return md(e, F || t || null); - } catch (F) { - return (Y = console.debug) == null || Y.call(console, F), !1; + const O = typeof n == "function" ? n() : t; + return md(e, O || t || null); + } catch (O) { + return (V = console.debug) == null || V.call(console, O), !1; } - }, W = (Y = null, { resumeQueuedReload: F = !0 } = {}) => { - if (h = typeof Y == "boolean" ? Y : G(), !h) - return A && (clearTimeout(A), A = null), h; - if (b && !A) { - const N = b, V = L || 50; - b = null, L = 0, v(N, Math.min(V, 50)); + }, Z = (V = null, { resumeQueuedReload: O = !0 } = {}) => { + if (C = typeof V == "boolean" ? V : G(), !C) + return y && (clearTimeout(y), y = null), C; + if (b && !y) { + const k = b, Y = L || 50; + b = null, L = 0, j(k, Math.min(Y, 50)); } - return F && C > 0 && !g && X().catch((N) => { - var V; - return (V = console.debug) == null ? void 0 : V.call(console, N); - }), h; + return O && W > 0 && !g && X().catch((k) => { + var Y; + return (Y = console.debug) == null ? void 0 : Y.call(console, k); + }), C; }, f = () => { - var Y, F; + var V, O; try { - return ((Y = e == null ? void 0 : e.querySelector) == null ? void 0 : Y.call(e, ".mjr-asset-card")) != null; - } catch (N) { - return (F = console.debug) == null || F.call(console, N), !1; + return ((V = e == null ? void 0 : e.querySelector) == null ? void 0 : V.call(e, ".mjr-asset-card")) != null; + } catch (k) { + return (O = console.debug) == null || O.call(console, k), !1; } }, X = async () => { - var Y; - if (!(!e || !(i != null && i.reloadGrid)) && (C += 1, !!W(null, { resumeQueuedReload: !1 }) && !g)) { + var V; + if (!(!e || !(i != null && i.reloadGrid)) && (W += 1, !!Z(null, { resumeQueuedReload: !1 }) && !g)) { g = !0; try { - for (; C > 0; ) { - if (!W(null, { resumeQueuedReload: !1 })) return; - C = 0; - const F = typeof o == "function" ? o(e) : null; - if (await i.reloadGrid(), !W(null, { resumeQueuedReload: !1 })) return; - if (F && typeof r == "function") + for (; W > 0; ) { + if (!Z(null, { resumeQueuedReload: !1 })) return; + W = 0; + const O = typeof o == "function" ? o(e) : null; + if (await i.reloadGrid(), !Z(null, { resumeQueuedReload: !1 })) return; + if (O && typeof r == "function") try { - const N = Number(a() || 0) || 0, V = Number((F == null ? void 0 : F.scrollTop) || 0) || 0; - if (N > V + 8) + const k = Number(a() || 0) || 0, Y = Number((O == null ? void 0 : O.scrollTop) || 0) || 0; + if (k > Y + 8) continue; - await r(e, F); - } catch (N) { - (Y = console.debug) == null || Y.call(console, N); + await r(e, O); + } catch (k) { + (V = console.debug) == null || V.call(console, k); } } } finally { g = !1; } } - }, x = async (Y) => { - var F; + }, x = async (V) => { + var O; if (typeof l == "function") - return l(Y); + return l(V); try { - await Y; - } catch (N) { - (F = console.debug) == null || F.call(console, N); + await V; + } catch (k) { + (O = console.debug) == null || O.call(console, k); } - e2(() => { - var V, k, K; - const N = Number(a() || 0) || 0; - if (N > 0) + eM(() => { + var Y, N, U; + const k = Number(a() || 0) || 0; + if (k > 0) try { - t.scrollTop = N; + t.scrollTop = k; } catch (z) { - (V = console.debug) == null || V.call(console, z); + (Y = console.debug) == null || Y.call(console, z); } try { - c({ scrollTop: N }); + c({ scrollTop: k }); } catch (z) { - (k = console.debug) == null || k.call(console, z); + (N = console.debug) == null || N.call(console, z); } if (d() && s()) try { u(); } catch (z) { - (K = console.debug) == null || K.call(console, z); + (U = console.debug) == null || U.call(console, z); } }); - }, T = async (Y) => { - var N, V, k, K; + }, K = async (V) => { + var k, Y, N, U; try { - await Y; + await V; } catch (z) { - (N = console.debug) == null || N.call(console, z); + (k = console.debug) == null || k.call(console, z); } - if (!e || typeof S != "function" || Z != null && Z.aborted) return; - if (!W()) { - b = Y, L = 50; + if (!e || typeof h != "function" || S != null && S.aborted) return; + if (!Z()) { + b = V, L = 50; return; } - let F = !1; + let O = !1; try { - F = e.querySelector(".mjr-asset-card") != null; + O = e.querySelector(".mjr-asset-card") != null; } catch (z) { - (V = console.debug) == null || V.call(console, z); + (Y = console.debug) == null || Y.call(console, z); } - if (!F && String(y() || "output") === "output" && String(I() || "*") === "*") + if (!O && String(A() || "output") === "output" && String(I() || "*") === "*") try { - const z = await Ft(`${ct.HEALTH_COUNTERS}?scope=output`, { - signal: Z || void 0 + const z = await Ft(`${st.HEALTH_COUNTERS}?scope=output`, { + signal: S || void 0 }); - z != null && z.ok && (((k = z.data) == null ? void 0 : k.total_assets) || 0) > 0 && await S(e); + z != null && z.ok && (((N = z.data) == null ? void 0 : N.total_assets) || 0) > 0 && await h(e); } catch (z) { - (K = console.debug) == null || K.call(console, z); + (U = console.debug) == null || U.call(console, z); } - }, v = (Y, F = 2e3) => (A && clearTimeout(A), W() ? (b = null, L = 0, A = setTimeout(() => { - A = null, T(Y).catch(() => { + }, j = (V, O = 2e3) => (y && clearTimeout(y), Z() ? (b = null, L = 0, y = setTimeout(() => { + y = null, K(V).catch(() => { }); - }, F), A) : (b = Y, L = F, null)); + }, O), y) : (b = V, L = O, null)); return { queuedReload: X, restoreUiState: x, - scheduleAutoLoad: v, + scheduleAutoLoad: j, createCountersUpdateHandler: ({ - state: Y = {}, - getStableQuery: F = () => { - var V; - return String(((V = e == null ? void 0 : e.dataset) == null ? void 0 : V.mjrQuery) || "*").trim() || "*"; + state: V = {}, + getStableQuery: O = () => { + var Y; + return String(((Y = e == null ? void 0 : e.dataset) == null ? void 0 : Y.mjrQuery) || "*").trim() || "*"; }, - getRecentUserInteractionAt: N = () => 0 + getRecentUserInteractionAt: k = () => 0 } = {}) => { - const V = (globalThis == null ? void 0 : globalThis.window) ?? globalThis; - let k = null, K = null, z = null, B = !1, J = 0; + const Y = (globalThis == null ? void 0 : globalThis.window) ?? globalThis; + let N = null, U = null, z = null, T = !1, J = 0; return async (P = {}) => { - var Q, _, le, de, se; - if (!B) { - B = !0, k = P.last_scan_end, K = P.last_index_end, z = Number(P.total_assets ?? null); + var Q, _, le, ce, de; + if (!T) { + T = !0, N = P.last_scan_end, U = P.last_index_end, z = Number(P.total_assets ?? null); return; } - const H = P.last_scan_end && P.last_scan_end !== k, $ = P.last_index_end && P.last_index_end !== K, E = Number(P.total_assets ?? null), oe = String(F() || "*").trim() || "*", M = t2(Y, oe), j = Number.isFinite(E) && Number.isFinite(z) ? E - z : 0, O = Math.max( + const E = P.last_scan_end && P.last_scan_end !== N, $ = P.last_index_end && P.last_index_end !== U, H = Number(P.total_assets ?? null), ne = String(O() || "*").trim() || "*", M = tM(V, ne), v = Number.isFinite(H) && Number.isFinite(z) ? H - z : 0, F = Math.max( 0, - Number((V == null ? void 0 : V.__mjrLastAssetUpsertCount) || 0) || 0 - ), D = j >= 20; - if (Number.isFinite(E) && (z = E), !M) { - k = P.last_scan_end, K = P.last_index_end; + Number((Y == null ? void 0 : Y.__mjrLastAssetUpsertCount) || 0) || 0 + ), D = v >= 20; + if (Number.isFinite(H) && (z = H), !M) { + N = P.last_scan_end, U = P.last_index_end; return; } - const ee = Date.now() - Number((V == null ? void 0 : V.__mjrLastAssetUpsert) || 0) < 15e3, ce = ee && j > 0 && O > 0 && j <= O + 8, ue = D && !H && !$ && f(); - $ && (K = P.last_index_end); - const U = $ && !H && !D && !ee; - if (ce) { - k = P.last_scan_end, K = P.last_index_end; + const ee = Date.now() - Number((Y == null ? void 0 : Y.__mjrLastAssetUpsert) || 0) < 15e3, ae = ee && v > 0 && F > 0 && v <= F + 8, ue = D && !E && !$ && f(); + $ && (U = P.last_index_end); + const B = $ && !E && !D && !ee; + if (ae) { + N = P.last_scan_end, U = P.last_index_end; try { - V.__mjrLastAssetUpsertCount = 0; + Y.__mjrLastAssetUpsertCount = 0; } catch (ge) { (Q = console.debug) == null || Q.call(console, ge); } return; } if (ue) { - k = P.last_scan_end, K = P.last_index_end; + N = P.last_scan_end, U = P.last_index_end; return; } - if (!ee && !(!H && !D && !U) && W()) { + if (!ee && !(!E && !D && !B) && Z()) { try { if (Date.now() - Number(J || 0) < 15e3) return; } catch (ge) { (_ = console.debug) == null || _.call(console, ge); } try { - if (Date.now() - Number(N() || 0) < 2e3) return; + if (Date.now() - Number(k() || 0) < 2e3) return; } catch (ge) { (le = console.debug) == null || le.call(console, ge); } - k = P.last_scan_end, K = P.last_index_end; + N = P.last_scan_end, U = P.last_index_end; try { await X(); } catch (ge) { - (de = console.debug) == null || de.call(console, ge); + (ce = console.debug) == null || ce.call(console, ge); } try { J = Date.now(); @@ -33032,95 +33059,95 @@ function op({ J = 0; } try { - V.__mjrLastAssetUpsertCount = 0; + Y.__mjrLastAssetUpsertCount = 0; } catch (ge) { - (se = console.debug) == null || se.call(console, ge); + (de = console.debug) == null || de.call(console, ge); } } }; }, bindSearchInput: ({ - searchInputEl: Y, - lifecycleSignal: F = null, - debounceMs: N = 200, - onQueryChanged: V = () => { + searchInputEl: V, + lifecycleSignal: O = null, + debounceMs: k = 200, + onQueryChanged: Y = () => { }, - onBeforeReload: k = () => { + onBeforeReload: N = () => { }, - startSearchTimer: K = () => { + startSearchTimer: U = () => { }, reloadGrid: z = () => { } } = {}) => { - if (!Y) return () => { + if (!V) return () => { }; - let B = ""; + let T = ""; const J = () => { - var $, E, oe; + var $, H, ne; try { - k(); + N(); } catch (M) { ($ = console.debug) == null || $.call(console, M); } try { - K(); + U(); } catch (M) { - (E = console.debug) == null || E.call(console, M); + (H = console.debug) == null || H.call(console, M); } try { z(); } catch (M) { - (oe = console.debug) == null || oe.call(console, M); + (ne = console.debug) == null || ne.call(console, M); } }, P = ($) => { - var oe, M; - const E = ((oe = $ == null ? void 0 : $.target) == null ? void 0 : oe.value) ?? ""; - if (E !== B) { - B = E; + var ne, M; + const H = ((ne = $ == null ? void 0 : $.target) == null ? void 0 : ne.value) ?? ""; + if (H !== T) { + T = H; try { - V(E); - } catch (j) { - (M = console.debug) == null || M.call(console, j); + Y(H); + } catch (v) { + (M = console.debug) == null || M.call(console, v); } - if (p && clearTimeout(p), E.length === 0 || E === "*") { + if (p && clearTimeout(p), H.length === 0 || H === "*") { J(); return; } p = setTimeout(() => { p = null, J(); - }, N); + }, k); } - }, H = ($) => { + }, E = ($) => { ($ == null ? void 0 : $.key) === "Enter" && (p && (clearTimeout(p), p = null), J()); }; - return Y.addEventListener("input", P, { - signal: F || void 0 - }), Y.addEventListener("keypress", H, { - signal: F || void 0 + return V.addEventListener("input", P, { + signal: O || void 0 + }), V.addEventListener("keypress", E, { + signal: O || void 0 }), () => { - var $, E; + var $, H; p && (clearTimeout(p), p = null); try { - Y.removeEventListener("input", P); - } catch (oe) { - ($ = console.debug) == null || $.call(console, oe); + V.removeEventListener("input", P); + } catch (ne) { + ($ = console.debug) == null || $.call(console, ne); } try { - Y.removeEventListener("keypress", H); - } catch (oe) { - (E = console.debug) == null || E.call(console, oe); + V.removeEventListener("keypress", E); + } catch (ne) { + (H = console.debug) == null || H.call(console, ne); } }; }, - setVisibility(Y = null) { - return W(Y); + setVisibility(V = null) { + return Z(V); }, dispose() { - A && (clearTimeout(A), A = null), b = null, L = 0, p && (clearTimeout(p), p = null); + y && (clearTimeout(y), y = null), b = null, L = 0, p && (clearTimeout(p), p = null); } }; } -function n2(e, { useComfyThemeUI: t }) { +function nM(e, { useComfyThemeUI: t }) { var r, l, a; t ? e.classList.add("mjr-assets-manager") : e.classList.remove("mjr-assets-manager"); const n = e.parentElement || null, i = n ? { @@ -33133,7 +33160,7 @@ function n2(e, { useComfyThemeUI: t }) { } catch (c) { (r = console.debug) == null || r.call(console, c); } - ja(); + va(); for (const c of [ () => { var s; @@ -33174,7 +33201,7 @@ function n2(e, { useComfyThemeUI: t }) { } return { popovers: o, hostWrapper: n, hostWrapperPrevStyle: i }; } -function i2({ +function iM({ container: e, state: t, sidebar: n, @@ -33188,121 +33215,121 @@ function i2({ isSidebarOpen: d, readActiveAssetId: u, getSidebarController: I, - panelLifecycleAC: y + panelLifecycleAC: A }) { - var b, L, h; - let S = ""; - const Z = () => { + var b, L, C; + let h = ""; + const S = () => { var G; try { - const W = Xn(); - return !!(((G = W == null ? void 0 : W.ai) == null ? void 0 : G.vectorSearchEnabled) ?? !0); + const Z = kn(); + return !!(((G = Z == null ? void 0 : Z.ai) == null ? void 0 : G.vectorSearchEnabled) ?? !0); } catch { return !0; } - }, C = (G) => { + }, W = (G) => { var f, X, x; - const W = !!G; + const Z = !!G; try { - e.classList.toggle("mjr-ai-disabled", !W); - } catch (T) { - (f = console.debug) == null || f.call(console, T); + e.classList.toggle("mjr-ai-disabled", !Z); + } catch (K) { + (f = console.debug) == null || f.call(console, K); } try { - r.disabled = !W, r.title = W ? a : c; - } catch (T) { - (X = console.debug) == null || X.call(console, T); + r.disabled = !Z, r.title = Z ? a : c; + } catch (K) { + (X = console.debug) == null || X.call(console, K); } try { - l == null || l(W); - } catch (T) { - (x = console.debug) == null || x.call(console, T); + l == null || l(Z); + } catch (K) { + (x = console.debug) == null || x.call(console, K); } }, g = (G) => { - var x, T, v, w, R, Y; - const W = String(G || "right").toLowerCase() === "left" ? "left" : "right"; - if (S === W) return; - S = W; + var x, K, j, w, R, V; + const Z = String(G || "right").toLowerCase() === "left" ? "left" : "right"; + if (h === Z) return; + h = Z; let f = 0, X = 0; try { f = Number((o == null ? void 0 : o.scrollTop) || 0) || 0, X = Number((o == null ? void 0 : o.scrollLeft) || 0) || 0; - } catch (F) { - (x = console.debug) == null || x.call(console, F); + } catch (O) { + (x = console.debug) == null || x.call(console, O); } try { - n.dataset.position = W; - const F = (v = (T = n.classList) == null ? void 0 : T.contains) == null ? void 0 : v.call(T, "is-open"), N = "var(--mjr-border, rgba(255,255,255,0.12))"; - n.style.borderLeft = W === "left" ? "none" : F ? `1px solid ${N}` : "none", n.style.borderRight = W === "left" && F ? `1px solid ${N}` : "none"; - } catch (F) { - (w = console.debug) == null || w.call(console, F); + n.dataset.position = Z; + const O = (j = (K = n.classList) == null ? void 0 : K.contains) == null ? void 0 : j.call(K, "is-open"), k = "var(--mjr-border, rgba(255,255,255,0.12))"; + n.style.borderLeft = Z === "left" ? "none" : O ? `1px solid ${k}` : "none", n.style.borderRight = Z === "left" && O ? `1px solid ${k}` : "none"; + } catch (O) { + (w = console.debug) == null || w.call(console, O); } try { - W === "left" ? (i.appendChild(n), i.appendChild(o), i.insertBefore(n, i.firstChild)) : (i.appendChild(o), i.appendChild(n)); - } catch (F) { - (R = console.debug) == null || R.call(console, F); + Z === "left" ? (i.appendChild(n), i.appendChild(o), i.insertBefore(n, i.firstChild)) : (i.appendChild(o), i.appendChild(n)); + } catch (O) { + (R = console.debug) == null || R.call(console, O); } try { requestAnimationFrame(() => { - var F; + var O; try { o.scrollTop = f, o.scrollLeft = X; - } catch (N) { - (F = console.debug) == null || F.call(console, N); + } catch (k) { + (O = console.debug) == null || O.call(console, k); } }); } catch { try { o.scrollTop = f, o.scrollLeft = X; - } catch (F) { - (Y = console.debug) == null || Y.call(console, F); + } catch (O) { + (V = console.debug) == null || V.call(console, O); } } - }, A = async (G) => { - var x, T, v, w; - const W = String(G || t.scope || "output").toLowerCase(), f = Xn(), X = !!((x = f == null ? void 0 : f.watcher) != null && x.enabled); - if (W === "custom") { + }, y = async (G) => { + var x, K, j, w; + const Z = String(G || t.scope || "output").toLowerCase(), f = kn(), X = !!((x = f == null ? void 0 : f.watcher) != null && x.enabled); + if (Z === "custom") { try { await Ma(!1); } catch (R) { - (T = console.debug) == null || T.call(console, R); + (K = console.debug) == null || K.call(console, R); } return; } try { await Ma(X); } catch (R) { - (v = console.debug) == null || v.call(console, R); + (j = console.debug) == null || j.call(console, R); } if (X) try { - await Xf({ scope: W, customRootId: "" }); + await Nf({ scope: Z, customRootId: "" }); } catch (R) { (w = console.debug) == null || w.call(console, R); } }, p = (G) => { - var v, w, R, Y, F, N, V, k, K, z, B; - const W = String(((v = G == null ? void 0 : G.detail) == null ? void 0 : v.key) || "").trim(), f = W === "__init__", X = f || W.startsWith("grid.") || W.startsWith("infiniteScroll.") || W.startsWith("siblings.") || W.startsWith("search.") || W.startsWith("rtHydrate.") || W.startsWith("workflowMinimap."), x = f || W.startsWith("sidebar.") || W.startsWith("ai."), T = f || W.startsWith("watcher."); + var j, w, R, V, O, k, Y, N, U, z, T; + const Z = String(((j = G == null ? void 0 : G.detail) == null ? void 0 : j.key) || "").trim(), f = Z === "__init__", X = f || Z.startsWith("grid.") || Z.startsWith("infiniteScroll.") || Z.startsWith("siblings.") || Z.startsWith("search.") || Z.startsWith("rtHydrate.") || Z.startsWith("workflowMinimap."), x = f || Z.startsWith("sidebar.") || Z.startsWith("ai."), K = f || Z.startsWith("watcher."); try { - const J = Xn(), P = !!(((w = J == null ? void 0 : J.ai) == null ? void 0 : w.vectorSearchEnabled) ?? !0), H = String(((R = J == null ? void 0 : J.ui) == null ? void 0 : R.cardHoverColor) || "").trim(), $ = String(((Y = J == null ? void 0 : J.ui) == null ? void 0 : Y.cardSelectionColor) || "").trim(), E = String(((F = J == null ? void 0 : J.ui) == null ? void 0 : F.ratingColor) || "").trim(), oe = String(((N = J == null ? void 0 : J.ui) == null ? void 0 : N.tagColor) || "").trim(); - if (/^#[0-9a-fA-F]{3,8}$/.test(H) && document.documentElement.style.setProperty("--mjr-card-hover-color", H), /^#[0-9a-fA-F]{3,8}$/.test($) && document.documentElement.style.setProperty("--mjr-card-selection-color", $), /^#[0-9a-fA-F]{3,8}$/.test(E) && document.documentElement.style.setProperty("--mjr-rating-color", E), /^#[0-9a-fA-F]{3,8}$/.test(oe) && document.documentElement.style.setProperty("--mjr-tag-color", oe), g(((V = J.sidebar) == null ? void 0 : V.position) || "right"), C(P), X) { - const M = So() || null; - if (!f && W.startsWith("siblings.")) + const J = kn(), P = !!(((w = J == null ? void 0 : J.ai) == null ? void 0 : w.vectorSearchEnabled) ?? !0), E = String(((R = J == null ? void 0 : J.ui) == null ? void 0 : R.cardHoverColor) || "").trim(), $ = String(((V = J == null ? void 0 : J.ui) == null ? void 0 : V.cardSelectionColor) || "").trim(), H = String(((O = J == null ? void 0 : J.ui) == null ? void 0 : O.ratingColor) || "").trim(), ne = String(((k = J == null ? void 0 : J.ui) == null ? void 0 : k.tagColor) || "").trim(); + if (/^#[0-9a-fA-F]{3,8}$/.test(E) && document.documentElement.style.setProperty("--mjr-card-hover-color", E), /^#[0-9a-fA-F]{3,8}$/.test($) && document.documentElement.style.setProperty("--mjr-card-selection-color", $), /^#[0-9a-fA-F]{3,8}$/.test(H) && document.documentElement.style.setProperty("--mjr-rating-color", H), /^#[0-9a-fA-F]{3,8}$/.test(ne) && document.documentElement.style.setProperty("--mjr-tag-color", ne), g(((Y = J.sidebar) == null ? void 0 : Y.position) || "right"), W(P), X) { + const M = Go() || null; + if (!f && Z.startsWith("siblings.")) try { M == null || M.dispatchEvent(new CustomEvent("mjr:reload-grid")); } catch { M && s(M); } - else (W.startsWith("grid.") || W.startsWith("workflowMinimap.")) && M && s(M); + else (Z.startsWith("grid.") || Z.startsWith("workflowMinimap.")) && M && s(M); } - x && d() && u() && ((K = (k = I()) == null ? void 0 : k.refreshActiveAsset) == null || K.call(k)); + x && d() && u() && ((U = (N = I()) == null ? void 0 : N.refreshActiveAsset) == null || U.call(N)); } catch (J) { (z = console.debug) == null || z.call(console, J); } try { - if (!T) return; - A(t.scope); + if (!K) return; + y(t.scope); } catch (J) { - (B = console.debug) == null || B.call(console, J); + (T = console.debug) == null || T.call(console, J); } }; try { @@ -33312,14 +33339,14 @@ function i2({ } try { (L = window.addEventListener) == null || L.call(window, "mjr-settings-changed", p, { - signal: y == null ? void 0 : y.signal + signal: A == null ? void 0 : A.signal }); } catch (G) { - (h = console.debug) == null || h.call(console, G); + (C = console.debug) == null || C.call(console, G); } - return { applyWatcherForScope: A, isAiEnabled: Z, applyAiUiState: C, applySidebarPosition: g }; + return { applyWatcherForScope: y, isAiEnabled: S, applyAiUiState: W, applySidebarPosition: g }; } -function o2({ +function oM({ gridContainer: e, panelLifecycleAC: t, requestQueuedReload: n, @@ -33331,28 +33358,28 @@ function o2({ gridController: c, registerSummaryDispose: s }) { - var u, I, y, S, Z; + var u, I, A, h, S; let d = null; try { d = () => n(), e.addEventListener("mjr:reload-grid", d, { signal: t == null ? void 0 : t.signal }), s(() => { - var C; + var W; try { d && e.removeEventListener("mjr:reload-grid", d); } catch (g) { - (C = console.debug) == null || C.call(console, g); + (W = console.debug) == null || W.call(console, g); } d = null; }); - } catch (C) { - (u = console.debug) == null || u.call(console, C); + } catch (W) { + (u = console.debug) == null || u.call(console, W); } try { - const C = (g) => { - var A, p, b, L, h, G; + const W = (g) => { + var y, p, b, L, C, G; try { - const W = (g == null ? void 0 : g.detail) || {}, f = String((W == null ? void 0 : W.filenameKey) || "").trim().toLowerCase(); + const Z = (g == null ? void 0 : g.detail) || {}, f = String((Z == null ? void 0 : Z.filenameKey) || "").trim().toLowerCase(); if (!f || !e) return; const X = Array.from( e.querySelectorAll(".mjr-asset-card") @@ -33366,102 +33393,102 @@ function o2({ const x = X.map((w) => { var R; return String(((R = w == null ? void 0 : w.dataset) == null ? void 0 : R.mjrAssetId) || "").trim(); - }).filter(Boolean), T = String(((p = (A = X[0]) == null ? void 0 : A.dataset) == null ? void 0 : p.mjrAssetId) || x[0] || "").trim(); - x.length && typeof (e == null ? void 0 : e._mjrSetSelection) == "function" && e._mjrSetSelection(x, T), (L = (b = X[0]) == null ? void 0 : b.scrollIntoView) == null || L.call(b, { block: "nearest", behavior: "smooth" }), o(), i(); - const v = Number((W == null ? void 0 : W.count) || x.length || X.length || 0); + }).filter(Boolean), K = String(((p = (y = X[0]) == null ? void 0 : y.dataset) == null ? void 0 : p.mjrAssetId) || x[0] || "").trim(); + x.length && typeof (e == null ? void 0 : e._mjrSetSelection) == "function" && e._mjrSetSelection(x, K), (L = (b = X[0]) == null ? void 0 : b.scrollIntoView) == null || L.call(b, { block: "nearest", behavior: "smooth" }), o(), i(); + const j = Number((Z == null ? void 0 : Z.count) || x.length || X.length || 0); try { - Ze( + Ae( m( "toast.nameCollisionInView", "Name collision in view: {n} item(s) selected", - { n: v } + { n: j } ), "info", 1800 ); } catch (w) { - (h = console.debug) == null || h.call(console, w); + (C = console.debug) == null || C.call(console, w); } - } catch (W) { - (G = console.debug) == null || G.call(console, W); + } catch (Z) { + (G = console.debug) == null || G.call(console, Z); } }; - e.addEventListener("mjr:badge-duplicates-focus", C, { + e.addEventListener("mjr:badge-duplicates-focus", W, { signal: t == null ? void 0 : t.signal }), s(() => { var g; try { e.removeEventListener( "mjr:badge-duplicates-focus", - C + W ); - } catch (A) { - (g = console.debug) == null || g.call(console, A); + } catch (y) { + (g = console.debug) == null || g.call(console, y); } }); - } catch (C) { - (I = console.debug) == null || I.call(console, C); + } catch (W) { + (I = console.debug) == null || I.call(console, W); } try { window.addEventListener( "mjr:reload-grid", - (C) => { - var A, p, b, L; + (W) => { + var y, p, b, L; try { - if ((A = t == null ? void 0 : t.signal) != null && A.aborted) return; - } catch (h) { - (p = console.debug) == null || p.call(console, h); + if ((y = t == null ? void 0 : t.signal) != null && y.aborted) return; + } catch (C) { + (p = console.debug) == null || p.call(console, C); } try { if (globalThis != null && globalThis._mjrMaintenanceActive) return; - } catch (h) { - (b = console.debug) == null || b.call(console, h); + } catch (C) { + (b = console.debug) == null || b.call(console, C); } - String(((L = C == null ? void 0 : C.detail) == null ? void 0 : L.reason) || "").trim() && n(); + String(((L = W == null ? void 0 : W.detail) == null ? void 0 : L.reason) || "").trim() && n(); }, { signal: t == null ? void 0 : t.signal } ); - } catch (C) { - (y = console.debug) == null || y.call(console, C); + } catch (W) { + (A = console.debug) == null || A.call(console, W); } try { window.addEventListener( "mjr:sort-changed", () => { - var C, g, A; + var W, g, y; try { - if ((C = t == null ? void 0 : t.signal) != null && C.aborted) return; + if ((W = t == null ? void 0 : t.signal) != null && W.aborted) return; } catch (p) { (g = console.debug) == null || g.call(console, p); } try { i(); } catch (p) { - (A = console.debug) == null || A.call(console, p); + (y = console.debug) == null || y.call(console, p); } c.reloadGrid().catch(() => { }); }, { signal: t == null ? void 0 : t.signal } ); - } catch (C) { - (S = console.debug) == null || S.call(console, C); + } catch (W) { + (h = console.debug) == null || h.call(console, W); } try { window.addEventListener( "mjr:collections-changed", - (C) => { - var b, L, h, G, W; + (W) => { + var b, L, C, G, Z; try { if ((b = t == null ? void 0 : t.signal) != null && b.aborted) return; } catch (f) { (L = console.debug) == null || L.call(console, f); } - const g = C != null && C.detail && typeof C.detail == "object" ? C.detail : {}, A = String(g.collectionId || "").trim(), p = String(g.collectionName || "").trim(); + const g = W != null && W.detail && typeof W.detail == "object" ? W.detail : {}, y = String(g.collectionId || "").trim(), p = String(g.collectionName || "").trim(); try { - r("collectionId", A), r("collectionName", p); + r("collectionId", y), r("collectionName", p); } catch (f) { - (h = console.debug) == null || h.call(console, f); + (C = console.debug) == null || C.call(console, f); } try { i(); @@ -33471,18 +33498,18 @@ function o2({ try { g.close !== !1 && l.close(a); } catch (f) { - (W = console.debug) == null || W.call(console, f); + (Z = console.debug) == null || Z.call(console, f); } g.reload !== !1 && c.reloadGrid().catch(() => { }); }, { signal: t == null ? void 0 : t.signal } ); - } catch (C) { - (Z = console.debug) == null || Z.call(console, C); + } catch (W) { + (S = console.debug) == null || S.call(console, W); } } -function r2({ +function rM({ similarBtn: e, gridContainer: t, state: n, @@ -33499,21 +33526,21 @@ function r2({ e == null || e.addEventListener( "click", async (I) => { - var C, g, A; + var W, g, y; if (I.stopPropagation(), !o()) { - Ze(r, "info", 2200); + Ae(r, "info", 2200); return; } try { u(); } catch (p) { - (C = console.debug) == null || C.call(console, p); + (W = console.debug) == null || W.call(console, p); } - const y = String( + const A = String( l() || a()[0] || "" - ).trim(), S = Number(y); - if (!Number.isFinite(S) || S <= 0) { - Ze( + ).trim(), h = Number(A); + if (!Number.isFinite(h) || h <= 0) { + Ae( m( "search.selectAssetForSimilar", "Select an asset first to find similar images/videos." @@ -33523,16 +33550,16 @@ function r2({ ); return; } - const Z = e.title; + const S = e.title; e.disabled = !0, e.title = m("search.findingSimilar", "Finding similar assets..."); try { - const p = await qf(S, { + const p = await qf(h, { topK: 100, scope: n.scope || "output", customRootId: n.customRootId || "" }); if (!(p != null && p.ok)) { - Ze( + Ae( String( (p == null ? void 0 : p.error) || m("search.findSimilarFailed", "Failed to find similar assets") ), @@ -33542,42 +33569,42 @@ function r2({ return; } const b = Array.isArray(p == null ? void 0 : p.data) ? p.data : []; - s("similarResults", b), s("similarSourceAssetId", String(S)), s( + s("similarResults", b), s("similarSourceAssetId", String(h)), s( "similarTitle", m("search.similarResults", "Similar to asset #{id} ({n} results)", { - id: S, + id: h, n: b.length }) ), await ((g = d == null ? void 0 : d.setScope) == null ? void 0 : g.call(d, "similar")); } catch (p) { - (A = console.debug) == null || A.call(console, p), Ze( + (y = console.debug) == null || y.call(console, p), Ae( m("search.findSimilarFailed", "Failed to find similar assets"), "error", 3e3 ); } finally { - e.disabled = !1, e.title = Z; + e.disabled = !1, e.title = S; } }, { signal: i == null ? void 0 : i.signal } ), t == null || t.addEventListener( - ht.OPEN_STACK_GROUP, + ft.OPEN_STACK_GROUP, async (I) => { - var y, S, Z; + var A, h, S; try { - const C = (I == null ? void 0 : I.detail) || {}, g = Array.isArray(C == null ? void 0 : C.members) ? C.members : []; - s("similarResults", g), s("similarSourceAssetId", String(((y = C == null ? void 0 : C.asset) == null ? void 0 : y.id) || "")), s( + const W = (I == null ? void 0 : I.detail) || {}, g = Array.isArray(W == null ? void 0 : W.members) ? W.members : []; + s("similarResults", g), s("similarSourceAssetId", String(((A = W == null ? void 0 : W.asset) == null ? void 0 : A.id) || "")), s( "similarTitle", - String((C == null ? void 0 : C.title) || "").trim() || `Generation group (${g.length} assets)` - ), await ((S = d == null ? void 0 : d.setScope) == null ? void 0 : S.call(d, "similar")); - } catch (C) { - (Z = console.debug) == null || Z.call(console, C); + String((W == null ? void 0 : W.title) || "").trim() || `Generation group (${g.length} assets)` + ), await ((h = d == null ? void 0 : d.setScope) == null ? void 0 : h.call(d, "similar")); + } catch (W) { + (S = console.debug) == null || S.call(console, W); } }, { signal: i == null ? void 0 : i.signal } ); } -function l2({ +function lM({ pinnedFoldersBtn: e, pinnedFoldersMenu: t, pinnedFoldersPopover: n, @@ -33591,10 +33618,10 @@ function l2({ gridController: d, applyWatcherForScope: u, refreshDuplicateAlerts: I, - notifyContextChanged: y, - panelLifecycleAC: S + notifyContextChanged: A, + panelLifecycleAC: h }) { - const Z = (g, { right: A = null, danger: p = !1 } = {}) => { + const S = (g, { right: y = null, danger: p = !1 } = {}) => { const b = document.createElement("button"); b.type = "button", b.className = "mjr-menu-item", p && (b.style.color = "var(--error-text, #f44336)"), b.style.cssText = ` display:flex; @@ -33610,36 +33637,36 @@ function l2({ `; const L = document.createElement("span"); L.textContent = String(g || ""), L.style.cssText = "font-weight:600; color:var(--fg-color, #e6edf7);"; - const h = document.createElement("span"); - if (h.style.cssText = "display:flex; align-items:center; gap:8px;", A) { + const C = document.createElement("span"); + if (C.style.cssText = "display:flex; align-items:center; gap:8px;", y) { const G = document.createElement("span"); - G.textContent = String(A), G.style.cssText = "opacity:0.68; font-size:11px;", h.appendChild(G); + G.textContent = String(y), G.style.cssText = "opacity:0.68; font-size:11px;", C.appendChild(G); } - return b.appendChild(L), b.appendChild(h), b.addEventListener( + return b.appendChild(L), b.appendChild(C), b.addEventListener( "mouseenter", () => { b.style.borderColor = "rgba(145,205,255,0.4)", b.style.background = "linear-gradient(135deg, rgba(80,140,255,0.18), rgba(32,100,200,0.14))"; }, - { signal: S == null ? void 0 : S.signal } + { signal: h == null ? void 0 : h.signal } ), b.addEventListener( "mouseleave", () => { b.style.borderColor = "rgba(120,190,255,0.18)", b.style.background = "linear-gradient(135deg, rgba(255,255,255,0.03), rgba(255,255,255,0.01))"; }, - { signal: S == null ? void 0 : S.signal } + { signal: h == null ? void 0 : h.signal } ), b; - }, C = async () => { - var A, p; + }, W = async () => { + var y, p; try { t.replaceChildren(); } catch (b) { - (A = console.debug) == null || A.call(console, b); + (y = console.debug) == null || y.call(console, b); } let g = []; try { const b = await Ft( - ct.CUSTOM_ROOTS, - S != null && S.signal ? { signal: S.signal } : void 0 + st.CUSTOM_ROOTS, + h != null && h.signal ? { signal: h.signal } : void 0 ); g = b != null && b.ok && Array.isArray(b.data) ? b.data : []; } catch (b) { @@ -33653,62 +33680,62 @@ function l2({ for (const b of g) { const L = String((b == null ? void 0 : b.id) || "").trim(); if (!L) continue; - const h = String((b == null ? void 0 : b.name) || (b == null ? void 0 : b.path) || L).trim(), G = String((b == null ? void 0 : b.path) || "").trim(), W = document.createElement("div"); - W.style.cssText = "display:flex; align-items:stretch; width:100%;"; - const f = Z(h, { right: G || null }); + const C = String((b == null ? void 0 : b.name) || (b == null ? void 0 : b.path) || L).trim(), G = String((b == null ? void 0 : b.path) || "").trim(), Z = document.createElement("div"); + Z.style.cssText = "display:flex; align-items:stretch; width:100%;"; + const f = S(C, { right: G || null }); f.style.flex = "1", f.addEventListener( "click", async () => { - var T, v, w, R, Y, F, N; + var K, j, w, R, V, O, k; r.scope = "custom"; try { l && (l.dataset.mjrScope = "custom"); - } catch (V) { - (T = console.debug) == null || T.call(console, V); + } catch (Y) { + (K = console.debug) == null || K.call(console, Y); } - r.customRootId = L, r.customRootLabel = h, r.currentFolderRelativePath = ""; + r.customRootId = L, r.customRootLabel = C, r.currentFolderRelativePath = ""; try { a && (a.value = L); - } catch (V) { - (v = console.debug) == null || v.call(console, V); + } catch (Y) { + (j = console.debug) == null || j.call(console, Y); } try { (w = c == null ? void 0 : c.setActiveTabStyles) == null || w.call(c); - } catch (V) { - (R = console.debug) == null || R.call(console, V); + } catch (Y) { + (R = console.debug) == null || R.call(console, Y); } try { await u(r.scope); - } catch (V) { - (Y = console.debug) == null || Y.call(console, V); + } catch (Y) { + (V = console.debug) == null || V.call(console, Y); } try { await I(); - } catch (V) { - (F = console.debug) == null || F.call(console, V); + } catch (Y) { + (O = console.debug) == null || O.call(console, Y); } try { - y(); - } catch (V) { - (N = console.debug) == null || N.call(console, V); + A(); + } catch (Y) { + (k = console.debug) == null || k.call(console, Y); } i.close(n), await d.reloadGrid(); }, - { signal: S == null ? void 0 : S.signal } + { signal: h == null ? void 0 : h.signal } ); const X = document.createElement("button"); X.type = "button", X.className = "mjr-menu-item", X.title = m("ctx.unpinFolder", "Unpin folder"), X.style.cssText = "width:42px; justify-content:center; padding:0; border:1px solid rgba(255,95,95,0.35); border-radius:9px; margin-left:6px; background: linear-gradient(135deg, rgba(255,70,70,0.16), rgba(160,20,20,0.12));"; const x = document.createElement("i"); x.className = "pi pi-times", x.style.cssText = "opacity:0.88; color: rgba(255,130,130,0.96);", X.appendChild(x), X.addEventListener( "click", - async (T) => { + async (K) => { var R; - if (T.preventDefault(), T.stopPropagation(), !await yi( - m("dialog.unpinFolder", 'Unpin folder "{name}"?', { name: h }) + if (K.preventDefault(), K.stopPropagation(), !await yi( + m("dialog.unpinFolder", 'Unpin folder "{name}"?', { name: C }) )) return; - const w = await Et(ct.CUSTOM_ROOTS_REMOVE, { id: L }); + const w = await Dt(st.CUSTOM_ROOTS_REMOVE, { id: L }); if (!(w != null && w.ok)) { - Ze( + Ae( (w == null ? void 0 : w.error) || m("toast.unpinFolderFailed", "Failed to unpin folder"), "error" ); @@ -33717,32 +33744,32 @@ function l2({ String(r.customRootId || "") === L && (r.customRootId = "", r.customRootLabel = "", r.currentFolderRelativePath = ""); try { await s.refreshCustomRoots(); - } catch (Y) { - (R = console.debug) == null || R.call(console, Y); + } catch (V) { + (R = console.debug) == null || R.call(console, V); } - await C(), await d.reloadGrid(); + await W(), await d.reloadGrid(); }, - { signal: S == null ? void 0 : S.signal } - ), W.appendChild(f), W.appendChild(X), t.appendChild(W); + { signal: h == null ? void 0 : h.signal } + ), Z.appendChild(f), Z.appendChild(X), t.appendChild(Z); } }; e == null || e.addEventListener( "click", async (g) => { - var A; + var y; g.stopPropagation(); try { - await C(); + await W(); } catch (p) { - (A = console.debug) == null || A.call(console, p); + (y = console.debug) == null || y.call(console, p); } o(), i.toggle(n, e); }, - { signal: S == null ? void 0 : S.signal } + { signal: h == null ? void 0 : h.signal } ); } -const As = (e) => String(e).padStart(2, "0"); -function xc(e) { +const Ws = (e) => String(e).padStart(2, "0"); +function jc(e) { try { const t = String(e || "").trim(); if (!/^\d{4}-\d{2}-\d{2}$/.test(t)) return null; @@ -33757,15 +33784,15 @@ function xc(e) { function jm(e) { try { const t = e.getFullYear(), n = e.getMonth() + 1, i = e.getDate(); - return `${t}-${As(n)}-${As(i)}`; + return `${t}-${Ws(n)}-${Ws(i)}`; } catch { return ""; } } -function a2(e) { +function aM(e) { try { const t = e.getFullYear(), n = e.getMonth() + 1; - return `${t}-${As(n)}`; + return `${t}-${Ws(n)}`; } catch { return ""; } @@ -33784,21 +33811,21 @@ function Lm(e, t) { return /* @__PURE__ */ new Date(); } } -function c2(e) { +function cM(e) { try { return new Date(e.getFullYear(), e.getMonth() + 1, 0).getDate(); } catch { return 31; } } -function s2(e) { +function sM(e) { try { return (e.getDay() + 6) % 7; } catch { return 0; } } -function Vm(e, t) { +function Ym(e, t) { var n, i; if (e) try { @@ -33808,7 +33835,7 @@ function Vm(e, t) { (i = console.debug) == null || i.call(console, o); } } -async function d2({ state: e, monthKey: t }) { +async function dM({ state: e, monthKey: t }) { var n; try { const i = String((e == null ? void 0 : e.scope) || "output"); @@ -33840,7 +33867,7 @@ async function d2({ state: e, monthKey: t }) { return { ok: !1, error: (i == null ? void 0 : i.message) || "Histogram error" }; } } -function u2({ +function uM({ container: e, hiddenInput: t, state: n, @@ -33867,71 +33894,71 @@ function u2({ u.type = "button", u.className = "mjr-btn mjr-agenda-clear", u.textContent = "Clear"; const I = document.createElement("button"); I.type = "button", I.className = "mjr-btn mjr-agenda-refresh", I.textContent = "Refresh", d.appendChild(u), d.appendChild(I), o.appendChild(r), o.appendChild(s), o.appendChild(d), e.appendChild(o); - let y = vm(xc(t.value) || /* @__PURE__ */ new Date()), S = {}, Z = 0, C = !1; + let A = vm(jc(t.value) || /* @__PURE__ */ new Date()), h = {}, S = 0, W = !1; const g = () => { - if (C) return; - const p = y.getFullYear(), b = y.getMonth(); - a.textContent = y.toLocaleString(void 0, { + if (W) return; + const p = A.getFullYear(), b = A.getMonth(); + a.textContent = A.toLocaleString(void 0, { month: "long", year: "numeric" }), s.innerHTML = ""; const L = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; for (const x of L) { - const T = document.createElement("div"); - T.className = "mjr-agenda-weekday", T.textContent = x, s.appendChild(T); + const K = document.createElement("div"); + K.className = "mjr-agenda-weekday", K.textContent = x, s.appendChild(K); } - const h = new Date(p, b, 1), G = s2(h), W = c2(y), f = xc(t.value), X = f ? jm(f) : ""; + const C = new Date(p, b, 1), G = sM(C), Z = cM(A), f = jc(t.value), X = f ? jm(f) : ""; for (let x = 0; x < G; x++) { - const T = document.createElement("div"); - T.className = "mjr-agenda-day mjr-agenda-day--blank", s.appendChild(T); + const K = document.createElement("div"); + K.className = "mjr-agenda-day mjr-agenda-day--blank", s.appendChild(K); } - for (let x = 1; x <= W; x++) { - const T = new Date(p, b, x), v = jm(T), w = Number((S == null ? void 0 : S[v]) || 0) || 0, R = document.createElement("button"); - if (R.type = "button", R.className = "mjr-agenda-day", R.textContent = String(x), R.dataset.date = v, w > 0) { + for (let x = 1; x <= Z; x++) { + const K = new Date(p, b, x), j = jm(K), w = Number((h == null ? void 0 : h[j]) || 0) || 0, R = document.createElement("button"); + if (R.type = "button", R.className = "mjr-agenda-day", R.textContent = String(x), R.dataset.date = j, w > 0) { R.classList.add("mjr-agenda-day--has-assets"), R.title = `${w} asset${w === 1 ? "" : "s"}`; - const Y = document.createElement("span"); - Y.className = "mjr-agenda-day-badge", Y.textContent = w > 99 ? "99+" : String(w), Y.setAttribute("aria-label", `${w} asset${w === 1 ? "" : "s"}`), R.appendChild(Y); + const V = document.createElement("span"); + V.className = "mjr-agenda-day-badge", V.textContent = w > 99 ? "99+" : String(w), V.setAttribute("aria-label", `${w} asset${w === 1 ? "" : "s"}`), R.appendChild(V); } else R.title = m("tooltip.noAssetsDay", "No assets on this day"); - v === X && R.classList.add("mjr-agenda-day--selected"), R.addEventListener("click", () => { - const Y = String(t.value || "").trim(); - Vm(t, Y === v ? "" : v); + j === X && R.classList.add("mjr-agenda-day--selected"), R.addEventListener("click", () => { + const V = String(t.value || "").trim(); + Ym(t, V === j ? "" : j); }), s.appendChild(R); } - }, A = async () => { - if (C) return; - const p = a2(y); + }, y = async () => { + if (W) return; + const p = aM(A); if (!p) return; - Z += 1; - const b = Z, L = await d2({ state: n, monthKey: p }); - C || b === Z && (L.ok ? S = L.days || {} : S = {}, g()); + S += 1; + const b = S, L = await dM({ state: n, monthKey: p }); + W || b === S && (L.ok ? h = L.days || {} : h = {}, g()); }; return l.addEventListener("click", async () => { - y = Lm(y, -1), await A(); + A = Lm(A, -1), await y(); }), c.addEventListener("click", async () => { - y = Lm(y, 1), await A(); + A = Lm(A, 1), await y(); }), u.addEventListener("click", () => { var p; - Vm(t, ""); + Ym(t, ""); try { i == null || i(); } catch (b) { (p = console.debug) == null || p.call(console, b); } }), I.addEventListener("click", async () => { - await A(); + await y(); }), t.addEventListener("change", () => { - const p = xc(t.value); + const p = jc(t.value); if (p) { const b = vm(p); - (b.getFullYear() !== y.getFullYear() || b.getMonth() !== y.getMonth()) && (y = b); + (b.getFullYear() !== A.getFullYear() || b.getMonth() !== A.getMonth()) && (A = b); } g(); - }), g(), A(), { - refresh: A, + }), g(), y(), { + refresh: y, dispose() { var p; - C = !0; + W = !0; try { o.remove(); } catch (b) { @@ -33946,7 +33973,7 @@ const or = (e) => { const n = t.replace(",", "."), i = Number(n); return Number.isFinite(i) ? i : 0; }; -function m2({ +function mM({ state: e, kindSelect: t, wfCheckbox: n, @@ -33960,14 +33987,14 @@ function m2({ maxWidthInput: d, maxHeightInput: u, dateRangeSelect: I, - dateExactInput: y, - reloadGrid: S, - reconcileSelection: Z = null, - onFiltersChanged: C = null, + dateExactInput: A, + reloadGrid: h, + reconcileSelection: S = null, + onFiltersChanged: W = null, lifecycleSignal: g = null }) { var f, X; - const { write: A } = oo(e, [ + const { write: y } = oo(e, [ "kindFilter", "workflowOnly", "minRating", @@ -33987,24 +34014,24 @@ function m2({ var x; p = null; try { - Z == null || Z(); - } catch (T) { - (x = console.debug) == null || x.call(console, T); + S == null || S(); + } catch (K) { + (x = console.debug) == null || x.call(console, K); } - S().catch(() => { + h().catch(() => { }); }, 250); }, L = []; L.push(() => { p && (clearTimeout(p), p = null); }); - const h = (x, T, v, w) => { - if (!(!(x != null && x.addEventListener) || typeof v != "function")) { + const C = (x, K, j, w) => { + if (!(!(x != null && x.addEventListener) || typeof j != "function")) { try { - x.addEventListener(T, v, w); + x.addEventListener(K, j, w); } catch { try { - x.addEventListener(T, v); + x.addEventListener(K, j); } catch { return; } @@ -34012,72 +34039,72 @@ function m2({ L.push(() => { var R; try { - x.removeEventListener(T, v, w); + x.removeEventListener(K, j, w); } catch { try { - x.removeEventListener(T, v); - } catch (Y) { - (R = console.debug) == null || R.call(console, Y); + x.removeEventListener(K, j); + } catch (V) { + (R = console.debug) == null || R.call(console, V); } } }); } }; - h( + C( t, "change", () => { var x; - A("kindFilter", t.value || ""); + y("kindFilter", t.value || ""); try { - C == null || C(); - } catch (T) { - (x = console.debug) == null || x.call(console, T); + W == null || W(); + } catch (K) { + (x = console.debug) == null || x.call(console, K); } b(); }, g ? { signal: g } : void 0 - ), h( + ), C( n, "change", () => { var x; - A("workflowOnly", !!n.checked); + y("workflowOnly", !!n.checked); try { - C == null || C(); - } catch (T) { - (x = console.debug) == null || x.call(console, T); + W == null || W(); + } catch (K) { + (x = console.debug) == null || x.call(console, K); } b(); }, g ? { signal: g } : void 0 - ), h( + ), C( o, "change", () => { var x; - A("minRating", Number(o.value || 0) || 0); + y("minRating", Number(o.value || 0) || 0); try { - C == null || C(); - } catch (T) { - (x = console.debug) == null || x.call(console, T); + W == null || W(); + } catch (K) { + (x = console.debug) == null || x.call(console, K); } b(); }, g ? { signal: g } : void 0 - ), i && h( + ), i && C( i, "change", () => { var x; - A( + y( "workflowType", String(i.value || "").trim().toUpperCase() ); try { - C == null || C(); - } catch (T) { - (x = console.debug) == null || x.call(console, T); + W == null || W(); + } catch (K) { + (x = console.debug) == null || x.call(console, K); } b(); }, @@ -34085,162 +34112,162 @@ function m2({ ); const G = () => { var R; - const x = or((r == null ? void 0 : r.value) || 0), T = or((l == null ? void 0 : l.value) || 0), v = Number.isFinite(x) && x > 0 ? x : 0; - let w = Number.isFinite(T) && T > 0 ? T : 0; - w > 0 && v > 0 && w < v && (w = v, l && (l.value = String(w))), A("minSizeMB", v), A("maxSizeMB", w); + const x = or((r == null ? void 0 : r.value) || 0), K = or((l == null ? void 0 : l.value) || 0), j = Number.isFinite(x) && x > 0 ? x : 0; + let w = Number.isFinite(K) && K > 0 ? K : 0; + w > 0 && j > 0 && w < j && (w = j, l && (l.value = String(w))), y("minSizeMB", j), y("maxSizeMB", w); try { - C == null || C(); - } catch (Y) { - (R = console.debug) == null || R.call(console, Y); + W == null || W(); + } catch (V) { + (R = console.debug) == null || R.call(console, V); } b(); }; - h( + C( r, "change", G, g ? { signal: g } : void 0 - ), h( + ), C( l, "change", G, g ? { signal: g } : void 0 ); - const W = () => { - var V, k; - const x = or((c == null ? void 0 : c.value) || 0), T = or((s == null ? void 0 : s.value) || 0), v = or((d == null ? void 0 : d.value) || 0), w = or((u == null ? void 0 : u.value) || 0), R = Number.isFinite(x) && x > 0 ? Math.round(x) : 0, Y = Number.isFinite(T) && T > 0 ? Math.round(T) : 0; - let F = Number.isFinite(v) && v > 0 ? Math.round(v) : 0, N = Number.isFinite(w) && w > 0 ? Math.round(w) : 0; - F > 0 && R > 0 && F < R && (F = R, d && (d.value = String(F))), N > 0 && Y > 0 && N < Y && (N = Y, u && (u.value = String(N))), A("minWidth", R), A("minHeight", Y), A("maxWidth", F), A("maxHeight", N); + const Z = () => { + var Y, N; + const x = or((c == null ? void 0 : c.value) || 0), K = or((s == null ? void 0 : s.value) || 0), j = or((d == null ? void 0 : d.value) || 0), w = or((u == null ? void 0 : u.value) || 0), R = Number.isFinite(x) && x > 0 ? Math.round(x) : 0, V = Number.isFinite(K) && K > 0 ? Math.round(K) : 0; + let O = Number.isFinite(j) && j > 0 ? Math.round(j) : 0, k = Number.isFinite(w) && w > 0 ? Math.round(w) : 0; + O > 0 && R > 0 && O < R && (O = R, d && (d.value = String(O))), k > 0 && V > 0 && k < V && (k = V, u && (u.value = String(k))), y("minWidth", R), y("minHeight", V), y("maxWidth", O), y("maxHeight", k); try { if (a) { - const K = { + const U = { "1280x720": "hd", "1920x1080": "fhd", "2560x1440": "qhd", "3840x2160": "uhd" }; - a.value = K[`${R}x${Y}`] || ""; + a.value = U[`${R}x${V}`] || ""; } - } catch (K) { - (V = console.debug) == null || V.call(console, K); + } catch (U) { + (Y = console.debug) == null || Y.call(console, U); } try { - C == null || C(); - } catch (K) { - (k = console.debug) == null || k.call(console, K); + W == null || W(); + } catch (U) { + (N = console.debug) == null || N.call(console, U); } b(); }; - if (h( + if (C( c, "change", - W, + Z, g ? { signal: g } : void 0 - ), h( + ), C( s, "change", - W, + Z, g ? { signal: g } : void 0 - ), h( + ), C( d, "change", - W, + Z, g ? { signal: g } : void 0 - ), h( + ), C( u, "change", - W, + Z, g ? { signal: g } : void 0 - ), a && h( + ), a && C( a, "change", () => { - var Y; - const x = String(a.value || ""), v = { + var V; + const x = String(a.value || ""), j = { hd: [1280, 720], fhd: [1920, 1080], qhd: [2560, 1440], uhd: [3840, 2160] - }[x] || [0, 0], w = Number(v[0] || 0), R = Number(v[1] || 0); - A("minWidth", w), A("minHeight", R), A("maxWidth", 0), A("maxHeight", 0), c && (c.value = w > 0 ? String(w) : ""), s && (s.value = R > 0 ? String(R) : ""), d && (d.value = ""), u && (u.value = ""); + }[x] || [0, 0], w = Number(j[0] || 0), R = Number(j[1] || 0); + y("minWidth", w), y("minHeight", R), y("maxWidth", 0), y("maxHeight", 0), c && (c.value = w > 0 ? String(w) : ""), s && (s.value = R > 0 ? String(R) : ""), d && (d.value = ""), u && (u.value = ""); try { - C == null || C(); - } catch (F) { - (Y = console.debug) == null || Y.call(console, F); + W == null || W(); + } catch (O) { + (V = console.debug) == null || V.call(console, O); } b(); }, g ? { signal: g } : void 0 - ), I && h( + ), I && C( I, "change", () => { var x; - A("dateRangeFilter", I.value || ""), e.dateRangeFilter && e.dateExactFilter && (A("dateExactFilter", ""), y && (y.value = "")); + y("dateRangeFilter", I.value || ""), e.dateRangeFilter && e.dateExactFilter && (y("dateExactFilter", ""), A && (A.value = "")); try { - C == null || C(); - } catch (T) { - (x = console.debug) == null || x.call(console, T); + W == null || W(); + } catch (K) { + (x = console.debug) == null || x.call(console, K); } b(); }, g ? { signal: g } : void 0 - ), y) { - const x = (v) => { - y.classList.toggle("mjr-agenda-filled", v === "filled"), y.classList.toggle("mjr-agenda-empty", v === "empty"); + ), A) { + const x = (j) => { + A.classList.toggle("mjr-agenda-filled", j === "filled"), A.classList.toggle("mjr-agenda-empty", j === "empty"); }; - h( - y, + C( + A, "change", () => { - var v; - A( + var j; + y( "dateExactFilter", - y.value ? String(y.value) : "" - ), e.dateExactFilter && e.dateRangeFilter && (A("dateRangeFilter", ""), I && (I.value = "")), e.dateExactFilter || x(""); + A.value ? String(A.value) : "" + ), e.dateExactFilter && e.dateRangeFilter && (y("dateRangeFilter", ""), I && (I.value = "")), e.dateExactFilter || x(""); try { - C == null || C(); + W == null || W(); } catch (w) { - (v = console.debug) == null || v.call(console, w); + (j = console.debug) == null || j.call(console, w); } b(); }, g ? { signal: g } : void 0 ); - const T = (v) => { - if (!(v != null && v.detail)) return; - const { date: w, hasResults: R } = v.detail; - if (!y.value) { + const K = (j) => { + if (!(j != null && j.detail)) return; + const { date: w, hasResults: R } = j.detail; + if (!A.value) { x(""); return; } - w === y.value && x(R ? "filled" : "empty"); + w === A.value && x(R ? "filled" : "empty"); }; try { - const v = g ? { passive: !0, signal: g } : { passive: !0 }, w = typeof window < "u" ? window : null; - (f = w == null ? void 0 : w.addEventListener) == null || f.call(w, "MJR:AgendaStatus", T, v), L.push(() => { - var R, Y; + const j = g ? { passive: !0, signal: g } : { passive: !0 }, w = typeof window < "u" ? window : null; + (f = w == null ? void 0 : w.addEventListener) == null || f.call(w, "MJR:AgendaStatus", K, j), L.push(() => { + var R, V; try { - (R = w == null ? void 0 : w.removeEventListener) == null || R.call(w, "MJR:AgendaStatus", T, v); - } catch (F) { - (Y = console.debug) == null || Y.call(console, F); + (R = w == null ? void 0 : w.removeEventListener) == null || R.call(w, "MJR:AgendaStatus", K, j); + } catch (O) { + (V = console.debug) == null || V.call(console, O); } }); - } catch (v) { - (X = console.debug) == null || X.call(console, v); + } catch (j) { + (X = console.debug) == null || X.call(console, j); } } return () => { var x; - for (const T of L.splice(0)) + for (const K of L.splice(0)) try { - T(); - } catch (v) { - (x = console.debug) == null || x.call(console, v); + K(); + } catch (j) { + (x = console.debug) == null || x.call(console, j); } }; } -function g2({ +function gM({ state: e, hasVueHeaderSection: t, kindSelect: n, @@ -34254,60 +34281,60 @@ function g2({ minHeightInput: d, maxWidthInput: u, maxHeightInput: I, - dateRangeSelect: y, - dateExactInput: S, - agendaContainer: Z, - gridController: C, + dateRangeSelect: A, + dateExactInput: h, + agendaContainer: S, + gridController: W, reconcileVisibleSelection: g, - exitSimilarViewIfActive: A, + exitSimilarViewIfActive: y, notifyContextChanged: p, panelLifecycleAC: b }) { - var G, W, f; + var G, Z, f; let L = null; try { try { n.value = e.kindFilter || "", i.checked = !!e.workflowOnly, o.value = String(e.workflowType || "").trim().toUpperCase(), r.value = String(Number(e.minRating || 0) || 0), l.value = Number(e.minSizeMB || 0) > 0 ? String(e.minSizeMB) : "", a.value = Number(e.maxSizeMB || 0) > 0 ? String(e.maxSizeMB) : "", s.value = Number(e.minWidth || 0) > 0 ? String(e.minWidth) : "", d.value = Number(e.minHeight || 0) > 0 ? String(e.minHeight) : "", u.value = Number(e.maxWidth || 0) > 0 ? String(e.maxWidth) : "", I.value = Number(e.maxHeight || 0) > 0 ? String(e.maxHeight) : ""; const X = Number(e.minWidth || 0) || 0, x = Number(e.minHeight || 0) || 0; - X >= 3840 && x >= 2160 ? c.value = "uhd" : X >= 2560 && x >= 1440 ? c.value = "qhd" : X >= 1920 && x >= 1080 ? c.value = "fhd" : X >= 1280 && x >= 720 ? c.value = "hd" : c.value = "", y.value = e.dateRangeFilter || "", S.value = e.dateExactFilter || ""; + X >= 3840 && x >= 2160 ? c.value = "uhd" : X >= 2560 && x >= 1440 ? c.value = "qhd" : X >= 1920 && x >= 1080 ? c.value = "fhd" : X >= 1280 && x >= 720 ? c.value = "hd" : c.value = "", A.value = e.dateRangeFilter || "", h.value = e.dateExactFilter || ""; } catch (X) { (G = console.debug) == null || G.call(console, X); } - L = u2({ - container: Z, - hiddenInput: S, + L = uM({ + container: S, + hiddenInput: h, state: e, - onRequestReloadGrid: () => C.reloadGrid() + onRequestReloadGrid: () => W.reloadGrid() }); } catch (X) { - (W = console.debug) == null || W.call(console, X); + (Z = console.debug) == null || Z.call(console, X); } - let h = () => { + let C = () => { }; if (t) { let X = null; const x = () => { - var T, v, w, R; + var K, j, w, R; try { - if ((T = b == null ? void 0 : b.signal) != null && T.aborted) return; - } catch (Y) { - (v = console.debug) == null || v.call(console, Y); + if ((K = b == null ? void 0 : b.signal) != null && K.aborted) return; + } catch (V) { + (j = console.debug) == null || j.call(console, V); } - A({ reload: !1 }); + y({ reload: !1 }); try { (w = L == null ? void 0 : L.refresh) == null || w.call(L); - } catch (Y) { - (R = console.debug) == null || R.call(console, Y); + } catch (V) { + (R = console.debug) == null || R.call(console, V); } p(), X && clearTimeout(X), X = setTimeout(() => { - var Y; + var V; X = null; try { g(); - } catch (F) { - (Y = console.debug) == null || Y.call(console, F); + } catch (O) { + (V = console.debug) == null || V.call(console, O); } - C.reloadGrid().catch(() => { + W.reloadGrid().catch(() => { }); }, 250); }; @@ -34315,14 +34342,14 @@ function g2({ window.addEventListener("mjr:filters-changed", x, { signal: b == null ? void 0 : b.signal }); - } catch (T) { - (f = console.debug) == null || f.call(console, T); + } catch (K) { + (f = console.debug) == null || f.call(console, K); } - h = () => { + C = () => { X && (clearTimeout(X), X = null); }; } else - h = m2({ + C = mM({ state: e, kindSelect: n, wfCheckbox: i, @@ -34335,25 +34362,25 @@ function g2({ minHeightInput: d, maxWidthInput: u, maxHeightInput: I, - dateRangeSelect: y, - dateExactInput: S, - reloadGrid: C.reloadGrid, + dateRangeSelect: A, + dateExactInput: h, + reloadGrid: W.reloadGrid, reconcileSelection: g, lifecycleSignal: (b == null ? void 0 : b.signal) || null, onFiltersChanged: () => { var X, x; - A({ reload: !1 }); + y({ reload: !1 }); try { (X = L == null ? void 0 : L.refresh) == null || X.call(L); - } catch (T) { - (x = console.debug) == null || x.call(console, T); + } catch (K) { + (x = console.debug) == null || x.call(console, K); } p(); } }); - return { agendaCalendar: L, disposeFilters: h }; + return { agendaCalendar: L, disposeFilters: C }; } -function I2({ +function IM({ state: e, scopeController: t, browserNav: n, @@ -34389,7 +34416,7 @@ function I2({ onDuplicateAlertClick: async (l) => { const c = (l || o() || {}).firstGroup; if (c && Array.isArray(c.assets) && c.assets.length >= 2) { - const u = c.assets[0] || {}, I = c.assets.slice(1).map((y) => Number((y == null ? void 0 : y.id) || 0)).filter((y) => y > 0); + const u = c.assets[0] || {}, I = c.assets.slice(1).map((A) => Number((A == null ? void 0 : A.id) || 0)).filter((A) => A > 0); if (I.length) { if (await yi( m( @@ -34398,13 +34425,13 @@ function I2({ { count: c.assets.length, target: (u == null ? void 0 : u.filename) || (u == null ? void 0 : u.id) } ) )) { - const Z = await Kf( + const S = await Uf( Number((u == null ? void 0 : u.id) || 0), I ); - Z != null && Z.ok ? Ze(m("toast.tagsMerged", "Tags merged"), "success", 2200) : Ze( + S != null && S.ok ? Ae(m("toast.tagsMerged", "Tags merged"), "success", 2200) : Ae( m("toast.tagMergeFailed", "Tag merge failed: {error}", { - error: (Z == null ? void 0 : Z.error) || "error" + error: (S == null ? void 0 : S.error) || "error" }), "warning", 3500 @@ -34417,14 +34444,14 @@ function I2({ { count: I.length } ) )) { - const Z = await Df(I); - Z != null && Z.ok ? (Ze( + const S = await Df(I); + S != null && S.ok ? (Ae( m("toast.duplicatesDeleted", "Duplicates deleted"), "success", 2200 - ), await i.reloadGrid()) : Ze( + ), await i.reloadGrid()) : Ae( m("toast.deleteFailed", "Delete failed: {error}", { - error: (Z == null ? void 0 : Z.error) || "error" + error: (S == null ? void 0 : S.error) || "error" }), "warning", 3500 @@ -34440,12 +34467,12 @@ function I2({ "Start duplicate analysis in background?" ) )) return; - const d = await Bf(500); - d != null && d.ok ? Ze( + const d = await Kf(500); + d != null && d.ok ? Ae( m("toast.dupAnalysisStarted", "Duplicate analysis started"), "info", 2200 - ) : Ze( + ) : Ae( m("toast.analysisNotStarted", "Analysis not started: {error}", { error: (d == null ? void 0 : d.error) || "error" }), @@ -34455,13 +34482,13 @@ function I2({ } }; } -async function b2(e, { useComfyThemeUI: t = !0, external: n = {} } = {}) { - return p2(e, { useComfyThemeUI: t, external: n }); +async function bM(e, { useComfyThemeUI: t = !0, external: n = {} } = {}) { + return pM(e, { useComfyThemeUI: t, external: n }); } -async function p2(e, { useComfyThemeUI: t = !0, external: n = {} } = {}) { - var Vt, Bt, Rt, Ct, zt, gt, mn, wt, on, rn, hn, ln, gn, nn, An, vn, un, Mn, yn, Ut, Jt, ro, lo, ao, hi; - Is("panelRender"), Rb("panelRender"); - const i = typeof AbortController < "u" ? new AbortController() : null, { popovers: o, hostWrapper: r, hostWrapperPrevStyle: l } = n2(e, { +async function pM(e, { useComfyThemeUI: t = !0, external: n = {} } = {}) { + var Lt, Tt, Ot, Ct, gn, pt, zt, ht, on, an, hn, cn, bn, ln, Wn, Yn, In, Gn, fn, Kt, Jt, ro, lo, ao, Ci; + bs("panelRender"), Rb("panelRender"); + const i = typeof AbortController < "u" ? new AbortController() : null, { popovers: o, hostWrapper: r, hostWrapperPrevStyle: l } = nM(e, { useComfyThemeUI: t }), a = Al(); if (!a) @@ -34507,402 +34534,402 @@ async function p2(e, { useComfyThemeUI: t = !0, external: n = {} } = {}) { "similarSourceAssetId" ]); a.viewScope = String(a.viewScope || "").trim().toLowerCase() === "similar" ? "similar" : "", a.similarResults = Array.isArray(a.similarResults) ? a.similarResults : [], a.similarTitle = String(a.similarTitle || ""), a.similarSourceAssetId = String(a.similarSourceAssetId || ""); - const s = (Ve, it = "") => c.read(Ve, (a == null ? void 0 : a[Ve]) ?? it), d = (Ve, it) => c.write(Ve, it), u = () => { + const s = (Ve, ot = "") => c.read(Ve, (a == null ? void 0 : a[Ve]) ?? ot), d = (Ve, ot) => c.write(Ve, ot), u = () => { const Ve = s("selectedAssetIds", []); return Array.isArray(Ve) ? Ve.map(String).filter(Boolean) : []; - }, I = () => String(s("activeAssetId", "") || "").trim(), y = () => !!s("sidebarOpen", !1), { - header: S, - tabButtons: Z, - customMenuBtn: C, + }, I = () => String(s("activeAssetId", "") || "").trim(), A = () => !!s("sidebarOpen", !1), { + header: h, + tabButtons: S, + customMenuBtn: W, filterBtn: g, - sortBtn: A, + sortBtn: y, collectionsBtn: p, pinnedFoldersBtn: b, messageBtn: L, - customPopover: h, + customPopover: C, customSelect: G, - customAddBtn: W, + customAddBtn: Z, customRemoveBtn: f, filterPopover: X, kindSelect: x, - wfCheckbox: T, - workflowTypeSelect: v, + wfCheckbox: K, + workflowTypeSelect: j, ratingSelect: w, minSizeInput: R, - maxSizeInput: Y, - resolutionPresetSelect: F, - minWidthInput: N, - minHeightInput: V, - maxWidthInput: k, - maxHeightInput: K, + maxSizeInput: V, + resolutionPresetSelect: O, + minWidthInput: k, + minHeightInput: Y, + maxWidthInput: N, + maxHeightInput: U, dateRangeSelect: z, - dateExactInput: B, + dateExactInput: T, agendaContainer: J, sortPopover: P, - sortMenu: H, + sortMenu: E, collectionsPopover: $, - pinnedFoldersPopover: E, - pinnedFoldersMenu: oe, + pinnedFoldersPopover: H, + pinnedFoldersMenu: ne, messagePopoverTitle: M, - messagePopover: j, - messageTabBtn: O, + messagePopover: v, + messageTabBtn: F, messageTabBadge: D, historyTabBtn: q, historyTabBadge: ee, - historyTabCount: ce, + historyTabCount: ae, historyPanel: ue, - shortcutsTabBtn: U, + shortcutsTabBtn: B, messageList: Q, shortcutsPanel: _, markReadBtn: le, - searchSection: de, - searchInputEl: se, + searchSection: ce, + searchInputEl: de, similarBtn: ge, - setSemanticEnabled: je, - _headerDispose: Se - } = n.headerSection, ke = !!((Vt = n == null ? void 0 : n.headerSection) != null && Vt.isVueHeader); - c.read("searchQuery", "") && (se.value = c.read("searchQuery", "")), se.addEventListener( + setSemanticEnabled: Le, + _headerDispose: xe + } = n.headerSection, Xe = !!((Lt = n == null ? void 0 : n.headerSection) != null && Lt.isVueHeader); + c.read("searchQuery", "") && (de.value = c.read("searchQuery", "")), de.addEventListener( "input", (Ve) => { c.write("searchQuery", Ve.target.value); }, { signal: i == null ? void 0 : i.signal } ); - const we = n.summaryBar, Je = n.updateSummaryBar, $e = n.folderBreadcrumb, qe = n.statusSection, Ue = n.statusDot, Te = n.statusText, Oe = n.capabilitiesSection, pt = n.browseSection, Me = n.gridWrapper, Xt = n.sidebar; - Xn(); - const Mt = document.createElement("div"); - Mt.classList.add("mjr-am-content"); - let me = null, Pe = null; + const Me = n.summaryBar, Fe = n.updateSummaryBar, it = n.folderBreadcrumb, qe = n.statusSection, Pe = n.statusDot, Re = n.statusText, rt = n.capabilitiesSection, Te = n.browseSection, qt = n.gridWrapper, kt = n.sidebar; + kn(); + const we = document.createElement("div"); + we.classList.add("mjr-am-content"); + let me = null, He = null; e.tabIndex = -1; - let Le = null, Ot = 0; - const Xe = () => { + let Ye = null, Pt = 0; + const ke = () => { try { - Ot = Date.now(); + Pt = Date.now(); } catch { - Ot = 0; + Pt = 0; } }, Ee = typeof (n == null ? void 0 : n.bindGridHostState) == "function" && typeof (n == null ? void 0 : n.restoreGridUiState) == "function", Ke = !Ee; - Me.addEventListener( + qt.addEventListener( "scroll", () => { - Xe(), Ke && (Le && clearTimeout(Le), Le = setTimeout(() => { + ke(), Ke && (Ye && clearTimeout(Ye), Ye = setTimeout(() => { var Ve; try { - c.write("scrollTop", Me.scrollTop); - } catch (it) { - (Ve = console.debug) == null || Ve.call(console, it); + c.write("scrollTop", qt.scrollTop); + } catch (ot) { + (Ve = console.debug) == null || Ve.call(console, ot); } }, 100)); }, { passive: !0, signal: i == null ? void 0 : i.signal } - ), me = n.gridContainer, me.parentElement !== Me && Me.appendChild(me), Ds(me); + ), me = n.gridContainer, me.parentElement !== qt && qt.appendChild(me), ja(me); try { me.dataset.mjrScope = String(s("scope", a.scope || "output") || "output"); } catch (Ve) { - (Bt = console.debug) == null || Bt.call(console, Ve); + (Tt = console.debug) == null || Tt.call(console, Ve); } - const nt = [], ut = (Ve) => { - typeof Ve == "function" && nt.push(Ve); + const lt = [], wt = (Ve) => { + typeof Ve == "function" && lt.push(Ve); }; me._mjrSummaryBarDispose = () => { var Ve; - for (const it of nt.splice(0)) + for (const ot of lt.splice(0)) try { - it(); - } catch (xt) { - (Ve = console.debug) == null || Ve.call(console, xt); + ot(); + } catch (St) { + (Ve = console.debug) == null || Ve.call(console, St); } }; try { const Ve = () => { - var it; + var ot; try { - Je == null || Je({ state: a, gridContainer: me }); - } catch (xt) { - (it = console.debug) == null || it.call(console, xt); + Fe == null || Fe({ state: a, gridContainer: me }); + } catch (St) { + (ot = console.debug) == null || ot.call(console, St); } }; me.addEventListener("mjr:grid-stats", Ve, { signal: i == null ? void 0 : i.signal - }), ut(() => { - var it; + }), wt(() => { + var ot; try { me.removeEventListener("mjr:grid-stats", Ve); - } catch (xt) { - (it = console.debug) == null || it.call(console, xt); + } catch (St) { + (ot = console.debug) == null || ot.call(console, St); } }); } catch (Ve) { - (Rt = console.debug) == null || Rt.call(console, Ve); + (Ot = console.debug) == null || Ot.call(console, Ve); } try { } catch (Ve) { (Ct = console.debug) == null || Ct.call(console, Ve); } - const It = n.loadAssets ?? ed, dt = n.loadAssetsFromList ?? td, Re = n.prepareGridForScopeSwitch ?? nZ, Wt = n.disposeGrid ?? GI, lt = n.refreshGrid ?? iZ, qt = n.captureAnchor ?? oZ, yt = n.restoreAnchor ?? rZ, mt = n.hydrateGridFromSnapshot ?? tZ; + const at = n.loadAssets ?? ed, tt = n.loadAssetsFromList ?? td, Oe = n.prepareGridForScopeSwitch ?? nZ, Rt = n.disposeGrid ?? SI, nt = n.refreshGrid ?? iZ, Mt = n.captureAnchor ?? oZ, dt = n.restoreAnchor ?? rZ, bt = n.hydrateGridFromSnapshot ?? tZ; if (typeof (n == null ? void 0 : n.onGridContainerReady) == "function") try { n.onGridContainerReady(me, { getState: () => a }); } catch (Ve) { - (zt = console.debug) == null || zt.call(console, Ve); + (gn = console.debug) == null || gn.call(console, Ve); } else e._mjrGridContextMenuUnbind = sd({ gridContainer: me, getState: () => a }); - const kt = m("search.findSimilar", "Find Similar"), $t = m( + const Yt = m("search.findSimilar", "Find Similar"), $t = m( "search.similarDisabled", "AI features are disabled in settings" - ), { applyWatcherForScope: Tt, isAiEnabled: te } = i2({ + ), { applyWatcherForScope: nn, isAiEnabled: ie } = iM({ container: e, state: a, - sidebar: Xt, - browseSection: pt, - gridWrapper: Me, + sidebar: kt, + browseSection: Te, + gridWrapper: qt, similarBtn: ge, - setSemanticEnabled: je, - similarEnabledTitle: kt, + setSemanticEnabled: Le, + similarEnabledTitle: Yt, similarDisabledTitle: $t, - refreshGridFn: lt, - isSidebarOpen: y, + refreshGridFn: nt, + isSidebarOpen: A, readActiveAssetId: I, - getSidebarController: () => Pe, + getSidebarController: () => He, panelLifecycleAC: i }); - Mt.appendChild(qe), Mt.appendChild(de), Mt.appendChild($e), Mt.appendChild(we), Mt.appendChild(pt), e.appendChild(S); + we.appendChild(qe), we.appendChild(ce), we.appendChild(it), we.appendChild(Me), we.appendChild(Te), e.appendChild(h); try { - (gt = e._mjrVersionUpdateCleanup) == null || gt.call(e); + (pt = e._mjrVersionUpdateCleanup) == null || pt.call(e); } catch (Ve) { - (mn = console.debug) == null || mn.call(console, Ve); + (zt = console.debug) == null || zt.call(console, Ve); } - e._mjrVersionUpdateCleanup = Se || S._mjrVersionUpdateCleanup, e.appendChild(Mt); - const ye = () => Cs(se), We = zM({ + e._mjrVersionUpdateCleanup = xe || h._mjrVersionUpdateCleanup, e.appendChild(we); + const pe = () => Zs(de), Ce = z2({ gridContainer: me, - loadAssets: It, - loadAssetsFromList: dt, - getCollectionAssets: Hf, - disposeGrid: Wt, - getQuery: ye, - searchInputEl: se, + loadAssets: at, + loadAssetsFromList: tt, + getCollectionAssets: Ef, + disposeGrid: Rt, + getQuery: pe, + searchInputEl: de, state: a }); - let pe = null, De = null, ot = null, Zt = null, tn = null, Pt = null, vt = null, re = null, ne = null; - const Ie = () => { - var Ve, it, xt, an; + let ye = null, De = null, ut = null, At = null, Ht = null, Qt = null, xt = null, Gt = null, je = null; + const oe = () => { + var Ve, ot, St, sn; try { (Ve = De == null ? void 0 : De.update) == null || Ve.call(De); - } catch (sn) { - (it = console.debug) == null || it.call(console, sn); + } catch (un) { + (ot = console.debug) == null || ot.call(console, un); } try { - (xt = Pt == null ? void 0 : Pt.renderBreadcrumb) == null || xt.call(Pt); - } catch (sn) { - (an = console.debug) == null || an.call(console, sn); + (St = Qt == null ? void 0 : Qt.renderBreadcrumb) == null || St.call(Qt); + } catch (un) { + (sn = console.debug) == null || sn.call(console, un); } }; - Ee || (re = $M({ + Ee || (Gt = $2({ gridContainer: me, readSelectedAssetIds: u, readActiveAssetId: I, writeSelectedAssetIds: (Ve) => d("selectedAssetIds", Ve), writeActiveAssetId: (Ve) => d("activeAssetId", Ve), onSelectionChanged: () => { - Xe(), Ie(); + ke(), oe(); }, lifecycleSignal: (i == null ? void 0 : i.signal) || null - })), Pt = JM({ + })), Qt = J2({ state: a, gridContainer: me, - folderBreadcrumb: $e, + folderBreadcrumb: it, customSelect: G, - reloadGrid: () => We.reloadGrid(), + reloadGrid: () => Ce.reloadGrid(), onContextChanged: () => { - var Ve, it; + var Ve, ot; try { (Ve = De == null ? void 0 : De.update) == null || Ve.call(De); - } catch (xt) { - (it = console.debug) == null || it.call(console, xt); + } catch (St) { + (ot = console.debug) == null || ot.call(console, St); } }, lifecycleSignal: (i == null ? void 0 : i.signal) || null }); try { - vt = Pt.bindGridFolderNavigation(); + xt = Qt.bindGridFolderNavigation(); } catch (Ve) { - (wt = console.debug) == null || wt.call(console, Ve); + (ht = console.debug) == null || ht.call(console, Ve); } - const Ne = async () => { - var xt; - const Ve = String(s("scope", a.scope || "output") || "output").toLowerCase(), it = String(s("customRootId", a.customRootId || "") || "").trim(); - if (Ve === "custom" && !it) { - ot = null, Ie(); + const se = async () => { + var St; + const Ve = String(s("scope", a.scope || "output") || "output").toLowerCase(), ot = String(s("customRootId", a.customRootId || "") || "").trim(); + if (Ve === "custom" && !ot) { + ut = null, oe(); return; } try { - const an = await Uf( - { scope: Ve, customRootId: it, maxGroups: 4, maxPairs: 4 }, + const sn = await Bf( + { scope: Ve, customRootId: ot, maxGroups: 4, maxPairs: 4 }, { signal: i == null ? void 0 : i.signal } ); - if (!(an != null && an.ok)) return; - const sn = an.data || {}; - ot = { - exactCount: Array.isArray(sn.exact_groups) ? sn.exact_groups.length : 0, - similarCount: Array.isArray(sn.similar_pairs) ? sn.similar_pairs.length : 0, - firstGroup: Array.isArray(sn.exact_groups) ? sn.exact_groups[0] : null, - firstPair: Array.isArray(sn.similar_pairs) ? sn.similar_pairs[0] : null - }, Ie(); - } catch (an) { - (xt = console.debug) == null || xt.call(console, an); + if (!(sn != null && sn.ok)) return; + const un = sn.data || {}; + ut = { + exactCount: Array.isArray(un.exact_groups) ? un.exact_groups.length : 0, + similarCount: Array.isArray(un.similar_pairs) ? un.similar_pairs.length : 0, + firstGroup: Array.isArray(un.exact_groups) ? un.exact_groups[0] : null, + firstPair: Array.isArray(un.similar_pairs) ? un.similar_pairs[0] : null + }, oe(); + } catch (sn) { + (St = console.debug) == null || St.call(console, sn); } - }, He = 120; - let rt = null; - o2({ + }, fe = 120; + let Be = null; + oM({ gridContainer: me, panelLifecycleAC: i, requestQueuedReload: () => { var Ve; try { - rt && clearTimeout(rt); - } catch (it) { - (Ve = console.debug) == null || Ve.call(console, it); + Be && clearTimeout(Be); + } catch (ot) { + (Ve = console.debug) == null || Ve.call(console, ot); } - rt = setTimeout(() => { - rt = null, ve().catch((it) => { - var xt; + Be = setTimeout(() => { + Be = null, Ge().catch((ot) => { + var St; try { - console.warn("[Majoor] queuedReload failed", it); - } catch (an) { - (xt = console.debug) == null || xt.call(console, an); + console.warn("[Majoor] queuedReload failed", ot); + } catch (sn) { + (St = console.debug) == null || St.call(console, sn); } }); - }, He); + }, fe); }, - notifyContextChanged: Ie, - markUserInteraction: Xe, + notifyContextChanged: oe, + markUserInteraction: ke, writePanelValue: d, popovers: o, collectionsPopover: $, - gridController: We, - registerSummaryDispose: ut + gridController: Ce, + registerSummaryDispose: wt }); - const Yt = UM({ + const Wt = B2({ state: a, customSelect: G, customRemoveBtn: f, comfyConfirm: yi, - comfyPrompt: Vi, - comfyToast: Ze, + comfyPrompt: Yi, + comfyToast: Ae, get: Ft, - post: Et, - ENDPOINTS: ct, - reloadGrid: We.reloadGrid, + post: Dt, + ENDPOINTS: st, + reloadGrid: Ce.reloadGrid, onRootChanged: async () => { - var Ve, it, xt, an; + var Ve, ot, St, sn; try { - (Ve = Pt == null ? void 0 : Pt.resetHistory) == null || Ve.call(Pt); - } catch (sn) { - (it = console.debug) == null || it.call(console, sn); + (Ve = Qt == null ? void 0 : Qt.resetHistory) == null || Ve.call(Qt); + } catch (un) { + (ot = console.debug) == null || ot.call(console, un); } try { - await Tt(a.scope); - } catch (sn) { - (xt = console.debug) == null || xt.call(console, sn); + await nn(a.scope); + } catch (un) { + (St = console.debug) == null || St.call(console, un); } try { - await Ne(); - } catch (sn) { - (an = console.debug) == null || an.call(console, sn); + await se(); + } catch (un) { + (sn = console.debug) == null || sn.call(console, un); } } - }), Gt = Yt.bind({ customAddBtn: W, customRemoveBtn: f }); + }), Vt = Wt.bind({ customAddBtn: Z, customRemoveBtn: f }); try { window.addEventListener( "mjr:custom-roots-changed", async (Ve) => { - var xt; - const it = String(((xt = Ve == null ? void 0 : Ve.detail) == null ? void 0 : xt.preferredId) || "").trim() || null; - await Yt.refreshCustomRoots(it); + var St; + const ot = String(((St = Ve == null ? void 0 : Ve.detail) == null ? void 0 : St.preferredId) || "").trim() || null; + await Wt.refreshCustomRoots(ot); }, { signal: i == null ? void 0 : i.signal } ); } catch (Ve) { (on = console.debug) == null || on.call(console, Ve); } - const Qt = () => { + const _t = () => { var Ve; try { - const it = me == null ? void 0 : me._mjrGetAssets, xt = me == null ? void 0 : me._mjrSetSelection; - if (typeof it != "function" || typeof xt != "function") return; - const an = (Array.isArray(it()) ? it() : []).map((ci) => String((ci == null ? void 0 : ci.id) ?? "").trim()).filter(Boolean), sn = u(), Bn = sn.filter((ci) => an.includes(ci)), Yi = sn.length - Bn.length; - if (Yi <= 0) return; - const ki = I(), Ji = Bn.includes(ki) ? ki : Bn[0] || ""; - xt(Bn, Ji), Ze( + const ot = me == null ? void 0 : me._mjrGetAssets, St = me == null ? void 0 : me._mjrSetSelection; + if (typeof ot != "function" || typeof St != "function") return; + const sn = (Array.isArray(ot()) ? ot() : []).map((ci) => String((ci == null ? void 0 : ci.id) ?? "").trim()).filter(Boolean), un = u(), Kn = un.filter((ci) => sn.includes(ci)), Vi = un.length - Kn.length; + if (Vi <= 0) return; + const Xi = I(), Ji = Kn.includes(Xi) ? Xi : Kn[0] || ""; + St(Kn, Ji), Ae( m( "toast.selectionPruned", "{count} items deselected - not visible in current view", - { count: Yi } + { count: Vi } ), "info", 2600, { noHistory: !0 } ); - } catch (it) { - (Ve = console.debug) == null || Ve.call(console, it); + } catch (ot) { + (Ve = console.debug) == null || Ve.call(console, ot); } }; - pe = TM({ + ye = T2({ state: a, - tabButtons: Z, - customMenuBtn: C, - customPopover: h, + tabButtons: S, + customMenuBtn: W, + customPopover: C, popovers: o, - refreshCustomRoots: Yt.refreshCustomRoots, - reloadGrid: We.reloadGrid, - reconcileSelection: Qt, + refreshCustomRoots: Wt.refreshCustomRoots, + reloadGrid: Ce.reloadGrid, + reconcileSelection: _t, onChanged: () => { var Ve; try { me && (me.dataset.mjrScope = String( s("scope", a.scope || "output") || "output" )); - } catch (it) { - (Ve = console.debug) == null || Ve.call(console, it); + } catch (ot) { + (Ve = console.debug) == null || Ve.call(console, ot); } - Ie(); + oe(); }, onScopeChanged: async () => { - var Ve, it; + var Ve, ot; try { - await Tt( + await nn( String(s("scope", a.scope || "output") || "output") ); - } catch (xt) { - (Ve = console.debug) == null || Ve.call(console, xt); + } catch (St) { + (Ve = console.debug) == null || Ve.call(console, St); } try { - await Ne(); - } catch (xt) { - (it = console.debug) == null || it.call(console, xt); + await se(); + } catch (St) { + (ot = console.debug) == null || ot.call(console, St); } }, onBeforeReload: async () => { - var Ve, it, xt; + var Ve, ot, St; try { me.dataset.mjrScope = s("scope", "output"), me.dataset.mjrCustomRootId = s("customRootId", "") || "", me.dataset.mjrSubfolder = s("currentFolderRelativePath", "") || "", me.dataset.mjrCollectionId = s("collectionId", "") || "", me.dataset.mjrViewScope = s("viewScope", "") || ""; - } catch (an) { - (Ve = console.debug) == null || Ve.call(console, an); + } catch (sn) { + (Ve = console.debug) == null || Ve.call(console, sn); } try { - Re(me); - } catch (an) { - (it = console.debug) == null || it.call(console, an); + Oe(me); + } catch (sn) { + (ot = console.debug) == null || ot.call(console, sn); } try { - await Ni( - Ue, - Te, - Oe, + await ki( + Pe, + Re, + rt, { scope: s("scope", a.scope || "output"), customRootId: s("customRootId", a.customRootId || "") @@ -34910,517 +34937,517 @@ async function p2(e, { useComfyThemeUI: t = !0, external: n = {} } = {}) { null, { signal: (i == null ? void 0 : i.signal) || null } ); - } catch (an) { - (xt = console.debug) == null || xt.call(console, an); + } catch (sn) { + (St = console.debug) == null || St.call(console, sn); } } }); - const Yn = async ({ reload: Ve = !1 } = {}) => { - var it, xt; + const Xt = async ({ reload: Ve = !1 } = {}) => { + var ot, St; try { if (String(s("viewScope", a.viewScope || "") || "").trim().toLowerCase() !== "similar") return; - await ((it = pe == null ? void 0 : pe.clearSimilarScope) == null ? void 0 : it.call(pe, { reload: Ve })); - } catch (an) { - (xt = console.debug) == null || xt.call(console, an); + await ((ot = ye == null ? void 0 : ye.clearSimilarScope) == null ? void 0 : ot.call(ye, { reload: Ve })); + } catch (sn) { + (St = console.debug) == null || St.call(console, sn); } }; - Object.values(Z).forEach((Ve) => { - Ve.addEventListener("click", () => pe.setScope(Ve.dataset.scope), { + Object.values(S).forEach((Ve) => { + Ve.addEventListener("click", () => ye.setScope(Ve.dataset.scope), { signal: i == null ? void 0 : i.signal }); - }), RM({ + }), R2({ messageBtn: L, - messagePopover: j, + messagePopover: v, title: M, messageList: Q, historyTabBtn: q, historyTabBadge: ee, - historyTabCount: ce, + historyTabCount: ae, historyPanel: ue, shortcutsPanel: _, - messageTabBtn: O, + messageTabBtn: F, messageTabBadge: D, - shortcutsTabBtn: U, + shortcutsTabBtn: B, markReadBtn: le, popovers: o, signal: i == null ? void 0 : i.signal, onBeforeToggle: () => { - o.close(h), o.close(X), o.close(P), o.close($), o.close(E); + o.close(C), o.close(X), o.close(P), o.close($), o.close(H); } }), o.setDismissWhitelist([ - h, + C, X, P, $, - E, - j, - C, + H, + v, + W, g, - A, + y, p, b, L - ]), C.addEventListener( + ]), W.addEventListener( "click", (Ve) => { - Ve.stopPropagation(), o.close(X), o.close(P), o.close($), o.close(j), o.toggle(h, C); + Ve.stopPropagation(), o.close(X), o.close(P), o.close($), o.close(v), o.toggle(C, W); }, { signal: i == null ? void 0 : i.signal } ), g.addEventListener( "click", (Ve) => { - Ve.stopPropagation(), o.close(h), o.close(P), o.close($), o.close(j), o.toggle(X, g); + Ve.stopPropagation(), o.close(C), o.close(P), o.close($), o.close(v), o.toggle(X, g); }, { signal: i == null ? void 0 : i.signal } ), p.addEventListener( "click", (Ve) => { - Ve.stopPropagation(), o.close(h), o.close(X), o.close(P), o.close(j), o.toggle($, p); + Ve.stopPropagation(), o.close(C), o.close(X), o.close(P), o.close(v), o.toggle($, p); }, { signal: i == null ? void 0 : i.signal } ); - const wn = ke ? null : KM({ + const tn = Xe ? null : U2({ state: a, - sortBtn: A, - sortMenu: H, + sortBtn: y, + sortMenu: E, sortPopover: P, popovers: o, - reloadGrid: We.reloadGrid, - onChanged: () => Ie() + reloadGrid: Ce.reloadGrid, + onChanged: () => oe() }); - wn ? wn.bind({ + tn ? tn.bind({ onBeforeToggle: () => { - o.close(h), o.close(X), o.close($), o.close(j); + o.close(C), o.close(X), o.close($), o.close(v); } - }) : A.addEventListener( + }) : y.addEventListener( "click", (Ve) => { - Ve.stopPropagation(), o.close(h), o.close(X), o.close($), o.close(j), o.toggle(P, A); + Ve.stopPropagation(), o.close(C), o.close(X), o.close($), o.close(v), o.toggle(P, y); }, { signal: i == null ? void 0 : i.signal } - ), r2({ + ), rM({ similarBtn: ge, gridContainer: me, state: a, panelLifecycleAC: i, - isAiEnabled: te, + isAiEnabled: ie, similarDisabledTitle: $t, readActiveAssetId: I, readSelectedAssetIds: u, readPanelValue: s, writePanelValue: d, - scopeController: pe, + scopeController: ye, closePopovers: () => { - o.close(h), o.close(X), o.close(P), o.close($), o.close(j); + o.close(C), o.close(X), o.close(P), o.close($), o.close(v); } - }), l2({ + }), lM({ pinnedFoldersBtn: b, - pinnedFoldersMenu: oe, - pinnedFoldersPopover: E, + pinnedFoldersMenu: ne, + pinnedFoldersPopover: H, popovers: o, closeOtherPopovers: () => { - o.close(h), o.close(X), o.close(P), o.close($), o.close(j); + o.close(C), o.close(X), o.close(P), o.close($), o.close(v); }, state: a, gridContainer: me, customSelect: G, - scopeController: pe, - customRootsController: Yt, - gridController: We, - applyWatcherForScope: Tt, - refreshDuplicateAlerts: Ne, - notifyContextChanged: Ie, + scopeController: ye, + customRootsController: Wt, + gridController: Ce, + applyWatcherForScope: nn, + refreshDuplicateAlerts: se, + notifyContextChanged: oe, panelLifecycleAC: i }); - const { agendaCalendar: xn, disposeFilters: en } = g2({ + const { agendaCalendar: Ln, disposeFilters: Mn } = gM({ state: a, - hasVueHeaderSection: ke, + hasVueHeaderSection: Xe, kindSelect: x, - wfCheckbox: T, - workflowTypeSelect: v, + wfCheckbox: K, + workflowTypeSelect: j, ratingSelect: w, minSizeInput: R, - maxSizeInput: Y, - resolutionPresetSelect: F, - minWidthInput: N, - minHeightInput: V, - maxWidthInput: k, - maxHeightInput: K, + maxSizeInput: V, + resolutionPresetSelect: O, + minWidthInput: k, + minHeightInput: Y, + maxWidthInput: N, + maxHeightInput: U, dateRangeSelect: z, - dateExactInput: B, + dateExactInput: T, agendaContainer: J, - gridController: We, - reconcileVisibleSelection: Qt, - exitSimilarViewIfActive: Yn, - notifyContextChanged: Ie, + gridController: Ce, + reconcileVisibleSelection: _t, + exitSimilarViewIfActive: Xt, + notifyContextChanged: oe, panelLifecycleAC: i - }), Vn = I2({ + }), Xn = IM({ state: a, - scopeController: pe, - browserNav: Pt, - gridController: We, - getDuplicatesAlert: () => ot, - refreshDuplicateAlerts: Ne + scopeController: ye, + browserNav: Qt, + gridController: Ce, + getDuplicatesAlert: () => ut, + refreshDuplicateAlerts: se }); try { - De = BM({ + De = K2({ state: a, gridContainer: me, filterBtn: g, - sortBtn: A, + sortBtn: y, collectionsBtn: p, - searchInputEl: se, + searchInputEl: de, kindSelect: x, - wfCheckbox: T, - workflowTypeSelect: v, + wfCheckbox: K, + workflowTypeSelect: j, ratingSelect: w, minSizeInput: R, - maxSizeInput: Y, - minWidthInput: N, - minHeightInput: V, - maxWidthInput: k, - maxHeightInput: K, - resolutionPresetSelect: F, + maxSizeInput: V, + minWidthInput: k, + minHeightInput: Y, + maxWidthInput: N, + maxHeightInput: U, + resolutionPresetSelect: O, dateRangeSelect: z, - dateExactInput: B, - scopeController: pe, - sortController: wn, - updateSummaryBar: Je, - reloadGrid: () => We.reloadGrid(), - getExtraContext: () => ({ duplicatesAlert: ot }), - extraActions: Vn + dateExactInput: T, + scopeController: ye, + sortController: tn, + updateSummaryBar: Fe, + reloadGrid: () => Ce.reloadGrid(), + getExtraContext: () => ({ duplicatesAlert: ut }), + extraActions: Xn }); } catch (Ve) { - (rn = console.debug) == null || rn.call(console, Ve); + (an = console.debug) == null || an.call(console, Ve); } try { - if (Ie(), Ee) { + if (oe(), Ee) { const Ve = n.bindGridHostState({ - onContextChanged: Ie, - markUserInteraction: Xe + onContextChanged: oe, + markUserInteraction: ke }); - ut(Ve); + wt(Ve); } else { - const Ve = () => Ie(); + const Ve = () => oe(); me.addEventListener("mjr:grid-stats", Ve, { signal: i == null ? void 0 : i.signal }), (hn = window.addEventListener) == null || hn.call(window, "mjr-settings-changed", Ve, { signal: i == null ? void 0 : i.signal }); - let it = null, xt = null; - const an = () => { - xt && clearTimeout(xt), xt = setTimeout(() => { - xt = null, it && cancelAnimationFrame(it), it = requestAnimationFrame(() => { - it = null, Ie(); + let ot = null, St = null; + const sn = () => { + St && clearTimeout(St), St = setTimeout(() => { + St = null, ot && cancelAnimationFrame(ot), ot = requestAnimationFrame(() => { + ot = null, oe(); }); }, 250); - }, sn = new MutationObserver(() => an()); - sn.observe(me, { childList: !0 }), me._mjrSummaryBarObserver = sn, ut(() => { - var Bn, Yi, ki, Ji, ci; + }, un = new MutationObserver(() => sn()); + un.observe(me, { childList: !0 }), me._mjrSummaryBarObserver = un, wt(() => { + var Kn, Vi, Xi, Ji, ci; try { me.removeEventListener("mjr:grid-stats", Ve); - } catch (Ci) { - (Bn = console.debug) == null || Bn.call(console, Ci); + } catch (hi) { + (Kn = console.debug) == null || Kn.call(console, hi); } try { - (Yi = window.removeEventListener) == null || Yi.call(window, "mjr-settings-changed", Ve); - } catch (Ci) { - (ki = console.debug) == null || ki.call(console, Ci); + (Vi = window.removeEventListener) == null || Vi.call(window, "mjr-settings-changed", Ve); + } catch (hi) { + (Xi = console.debug) == null || Xi.call(console, hi); } try { - xt && clearTimeout(xt); - } catch (Ci) { - (Ji = console.debug) == null || Ji.call(console, Ci); + St && clearTimeout(St); + } catch (hi) { + (Ji = console.debug) == null || Ji.call(console, hi); } try { - sn.disconnect(); - } catch (Ci) { - (ci = console.debug) == null || ci.call(console, Ci); + un.disconnect(); + } catch (hi) { + (ci = console.debug) == null || ci.call(console, hi); } }); } } catch (Ve) { - (ln = console.debug) == null || ln.call(console, Ve); + (cn = console.debug) == null || cn.call(console, Ve); } - Pe = QM({ + He = Q2({ gridContainer: me, - sidebar: Xt, - createRatingBadge: Ya, + sidebar: kt, + createRatingBadge: Xa, createTagsBadge: JI, - showAssetInSidebar: aM, - closeSidebar: Ub, + showAssetInSidebar: a2, + closeSidebar: Bb, state: a }); - const pn = { - gridController: We, - captureAnchor: qt, - restoreAnchor: yt, + const rn = { + gridController: Ce, + captureAnchor: Mt, + restoreAnchor: dt, restoreGridUiState: Ee ? (Ve) => n.restoreGridUiState(Ve, { onRestoreSidebar: () => { - var it, xt; + var ot, St; try { - (it = Pe == null ? void 0 : Pe.toggleDetails) == null || it.call(Pe); - } catch (an) { - (xt = console.debug) == null || xt.call(console, an); + (ot = He == null ? void 0 : He.toggleDetails) == null || ot.call(He); + } catch (sn) { + (St = console.debug) == null || St.call(console, sn); } } }) : null, readScrollTop: () => c.read("scrollTop", a.scrollTop || 0), restoreSelectionState: ({ scrollTop: Ve } = {}) => { - var it; - (it = re == null ? void 0 : re.restoreSelectionState) == null || it.call(re, { scrollTop: Ve }); + var ot; + (ot = Gt == null ? void 0 : Gt.restoreSelectionState) == null || ot.call(Gt, { scrollTop: Ve }); }, readActiveAssetId: I, - isSidebarOpen: y, + isSidebarOpen: A, toggleSidebarDetails: () => { var Ve; - (Ve = Pe == null ? void 0 : Pe.toggleDetails) == null || Ve.call(Pe); + (Ve = He == null ? void 0 : He.toggleDetails) == null || Ve.call(He); }, - getQuery: ye, + getQuery: pe, getScope: () => c.read("scope", a.scope), - loadAssets: It, + loadAssets: at, lifecycleSignal: (i == null ? void 0 : i.signal) || null }; - typeof (n == null ? void 0 : n.initAssetsQueryController) == "function" ? ne = n.initAssetsQueryController(pn) : ne = op({ + typeof (n == null ? void 0 : n.initAssetsQueryController) == "function" ? je = n.initAssetsQueryController(rn) : je = op({ gridContainer: me, - gridWrapper: Me, - ...pn + gridWrapper: qt, + ...rn }); - const Nn = _M({ + const vn = _2({ onTriggerScan: (Ve) => { - Tb(Ue, Te, Oe, Ve || {}); + Tb(Pe, Re, rt, Ve || {}); }, onToggleDetails: () => { var Ve; - (Ve = Pe == null ? void 0 : Pe.toggleDetails) == null || Ve.call(Pe); + (Ve = He == null ? void 0 : He.toggleDetails) == null || Ve.call(He); }, onToggleFloatingViewer: () => { var Ve; try { - window.dispatchEvent(new Event(ht.MFV_TOGGLE)); - } catch (it) { - (Ve = console.debug) == null || Ve.call(console, it); + window.dispatchEvent(new Event(ft.MFV_TOGGLE)); + } catch (ot) { + (Ve = console.debug) == null || Ve.call(console, ot); } }, onFocusSearch: () => { - var Ve, it, xt, an; + var Ve, ot, St, sn; try { - (Ve = se == null ? void 0 : se.focus) == null || Ve.call(se); - const sn = ((it = se == null ? void 0 : se.value) == null ? void 0 : it.length) || 0; - (xt = se == null ? void 0 : se.setSelectionRange) == null || xt.call(se, sn, sn); - } catch (sn) { - (an = console.debug) == null || an.call(console, sn); + (Ve = de == null ? void 0 : de.focus) == null || Ve.call(de); + const un = ((ot = de == null ? void 0 : de.value) == null ? void 0 : ot.length) || 0; + (St = de == null ? void 0 : de.setSelectionRange) == null || St.call(de, un, un); + } catch (un) { + (sn = console.debug) == null || sn.call(console, un); } }, onClearSearch: () => { - var Ve, it; + var Ve, ot; try { - if (!se) return; - d("searchQuery", ""), se.value = "", (Ve = se.dispatchEvent) == null || Ve.call(se, new Event("input", { bubbles: !0 })); - } catch (xt) { - (it = console.debug) == null || it.call(console, xt); + if (!de) return; + d("searchQuery", ""), de.value = "", (Ve = de.dispatchEvent) == null || Ve.call(de, new Event("input", { bubbles: !0 })); + } catch (St) { + (ot = console.debug) == null || ot.call(console, St); } }, getScanContext: () => ({ scope: c.read("scope", a.scope), customRootId: c.read("customRootId", a.customRootId) }) - }), ae = bb({ gridContainer: me, createRatingBadge: Ya }); - let he = null; + }), re = bb({ gridContainer: me, createRatingBadge: Xa }); + let Ie = null; if (e._eventCleanup) try { e._eventCleanup(); } catch (Ve) { - (gn = console.debug) == null || gn.call(console, Ve); + (bn = console.debug) == null || bn.call(console, Ve); } - Nn.bind(Mt), ae.bind(), wr("grid"); + vn.bind(we), re.bind(), wr("grid"); try { - e._mjrHotkeys = Nn, e._mjrRatingHotkeys = ae, e._mjrSidebarController = Pe; + e._mjrHotkeys = vn, e._mjrRatingHotkeys = re, e._mjrSidebarController = He; } catch (Ve) { - (nn = console.debug) == null || nn.call(console, Ve); + (ln = console.debug) == null || ln.call(console, Ve); } e._eventCleanup = () => { - var Ve, it, xt, an, sn, Bn, Yi, ki, Ji, ci, Ci, Yr, kr, Xr, Ht, $n, qn, Sl, Gl, Cd, Zd, Ad, Wd, wd, Md, xl, Sd, Gd, xd, jd, vd, Ld, Vd, Yd, kd, Xd, Nd; + var Ve, ot, St, sn, un, Kn, Vi, Xi, Ji, ci, hi, Vr, Xr, Nr, Et, $n, qn, Gl, Sl, hd, Zd, Ad, Wd, wd, Md, xl, Gd, Sd, xd, jd, vd, Ld, Yd, Vd, Xd, Nd, kd; try { (Ve = i == null ? void 0 : i.abort) == null || Ve.call(i); - } catch (_t) { - (it = console.debug) == null || it.call(console, _t); + } catch (en) { + (ot = console.debug) == null || ot.call(console, en); } try { - (xt = qe == null ? void 0 : qe._mjrStatusPollDispose) == null || xt.call(qe); - } catch (_t) { - (an = console.debug) == null || an.call(console, _t); + (St = qe == null ? void 0 : qe._mjrStatusPollDispose) == null || St.call(qe); + } catch (en) { + (sn = console.debug) == null || sn.call(console, en); } try { - (sn = e._mjrVersionUpdateCleanup) == null || sn.call(e); - } catch (_t) { - (Bn = console.debug) == null || Bn.call(console, _t); + (un = e._mjrVersionUpdateCleanup) == null || un.call(e); + } catch (en) { + (Kn = console.debug) == null || Kn.call(console, en); } e._mjrVersionUpdateCleanup = null; try { - Le && clearTimeout(Le), Le = null; - } catch (_t) { - (Yi = console.debug) == null || Yi.call(console, _t); + Ye && clearTimeout(Ye), Ye = null; + } catch (en) { + (Vi = console.debug) == null || Vi.call(console, en); } try { - Nn.dispose(); - } catch (_t) { - (ki = console.debug) == null || ki.call(console, _t); + vn.dispose(); + } catch (en) { + (Xi = console.debug) == null || Xi.call(console, en); } try { - ae.dispose(); - } catch (_t) { - (Ji = console.debug) == null || Ji.call(console, _t); + re.dispose(); + } catch (en) { + (Ji = console.debug) == null || Ji.call(console, en); } Mo().scope === "grid" && wr(null); try { - (ci = xn == null ? void 0 : xn.dispose) == null || ci.call(xn); - } catch (_t) { - (Ci = console.debug) == null || Ci.call(console, _t); + (ci = Ln == null ? void 0 : Ln.dispose) == null || ci.call(Ln); + } catch (en) { + (hi = console.debug) == null || hi.call(console, en); } try { - en == null || en(); - } catch (_t) { - (Yr = console.debug) == null || Yr.call(console, _t); + Mn == null || Mn(); + } catch (en) { + (Vr = console.debug) == null || Vr.call(console, en); } try { - he == null || he(); - } catch (_t) { - (kr = console.debug) == null || kr.call(console, _t); + Ie == null || Ie(); + } catch (en) { + (Xr = console.debug) == null || Xr.call(console, en); } - he = null; + Ie = null; try { - (Xr = Xt == null ? void 0 : Xt.dispose) == null || Xr.call(Xt); - } catch (_t) { - (Ht = console.debug) == null || Ht.call(console, _t); + (Nr = kt == null ? void 0 : kt.dispose) == null || Nr.call(kt); + } catch (en) { + (Et = console.debug) == null || Et.call(console, en); } try { - ($n = Pe == null ? void 0 : Pe.dispose) == null || $n.call(Pe); - } catch (_t) { - (qn = console.debug) == null || qn.call(console, _t); + ($n = He == null ? void 0 : He.dispose) == null || $n.call(He); + } catch (en) { + (qn = console.debug) == null || qn.call(console, en); } try { - Zt && clearInterval(Zt), Zt = null; - } catch (_t) { - (Sl = console.debug) == null || Sl.call(console, _t); + At && clearInterval(At), At = null; + } catch (en) { + (Gl = console.debug) == null || Gl.call(console, en); } try { - tn && clearTimeout(tn), tn = null; - } catch (_t) { - (Gl = console.debug) == null || Gl.call(console, _t); + Ht && clearTimeout(Ht), Ht = null; + } catch (en) { + (Sl = console.debug) == null || Sl.call(console, en); } try { - (Cd = ne == null ? void 0 : ne.dispose) == null || Cd.call(ne); - } catch (_t) { - (Zd = console.debug) == null || Zd.call(console, _t); + (hd = je == null ? void 0 : je.dispose) == null || hd.call(je); + } catch (en) { + (Zd = console.debug) == null || Zd.call(console, en); } - ne = null; + je = null; try { - (Ad = re == null ? void 0 : re.dispose) == null || Ad.call(re); - } catch (_t) { - (Wd = console.debug) == null || Wd.call(console, _t); + (Ad = Gt == null ? void 0 : Gt.dispose) == null || Ad.call(Gt); + } catch (en) { + (Wd = console.debug) == null || Wd.call(console, en); } - re = null; + Gt = null; try { (wd = me == null ? void 0 : me._mjrSummaryBarDispose) == null || wd.call(me); - } catch (_t) { - (Md = console.debug) == null || Md.call(console, _t); + } catch (en) { + (Md = console.debug) == null || Md.call(console, en); } try { - (Sd = (xl = me == null ? void 0 : me._mjrSummaryBarObserver) == null ? void 0 : xl.disconnect) == null || Sd.call(xl); - } catch (_t) { - (Gd = console.debug) == null || Gd.call(console, _t); + (Gd = (xl = me == null ? void 0 : me._mjrSummaryBarObserver) == null ? void 0 : xl.disconnect) == null || Gd.call(xl); + } catch (en) { + (Sd = console.debug) == null || Sd.call(console, en); } try { (xd = me == null ? void 0 : me._mjrGridContextMenuUnbind) == null || xd.call(me); - } catch (_t) { - (jd = console.debug) == null || jd.call(console, _t); + } catch (en) { + (jd = console.debug) == null || jd.call(console, en); } try { - Gt == null || Gt(); - } catch (_t) { - (vd = console.debug) == null || vd.call(console, _t); + Vt == null || Vt(); + } catch (en) { + (vd = console.debug) == null || vd.call(console, en); } try { - vt == null || vt(); - } catch (_t) { - (Ld = console.debug) == null || Ld.call(console, _t); + xt == null || xt(); + } catch (en) { + (Ld = console.debug) == null || Ld.call(console, en); } try { - } catch (_t) { - (Vd = console.debug) == null || Vd.call(console, _t); + } catch (en) { + (Yd = console.debug) == null || Yd.call(console, en); } try { - me && Wt(me); - } catch (_t) { - (Yd = console.debug) == null || Yd.call(console, _t); + me && Rt(me); + } catch (en) { + (Vd = console.debug) == null || Vd.call(console, en); } - ja(me), me = null; + va(me), me = null; try { o.dispose(); - } catch (_t) { - (kd = console.debug) == null || kd.call(console, _t); + } catch (en) { + (Xd = console.debug) == null || Xd.call(console, en); } try { e._mjrPopoverManager === o && (e._mjrPopoverManager = null); - } catch (_t) { - (Xd = console.debug) == null || Xd.call(console, _t); + } catch (en) { + (Nd = console.debug) == null || Nd.call(console, en); } try { r && l && (r.style.height = l.height, r.style.minHeight = l.minHeight, r.style.width = l.width); - } catch (_t) { - (Nd = console.debug) == null || Nd.call(console, _t); + } catch (en) { + (kd = console.debug) == null || kd.call(console, en); } }; - const ve = async () => { + const Ge = async () => { var Ve; - await ((Ve = ne == null ? void 0 : ne.queuedReload) == null ? void 0 : Ve.call(ne)); - }, Fe = ((An = ne == null ? void 0 : ne.createCountersUpdateHandler) == null ? void 0 : An.call(ne, { + await ((Ve = je == null ? void 0 : je.queuedReload) == null ? void 0 : Ve.call(je)); + }, Je = ((Wn = je == null ? void 0 : je.createCountersUpdateHandler) == null ? void 0 : Wn.call(je, { state: a, getStableQuery: () => { var Ve; return String(((Ve = me == null ? void 0 : me.dataset) == null ? void 0 : Ve.mjrQuery) || "*").trim() || "*"; }, - getRecentUserInteractionAt: () => Number(Ot || 0) + getRecentUserInteractionAt: () => Number(Pt || 0) })) ?? (async () => { - await ve(); + await Ge(); }); $0( - Ue, - Te, + Pe, + Re, qe, - Oe, - Fe, + rt, + Je, () => ({ scope: c.read("scope", a.scope), customRootId: c.read("customRootId", a.customRootId) }) - ), pe.setActiveTabStyles(), (vn = Pt == null ? void 0 : Pt.renderBreadcrumb) == null || vn.call(Pt), Yt.refreshCustomRoots().catch(() => { - }), he = (un = ne == null ? void 0 : ne.bindSearchInput) == null ? void 0 : un.call(ne, { - searchInputEl: se, + ), ye.setActiveTabStyles(), (Yn = Qt == null ? void 0 : Qt.renderBreadcrumb) == null || Yn.call(Qt), Wt.refreshCustomRoots().catch(() => { + }), Ie = (In = je == null ? void 0 : je.bindSearchInput) == null ? void 0 : In.call(je, { + searchInputEl: de, lifecycleSignal: (i == null ? void 0 : i.signal) || null, debounceMs: 120, onQueryChanged: () => { - Yn({ reload: !1 }), Ie(); + Xt({ reload: !1 }), oe(); }, onBeforeReload: () => { - Yn({ reload: !1 }), Ie(); + Xt({ reload: !1 }), oe(); }, startSearchTimer: () => { - Is("searchQuery"); + bs("searchQuery"); }, reloadGrid: () => { - We.reloadGrid(); + Ce.reloadGrid(); } }); let _e = !1; try { - _e = await mt( + _e = await bt( me, { scope: s("scope", a.scope || "output") || "output", query: String( - Cs( + Zs( c.read("searchQuery", a.searchQuery || "*") || "*" ) || "*" ), @@ -35448,52 +35475,52 @@ async function p2(e, { useComfyThemeUI: t = !0, external: n = {} } = {}) { } ); } catch (Ve) { - (Mn = console.debug) == null || Mn.call(console, Ve); + (Gn = console.debug) == null || Gn.call(console, Ve); } - let et = !1; + let Qe = !1; try { - et = !!((yn = me == null ? void 0 : me.querySelector) != null && yn.call(me, ".mjr-asset-card")); + Qe = !!((fn = me == null ? void 0 : me.querySelector) != null && fn.call(me, ".mjr-asset-card")); } catch (Ve) { - (Ut = console.debug) == null || Ut.call(console, Ve); + (Kt = console.debug) == null || Kt.call(console, Ve); } - const tt = _e || et ? Promise.resolve({ + const et = _e || Qe ? Promise.resolve({ ok: !0, hydrated: !!_e, - cached: !!et - }) : We.reloadGrid(); + cached: !!Qe + }) : Ce.reloadGrid(); try { - await Ne(); + await se(); } catch (Ve) { (Jt = console.debug) == null || Jt.call(console, Ve); } try { - Zt = setInterval(() => { - var Ve, it; + At = setInterval(() => { + var Ve, ot; try { if ((Ve = i == null ? void 0 : i.signal) != null && Ve.aborted) return; - } catch (xt) { - (it = console.debug) == null || it.call(console, xt); + } catch (St) { + (ot = console.debug) == null || ot.call(console, St); } - Ne().catch(() => { + se().catch(() => { }); }, 15e3); } catch (Ve) { (ro = console.debug) == null || ro.call(console, Ve); } - (lo = ne == null ? void 0 : ne.restoreUiState) == null || lo.call(ne, tt); + (lo = je == null ? void 0 : je.restoreUiState) == null || lo.call(je, et); try { window.__mjrLastAssetUpsert = 0, window.__mjrLastAssetUpsertCount = 0; } catch (Ve) { (ao = console.debug) == null || ao.call(console, Ve); } - tn = ((hi = ne == null ? void 0 : ne.scheduleAutoLoad) == null ? void 0 : hi.call(ne, tt, 2e3)) ?? null; - const st = Nb("panelRender", "gridRender"); - return Fb(st), { gridContainer: me }; + Ht = ((Ci = je == null ? void 0 : je.scheduleAutoLoad) == null ? void 0 : Ci.call(je, et, 300)) ?? null; + const mt = kb("panelRender", "gridRender"); + return Ob(mt), { gridContainer: me }; } -const y2 = { +const yM = { __name: "StatusSection", setup(e, { expose: t }) { - const n = O0({ getScanContext: null }), i = n.querySelector("#mjr-status-dot"), o = n.querySelector("#mjr-status-text"), r = n.querySelector("#mjr-status-capabilities"); + const n = F0({ getScanContext: null }), i = n.querySelector("#mjr-status-dot"), o = n.querySelector("#mjr-status-text"), r = n.querySelector("#mjr-status-capabilities"); return _n(() => { var l; try { @@ -35502,7 +35529,7 @@ const y2 = { } }), t({ statusSection: n, statusDot: i, statusText: o, capabilitiesSection: r }), (l, a) => null; } -}, f2 = { class: "mjr-am-search-pill" }, h2 = ["placeholder", "title", "list"], C2 = ["id"], Z2 = { class: "mjr-am-search-tools" }, A2 = { class: "mjr-popover-anchor" }, W2 = ["disabled", "aria-disabled", "title"], w2 = { class: "mjr-popover-anchor" }, M2 = ["title"], Ym = "Ctrl/Cmd+F, Ctrl/Cmd+K, Ctrl/Cmd+H", S2 = { +}, fM = { class: "mjr-am-search-pill" }, CM = ["placeholder", "title", "list"], hM = ["id"], ZM = { class: "mjr-am-search-tools" }, AM = { class: "mjr-popover-anchor" }, WM = ["disabled", "aria-disabled", "title"], wM = { class: "mjr-popover-anchor" }, MM = ["title"], Vm = "Ctrl/Cmd+F, Ctrl/Cmd+K, Ctrl/Cmd+H", GM = { __name: "SearchBar", props: { /** Callback when similar search is triggered */ @@ -35510,19 +35537,19 @@ const y2 = { }, emits: ["similar", "search-change"], setup(e, { expose: t, emit: n }) { - const i = e, o = n, r = Go(), l = Ae(null), a = Ae(null), c = Ae(null), s = Ae(null), d = Ae(null), u = Xs("mjr-search-autocomplete-", 8), I = Ae(!1), y = Ae(!0), S = ze(() => I.value ? m("search.semanticPlaceholder", "Describe what you're looking for...") : m("search.placeholder", "Search assets...")), Z = ze(() => I.value ? Sr( + const i = e, o = n, r = So(), l = We(null), a = We(null), c = We(null), s = We(null), d = We(null), u = ks("mjr-search-autocomplete-", 8), I = We(!1), A = We(!0), h = ze(() => I.value ? m("search.semanticPlaceholder", "Describe what you're looking for...") : m("search.placeholder", "Search assets...")), S = ze(() => I.value ? Gr( m( "search.semanticTitle", "AI semantic search — describe your image in natural language" ), - Ym - ) : Sr( + Vm + ) : Gr( m( "search.title", "Search by filename, tags, or attributes (e.g. rating:5, ext:png)" ), - Ym - )), C = ze(() => I.value ? { + Vm + )), W = ze(() => I.value ? { background: "rgba(0, 188, 212, 0.2)", borderColor: "rgba(0, 188, 212, 0.6)", color: "#00BCD4", @@ -35537,33 +35564,33 @@ const y2 = { try { if (!a.value) return; a.value.dataset.mjrSemanticMode = I.value ? "1" : "0"; - } catch (W) { - (G = console.debug) == null || G.call(console, W); + } catch (Z) { + (G = console.debug) == null || G.call(console, Z); } - }, A = (G = {}) => { - var W; + }, y = (G = {}) => { + var Z; o("search-change", { - query: ((W = a.value) == null ? void 0 : W.value) || "", + query: ((Z = a.value) == null ? void 0 : Z.value) || "", semantic: I.value, ...G }); }, p = () => { - var G, W, f; - if (y.value) { + var G, Z, f; + if (A.value) { I.value = !I.value, g(); try { - (W = (G = a.value) == null ? void 0 : G.dispatchEvent) == null || W.call(G, new Event("input", { bubbles: !0 })); + (Z = (G = a.value) == null ? void 0 : G.dispatchEvent) == null || Z.call(G, new Event("input", { bubbles: !0 })); } catch (X) { (f = console.debug) == null || f.call(console, X); } - A({ semantic: I.value }); + y({ semantic: I.value }); } }, b = async (G) => { - const W = G.target.value || ""; - r.searchQuery = W, g(), A({ query: W }), await L(); - }, L = $c(async () => { - var W; - const G = (((W = a.value) == null ? void 0 : W.value) || "").trim(); + const Z = G.target.value || ""; + r.searchQuery = Z, g(), y({ query: Z }), await L(); + }, L = es(async () => { + var Z; + const G = (((Z = a.value) == null ? void 0 : Z.value) || "").trim(); if (!(I.value || G.length < 2 || G.includes(":"))) try { const f = await Ft("/mjr/am/autocomplete", { q: G, limit: 10 }); @@ -35573,25 +35600,25 @@ const y2 = { })); } catch { } - }, 300), h = () => { + }, 300), C = () => { var G; o("similar"), (G = i.onSimilarSearch) == null || G.call(i); }; - return cn( + return dn( () => r.searchQuery, (G) => { a.value && a.value.value !== G && (a.value.value = G); } - ), cn(y, (G) => { + ), dn(A, (G) => { !G && I.value && (I.value = !1), g(); - }), cn(I, () => { + }), dn(I, () => { g(); }), Dn(() => { var G; try { a.value && (a.value.value = r.searchQuery || ""); - } catch (W) { - (G = console.debug) == null || G.call(console, W); + } catch (Z) { + (G = console.debug) == null || G.call(console, Z); } g(); }), t({ @@ -35608,61 +35635,61 @@ const y2 = { return d.value; }, setSemanticEnabled: (G) => { - y.value = !!G, g(); + A.value = !!G, g(); } - }), (G, W) => (be(), Ce("div", { + }), (G, Z) => (be(), Ze("div", { ref_key: "searchSectionRef", ref: l, class: "mjr-am-search" }, [ - ie("div", f2, [ - W[0] || (W[0] = ie("span", { class: "mjr-am-search-icon" }, [ - ie("i", { class: "pi pi-search" }) + te("div", fM, [ + Z[0] || (Z[0] = te("span", { class: "mjr-am-search-icon" }, [ + te("i", { class: "pi pi-search" }) ], -1)), - ie("input", { + te("input", { ref_key: "searchInputRef", ref: a, type: "text", id: "mjr-search-input", class: "mjr-input", - placeholder: S.value, - title: Z.value, - list: xe(u), + placeholder: h.value, + title: S.value, + list: ve(u), onInput: b - }, null, 40, h2), - ie("datalist", { + }, null, 40, CM), + te("datalist", { ref_key: "dataListRef", ref: c, - id: xe(u) - }, null, 8, C2) + id: ve(u) + }, null, 8, hM) ]), - ie("div", Z2, [ - ie("div", A2, [ - ie("button", { + te("div", ZM, [ + te("div", AM, [ + te("button", { ref_key: "semanticBtnRef", ref: d, type: "button", class: "mjr-icon-btn mjr-ai-control", - disabled: !y.value, - "aria-disabled": !y.value, - title: y.value ? xe(m)("search.semanticToggle", "Toggle AI semantic search (CLIP-based)") : xe(m)("search.semanticDisabled", "AI semantic search is disabled in settings"), - style: Lt(C.value), + disabled: !A.value, + "aria-disabled": !A.value, + title: A.value ? ve(m)("search.semanticToggle", "Toggle AI semantic search (CLIP-based)") : ve(m)("search.semanticDisabled", "AI semantic search is disabled in settings"), + style: vt(W.value), onClick: p - }, [...W[1] || (W[1] = [ - ie("i", { class: "pi pi-sparkles" }, null, -1) - ])], 12, W2) + }, [...Z[1] || (Z[1] = [ + te("i", { class: "pi pi-sparkles" }, null, -1) + ])], 12, WM) ]), - ie("div", w2, [ - ie("button", { + te("div", wM, [ + te("button", { ref_key: "similarBtnRef", ref: s, type: "button", class: "mjr-icon-btn mjr-ai-control", - title: xe(m)("search.findSimilar", "Find Similar"), - onClick: h - }, [...W[2] || (W[2] = [ - ie("i", { class: "pi pi-clone" }, null, -1) - ])], 8, M2) + title: ve(m)("search.findSimilar", "Find Similar"), + onClick: C + }, [...Z[2] || (Z[2] = [ + te("i", { class: "pi pi-clone" }, null, -1) + ])], 8, MM) ]), jl(G.$slots, "filter-anchor"), jl(G.$slots, "sort-anchor"), @@ -35671,16 +35698,16 @@ const y2 = { ]) ], 512)); } -}, G2 = { +}, SM = { class: "mjr-popover mjr-sort-popover", style: { display: "none" } -}, x2 = { +}, xM = { class: "mjr-menu", style: { display: "grid", gap: "6px" } -}, j2 = ["onClick"], v2 = { class: "mjr-menu-item-label" }, L2 = { +}, jM = ["onClick"], vM = { class: "mjr-menu-item-label" }, LM = { __name: "SortPopover", setup(e) { - const t = Go(), n = ze(() => [ + const t = So(), n = ze(() => [ { key: "mtime_desc", label: m("sort.newest"), icon: "pi pi-sort-amount-down" }, { key: "mtime_asc", label: m("sort.oldest"), icon: "pi pi-sort-amount-up-alt" }, { key: "name_asc", label: m("sort.nameAZ"), icon: "pi pi-sort-alpha-down" }, @@ -35697,107 +35724,107 @@ const y2 = { (l = console.debug) == null || l.call(console, a); } }; - return (r, l) => (be(), Ce("div", G2, [ - ie("div", x2, [ - (be(!0), Ce(Nt, null, Cn(n.value, (a) => (be(), Ce("button", { + return (r, l) => (be(), Ze("div", SM, [ + te("div", xM, [ + (be(!0), Ze(Nt, null, Zn(n.value, (a) => (be(), Ze("button", { key: a.key, type: "button", - class: Zn(["mjr-menu-item", { "is-active": i.value === a.key }]), + class: An(["mjr-menu-item", { "is-active": i.value === a.key }]), onClick: (c) => o(a.key) }, [ - ie("span", v2, Ye(a.label), 1), - ie("i", { - class: Zn([a.icon, "mjr-menu-item-check"]), - style: Lt({ opacity: i.value === a.key ? 1 : 0 }) + te("span", vM, Ne(a.label), 1), + te("i", { + class: An([a.icon, "mjr-menu-item-check"]), + style: vt({ opacity: i.value === a.key ? 1 : 0 }) }, null, 6) - ], 10, j2))), 128)) + ], 10, jM))), 128)) ]) ])); } -}, V2 = { +}, YM = { class: "mjr-popover mjr-filter-popover", style: { display: "none" } -}, Y2 = ["aria-expanded"], k2 = { class: "mjr-filter-group-title" }, X2 = { +}, VM = ["aria-expanded"], XM = { class: "mjr-filter-group-title" }, NM = { class: "mjr-filter-group-chevron", "aria-hidden": "true" -}, N2 = { class: "mjr-filter-group-body" }, R2 = { class: "mjr-popover-row" }, F2 = { class: "mjr-popover-label" }, O2 = ["title", "value"], z2 = { value: "" }, J2 = { value: "image" }, T2 = { value: "video" }, B2 = { value: "audio" }, U2 = { class: "mjr-popover-row" }, K2 = { class: "mjr-popover-label" }, D2 = ["title"], E2 = ["checked"], H2 = { class: "mjr-popover-row" }, q2 = { class: "mjr-popover-label" }, P2 = ["value"], Q2 = { value: "" }, _2 = { class: "mjr-popover-row" }, $2 = { class: "mjr-popover-label" }, eS = ["title", "value"], tS = { value: "0" }, nS = ["aria-expanded"], iS = { class: "mjr-filter-group-title" }, oS = { +}, kM = { class: "mjr-filter-group-body" }, RM = { class: "mjr-popover-row" }, OM = { class: "mjr-popover-label" }, FM = ["title", "value"], zM = { value: "" }, JM = { value: "image" }, TM = { value: "video" }, KM = { value: "audio" }, BM = { class: "mjr-popover-row" }, UM = { class: "mjr-popover-label" }, DM = ["title"], HM = ["checked"], EM = { class: "mjr-popover-row" }, qM = { class: "mjr-popover-label" }, PM = ["value"], QM = { value: "" }, _M = { class: "mjr-popover-row" }, $M = { class: "mjr-popover-label" }, eG = ["title", "value"], tG = { value: "0" }, nG = ["aria-expanded"], iG = { class: "mjr-filter-group-title" }, oG = { class: "mjr-filter-group-chevron", "aria-hidden": "true" -}, rS = { class: "mjr-filter-group-body" }, lS = { class: "mjr-popover-row mjr-popover-row--3col" }, aS = { class: "mjr-popover-label" }, cS = ["placeholder", "value"], sS = ["placeholder", "value"], dS = { class: "mjr-popover-row" }, uS = { class: "mjr-popover-label" }, mS = ["value"], gS = { value: "" }, IS = { class: "mjr-popover-row mjr-popover-row--3col" }, bS = { class: "mjr-popover-label" }, pS = ["placeholder", "title", "value"], yS = ["placeholder", "title", "value"], fS = { class: "mjr-popover-row mjr-popover-row--3col" }, hS = { class: "mjr-popover-label" }, CS = ["placeholder", "title", "value"], ZS = ["placeholder", "title", "value"], AS = ["aria-expanded"], WS = { class: "mjr-filter-group-title" }, wS = { +}, rG = { class: "mjr-filter-group-body" }, lG = { class: "mjr-popover-row mjr-popover-row--3col" }, aG = { class: "mjr-popover-label" }, cG = ["placeholder", "value"], sG = ["placeholder", "value"], dG = { class: "mjr-popover-row" }, uG = { class: "mjr-popover-label" }, mG = ["value"], gG = { value: "" }, IG = { class: "mjr-popover-row mjr-popover-row--3col" }, bG = { class: "mjr-popover-label" }, pG = ["placeholder", "title", "value"], yG = ["placeholder", "title", "value"], fG = { class: "mjr-popover-row mjr-popover-row--3col" }, CG = { class: "mjr-popover-label" }, hG = ["placeholder", "title", "value"], ZG = ["placeholder", "title", "value"], AG = ["aria-expanded"], WG = { class: "mjr-filter-group-title" }, wG = { class: "mjr-filter-group-chevron", "aria-hidden": "true" -}, MS = { class: "mjr-filter-group-body" }, SS = { class: "mjr-popover-row" }, GS = { class: "mjr-popover-label" }, xS = ["title", "value"], jS = { value: "" }, vS = { value: "today" }, LS = { value: "this_week" }, VS = { value: "this_month" }, YS = { class: "mjr-popover-row" }, kS = { class: "mjr-popover-label" }, XS = ["value"], NS = { +}, MG = { class: "mjr-filter-group-body" }, GG = { class: "mjr-popover-row" }, SG = { class: "mjr-popover-label" }, xG = ["title", "value"], jG = { value: "" }, vG = { value: "today" }, LG = { value: "this_week" }, YG = { value: "this_month" }, VG = { class: "mjr-popover-row" }, XG = { class: "mjr-popover-label" }, NG = ["value"], kG = { __name: "FilterPopover", setup(e, { expose: t }) { - const n = Go(), i = Ae(null), o = Ae(null), r = Ae(null), l = Ae(null), a = Ae(null), c = Ae(null), s = Ae(null), d = Ae(null), u = Ae(null), I = Ae(null), y = Ae(null), S = Ae(null), Z = Ae(null), C = Ae(null), g = Ae({ + const n = So(), i = We(null), o = We(null), r = We(null), l = We(null), a = We(null), c = We(null), s = We(null), d = We(null), u = We(null), I = We(null), A = We(null), h = We(null), S = We(null), W = We(null), g = We({ core: !1, media: !1, time: !1 - }), A = ze(() => { - const F = Number(n.minWidth || 0) || 0, N = Number(n.minHeight || 0) || 0; - return F >= 3840 && N >= 2160 ? "uhd" : F >= 2560 && N >= 1440 ? "qhd" : F >= 1920 && N >= 1080 ? "fhd" : F >= 1280 && N >= 720 ? "hd" : ""; + }), y = ze(() => { + const O = Number(n.minWidth || 0) || 0, k = Number(n.minHeight || 0) || 0; + return O >= 3840 && k >= 2160 ? "uhd" : O >= 2560 && k >= 1440 ? "qhd" : O >= 1920 && k >= 1080 ? "fhd" : O >= 1280 && k >= 720 ? "hd" : ""; }), p = ze(() => { - const F = String(n.dateExactFilter || "").trim().length > 0; + const O = String(n.dateExactFilter || "").trim().length > 0; return { - "mjr-agenda-filled": F, - "mjr-agenda-empty": !F + "mjr-agenda-filled": O, + "mjr-agenda-empty": !O }; - }), b = (F) => { - const N = String(F ?? "").trim(); - if (!N) return 0; - const V = N.replace(",", "."), k = Number(V); - return Number.isFinite(k) ? k : 0; + }), b = (O) => { + const k = String(O ?? "").trim(); + if (!k) return 0; + const Y = k.replace(",", "."), N = Number(Y); + return Number.isFinite(N) ? N : 0; }, L = () => { - var F; + var O; try { window.dispatchEvent(new CustomEvent("mjr:filters-changed")); - } catch (N) { - (F = console.debug) == null || F.call(console, N); + } catch (k) { + (O = console.debug) == null || O.call(console, k); } - }, h = (F) => { - var N; - n.kindFilter = String(((N = F == null ? void 0 : F.target) == null ? void 0 : N.value) || ""), L(); - }, G = (F) => { - var N; - n.workflowOnly = !!((N = F == null ? void 0 : F.target) != null && N.checked), L(); - }, W = (F) => { - var N; - n.workflowType = String(((N = F == null ? void 0 : F.target) == null ? void 0 : N.value) || "").trim().toUpperCase(), L(); - }, f = (F) => { - var N; - n.minRating = Number(((N = F == null ? void 0 : F.target) == null ? void 0 : N.value) || 0) || 0, L(); + }, C = (O) => { + var k; + n.kindFilter = String(((k = O == null ? void 0 : O.target) == null ? void 0 : k.value) || ""), L(); + }, G = (O) => { + var k; + n.workflowOnly = !!((k = O == null ? void 0 : O.target) != null && k.checked), L(); + }, Z = (O) => { + var k; + n.workflowType = String(((k = O == null ? void 0 : O.target) == null ? void 0 : k.value) || "").trim().toUpperCase(), L(); + }, f = (O) => { + var k; + n.minRating = Number(((k = O == null ? void 0 : O.target) == null ? void 0 : k.value) || 0) || 0, L(); }, X = () => { - var V, k; - const F = b(((V = a.value) == null ? void 0 : V.value) || 0); - let N = b(((k = c.value) == null ? void 0 : k.value) || 0); - N > 0 && F > 0 && N < F && (N = F, c.value && (c.value.value = String(N))), n.minSizeMB = F > 0 ? F : 0, n.maxSizeMB = N > 0 ? N : 0, L(); + var Y, N; + const O = b(((Y = a.value) == null ? void 0 : Y.value) || 0); + let k = b(((N = c.value) == null ? void 0 : N.value) || 0); + k > 0 && O > 0 && k < O && (k = O, c.value && (c.value.value = String(k))), n.minSizeMB = O > 0 ? O : 0, n.maxSizeMB = k > 0 ? k : 0, L(); }, x = () => { - var K, z, B, J; - const F = Math.max(0, Math.round(b(((K = d.value) == null ? void 0 : K.value) || 0))), N = Math.max(0, Math.round(b(((z = u.value) == null ? void 0 : z.value) || 0))); - let V = Math.max(0, Math.round(b(((B = I.value) == null ? void 0 : B.value) || 0))), k = Math.max(0, Math.round(b(((J = y.value) == null ? void 0 : J.value) || 0))); - V > 0 && F > 0 && V < F && (V = F, I.value && (I.value.value = String(V))), k > 0 && N > 0 && k < N && (k = N, y.value && (y.value.value = String(k))), n.minWidth = F, n.minHeight = N, n.maxWidth = V, n.maxHeight = k, L(); - }, T = (F) => { + var U, z, T, J; + const O = Math.max(0, Math.round(b(((U = d.value) == null ? void 0 : U.value) || 0))), k = Math.max(0, Math.round(b(((z = u.value) == null ? void 0 : z.value) || 0))); + let Y = Math.max(0, Math.round(b(((T = I.value) == null ? void 0 : T.value) || 0))), N = Math.max(0, Math.round(b(((J = A.value) == null ? void 0 : J.value) || 0))); + Y > 0 && O > 0 && Y < O && (Y = O, I.value && (I.value.value = String(Y))), N > 0 && k > 0 && N < k && (N = k, A.value && (A.value.value = String(N))), n.minWidth = O, n.minHeight = k, n.maxWidth = Y, n.maxHeight = N, L(); + }, K = (O) => { var z; - const N = String(((z = F == null ? void 0 : F.target) == null ? void 0 : z.value) || "").trim(), V = { + const k = String(((z = O == null ? void 0 : O.target) == null ? void 0 : z.value) || "").trim(), Y = { hd: [1280, 720], fhd: [1920, 1080], qhd: [2560, 1440], uhd: [3840, 2160] - }, [k, K] = V[N] || [0, 0]; - n.minWidth = Number(k || 0), n.minHeight = Number(K || 0), n.maxWidth = 0, n.maxHeight = 0, d.value && (d.value.value = n.minWidth || ""), u.value && (u.value.value = n.minHeight || ""), I.value && (I.value.value = ""), y.value && (y.value.value = ""), L(); - }, v = (F) => { - var N; - n.dateRangeFilter = String(((N = F == null ? void 0 : F.target) == null ? void 0 : N.value) || ""), n.dateRangeFilter && n.dateExactFilter && (n.dateExactFilter = "", C.value && (C.value.value = "")), L(); - }, w = (F) => { - var N; - n.dateExactFilter = String(((N = F == null ? void 0 : F.target) == null ? void 0 : N.value) || "").trim(), L(); - }, R = (F) => { - const N = String(F || "").trim().toLowerCase(); - !N || !(N in g.value) || (g.value = { + }, [N, U] = Y[k] || [0, 0]; + n.minWidth = Number(N || 0), n.minHeight = Number(U || 0), n.maxWidth = 0, n.maxHeight = 0, d.value && (d.value.value = n.minWidth || ""), u.value && (u.value.value = n.minHeight || ""), I.value && (I.value.value = ""), A.value && (A.value.value = ""), L(); + }, j = (O) => { + var k; + n.dateRangeFilter = String(((k = O == null ? void 0 : O.target) == null ? void 0 : k.value) || ""), n.dateRangeFilter && n.dateExactFilter && (n.dateExactFilter = "", W.value && (W.value.value = "")), L(); + }, w = (O) => { + var k; + n.dateExactFilter = String(((k = O == null ? void 0 : O.target) == null ? void 0 : k.value) || "").trim(), L(); + }, R = (O) => { + const k = String(O || "").trim().toLowerCase(); + !k || !(k in g.value) || (g.value = { ...g.value, - [N]: !g.value[N] + [k]: !g.value[k] }); - }, Y = (F) => !!g.value[String(F || "").trim().toLowerCase()]; + }, V = (O) => !!g.value[String(O || "").trim().toLowerCase()]; return t({ get kindSelect() { return i.value; @@ -35830,261 +35857,261 @@ const y2 = { return I.value; }, get maxHeightInput() { - return y.value; + return A.value; }, get dateRangeSelect() { - return S.value; + return h.value; }, get dateExactInput() { - return C.value; + return W.value; }, get agendaContainer() { - return Z.value; + return S.value; } - }), (F, N) => (be(), Ce("div", V2, [ - ie("div", { - class: Zn(["mjr-filter-group", { "is-open": Y("core") }]) + }), (O, k) => (be(), Ze("div", YM, [ + te("div", { + class: An(["mjr-filter-group", { "is-open": V("core") }]) }, [ - ie("button", { + te("button", { type: "button", class: "mjr-filter-group-toggle", - "aria-expanded": String(Y("core")), - onClick: N[0] || (N[0] = (V) => R("core")) + "aria-expanded": String(V("core")), + onClick: k[0] || (k[0] = (Y) => R("core")) }, [ - ie("span", k2, Ye(xe(m)("group.core", "Core")), 1), - ie("span", X2, Ye(Y("core") ? "▾" : "▸"), 1) - ], 8, Y2), - Ko(ie("div", N2, [ - ie("div", R2, [ - ie("div", F2, Ye(xe(m)("label.type")), 1), - ie("select", { + te("span", XM, Ne(ve(m)("group.core", "Core")), 1), + te("span", NM, Ne(V("core") ? "▾" : "▸"), 1) + ], 8, VM), + Uo(te("div", kM, [ + te("div", RM, [ + te("div", OM, Ne(ve(m)("label.type")), 1), + te("select", { ref_key: "kindSelectRef", ref: i, class: "mjr-select", - title: xe(m)("tooltip.filterByFileType", "Filter by file type"), - value: xe(n).kindFilter, - onChange: h + title: ve(m)("tooltip.filterByFileType", "Filter by file type"), + value: ve(n).kindFilter, + onChange: C }, [ - ie("option", z2, Ye(xe(m)("filter.all")), 1), - ie("option", J2, Ye(xe(m)("filter.images", "Images")), 1), - ie("option", T2, Ye(xe(m)("filter.videos", "Videos")), 1), - ie("option", B2, Ye(xe(m)("filter.audio", "Audio")), 1), - N[3] || (N[3] = ie("option", { value: "model3d" }, "3D", -1)) - ], 40, O2) + te("option", zM, Ne(ve(m)("filter.all")), 1), + te("option", JM, Ne(ve(m)("filter.images", "Images")), 1), + te("option", TM, Ne(ve(m)("filter.videos", "Videos")), 1), + te("option", KM, Ne(ve(m)("filter.audio", "Audio")), 1), + k[3] || (k[3] = te("option", { value: "model3d" }, "3D", -1)) + ], 40, FM) ]), - ie("div", U2, [ - ie("div", K2, Ye(xe(m)("label.workflow")), 1), - ie("label", { + te("div", BM, [ + te("div", UM, Ne(ve(m)("label.workflow")), 1), + te("label", { class: "mjr-popover-toggle", - title: xe(m)("tooltip.filterWorkflowOnly", "Show only assets with embedded workflow data") + title: ve(m)("tooltip.filterWorkflowOnly", "Show only assets with embedded workflow data") }, [ - ie("input", { + te("input", { ref_key: "wfCheckboxRef", ref: o, type: "checkbox", - checked: xe(n).workflowOnly, + checked: ve(n).workflowOnly, onChange: G - }, null, 40, E2), - ie("span", null, Ye(xe(m)("filter.onlyWithWorkflow")), 1) - ], 8, D2) + }, null, 40, HM), + te("span", null, Ne(ve(m)("filter.onlyWithWorkflow")), 1) + ], 8, DM) ]), - ie("div", H2, [ - ie("div", q2, Ye(xe(m)("label.workflowType", "Workflow type")), 1), - ie("select", { + te("div", EM, [ + te("div", qM, Ne(ve(m)("label.workflowType", "Workflow type")), 1), + te("select", { ref_key: "workflowTypeSelectRef", ref: r, class: "mjr-select", - value: xe(n).workflowType, - onChange: W + value: ve(n).workflowType, + onChange: Z }, [ - ie("option", Q2, Ye(xe(m)("filter.any", "Any")), 1), - N[4] || (N[4] = Fd('', 10)) - ], 40, P2) + te("option", QM, Ne(ve(m)("filter.any", "Any")), 1), + k[4] || (k[4] = Od('', 10)) + ], 40, PM) ]), - ie("div", _2, [ - ie("div", $2, Ye(xe(m)("label.rating")), 1), - ie("select", { + te("div", _M, [ + te("div", $M, Ne(ve(m)("label.rating")), 1), + te("select", { ref_key: "ratingSelectRef", ref: l, class: "mjr-select", - title: xe(m)("tooltip.filterMinRating", "Filter by minimum rating"), - value: String(xe(n).minRating || 0), + title: ve(m)("tooltip.filterMinRating", "Filter by minimum rating"), + value: String(ve(n).minRating || 0), onChange: f }, [ - ie("option", tS, Ye(xe(m)("filter.anyRating")), 1), - N[5] || (N[5] = Fd('', 5)) - ], 40, eS) + te("option", tG, Ne(ve(m)("filter.anyRating")), 1), + k[5] || (k[5] = Od('', 5)) + ], 40, eG) ]) ], 512), [ - [yr, Y("core")] + [yr, V("core")] ]) ], 2), - ie("div", { - class: Zn(["mjr-filter-group", { "is-open": Y("media") }]) + te("div", { + class: An(["mjr-filter-group", { "is-open": V("media") }]) }, [ - ie("button", { + te("button", { type: "button", class: "mjr-filter-group-toggle", - "aria-expanded": String(Y("media")), - onClick: N[1] || (N[1] = (V) => R("media")) + "aria-expanded": String(V("media")), + onClick: k[1] || (k[1] = (Y) => R("media")) }, [ - ie("span", iS, Ye(xe(m)("group.media", "Media")), 1), - ie("span", oS, Ye(Y("media") ? "▾" : "▸"), 1) - ], 8, nS), - Ko(ie("div", rS, [ - ie("div", lS, [ - ie("div", aS, Ye(xe(m)("label.fileSizeMB", "File size (MB)")), 1), - ie("input", { + te("span", iG, Ne(ve(m)("group.media", "Media")), 1), + te("span", oG, Ne(V("media") ? "▾" : "▸"), 1) + ], 8, nG), + Uo(te("div", rG, [ + te("div", lG, [ + te("div", aG, Ne(ve(m)("label.fileSizeMB", "File size (MB)")), 1), + te("input", { ref_key: "minSizeInputRef", ref: a, type: "number", min: "0", step: "0.1", class: "mjr-input", - placeholder: xe(m)("label.min", "Min"), - value: xe(n).minSizeMB || "", + placeholder: ve(m)("label.min", "Min"), + value: ve(n).minSizeMB || "", onChange: X - }, null, 40, cS), - ie("input", { + }, null, 40, cG), + te("input", { ref_key: "maxSizeInputRef", ref: c, type: "number", min: "0", step: "0.1", class: "mjr-input", - placeholder: xe(m)("label.max", "Max"), - value: xe(n).maxSizeMB || "", + placeholder: ve(m)("label.max", "Max"), + value: ve(n).maxSizeMB || "", onChange: X - }, null, 40, sS) + }, null, 40, sG) ]), - ie("div", dS, [ - ie("div", uS, Ye(xe(m)("label.resolutionPx", "Resolution (px)")), 1), - ie("select", { + te("div", dG, [ + te("div", uG, Ne(ve(m)("label.resolutionPx", "Resolution (px)")), 1), + te("select", { ref_key: "resolutionPresetSelectRef", ref: s, class: "mjr-select", - value: A.value, - onChange: T + value: y.value, + onChange: K }, [ - ie("option", gS, Ye(xe(m)("filter.any", "Any")), 1), - N[6] || (N[6] = ie("option", { value: "hd" }, "HD (1280×720)", -1)), - N[7] || (N[7] = ie("option", { value: "fhd" }, "FHD (1920×1080)", -1)), - N[8] || (N[8] = ie("option", { value: "qhd" }, "QHD (2560×1440)", -1)), - N[9] || (N[9] = ie("option", { value: "uhd" }, "4K (3840×2160)", -1)) - ], 40, mS) + te("option", gG, Ne(ve(m)("filter.any", "Any")), 1), + k[6] || (k[6] = te("option", { value: "hd" }, "HD (1280×720)", -1)), + k[7] || (k[7] = te("option", { value: "fhd" }, "FHD (1920×1080)", -1)), + k[8] || (k[8] = te("option", { value: "qhd" }, "QHD (2560×1440)", -1)), + k[9] || (k[9] = te("option", { value: "uhd" }, "4K (3840×2160)", -1)) + ], 40, mG) ]), - ie("div", IS, [ - ie("div", bS, Ye(xe(m)("label.resolutionMinWxH", "Min WxH (px)")), 1), - ie("input", { + te("div", IG, [ + te("div", bG, Ne(ve(m)("label.resolutionMinWxH", "Min WxH (px)")), 1), + te("input", { ref_key: "minWidthInputRef", ref: d, type: "number", min: "0", step: "1", class: "mjr-input", - placeholder: xe(m)("label.widthPx", "W (px)"), - title: xe(m)("tooltip.widthPx", "Minimum width in pixels"), - value: xe(n).minWidth || "", + placeholder: ve(m)("label.widthPx", "W (px)"), + title: ve(m)("tooltip.widthPx", "Minimum width in pixels"), + value: ve(n).minWidth || "", onChange: x - }, null, 40, pS), - ie("input", { + }, null, 40, pG), + te("input", { ref_key: "minHeightInputRef", ref: u, type: "number", min: "0", step: "1", class: "mjr-input", - placeholder: xe(m)("label.heightPx", "H (px)"), - title: xe(m)("tooltip.heightPx", "Minimum height in pixels"), - value: xe(n).minHeight || "", + placeholder: ve(m)("label.heightPx", "H (px)"), + title: ve(m)("tooltip.heightPx", "Minimum height in pixels"), + value: ve(n).minHeight || "", onChange: x - }, null, 40, yS) + }, null, 40, yG) ]), - ie("div", fS, [ - ie("div", hS, Ye(xe(m)("label.resolutionMaxWxH", "Max WxH (px)")), 1), - ie("input", { + te("div", fG, [ + te("div", CG, Ne(ve(m)("label.resolutionMaxWxH", "Max WxH (px)")), 1), + te("input", { ref_key: "maxWidthInputRef", ref: I, type: "number", min: "0", step: "1", class: "mjr-input", - placeholder: xe(m)("label.widthPx", "W (px)"), - title: xe(m)("tooltip.widthPx", "Maximum width in pixels"), - value: xe(n).maxWidth || "", + placeholder: ve(m)("label.widthPx", "W (px)"), + title: ve(m)("tooltip.widthPx", "Maximum width in pixels"), + value: ve(n).maxWidth || "", onChange: x - }, null, 40, CS), - ie("input", { + }, null, 40, hG), + te("input", { ref_key: "maxHeightInputRef", - ref: y, + ref: A, type: "number", min: "0", step: "1", class: "mjr-input", - placeholder: xe(m)("label.heightPx", "H (px)"), - title: xe(m)("tooltip.heightPx", "Maximum height in pixels"), - value: xe(n).maxHeight || "", + placeholder: ve(m)("label.heightPx", "H (px)"), + title: ve(m)("tooltip.heightPx", "Maximum height in pixels"), + value: ve(n).maxHeight || "", onChange: x - }, null, 40, ZS) + }, null, 40, ZG) ]) ], 512), [ - [yr, Y("media")] + [yr, V("media")] ]) ], 2), - ie("div", { - class: Zn(["mjr-filter-group", { "is-open": Y("time") }]) + te("div", { + class: An(["mjr-filter-group", { "is-open": V("time") }]) }, [ - ie("button", { + te("button", { type: "button", class: "mjr-filter-group-toggle", - "aria-expanded": String(Y("time")), - onClick: N[2] || (N[2] = (V) => R("time")) + "aria-expanded": String(V("time")), + onClick: k[2] || (k[2] = (Y) => R("time")) }, [ - ie("span", WS, Ye(xe(m)("group.time", "Time")), 1), - ie("span", wS, Ye(Y("time") ? "▾" : "▸"), 1) - ], 8, AS), - Ko(ie("div", MS, [ - ie("div", SS, [ - ie("div", GS, Ye(xe(m)("label.dateRange")), 1), - ie("select", { + te("span", WG, Ne(ve(m)("group.time", "Time")), 1), + te("span", wG, Ne(V("time") ? "▾" : "▸"), 1) + ], 8, AG), + Uo(te("div", MG, [ + te("div", GG, [ + te("div", SG, Ne(ve(m)("label.dateRange")), 1), + te("select", { ref_key: "dateRangeSelectRef", - ref: S, + ref: h, class: "mjr-select", - title: xe(m)("tooltip.filterByDateRange", "Filter by date range"), - value: xe(n).dateRangeFilter, - onChange: v + title: ve(m)("tooltip.filterByDateRange", "Filter by date range"), + value: ve(n).dateRangeFilter, + onChange: j }, [ - ie("option", jS, Ye(xe(m)("filter.anytime")), 1), - ie("option", vS, Ye(xe(m)("filter.today")), 1), - ie("option", LS, Ye(xe(m)("filter.thisWeek")), 1), - ie("option", VS, Ye(xe(m)("filter.thisMonth")), 1) - ], 40, xS) + te("option", jG, Ne(ve(m)("filter.anytime")), 1), + te("option", vG, Ne(ve(m)("filter.today")), 1), + te("option", LG, Ne(ve(m)("filter.thisWeek")), 1), + te("option", YG, Ne(ve(m)("filter.thisMonth")), 1) + ], 40, xG) ]), - ie("div", YS, [ - ie("div", kS, Ye(xe(m)("label.agenda")), 1), - ie("div", { + te("div", VG, [ + te("div", XG, Ne(ve(m)("label.agenda")), 1), + te("div", { ref_key: "agendaContainerRef", - ref: Z, + ref: S, class: "mjr-agenda-container" }, [ - ie("input", { + te("input", { ref_key: "dateExactInputRef", - ref: C, + ref: W, type: "date", - class: Zn(["mjr-input mjr-agenda-input", p.value]), + class: An(["mjr-input mjr-agenda-input", p.value]), style: { display: "none" }, - value: xe(n).dateExactFilter, + value: ve(n).dateExactFilter, onChange: w - }, null, 42, XS) + }, null, 42, NG) ], 512) ]) ], 512), [ - [yr, Y("time")] + [yr, V("time")] ]) ], 2) ])); } -}, RS = /* @__PURE__ */ Vr(NS, [["__scopeId", "data-v-d1ebebd4"]]), FS = 128, OS = Object.freeze([ +}, RG = /* @__PURE__ */ Yr(kG, [["__scopeId", "data-v-d1ebebd4"]]), OG = 128, FG = Object.freeze([ { key: "portraits", label: "Portraits", @@ -36122,10 +36149,10 @@ const y2 = { iconClass: "pi pi-circle" } ]); -function zS(e) { +function zG(e) { try { const t = String(e ?? "").trim(); - if (!t || t.length > FS || t.includes("\0")) return ""; + if (!t || t.length > OG || t.includes("\0")) return ""; for (let n = 0; n < t.length; n += 1) { const i = t.charCodeAt(n); if (i <= 31 || i === 127) return ""; @@ -36135,7 +36162,7 @@ function zS(e) { return ""; } } -function JS(e) { +function JG(e) { if (!e || typeof e != "object") return null; const t = String(e.filepath || "").trim(); return t ? { @@ -36150,7 +36177,7 @@ function JS(e) { function rp(e) { const t = [], n = [], i = /* @__PURE__ */ new Set(); for (const o of Array.isArray(e) ? e : []) { - const r = JS(o); + const r = JG(o); if (r != null && r.filepath) { const a = r.filepath.toLowerCase(); if (i.has(a)) continue; @@ -36162,7 +36189,7 @@ function rp(e) { } return { assets: t, missingIds: n }; } -async function km(e) { +async function Xm(e) { var r; const t = Array.from( new Set( @@ -36176,247 +36203,247 @@ async function km(e) { const i = Array.isArray(n == null ? void 0 : n.data) ? n.data : Array.isArray((r = n == null ? void 0 : n.data) == null ? void 0 : r.assets) ? n.data.assets : [], { assets: o } = rp(i); return { ok: !0, data: o }; } -function Xm(e) { - var I, y; +function Nm(e) { + var I, A; const t = String((e == null ? void 0 : e.label) || "").trim(); if (!(!t || /^group\b/i.test(t))) return t; - const i = (Array.isArray(e == null ? void 0 : e.dominant_tags) ? e.dominant_tags : []).map((S) => String(S || "").trim()).filter(Boolean); + const i = (Array.isArray(e == null ? void 0 : e.dominant_tags) ? e.dominant_tags : []).map((h) => String(h || "").trim()).filter(Boolean); if (i.length) return i.slice(0, 2).join(" / "); const o = Array.isArray(e == null ? void 0 : e.sample_assets) ? e.sample_assets : [], r = String( - ((I = o.find((S) => String((S == null ? void 0 : S.subfolder) || "").trim())) == null ? void 0 : I.subfolder) || "" + ((I = o.find((h) => String((h == null ? void 0 : h.subfolder) || "").trim())) == null ? void 0 : I.subfolder) || "" ).trim(), l = r ? r.split(/[\\/]/).filter(Boolean).pop() : "", a = { image: 0, video: 0, audio: 0, other: 0 }; - for (const S of o) { - const Z = String((S == null ? void 0 : S.kind) || "").toLowerCase(); - Z in a ? a[Z] += 1 : a.other += 1; + for (const h of o) { + const S = String((h == null ? void 0 : h.kind) || "").toLowerCase(); + S in a ? a[S] += 1 : a.other += 1; } - const c = ((y = Object.entries(a).sort((S, Z) => Z[1] - S[1])[0]) == null ? void 0 : y[0]) || "other", s = c === "image" ? "Images" : c === "video" ? "Videos" : c === "audio" ? "Audio" : "Media", d = Number(e == null ? void 0 : e.cluster_id), u = Number.isFinite(d) ? ` ${d + 1}` : ""; + const c = ((A = Object.entries(a).sort((h, S) => S[1] - h[1])[0]) == null ? void 0 : A[0]) || "other", s = c === "image" ? "Images" : c === "video" ? "Videos" : c === "audio" ? "Audio" : "Media", d = Number(e == null ? void 0 : e.cluster_id), u = Number.isFinite(d) ? ` ${d + 1}` : ""; return l ? `${l} - ${s}` : `${s} Cluster${u}`; } -function TS() { +function TG() { var e; try { - const t = Xn(); + const t = kn(); return !!(((e = t == null ? void 0 : t.ai) == null ? void 0 : e.vectorSearchEnabled) ?? !0); } catch { return !0; } } -const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = { class: "mjr-menu-item-label" }, DS = ["disabled"], ES = { class: "mjr-menu-item-label" }, HS = { class: "mjr-menu-item-right" }, qS = { +const KG = { class: "mjr-menu mjr-collections-menu" }, BG = ["disabled"], UG = { class: "mjr-menu-item-label" }, DG = ["disabled"], HG = { class: "mjr-menu-item-label" }, EG = { class: "mjr-menu-item-right" }, qG = { key: 0, class: "mjr-menu-item-hint" -}, PS = { +}, PG = { key: 1, class: "mjr-muted" -}, QS = { +}, QG = { key: 2, class: "mjr-state-block is-error" -}, _S = { +}, _G = { key: 3, class: "mjr-muted" -}, $S = ["disabled", "onClick"], eG = { class: "mjr-menu-item-label" }, tG = { class: "mjr-menu-item-right" }, nG = { +}, $G = ["disabled", "onClick"], eS = { class: "mjr-menu-item-label" }, tS = { class: "mjr-menu-item-right" }, nS = { key: 0, class: "mjr-menu-item-hint" -}, iG = ["disabled", "title", "onClick"], oG = { class: "mjr-state-block" }, rG = { class: "mjr-section-title mjr-section-title--cyan" }, lG = { class: "mjr-section-hint" }, aG = ["disabled", "onClick"], cG = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, sG = { class: "mjr-section-title mjr-section-title--violet" }, dG = { class: "mjr-section-hint" }, uG = ["disabled"], mG = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, gG = { +}, iS = ["disabled", "title", "onClick"], oS = { class: "mjr-state-block" }, rS = { class: "mjr-section-title mjr-section-title--cyan" }, lS = { class: "mjr-section-hint" }, aS = ["disabled", "onClick"], cS = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, sS = { class: "mjr-section-title mjr-section-title--violet" }, dS = { class: "mjr-section-hint" }, uS = ["disabled"], mS = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, gS = { key: 0, class: "mjr-state-block is-error" -}, IG = { class: "mjr-cluster-thumbs" }, bG = ["src", "alt"], pG = { class: "mjr-cluster-info" }, yG = ["title"], fG = { class: "mjr-cluster-count" }, hG = ["disabled", "title", "onClick"], CG = "mjr:collections-changed", ZG = { +}, IS = { class: "mjr-cluster-thumbs" }, bS = ["src", "alt"], pS = { class: "mjr-cluster-info" }, yS = ["title"], fS = { class: "mjr-cluster-count" }, CS = ["disabled", "title", "onClick"], hS = "mjr:collections-changed", ZS = { __name: "CollectionsPopover", setup(e, { expose: t }) { - const n = Go(), i = Ae(null), o = Ae([]), r = Ae(!1), l = Ae(""), a = Ae(!1), c = Ae(!0), s = Ae(!1), d = Ae(!1), u = Ae(!1), I = Ae([]), y = Ae(""), S = Ae(""); - let Z = 0, C = null, g = !1; - const A = ze(() => String(n.collectionId || "").trim()), p = ze(() => String(n.collectionName || "").trim()), b = ze(() => !!A.value), L = ze(() => !c.value || d.value), h = ze(() => c.value && s.value); + const n = So(), i = We(null), o = We([]), r = We(!1), l = We(""), a = We(!1), c = We(!0), s = We(!1), d = We(!1), u = We(!1), I = We([]), A = We(""), h = We(""); + let S = 0, W = null, g = !1; + const y = ze(() => String(n.collectionId || "").trim()), p = ze(() => String(n.collectionName || "").trim()), b = ze(() => !!y.value), L = ze(() => !c.value || d.value), C = ze(() => c.value && s.value); function G() { - const B = i.value; - return !!B && String(B.style.display || "").toLowerCase() !== "none"; + const T = i.value; + return !!T && String(T.style.display || "").toLowerCase() !== "none"; } - function W({ - collectionId: B = A.value, + function Z({ + collectionId: T = y.value, collectionName: J = p.value, close: P = !0, - reload: H = !0 + reload: E = !0 } = {}) { var $; try { window.dispatchEvent( - new CustomEvent(CG, { + new CustomEvent(hS, { detail: { - collectionId: String(B || ""), + collectionId: String(T || ""), collectionName: String(J || ""), close: P !== !1, - reload: H !== !1 + reload: E !== !1 } }) ); - } catch (E) { - ($ = console.debug) == null || $.call(console, E); + } catch (H) { + ($ = console.debug) == null || $.call(console, H); } } - function f(B) { + function f(T) { var J; try { - return Ki(B) || ""; + return Ui(T) || ""; } catch (P) { return (J = console.debug) == null || J.call(console, P), ""; } } async function X() { var J, P; - if (!TS()) + if (!TG()) return { enabled: !1, vectorAvailable: !1, vectorDisabled: !1 }; try { - const H = await xa(), $ = !(H != null && H.ok) && (String((H == null ? void 0 : H.code) || "").toUpperCase() === "SERVICE_UNAVAILABLE" || /vector search is not enabled/i.test(String((H == null ? void 0 : H.error) || ""))); + const E = await xa(), $ = !(E != null && E.ok) && (String((E == null ? void 0 : E.code) || "").toUpperCase() === "SERVICE_UNAVAILABLE" || /vector search is not enabled/i.test(String((E == null ? void 0 : E.error) || ""))); return { enabled: !0, - vectorAvailable: !!(H != null && H.ok && ((J = H == null ? void 0 : H.data) == null ? void 0 : J.total) > 0), + vectorAvailable: !!(E != null && E.ok && ((J = E == null ? void 0 : E.data) == null ? void 0 : J.total) > 0), vectorDisabled: $ }; - } catch (H) { - return (P = console.debug) == null || P.call(console, H), { + } catch (E) { + return (P = console.debug) == null || P.call(console, E), { enabled: !0, vectorAvailable: !1, vectorDisabled: !1 }; } } - function x(...B) { + function x(...T) { const J = [], P = /* @__PURE__ */ new Set(); - for (const H of B) - for (const $ of Array.isArray(H) ? H : []) { - const E = String(($ == null ? void 0 : $.filepath) || "").trim().toLowerCase(); - !E || P.has(E) || (P.add(E), J.push($)); + for (const E of T) + for (const $ of Array.isArray(E) ? E : []) { + const H = String(($ == null ? void 0 : $.filepath) || "").trim().toLowerCase(); + !H || P.has(H) || (P.add(H), J.push($)); } return J; } - async function T() { + async function K() { var J; - const B = ++Z; - r.value = !0, a.value = !0, l.value = "", y.value = ""; + const T = ++S; + r.value = !0, a.value = !0, l.value = "", A.value = ""; try { - const [P, H] = await Promise.all([ - Fg(), + const [P, E] = await Promise.all([ + Og(), X() ]); - if (B !== Z) return; + if (T !== S) return; P != null && P.ok ? o.value = Array.isArray(P == null ? void 0 : P.data) ? P.data : [] : (l.value = String( (P == null ? void 0 : P.error) || m("msg.failedLoadCollections", "Failed to load collections") - ), o.value = []), c.value = !!H.enabled, s.value = !!H.vectorAvailable, d.value = !!H.vectorDisabled, s.value || (I.value = [], u.value = !1); + ), o.value = []), c.value = !!E.enabled, s.value = !!E.vectorAvailable, d.value = !!E.vectorDisabled, s.value || (I.value = [], u.value = !1); } catch (P) { - if (B !== Z) return; + if (T !== S) return; (J = console.debug) == null || J.call(console, P), l.value = m("msg.failedLoadCollections", "Failed to load collections"), o.value = []; } finally { - B === Z && (r.value = !1, a.value = !1); + T === S && (r.value = !1, a.value = !1); } } - function v(B, J) { + function j(T, J) { return async (...P) => { - if (!S.value) { - S.value = B; + if (!h.value) { + h.value = T; try { await J(...P); } finally { - S.value === B && (S.value = ""); + h.value === T && (h.value = ""); } } }; } - const w = v("create", async () => { - var H, $; - const B = await Vi( + const w = j("create", async () => { + var E, $; + const T = await Yi( m("dialog.createCollection", "Create collection"), m("dialog.collectionPlaceholder", "Collection name") ); - if (!B) return; - const J = zS(B); + if (!T) return; + const J = zG(T); if (!J) { - Ze(m("toast.invalidCollectionName", "Invalid collection name"), "error"); + Ae(m("toast.invalidCollectionName", "Invalid collection name"), "error"); return; } const P = await na(J); if (!(P != null && P.ok)) { - Ze( + Ae( (P == null ? void 0 : P.error) || m("toast.failedCreateCollection", "Failed to create collection"), "error" ); return; } - W({ - collectionId: String(((H = P == null ? void 0 : P.data) == null ? void 0 : H.id) || ""), + Z({ + collectionId: String(((E = P == null ? void 0 : P.data) == null ? void 0 : E.id) || ""), collectionName: String((($ = P == null ? void 0 : P.data) == null ? void 0 : $.name) || J) }); - }), R = v("exit", async () => { - W({ + }), R = j("exit", async () => { + Z({ collectionId: "", collectionName: "" }); - }), Y = v("open", async (B) => { - const J = String((B == null ? void 0 : B.id) || ""), P = String((B == null ? void 0 : B.name) || J); + }), V = j("open", async (T) => { + const J = String((T == null ? void 0 : T.id) || ""), P = String((T == null ? void 0 : T.name) || J); if (J) { - if (J === A.value) { - W({ + if (J === y.value) { + Z({ collectionId: J, collectionName: P, reload: !1 }); return; } - W({ + Z({ collectionId: J, collectionName: P }); } - }), F = v("delete", async (B) => { - const J = String((B == null ? void 0 : B.id) || ""), P = String((B == null ? void 0 : B.name) || J); + }), O = j("delete", async (T) => { + const J = String((T == null ? void 0 : T.id) || ""), P = String((T == null ? void 0 : T.name) || J); if (!J || !await yi( m("dialog.deleteCollection", 'Delete collection "{name}"?', { name: P }) )) return; - const $ = await Ef(J); + const $ = await Hf(J); if (!($ != null && $.ok)) { - Ze( + Ae( ($ == null ? void 0 : $.error) || m("toast.failedDeleteCollection", "Failed to delete collection"), "error" ); return; } - if (J === A.value) { - W({ + if (J === y.value) { + Z({ collectionId: "", collectionName: "" }); return; } - await T(); + await K(); }); - async function N(B) { - var E, oe; - const J = String((B == null ? void 0 : B.label) || "").trim(); + async function k(T) { + var H, ne; + const J = String((T == null ? void 0 : T.label) || "").trim(); if (!J) return; const P = await na(J); if (!(P != null && P.ok)) { - Ze( + Ae( (P == null ? void 0 : P.error) || m("toast.failedCreateSmartCollection", "Failed to create smart collection"), "error" ); return; } - const H = String(((E = P == null ? void 0 : P.data) == null ? void 0 : E.id) || ""); - if (!H) return; - const $ = await zg(String((B == null ? void 0 : B.query) || ""), 50); + const E = String(((H = P == null ? void 0 : P.data) == null ? void 0 : H.id) || ""); + if (!E) return; + const $ = await zg(String((T == null ? void 0 : T.query) || ""), 50); if ($ != null && $.ok && Array.isArray($ == null ? void 0 : $.data) && $.data.length > 0) { const M = rp($.data); - let j = M.assets; + let v = M.assets; if (M.missingIds.length) { - const O = await km(M.missingIds); - O.ok && Array.isArray(O.data) && (j = x(j, O.data)); + const F = await Xm(M.missingIds); + F.ok && Array.isArray(F.data) && (v = x(v, F.data)); } - if (j.length) { - const O = await Ga(H, j); - if (!(O != null && O.ok)) { - Ze( - (O == null ? void 0 : O.error) || m( + if (v.length) { + const F = await Sa(E, v); + if (!(F != null && F.ok)) { + Ae( + (F == null ? void 0 : F.error) || m( "toast.failedAddAssetsToSmartCollection", "Failed to add assets to smart collection" ), @@ -36424,8 +36451,8 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = { ); return; } - const D = Number(((oe = O == null ? void 0 : O.data) == null ? void 0 : oe.added) || j.length || 0); - Ze( + const D = Number(((ne = F == null ? void 0 : F.data) == null ? void 0 : ne.added) || v.length || 0); + Ae( m( "toast.smartCollectionCreated", 'Smart collection "{name}" created with {count} assets!', @@ -36435,7 +36462,7 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = { 3e3 ); } else - Ze( + Ae( m( "toast.smartCollectionEmpty", 'Collection "{name}" created but no matching assets found. Index more assets first.', @@ -36445,7 +36472,7 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = { 3e3 ); } else - Ze( + Ae( m( "toast.smartCollectionEmpty", 'Collection "{name}" created but no matching assets found. Index more assets first.', @@ -36454,273 +36481,273 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = { "info", 3e3 ); - W({ - collectionId: H, + Z({ + collectionId: E, collectionName: J }); } - async function V(B) { - if (!(B != null && B.key)) return; - const J = `smart:${B.key}`; - if (!S.value) { - S.value = J; + async function Y(T) { + if (!(T != null && T.key)) return; + const J = `smart:${T.key}`; + if (!h.value) { + h.value = J; try { - await N(B); + await k(T); } catch (P) { - console.error("[Majoor] Smart collection creation failed:", P), Ze( + console.error("[Majoor] Smart collection creation failed:", P), Ae( m("toast.failedCreateSmartCollection", "Failed to create smart collection"), "error" ); } finally { - S.value === J && (S.value = ""); + h.value === J && (h.value = ""); } } } - async function k() { - if (!(u.value || S.value)) { - u.value = !0, y.value = "", I.value = []; + async function N() { + if (!(u.value || h.value)) { + u.value = !0, A.value = "", I.value = []; try { - const B = await $f(8); - if (!(B != null && B.ok) || !Array.isArray(B == null ? void 0 : B.data) || !B.data.length) { - Ze( + const T = await $f(8); + if (!(T != null && T.ok) || !Array.isArray(T == null ? void 0 : T.data) || !T.data.length) { + Ae( m("toast.noGroupsFoundIndexFirst", "No groups found. Index more assets first."), "info", 3e3 ); return; } - I.value = B.data.map((J) => ({ + I.value = T.data.map((J) => ({ ...J, - _label: Xm(J) + _label: Nm(J) })); - } catch (B) { - console.error("[Majoor] Discover groups failed:", B), y.value = m("toast.clusterAnalysisFailed", "Cluster analysis failed"), Ze(m("toast.clusterAnalysisFailed", "Cluster analysis failed"), "error"); + } catch (T) { + console.error("[Majoor] Discover groups failed:", T), A.value = m("toast.clusterAnalysisFailed", "Cluster analysis failed"), Ae(m("toast.clusterAnalysisFailed", "Cluster analysis failed"), "error"); } finally { u.value = !1; } } } - async function K(B) { - var P, H, $; - const J = `cluster:${String((B == null ? void 0 : B.cluster_id) ?? "")}`; - if (!S.value) { - S.value = J; + async function U(T) { + var P, E, $; + const J = `cluster:${String((T == null ? void 0 : T.cluster_id) ?? "")}`; + if (!h.value) { + h.value = J; try { - const E = String((B == null ? void 0 : B._label) || Xm(B) || "").trim(); - if (!E) return; - const oe = await na(E); - if (!(oe != null && oe.ok)) { - Ze( - (oe == null ? void 0 : oe.error) || m("toast.failedCreateCollection", "Failed to create collection"), + const H = String((T == null ? void 0 : T._label) || Nm(T) || "").trim(); + if (!H) return; + const ne = await na(H); + if (!(ne != null && ne.ok)) { + Ae( + (ne == null ? void 0 : ne.error) || m("toast.failedCreateCollection", "Failed to create collection"), "error" ); return; } - const M = String(((P = oe == null ? void 0 : oe.data) == null ? void 0 : P.id) || ""), j = Array.isArray(B == null ? void 0 : B.all_asset_ids) ? B.all_asset_ids : []; - if (M && j.length) { - const O = await km(j); - if (!O.ok) { - Ze( - O.error || m("toast.failedLoadClusterAssets", "Failed to load cluster assets"), + const M = String(((P = ne == null ? void 0 : ne.data) == null ? void 0 : P.id) || ""), v = Array.isArray(T == null ? void 0 : T.all_asset_ids) ? T.all_asset_ids : []; + if (M && v.length) { + const F = await Xm(v); + if (!F.ok) { + Ae( + F.error || m("toast.failedLoadClusterAssets", "Failed to load cluster assets"), "error" ); return; } - const D = await Ga(M, O.data || []); + const D = await Sa(M, F.data || []); if (!(D != null && D.ok)) { - Ze( + Ae( (D == null ? void 0 : D.error) || m("toast.failedAddAssetsToCollection", "Failed to add assets to collection"), "error" ); return; } - const q = Number(((H = D == null ? void 0 : D.data) == null ? void 0 : H.added) || (($ = O.data) == null ? void 0 : $.length) || 0); - Ze( + const q = Number(((E = D == null ? void 0 : D.data) == null ? void 0 : E.added) || (($ = F.data) == null ? void 0 : $.length) || 0); + Ae( m( "toast.collectionCreatedWithAssets", 'Collection "{name}" created with {count} assets!', - { name: E, count: q } + { name: H, count: q } ), "success", 3e3 ); } else - Ze( - m("toast.collectionCreatedNamed", 'Collection "{name}" created.', { name: E }), + Ae( + m("toast.collectionCreatedNamed", 'Collection "{name}" created.', { name: H }), "success", 2200 ); - W({ + Z({ collectionId: M, - collectionName: E + collectionName: H }); - } catch (E) { - console.error("[Majoor] Cluster collection creation failed:", E), Ze(m("toast.failedCreateCollection", "Failed to create collection"), "error"); + } catch (H) { + console.error("[Majoor] Cluster collection creation failed:", H), Ae(m("toast.failedCreateCollection", "Failed to create collection"), "error"); } finally { - S.value === J && (S.value = ""); + h.value === J && (h.value = ""); } } } function z() { - const B = G(); - B && !g && T().catch(() => { - }), g = B; + const T = G(); + T && !g && K().catch(() => { + }), g = T; } return Dn(() => { - z(), !(typeof MutationObserver > "u" || !i.value) && (C = new MutationObserver(() => z()), C.observe(i.value, { + z(), !(typeof MutationObserver > "u" || !i.value) && (W = new MutationObserver(() => z()), W.observe(i.value, { attributes: !0, attributeFilter: ["style"] })); }), _n(() => { - var B, J; + var T, J; try { - (B = C == null ? void 0 : C.disconnect) == null || B.call(C); + (T = W == null ? void 0 : W.disconnect) == null || T.call(W); } catch (P) { (J = console.debug) == null || J.call(console, P); } - C = null; + W = null; }), t({ - refresh: T - }), (B, J) => (be(), Ce("div", { + refresh: K + }), (T, J) => (be(), Ze("div", { ref_key: "rootRef", ref: i, class: "mjr-popover mjr-collections-popover", style: { display: "none" } }, [ - ie("div", BS, [ - ie("button", { + te("div", KG, [ + te("button", { type: "button", class: "mjr-menu-item", - disabled: S.value !== "", - onClick: J[0] || (J[0] = (...P) => xe(w) && xe(w)(...P)) + disabled: h.value !== "", + onClick: J[0] || (J[0] = (...P) => ve(w) && ve(w)(...P)) }, [ - ie("span", KS, Ye(xe(m)("ctx.createCollection", "Create collection")), 1), - J[2] || (J[2] = ie("i", { class: "pi pi-plus mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1)) - ], 8, US), - b.value ? (be(), Ce("button", { + te("span", UG, Ne(ve(m)("ctx.createCollection", "Create collection")), 1), + J[2] || (J[2] = te("i", { class: "pi pi-plus mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1)) + ], 8, BG), + b.value ? (be(), Ze("button", { key: 0, type: "button", class: "mjr-menu-item", - disabled: S.value !== "", - onClick: J[1] || (J[1] = (...P) => xe(R) && xe(R)(...P)) + disabled: h.value !== "", + onClick: J[1] || (J[1] = (...P) => ve(R) && ve(R)(...P)) }, [ - ie("span", ES, Ye(xe(m)("ctx.exitCollection", "Exit collection")), 1), - ie("span", HS, [ - p.value ? (be(), Ce("span", qS, Ye(p.value), 1)) : ft("", !0), - J[3] || (J[3] = ie("i", { class: "pi pi-times mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1)) + te("span", HG, Ne(ve(m)("ctx.exitCollection", "Exit collection")), 1), + te("span", EG, [ + p.value ? (be(), Ze("span", qG, Ne(p.value), 1)) : yt("", !0), + J[3] || (J[3] = te("i", { class: "pi pi-times mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1)) ]) - ], 8, DS)) : ft("", !0), - J[11] || (J[11] = ie("div", { class: "mjr-menu-divider" }, null, -1)), - r.value ? (be(), Ce("div", PS, Ye(xe(m)("label.loading", "Loading...")), 1)) : l.value ? (be(), Ce("div", QS, Ye(l.value), 1)) : o.value.length ? ft("", !0) : (be(), Ce("div", _S, Ye(xe(m)("msg.noCollections", "No collections yet")), 1)), - (be(!0), Ce(Nt, null, Cn(o.value, (P) => (be(), Ce("div", { + ], 8, DG)) : yt("", !0), + J[11] || (J[11] = te("div", { class: "mjr-menu-divider" }, null, -1)), + r.value ? (be(), Ze("div", PG, Ne(ve(m)("label.loading", "Loading...")), 1)) : l.value ? (be(), Ze("div", QG, Ne(l.value), 1)) : o.value.length ? yt("", !0) : (be(), Ze("div", _G, Ne(ve(m)("msg.noCollections", "No collections yet")), 1)), + (be(!0), Ze(Nt, null, Zn(o.value, (P) => (be(), Ze("div", { key: P.id || P.name, class: "mjr-collection-row" }, [ - ie("button", { + te("button", { type: "button", - class: Zn(["mjr-menu-item", { "is-active": A.value === String(P.id || "") }]), - disabled: S.value !== "", - onClick: (H) => xe(Y)(P) + class: An(["mjr-menu-item", { "is-active": y.value === String(P.id || "") }]), + disabled: h.value !== "", + onClick: (E) => ve(V)(P) }, [ - ie("span", eG, Ye(P.name || P.id), 1), - ie("span", tG, [ - Number(P.count || 0) ? (be(), Ce("span", nG, Ye(Number(P.count || 0)), 1)) : ft("", !0), - J[4] || (J[4] = ie("i", { class: "pi pi-check mjr-menu-item-check" }, null, -1)) + te("span", eS, Ne(P.name || P.id), 1), + te("span", tS, [ + Number(P.count || 0) ? (be(), Ze("span", nS, Ne(Number(P.count || 0)), 1)) : yt("", !0), + J[4] || (J[4] = te("i", { class: "pi pi-check mjr-menu-item-check" }, null, -1)) ]) - ], 10, $S), - ie("button", { + ], 10, $G), + te("button", { type: "button", class: "mjr-menu-item mjr-delete-btn", - disabled: S.value !== "", - title: xe(m)("tooltip.deleteCollection", "Delete collection"), - onClick: On((H) => xe(F)(P), ["stop", "prevent"]) + disabled: h.value !== "", + title: ve(m)("tooltip.deleteCollection", "Delete collection"), + onClick: Fn((E) => ve(O)(P), ["stop", "prevent"]) }, [...J[5] || (J[5] = [ - ie("i", { class: "pi pi-trash" }, null, -1) - ])], 8, iG) + te("i", { class: "pi pi-trash" }, null, -1) + ])], 8, iS) ]))), 128)), - !a.value && L.value ? (be(), Ce(Nt, { key: 4 }, [ - J[6] || (J[6] = ie("div", { class: "mjr-menu-divider" }, null, -1)), - ie("div", oG, Ye(c.value ? "AI Smart Collections are disabled (enable vector search env var)." : "AI Smart Collections are disabled in settings."), 1) - ], 64)) : ft("", !0), - !a.value && h.value ? (be(), Ce(Nt, { key: 5 }, [ - J[9] || (J[9] = ie("div", { class: "mjr-menu-divider" }, null, -1)), - ie("div", rG, Ye(xe(m)("label.smartSuggestions", "Smart Suggestions")), 1), - ie("div", lG, Ye(xe(m)("label.smartCollectionsHint", "Create collections from AI-detected themes")), 1), - (be(!0), Ce(Nt, null, Cn(xe(OS), (P) => (be(), Ce("button", { + !a.value && L.value ? (be(), Ze(Nt, { key: 4 }, [ + J[6] || (J[6] = te("div", { class: "mjr-menu-divider" }, null, -1)), + te("div", oS, Ne(c.value ? "AI Smart Collections are disabled (enable vector search env var)." : "AI Smart Collections are disabled in settings."), 1) + ], 64)) : yt("", !0), + !a.value && C.value ? (be(), Ze(Nt, { key: 5 }, [ + J[9] || (J[9] = te("div", { class: "mjr-menu-divider" }, null, -1)), + te("div", rS, Ne(ve(m)("label.smartSuggestions", "Smart Suggestions")), 1), + te("div", lS, Ne(ve(m)("label.smartCollectionsHint", "Create collections from AI-detected themes")), 1), + (be(!0), Ze(Nt, null, Zn(ve(FG), (P) => (be(), Ze("button", { key: P.key, type: "button", class: "mjr-menu-item mjr-menu-item--smart", - disabled: S.value !== "", - onClick: (H) => V(P) + disabled: h.value !== "", + onClick: (E) => Y(P) }, [ - ie("span", cG, [ - ie("i", { - class: Zn(P.iconClass) + te("span", cS, [ + te("i", { + class: An(P.iconClass) }, null, 2), - ie("span", null, Ye(P.label), 1) + te("span", null, Ne(P.label), 1) ]), - J[7] || (J[7] = ie("i", { class: "pi pi-plus mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1)) - ], 8, aG))), 128)), - J[10] || (J[10] = ie("div", { class: "mjr-menu-divider" }, null, -1)), - ie("div", sG, Ye(xe(m)("label.discoverGroups", "Discover Groups")), 1), - ie("div", dG, Ye(xe(m)("label.discoverGroupsHint", "AI clusters assets by visual similarity")), 1), - ie("button", { + J[7] || (J[7] = te("i", { class: "pi pi-plus mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1)) + ], 8, aS))), 128)), + J[10] || (J[10] = te("div", { class: "mjr-menu-divider" }, null, -1)), + te("div", sS, Ne(ve(m)("label.discoverGroups", "Discover Groups")), 1), + te("div", dS, Ne(ve(m)("label.discoverGroupsHint", "AI clusters assets by visual similarity")), 1), + te("button", { type: "button", class: "mjr-menu-item mjr-menu-item--cluster", - disabled: u.value || S.value !== "", - onClick: k + disabled: u.value || h.value !== "", + onClick: N }, [ - ie("span", mG, [ - J[8] || (J[8] = ie("i", { class: "pi pi-search" }, null, -1)), - ie("span", null, Ye(u.value ? xe(m)("label.analyzing", "Analyzing...") : xe(m)("label.analyzeLibrary", "Analyze library")), 1) + te("span", mS, [ + J[8] || (J[8] = te("i", { class: "pi pi-search" }, null, -1)), + te("span", null, Ne(u.value ? ve(m)("label.analyzing", "Analyzing...") : ve(m)("label.analyzeLibrary", "Analyze library")), 1) ]) - ], 8, uG), - y.value ? (be(), Ce("div", gG, Ye(y.value), 1)) : ft("", !0), - (be(!0), Ce(Nt, null, Cn(I.value, (P) => (be(), Ce("div", { + ], 8, uS), + A.value ? (be(), Ze("div", gS, Ne(A.value), 1)) : yt("", !0), + (be(!0), Ze(Nt, null, Zn(I.value, (P) => (be(), Ze("div", { key: P.cluster_id, class: "mjr-cluster-row" }, [ - ie("div", IG, [ - (be(!0), Ce(Nt, null, Cn(Array.isArray(P.sample_assets) ? P.sample_assets.slice(0, 3) : [], (H, $) => (be(), Ce("img", { + te("div", IS, [ + (be(!0), Ze(Nt, null, Zn(Array.isArray(P.sample_assets) ? P.sample_assets.slice(0, 3) : [], (E, $) => (be(), Ze("img", { key: `${P.cluster_id}-${$}`, class: "mjr-cluster-thumb", - src: f(H), - alt: String((H == null ? void 0 : H.filename) || P._label || ""), + src: f(E), + alt: String((E == null ? void 0 : E.filename) || P._label || ""), loading: "lazy" - }, null, 8, bG))), 128)) + }, null, 8, bS))), 128)) ]), - ie("div", pG, [ - ie("div", { + te("div", pS, [ + te("div", { class: "mjr-cluster-name", title: P._label - }, Ye(P._label), 9, yG), - ie("div", fG, Ye(Number(P.size || 0)) + " " + Ye(xe(m)("label.assets", "assets")), 1) + }, Ne(P._label), 9, yS), + te("div", fS, Ne(Number(P.size || 0)) + " " + Ne(ve(m)("label.assets", "assets")), 1) ]), - ie("button", { + te("button", { type: "button", class: "mjr-cluster-create-btn", - disabled: S.value !== "", - title: xe(m)("ctx.createCollection", "Create collection"), - onClick: (H) => K(P) - }, Ye(S.value === `cluster:${String(P.cluster_id ?? "")}` ? xe(m)("label.loading", "Loading...") : xe(m)("label.create", "Create")), 9, hG) + disabled: h.value !== "", + title: ve(m)("ctx.createCollection", "Create collection"), + onClick: (E) => U(P) + }, Ne(h.value === `cluster:${String(P.cluster_id ?? "")}` ? ve(m)("label.loading", "Loading...") : ve(m)("label.create", "Create")), 9, CS) ]))), 128)) - ], 64)) : ft("", !0) + ], 64)) : yt("", !0) ]) ], 512)); } -}, AG = { +}, AS = { class: "mjr-popover mjr-pinned-folders-popover", style: { display: "none" } -}, WG = { +}, WS = { __name: "PinnedFoldersPopover", setup(e, { expose: t }) { - const n = Ae(null); + const n = We(null); return t({ get pinnedFoldersMenu() { return n.value; } - }), (i, o) => (be(), Ce("div", AG, [ - ie("div", { + }), (i, o) => (be(), Ze("div", AS, [ + te("div", { ref_key: "menuRef", ref: n, class: "mjr-menu", @@ -36728,13 +36755,13 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = { }, null, 512) ])); } -}, wG = { +}, wS = { class: "mjr-popover mjr-custom-popover", style: { display: "none" } -}, MG = { class: "mjr-popover-row" }, SG = { class: "mjr-popover-label" }, GG = { class: "mjr-popover-row mjr-popover-row--actions" }, xG = { +}, MS = { class: "mjr-popover-row" }, GS = { class: "mjr-popover-label" }, SS = { class: "mjr-popover-row mjr-popover-row--actions" }, xS = { __name: "CustomRootsPopover", setup(e, { expose: t }) { - const n = Ae(null), i = Ae(null), o = Ae(null); + const n = We(null), i = We(null), o = We(null); return t({ get customSelect() { return n.value; @@ -36745,39 +36772,39 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = { get customRemoveBtn() { return o.value; } - }), (r, l) => (be(), Ce("div", wG, [ - ie("div", MG, [ - ie("div", SG, Ye(xe(m)("label.folder")), 1), - ie("select", { + }), (r, l) => (be(), Ze("div", wS, [ + te("div", MS, [ + te("div", GS, Ne(ve(m)("label.folder")), 1), + te("select", { ref_key: "customSelectRef", ref: n, class: "mjr-select" }, null, 512) ]), - ie("div", GG, [ - ie("button", { + te("div", SS, [ + te("button", { ref_key: "customAddBtnRef", ref: i, type: "button", class: "mjr-btn" - }, Ye(xe(m)("btn.add")), 513), - ie("button", { + }, Ne(ve(m)("btn.add")), 513), + te("button", { ref_key: "customRemoveBtnRef", ref: o, type: "button", class: "mjr-btn", disabled: "" - }, Ye(xe(m)("btn.remove")), 513) + }, Ne(ve(m)("btn.remove")), 513) ]) ])); } -}, jG = ["aria-label"], vG = { class: "mjr-messages-head" }, LG = { class: "mjr-messages-actions" }, VG = ["title"], YG = { class: "mjr-messages-star-label" }, kG = ["title"], XG = { +}, jS = ["aria-label"], vS = { class: "mjr-messages-head" }, LS = { class: "mjr-messages-actions" }, YS = ["title"], VS = { class: "mjr-messages-star-label" }, XS = ["title"], NS = { class: "mjr-messages-tabs", role: "tablist" -}, NG = { class: "mjr-messages-panels" }, RG = { class: "mjr-messages-empty" }, FG = "https://github.com/MajoorWaldi/ComfyUI-Majoor-AssetsManager", OG = { +}, kS = { class: "mjr-messages-panels" }, RS = { class: "mjr-messages-empty" }, OS = "https://github.com/MajoorWaldi/ComfyUI-Majoor-AssetsManager", FS = { __name: "MessagePopover", setup(e, { expose: t }) { - const n = Ae(null), i = Ae(null), o = Ae(null), r = Ae(null), l = Ae(null), a = Ae(null), c = Ae(null), s = Ae(null), d = Ae(null), u = Ae(null), I = Ae(null); + const n = We(null), i = We(null), o = We(null), r = We(null), l = We(null), a = We(null), c = We(null), s = We(null), d = We(null), u = We(null), I = We(null); return t({ get title() { return n.value; @@ -36812,46 +36839,46 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = { get shortcutsPanel() { return I.value; } - }), (y, S) => (be(), Ce("div", { + }), (A, h) => (be(), Ze("div", { class: "mjr-popover mjr-messages-popover", id: "mjr-messages-popover", role: "dialog", - "aria-label": xe(m)("label.messages", "Messages"), + "aria-label": ve(m)("label.messages", "Messages"), "aria-hidden": "true", tabindex: "-1", style: { display: "none" } }, [ - ie("div", vG, [ - ie("div", { + te("div", vS, [ + te("div", { ref_key: "titleRef", ref: n, class: "mjr-messages-title" - }, Ye(xe(m)("label.messages", "Messages")), 513), - ie("div", LG, [ - ie("a", { - href: FG, + }, Ne(ve(m)("label.messages", "Messages")), 513), + te("div", LS, [ + te("a", { + href: OS, target: "_blank", rel: "noopener noreferrer", class: "mjr-btn mjr-messages-star-link", - title: xe(m)("tooltip.starGithub", "Open GitHub and give a star") + title: ve(m)("tooltip.starGithub", "Open GitHub and give a star") }, [ - S[0] || (S[0] = ie("span", { + h[0] || (h[0] = te("span", { class: "mjr-messages-star-icon", "aria-hidden": "true" }, "★", -1)), - ie("span", YG, Ye(xe(m)("btn.giveStar", "Give a star")), 1) - ], 8, VG), - ie("button", { + te("span", VS, Ne(ve(m)("btn.giveStar", "Give a star")), 1) + ], 8, YS), + te("button", { ref_key: "markReadBtnRef", ref: i, type: "button", class: "mjr-btn mjr-messages-mark-read-btn", - title: xe(m)("tooltip.markMessagesRead", "Mark all messages as read") - }, Ye(xe(m)("btn.markAllRead", "Mark all read")), 9, kG) + title: ve(m)("tooltip.markMessagesRead", "Mark all messages as read") + }, Ne(ve(m)("btn.markAllRead", "Mark all read")), 9, XS) ]) ]), - ie("div", XG, [ - ie("button", { + te("div", NS, [ + te("button", { ref_key: "messageTabBtnRef", ref: o, type: "button", @@ -36861,8 +36888,8 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = { "aria-controls": "mjr-messages-panel", id: "mjr-messages-tab" }, [ - ie("span", null, Ye(xe(m)("label.messages", "Messages")), 1), - ie("span", { + te("span", null, Ne(ve(m)("label.messages", "Messages")), 1), + te("span", { ref_key: "messageTabBadgeRef", ref: r, class: "mjr-tab-count-badge", @@ -36870,7 +36897,7 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = { style: { display: "none" } }, null, 512) ], 512), - ie("button", { + te("button", { ref_key: "historyTabBtnRef", ref: l, type: "button", @@ -36880,15 +36907,15 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = { "aria-controls": "mjr-history-panel", id: "mjr-history-tab" }, [ - ie("span", null, Ye(xe(m)("label.toastHistory", "History")), 1), - ie("span", { + te("span", null, Ne(ve(m)("label.toastHistory", "History")), 1), + te("span", { ref_key: "historyTabCountRef", ref: c, class: "mjr-tab-count-badge", "aria-hidden": "true", style: { display: "none" } }, null, 512), - ie("span", { + te("span", { ref_key: "historyTabBadgeRef", ref: a, class: "mjr-tab-unread-dot", @@ -36896,7 +36923,7 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = { style: { display: "none" } }, null, 512) ], 512), - ie("button", { + te("button", { ref_key: "shortcutsTabBtnRef", ref: s, type: "button", @@ -36905,10 +36932,10 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = { "aria-selected": "false", "aria-controls": "mjr-shortcuts-panel", id: "mjr-shortcuts-tab" - }, Ye(xe(m)("msg.shortcuts.title", "Shortcut Guide")), 513) + }, Ne(ve(m)("msg.shortcuts.title", "Shortcut Guide")), 513) ]), - ie("div", NG, [ - ie("div", { + te("div", kS, [ + te("div", { ref_key: "messageListRef", ref: d, class: "mjr-messages-list", @@ -36916,9 +36943,9 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = { role: "tabpanel", "aria-labelledby": "mjr-messages-tab" }, [ - ie("div", RG, Ye(xe(m)("msg.noMessages", "No messages for now.")), 1) + te("div", RS, Ne(ve(m)("msg.noMessages", "No messages for now.")), 1) ], 512), - ie("div", { + te("div", { ref_key: "historyPanelRef", ref: u, class: "mjr-messages-history-panel", @@ -36927,7 +36954,7 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = { "aria-labelledby": "mjr-history-tab", hidden: "" }, null, 512), - ie("div", { + te("div", { ref_key: "shortcutsPanelRef", ref: I, class: "mjr-messages-shortcuts-panel", @@ -36937,31 +36964,31 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = { hidden: "" }, null, 512) ]) - ], 8, jG)); + ], 8, jS)); } -}, zG = { class: "mjr-am-header-row" }, JG = { class: "mjr-am-header-left" }, TG = { class: "mjr-am-header-title" }, BG = ["data-mjr-version-channel", "title"], UG = { class: "mjr-tabs" }, KG = ["title"], DG = ["title"], EG = ["title"], HG = ["title"], qG = ["title"], PG = { class: "mjr-am-header-tools" }, QG = { +}, zS = { class: "mjr-am-header-row" }, JS = { class: "mjr-am-header-left" }, TS = { class: "mjr-am-header-title" }, KS = ["data-mjr-version-channel", "title"], BS = { class: "mjr-tabs" }, US = ["title"], DS = ["title"], HS = ["title"], ES = ["title"], qS = ["title"], PS = { class: "mjr-am-header-tools" }, QS = { class: "mjr-popover-anchor", style: { display: "none" } -}, _G = ["title", "aria-label"], $G = ["title", "aria-label"], ex = { class: "mjr-popover-anchor" }, tx = ["title", "aria-label"], nx = { class: "mjr-popover-anchor" }, ix = ["title", "aria-label"], ox = { class: "mjr-popover-anchor" }, rx = ["title", "aria-label"], lx = { class: "mjr-popover-anchor" }, ax = ["title", "aria-label"], cx = { class: "mjr-popover-anchor" }, sx = ["title", "aria-label"], dx = "mjr-am-version-badge-label", ux = "V, Ctrl/Cmd+V", mx = { +}, _S = ["title", "aria-label"], $S = ["title", "aria-label"], ex = { class: "mjr-popover-anchor" }, tx = ["title", "aria-label"], nx = { class: "mjr-popover-anchor" }, ix = ["title", "aria-label"], ox = { class: "mjr-popover-anchor" }, rx = ["title", "aria-label"], lx = { class: "mjr-popover-anchor" }, ax = ["title", "aria-label"], cx = { class: "mjr-popover-anchor" }, sx = ["title", "aria-label"], dx = "mjr-am-version-badge-label", ux = "V, Ctrl/Cmd+V", mx = { __name: "HeaderSection", setup(e, { expose: t }) { let n = null; function i() { - return n || (n = Promise.resolve({}).catch((U) => { - throw n = null, U; + return n || (n = Promise.resolve({}).catch((B) => { + throw n = null, B; })), n; } - function o(U, Q = "") { - const _ = String(U || "").trim().toLowerCase(), le = String(Q || "").trim().toLowerCase(); - return ["nightly", "dev", "alpha", "experimental"].some((se) => _.includes(se) || le.includes(se)) || _.includes("+") || _.length > 10 && /^[a-f0-9]+$/i.test(_); + function o(B, Q = "") { + const _ = String(B || "").trim().toLowerCase(), le = String(Q || "").trim().toLowerCase(); + return ["nightly", "dev", "alpha", "experimental"].some((de) => _.includes(de) || le.includes(de)) || _.includes("+") || _.length > 10 && /^[a-f0-9]+$/i.test(_); } function r() { - var U, Q, _; + var B, Q, _; try { if (typeof window < "u" && (window != null && window.MajoorAssetsManagerBranch)) return String(window.MajoorAssetsManagerBranch); } catch (le) { - (U = console.debug) == null || U.call(console, le); + (B = console.debug) == null || B.call(console, le); } try { if (typeof process < "u" && ((Q = process == null ? void 0 : process.env) != null && Q.MAJOR_ASSETS_MANAGER_BRANCH)) @@ -36978,13 +37005,13 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = { rating_desc: "pi pi-star-fill", size_desc: "pi pi-sort-numeric-down-alt", size_asc: "pi pi-sort-numeric-up-alt" - }, a = Go(), s = r() === "nightly", d = Ae(null), u = Ae(null), I = Ae(null), y = Ae(null), S = Ae(null), Z = Ae(null), C = Ae(null), g = Ae(null), A = Ae(null), p = Ae(null), b = Ae(null), L = Ae(null), h = Ae(null), G = Ae(null), W = Ae(null), f = Ae(null), X = Ae(null), x = Ae(null), T = Ae(null), v = Ae(null), w = Ae(null), R = Ae(s ? "nightly" : "v?"), Y = Ae(s ? "nightly" : "stable"), F = Ae(!1), N = Ae(!1), V = Ae(!1), k = ze( + }, a = So(), s = r() === "nightly", d = We(null), u = We(null), I = We(null), A = We(null), h = We(null), S = We(null), W = We(null), g = We(null), y = We(null), p = We(null), b = We(null), L = We(null), C = We(null), G = We(null), Z = We(null), f = We(null), X = We(null), x = We(null), K = We(null), j = We(null), w = We(null), R = We(s ? "nightly" : "v?"), V = We(s ? "nightly" : "stable"), O = We(!1), k = We(!1), Y = We(!1), N = ze( () => l[a.sort] ?? "pi pi-sort-amount-down" - ), K = ze( + ), U = ze( () => String(a.viewScope || a.scope || "output").toLowerCase() ), z = ze( - () => K.value === "similar" || Array.isArray(a.similarResults) && a.similarResults.length > 0 || !!a.similarTitle - ), B = { + () => U.value === "similar" || Array.isArray(a.similarResults) && a.similarResults.length > 0 || !!a.similarTitle + ), T = { get tabAll() { return X.value; }, @@ -36992,10 +37019,10 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = { return x.value; }, get tabOutputs() { - return T.value; + return K.value; }, get tabCustom() { - return v.value; + return j.value; }, get tabSimilar() { return w.value; @@ -37003,28 +37030,28 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = { }, J = ze(() => ({ position: "relative", fontSize: "10px", - opacity: N.value ? "1" : "0.6", + opacity: k.value ? "1" : "0.6", marginLeft: "6px", padding: "2px 5px", borderRadius: "4px", - background: N.value ? "rgba(255,255,255,0.15)" : "rgba(255,255,255,0.08)", + background: k.value ? "rgba(255,255,255,0.15)" : "rgba(255,255,255,0.08)", color: "inherit", textDecoration: "none", cursor: "pointer", transition: "opacity 0.2s, background 0.2s", verticalAlign: "middle" })), P = ze( - () => V.value ? m("tooltip.closeMFV", "Close Floating Viewer") : m("tooltip.openMFV", "Open Floating Viewer") - ), H = ze( - () => V.value ? "pi pi-eye-slash" : "pi pi-eye" + () => Y.value ? m("tooltip.closeMFV", "Close Floating Viewer") : m("tooltip.openMFV", "Open Floating Viewer") + ), E = ze( + () => Y.value ? "pi pi-eye-slash" : "pi pi-eye" ); - function $(U, { channel: Q = "" } = {}) { - R.value = String(U || ""), Q && (Y.value = Q); + function $(B, { channel: Q = "" } = {}) { + R.value = String(B || ""), Q && (V.value = Q); } - function E(U) { + function H(B) { i().then((Q) => { - const _ = Y.value.toLowerCase() === "nightly" || R.value.toLowerCase() === "nightly"; - if (!U && !_) { + const _ = V.value.toLowerCase() === "nightly" || R.value.toLowerCase() === "nightly"; + if (!B && !_) { const le = (typeof (Q == null ? void 0 : Q.version) == "string" ? Q.version.trim() : "") || ""; le && $(`v${le}`, { channel: "stable" }); } @@ -37032,90 +37059,90 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = { n = null; }); } - async function oe(U) { + async function ne(B) { var Q, _; try { - const le = await Ft(ct.VERSION, { cache: "no-cache" }); + const le = await Ft(st.VERSION, { cache: "no-cache" }); if (!(le != null && le.ok)) return; - const de = String(((Q = le.data) == null ? void 0 : Q.version) || "").trim(), se = String(((_ = le.data) == null ? void 0 : _.branch) || "").trim().toLowerCase(); - if (o(de, se) || U) { + const ce = String(((Q = le.data) == null ? void 0 : Q.version) || "").trim(), de = String(((_ = le.data) == null ? void 0 : _.branch) || "").trim().toLowerCase(); + if (o(ce, de) || B) { $("nightly", { channel: "nightly" }); return; } - de && $( - de.startsWith("v") ? de : `v${de}`, + ce && $( + ce.startsWith("v") ? ce : `v${ce}`, { channel: "stable" } ); } catch { } } - function M(U) { - const Q = String((U == null ? void 0 : U.channel) || "").trim().toLowerCase(), _ = String((U == null ? void 0 : U.current) || "").trim().toLowerCase(), le = String((U == null ? void 0 : U.latest) || "").trim().toLowerCase(); - (Q === "nightly" || _ === "nightly" || le === "nightly") && $("nightly", { channel: "nightly" }), F.value = !!(U != null && U.available); + function M(B) { + const Q = String((B == null ? void 0 : B.channel) || "").trim().toLowerCase(), _ = String((B == null ? void 0 : B.current) || "").trim().toLowerCase(), le = String((B == null ? void 0 : B.latest) || "").trim().toLowerCase(); + (Q === "nightly" || _ === "nightly" || le === "nightly") && $("nightly", { channel: "nightly" }), O.value = !!(B != null && B.available); } - function j() { - var U; + function v() { + var B; try { eb(g.value, P.value, ux); } catch (Q) { - (U = console.debug) == null || U.call(console, Q); + (B = console.debug) == null || B.call(console, Q); } } - function O() { - var U; + function F() { + var B; try { if (typeof document > "u") return; - V.value = !!document.querySelector(".mjr-mfv.is-visible"); + Y.value = !!document.querySelector(".mjr-mfv.is-visible"); } catch (Q) { - (U = console.debug) == null || U.call(console, Q); + (B = console.debug) == null || B.call(console, Q); } } - function D(U) { + function D(B) { var Q; - V.value = !!((Q = U == null ? void 0 : U.detail) != null && Q.visible); + Y.value = !!((Q = B == null ? void 0 : B.detail) != null && Q.visible); } - function q(U) { + function q(B) { var Q; try { - M(U == null ? void 0 : U.detail); + M(B == null ? void 0 : B.detail); } catch (_) { (Q = console.debug) == null || Q.call(console, _); } } function ee() { - window.dispatchEvent(new CustomEvent(ht.MFV_TOGGLE)); + window.dispatchEvent(new CustomEvent(ft.MFV_TOGGLE)); } - function ce() { - var U; + function ae() { + var B; try { - typeof window < "u" && (window.removeEventListener(Pc, q), window.removeEventListener(ht.MFV_VISIBILITY_CHANGED, D)); + typeof window < "u" && (window.removeEventListener(Qc, q), window.removeEventListener(ft.MFV_VISIBILITY_CHANGED, D)); } catch (Q) { - (U = console.debug) == null || U.call(console, Q); + (B = console.debug) == null || B.call(console, Q); } } - cn(V, () => { - j(); + dn(Y, () => { + v(); }), Dn(async () => { - var U, Q, _; + var B, Q, _; await wo(); try { - M(Oh()); + M(FC()); } catch (le) { - (U = console.debug) == null || U.call(console, le); + (B = console.debug) == null || B.call(console, le); } - O(), j(), E(s), oe(s); + F(), v(), H(s), ne(s); try { - typeof window < "u" && (window.addEventListener(Pc, q), window.addEventListener(ht.MFV_VISIBILITY_CHANGED, D)); + typeof window < "u" && (window.addEventListener(Qc, q), window.addEventListener(ft.MFV_VISIBILITY_CHANGED, D)); } catch (le) { (Q = console.debug) == null || Q.call(console, le); } try { - d.value._mjrVersionUpdateCleanup = ce; + d.value._mjrVersionUpdateCleanup = ae; } catch (le) { (_ = console.debug) == null || _.call(console, le); } }), _n(() => { - ce(); + ae(); }); const ue = document.createElement("div"); return t({ @@ -37128,226 +37155,226 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = { return u.value; }, get tabButtons() { - return B; + return T; }, // Tool buttons get customMenuBtn() { return I.value; }, get filterBtn() { - return y.value; + return A.value; }, get sortBtn() { - return S.value; + return h.value; }, get collectionsBtn() { - return Z.value; + return S.value; }, get pinnedFoldersBtn() { - return C.value; + return W.value; }, get messageBtn() { - return A.value; + return y.value; }, // CustomRootsPopover (Vue) get customPopover() { - var U; - return ((U = W.value) == null ? void 0 : U.$el) ?? null; + var B; + return ((B = Z.value) == null ? void 0 : B.$el) ?? null; }, get customSelect() { - var U; - return ((U = W.value) == null ? void 0 : U.customSelect) ?? null; + var B; + return ((B = Z.value) == null ? void 0 : B.customSelect) ?? null; }, get customAddBtn() { - var U; - return ((U = W.value) == null ? void 0 : U.customAddBtn) ?? null; + var B; + return ((B = Z.value) == null ? void 0 : B.customAddBtn) ?? null; }, get customRemoveBtn() { - var U; - return ((U = W.value) == null ? void 0 : U.customRemoveBtn) ?? null; + var B; + return ((B = Z.value) == null ? void 0 : B.customRemoveBtn) ?? null; }, // FilterPopover: expose real DOM element ($el) so legacy popovers.toggle() works get filterPopover() { - var U; - return ((U = L.value) == null ? void 0 : U.$el) ?? null; + var B; + return ((B = L.value) == null ? void 0 : B.$el) ?? null; }, get kindSelect() { - var U; - return ((U = L.value) == null ? void 0 : U.kindSelect) ?? null; + var B; + return ((B = L.value) == null ? void 0 : B.kindSelect) ?? null; }, get wfCheckbox() { - var U; - return ((U = L.value) == null ? void 0 : U.wfCheckbox) ?? null; + var B; + return ((B = L.value) == null ? void 0 : B.wfCheckbox) ?? null; }, get workflowTypeSelect() { - var U; - return ((U = L.value) == null ? void 0 : U.workflowTypeSelect) ?? null; + var B; + return ((B = L.value) == null ? void 0 : B.workflowTypeSelect) ?? null; }, get ratingSelect() { - var U; - return ((U = L.value) == null ? void 0 : U.ratingSelect) ?? null; + var B; + return ((B = L.value) == null ? void 0 : B.ratingSelect) ?? null; }, get minSizeInput() { - var U; - return ((U = L.value) == null ? void 0 : U.minSizeInput) ?? null; + var B; + return ((B = L.value) == null ? void 0 : B.minSizeInput) ?? null; }, get maxSizeInput() { - var U; - return ((U = L.value) == null ? void 0 : U.maxSizeInput) ?? null; + var B; + return ((B = L.value) == null ? void 0 : B.maxSizeInput) ?? null; }, get resolutionPresetSelect() { - var U; - return ((U = L.value) == null ? void 0 : U.resolutionPresetSelect) ?? null; + var B; + return ((B = L.value) == null ? void 0 : B.resolutionPresetSelect) ?? null; }, get minWidthInput() { - var U; - return ((U = L.value) == null ? void 0 : U.minWidthInput) ?? null; + var B; + return ((B = L.value) == null ? void 0 : B.minWidthInput) ?? null; }, get minHeightInput() { - var U; - return ((U = L.value) == null ? void 0 : U.minHeightInput) ?? null; + var B; + return ((B = L.value) == null ? void 0 : B.minHeightInput) ?? null; }, get maxWidthInput() { - var U; - return ((U = L.value) == null ? void 0 : U.maxWidthInput) ?? null; + var B; + return ((B = L.value) == null ? void 0 : B.maxWidthInput) ?? null; }, get maxHeightInput() { - var U; - return ((U = L.value) == null ? void 0 : U.maxHeightInput) ?? null; + var B; + return ((B = L.value) == null ? void 0 : B.maxHeightInput) ?? null; }, get dateRangeSelect() { - var U; - return ((U = L.value) == null ? void 0 : U.dateRangeSelect) ?? null; + var B; + return ((B = L.value) == null ? void 0 : B.dateRangeSelect) ?? null; }, get dateExactInput() { - var U; - return ((U = L.value) == null ? void 0 : U.dateExactInput) ?? null; + var B; + return ((B = L.value) == null ? void 0 : B.dateExactInput) ?? null; }, get agendaContainer() { - var U; - return ((U = L.value) == null ? void 0 : U.agendaContainer) ?? null; + var B; + return ((B = L.value) == null ? void 0 : B.agendaContainer) ?? null; }, // SortPopover: expose real DOM element ($el) so legacy popovers.toggle() works get sortPopover() { - var U; - return ((U = b.value) == null ? void 0 : U.$el) ?? null; + var B; + return ((B = b.value) == null ? void 0 : B.$el) ?? null; }, sortMenu: ue, // CollectionsPopover (Vue) get collectionsPopover() { - var U; - return ((U = h.value) == null ? void 0 : U.$el) ?? null; + var B; + return ((B = C.value) == null ? void 0 : B.$el) ?? null; }, get refreshCollectionsPopover() { - var U; - return ((U = h.value) == null ? void 0 : U.refresh) ?? null; + var B; + return ((B = C.value) == null ? void 0 : B.refresh) ?? null; }, // PinnedFoldersPopover (Vue) get pinnedFoldersPopover() { - var U; - return ((U = G.value) == null ? void 0 : U.$el) ?? null; + var B; + return ((B = G.value) == null ? void 0 : B.$el) ?? null; }, get pinnedFoldersMenu() { - var U; - return ((U = G.value) == null ? void 0 : U.pinnedFoldersMenu) ?? null; + var B; + return ((B = G.value) == null ? void 0 : B.pinnedFoldersMenu) ?? null; }, // MessagePopover (Vue) get messagePopover() { - var U; - return ((U = f.value) == null ? void 0 : U.$el) ?? null; + var B; + return ((B = f.value) == null ? void 0 : B.$el) ?? null; }, get messagePopoverTitle() { - var U; - return ((U = f.value) == null ? void 0 : U.title) ?? null; + var B; + return ((B = f.value) == null ? void 0 : B.title) ?? null; }, get messageTabBtn() { - var U; - return ((U = f.value) == null ? void 0 : U.messageTabBtn) ?? null; + var B; + return ((B = f.value) == null ? void 0 : B.messageTabBtn) ?? null; }, get messageTabBadge() { - var U; - return ((U = f.value) == null ? void 0 : U.messageTabBadge) ?? null; + var B; + return ((B = f.value) == null ? void 0 : B.messageTabBadge) ?? null; }, get historyTabBtn() { - var U; - return ((U = f.value) == null ? void 0 : U.historyTabBtn) ?? null; + var B; + return ((B = f.value) == null ? void 0 : B.historyTabBtn) ?? null; }, get historyTabBadge() { - var U; - return ((U = f.value) == null ? void 0 : U.historyTabBadge) ?? null; + var B; + return ((B = f.value) == null ? void 0 : B.historyTabBadge) ?? null; }, get historyTabCount() { - var U; - return ((U = f.value) == null ? void 0 : U.historyTabCount) ?? null; + var B; + return ((B = f.value) == null ? void 0 : B.historyTabCount) ?? null; }, get historyPanel() { - var U; - return ((U = f.value) == null ? void 0 : U.historyPanel) ?? null; + var B; + return ((B = f.value) == null ? void 0 : B.historyPanel) ?? null; }, get shortcutsTabBtn() { - var U; - return ((U = f.value) == null ? void 0 : U.shortcutsTabBtn) ?? null; + var B; + return ((B = f.value) == null ? void 0 : B.shortcutsTabBtn) ?? null; }, get messageList() { - var U; - return ((U = f.value) == null ? void 0 : U.messageList) ?? null; + var B; + return ((B = f.value) == null ? void 0 : B.messageList) ?? null; }, get shortcutsPanel() { - var U; - return ((U = f.value) == null ? void 0 : U.shortcutsPanel) ?? null; + var B; + return ((B = f.value) == null ? void 0 : B.shortcutsPanel) ?? null; }, get markReadBtn() { - var U; - return ((U = f.value) == null ? void 0 : U.markReadBtn) ?? null; + var B; + return ((B = f.value) == null ? void 0 : B.markReadBtn) ?? null; }, // Search bar refs get searchSection() { - var U; - return ((U = p.value) == null ? void 0 : U.searchSection) ?? null; + var B; + return ((B = p.value) == null ? void 0 : B.searchSection) ?? null; }, get searchInputEl() { - var U; - return ((U = p.value) == null ? void 0 : U.searchInputEl) ?? null; + var B; + return ((B = p.value) == null ? void 0 : B.searchInputEl) ?? null; }, get similarBtn() { - var U; - return ((U = p.value) == null ? void 0 : U.similarBtn) ?? null; + var B; + return ((B = p.value) == null ? void 0 : B.similarBtn) ?? null; }, - setSemanticEnabled(U) { + setSemanticEnabled(B) { var Q, _; - (_ = (Q = p.value) == null ? void 0 : Q.setSemanticEnabled) == null || _.call(Q, U); + (_ = (Q = p.value) == null ? void 0 : Q.setSemanticEnabled) == null || _.call(Q, B); }, - _headerDispose: ce - }), (U, Q) => (be(), Ce(Nt, null, [ - ie("div", { + _headerDispose: ae + }), (B, Q) => (be(), Ze(Nt, null, [ + te("div", { ref_key: "headerRef", ref: d, class: "mjr-am-header" }, [ - ie("div", zG, [ - ie("div", JG, [ - Q[2] || (Q[2] = ie("i", { + te("div", zS, [ + te("div", JS, [ + Q[2] || (Q[2] = te("i", { class: "mjr-am-header-icon pi pi-folder", "aria-hidden": "true" }, null, -1)), - ie("div", TG, Ye(xe(m)("manager.title")), 1), - ie("a", { + te("div", TS, Ne(ve(m)("manager.title")), 1), + te("a", { href: "https://ko-fi.com/majoorwaldi", target: "_blank", rel: "noopener noreferrer", class: "mjr-am-version-badge", - "data-mjr-version-channel": Y.value, - title: xe(m)("tooltip.supportKofi"), - style: Lt(J.value), - onMouseenter: Q[0] || (Q[0] = (_) => N.value = !0), - onMouseleave: Q[1] || (Q[1] = (_) => N.value = !1) + "data-mjr-version-channel": V.value, + title: ve(m)("tooltip.supportKofi"), + style: vt(J.value), + onMouseenter: Q[0] || (Q[0] = (_) => k.value = !0), + onMouseleave: Q[1] || (Q[1] = (_) => k.value = !1) }, [ - ie("span", { - class: Zn(dx) - }, Ye(R.value), 1), - ie("span", { + te("span", { + class: An(dx) + }, Ne(R.value), 1), + te("span", { "aria-hidden": "true", - style: Lt({ + style: vt({ position: "absolute", top: "2px", right: "-3px", @@ -37356,114 +37383,114 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = { borderRadius: "50%", background: "#f44336", boxShadow: "0 0 0 1px rgba(255,255,255,0.6)", - display: F.value ? "block" : "none", + display: O.value ? "block" : "none", pointerEvents: "none" }) }, null, 4) - ], 44, BG) + ], 44, KS) ]), - ie("div", { + te("div", { ref_key: "headerActionsRef", ref: u, class: "mjr-am-header-actions" }, [ - ie("div", UG, [ - ie("button", { + te("div", BS, [ + te("button", { ref_key: "tabAllRef", ref: X, type: "button", - class: Zn(["mjr-tab", { "is-active": K.value === "all" }]), + class: An(["mjr-tab", { "is-active": U.value === "all" }]), "data-scope": "all", - title: xe(m)("tooltip.tab.all") - }, Ye(xe(m)("tab.all")), 11, KG), - ie("button", { + title: ve(m)("tooltip.tab.all") + }, Ne(ve(m)("tab.all")), 11, US), + te("button", { ref_key: "tabInputsRef", ref: x, type: "button", - class: Zn(["mjr-tab", { "is-active": K.value === "input" }]), + class: An(["mjr-tab", { "is-active": U.value === "input" }]), "data-scope": "input", - title: xe(m)("tooltip.tab.input") - }, Ye(xe(m)("tab.input")), 11, DG), - ie("button", { + title: ve(m)("tooltip.tab.input") + }, Ne(ve(m)("tab.input")), 11, DS), + te("button", { ref_key: "tabOutputsRef", - ref: T, + ref: K, type: "button", - class: Zn(["mjr-tab", { "is-active": K.value === "output" }]), + class: An(["mjr-tab", { "is-active": U.value === "output" }]), "data-scope": "output", - title: xe(m)("tooltip.tab.output") - }, Ye(xe(m)("tab.output")), 11, EG), - ie("button", { + title: ve(m)("tooltip.tab.output") + }, Ne(ve(m)("tab.output")), 11, HS), + te("button", { ref_key: "tabCustomRef", - ref: v, + ref: j, type: "button", - class: Zn(["mjr-tab", { "is-active": K.value === "custom" }]), + class: An(["mjr-tab", { "is-active": U.value === "custom" }]), "data-scope": "custom", - title: xe(m)("tooltip.tab.custom") - }, Ye(xe(m)("tab.custom")), 11, HG), - ie("button", { + title: ve(m)("tooltip.tab.custom") + }, Ne(ve(m)("tab.custom")), 11, ES), + te("button", { ref_key: "tabSimilarRef", ref: w, type: "button", - class: Zn(["mjr-tab", { "is-active": K.value === "similar" }]), + class: An(["mjr-tab", { "is-active": U.value === "similar" }]), "data-scope": "similar", - style: Lt({ display: z.value ? "" : "none" }), - title: xe(m)("tooltip.tab.similar", "Browse current similar findings") - }, Ye(xe(m)("tab.similar", "Similar")), 15, qG) + style: vt({ display: z.value ? "" : "none" }), + title: ve(m)("tooltip.tab.similar", "Browse current similar findings") + }, Ne(ve(m)("tab.similar", "Similar")), 15, qS) ]), - ie("div", PG, [ - ie("div", QG, [ - ie("button", { + te("div", PS, [ + te("div", QS, [ + te("button", { ref_key: "customMenuBtnRef", ref: I, type: "button", class: "mjr-icon-btn", - title: xe(m)("tooltip.browserFolders"), - "aria-label": xe(m)("tooltip.browserFolders") + title: ve(m)("tooltip.browserFolders"), + "aria-label": ve(m)("tooltip.browserFolders") }, [...Q[3] || (Q[3] = [ - ie("i", { + te("i", { class: "pi pi-folder-open", "aria-hidden": "true" }, null, -1) - ])], 8, _G), - fn(xG, { + ])], 8, _S), + Cn(xS, { ref_key: "customPopoverRef", - ref: W + ref: Z }, null, 512) ]), - ie("button", { + te("button", { ref_key: "mfvBtnRef", ref: g, type: "button", - class: Zn(["mjr-icon-btn", { "mjr-mfv-btn-active": V.value }]), + class: An(["mjr-icon-btn", { "mjr-mfv-btn-active": Y.value }]), title: P.value, "aria-label": P.value, onClick: ee }, [ - ie("i", { - class: Zn(H.value), + te("i", { + class: An(E.value), "aria-hidden": "true" }, null, 2) - ], 10, $G), - ie("div", ex, [ - ie("button", { + ], 10, $S), + te("div", ex, [ + te("button", { ref_key: "messageBtnRef", - ref: A, + ref: y, type: "button", class: "mjr-icon-btn mjr-message-btn", - title: xe(m)("tooltip.openMessages", "Messages and updates"), - "aria-label": xe(m)("tooltip.openMessages", "Messages and updates") + title: ve(m)("tooltip.openMessages", "Messages and updates"), + "aria-label": ve(m)("tooltip.openMessages", "Messages and updates") }, [...Q[4] || (Q[4] = [ - ie("i", { + te("i", { class: "pi pi-info-circle", "aria-hidden": "true" }, null, -1), - ie("span", { + te("span", { class: "mjr-message-badge", style: { display: "none" }, "aria-hidden": "true" }, null, -1) ])], 8, tx), - fn(OG, { + Cn(FS, { ref_key: "messagePopoverRef", ref: f }, null, 512) @@ -37472,89 +37499,89 @@ const BS = { class: "mjr-menu mjr-collections-menu" }, US = ["disabled"], KS = { ], 512) ]) ], 512), - fn(S2, { + Cn(GM, { ref_key: "searchBarRef", ref: p }, { "filter-anchor": vl(() => [ - ie("div", nx, [ - ie("button", { + te("div", nx, [ + te("button", { ref_key: "filterBtnRef", - ref: y, + ref: A, type: "button", class: "mjr-icon-btn", - title: xe(m)("label.filters"), - "aria-label": xe(m)("label.filters") + title: ve(m)("label.filters"), + "aria-label": ve(m)("label.filters") }, [...Q[5] || (Q[5] = [ - ie("i", { + te("i", { class: "pi pi-filter", "aria-hidden": "true" }, null, -1) ])], 8, ix), - fn(RS, { + Cn(RG, { ref_key: "filterPopoverRef", ref: L }, null, 512) ]) ]), "sort-anchor": vl(() => [ - ie("div", ox, [ - ie("button", { + te("div", ox, [ + te("button", { ref_key: "sortBtnRef", - ref: S, + ref: h, type: "button", class: "mjr-icon-btn", - title: xe(m)("label.sort"), - "aria-label": xe(m)("label.sort") + title: ve(m)("label.sort"), + "aria-label": ve(m)("label.sort") }, [ - ie("i", { - class: Zn(k.value), + te("i", { + class: An(N.value), "aria-hidden": "true" }, null, 2) ], 8, rx), - fn(L2, { + Cn(LM, { ref_key: "sortPopoverRef", ref: b }, null, 512) ]) ]), "collections-anchor": vl(() => [ - ie("div", lx, [ - ie("button", { + te("div", lx, [ + te("button", { ref_key: "collectionsBtnRef", - ref: Z, + ref: S, type: "button", class: "mjr-icon-btn", - title: xe(m)("label.collections"), - "aria-label": xe(m)("label.collections") + title: ve(m)("label.collections"), + "aria-label": ve(m)("label.collections") }, [...Q[6] || (Q[6] = [ - ie("i", { + te("i", { class: "pi pi-bookmark", "aria-hidden": "true" }, null, -1) ])], 8, ax), - fn(ZG, { + Cn(ZS, { ref_key: "collectionsPopoverRef", - ref: h + ref: C }, null, 512) ]) ]), "pinned-folders-anchor": vl(() => [ - ie("div", cx, [ - ie("button", { + te("div", cx, [ + te("button", { ref_key: "pinnedFoldersBtnRef", - ref: C, + ref: W, type: "button", class: "mjr-icon-btn", - title: xe(m)("tooltip.pinnedFolders"), - "aria-label": xe(m)("tooltip.pinnedFolders") + title: ve(m)("tooltip.pinnedFolders"), + "aria-label": ve(m)("tooltip.pinnedFolders") }, [...Q[7] || (Q[7] = [ - ie("i", { + te("i", { class: "pi pi-folder", "aria-hidden": "true" }, null, -1) ])], 8, sx), - fn(WG, { + Cn(WS, { ref_key: "pinnedFoldersPopoverRef", ref: G }, null, 512) @@ -37606,38 +37633,38 @@ function bx() { const e = document.createElement("div"); return e.className = "mjr-am-context-pills", { wrap: e, update: ({ state: n, rawQuery: i = "", actions: o = null } = {}) => { var g; - const r = o && typeof o == "object" ? o : {}, l = ei(i || "").trim(), a = l.length > 0 && l !== "*", c = !!(ei((n == null ? void 0 : n.kindFilter) || "").trim() || n != null && n.workflowOnly || (Number((n == null ? void 0 : n.minRating) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.minSizeMB) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.maxSizeMB) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.minWidth) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.minHeight) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.maxWidth) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.maxHeight) || 0) || 0) > 0 || ei((n == null ? void 0 : n.workflowType) || "").trim() || ei((n == null ? void 0 : n.dateRangeFilter) || "").trim() || ei((n == null ? void 0 : n.dateExactFilter) || "").trim()), s = ei((n == null ? void 0 : n.sort) || "mtime_desc").trim() !== "mtime_desc", d = ei((n == null ? void 0 : n.collectionId) || "").trim().length > 0, u = String((n == null ? void 0 : n.viewScope) || (n == null ? void 0 : n.scope) || "output").toLowerCase(), I = u === "similar", y = u === "custom", S = u !== "output", Z = ei((n == null ? void 0 : n.similarSourceAssetId) || "").trim(); - if (!(!(a || c || s || d || S || I) && !e.childElementCount)) { + const r = o && typeof o == "object" ? o : {}, l = ei(i || "").trim(), a = l.length > 0 && l !== "*", c = !!(ei((n == null ? void 0 : n.kindFilter) || "").trim() || n != null && n.workflowOnly || (Number((n == null ? void 0 : n.minRating) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.minSizeMB) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.maxSizeMB) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.minWidth) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.minHeight) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.maxWidth) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.maxHeight) || 0) || 0) > 0 || ei((n == null ? void 0 : n.workflowType) || "").trim() || ei((n == null ? void 0 : n.dateRangeFilter) || "").trim() || ei((n == null ? void 0 : n.dateExactFilter) || "").trim()), s = ei((n == null ? void 0 : n.sort) || "mtime_desc").trim() !== "mtime_desc", d = ei((n == null ? void 0 : n.collectionId) || "").trim().length > 0, u = String((n == null ? void 0 : n.viewScope) || (n == null ? void 0 : n.scope) || "output").toLowerCase(), I = u === "similar", A = u === "custom", h = u !== "output", S = ei((n == null ? void 0 : n.similarSourceAssetId) || "").trim(); + if (!(!(a || c || s || d || h || I) && !e.childElementCount)) { try { e.replaceChildren(); - } catch (A) { - (g = console.debug) == null || g.call(console, A); + } catch (y) { + (g = console.debug) == null || g.call(console, y); } - if (!y && d && e.appendChild( + if (!A && d && e.appendChild( Ai({ label: m("label.collections"), value: ei((n == null ? void 0 : n.collectionName) || (n == null ? void 0 : n.collectionId) || "").trim(), onClear: () => { - var A; - return (A = r == null ? void 0 : r.clearCollection) == null ? void 0 : A.call(r); + var y; + return (y = r == null ? void 0 : r.clearCollection) == null ? void 0 : y.call(r); } }) ), I && e.appendChild( Ai({ label: m("search.findSimilar", "Find Similar"), - value: Z ? m("search.similarReference", "Reference #{id}", { id: Z }) : m("scope.similar", "Similar"), + value: S ? m("search.similarReference", "Reference #{id}", { id: S }) : m("scope.similar", "Similar"), onClear: () => { - var A; - return (A = r == null ? void 0 : r.clearSimilarScope) == null ? void 0 : A.call(r); + var y; + return (y = r == null ? void 0 : r.clearSimilarScope) == null ? void 0 : y.call(r); } }) - ), S && e.appendChild( + ), h && e.appendChild( Ai({ label: m("label.scope"), value: Ix(u || "output"), onClear: () => { - var A, p; - return I ? (A = r == null ? void 0 : r.clearSimilarScope) == null ? void 0 : A.call(r) : (p = r == null ? void 0 : r.clearScope) == null ? void 0 : p.call(r); + var y, p; + return I ? (y = r == null ? void 0 : r.clearSimilarScope) == null ? void 0 : y.call(r) : (p = r == null ? void 0 : r.clearScope) == null ? void 0 : p.call(r); } }) ), a && e.appendChild( @@ -37645,8 +37672,8 @@ function bx() { label: m("label.query"), value: l, onClear: () => { - var A; - return (A = r == null ? void 0 : r.clearQuery) == null ? void 0 : A.call(r); + var y; + return (y = r == null ? void 0 : r.clearQuery) == null ? void 0 : y.call(r); } }) ), ei((n == null ? void 0 : n.kindFilter) || "").trim() && e.appendChild( @@ -37654,8 +37681,8 @@ function bx() { label: m("label.type"), value: ei((n == null ? void 0 : n.kindFilter) || "").trim(), onClear: () => { - var A; - return (A = r == null ? void 0 : r.clearKind) == null ? void 0 : A.call(r); + var y; + return (y = r == null ? void 0 : r.clearKind) == null ? void 0 : y.call(r); } }) ), Number((n == null ? void 0 : n.minRating) || 0) > 0 && e.appendChild( @@ -37663,8 +37690,8 @@ function bx() { label: m("label.rating"), value: `>= ${Number((n == null ? void 0 : n.minRating) || 0)}`, onClear: () => { - var A; - return (A = r == null ? void 0 : r.clearMinRating) == null ? void 0 : A.call(r); + var y; + return (y = r == null ? void 0 : r.clearMinRating) == null ? void 0 : y.call(r); } }) ), n != null && n.workflowOnly && e.appendChild( @@ -37672,8 +37699,8 @@ function bx() { label: m("label.workflow"), value: m("label.only"), onClear: () => { - var A; - return (A = r == null ? void 0 : r.clearWorkflowOnly) == null ? void 0 : A.call(r); + var y; + return (y = r == null ? void 0 : r.clearWorkflowOnly) == null ? void 0 : y.call(r); } }) ), ei((n == null ? void 0 : n.workflowType) || "").trim() && e.appendChild( @@ -37681,12 +37708,12 @@ function bx() { label: m("label.workflowType"), value: ei((n == null ? void 0 : n.workflowType) || "").trim(), onClear: () => { - var A; - return (A = r == null ? void 0 : r.clearWorkflowType) == null ? void 0 : A.call(r); + var y; + return (y = r == null ? void 0 : r.clearWorkflowType) == null ? void 0 : y.call(r); } }) ), (Number((n == null ? void 0 : n.minSizeMB) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.maxSizeMB) || 0) || 0) > 0) { - const A = Number((n == null ? void 0 : n.minSizeMB) || 0) || 0, p = Number((n == null ? void 0 : n.maxSizeMB) || 0) || 0, b = A > 0 && p > 0 ? `${A}-${p} MB` : A > 0 ? `>= ${A} MB` : `<= ${p} MB`; + const y = Number((n == null ? void 0 : n.minSizeMB) || 0) || 0, p = Number((n == null ? void 0 : n.maxSizeMB) || 0) || 0, b = y > 0 && p > 0 ? `${y}-${p} MB` : y > 0 ? `>= ${y} MB` : `<= ${p} MB`; e.appendChild( Ai({ label: m("sidebar.size"), @@ -37699,11 +37726,11 @@ function bx() { ); } if ((Number((n == null ? void 0 : n.minWidth) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.minHeight) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.maxWidth) || 0) || 0) > 0 || (Number((n == null ? void 0 : n.maxHeight) || 0) || 0) > 0) { - const A = String((n == null ? void 0 : n.resolutionCompare) || "gte") === "lte", p = Number(A ? n == null ? void 0 : n.maxWidth : (n == null ? void 0 : n.minWidth) || 0) || 0, b = Number(A ? n == null ? void 0 : n.maxHeight : (n == null ? void 0 : n.minHeight) || 0) || 0; + const y = String((n == null ? void 0 : n.resolutionCompare) || "gte") === "lte", p = Number(y ? n == null ? void 0 : n.maxWidth : (n == null ? void 0 : n.minWidth) || 0) || 0, b = Number(y ? n == null ? void 0 : n.maxHeight : (n == null ? void 0 : n.minHeight) || 0) || 0; e.appendChild( Ai({ label: m("label.resolution"), - value: `${A ? "<=" : ">="} ${p || 0}x${b || 0} px`, + value: `${y ? "<=" : ">="} ${p || 0}x${b || 0} px`, onClear: () => { var L; return (L = r == null ? void 0 : r.clearResolution) == null ? void 0 : L.call(r); @@ -37716,8 +37743,8 @@ function bx() { label: m("sidebar.date"), value: ei((n == null ? void 0 : n.dateRangeFilter) || "").trim(), onClear: () => { - var A; - return (A = r == null ? void 0 : r.clearDateRange) == null ? void 0 : A.call(r); + var y; + return (y = r == null ? void 0 : r.clearDateRange) == null ? void 0 : y.call(r); } }) ), ei((n == null ? void 0 : n.dateExactFilter) || "").trim() && e.appendChild( @@ -37725,8 +37752,8 @@ function bx() { label: m("label.day"), value: ei((n == null ? void 0 : n.dateExactFilter) || "").trim(), onClear: () => { - var A; - return (A = r == null ? void 0 : r.clearDateExact) == null ? void 0 : A.call(r); + var y; + return (y = r == null ? void 0 : r.clearDateExact) == null ? void 0 : y.call(r); } }) ), s && e.appendChild( @@ -37734,8 +37761,8 @@ function bx() { label: m("label.sort"), value: gx(n == null ? void 0 : n.sort), onClear: () => { - var A; - return (A = r == null ? void 0 : r.clearSort) == null ? void 0 : A.call(r); + var y; + return (y = r == null ? void 0 : r.clearSort) == null ? void 0 : y.call(r); } }) ); @@ -37765,7 +37792,7 @@ function fx(e) { } return []; } -function hx(e) { +function Cx(e) { var t, n, i, o; try { const r = String(((t = e == null ? void 0 : e.dataset) == null ? void 0 : t.mjrSelectedAssetIds) || "").trim(); @@ -37783,8 +37810,8 @@ function hx(e) { } return 0; } -function Cx({ state: e, gridContainer: t, context: n = null } = {}) { - var p, b, L, h, G, W; +function hx({ state: e, gridContainer: t, context: n = null } = {}) { + var p, b, L, C, G, Z; const i = fx(t), o = (() => { var f; try { @@ -37803,93 +37830,93 @@ function Cx({ state: e, gridContainer: t, context: n = null } = {}) { } catch (X) { (f = console.debug) == null || f.call(console, X); } - return hx(t); + return Cx(t); })(), c = Number(((p = t == null ? void 0 : t.dataset) == null ? void 0 : p.mjrTotal) || 0) || 0 || Math.max(0, Number((e == null ? void 0 : e.lastGridTotal) ?? 0) || 0), d = Number(((b = t == null ? void 0 : t.dataset) == null ? void 0 : b.mjrShown) || 0) || 0 || Math.max(0, Number((e == null ? void 0 : e.lastGridCount) ?? 0) || 0) || r, u = String( (e == null ? void 0 : e.viewScope) || (e == null ? void 0 : e.scope) || ((L = t == null ? void 0 : t.dataset) == null ? void 0 : L.mjrScope) || "output" - ).toLowerCase(), I = c && c >= d ? `${d}/${c}` : `${d}`, S = [`${d > 0 && o.total > 0 && o.folders === o.total ? m("summary.folders") : m("summary.assets")}: ${I}`]; - l > 0 && S.push(`${m("summary.selected")}: ${l}`), S.push(yx(u)); + ).toLowerCase(), I = c && c >= d ? `${d}/${c}` : `${d}`, h = [`${d > 0 && o.total > 0 && o.folders === o.total ? m("summary.folders") : m("summary.assets")}: ${I}`]; + l > 0 && h.push(`${m("summary.selected")}: ${l}`), h.push(yx(u)); try { - const f = Number(((h = t == null ? void 0 : t.dataset) == null ? void 0 : h.mjrHiddenPngSiblings) || 0) || 0; - String(((G = t == null ? void 0 : t.dataset) == null ? void 0 : G.mjrHidePngSiblingsEnabled) || "") === "1" && f > 0 && S.push(`${m("summary.hidden")}: ${f}`); + const f = Number(((C = t == null ? void 0 : t.dataset) == null ? void 0 : C.mjrHiddenPngSiblings) || 0) || 0; + String(((G = t == null ? void 0 : t.dataset) == null ? void 0 : G.mjrHidePngSiblingsEnabled) || "") === "1" && f > 0 && h.push(`${m("summary.hidden")}: ${f}`); } catch (f) { - (W = console.debug) == null || W.call(console, f); + (Z = console.debug) == null || Z.call(console, f); } - const Z = (n == null ? void 0 : n.duplicatesAlert) || null, C = Number((Z == null ? void 0 : Z.exactCount) || 0) || 0, g = Number((Z == null ? void 0 : Z.similarCount) || 0) || 0, A = u !== "similar" && (C > 0 || g > 0); + const S = (n == null ? void 0 : n.duplicatesAlert) || null, W = Number((S == null ? void 0 : S.exactCount) || 0) || 0, g = Number((S == null ? void 0 : S.similarCount) || 0) || 0, y = u !== "similar" && (W > 0 || g > 0); return { shown: d, total: c, activeScope: u, - summaryText: S.filter(Boolean).join(" | "), - duplicateText: A ? `${m("summary.duplicates")}: ${C} | ${m("summary.similar")}: ${g}` : "", - showDuplicates: A, + summaryText: h.filter(Boolean).join(" | "), + duplicateText: y ? `${m("summary.duplicates")}: ${W} | ${m("summary.similar")}: ${g}` : "", + showDuplicates: y, rawQuery: px((n == null ? void 0 : n.rawQuery) || "").trim() }; } const Zx = { class: "mjr-am-summary-left" }, Ax = { class: "mjr-am-summary-text" }, Wx = { class: "mjr-am-summary-right" }, wx = ["title"], Mx = { __name: "SummaryBarSection", setup(e, { expose: t }) { - const n = Go(), i = Ae(null), o = Ae(null), r = Ae(""), l = Ae(""), a = Ae(!1), c = bx(); + const n = So(), i = We(null), o = We(null), r = We(""), l = We(""), a = We(!1), c = bx(); let s = null; const d = (() => { - const y = document.createElement("div"); - return y.className = "mjr-folder-breadcrumb", y.style.cssText = "display:none; align-items:center; gap:4px; padding:3px 6px; margin:1px 0 3px 0;font-size:11px; opacity:0.78; overflow:auto; white-space:nowrap; border-radius:8px;background:color-mix(in srgb, var(--mjr-surface-2, rgba(255,255,255,0.05)) 42%, transparent);", y; + const A = document.createElement("div"); + return A.className = "mjr-folder-breadcrumb", A.style.cssText = "display:none; align-items:center; gap:4px; padding:3px 6px; margin:1px 0 3px 0;font-size:11px; opacity:0.78; overflow:auto; white-space:nowrap; border-radius:8px;background:color-mix(in srgb, var(--mjr-surface-2, rgba(255,255,255,0.05)) 42%, transparent);", A; })(); function u() { - var y; + var A; try { s == null || s(); - } catch (S) { - (y = console.debug) == null || y.call(console, S); + } catch (h) { + (A = console.debug) == null || A.call(console, h); } } - function I({ state: y, gridContainer: S, context: Z = null, actions: C = null } = {}) { - var A; - const g = Cx({ state: y, gridContainer: S, context: Z }); + function I({ state: A, gridContainer: h, context: S = null, actions: W = null } = {}) { + var y; + const g = hx({ state: A, gridContainer: h, context: S }); n.lastGridCount = g.shown, n.lastGridTotal = g.total, n.viewScope = g.activeScope, r.value = g.summaryText, l.value = g.duplicateText, a.value = g.showDuplicates, s = g.showDuplicates ? () => { var p, b; try { - (p = C == null ? void 0 : C.onDuplicateAlertClick) == null || p.call(C, (Z == null ? void 0 : Z.duplicatesAlert) || null); + (p = W == null ? void 0 : W.onDuplicateAlertClick) == null || p.call(W, (S == null ? void 0 : S.duplicatesAlert) || null); } catch (L) { (b = console.debug) == null || b.call(console, L); } } : null; try { c.update({ - state: y, - gridContainer: S, + state: A, + gridContainer: h, rawQuery: g.rawQuery, - actions: C + actions: W }); } catch (p) { - (A = console.debug) == null || A.call(console, p); + (y = console.debug) == null || y.call(console, p); } } return Dn(() => { - var y, S, Z; + var A, h, S; try { - (S = (y = o.value) == null ? void 0 : y.appendChild) == null || S.call(y, c.wrap); - } catch (C) { - (Z = console.debug) == null || Z.call(console, C); + (h = (A = o.value) == null ? void 0 : A.appendChild) == null || h.call(A, c.wrap); + } catch (W) { + (S = console.debug) == null || S.call(console, W); } - }), t({ summaryBar: i, updateSummaryBar: I, folderBreadcrumb: d }), (y, S) => (be(), Ce("div", { + }), t({ summaryBar: i, updateSummaryBar: I, folderBreadcrumb: d }), (A, h) => (be(), Ze("div", { ref_key: "summaryBar", ref: i, class: "mjr-am-summary", "aria-live": "polite" }, [ - ie("div", Zx, [ - ie("div", Ax, Ye(r.value), 1) + te("div", Zx, [ + te("div", Ax, Ne(r.value), 1) ]), - ie("div", Wx, [ - a.value ? (be(), Ce("button", { + te("div", Wx, [ + a.value ? (be(), Ze("button", { key: 0, type: "button", class: "mjr-am-dup-alert", title: l.value, style: { padding: "2px 8px", border: "1px solid var(--border-color, #555)", background: "var(--comfy-menu-bg, #222)", color: "var(--input-text, #eee)", "border-radius": "999px", cursor: "pointer" }, onClick: u - }, Ye(l.value), 9, wx)) : ft("", !0), - ie("div", { + }, Ne(l.value), 9, wx)) : yt("", !0), + te("div", { ref_key: "pillsHost", ref: o }, null, 512) @@ -37897,7 +37924,7 @@ const Zx = { class: "mjr-am-summary-left" }, Ax = { class: "mjr-am-summary-text" ], 512)); } }; -function Sx(e, t) { +function Gx(e, t) { let n = null; function i(r) { var l; @@ -37918,11 +37945,11 @@ function Sx(e, t) { } n = null; } - cn(e, (r, l) => { + dn(e, (r, l) => { l && o(), r && i(r); }, { immediate: !0 }), _n(o); } -function Gx(e) { +function Sx(e) { var t; if (!e) return () => { }; @@ -37975,10 +38002,10 @@ function xx(e) { } t = null; }; - cn( + dn( e, (i, o) => { - o && n(), i && (t = Gx(i)); + o && n(), i && (t = Sx(i)); }, { immediate: !0 } ), _n(n); @@ -38023,14 +38050,14 @@ function Lx(e = {}) { const t = Array.isArray(e.selectedIds) ? e.selectedIds.map(String).filter(Boolean) : [], n = String(e.activeId || t[0] || "").trim(); return { ids: t, activeId: n }; } -function Vx(e, t = {}, n = null) { +function Yx(e, t = {}, n = null) { var r, l; const i = Number( t.count ?? t.shown ?? ((r = e == null ? void 0 : e.dataset) == null ? void 0 : r.mjrShown) ?? (n == null ? void 0 : n.lastGridCount) ?? 0 ) || 0, o = Number(t.total ?? ((l = e == null ? void 0 : e.dataset) == null ? void 0 : l.mjrTotal) ?? (n == null ? void 0 : n.lastGridTotal) ?? 0) || 0; return { count: i, total: o }; } -function Yx(e, t = Al()) { +function Vx(e, t = Al()) { if (!e || !t) return lp; let n = 0; const i = () => { @@ -38061,7 +38088,7 @@ function Yx(e, t = Al()) { } }; } -function kx(e, { +function Xx(e, { panelStore: t = Al(), onContextChanged: n = null, markUserInteraction: i = null @@ -38070,39 +38097,39 @@ function kx(e, { if (!e) return lp; let o = 0; const r = () => { - var y, S; + var A, h; if (o) try { cancelAnimationFrame(o); - } catch (Z) { - (y = console.debug) == null || y.call(console, Z); + } catch (S) { + (A = console.debug) == null || A.call(console, S); } try { o = requestAnimationFrame(() => { o = 0, cr(n); }); - } catch (Z) { - (S = console.debug) == null || S.call(console, Z), o = 0, cr(n); + } catch (S) { + (h = console.debug) == null || h.call(console, S), o = 0, cr(n); } - }, l = (y) => { - const S = (y == null ? void 0 : y.detail) || {}; + }, l = (A) => { + const h = (A == null ? void 0 : A.detail) || {}; if (t) { - const { count: Z, total: C } = Vx(e, S, t); - t.lastGridCount = Z, t.lastGridTotal = C; + const { count: S, total: W } = Yx(e, h, t); + t.lastGridCount = S, t.lastGridTotal = W; } cr(n); - }, a = (y) => { + }, a = (A) => { if (cr(i), t) { - const { ids: S, activeId: Z } = Lx((y == null ? void 0 : y.detail) || {}); - t.selectedAssetIds = S, t.activeAssetId = Z; + const { ids: h, activeId: S } = Lx((A == null ? void 0 : A.detail) || {}); + t.selectedAssetIds = h, t.activeAssetId = S; } cr(n); }; e.addEventListener("mjr:grid-stats", l), e.addEventListener("mjr:selection-changed", a); try { (d = (s = globalThis == null ? void 0 : globalThis.window) == null ? void 0 : s.addEventListener) == null || d.call(s, "mjr-settings-changed", l); - } catch (y) { - (u = console.debug) == null || u.call(console, y); + } catch (A) { + (u = console.debug) == null || u.call(console, A); } let c = null; try { @@ -38110,28 +38137,28 @@ function kx(e, { childList: !0, subtree: !0 })); - } catch (y) { - (I = console.debug) == null || I.call(console, y); + } catch (A) { + (I = console.debug) == null || I.call(console, A); } return () => { - var y, S, Z, C, g, A, p, b; + var A, h, S, W, g, y, p, b; try { e.removeEventListener("mjr:grid-stats", l); } catch (L) { - (y = console.debug) == null || y.call(console, L); + (A = console.debug) == null || A.call(console, L); } try { e.removeEventListener("mjr:selection-changed", a); } catch (L) { - (S = console.debug) == null || S.call(console, L); + (h = console.debug) == null || h.call(console, L); } try { - (C = (Z = globalThis == null ? void 0 : globalThis.window) == null ? void 0 : Z.removeEventListener) == null || C.call(Z, "mjr-settings-changed", l); + (W = (S = globalThis == null ? void 0 : globalThis.window) == null ? void 0 : S.removeEventListener) == null || W.call(S, "mjr-settings-changed", l); } catch (L) { (g = console.debug) == null || g.call(console, L); } try { - (A = c == null ? void 0 : c.disconnect) == null || A.call(c); + (y = c == null ? void 0 : c.disconnect) == null || y.call(c); } catch (L) { (p = console.debug) == null || p.call(console, L); } @@ -38145,7 +38172,7 @@ function kx(e, { } }; } -async function Xx({ +async function Nx({ initialLoadPromise: e, gridWrapper: t, gridContainer: n, @@ -38176,22 +38203,22 @@ async function Xx({ } if (a) { const u = () => { - var I, y, S; + var I, A, h; try { if (typeof (n == null ? void 0 : n._mjrScrollToAssetId) == "function") n._mjrScrollToAssetId(a); else { - const Z = (I = n.querySelector) == null ? void 0 : I.call( + const S = (I = n.querySelector) == null ? void 0 : I.call( n, `.mjr-asset-card[data-mjr-asset-id="${vx(a)}"]` ); - (y = Z == null ? void 0 : Z.scrollIntoView) == null || y.call(Z, { + (A = S == null ? void 0 : S.scrollIntoView) == null || A.call(S, { block: "nearest", behavior: "instant" }); } - } catch (Z) { - (S = console.debug) == null || S.call(console, Z); + } catch (S) { + (h = console.debug) == null || h.call(console, S); } }; u(), setTimeout(u, 160); @@ -38199,164 +38226,174 @@ async function Xx({ } i.sidebarOpen && a && cr(o); } -const Nx = { +const kx = { __name: "AssetsGrid", setup(e, { expose: t }) { - const n = Ae(null), i = Ae(null), o = Ae(null), r = Go(), l = ze(() => { - var Z; - return ((Z = o.value) == null ? void 0 : Z.gridContainer) ?? null; + const n = We(null), i = We(null), o = We(null), r = So(), l = ze(() => { + var W; + return ((W = o.value) == null ? void 0 : W.gridContainer) ?? null; }); let a = null, c = null, s = null, d = null; function u() { - var Z, C; + var W, g; try { - (Z = s == null ? void 0 : s.setVisibility) == null || Z.call(s); - } catch (g) { - (C = console.debug) == null || C.call(console, g); + (W = s == null ? void 0 : s.setVisibility) == null || W.call(s); + } catch (y) { + (g = console.debug) == null || g.call(console, y); } } function I() { - var g, A, p, b, L, h; + var W; + try { + const g = l.value; + g && ja(g); + } catch (g) { + (W = console.debug) == null || W.call(console, g); + } + u(); + } + function A() { + var y, p, b, L, C, G; try { d == null || d(); - } catch (G) { - (g = console.debug) == null || g.call(console, G); + } catch (Z) { + (y = console.debug) == null || y.call(console, Z); } - const Z = [], C = () => { + const W = [], g = () => { u(); }; try { - window.addEventListener("resize", C), Z.push(() => window.removeEventListener("resize", C)); - } catch (G) { - (A = console.debug) == null || A.call(console, G); + window.addEventListener("resize", g), W.push(() => window.removeEventListener("resize", g)); + } catch (Z) { + (p = console.debug) == null || p.call(console, Z); } try { if (typeof ResizeObserver == "function") { - const G = new ResizeObserver(() => { - C(); - }), W = [ + const Z = new ResizeObserver(() => { + g(); + }), f = [ n.value, i.value, - ((p = n.value) == null ? void 0 : p.parentElement) || null + ((b = n.value) == null ? void 0 : b.parentElement) || null ].filter(Boolean); - for (const f of W) - G.observe(f); - Z.push(() => G.disconnect()); + for (const X of f) + Z.observe(X); + W.push(() => Z.disconnect()); } - } catch (G) { - (b = console.debug) == null || b.call(console, G); + } catch (Z) { + (L = console.debug) == null || L.call(console, Z); } try { if (typeof MutationObserver == "function") { - const G = new MutationObserver(() => { - C(); - }), W = [ + const Z = new MutationObserver(() => { + g(); + }), f = [ n.value, i.value, - ((L = n.value) == null ? void 0 : L.parentElement) || null + ((C = n.value) == null ? void 0 : C.parentElement) || null ].filter(Boolean); - for (const f of W) - G.observe(f, { + for (const X of f) + Z.observe(X, { attributes: !0, attributeFilter: ["class", "style", "hidden", "aria-hidden"] }); - Z.push(() => G.disconnect()); + W.push(() => Z.disconnect()); } - } catch (G) { - (h = console.debug) == null || h.call(console, G); + } catch (Z) { + (G = console.debug) == null || G.call(console, Z); } d = () => { - var G; - for (; Z.length; ) { - const W = Z.pop(); + var Z; + for (; W.length; ) { + const f = W.pop(); try { - W == null || W(); - } catch (f) { - (G = console.debug) == null || G.call(console, f); + f == null || f(); + } catch (X) { + (Z = console.debug) == null || Z.call(console, X); } } }; } - cg("mjr-grid-container-ref", l), Sx( + cg("mjr-grid-container-ref", l), Gx( l, () => r ), xx(l); - function y() { + function h() { return l.value || null; } - function S(Z = {}) { - var g; - const C = y(); - if (C) { + function S(W = {}) { + var y; + const g = h(); + if (g) { try { c == null || c(); - } catch (A) { - (g = console.debug) == null || g.call(console, A); + } catch (p) { + (y = console.debug) == null || y.call(console, p); } - c = kx(C, { + c = Xx(g, { panelStore: r, - ...Z + ...W }); } } return Dn(() => { - var Z; - a = Yx(i.value, r), i.value && Number(r.scrollTop || 0) > 0 && (i.value.scrollTop = Number(r.scrollTop || 0)), I(); + var W; + a = Vx(i.value, r), i.value && Number(r.scrollTop || 0) > 0 && (i.value.scrollTop = Number(r.scrollTop || 0)), A(); try { - window.addEventListener("mjr:keepalive-attached", u), document.addEventListener("visibilitychange", u); - } catch (C) { - (Z = console.debug) == null || Z.call(console, C); + window.addEventListener("mjr:keepalive-attached", I), document.addEventListener("visibilitychange", u); + } catch (g) { + (W = console.debug) == null || W.call(console, g); } u(); }), xr(() => { - var Z, C, g, A, p, b, L; + var W, g, y, p, b, L, C; try { - ja(y()); - } catch (h) { - (Z = console.debug) == null || Z.call(console, h); + va(h()); + } catch (G) { + (W = console.debug) == null || W.call(console, G); } try { a == null || a(); - } catch (h) { - (C = console.debug) == null || C.call(console, h); + } catch (G) { + (g = console.debug) == null || g.call(console, G); } a = null; try { d == null || d(); - } catch (h) { - (g = console.debug) == null || g.call(console, h); + } catch (G) { + (y = console.debug) == null || y.call(console, G); } d = null; try { c == null || c(); - } catch (h) { - (A = console.debug) == null || A.call(console, h); + } catch (G) { + (p = console.debug) == null || p.call(console, G); } c = null; try { - (p = s == null ? void 0 : s.dispose) == null || p.call(s); - } catch (h) { - (b = console.debug) == null || b.call(console, h); + (b = s == null ? void 0 : s.dispose) == null || b.call(s); + } catch (G) { + (L = console.debug) == null || L.call(console, G); } s = null; try { - window.removeEventListener("mjr:keepalive-attached", u), document.removeEventListener("visibilitychange", u); - } catch (h) { - (L = console.debug) == null || L.call(console, h); + window.removeEventListener("mjr:keepalive-attached", I), document.removeEventListener("visibilitychange", u); + } catch (G) { + (C = console.debug) == null || C.call(console, G); } - }), cn( + }), dn( l, - (Z, C) => { - var g, A; + (W, g) => { + var y, p; try { - C && C !== Z && ja(C); - } catch (p) { - (g = console.debug) == null || g.call(console, p); + g && g !== W && va(g); + } catch (b) { + (y = console.debug) == null || y.call(console, b); } try { - Z && Ds(Z); - } catch (p) { - (A = console.debug) == null || A.call(console, p); + W && ja(W); + } catch (b) { + (p = console.debug) == null || p.call(console, b); } }, { immediate: !0 } @@ -38368,99 +38405,99 @@ const Nx = { return i.value; }, get gridContainer() { - return y(); + return h(); }, - onGridContainerReady(Z) { - return Z && Z !== y(), y(); + onGridContainerReady(W) { + return W && W !== h(), h(); }, - bindGridHostState(Z = {}) { - return S(Z), () => { - var C; + bindGridHostState(W = {}) { + return S(W), () => { + var g; try { c == null || c(); - } catch (g) { - (C = console.debug) == null || C.call(console, g); + } catch (y) { + (g = console.debug) == null || g.call(console, y); } c = null; }; }, - restoreGridUiState(Z, C = {}) { - return Xx({ - initialLoadPromise: Z, + restoreGridUiState(W, g = {}) { + return Nx({ + initialLoadPromise: W, gridWrapper: i.value, - gridContainer: y(), + gridContainer: h(), panelStore: r, - ...C + ...g }); }, - initAssetsQueryController(Z = {}) { - var g, A; - const C = y(); - if (!C || !i.value) return null; + initAssetsQueryController(W = {}) { + var y, p; + const g = h(); + if (!g || !i.value) return null; try { - (g = s == null ? void 0 : s.dispose) == null || g.call(s); - } catch (p) { - (A = console.debug) == null || A.call(console, p); + (y = s == null ? void 0 : s.dispose) == null || y.call(s); + } catch (b) { + (p = console.debug) == null || p.call(console, b); } return s = op({ - gridContainer: C, + gridContainer: g, gridWrapper: i.value, - ...Z + ...W }), u(), s; }, - loadAssets(...Z) { - var C, g; - return (g = (C = o.value) == null ? void 0 : C.loadAssets) == null ? void 0 : g.call(C, ...Z); + loadAssets(...W) { + var g, y; + return (y = (g = o.value) == null ? void 0 : g.loadAssets) == null ? void 0 : y.call(g, ...W); }, - loadAssetsFromList(...Z) { - var C, g; - return (g = (C = o.value) == null ? void 0 : C.loadAssetsFromList) == null ? void 0 : g.call(C, ...Z); + loadAssetsFromList(...W) { + var g, y; + return (y = (g = o.value) == null ? void 0 : g.loadAssetsFromList) == null ? void 0 : y.call(g, ...W); }, - prepareGridForScopeSwitch(...Z) { - var C, g; - return (g = (C = o.value) == null ? void 0 : C.prepareGridForScopeSwitch) == null ? void 0 : g.call(C, ...Z); + prepareGridForScopeSwitch(...W) { + var g, y; + return (y = (g = o.value) == null ? void 0 : g.prepareGridForScopeSwitch) == null ? void 0 : y.call(g, ...W); }, - refreshGrid(...Z) { - var C, g; - return (g = (C = o.value) == null ? void 0 : C.refreshGrid) == null ? void 0 : g.call(C, ...Z); + refreshGrid(...W) { + var g, y; + return (y = (g = o.value) == null ? void 0 : g.refreshGrid) == null ? void 0 : y.call(g, ...W); }, - captureAnchor(...Z) { - var C, g; - return (g = (C = o.value) == null ? void 0 : C.captureAnchor) == null ? void 0 : g.call(C, ...Z); + captureAnchor(...W) { + var g, y; + return (y = (g = o.value) == null ? void 0 : g.captureAnchor) == null ? void 0 : y.call(g, ...W); }, - restoreAnchor(...Z) { - var C, g; - return (g = (C = o.value) == null ? void 0 : C.restoreAnchor) == null ? void 0 : g.call(C, ...Z); + restoreAnchor(...W) { + var g, y; + return (y = (g = o.value) == null ? void 0 : g.restoreAnchor) == null ? void 0 : y.call(g, ...W); }, - hydrateGridFromSnapshot(...Z) { - var C, g; - return (g = (C = o.value) == null ? void 0 : C.hydrateFromSnapshot) == null ? void 0 : g.call(C, ...Z); + hydrateGridFromSnapshot(...W) { + var g, y; + return (y = (g = o.value) == null ? void 0 : g.hydrateFromSnapshot) == null ? void 0 : y.call(g, ...W); }, - upsertAsset(...Z) { - var C, g; - return (g = (C = o.value) == null ? void 0 : C.upsertAsset) == null ? void 0 : g.call(C, ...Z); + upsertAsset(...W) { + var g, y; + return (y = (g = o.value) == null ? void 0 : g.upsertAsset) == null ? void 0 : y.call(g, ...W); }, - removeAssets(...Z) { - var C, g; - return (g = (C = o.value) == null ? void 0 : C.removeAssets) == null ? void 0 : g.call(C, ...Z); + removeAssets(...W) { + var g, y; + return (y = (g = o.value) == null ? void 0 : g.removeAssets) == null ? void 0 : y.call(g, ...W); }, - disposeGrid(...Z) { - var C, g; - return (g = (C = o.value) == null ? void 0 : C.dispose) == null ? void 0 : g.call(C, ...Z); + disposeGrid(...W) { + var g, y; + return (y = (g = o.value) == null ? void 0 : g.dispose) == null ? void 0 : y.call(g, ...W); } - }), (Z, C) => (be(), Ce("div", { + }), (W, g) => (be(), Ze("div", { ref_key: "browseSectionRef", ref: n, class: "mjr-am-browse", style: { flex: "1", display: "flex", "flex-direction": "row", overflow: "hidden" } }, [ - ie("div", { + te("div", { ref_key: "gridWrapperRef", ref: i, class: "mjr-am-grid-scroll", style: { flex: "1", overflow: "auto", position: "relative" } }, [ - fn(Vp, { + Cn(Yp, { ref_key: "gridHostRef", ref: o, "scroll-element": i.value @@ -38471,7 +38508,7 @@ const Nx = { }, Rx = { class: "mjr-sidebar-header", style: { display: "flex", "align-items": "center", "justify-content": "space-between", padding: "10px 12px", "border-bottom": "1px solid var(--mjr-border,rgba(255,255,255,0.12))", "flex-shrink": "0", background: "var(--mjr-surface-2,#2e2e2e)" } -}, Fx = ["title"], Ox = { +}, Ox = ["title"], Fx = { __name: "SidebarHeaderSection", props: { asset: { type: Object, required: !0 } @@ -38479,13 +38516,13 @@ const Nx = { emits: ["close"], setup(e, { emit: t }) { const n = t; - return (i, o) => (be(), Ce("div", Rx, [ - ie("div", { + return (i, o) => (be(), Ze("div", Rx, [ + te("div", { class: "mjr-sidebar-filename", title: e.asset.filename, style: { "font-size": "0.9em", "font-weight": "600", overflow: "hidden", "text-overflow": "ellipsis", "white-space": "nowrap", flex: "1", "min-width": "0", "padding-right": "8px" } - }, Ye(e.asset.filename), 9, Fx), - ie("button", { + }, Ne(e.asset.filename), 9, Ox), + te("button", { type: "button", class: "mjr-sidebar-close", title: "Close sidebar (Esc)", @@ -38512,32 +38549,32 @@ function Jx(e) { const n = (i) => String(i).padStart(2, "0"); return `${t.getFullYear()}-${n(t.getMonth() + 1)}-${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}`; } -const Tx = { class: "mjr-sidebar-preview" }, Bx = ["src"], Ux = ["src"], Kx = ["src"], Dx = { +const Tx = { class: "mjr-sidebar-preview" }, Kx = ["src"], Bx = ["src"], Ux = ["src"], Dx = { key: 3, style: { color: "rgba(255, 255, 255, 0.4)", "font-size": "14px" } -}, Ex = { +}, Hx = { class: "mjr-sidebar-preview-meta", style: { "margin-top": "10px", "font-size": "12px", color: "var(--mjr-muted, rgba(255, 255, 255, 0.65))", display: "flex", "flex-wrap": "wrap", gap: "6px", "align-items": "center", "line-height": "1.3", "padding-bottom": "12px", "border-bottom": "1px solid var(--mjr-border, rgba(255, 255, 255, 0.12))" } -}, Hx = { +}, Ex = { __name: "SidebarPreviewSection", props: { asset: { type: Object, required: !0 }, showPreviewThumb: { type: Boolean, default: !0 } }, setup(e) { - const t = e, n = Ae(null); + const t = e, n = We(null); let i = null; - const o = ze(() => Ki(t.asset) || ""), r = ze(() => { + const o = ze(() => Ui(t.asset) || ""), r = ze(() => { var I; const d = String(((I = t.asset) == null ? void 0 : I.filename) || ""), u = d.lastIndexOf("."); return u === -1 ? "" : d.slice(u + 1).toUpperCase(); }), l = ze(() => { - var y, S, Z; + var A, h, S; const d = []; - r.value && d.push(r.value), (y = t.asset) != null && y.kind && d.push(String(t.asset.kind).toLowerCase()); - const u = zx((S = t.asset) == null ? void 0 : S.size); + r.value && d.push(r.value), (A = t.asset) != null && A.kind && d.push(String(t.asset.kind).toLowerCase()); + const u = zx((h = t.asset) == null ? void 0 : h.size); u && d.push(u); - const I = Jx((Z = t.asset) == null ? void 0 : Z.mtime); + const I = Jx((S = t.asset) == null ? void 0 : S.mtime); return I && d.push(I), d.join(" • "); }); function a() { @@ -38552,29 +38589,29 @@ const Tx = { class: "mjr-sidebar-preview" }, Bx = ["src"], Ux = ["src"], Kx = [" function c(d) { var u, I; try { - const y = (u = d == null ? void 0 : d.play) == null ? void 0 : u.call(d); - y && typeof y.catch == "function" && y.catch(() => { + const A = (u = d == null ? void 0 : d.play) == null ? void 0 : u.call(d); + A && typeof A.catch == "function" && A.catch(() => { }); - } catch (y) { - (I = console.debug) == null || I.call(console, y); + } catch (A) { + (I = console.debug) == null || I.call(console, A); } } function s() { - var I, y, S; + var I, A, h; if (a(), !t.showPreviewThumb || String(((I = t.asset) == null ? void 0 : I.kind) || "").toLowerCase() !== "video") return; - const d = n.value, u = (y = d == null ? void 0 : d.querySelector) == null ? void 0 : y.call(d, "video"); + const d = n.value, u = (A = d == null ? void 0 : d.querySelector) == null ? void 0 : A.call(d, "video"); if (!(!d || !u)) { c(u); try { i = _I(u, { variant: "preview", hostEl: d }); - } catch (Z) { - (S = console.debug) == null || S.call(console, Z); + } catch (S) { + (h = console.debug) == null || h.call(console, S); } } } - return cn(() => [t.asset, t.showPreviewThumb], () => { + return dn(() => [t.asset, t.showPreviewThumb], () => { a(); - }, { flush: "post" }), cn(o, () => { + }, { flush: "post" }), dn(o, () => { setTimeout(() => { s(); }, 0); @@ -38582,18 +38619,18 @@ const Tx = { class: "mjr-sidebar-preview" }, Bx = ["src"], Ux = ["src"], Kx = [" s(); }), xr(() => { a(); - }), (d, u) => (be(), Ce("div", Tx, [ - e.showPreviewThumb ? (be(), Ce("div", { + }), (d, u) => (be(), Ze("div", Tx, [ + e.showPreviewThumb ? (be(), Ze("div", { key: 0, ref_key: "previewContainerRef", ref: n, style: { width: "100%", "aspect-ratio": "1", background: "black", "border-radius": "8px", overflow: "hidden", display: "flex", "align-items": "center", "justify-content": "center", position: "relative" } }, [ - e.asset.kind === "image" ? (be(), Ce("img", { + e.asset.kind === "image" ? (be(), Ze("img", { key: 0, src: o.value, style: { "max-width": "100%", "max-height": "100%", "object-fit": "contain" } - }, null, 8, Bx)) : e.asset.kind === "video" ? (be(), Ce("video", { + }, null, 8, Kx)) : e.asset.kind === "video" ? (be(), Ze("video", { key: 1, src: o.value, muted: !0, @@ -38602,15 +38639,15 @@ const Tx = { class: "mjr-sidebar-preview" }, Bx = ["src"], Ux = ["src"], Kx = [" playsinline: "", preload: "metadata", style: { "max-width": "100%", "max-height": "100%", "object-fit": "contain" } - }, null, 8, Ux)) : e.asset.kind === "audio" ? (be(), Ce("audio", { + }, null, 8, Bx)) : e.asset.kind === "audio" ? (be(), Ze("audio", { key: 2, src: o.value, controls: "", preload: "metadata", style: { width: "92%", "max-width": "560px" } - }, null, 8, Kx)) : (be(), Ce("div", Dx, Ye(String(e.asset.kind || "PREVIEW").toUpperCase()), 1)) - ], 512)) : ft("", !0), - ie("div", Ex, Ye(l.value), 1) + }, null, 8, Ux)) : (be(), Ze("div", Dx, Ne(String(e.asset.kind || "PREVIEW").toUpperCase()), 1)) + ], 512)) : yt("", !0), + te("div", Hx, Ne(l.value), 1) ])); } }, qx = { @@ -38650,11 +38687,11 @@ const Tx = { class: "mjr-sidebar-preview" }, Bx = ["src"], Ux = ["src"], Kx = [" tooltip: "Image/video resolution in pixels" }), r.duration && r.duration > 0 && l.push({ label: "Duration", - value: kb(r.duration), + value: Xb(r.duration), tooltip: "Video duration" }), i(r)) { const d = PI(r); - d != null && l.push({ label: "FPS", value: BZ(d), tooltip: "Native frame rate" }); + d != null && l.push({ label: "FPS", value: KZ(d), tooltip: "Native frame rate" }); const u = QI(r, d); u != null && l.push({ label: "Length", @@ -38673,32 +38710,32 @@ const Tx = { class: "mjr-sidebar-preview" }, Bx = ["src"], Ux = ["src"], Kx = [" }); const c = r.generation_time || r.file_creation_time || r.mtime || r.created_at; if (c) { - const d = za(c), u = Ja(c); + const d = Ja(c), u = Ta(c); d && l.push({ label: "Date", value: d, tooltip: "File creation/generation date" }), u && l.push({ label: "Time", value: u, tooltip: "File creation/generation time" }); } return r.size && r.size > 0 && l.push({ label: "File Size", value: n(r.size), tooltip: "File size on disk" }), r.id != null && l.push({ label: "Asset ID", value: String(r.id), tooltip: "Internal database asset identifier" }), r.job_id && l.push({ label: "Job ID", value: String(r.job_id), tooltip: "Workflow execution job identifier (prompt_id)" }), l; }); - return (r, l) => o.value.length ? (be(), Ce("div", qx, [ - l[0] || (l[0] = ie("div", { style: { "font-size": "12px", "font-weight": "700", color: "#607d8b", "margin-bottom": "8px", "text-transform": "uppercase", "letter-spacing": "0.4px" } }, " File Info ", -1)), - ie("div", Px, [ - (be(!0), Ce(Nt, null, Cn(o.value, (a) => (be(), Ce("div", { + return (r, l) => o.value.length ? (be(), Ze("div", qx, [ + l[0] || (l[0] = te("div", { style: { "font-size": "12px", "font-weight": "700", color: "#607d8b", "margin-bottom": "8px", "text-transform": "uppercase", "letter-spacing": "0.4px" } }, " File Info ", -1)), + te("div", Px, [ + (be(!0), Ze(Nt, null, Zn(o.value, (a) => (be(), Ze("div", { key: a.label, style: { display: "flex", gap: "10px", "align-items": "flex-start", "justify-content": "space-between" } }, [ - ie("div", { + te("div", { title: a.tooltip || "", style: { "font-size": "12px", opacity: "0.68", "min-width": "92px" } - }, Ye(a.label), 9, Qx), - ie("div", { - style: Lt(a.valueStyle || "font-size: 12px; text-align: right; word-break: break-word"), + }, Ne(a.label), 9, Qx), + te("div", { + style: vt(a.valueStyle || "font-size: 12px; text-align: right; word-break: break-word"), title: String(a.value || "") - }, Ye(a.value), 13, _x) + }, Ne(a.value), 13, _x) ]))), 128)) ]) - ])) : ft("", !0); + ])) : yt("", !0); } }; -function Nm(e) { +function km(e) { if (!e || typeof e != "string") return null; const t = {}, n = e.split(/\nNegative prompt:\s*/i); if (n[0] && (t.prompt = n[0].trim()), n[1]) { @@ -38728,7 +38765,7 @@ function ap(e) { return !1; } } -function jc(e) { +function vc(e) { var o; if (!e || typeof e != "object") return null; const t = {}, i = (e.prompt && typeof e.prompt == "object" ? e.prompt : null) || (ap(e) ? e : null); @@ -38738,39 +38775,39 @@ function jc(e) { if (!l || typeof l != "object") continue; const a = l.inputs; if (!a || typeof a != "object") continue; - const c = String((l == null ? void 0 : l.class_type) || (l == null ? void 0 : l.type) || "").toLowerCase(), s = String((l == null ? void 0 : l.title) || ((o = l == null ? void 0 : l._meta) == null ? void 0 : o.title) || "").toLowerCase(), d = (Z, C) => { - if (t[Z] || typeof C != "string") return; - const g = C.trim(); - g && (/^[\d\s.,+-]+$/.test(g) || (t[Z] = g)); + const c = String((l == null ? void 0 : l.class_type) || (l == null ? void 0 : l.type) || "").toLowerCase(), s = String((l == null ? void 0 : l.title) || ((o = l == null ? void 0 : l._meta) == null ? void 0 : o.title) || "").toLowerCase(), d = (S, W) => { + if (t[S] || typeof W != "string") return; + const g = W.trim(); + g && (/^[\d\s.,+-]+$/.test(g) || (t[S] = g)); }; if ((c.includes("cliptextencode") || c.includes("clip_text_encode") || s.includes("clip text encode")) && typeof a.text == "string") { - const Z = s.includes("negative"), C = s.includes("positive") || s.includes("(prompt)") || s.includes("prompt"); - d(Z ? "negative_prompt" : "prompt", a.text); + const S = s.includes("negative"), W = s.includes("positive") || s.includes("(prompt)") || s.includes("prompt"); + d(S ? "negative_prompt" : "prompt", a.text); } if (d("negative_prompt", a.negative_prompt), d("negative_prompt", a.negative), !t.prompt && typeof a.text == "string") { - const Z = a.text.trim(); - (c.includes("prompt") || c.includes("encode") || c.includes("positive") || c.includes("negative") || s.includes("prompt") || s.includes("positive") || s.includes("negative")) && Z.length >= 12 && /[a-zA-Z]/.test(Z) && d("prompt", Z); + const S = a.text.trim(); + (c.includes("prompt") || c.includes("encode") || c.includes("positive") || c.includes("negative") || s.includes("prompt") || s.includes("positive") || s.includes("negative")) && S.length >= 12 && /[a-zA-Z]/.test(S) && d("prompt", S); } a.seed !== void 0 && t.seed === void 0 && (t.seed = a.seed), a.steps !== void 0 && t.steps === void 0 && (t.steps = a.steps), a.cfg !== void 0 && t.cfg === void 0 && (t.cfg = a.cfg), a.sampler_name && !t.sampler && (t.sampler = a.sampler_name), a.scheduler && !t.scheduler && (t.scheduler = a.scheduler), a.denoise !== void 0 && t.denoise === void 0 && (t.denoise = a.denoise), a.width !== void 0 && t.width === void 0 && (t.width = a.width), a.height !== void 0 && t.height === void 0 && (t.height = a.height); - const I = (Z, C) => { - if (t[Z] || typeof C != "string") return; - const g = C.trim(); - g && (t[Z] = g); - }, y = [ + const I = (S, W) => { + if (t[S] || typeof W != "string") return; + const g = W.trim(); + g && (t[S] = g); + }, A = [ a.ckpt_name, a.checkpoint, a.checkpoint_name, a.model_name, a.model ]; - for (const Z of y) - t.model || I("model", Z); + for (const S of A) + t.model || I("model", S); if (I("vae", a.vae_name || a.vae), I("clip", a.clip_name || a.clip), I("unet", a.unet_name || a.unet), I( "diffusion", a.diffusion_name || a.diffusion_model || a.diffusion ), c.includes("lora") || c.includes("loraloader")) { - const Z = a.lora_name || a.lora || a.name || null, C = a.strength_model ?? a.strength ?? a.weight ?? a.lora_strength ?? null; - Z && r.push({ name: Z, weight: C }); + const S = a.lora_name || a.lora || a.name || null, W = a.strength_model ?? a.strength ?? a.weight ?? a.lora_strength ?? null; + S && r.push({ name: S, weight: W }); } } r.length && (t.loras = r); @@ -38779,89 +38816,89 @@ function jc(e) { } const ej = /^(?:[a-z]:[\\/]|[\\/]{1,2}|\.{1,2}[\\/]|~[\\/]).+?[\\/][^\\/\n]+\.(?:png|jpe?g|webp|gif|bmp|tiff?|avif|heic|heif|apng|hdr|svg|mp4|webm|mov|mkv|avi|m4v|mp3|wav|flac|ogg|glb|gltf|obj|fbx|ply|stl|ckpt|safetensors|pt|pth|bin|gguf|json|ya?ml)$/i, tj = /^(?!.*[,;])(?!.*\b(?:cinematic|portrait|landscape|lighting|style|detailed|masterpiece|photo|render)\b).*(?:[\\/][^\\/\n]+){2,}\.(?:png|jpe?g|webp|gif|bmp|tiff?|avif|heic|heif|apng|hdr|svg|mp4|webm|mov|mkv|avi|m4v|mp3|wav|flac|ogg|glb|gltf|obj|fbx|ply|stl|ckpt|safetensors|pt|pth|bin|gguf|json|ya?ml)$/i; function cp(e) { - var t, n, i, o, r, l, a, c, s, d, u, I, y, S, Z, C, g, A, p, b, L, h, G, W, f, X, x, T, v, w, R, Y, F, N, V, k, K, z, B; + var t, n, i, o, r, l, a, c, s, d, u, I, A, h, S, W, g, y, p, b, L, C, G, Z, f, X, x, K, j, w, R, V, O, k, Y, N, U, z, T; if (!e) return null; if (typeof e == "object") { const J = e.geninfo || e.GenInfo || e.generation || null; if (J && typeof J == "object") { - const M = {}, j = ((t = J.positive) == null ? void 0 : t.value) ?? ((n = J.positive) == null ? void 0 : n.text) ?? null, O = ((i = J.negative) == null ? void 0 : i.value) ?? ((o = J.negative) == null ? void 0 : o.text) ?? null; - typeof j == "string" && j.trim() && (M.prompt = j), typeof O == "string" && O.trim() && (M.negative_prompt = O); + const M = {}, v = ((t = J.positive) == null ? void 0 : t.value) ?? ((n = J.positive) == null ? void 0 : n.text) ?? null, F = ((i = J.negative) == null ? void 0 : i.value) ?? ((o = J.negative) == null ? void 0 : o.text) ?? null; + typeof v == "string" && v.trim() && (M.prompt = v), typeof F == "string" && F.trim() && (M.negative_prompt = F); const D = ((r = J.checkpoint) == null ? void 0 : r.name) ?? J.checkpoint ?? null; typeof D == "string" && D.trim() && (M.model = D); const q = ((l = J.clip) == null ? void 0 : l.name) ?? J.clip ?? null; typeof q == "string" && q.trim() && (M.clip = q); const ee = ((a = J.vae) == null ? void 0 : a.name) ?? J.vae ?? null; typeof ee == "string" && ee.trim() && (M.vae = ee); - const ce = J.models; - ce && typeof ce == "object" && (M.models = ce); + const ae = J.models; + ae && typeof ae == "object" && (M.models = ae); const ue = Array.isArray(J.loras) ? J.loras : null; ue && (M.loras = ue); - const U = ((c = J.sampler) == null ? void 0 : c.name) ?? J.sampler ?? null; - typeof U == "string" && U.trim() && (M.sampler = U); + const B = ((c = J.sampler) == null ? void 0 : c.name) ?? J.sampler ?? null; + typeof B == "string" && B.trim() && (M.sampler = B); const Q = ((s = J.scheduler) == null ? void 0 : s.name) ?? J.scheduler ?? null; typeof Q == "string" && Q.trim() && (M.scheduler = Q); const _ = ((d = J.steps) == null ? void 0 : d.value) ?? J.steps ?? null; _ != null && (M.steps = _); const le = ((u = J.cfg) == null ? void 0 : u.value) ?? J.cfg ?? null; le != null && (M.cfg = le); - const de = ((I = J.seed) == null ? void 0 : I.value) ?? J.seed ?? null; - de != null && (M.seed = de); - const se = ((y = J.voice) == null ? void 0 : y.name) ?? ((S = J.voice) == null ? void 0 : S.value) ?? J.voice ?? null; - se != null && String(se).trim() && (M.voice = String(se).trim()); - const ge = ((Z = J.language) == null ? void 0 : Z.value) ?? J.language ?? null; + const ce = ((I = J.seed) == null ? void 0 : I.value) ?? J.seed ?? null; + ce != null && (M.seed = ce); + const de = ((A = J.voice) == null ? void 0 : A.name) ?? ((h = J.voice) == null ? void 0 : h.value) ?? J.voice ?? null; + de != null && String(de).trim() && (M.voice = String(de).trim()); + const ge = ((S = J.language) == null ? void 0 : S.value) ?? J.language ?? null; ge != null && String(ge).trim() && (M.language = String(ge).trim()); - const je = ((C = J.temperature) == null ? void 0 : C.value) ?? J.temperature ?? null; - je != null && (M.temperature = je); - const Se = ((g = J.top_k) == null ? void 0 : g.value) ?? J.top_k ?? null; - Se != null && (M.top_k = Se); - const ke = ((A = J.top_p) == null ? void 0 : A.value) ?? J.top_p ?? null; - ke != null && (M.top_p = ke); - const we = ((p = J.repetition_penalty) == null ? void 0 : p.value) ?? J.repetition_penalty ?? null; - we != null && (M.repetition_penalty = we); - const Je = ((b = J.max_new_tokens) == null ? void 0 : b.value) ?? J.max_new_tokens ?? null; - Je != null && (M.max_new_tokens = Je); - const $e = ((L = J.device) == null ? void 0 : L.value) ?? J.device ?? null; - $e != null && String($e).trim() && (M.device = String($e).trim()); - const qe = ((h = J.voice_preset) == null ? void 0 : h.value) ?? J.voice_preset ?? null; + const Le = ((W = J.temperature) == null ? void 0 : W.value) ?? J.temperature ?? null; + Le != null && (M.temperature = Le); + const xe = ((g = J.top_k) == null ? void 0 : g.value) ?? J.top_k ?? null; + xe != null && (M.top_k = xe); + const Xe = ((y = J.top_p) == null ? void 0 : y.value) ?? J.top_p ?? null; + Xe != null && (M.top_p = Xe); + const Me = ((p = J.repetition_penalty) == null ? void 0 : p.value) ?? J.repetition_penalty ?? null; + Me != null && (M.repetition_penalty = Me); + const Fe = ((b = J.max_new_tokens) == null ? void 0 : b.value) ?? J.max_new_tokens ?? null; + Fe != null && (M.max_new_tokens = Fe); + const it = ((L = J.device) == null ? void 0 : L.value) ?? J.device ?? null; + it != null && String(it).trim() && (M.device = String(it).trim()); + const qe = ((C = J.voice_preset) == null ? void 0 : C.value) ?? J.voice_preset ?? null; qe != null && String(qe).trim() && (M.voice_preset = String(qe).trim()); - const Ue = ((G = J.instruct) == null ? void 0 : G.value) ?? J.instruct ?? null; - Ue != null && String(Ue).trim() && (M.instruct = String(Ue).trim()); - const Te = ((W = J.dtype) == null ? void 0 : W.value) ?? J.dtype ?? null; - Te != null && String(Te).trim() && (M.dtype = String(Te).trim()); - const Oe = ((f = J.attn_implementation) == null ? void 0 : f.value) ?? J.attn_implementation ?? null; - Oe != null && String(Oe).trim() && (M.attn_implementation = String(Oe).trim()); - const pt = ((X = J.x_vector_only_mode) == null ? void 0 : X.value) ?? J.x_vector_only_mode ?? null; - pt != null && (M.x_vector_only_mode = pt); - const Me = ((x = J.use_torch_compile) == null ? void 0 : x.value) ?? J.use_torch_compile ?? null; - Me != null && (M.use_torch_compile = Me); - const Xt = ((T = J.use_cuda_graphs) == null ? void 0 : T.value) ?? J.use_cuda_graphs ?? null; - Xt != null && (M.use_cuda_graphs = Xt); - const Mt = ((v = J.compile_mode) == null ? void 0 : v.value) ?? J.compile_mode ?? null; - Mt != null && String(Mt).trim() && (M.compile_mode = String(Mt).trim()); + const Pe = ((G = J.instruct) == null ? void 0 : G.value) ?? J.instruct ?? null; + Pe != null && String(Pe).trim() && (M.instruct = String(Pe).trim()); + const Re = ((Z = J.dtype) == null ? void 0 : Z.value) ?? J.dtype ?? null; + Re != null && String(Re).trim() && (M.dtype = String(Re).trim()); + const rt = ((f = J.attn_implementation) == null ? void 0 : f.value) ?? J.attn_implementation ?? null; + rt != null && String(rt).trim() && (M.attn_implementation = String(rt).trim()); + const Te = ((X = J.x_vector_only_mode) == null ? void 0 : X.value) ?? J.x_vector_only_mode ?? null; + Te != null && (M.x_vector_only_mode = Te); + const qt = ((x = J.use_torch_compile) == null ? void 0 : x.value) ?? J.use_torch_compile ?? null; + qt != null && (M.use_torch_compile = qt); + const kt = ((K = J.use_cuda_graphs) == null ? void 0 : K.value) ?? J.use_cuda_graphs ?? null; + kt != null && (M.use_cuda_graphs = kt); + const we = ((j = J.compile_mode) == null ? void 0 : j.value) ?? J.compile_mode ?? null; + we != null && String(we).trim() && (M.compile_mode = String(we).trim()); const me = ((w = J.enable_chunking) == null ? void 0 : w.value) ?? J.enable_chunking ?? null; me != null && (M.enable_chunking = me); - const Pe = ((R = J.max_chars_per_chunk) == null ? void 0 : R.value) ?? J.max_chars_per_chunk ?? null; - Pe != null && (M.max_chars_per_chunk = Pe); - const Le = ((Y = J.chunk_combination_method) == null ? void 0 : Y.value) ?? J.chunk_combination_method ?? null; - Le != null && String(Le).trim() && (M.chunk_combination_method = String(Le).trim()); - const Ot = ((F = J.silence_between_chunks_ms) == null ? void 0 : F.value) ?? J.silence_between_chunks_ms ?? null; - Ot != null && (M.silence_between_chunks_ms = Ot); - const Xe = ((N = J.enable_audio_cache) == null ? void 0 : N.value) ?? J.enable_audio_cache ?? null; - Xe != null && (M.enable_audio_cache = Xe); - const Ee = ((V = J.batch_size) == null ? void 0 : V.value) ?? J.batch_size ?? null; + const He = ((R = J.max_chars_per_chunk) == null ? void 0 : R.value) ?? J.max_chars_per_chunk ?? null; + He != null && (M.max_chars_per_chunk = He); + const Ye = ((V = J.chunk_combination_method) == null ? void 0 : V.value) ?? J.chunk_combination_method ?? null; + Ye != null && String(Ye).trim() && (M.chunk_combination_method = String(Ye).trim()); + const Pt = ((O = J.silence_between_chunks_ms) == null ? void 0 : O.value) ?? J.silence_between_chunks_ms ?? null; + Pt != null && (M.silence_between_chunks_ms = Pt); + const ke = ((k = J.enable_audio_cache) == null ? void 0 : k.value) ?? J.enable_audio_cache ?? null; + ke != null && (M.enable_audio_cache = ke); + const Ee = ((Y = J.batch_size) == null ? void 0 : Y.value) ?? J.batch_size ?? null; Ee != null && (M.batch_size = Ee); - const Ke = ((k = J.denoise) == null ? void 0 : k.value) ?? J.denoise ?? null; + const Ke = ((N = J.denoise) == null ? void 0 : N.value) ?? J.denoise ?? null; Ke != null && (M.denoise = Ke); - const nt = ((K = J.clip_skip) == null ? void 0 : K.value) ?? J.clip_skip ?? J.clipSkip ?? null; - nt != null && (M.clip_skip = nt); - const ut = J.inputs; - Array.isArray(ut) && (M.inputs = ut); - const It = ((z = J.lyrics) == null ? void 0 : z.value) ?? J.lyrics ?? null; - typeof It == "string" && It.trim() && (M.lyrics = It); - const dt = ((B = J.lyrics_strength) == null ? void 0 : B.value) ?? J.lyrics_strength ?? null; - dt != null && (M.lyrics_strength = dt), Array.isArray(J.all_positive_prompts) && J.all_positive_prompts.length > 1 && (M.all_positive_prompts = J.all_positive_prompts), Array.isArray(J.all_negative_prompts) && J.all_negative_prompts.length > 1 && (M.all_negative_prompts = J.all_negative_prompts), Array.isArray(J.all_samplers) && J.all_samplers.length > 1 && (M.all_samplers = J.all_samplers), Array.isArray(J.chained_passes) && J.chained_passes.length > 1 && (M.chained_passes = J.chained_passes), Array.isArray(J.all_checkpoints) && J.all_checkpoints.length > 1 && (M.all_checkpoints = J.all_checkpoints); - const Re = J.size || null; - if (Re && typeof Re == "object" && (Re.width !== void 0 && (M.width = Re.width), Re.height !== void 0 && (M.height = Re.height)), J.engine && typeof J.engine == "object" && (M.engine = J.engine), Object.keys(M).length) return M; + const lt = ((U = J.clip_skip) == null ? void 0 : U.value) ?? J.clip_skip ?? J.clipSkip ?? null; + lt != null && (M.clip_skip = lt); + const wt = J.inputs; + Array.isArray(wt) && (M.inputs = wt); + const at = ((z = J.lyrics) == null ? void 0 : z.value) ?? J.lyrics ?? null; + typeof at == "string" && at.trim() && (M.lyrics = at); + const tt = ((T = J.lyrics_strength) == null ? void 0 : T.value) ?? J.lyrics_strength ?? null; + tt != null && (M.lyrics_strength = tt), Array.isArray(J.all_positive_prompts) && J.all_positive_prompts.length > 1 && (M.all_positive_prompts = J.all_positive_prompts), Array.isArray(J.all_negative_prompts) && J.all_negative_prompts.length > 1 && (M.all_negative_prompts = J.all_negative_prompts), Array.isArray(J.all_samplers) && J.all_samplers.length > 1 && (M.all_samplers = J.all_samplers), Array.isArray(J.chained_passes) && J.chained_passes.length > 1 && (M.chained_passes = J.chained_passes), Array.isArray(J.all_checkpoints) && J.all_checkpoints.length > 1 && (M.all_checkpoints = J.all_checkpoints); + const Oe = J.size || null; + if (Oe && typeof Oe == "object" && (Oe.width !== void 0 && (M.width = Oe.width), Oe.height !== void 0 && (M.height = Oe.height)), J.engine && typeof J.engine == "object" && (M.engine = J.engine), Object.keys(M).length) return M; } if ([ "prompt", @@ -38876,20 +38913,20 @@ function cp(e) { "width", "height" ].some((M) => Object.prototype.hasOwnProperty.call(e, M))) return e; - const $ = jc(e); + const $ = vc(e); if ($) return $; if (ap(e)) { - const M = jc({ prompt: e }); + const M = vc({ prompt: e }); if (M) return M; } - const E = e.parameters || e["PNG:Parameters"] || e["EXIF:UserComment"] || e.UserComment || e.ImageDescription || null; - if (typeof E == "string") { - const M = Nm(E); + const H = e.parameters || e["PNG:Parameters"] || e["EXIF:UserComment"] || e.UserComment || e.ImageDescription || null; + if (typeof H == "string") { + const M = km(H); if (M) return M; } - const oe = e.workflow || e.Workflow || e.comfy || e.comfyui || e.ComfyUI || null; - if (oe && typeof oe == "object") { - const M = jc(oe); + const ne = e.workflow || e.Workflow || e.comfy || e.comfyui || e.ComfyUI || null; + if (ne && typeof ne == "object") { + const M = vc(ne); if (M) return M; } return e; @@ -38897,12 +38934,12 @@ function cp(e) { if (typeof e == "string") { const J = e.trim(); if (!J) return null; - const P = Nm(J); + const P = km(J); if (P) return P; if (J.startsWith("{") && J.endsWith("}") || J.startsWith("[") && J.endsWith("]")) try { - const H = JSON.parse(J); - return cp(H); + const E = JSON.parse(J); + return cp(E); } catch { return null; } @@ -38967,7 +39004,7 @@ function sp(e) { const t = String((e == null ? void 0 : e.filename) || (e == null ? void 0 : e.name) || (e == null ? void 0 : e.filepath) || (e == null ? void 0 : e.path) || "").trim().toLowerCase(); return !t || !t.includes(".") ? "" : t.split(".").pop() || ""; } -function vc(e) { +function Lc(e) { return String((e == null ? void 0 : e.kind) || "").trim().toLowerCase() === "image" || String((e == null ? void 0 : e.mime) || (e == null ? void 0 : e.mimetype) || "").trim().toLowerCase().startsWith("image/") ? !0 : oj.has(sp(e)); } function rj(e) { @@ -38977,7 +39014,7 @@ function rj(e) { function lj() { var e; try { - const t = Xn(); + const t = kn(); return !!(((e = t == null ? void 0 : t.ai) == null ? void 0 : e.vectorSearchEnabled) ?? !0); } catch { return !0; @@ -38989,7 +39026,7 @@ function aj(e) { function cj(e) { return e >= 0.85 ? "Excellent" : e >= 0.7 ? "Good" : e >= 0.5 ? "Fair" : e >= 0.3 ? "Low" : "Very Low"; } -function Fm(e) { +function Om(e) { const t = String(e || "").trim(); if (!t) return ""; const n = []; @@ -39025,7 +39062,7 @@ function dj(e) { function xi(e) { return e == null || e === "" ? "-" : String(e); } -function Om(e, t) { +function Fm(e, t) { const n = String((e == null ? void 0 : e.pass_name) || "").trim(); if (n) return n; const i = Number(e == null ? void 0 : e.denoise); @@ -39046,11 +39083,11 @@ function mj(e) { function jo(e) { return e ? typeof e == "string" ? to(e) : typeof e == "object" ? to(e.name || e.value || "") : "" : ""; } -function Ur(e, t) { +function Br(e, t) { return t == null ? null : { label: e, value: t ? "on" : "off" }; } function gj(e) { - var g, A, p, b, L; + var g, y, p, b, L; const t = cp(uj(e)), n = { kind: "empty", title: "Generation", @@ -39063,7 +39100,7 @@ function gj(e) { showAlignment: !1, captionLabel: "Image Description", emptyCaptionText: "No image description yet.", - isImageAsset: vc(e), + isImageAsset: Lc(e), lyrics: "", modelFields: [], pipelineTabs: [], @@ -39078,12 +39115,12 @@ function gj(e) { inputFiles: [] }; if (!t || typeof t == "object" && Object.keys(t).length === 0 || !mj(t)) { - const h = ((g = e == null ? void 0 : e.metadata_raw) == null ? void 0 : g.geninfo_status) || (e == null ? void 0 : e.geninfo_status); - return h && typeof h == "object" && h.kind === "media_pipeline" ? { + const C = ((g = e == null ? void 0 : e.metadata_raw) == null ? void 0 : g.geninfo_status) || (e == null ? void 0 : e.geninfo_status); + return C && typeof C == "object" && C.kind === "media_pipeline" ? { ...n, kind: "media-only", mediaOnlyMessage: "This file looks like a media-only pipeline (e.g. LoadVideo/VideoCombine) and does not contain generation parameters." - } : vc(e) || rj(e) ? { + } : Lc(e) || rj(e) ? { ...n, kind: "caption-only", showAlignment: !1 @@ -39092,23 +39129,23 @@ function gj(e) { const i = t, o = Rm( typeof i.prompt == "string" ? i.prompt : null, typeof (i.negative_prompt || i.negativePrompt) == "string" ? i.negative_prompt || i.negativePrompt : null - ), r = Array.isArray(i.all_positive_prompts) && i.all_positive_prompts.length > 1 ? i.all_positive_prompts.map((h, G) => { + ), r = Array.isArray(i.all_positive_prompts) && i.all_positive_prompts.length > 1 ? i.all_positive_prompts.map((C, G) => { var f; - const W = Rm( - typeof h == "string" ? h : "", + const Z = Rm( + typeof C == "string" ? C : "", typeof ((f = i.all_negative_prompts) == null ? void 0 : f[G]) == "string" ? i.all_negative_prompts[G] : "" ); return { label: `Prompt ${G + 1}`, - positive: Wo(W.positive), - negative: Wo(W.negative) + positive: Wo(Z.positive), + negative: Wo(Z.negative) }; - }).filter((h) => h.positive) : [], l = [], a = i.models && typeof i.models == "object" ? i.models : null, c = Array.isArray(i.all_checkpoints) && i.all_checkpoints.length > 1 ? i.all_checkpoints : null; + }).filter((C) => C.positive) : [], l = [], a = i.models && typeof i.models == "object" ? i.models : null, c = Array.isArray(i.all_checkpoints) && i.all_checkpoints.length > 1 ? i.all_checkpoints : null; if (a) { if (c) - c.forEach((G, W) => { + c.forEach((G, Z) => { const f = jo(G); - f && l.push({ label: `Checkpoint ${W + 1}`, value: f }); + f && l.push({ label: `Checkpoint ${Z + 1}`, value: f }); }); else { const G = jo(a.checkpoint); @@ -39120,84 +39157,84 @@ function gj(e) { ["Upscaler", jo(a.upscaler)], ["CLIP", jo(a.clip)], ["VAE", jo(a.vae)] - ].forEach(([G, W]) => { - W && l.push({ label: G, value: W }); + ].forEach(([G, Z]) => { + Z && l.push({ label: G, value: Z }); }); } else (i.model || i.checkpoint) && l.push({ label: "Model", value: to(i.model || i.checkpoint) }); if (Array.isArray(i.loras) && i.loras.length > 0) { - const h = i.loras.map((G) => ij(G)).filter(Boolean).join(` + const C = i.loras.map((G) => ij(G)).filter(Boolean).join(` `); - h && l.push({ label: "LoRA", value: h }); + C && l.push({ label: "LoRA", value: C }); } !a && i.clip && l.push({ label: "CLIP", value: to(i.clip) }), !a && i.vae && l.push({ label: "VAE", value: to(i.vae) }), !a && i.unet && l.push({ label: "UNet", value: to(i.unet) }), !a && i.diffusion && l.push({ label: "Diffusion", value: to(i.diffusion) }); const s = []; (i.sampler || i.sampler_name) && s.push({ label: "Sampler", value: i.sampler || i.sampler_name }), i.steps && s.push({ label: "Steps", value: i.steps }), (i.cfg || i.cfg_scale) && s.push({ label: "CFG Scale", value: i.cfg || i.cfg_scale }), i.scheduler && s.push({ label: "Scheduler", value: i.scheduler }); let d = []; - Array.isArray(i.chained_passes) && i.chained_passes.length > 1 ? d = i.chained_passes.filter((h) => h && typeof h == "object").map((h, G) => ({ - label: Om(h, G), + Array.isArray(i.chained_passes) && i.chained_passes.length > 1 ? d = i.chained_passes.filter((C) => C && typeof C == "object").map((C, G) => ({ + label: Fm(C, G), fields: [ - { label: "Sampler", value: xi((h == null ? void 0 : h.sampler_name) || (h == null ? void 0 : h.sampler)) }, - { label: "Scheduler", value: xi(h == null ? void 0 : h.scheduler) }, - { label: "Steps", value: xi(h == null ? void 0 : h.steps) }, - { label: "CFG", value: xi(h == null ? void 0 : h.cfg) }, - { label: "Denoise", value: xi(h == null ? void 0 : h.denoise) }, - { label: "Seed", value: xi((h == null ? void 0 : h.seed_val) || (h == null ? void 0 : h.seed)) } + { label: "Sampler", value: xi((C == null ? void 0 : C.sampler_name) || (C == null ? void 0 : C.sampler)) }, + { label: "Scheduler", value: xi(C == null ? void 0 : C.scheduler) }, + { label: "Steps", value: xi(C == null ? void 0 : C.steps) }, + { label: "CFG", value: xi(C == null ? void 0 : C.cfg) }, + { label: "Denoise", value: xi(C == null ? void 0 : C.denoise) }, + { label: "Seed", value: xi((C == null ? void 0 : C.seed_val) || (C == null ? void 0 : C.seed)) } ] - })) : Array.isArray(i.all_samplers) && i.all_samplers.length > 1 && (d = i.all_samplers.filter((h) => h && typeof h == "object").map((h, G) => ({ - label: Om(h, G), + })) : Array.isArray(i.all_samplers) && i.all_samplers.length > 1 && (d = i.all_samplers.filter((C) => C && typeof C == "object").map((C, G) => ({ + label: Fm(C, G), fields: [ - { label: "Sampler", value: xi((h == null ? void 0 : h.sampler_name) || (h == null ? void 0 : h.sampler)) }, - { label: "Scheduler", value: xi(h == null ? void 0 : h.scheduler) }, - { label: "Steps", value: xi(h == null ? void 0 : h.steps) }, - { label: "CFG", value: xi(h == null ? void 0 : h.cfg) }, - { label: "Denoise", value: xi(h == null ? void 0 : h.denoise) }, - { label: "Seed", value: xi((h == null ? void 0 : h.seed_val) || (h == null ? void 0 : h.seed)) } + { label: "Sampler", value: xi((C == null ? void 0 : C.sampler_name) || (C == null ? void 0 : C.sampler)) }, + { label: "Scheduler", value: xi(C == null ? void 0 : C.scheduler) }, + { label: "Steps", value: xi(C == null ? void 0 : C.steps) }, + { label: "CFG", value: xi(C == null ? void 0 : C.cfg) }, + { label: "Denoise", value: xi(C == null ? void 0 : C.denoise) }, + { label: "Seed", value: xi((C == null ? void 0 : C.seed_val) || (C == null ? void 0 : C.seed)) } ] }))); const u = []; i.voice && u.push({ label: "Narrator Voice", value: i.voice }), i.language && u.push({ label: "Language", value: i.language }), i.top_k !== void 0 && i.top_k !== null && u.push({ label: "Top-k", value: i.top_k }), i.top_p !== void 0 && i.top_p !== null && u.push({ label: "Top-p", value: i.top_p }), i.temperature !== void 0 && i.temperature !== null && u.push({ label: "Temperature", value: i.temperature }), i.repetition_penalty !== void 0 && i.repetition_penalty !== null && u.push({ label: "Repetition Penalty", value: i.repetition_penalty }), i.max_new_tokens !== void 0 && i.max_new_tokens !== null && u.push({ label: "Max New Tokens", value: i.max_new_tokens }); const I = []; i.device && I.push({ label: "Device", value: i.device }), i.voice_preset && I.push({ label: "Voice Preset", value: i.voice_preset }), i.dtype && I.push({ label: "Dtype", value: i.dtype }), i.attn_implementation && I.push({ label: "Attention", value: i.attn_implementation }), i.compile_mode && I.push({ label: "Compile Mode", value: i.compile_mode }), [ - Ur("Torch Compile", i.use_torch_compile), - Ur("CUDA Graphs", i.use_cuda_graphs), - Ur("X-Vector Only", i.x_vector_only_mode) - ].filter(Boolean).forEach((h) => I.push(h)); - const y = []; + Br("Torch Compile", i.use_torch_compile), + Br("CUDA Graphs", i.use_cuda_graphs), + Br("X-Vector Only", i.x_vector_only_mode) + ].filter(Boolean).forEach((C) => I.push(C)); + const A = []; [ - Ur("Chunking", i.enable_chunking), + Br("Chunking", i.enable_chunking), i.max_chars_per_chunk !== void 0 && i.max_chars_per_chunk !== null ? { label: "Max Chars/Chunk", value: i.max_chars_per_chunk } : null, i.chunk_combination_method ? { label: "Chunk Method", value: i.chunk_combination_method } : null, i.silence_between_chunks_ms !== void 0 && i.silence_between_chunks_ms !== null ? { label: "Silence Between Chunks (ms)", value: i.silence_between_chunks_ms } : null, - Ur("Audio Cache", i.enable_audio_cache), + Br("Audio Cache", i.enable_audio_cache), i.batch_size !== void 0 && i.batch_size !== null ? { label: "Batch Size", value: i.batch_size } : null - ].filter(Boolean).forEach((h) => y.push(h)); + ].filter(Boolean).forEach((C) => A.push(C)); + const h = []; + i.lyrics_strength !== void 0 && i.lyrics_strength !== null && h.push({ label: "Lyrics Strength", value: i.lyrics_strength }); const S = []; - i.lyrics_strength !== void 0 && i.lyrics_strength !== null && S.push({ label: "Lyrics Strength", value: i.lyrics_strength }); - const Z = []; - (i.denoise || i.denoising) && Z.push({ label: "Denoise", value: i.denoise || i.denoising }), i.clip_skip && Z.push({ label: "Clip Skip", value: i.clip_skip }); - const C = Array.isArray(i.inputs) ? i.inputs.filter((h) => h && typeof h == "object" && h.filename).map((h, G) => ({ - id: `${h.filename}-${G}`, - filename: String(h.filename || "").trim(), - filepath: String(h.filepath || h.filename || "").trim(), - role: String(h.role || "").trim(), - roleLabel: String(h.role || "").trim().replace(/_/g, " "), - isVideo: String(h.type || "").toLowerCase() === "video" || /\.(mp4|mov|webm)$/i.test(String(h.filename || "")), - previewCandidates: sj(h) + (i.denoise || i.denoising) && S.push({ label: "Denoise", value: i.denoise || i.denoising }), i.clip_skip && S.push({ label: "Clip Skip", value: i.clip_skip }); + const W = Array.isArray(i.inputs) ? i.inputs.filter((C) => C && typeof C == "object" && C.filename).map((C, G) => ({ + id: `${C.filename}-${G}`, + filename: String(C.filename || "").trim(), + filepath: String(C.filepath || C.filename || "").trim(), + role: String(C.role || "").trim(), + roleLabel: String(C.role || "").trim().replace(/_/g, " "), + isVideo: String(C.type || "").toLowerCase() === "video" || /\.(mp4|mov|webm)$/i.test(String(C.filename || "")), + previewCandidates: sj(C) })) : []; return { ...n, kind: "full", metadata: i, - workflowType: String(((A = i == null ? void 0 : i.engine) == null ? void 0 : A.type) || "").trim(), + workflowType: String(((y = i == null ? void 0 : i.engine) == null ? void 0 : y.type) || "").trim(), isTruncated: !!((p = e == null ? void 0 : e.geninfo) != null && p._truncated || (b = e == null ? void 0 : e.metadata) != null && b._truncated || (L = e == null ? void 0 : e.prompt) != null && L._truncated), positivePrompt: r.length ? "" : String(o.positive || "").trim(), negativePrompt: r.length ? "" : String(o.negative || "").trim(), promptTabs: r, showAlignment: !!(e != null && e.id) && (!!String(o.positive || "").trim() || r.length > 0), - isImageAsset: vc(e), + isImageAsset: Lc(e), lyrics: String(i.lyrics || "").trim(), modelFields: l, pipelineTabs: d, @@ -39205,11 +39242,11 @@ function gj(e) { ttsFields: u, ttsEngineFields: I, ttsInstruction: String(i.instruct || "").trim(), - ttsRuntimeFields: y, - audioFields: S, + ttsRuntimeFields: A, + audioFields: h, seed: i.seed ?? null, - imageFields: Z, - inputFiles: C + imageFields: S, + inputFiles: W }; } const Ij = ["title"], bj = ["src"], pj = ["src"], yj = { @@ -39219,13 +39256,13 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = { key: 3, title: "Video file", style: { position: "absolute", color: "white", opacity: "0.7", "font-size": "16px", "pointer-events": "none" } -}, hj = { +}, Cj = { __name: "GenerationInputThumb", props: { inputFile: { type: Object, required: !0 } }, setup(e) { - const t = e, n = Ae(0), i = Ae(!1); + const t = e, n = We(0), i = We(!1); function o() { var u; return (Array.isArray((u = t.inputFile) == null ? void 0 : u.previewCandidates) ? t.inputFile.previewCandidates : [])[n.value] || ""; @@ -39236,45 +39273,45 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = { n.value < d.length - 1 && (n.value += 1); } async function l(d) { - var I, y, S, Z; + var I, A, h, S; (I = d == null ? void 0 : d.stopPropagation) == null || I.call(d); - const u = String(((y = t.inputFile) == null ? void 0 : y.filepath) || ((S = t.inputFile) == null ? void 0 : S.filename) || "").trim(); + const u = String(((A = t.inputFile) == null ? void 0 : A.filepath) || ((h = t.inputFile) == null ? void 0 : h.filename) || "").trim(); if (u) try { await navigator.clipboard.writeText(u), i.value = !0, setTimeout(() => { i.value = !1; }, 350); - } catch (C) { - (Z = console.debug) == null || Z.call(console, C); + } catch (W) { + (S = console.debug) == null || S.call(console, W); } } function a(d) { - var I, y; + var I, A; (I = d == null ? void 0 : d.stopPropagation) == null || I.call(d); const u = o(); if (dj(u)) try { window.open(u, "_blank", "noopener,noreferrer"); - } catch (S) { - (y = console.debug) == null || y.call(console, S); + } catch (h) { + (A = console.debug) == null || A.call(console, h); } } function c(d) { - var u, I, y, S; - (S = (I = (u = d.target) == null ? void 0 : u.play) == null ? void 0 : (y = I.call(u)).catch) == null || S.call(y, () => { + var u, I, A, h; + (h = (I = (u = d.target) == null ? void 0 : u.play) == null ? void 0 : (A = I.call(u)).catch) == null || h.call(A, () => { }); } function s(d) { - var u, I, y; + var u, I, A; try { (I = (u = d.target) == null ? void 0 : u.pause) == null || I.call(u); - } catch (S) { - (y = console.debug) == null || y.call(console, S); + } catch (h) { + (A = console.debug) == null || A.call(console, h); } } - return (d, u) => (be(), Ce("div", { + return (d, u) => (be(), Ze("div", { title: `${e.inputFile.filename} (click to copy, double-click to open in new tab)`, - style: Lt({ + style: vt({ width: "64px", height: "64px", background: "#222", @@ -39291,7 +39328,7 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = { onClick: l, onDblclick: a }, [ - e.inputFile.isVideo ? (be(), Ce("video", { + e.inputFile.isVideo ? (be(), Ze("video", { key: 0, src: o(), muted: "", @@ -39302,16 +39339,16 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = { onError: r, onMouseover: c, onMouseout: s - }, null, 40, bj)) : (be(), Ce("img", { + }, null, 40, bj)) : (be(), Ze("img", { key: 1, src: o(), style: { width: "100%", height: "100%", "object-fit": "cover" }, onError: r }, null, 40, pj)), - e.inputFile.role && e.inputFile.role !== "secondary" ? (be(), Ce("div", yj, Ye(e.inputFile.roleLabel), 1)) : e.inputFile.isVideo ? (be(), Ce("div", fj, " ▶ ")) : ft("", !0) + e.inputFile.role && e.inputFile.role !== "secondary" ? (be(), Ze("div", yj, Ne(e.inputFile.roleLabel), 1)) : e.inputFile.isVideo ? (be(), Ze("div", fj, " ▶ ")) : yt("", !0) ], 44, Ij)); } -}, Cj = { +}, hj = { key: 0, style: { display: "flex", "flex-direction": "column", gap: "12px" } }, Zj = { @@ -39329,16 +39366,16 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = { fontSize: "11px", color: "var(--fg-color, #ccc)" } -}, Aj = ["title"], Wj = { style: { "font-size": "12px", color: "var(--fg-color, rgba(255,255,255,0.9))", "line-height": "1.5", "white-space": "pre-wrap", "word-break": "break-word" } }, wj = { style: { "font-size": "11px", "font-weight": "600", color: "#4CAF50", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "10px" } }, Mj = { style: { display: "flex", "flex-wrap": "wrap", gap: "6px", "margin-bottom": "10px" } }, Sj = ["onClick"], Gj = ["onClick"], xj = ["onClick"], jj = { style: { display: "flex", "align-items": "center", gap: "10px" } }, vj = { style: { flex: "1", height: "8px", background: "rgba(255,255,255,0.1)", "border-radius": "4px", overflow: "hidden" } }, Lj = { +}, Aj = ["title"], Wj = { style: { "font-size": "12px", color: "var(--fg-color, rgba(255,255,255,0.9))", "line-height": "1.5", "white-space": "pre-wrap", "word-break": "break-word" } }, wj = { style: { "font-size": "11px", "font-weight": "600", color: "#4CAF50", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "10px" } }, Mj = { style: { display: "flex", "flex-wrap": "wrap", gap: "6px", "margin-bottom": "10px" } }, Gj = ["onClick"], Sj = ["onClick"], xj = ["onClick"], jj = { style: { display: "flex", "align-items": "center", gap: "10px" } }, vj = { style: { flex: "1", height: "8px", background: "rgba(255,255,255,0.1)", "border-radius": "4px", overflow: "hidden" } }, Lj = { key: 0, style: { "font-size": "10px", color: "rgba(255,255,255,0.65)", border: "1px dashed rgba(255,255,255,0.25)", "border-radius": "4px", padding: "6px 8px", background: "rgba(255,255,255,0.04)" } -}, Vj = { style: { "font-size": "10px", "font-weight": "600", color: "rgba(0, 188, 212, 0.75)", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-top": "8px", display: "flex", "align-items": "center", "justify-content": "space-between", gap: "8px" } }, Yj = { title: "AI caption generated by Florence-2" }, kj = { style: { display: "flex", "align-items": "center", gap: "6px" } }, Xj = ["disabled"], Nj = ["disabled"], Rj = ["title"], Fj = { style: { "font-size": "12px", color: "var(--fg-color, rgba(255,255,255,0.9))", "line-height": "1.5", "white-space": "pre-wrap", "word-break": "break-word" } }, Oj = { style: { display: "flex", "flex-wrap": "wrap", gap: "6px", "margin-bottom": "10px" } }, zj = ["onClick"], Jj = { style: { "font-size": "10px", "font-weight": "600", color: "rgba(255,255,255,0.6)", "text-transform": "uppercase", "letter-spacing": "0.4px" } }, Tj = ["onClick"], Bj = { style: { display: "grid", "grid-template-columns": "auto 1fr", gap: "8px 12px", "align-items": "start" } }, Uj = ["title"], Kj = ["title", "onClick"], Dj = ["title"], Ej = ["title"], Hj = { style: { display: "flex", gap: "8px", "flex-wrap": "wrap" } }, qj = { +}, Yj = { style: { "font-size": "10px", "font-weight": "600", color: "rgba(0, 188, 212, 0.75)", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-top": "8px", display: "flex", "align-items": "center", "justify-content": "space-between", gap: "8px" } }, Vj = { title: "AI caption generated by Florence-2" }, Xj = { style: { display: "flex", "align-items": "center", gap: "6px" } }, Nj = ["disabled"], kj = ["disabled"], Rj = ["title"], Oj = { style: { "font-size": "12px", color: "var(--fg-color, rgba(255,255,255,0.9))", "line-height": "1.5", "white-space": "pre-wrap", "word-break": "break-word" } }, Fj = { style: { display: "flex", "flex-wrap": "wrap", gap: "6px", "margin-bottom": "10px" } }, zj = ["onClick"], Jj = { style: { "font-size": "10px", "font-weight": "600", color: "rgba(255,255,255,0.6)", "text-transform": "uppercase", "letter-spacing": "0.4px" } }, Tj = ["onClick"], Kj = { style: { display: "grid", "grid-template-columns": "auto 1fr", gap: "8px 12px", "align-items": "start" } }, Bj = ["title"], Uj = ["title", "onClick"], Dj = ["title"], Hj = ["title"], Ej = { style: { display: "flex", gap: "8px", "flex-wrap": "wrap" } }, qj = { __name: "SidebarGenerationSection", props: { asset: { type: Object, required: !0 } }, setup(e) { - const t = e, n = Ae(0), i = Ae(0), o = Ae(""), r = Ae("Copy"), l = Ae("Generate"), a = Ae(!1), c = Ae(d()); + const t = e, n = We(0), i = We(0), o = We(""), r = We("Copy"), l = We("Generate"), a = We(!1), c = We(d()); let s = 0; function d() { return { @@ -39353,23 +39390,23 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = { aiStatusText: "AI features are disabled (enable vector search env var)." }; } - function u(T, v) { - const w = String(T || "").trim().replace(/^#/, ""); - if (!/^[0-9a-fA-F]{6}$/.test(w)) return `rgba(255,255,255,${v})`; - const R = Number.parseInt(w.slice(0, 2), 16), Y = Number.parseInt(w.slice(2, 4), 16), F = Number.parseInt(w.slice(4, 6), 16); - return `rgba(${R}, ${Y}, ${F}, ${v})`; + function u(K, j) { + const w = String(K || "").trim().replace(/^#/, ""); + if (!/^[0-9a-fA-F]{6}$/.test(w)) return `rgba(255,255,255,${j})`; + const R = Number.parseInt(w.slice(0, 2), 16), V = Number.parseInt(w.slice(2, 4), 16), O = Number.parseInt(w.slice(4, 6), 16); + return `rgba(${R}, ${V}, ${O}, ${j})`; } - function I(T, { emphasis: v = !1, startAlpha: w = 0.16, endAlpha: R = 0.08 } = {}) { + function I(K, { emphasis: j = !1, startAlpha: w = 0.16, endAlpha: R = 0.08 } = {}) { return { - background: v ? `linear-gradient(135deg, ${u(T, w)} 0%, ${u(T, R)} 100%)` : "var(--comfy-menu-bg, rgba(0,0,0,0.3))", - borderLeft: `3px solid ${T}`, - border: v ? `1px solid ${u(T, 0.45)}` : "1px solid var(--border-color, rgba(255,255,255,0.12))", - boxShadow: v ? `0 0 0 1px ${u(T, 0.15)} inset` : "none", + background: j ? `linear-gradient(135deg, ${u(K, w)} 0%, ${u(K, R)} 100%)` : "var(--comfy-menu-bg, rgba(0,0,0,0.3))", + borderLeft: `3px solid ${K}`, + border: j ? `1px solid ${u(K, 0.45)}` : "1px solid var(--border-color, rgba(255,255,255,0.12))", + boxShadow: j ? `0 0 0 1px ${u(K, 0.15)} inset` : "none", borderRadius: "6px", padding: "12px" }; } - function y() { + function A() { return { background: "linear-gradient(135deg, rgba(233, 30, 99, 0.15) 0%, rgba(156, 39, 176, 0.15) 100%)", border: "2px solid #E91E63", @@ -39381,78 +39418,78 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = { gap: "12px" }; } - const S = ze(() => gj(t.asset)), Z = ze(() => lj()), C = ze( - () => S.value.kind === "full" || S.value.kind === "caption-only" + const h = ze(() => gj(t.asset)), S = ze(() => lj()), W = ze( + () => h.value.kind === "full" || h.value.kind === "caption-only" ), g = ze( - () => Fm(o.value) || S.value.emptyCaptionText - ), A = ze( + () => Om(o.value) || h.value.emptyCaptionText + ), y = ze( () => { - var T; - return Z.value && S.value.isImageAsset && !!((T = t.asset) != null && T.id); + var K; + return S.value && h.value.isImageAsset && !!((K = t.asset) != null && K.id); } ), p = ze( - () => Z.value && !!Fm(g.value) && g.value !== S.value.emptyCaptionText + () => S.value && !!Om(g.value) && g.value !== h.value.emptyCaptionText ), b = ze(() => { - const T = []; - return S.value.modelFields.length && T.push({ + const K = []; + return h.value.modelFields.length && K.push({ key: "model", title: "Model & LoRA", accent: "#9C27B0", emphasis: !0, - fields: S.value.modelFields - }), !S.value.pipelineTabs.length && S.value.samplingFields.length && T.push({ + fields: h.value.modelFields + }), !h.value.pipelineTabs.length && h.value.samplingFields.length && K.push({ key: "sampling", title: "Sampling", accent: "#FF9800", emphasis: !0, - fields: S.value.samplingFields - }), (S.value.ttsFields.length || S.value.workflowType.toLowerCase() === "tts") && T.push({ + fields: h.value.samplingFields + }), (h.value.ttsFields.length || h.value.workflowType.toLowerCase() === "tts") && K.push({ key: "tts", title: "TTS", accent: "#26A69A", emphasis: !0, - fields: S.value.ttsFields - }), S.value.ttsEngineFields.length && T.push({ + fields: h.value.ttsFields + }), h.value.ttsEngineFields.length && K.push({ key: "tts-engine", title: "TTS Engine", accent: "#00897B", emphasis: !1, - fields: S.value.ttsEngineFields - }), S.value.ttsRuntimeFields.length && T.push({ + fields: h.value.ttsEngineFields + }), h.value.ttsRuntimeFields.length && K.push({ key: "tts-runtime", title: "TTS Runtime", accent: "#00796B", emphasis: !1, - fields: S.value.ttsRuntimeFields - }), S.value.audioFields.length && T.push({ + fields: h.value.ttsRuntimeFields + }), h.value.audioFields.length && K.push({ key: "audio", title: "Audio", accent: "#00BCD4", emphasis: !1, - fields: S.value.audioFields - }), S.value.imageFields.length && T.push({ + fields: h.value.audioFields + }), h.value.imageFields.length && K.push({ key: "image", title: "Image", accent: "#2196F3", emphasis: !1, - fields: S.value.imageFields - }), T; + fields: h.value.imageFields + }), K; }); - function L(T, v, w = 450) { - if (!T) return; - const R = T.style.background; - T.style.background = v, setTimeout(() => { - T.style.background = R || ""; + function L(K, j, w = 450) { + if (!K) return; + const R = K.style.background; + K.style.background = j, setTimeout(() => { + K.style.background = R || ""; }, w); } - async function h(T, v = null, w = "rgba(76, 175, 80, 0.35)") { - var Y; - const R = String(T ?? "").trim(); + async function C(K, j = null, w = "rgba(76, 175, 80, 0.35)") { + var V; + const R = String(K ?? "").trim(); if (!(!R || R === "-")) try { - await navigator.clipboard.writeText(R), L(v, w); - } catch (F) { - (Y = console.debug) == null || Y.call(console, F); + await navigator.clipboard.writeText(R), L(j, w); + } catch (O) { + (V = console.debug) == null || V.call(console, O); } } function G() { @@ -39468,31 +39505,31 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = { aiStatusText: "AI features are disabled in settings." }; } - function W() { + function Z() { c.value = d(); } async function f() { - var v, w; + var j, w; s += 1; - const T = s; - if (!S.value.showAlignment || !((v = t.asset) != null && v.id)) { - W(); + const K = s; + if (!h.value.showAlignment || !((j = t.asset) != null && j.id)) { + Z(); return; } - if (!Z.value) { + if (!S.value) { G(); return; } - W(); + Z(); try { const R = await Pf(t.asset.id); - if (T !== s) return; + if (K !== s) return; if (!(R != null && R.ok) && (String((R == null ? void 0 : R.code) || "").toUpperCase() === "SERVICE_UNAVAILABLE" || /vector search is not enabled/i.test(String((R == null ? void 0 : R.error) || "")))) { G(); return; } - const F = R != null && R.ok && R.data != null ? Number(R.data) : null; - if (!Number.isFinite(F)) { + const O = R != null && R.ok && R.data != null ? Number(R.data) : null; + if (!Number.isFinite(O)) { c.value = { scoreText: "N/A", scoreColor: "#888", @@ -39506,20 +39543,20 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = { }; return; } - const N = Math.round(F * 100), V = aj(F); + const k = Math.round(O * 100), Y = aj(O); c.value = { - scoreText: `${N}%`, - scoreColor: V, - qualityText: cj(F), - qualityColor: V, - qualityBackground: `${V}33`, - fillWidth: `${N}%`, - fillColor: V, + scoreText: `${k}%`, + scoreColor: Y, + qualityText: cj(O), + qualityColor: Y, + qualityBackground: `${Y}33`, + fillWidth: `${k}%`, + fillColor: Y, aiStatusVisible: !1, aiStatusText: "" }; } catch (R) { - if ((w = console.debug) == null || w.call(console, R), T !== s) return; + if ((w = console.debug) == null || w.call(console, R), K !== s) return; c.value = { scoreText: "-", scoreColor: "#888", @@ -39534,79 +39571,79 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = { } } async function X() { - var T; - if (!(!A.value || a.value)) { + var K; + if (!(!y.value || a.value)) { a.value = !0, l.value = "Generating..."; try { - const v = await Qf(t.asset.id); - v != null && v.ok && (o.value = String((v == null ? void 0 : v.data) || "").trim()); - } catch (v) { - (T = console.debug) == null || T.call(console, v); + const j = await Qf(t.asset.id); + j != null && j.ok && (o.value = String((j == null ? void 0 : j.data) || "").trim()); + } catch (j) { + (K = console.debug) == null || K.call(console, j); } finally { a.value = !1, l.value = "Generate"; } } } async function x() { - var T; + var K; if (p.value) try { await navigator.clipboard.writeText(g.value), r.value = "Copied!", setTimeout(() => { r.value = "Copy"; }, 900); - } catch (v) { - (T = console.debug) == null || T.call(console, v); + } catch (j) { + (K = console.debug) == null || K.call(console, j); } } - return cn( + return dn( () => t.asset, () => { - var T; - n.value = 0, i.value = 0, o.value = String(((T = t.asset) == null ? void 0 : T.enhanced_caption) || "").trim(), r.value = "Copy", l.value = "Generate"; + var K; + n.value = 0, i.value = 0, o.value = String(((K = t.asset) == null ? void 0 : K.enhanced_caption) || "").trim(), r.value = "Copy", l.value = "Generate"; }, { immediate: !0 } - ), cn( + ), dn( () => { - var T; - return [(T = t.asset) == null ? void 0 : T.id, S.value.kind, S.value.showAlignment, Z.value]; + var K; + return [(K = t.asset) == null ? void 0 : K.id, h.value.kind, h.value.showAlignment, S.value]; }, () => { f(); }, { immediate: !0 } - ), (T, v) => S.value.kind !== "empty" ? (be(), Ce("div", Cj, [ - S.value.workflowType ? (be(), Ce("div", Zj, [ - v[4] || (v[4] = ie("span", { style: { opacity: "0.85" } }, "Workflow Type", -1)), - ie("span", { - title: `Workflow engine: ${S.value.workflowType}`, + ), (K, j) => h.value.kind !== "empty" ? (be(), Ze("div", hj, [ + h.value.workflowType ? (be(), Ze("div", Zj, [ + j[4] || (j[4] = te("span", { style: { opacity: "0.85" } }, "Workflow Type", -1)), + te("span", { + title: `Workflow engine: ${h.value.workflowType}`, style: { background: "#2196F3", color: "white", padding: "2px 6px", "border-radius": "3px", "font-weight": "bold", "font-size": "10px" } - }, Ye(S.value.workflowType), 9, Aj) - ])) : ft("", !0), - S.value.isTruncated ? (be(), Ce("div", { + }, Ne(h.value.workflowType), 9, Aj) + ])) : yt("", !0), + h.value.isTruncated ? (be(), Ze("div", { key: 1, - style: Lt(I("#FF9800", { emphasis: !0, startAlpha: 0.12, endAlpha: 0.08 })) - }, [...v[5] || (v[5] = [ - ie("div", { style: { "font-size": "11px", "font-weight": "600", color: "#FF9800", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "8px" } }, " Metadata Truncated ", -1), - ie("div", { style: { "font-size": "12px", color: "var(--fg-color, rgba(255,255,255,0.9))", "line-height": "1.5", "white-space": "pre-wrap", "word-break": "break-word" } }, " Generation data is incomplete because it exceeded the size limit. ", -1) - ])], 4)) : ft("", !0), - S.value.kind === "media-only" ? (be(), Ce("div", { + style: vt(I("#FF9800", { emphasis: !0, startAlpha: 0.12, endAlpha: 0.08 })) + }, [...j[5] || (j[5] = [ + te("div", { style: { "font-size": "11px", "font-weight": "600", color: "#FF9800", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "8px" } }, " Metadata Truncated ", -1), + te("div", { style: { "font-size": "12px", color: "var(--fg-color, rgba(255,255,255,0.9))", "line-height": "1.5", "white-space": "pre-wrap", "word-break": "break-word" } }, " Generation data is incomplete because it exceeded the size limit. ", -1) + ])], 4)) : yt("", !0), + h.value.kind === "media-only" ? (be(), Ze("div", { key: 2, - style: Lt(I("#9E9E9E", { emphasis: !0, startAlpha: 0.1, endAlpha: 0.06 })) + style: vt(I("#9E9E9E", { emphasis: !0, startAlpha: 0.1, endAlpha: 0.06 })) }, [ - v[6] || (v[6] = ie("div", { style: { "font-size": "11px", "font-weight": "600", color: "#9E9E9E", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "8px" } }, " Generation Data ", -1)), - ie("div", Wj, Ye(S.value.mediaOnlyMessage), 1) - ], 4)) : ft("", !0), - S.value.kind === "full" ? (be(), Ce(Nt, { key: 3 }, [ - S.value.promptTabs.length ? (be(), Ce("div", { + j[6] || (j[6] = te("div", { style: { "font-size": "11px", "font-weight": "600", color: "#9E9E9E", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "8px" } }, " Generation Data ", -1)), + te("div", Wj, Ne(h.value.mediaOnlyMessage), 1) + ], 4)) : yt("", !0), + h.value.kind === "full" ? (be(), Ze(Nt, { key: 3 }, [ + h.value.promptTabs.length ? (be(), Ze("div", { key: 0, - style: Lt(I("#4CAF50", { emphasis: !0, startAlpha: 0.16, endAlpha: 0.1 })) + style: vt(I("#4CAF50", { emphasis: !0, startAlpha: 0.16, endAlpha: 0.1 })) }, [ - ie("div", wj, " Prompt Pipeline (" + Ye(S.value.promptTabs.length) + " variants) ", 1), - ie("div", Mj, [ - (be(!0), Ce(Nt, null, Cn(S.value.promptTabs, (w, R) => (be(), Ce("button", { + te("div", wj, " Prompt Pipeline (" + Ne(h.value.promptTabs.length) + " variants) ", 1), + te("div", Mj, [ + (be(!0), Ze(Nt, null, Zn(h.value.promptTabs, (w, R) => (be(), Ze("button", { key: w.label, type: "button", - style: Lt({ + style: vt({ appearance: "none", border: n.value === R ? "1px solid #4CAF50" : "1px solid var(--border-color, rgba(255,255,255,0.12))", borderRadius: "999px", @@ -39618,68 +39655,68 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = { fontWeight: n.value === R ? "700" : "500", boxShadow: n.value === R ? "0 0 0 1px #4CAF5055 inset" : "none" }), - onClick: (Y) => n.value = R - }, Ye(w.label), 13, Sj))), 128)) + onClick: (V) => n.value = R + }, Ne(w.label), 13, Gj))), 128)) ]), - (be(!0), Ce(Nt, null, Cn(S.value.promptTabs, (w, R) => Ko((be(), Ce("div", { + (be(!0), Ze(Nt, null, Zn(h.value.promptTabs, (w, R) => Uo((be(), Ze("div", { key: `${w.label}-panel`, style: { display: "flex", "flex-direction": "column", gap: "8px", border: "1px solid rgba(76, 175, 80, 0.35)", "border-radius": "6px", background: "linear-gradient(135deg, rgba(76, 175, 80, 0.12) 0%, rgba(33, 150, 243, 0.08) 100%)", "box-shadow": "0 0 0 1px rgba(76, 175, 80, 0.12) inset", padding: "10px" } }, [ - v[8] || (v[8] = ie("div", { style: { "font-size": "10px", "font-weight": "700", color: "#4CAF50", "letter-spacing": "0.4px" } }, " POSITIVE ", -1)), - ie("div", { + j[8] || (j[8] = te("div", { style: { "font-size": "10px", "font-weight": "700", color: "#4CAF50", "letter-spacing": "0.4px" } }, " POSITIVE ", -1)), + te("div", { style: { "font-size": "12px", color: "var(--fg-color, #ddd)", "white-space": "pre-wrap", "line-height": "1.35", cursor: "pointer" }, - onClick: (Y) => h(w.positive, Y.currentTarget) - }, Ye(w.positive), 9, Gj), - w.negative ? (be(), Ce(Nt, { key: 0 }, [ - v[7] || (v[7] = ie("div", { style: { "font-size": "10px", "font-weight": "700", color: "#F44336", "letter-spacing": "0.4px", "margin-top": "4px" } }, " NEGATIVE ", -1)), - ie("div", { + onClick: (V) => C(w.positive, V.currentTarget) + }, Ne(w.positive), 9, Sj), + w.negative ? (be(), Ze(Nt, { key: 0 }, [ + j[7] || (j[7] = te("div", { style: { "font-size": "10px", "font-weight": "700", color: "#F44336", "letter-spacing": "0.4px", "margin-top": "4px" } }, " NEGATIVE ", -1)), + te("div", { style: { "font-size": "12px", color: "var(--fg-color, #ddd)", "white-space": "pre-wrap", "line-height": "1.35", cursor: "pointer" }, - onClick: (Y) => h(w.negative, Y.currentTarget) - }, Ye(w.negative), 9, xj) - ], 64)) : ft("", !0) + onClick: (V) => C(w.negative, V.currentTarget) + }, Ne(w.negative), 9, xj) + ], 64)) : yt("", !0) ])), [ [yr, n.value === R] ])), 128)) - ], 4)) : S.value.positivePrompt ? (be(), Ce("div", { + ], 4)) : h.value.positivePrompt ? (be(), Ze("div", { key: 1, - style: Lt(I("#4CAF50", { emphasis: !0, startAlpha: 0.16, endAlpha: 0.1 })) + style: vt(I("#4CAF50", { emphasis: !0, startAlpha: 0.16, endAlpha: 0.1 })) }, [ - v[9] || (v[9] = ie("div", { style: { display: "flex", "justify-content": "space-between", "align-items": "center", "font-size": "11px", "font-weight": "600", color: "#4CAF50", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "8px" } }, [ - ie("span", null, "Positive Prompt") + j[9] || (j[9] = te("div", { style: { display: "flex", "justify-content": "space-between", "align-items": "center", "font-size": "11px", "font-weight": "600", color: "#4CAF50", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "8px" } }, [ + te("span", null, "Positive Prompt") ], -1)), - ie("div", { + te("div", { title: "Click to copy", style: { "font-size": "12px", color: "var(--fg-color, rgba(255,255,255,0.9))", "line-height": "1.5", "white-space": "pre-wrap", "word-break": "break-word", cursor: "pointer" }, - onClick: v[0] || (v[0] = (w) => h(S.value.positivePrompt, w.currentTarget)) - }, Ye(S.value.positivePrompt), 1) - ], 4)) : ft("", !0), - !S.value.promptTabs.length && S.value.negativePrompt ? (be(), Ce("div", { + onClick: j[0] || (j[0] = (w) => C(h.value.positivePrompt, w.currentTarget)) + }, Ne(h.value.positivePrompt), 1) + ], 4)) : yt("", !0), + !h.value.promptTabs.length && h.value.negativePrompt ? (be(), Ze("div", { key: 2, - style: Lt(I("#F44336", { emphasis: !0, startAlpha: 0.16, endAlpha: 0.1 })) + style: vt(I("#F44336", { emphasis: !0, startAlpha: 0.16, endAlpha: 0.1 })) }, [ - v[10] || (v[10] = ie("div", { style: { display: "flex", "justify-content": "space-between", "align-items": "center", "font-size": "11px", "font-weight": "600", color: "#F44336", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "8px" } }, [ - ie("span", null, "Negative Prompt") + j[10] || (j[10] = te("div", { style: { display: "flex", "justify-content": "space-between", "align-items": "center", "font-size": "11px", "font-weight": "600", color: "#F44336", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "8px" } }, [ + te("span", null, "Negative Prompt") ], -1)), - ie("div", { + te("div", { title: "Click to copy", style: { "font-size": "12px", color: "var(--fg-color, rgba(255,255,255,0.9))", "line-height": "1.5", "white-space": "pre-wrap", "word-break": "break-word", cursor: "pointer" }, - onClick: v[1] || (v[1] = (w) => h(S.value.negativePrompt, w.currentTarget)) - }, Ye(S.value.negativePrompt), 1) - ], 4)) : ft("", !0) - ], 64)) : ft("", !0), - C.value ? (be(), Ce("div", { + onClick: j[1] || (j[1] = (w) => C(h.value.negativePrompt, w.currentTarget)) + }, Ne(h.value.negativePrompt), 1) + ], 4)) : yt("", !0) + ], 64)) : yt("", !0), + W.value ? (be(), Ze("div", { key: 4, style: { background: "linear-gradient(135deg, rgba(0, 188, 212, 0.14) 0%, rgba(33, 150, 243, 0.10) 100%)", border: "1px solid rgba(0, 188, 212, 0.40)", "border-radius": "6px", padding: "12px", display: "flex", "flex-direction": "column", gap: "10px" }, - class: Zn({ "mjr-ai-disabled-block": !Z.value }) + class: An({ "mjr-ai-disabled-block": !S.value }) }, [ - S.value.showAlignment ? (be(), Ce(Nt, { key: 0 }, [ - v[11] || (v[11] = ie("div", { style: { "font-size": "11px", "font-weight": "600", color: "#00BCD4", "text-transform": "uppercase", "letter-spacing": "0.5px", display: "flex", "align-items": "center", "justify-content": "space-between" } }, [ - ie("span", { title: "How closely the generated image matches the prompt (SigLIP2 score)" }, " Prompt Alignment ") + h.value.showAlignment ? (be(), Ze(Nt, { key: 0 }, [ + j[11] || (j[11] = te("div", { style: { "font-size": "11px", "font-weight": "600", color: "#00BCD4", "text-transform": "uppercase", "letter-spacing": "0.5px", display: "flex", "align-items": "center", "justify-content": "space-between" } }, [ + te("span", { title: "How closely the generated image matches the prompt (SigLIP2 score)" }, " Prompt Alignment ") ], -1)), - ie("div", jj, [ - ie("div", vj, [ - ie("div", { - style: Lt({ + te("div", jj, [ + te("div", vj, [ + te("div", { + style: vt({ height: "100%", width: c.value.fillWidth, background: c.value.fillColor, @@ -39688,8 +39725,8 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = { }) }, null, 4) ]), - ie("span", { - style: Lt({ + te("span", { + style: vt({ fontSize: "13px", fontWeight: "700", color: c.value.scoreColor, @@ -39697,9 +39734,9 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = { textAlign: "right", fontFamily: "'Consolas', 'Monaco', monospace" }) - }, Ye(c.value.scoreText), 5), - ie("span", { - style: Lt({ + }, Ne(c.value.scoreText), 5), + te("span", { + style: vt({ fontSize: "9px", fontWeight: "700", padding: "2px 6px", @@ -39709,32 +39746,32 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = { textTransform: "uppercase", letterSpacing: "0.5px" }) - }, Ye(c.value.qualityText), 5) + }, Ne(c.value.qualityText), 5) ]), - c.value.aiStatusVisible ? (be(), Ce("div", Lj, Ye(c.value.aiStatusText), 1)) : ft("", !0) - ], 64)) : ft("", !0), - ie("div", Vj, [ - ie("span", Yj, Ye(S.value.captionLabel), 1), - ie("div", kj, [ - ie("button", { + c.value.aiStatusVisible ? (be(), Ze("div", Lj, Ne(c.value.aiStatusText), 1)) : yt("", !0) + ], 64)) : yt("", !0), + te("div", Yj, [ + te("span", Vj, Ne(h.value.captionLabel), 1), + te("div", Xj, [ + te("button", { type: "button", class: "mjr-ai-control", - disabled: !A.value || a.value, - style: Lt([{ border: "1px solid rgba(0,188,212,0.45)", background: "rgba(0,188,212,0.12)", color: "#00BCD4", "border-radius": "4px", "font-size": "10px", "font-weight": "600", padding: "2px 8px", cursor: "pointer" }, { opacity: A.value ? "1" : "0.6", cursor: A.value ? "pointer" : "default" }]), - onClick: On(X, ["stop"]) - }, Ye(l.value), 13, Xj), - ie("button", { + disabled: !y.value || a.value, + style: vt([{ border: "1px solid rgba(0,188,212,0.45)", background: "rgba(0,188,212,0.12)", color: "#00BCD4", "border-radius": "4px", "font-size": "10px", "font-weight": "600", padding: "2px 8px", cursor: "pointer" }, { opacity: y.value ? "1" : "0.6", cursor: y.value ? "pointer" : "default" }]), + onClick: Fn(X, ["stop"]) + }, Ne(l.value), 13, Nj), + te("button", { type: "button", class: "mjr-ai-control", disabled: !p.value, - style: Lt([{ border: "1px solid rgba(0,188,212,0.45)", background: "rgba(0,188,212,0.12)", color: "#00BCD4", "border-radius": "4px", "font-size": "10px", "font-weight": "600", padding: "2px 8px", cursor: "pointer" }, { opacity: p.value ? "1" : "0.6", cursor: p.value ? "pointer" : "default" }]), - onClick: On(x, ["stop"]) - }, Ye(r.value), 13, Nj) + style: vt([{ border: "1px solid rgba(0,188,212,0.45)", background: "rgba(0,188,212,0.12)", color: "#00BCD4", "border-radius": "4px", "font-size": "10px", "font-weight": "600", padding: "2px 8px", cursor: "pointer" }, { opacity: p.value ? "1" : "0.6", cursor: p.value ? "pointer" : "default" }]), + onClick: Fn(x, ["stop"]) + }, Ne(r.value), 13, kj) ]) ]), - ie("div", { - title: Z.value ? "Click to copy caption" : "AI caption controls are disabled", - style: Lt({ + te("div", { + title: S.value ? "Click to copy caption" : "AI caption controls are disabled", + style: vt({ marginTop: "4px", padding: "8px", borderRadius: "6px", @@ -39748,27 +39785,27 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = { cursor: p.value ? "copy" : "default" }), onClick: x - }, Ye(g.value), 13, Rj) - ], 2)) : ft("", !0), - S.value.lyrics ? (be(), Ce("div", { + }, Ne(g.value), 13, Rj) + ], 2)) : yt("", !0), + h.value.lyrics ? (be(), Ze("div", { key: 5, - style: Lt(I("#00BCD4", { emphasis: !1 })) + style: vt(I("#00BCD4", { emphasis: !1 })) }, [ - v[12] || (v[12] = ie("div", { style: { display: "flex", "justify-content": "space-between", "align-items": "center", "font-size": "11px", "font-weight": "600", color: "#00BCD4", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "8px" } }, [ - ie("span", null, "Lyrics") + j[12] || (j[12] = te("div", { style: { display: "flex", "justify-content": "space-between", "align-items": "center", "font-size": "11px", "font-weight": "600", color: "#00BCD4", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "8px" } }, [ + te("span", null, "Lyrics") ], -1)), - ie("div", Fj, Ye(S.value.lyrics), 1) - ], 4)) : ft("", !0), - S.value.pipelineTabs.length ? (be(), Ce("div", { + te("div", Oj, Ne(h.value.lyrics), 1) + ], 4)) : yt("", !0), + h.value.pipelineTabs.length ? (be(), Ze("div", { key: 6, - style: Lt(I("#FF9800", { emphasis: !0, startAlpha: 0.16, endAlpha: 0.1 })) + style: vt(I("#FF9800", { emphasis: !0, startAlpha: 0.16, endAlpha: 0.1 })) }, [ - v[13] || (v[13] = ie("div", { style: { "font-size": "11px", "font-weight": "600", color: "#FF9800", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "10px" } }, " Generation Pipeline ", -1)), - ie("div", Oj, [ - (be(!0), Ce(Nt, null, Cn(S.value.pipelineTabs, (w, R) => (be(), Ce("button", { + j[13] || (j[13] = te("div", { style: { "font-size": "11px", "font-weight": "600", color: "#FF9800", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "10px" } }, " Generation Pipeline ", -1)), + te("div", Fj, [ + (be(!0), Ze(Nt, null, Zn(h.value.pipelineTabs, (w, R) => (be(), Ze("button", { key: w.label, type: "button", - style: Lt({ + style: vt({ appearance: "none", border: i.value === R ? "1px solid #FF9800" : "1px solid var(--border-color, rgba(255,255,255,0.12))", borderRadius: "999px", @@ -39780,33 +39817,33 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = { fontWeight: i.value === R ? "700" : "500", boxShadow: i.value === R ? "0 0 0 1px #FF980055 inset" : "none" }), - onClick: (Y) => i.value = R - }, Ye(w.label), 13, zj))), 128)) + onClick: (V) => i.value = R + }, Ne(w.label), 13, zj))), 128)) ]), - (be(!0), Ce(Nt, null, Cn(S.value.pipelineTabs, (w, R) => Ko((be(), Ce("div", { + (be(!0), Ze(Nt, null, Zn(h.value.pipelineTabs, (w, R) => Uo((be(), Ze("div", { key: `${w.label}-pipeline`, style: { display: "grid", "grid-template-columns": "repeat(auto-fit, minmax(150px, 1fr))", gap: "8px", padding: "8px", border: "1px solid rgba(255, 152, 0, 0.35)", "border-radius": "6px", background: "linear-gradient(135deg, rgba(255, 152, 0, 0.12) 0%, rgba(255, 193, 7, 0.08) 100%)", "box-shadow": "0 0 0 1px rgba(255, 152, 0, 0.12) inset" } }, [ - (be(!0), Ce(Nt, null, Cn(w.fields, (Y) => (be(), Ce("div", { - key: `${w.label}-${Y.label}`, + (be(!0), Ze(Nt, null, Zn(w.fields, (V) => (be(), Ze("div", { + key: `${w.label}-${V.label}`, style: { display: "flex", "flex-direction": "column", gap: "2px", "min-width": "0" } }, [ - ie("span", Jj, Ye(Y.label), 1), - ie("span", { + te("span", Jj, Ne(V.label), 1), + te("span", { style: { "font-size": "12px", color: "var(--fg-color, #ddd)", "word-break": "break-word", padding: "1px 3px", "border-radius": "3px", transition: "background 0.2s ease", cursor: "copy" }, - onClick: (F) => h(Y.value, F.currentTarget) - }, Ye(Y.value), 9, Tj) + onClick: (O) => C(V.value, O.currentTarget) + }, Ne(V.value), 9, Tj) ]))), 128)) ])), [ [yr, i.value === R] ])), 128)) - ], 4)) : ft("", !0), - (be(!0), Ce(Nt, null, Cn(b.value, (w) => (be(), Ce("div", { + ], 4)) : yt("", !0), + (be(!0), Ze(Nt, null, Zn(b.value, (w) => (be(), Ze("div", { key: w.key, - style: Lt(I(w.accent, { emphasis: w.emphasis })) + style: vt(I(w.accent, { emphasis: w.emphasis })) }, [ - ie("div", { - style: Lt({ + te("div", { + style: vt({ fontSize: "11px", fontWeight: "600", color: w.accent, @@ -39814,70 +39851,70 @@ const Ij = ["title"], bj = ["src"], pj = ["src"], yj = { letterSpacing: "0.5px", marginBottom: "10px" }) - }, Ye(w.title), 5), - ie("div", Bj, [ - (be(!0), Ce(Nt, null, Cn(w.fields, (R) => (be(), Ce(Nt, { + }, Ne(w.title), 5), + te("div", Kj, [ + (be(!0), Ze(Nt, null, Zn(w.fields, (R) => (be(), Ze(Nt, { key: `${w.key}-${R.label}` }, [ - ie("div", { + te("div", { title: R.label, style: { "font-size": "11px", color: "var(--mjr-muted, rgba(127,127,127,0.9))", "font-weight": "500" } - }, Ye(R.label) + ": ", 9, Uj), - ie("div", { + }, Ne(R.label) + ": ", 9, Bj), + te("div", { title: `${R.label}: ${R.value}`, style: { "font-size": "12px", color: "var(--fg-color, rgba(255,255,255,0.95))", "word-break": "break-word", "white-space": "pre-wrap", cursor: "pointer" }, - onClick: (Y) => h(R.value, Y.currentTarget) - }, Ye(R.value), 9, Kj) + onClick: (V) => C(R.value, V.currentTarget) + }, Ne(R.value), 9, Uj) ], 64))), 128)) ]) ], 4))), 128)), - S.value.ttsInstruction ? (be(), Ce("div", { + h.value.ttsInstruction ? (be(), Ze("div", { key: 7, - style: Lt(I("#26A69A", { emphasis: !1 })) + style: vt(I("#26A69A", { emphasis: !1 })) }, [ - v[14] || (v[14] = ie("div", { style: { display: "flex", "justify-content": "space-between", "align-items": "center", "font-size": "11px", "font-weight": "600", color: "#26A69A", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "8px" } }, [ - ie("span", null, "TTS Instruction") + j[14] || (j[14] = te("div", { style: { display: "flex", "justify-content": "space-between", "align-items": "center", "font-size": "11px", "font-weight": "600", color: "#26A69A", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "8px" } }, [ + te("span", null, "TTS Instruction") ], -1)), - ie("div", { + te("div", { title: "Click to copy", style: { "font-size": "12px", color: "var(--fg-color, rgba(255,255,255,0.9))", "line-height": "1.5", "white-space": "pre-wrap", "word-break": "break-word", cursor: "pointer" }, - onClick: v[2] || (v[2] = (w) => h(S.value.ttsInstruction, w.currentTarget)) - }, Ye(S.value.ttsInstruction), 1) - ], 4)) : ft("", !0), - S.value.seed !== null && S.value.seed !== void 0 && S.value.seed !== "" ? (be(), Ce("div", { + onClick: j[2] || (j[2] = (w) => C(h.value.ttsInstruction, w.currentTarget)) + }, Ne(h.value.ttsInstruction), 1) + ], 4)) : yt("", !0), + h.value.seed !== null && h.value.seed !== void 0 && h.value.seed !== "" ? (be(), Ze("div", { key: 8, - style: Lt(y()) + style: vt(A()) }, [ - v[15] || (v[15] = ie("div", { style: { "font-size": "11px", "font-weight": "700", color: "#E91E63", "text-transform": "uppercase", "letter-spacing": "1px" } }, " SEED ", -1)), - ie("div", { - title: `Click to copy seed: ${S.value.seed}`, + j[15] || (j[15] = te("div", { style: { "font-size": "11px", "font-weight": "700", color: "#E91E63", "text-transform": "uppercase", "letter-spacing": "1px" } }, " SEED ", -1)), + te("div", { + title: `Click to copy seed: ${h.value.seed}`, style: { "font-size": "18px", "font-weight": "700", color: "#fff", "font-family": "'Consolas', 'Monaco', monospace", "letter-spacing": "1px", cursor: "pointer", padding: "4px 8px", "border-radius": "4px", transition: "background 0.2s" }, - onClick: v[3] || (v[3] = (w) => h(S.value.seed, w.currentTarget, "rgba(76, 175, 80, 0.4)")) - }, Ye(S.value.seed), 9, Dj) - ], 4)) : ft("", !0), - S.value.inputFiles.length ? (be(), Ce("div", { + onClick: j[3] || (j[3] = (w) => C(h.value.seed, w.currentTarget, "rgba(76, 175, 80, 0.4)")) + }, Ne(h.value.seed), 9, Dj) + ], 4)) : yt("", !0), + h.value.inputFiles.length ? (be(), Ze("div", { key: 9, - style: Lt(I("#4CAF50", { emphasis: !0, startAlpha: 0.16, endAlpha: 0.1 })) + style: vt(I("#4CAF50", { emphasis: !0, startAlpha: 0.16, endAlpha: 0.1 })) }, [ - ie("div", { - title: xe(m)("tooltip.generationInputs", "Input files used in generation"), + te("div", { + title: ve(m)("tooltip.generationInputs", "Input files used in generation"), style: { "font-size": "11px", "font-weight": "600", color: "#4CAF50", "text-transform": "uppercase", "letter-spacing": "0.5px", "margin-bottom": "8px" } - }, " Source Files ", 8, Ej), - ie("div", Hj, [ - (be(!0), Ce(Nt, null, Cn(S.value.inputFiles, (w) => (be(), Pi(hj, { + }, " Source Files ", 8, Hj), + te("div", Ej, [ + (be(!0), Ze(Nt, null, Zn(h.value.inputFiles, (w) => (be(), Pi(Cj, { key: w.id, "input-file": w }, null, 8, ["input-file"]))), 128)) ]) - ], 4)) : ft("", !0) - ])) : ft("", !0); + ], 4)) : yt("", !0) + ])) : yt("", !0); } -}, Pj = 6, Qj = 1, _j = 8, Kr = (e, t, n) => { +}, Pj = 6, Qj = 1, _j = 8, Ur = (e, t, n) => { const i = Number(e); return Number.isFinite(i) ? Math.max(t, Math.min(n, i)) : t; }; function $j(e, t, n = null) { - var P, H, $, E, oe, M, j, O, D, q, ee, ce, ue; + var P, E, $, H, ne, M, v, F, D, q, ee, ae, ue; if (!e) return; const i = (P = e.getContext) == null ? void 0 : P.call(e, "2d"); if (!i) return; @@ -39890,187 +39927,187 @@ function $j(e, t, n = null) { showViewport: !0, showNodeLabels: !1, ...n && typeof n == "object" ? n : {} - }, r = Array.isArray(t == null ? void 0 : t.nodes) ? t.nodes : [], l = Array.isArray(t == null ? void 0 : t.groups) && t.groups || Array.isArray((H = t == null ? void 0 : t.extra) == null ? void 0 : H.groups) && t.extra.groups || Array.isArray(($ = t == null ? void 0 : t.extra) == null ? void 0 : $.groupNodes) && t.extra.groupNodes || Array.isArray((E = t == null ? void 0 : t.extra) == null ? void 0 : E.group_nodes) && t.extra.group_nodes || [], a = Array.isArray(t == null ? void 0 : t.links) && t.links || Array.isArray((oe = t == null ? void 0 : t.extra) == null ? void 0 : oe.links) && t.extra.links || [], c = Math.max(1, e.clientWidth || e.width || 1), s = Math.max(1, e.clientHeight || e.height || 1); + }, r = Array.isArray(t == null ? void 0 : t.nodes) ? t.nodes : [], l = Array.isArray(t == null ? void 0 : t.groups) && t.groups || Array.isArray((E = t == null ? void 0 : t.extra) == null ? void 0 : E.groups) && t.extra.groups || Array.isArray(($ = t == null ? void 0 : t.extra) == null ? void 0 : $.groupNodes) && t.extra.groupNodes || Array.isArray((H = t == null ? void 0 : t.extra) == null ? void 0 : H.group_nodes) && t.extra.group_nodes || [], a = Array.isArray(t == null ? void 0 : t.links) && t.links || Array.isArray((ne = t == null ? void 0 : t.extra) == null ? void 0 : ne.links) && t.extra.links || [], c = Math.max(1, e.clientWidth || e.width || 1), s = Math.max(1, e.clientHeight || e.height || 1); if ((!r || r.length === 0) && (!l || l.length === 0)) return i.clearRect(0, 0, c, s), null; - const d = (U, Q) => { - if (!U) return `rgba(255,255,255,${Q})`; - if (typeof U != "string") return `rgba(255,255,255,${Q})`; - const _ = U.trim(); + const d = (B, Q) => { + if (!B) return `rgba(255,255,255,${Q})`; + if (typeof B != "string") return `rgba(255,255,255,${Q})`; + const _ = B.trim(); if (!_) return `rgba(255,255,255,${Q})`; const le = _.match(/^rgba?\((\d+)\s*,\s*(\d+)\s*,\s*(\d+)(?:\s*,\s*([0-9.]+))?\)\s*$/i); if (le) { - const se = Number(le[1]), ge = Number(le[2]), je = Number(le[3]); - if ([se, ge, je].every((Se) => Number.isFinite(Se))) return `rgba(${se},${ge},${je},${Q})`; + const de = Number(le[1]), ge = Number(le[2]), Le = Number(le[3]); + if ([de, ge, Le].every((xe) => Number.isFinite(xe))) return `rgba(${de},${ge},${Le},${Q})`; } - const de = _.startsWith("#") ? _.slice(1) : ""; - if (de.length === 3) { - const se = parseInt(de[0] + de[0], 16), ge = parseInt(de[1] + de[1], 16), je = parseInt(de[2] + de[2], 16); - if ([se, ge, je].every((Se) => Number.isFinite(Se))) return `rgba(${se},${ge},${je},${Q})`; + const ce = _.startsWith("#") ? _.slice(1) : ""; + if (ce.length === 3) { + const de = parseInt(ce[0] + ce[0], 16), ge = parseInt(ce[1] + ce[1], 16), Le = parseInt(ce[2] + ce[2], 16); + if ([de, ge, Le].every((xe) => Number.isFinite(xe))) return `rgba(${de},${ge},${Le},${Q})`; } - if (de.length === 6) { - const se = parseInt(de.slice(0, 2), 16), ge = parseInt(de.slice(2, 4), 16), je = parseInt(de.slice(4, 6), 16); - if ([se, ge, je].every((Se) => Number.isFinite(Se))) return `rgba(${se},${ge},${je},${Q})`; + if (ce.length === 6) { + const de = parseInt(ce.slice(0, 2), 16), ge = parseInt(ce.slice(2, 4), 16), Le = parseInt(ce.slice(4, 6), 16); + if ([de, ge, Le].every((xe) => Number.isFinite(xe))) return `rgba(${de},${ge},${Le},${Q})`; } return _; - }, u = [], I = /* @__PURE__ */ new Map(), y = (U) => { - if (Array.isArray(U) && U.length >= 2) return [Number(U[0]), Number(U[1])]; - if (U && typeof U == "object") { - const Q = U[0] ?? U[0] ?? U.x ?? U.left ?? null, _ = U[1] ?? U[1] ?? U.y ?? U.top ?? null; + }, u = [], I = /* @__PURE__ */ new Map(), A = (B) => { + if (Array.isArray(B) && B.length >= 2) return [Number(B[0]), Number(B[1])]; + if (B && typeof B == "object") { + const Q = B[0] ?? B[0] ?? B.x ?? B.left ?? null, _ = B[1] ?? B[1] ?? B.y ?? B.top ?? null; if (Q !== null && _ !== null) return [Number(Q), Number(_)]; } return null; - }, S = (U) => { - if (Array.isArray(U) && U.length >= 2) return [Number(U[0]), Number(U[1])]; - if (U && typeof U == "object") { - const Q = U[0] ?? U[0] ?? U.w ?? U.width ?? null, _ = U[1] ?? U[1] ?? U.h ?? U.height ?? null; + }, h = (B) => { + if (Array.isArray(B) && B.length >= 2) return [Number(B[0]), Number(B[1])]; + if (B && typeof B == "object") { + const Q = B[0] ?? B[0] ?? B.w ?? B.width ?? null, _ = B[1] ?? B[1] ?? B.h ?? B.height ?? null; if (Q !== null && _ !== null) return [Number(Q), Number(_)]; } return null; }; - for (const U of r || []) { - const Q = (U == null ? void 0 : U.id) ?? (U == null ? void 0 : U.ID) ?? (U == null ? void 0 : U.node_id) ?? null, _ = Q != null ? String(Q) : null, le = y(U == null ? void 0 : U.pos), de = S(U == null ? void 0 : U.size); - if (!le || !de) continue; - const se = Number(le[0]), ge = Number(le[1]), je = Math.max(1, Number(de[0])), Se = Math.max(1, Number(de[1])); - if (!Number.isFinite(se) || !Number.isFinite(ge) || !Number.isFinite(je) || !Number.isFinite(Se)) + for (const B of r || []) { + const Q = (B == null ? void 0 : B.id) ?? (B == null ? void 0 : B.ID) ?? (B == null ? void 0 : B.node_id) ?? null, _ = Q != null ? String(Q) : null, le = A(B == null ? void 0 : B.pos), ce = h(B == null ? void 0 : B.size); + if (!le || !ce) continue; + const de = Number(le[0]), ge = Number(le[1]), Le = Math.max(1, Number(ce[0])), xe = Math.max(1, Number(ce[1])); + if (!Number.isFinite(de) || !Number.isFinite(ge) || !Number.isFinite(Le) || !Number.isFinite(xe)) continue; - const ke = Number(U == null ? void 0 : U.mode), we = ke === 2 || ke === 4, Je = ((M = t == null ? void 0 : t.extra) == null ? void 0 : M.errors) || ((j = t == null ? void 0 : t.extra) == null ? void 0 : j.node_errors) || null, qe = !!((Je && typeof Je == "object" && _ ? Je[_] : null) || U != null && U.error || U != null && U.errors || (O = U == null ? void 0 : U.flags) != null && O.error || (D = U == null ? void 0 : U.properties) != null && D.error); + const Xe = Number(B == null ? void 0 : B.mode), Me = Xe === 2 || Xe === 4, Fe = ((M = t == null ? void 0 : t.extra) == null ? void 0 : M.errors) || ((v = t == null ? void 0 : t.extra) == null ? void 0 : v.node_errors) || null, qe = !!((Fe && typeof Fe == "object" && _ ? Fe[_] : null) || B != null && B.error || B != null && B.errors || (F = B == null ? void 0 : B.flags) != null && F.error || (D = B == null ? void 0 : B.properties) != null && D.error); u.push({ kind: "node", id: _, - x: se, + x: de, y: ge, - w: je, - h: Se, - fill: o.nodeColors && ((U == null ? void 0 : U.bgcolor) || (U == null ? void 0 : U.color)) || null, - stroke: o.nodeColors && ((U == null ? void 0 : U.color) || (U == null ? void 0 : U.bgcolor)) || null, - bypassed: we, + w: Le, + h: xe, + fill: o.nodeColors && ((B == null ? void 0 : B.bgcolor) || (B == null ? void 0 : B.color)) || null, + stroke: o.nodeColors && ((B == null ? void 0 : B.color) || (B == null ? void 0 : B.bgcolor)) || null, + bypassed: Me, errored: qe, - label: String((U == null ? void 0 : U.title) || (U == null ? void 0 : U.type) || (U == null ? void 0 : U.comfyClass) || (U == null ? void 0 : U.class_type) || _ || "").replace(/\s+/g, " ").trim() + label: String((B == null ? void 0 : B.title) || (B == null ? void 0 : B.type) || (B == null ? void 0 : B.comfyClass) || (B == null ? void 0 : B.class_type) || _ || "").replace(/\s+/g, " ").trim() }), _ && I.set(_, u[u.length - 1]); } if (o.showGroups) - for (const U of l || []) { - const Q = Array.isArray(U == null ? void 0 : U.bounding) && U.bounding.length >= 4 ? U.bounding : null, _ = Q ? [Number(Q[0]), Number(Q[1])] : y(U == null ? void 0 : U.pos), le = Q ? [Number(Q[2]), Number(Q[3])] : S(U == null ? void 0 : U.size); + for (const B of l || []) { + const Q = Array.isArray(B == null ? void 0 : B.bounding) && B.bounding.length >= 4 ? B.bounding : null, _ = Q ? [Number(Q[0]), Number(Q[1])] : A(B == null ? void 0 : B.pos), le = Q ? [Number(Q[2]), Number(Q[3])] : h(B == null ? void 0 : B.size); if (!_ || !le) continue; - const de = Number(_[0]), se = Number(_[1]), ge = Math.max(1, Number(le[0])), je = Math.max(1, Number(le[1])); - !Number.isFinite(de) || !Number.isFinite(se) || !Number.isFinite(ge) || !Number.isFinite(je) || u.push({ + const ce = Number(_[0]), de = Number(_[1]), ge = Math.max(1, Number(le[0])), Le = Math.max(1, Number(le[1])); + !Number.isFinite(ce) || !Number.isFinite(de) || !Number.isFinite(ge) || !Number.isFinite(Le) || u.push({ kind: "group", - x: de, - y: se, + x: ce, + y: de, w: ge, - h: je, - fill: (U == null ? void 0 : U.color) || (U == null ? void 0 : U.bgcolor) || (U == null ? void 0 : U.borderColor) || null, - stroke: (U == null ? void 0 : U.borderColor) || (U == null ? void 0 : U.color) || (U == null ? void 0 : U.bgcolor) || null + h: Le, + fill: (B == null ? void 0 : B.color) || (B == null ? void 0 : B.bgcolor) || (B == null ? void 0 : B.borderColor) || null, + stroke: (B == null ? void 0 : B.borderColor) || (B == null ? void 0 : B.color) || (B == null ? void 0 : B.bgcolor) || null }); } if (!u.length) return i.clearRect(0, 0, c, s), null; - let Z = u[0].x, C = u[0].y, g = u[0].x + u[0].w, A = u[0].y + u[0].h; - for (const U of u) - Z = Math.min(Z, U.x), C = Math.min(C, U.y), g = Math.max(g, U.x + U.w), A = Math.max(A, U.y + U.h); - const p = Math.max(1, g - Z), b = Math.max(1, A - C), L = Z + p / 2, h = C + b / 2, G = o.view && typeof o.view == "object" ? o.view : /* @__PURE__ */ Object.create(null), W = Kr(G.zoom ?? 1, Qj, _j), f = Math.max(1, p / W), X = Math.max(1, b / W), x = f / 2, T = X / 2, v = f >= p ? L : Kr(G.centerX ?? L, Z + x, g - x), w = X >= b ? h : Kr(G.centerY ?? h, C + T, A - T), R = v - x, Y = w - T, F = Pj, N = Math.min((c - F * 2) / f, (s - F * 2) / X), V = G.hoveredNodeId !== null && G.hoveredNodeId !== void 0 ? String(G.hoveredNodeId) : null; + let S = u[0].x, W = u[0].y, g = u[0].x + u[0].w, y = u[0].y + u[0].h; + for (const B of u) + S = Math.min(S, B.x), W = Math.min(W, B.y), g = Math.max(g, B.x + B.w), y = Math.max(y, B.y + B.h); + const p = Math.max(1, g - S), b = Math.max(1, y - W), L = S + p / 2, C = W + b / 2, G = o.view && typeof o.view == "object" ? o.view : /* @__PURE__ */ Object.create(null), Z = Ur(G.zoom ?? 1, Qj, _j), f = Math.max(1, p / Z), X = Math.max(1, b / Z), x = f / 2, K = X / 2, j = f >= p ? L : Ur(G.centerX ?? L, S + x, g - x), w = X >= b ? C : Ur(G.centerY ?? C, W + K, y - K), R = j - x, V = w - K, O = Pj, k = Math.min((c - O * 2) / f, (s - O * 2) / X), Y = G.hoveredNodeId !== null && G.hoveredNodeId !== void 0 ? String(G.hoveredNodeId) : null; i.clearRect(0, 0, c, s), i.fillStyle = "rgba(0,0,0,0.22)", i.fillRect(0, 0, c, s); - const k = (U, Q) => ({ - x: F + (U - R) * N, - y: F + (Q - Y) * N - }), K = (U, Q) => ({ - x: Kr(R + (Number(U) - F) / N, Z, g), - y: Kr(Y + (Number(Q) - F) / N, C, A) + const N = (B, Q) => ({ + x: O + (B - R) * k, + y: O + (Q - V) * k + }), U = (B, Q) => ({ + x: Ur(R + (Number(B) - O) / k, S, g), + y: Ur(V + (Number(Q) - O) / k, W, y) }), z = () => { if (o.showLinks && !(!a || a.length === 0)) { i.save(), i.globalAlpha = 1, i.strokeStyle = "rgba(255,255,255,0.18)", i.lineWidth = 1; - for (const U of a) { + for (const B of a) { let Q = null, _ = null; - if (Array.isArray(U) && U.length >= 4 ? (Q = U[1], _ = U[3]) : U && typeof U == "object" && (Q = U.origin_id ?? U.originId ?? U.from ?? null, _ = U.target_id ?? U.targetId ?? U.to ?? null), Q === null || _ === null) continue; - const le = I.get(String(Q)), de = I.get(String(_)); - if (!le || !de) continue; - const se = k(le.x + le.w, le.y + le.h / 2), ge = k(de.x, de.y + de.h / 2), je = Math.max(12, Math.min(80, Math.abs(ge.x - se.x) * 0.35)); - i.beginPath(), i.moveTo(se.x, se.y), i.bezierCurveTo(se.x + je, se.y, ge.x - je, ge.y, ge.x, ge.y), i.stroke(); + if (Array.isArray(B) && B.length >= 4 ? (Q = B[1], _ = B[3]) : B && typeof B == "object" && (Q = B.origin_id ?? B.originId ?? B.from ?? null, _ = B.target_id ?? B.targetId ?? B.to ?? null), Q === null || _ === null) continue; + const le = I.get(String(Q)), ce = I.get(String(_)); + if (!le || !ce) continue; + const de = N(le.x + le.w, le.y + le.h / 2), ge = N(ce.x, ce.y + ce.h / 2), Le = Math.max(12, Math.min(80, Math.abs(ge.x - de.x) * 0.35)); + i.beginPath(), i.moveTo(de.x, de.y), i.bezierCurveTo(de.x + Le, de.y, ge.x - Le, ge.y, ge.x, ge.y), i.stroke(); } i.restore(); } - }, B = (U) => { - var qe, Ue, Te, Oe; - const Q = F + (U.x - R) * N, _ = F + (U.y - Y) * N, le = Math.max(1, U.w * N), de = Math.max(1, U.h * N), se = U.kind === "node", ge = U.kind === "group", je = !!U.bypassed, Se = !!U.errored, ke = ge ? 0.18 : je && o.renderBypassState ? 0.14 : 0.62, we = ge ? 0.55 : je && o.renderBypassState ? 0.32 : 0.8, Je = d(U.fill, ke), $e = d(U.stroke, we); - if (i.save(), i.globalAlpha = 1, typeof Je == "string" && (Je.startsWith("#") || Je.startsWith("rgb") || Je.startsWith("hsl")) ? (i.fillStyle = Je, i.globalAlpha = ke) : (i.fillStyle = typeof Je == "string" ? Je : "rgba(255,255,255,0.20)", i.globalAlpha = ke), i.fillRect(Q, _, le, de), i.restore(), i.globalAlpha = 1, i.strokeStyle = "rgba(255,255,255,0.22)", typeof $e == "string" && ($e.startsWith("#") || $e.startsWith("rgb") || $e.startsWith("hsl")) && (i.save(), i.globalAlpha = we, i.strokeStyle = $e, i.restore()), se && je && o.renderBypassState) + }, T = (B) => { + var qe, Pe, Re, rt; + const Q = O + (B.x - R) * k, _ = O + (B.y - V) * k, le = Math.max(1, B.w * k), ce = Math.max(1, B.h * k), de = B.kind === "node", ge = B.kind === "group", Le = !!B.bypassed, xe = !!B.errored, Xe = ge ? 0.18 : Le && o.renderBypassState ? 0.14 : 0.62, Me = ge ? 0.55 : Le && o.renderBypassState ? 0.32 : 0.8, Fe = d(B.fill, Xe), it = d(B.stroke, Me); + if (i.save(), i.globalAlpha = 1, typeof Fe == "string" && (Fe.startsWith("#") || Fe.startsWith("rgb") || Fe.startsWith("hsl")) ? (i.fillStyle = Fe, i.globalAlpha = Xe) : (i.fillStyle = typeof Fe == "string" ? Fe : "rgba(255,255,255,0.20)", i.globalAlpha = Xe), i.fillRect(Q, _, le, ce), i.restore(), i.globalAlpha = 1, i.strokeStyle = "rgba(255,255,255,0.22)", typeof it == "string" && (it.startsWith("#") || it.startsWith("rgb") || it.startsWith("hsl")) && (i.save(), i.globalAlpha = Me, i.strokeStyle = it, i.restore()), de && Le && o.renderBypassState) try { i.setLineDash([3, 2]); - } catch (pt) { - (qe = console.debug) == null || qe.call(console, pt); + } catch (Te) { + (qe = console.debug) == null || qe.call(console, Te); } else try { i.setLineDash([]); - } catch (pt) { - (Ue = console.debug) == null || Ue.call(console, pt); + } catch (Te) { + (Pe = console.debug) == null || Pe.call(console, Te); } - if (i.lineWidth = 1, i.strokeRect(Q, _, le, de), se && Se && o.renderErrorState) { + if (i.lineWidth = 1, i.strokeRect(Q, _, le, ce), de && xe && o.renderErrorState) { try { i.setLineDash([]); - } catch (pt) { - (Te = console.debug) == null || Te.call(console, pt); + } catch (Te) { + (Re = console.debug) == null || Re.call(console, Te); } - i.strokeStyle = "rgba(244,67,54,0.95)", i.lineWidth = 1.5, i.strokeRect(Q - 0.5, _ - 0.5, le + 1, de + 1); + i.strokeStyle = "rgba(244,67,54,0.95)", i.lineWidth = 1.5, i.strokeRect(Q - 0.5, _ - 0.5, le + 1, ce + 1); } - if (se && V && String(U.id || "") === V) { + if (de && Y && String(B.id || "") === Y) { try { i.setLineDash([]); - } catch (pt) { - (Oe = console.debug) == null || Oe.call(console, pt); + } catch (Te) { + (rt = console.debug) == null || rt.call(console, Te); } - i.strokeStyle = "rgba(255,224,130,0.96)", i.lineWidth = 2, i.strokeRect(Q - 1, _ - 1, le + 2, de + 2); + i.strokeStyle = "rgba(255,224,130,0.96)", i.lineWidth = 2, i.strokeRect(Q - 1, _ - 1, le + 2, ce + 2); } - if (se && o.showNodeLabels && U.label && le >= 42 && de >= 12) { - const pt = Math.max(8, Math.min(11, Math.floor(de * 0.28))), Me = _ + pt + 2, Xt = Math.max(20, le - 6); - let Mt = U.label; - for (i.save(), i.beginPath(), i.rect(Q + 1, _ + 1, le - 2, de - 2), i.clip(), i.font = `600 ${pt}px sans-serif`; Mt.length > 3 && i.measureText(`${Mt}...`).width > Xt; ) - Mt = Mt.slice(0, -1); - const me = Mt === U.label ? Mt : `${Mt}...`; - i.fillStyle = "rgba(255,255,255,0.92)", i.shadowColor = "rgba(0,0,0,0.5)", i.shadowBlur = 2, i.fillText(me, Q + 3, Me, Xt), i.restore(); + if (de && o.showNodeLabels && B.label && le >= 42 && ce >= 12) { + const Te = Math.max(8, Math.min(11, Math.floor(ce * 0.28))), qt = _ + Te + 2, kt = Math.max(20, le - 6); + let we = B.label; + for (i.save(), i.beginPath(), i.rect(Q + 1, _ + 1, le - 2, ce - 2), i.clip(), i.font = `600 ${Te}px sans-serif`; we.length > 3 && i.measureText(`${we}...`).width > kt; ) + we = we.slice(0, -1); + const me = we === B.label ? we : `${we}...`; + i.fillStyle = "rgba(255,255,255,0.92)", i.shadowColor = "rgba(0,0,0,0.5)", i.shadowBlur = 2, i.fillText(me, Q + 3, qt, kt), i.restore(); } }; - for (const U of u.filter((Q) => Q.kind === "group")) B(U); + for (const B of u.filter((Q) => Q.kind === "group")) T(B); z(); - for (const U of u.filter((Q) => Q.kind === "node")) B(U); + for (const B of u.filter((Q) => Q.kind === "node")) T(B); if (o.showViewport) try { - const U = (window == null ? void 0 : window.app) || null, Q = ((q = U == null ? void 0 : U.canvas) == null ? void 0 : q.canvas) || ((ee = U == null ? void 0 : U.canvas) == null ? void 0 : ee.el) || null, _ = ((ce = U == null ? void 0 : U.canvas) == null ? void 0 : ce.ds) || null, le = Number(_ == null ? void 0 : _.scale), de = _ == null ? void 0 : _.offset, se = Array.isArray(de) ? Number(de[0]) : Number(de == null ? void 0 : de.x), ge = Array.isArray(de) ? Number(de[1]) : Number(de == null ? void 0 : de.y), je = Number((Q == null ? void 0 : Q.clientWidth) || (Q == null ? void 0 : Q.width)), Se = Number((Q == null ? void 0 : Q.clientHeight) || (Q == null ? void 0 : Q.height)); - if (Number.isFinite(le) && le > 0 && Number.isFinite(se) && Number.isFinite(ge) && Number.isFinite(je) && Number.isFinite(Se) && je > 0 && Se > 0) { - const ke = -se / le, we = -ge / le, Je = (je - se) / le, $e = (Se - ge) / le, qe = k(ke, we), Ue = k(Je, $e), Te = Math.min(qe.x, Ue.x), Oe = Math.min(qe.y, Ue.y), pt = Math.abs(Ue.x - qe.x), Me = Math.abs(Ue.y - qe.y); - i.save(), i.globalAlpha = 1, i.strokeStyle = "rgba(255,255,255,0.9)", i.lineWidth = 1, i.strokeRect(Te, Oe, pt, Me), i.restore(); + const B = (window == null ? void 0 : window.app) || null, Q = ((q = B == null ? void 0 : B.canvas) == null ? void 0 : q.canvas) || ((ee = B == null ? void 0 : B.canvas) == null ? void 0 : ee.el) || null, _ = ((ae = B == null ? void 0 : B.canvas) == null ? void 0 : ae.ds) || null, le = Number(_ == null ? void 0 : _.scale), ce = _ == null ? void 0 : _.offset, de = Array.isArray(ce) ? Number(ce[0]) : Number(ce == null ? void 0 : ce.x), ge = Array.isArray(ce) ? Number(ce[1]) : Number(ce == null ? void 0 : ce.y), Le = Number((Q == null ? void 0 : Q.clientWidth) || (Q == null ? void 0 : Q.width)), xe = Number((Q == null ? void 0 : Q.clientHeight) || (Q == null ? void 0 : Q.height)); + if (Number.isFinite(le) && le > 0 && Number.isFinite(de) && Number.isFinite(ge) && Number.isFinite(Le) && Number.isFinite(xe) && Le > 0 && xe > 0) { + const Xe = -de / le, Me = -ge / le, Fe = (Le - de) / le, it = (xe - ge) / le, qe = N(Xe, Me), Pe = N(Fe, it), Re = Math.min(qe.x, Pe.x), rt = Math.min(qe.y, Pe.y), Te = Math.abs(Pe.x - qe.x), qt = Math.abs(Pe.y - qe.y); + i.save(), i.globalAlpha = 1, i.strokeStyle = "rgba(255,255,255,0.9)", i.lineWidth = 1, i.strokeRect(Re, rt, Te, qt), i.restore(); } - } catch (U) { - (ue = console.debug) == null || ue.call(console, U); + } catch (B) { + (ue = console.debug) == null || ue.call(console, B); } return i.globalAlpha = 1, { bounds: { - minX: Z, - minY: C, + minX: S, + minY: W, maxX: g, - maxY: A, + maxY: y, width: p, height: b }, resolvedView: { - zoom: W, - centerX: v, + zoom: Z, + centerX: j, centerY: w, visibleW: f, visibleH: X, viewMinX: R, - viewMinY: Y, - pad: F, - renderScale: N + viewMinY: V, + pad: O, + renderScale: k }, - canvasToWorld: K, - worldToCanvas: k, - hitTestNode: (U, Q) => { - const _ = K(U, Q); + canvasToWorld: U, + worldToCanvas: N, + hitTestNode: (B, Q) => { + const _ = U(B, Q); for (let le = u.length - 1; le >= 0; le -= 1) { - const de = u[le]; - if (de.kind === "node" && _.x >= de.x && _.x <= de.x + de.w && _.y >= de.y && _.y <= de.y + de.h) - return de; + const ce = u[le]; + if (ce.kind === "node" && _.x >= ce.x && _.x <= ce.x + ce.w && _.y >= ce.y && _.y <= ce.y + ce.h) + return ce; } return null; } @@ -40083,68 +40120,68 @@ function ev(e, t = null) { ...t && typeof t == "object" ? t : {} }, i = Object.entries(e); if (!i.length) return null; - const o = [], r = [], l = /* @__PURE__ */ new Map(), a = (C) => { - if (C == null) return null; - const g = String(C); + const o = [], r = [], l = /* @__PURE__ */ new Map(), a = (W) => { + if (W == null) return null; + const g = String(W); return g || null; - }, c = (C) => Array.isArray(C) && C.length === 2 && Number.isFinite(Number(C[0])); - for (const [C, g] of i.slice(0, n.maxNodes)) { + }, c = (W) => Array.isArray(W) && W.length === 2 && Number.isFinite(Number(W[0])); + for (const [W, g] of i.slice(0, n.maxNodes)) { if (!g || typeof g != "object") continue; - const A = a(C); - if (!A) continue; + const y = a(W); + if (!y) continue; const p = String(g.class_type || g.type || g.classType || "").trim(), b = g.inputs && typeof g.inputs == "object" ? g.inputs : {}, L = []; for (const f of Object.values(b)) { if (!c(f)) continue; const X = a(f[0]); - X && (L.push(X), r.push([X, A])); + X && (L.push(X), r.push([X, y])); } - l.set(A, L); - const h = p.toLowerCase(); - let G = "#3a3a3a", W = "#6b6b6b"; - h.includes("ksampler") || h.includes("sampler") ? (G = "#6a4b1f", W = "#b07a2c") : h.includes("cliptext") || h.includes("textencode") || h.includes("conditioning") ? (G = "#1f5f3a", W = "#2cb06c") : h.includes("checkpoint") || h.includes("loader") || h.includes("model") ? (G = "#243a6a", W = "#3f6fd6") : (h.includes("save") || h.includes("preview") || h.includes("video")) && (G = "#4a2a5f", W = "#8c4cd1"), o.push({ - id: Number.isFinite(Number(A)) ? Number(A) : A, + l.set(y, L); + const C = p.toLowerCase(); + let G = "#3a3a3a", Z = "#6b6b6b"; + C.includes("ksampler") || C.includes("sampler") ? (G = "#6a4b1f", Z = "#b07a2c") : C.includes("cliptext") || C.includes("textencode") || C.includes("conditioning") ? (G = "#1f5f3a", Z = "#2cb06c") : C.includes("checkpoint") || C.includes("loader") || C.includes("model") ? (G = "#243a6a", Z = "#3f6fd6") : (C.includes("save") || C.includes("preview") || C.includes("video")) && (G = "#4a2a5f", Z = "#8c4cd1"), o.push({ + id: Number.isFinite(Number(y)) ? Number(y) : y, type: p || "Node", pos: [0, 0], size: [180, 80], bgcolor: G, - color: W, + color: Z, inputs: [], outputs: [] }); } if (!o.length) return null; - const s = /* @__PURE__ */ new Map(), d = /* @__PURE__ */ new Set(), u = (C) => { - if (s.has(C)) return s.get(C); - if (d.has(C)) return 0; - d.add(C); + const s = /* @__PURE__ */ new Map(), d = /* @__PURE__ */ new Set(), u = (W) => { + if (s.has(W)) return s.get(W); + if (d.has(W)) return 0; + d.add(W); let g = 0; - const A = l.get(C) || []; - for (const p of A) g = Math.max(g, u(p) + 1); - return d.delete(C), s.set(C, g), g; + const y = l.get(W) || []; + for (const p of y) g = Math.max(g, u(p) + 1); + return d.delete(W), s.set(W, g), g; }; - for (const C of o) u(String(C.id)); + for (const W of o) u(String(W.id)); const I = /* @__PURE__ */ new Map(); - for (const C of o) { - const g = s.get(String(C.id)) ?? 0; - I.has(g) || I.set(g, []), I.get(g).push(C); + for (const W of o) { + const g = s.get(String(W.id)) ?? 0; + I.has(g) || I.set(g, []), I.get(g).push(W); } - const y = Array.from(I.keys()).sort((C, g) => C - g); - for (const C of y) { - const g = I.get(C) || []; - g.sort((A, p) => Number(A.id) - Number(p.id)); - for (let A = 0; A < g.length; A++) - g[A].pos = [C * 220, A * 110]; + const A = Array.from(I.keys()).sort((W, g) => W - g); + for (const W of A) { + const g = I.get(W) || []; + g.sort((y, p) => Number(y.id) - Number(p.id)); + for (let y = 0; y < g.length; y++) + g[y].pos = [W * 220, y * 110]; } - let S = 1; - const Z = r.filter(([C, g]) => C !== g).slice(0, 4e3).map(([C, g]) => [ - S++, - Number.isFinite(Number(C)) ? Number(C) : C, + let h = 1; + const S = r.filter(([W, g]) => W !== g).slice(0, 4e3).map(([W, g]) => [ + h++, + Number.isFinite(Number(W)) ? Number(W) : W, 0, Number.isFinite(Number(g)) ? Number(g) : g, 0, "LINK" ]); - return { id: "synthetic", nodes: o, links: Z, extra: { synthetic: !0 } }; + return { id: "synthetic", nodes: o, links: S, extra: { synthetic: !0 } }; } const tv = { key: 0, @@ -40156,7 +40193,7 @@ const tv = { }, rv = { style: { display: "grid", "grid-template-columns": "repeat(3, minmax(0, 1fr))", gap: "8px", "margin-bottom": "12px" } }, lv = { style: { padding: "8px 10px", "border-radius": "10px", background: "rgba(255,255,255,0.04)", border: "1px solid rgba(255,255,255,0.10)" } }, av = { style: { "font-size": "18px", "font-weight": "700", color: "rgba(255,255,255,0.94)", "margin-top": "2px" } }, cv = { style: { padding: "8px 10px", "border-radius": "10px", background: "rgba(255,255,255,0.04)", border: "1px solid rgba(255,255,255,0.10)" } }, sv = { style: { "font-size": "18px", "font-weight": "700", color: "rgba(255,255,255,0.94)", "margin-top": "2px" } }, dv = { style: { padding: "8px 10px", "border-radius": "10px", background: "rgba(255,255,255,0.04)", border: "1px solid rgba(255,255,255,0.10)" } }, uv = { style: { "font-size": "18px", "font-weight": "700", color: "rgba(255,255,255,0.94)", "margin-top": "2px" } }, mv = { style: { display: "flex", "align-items": "center", "justify-content": "space-between", gap: "10px", "margin-top": "8px" } }, gv = { style: { display: "flex", "flex-wrap": "wrap", gap: "6px", "align-items": "center" } }, Iv = ["title", "onClick"], bv = ["title"], pv = { key: 0, style: { display: "grid", "grid-template-columns": "repeat(auto-fit, minmax(180px, 1fr))", gap: "8px", "align-items": "stretch", "margin-top": "10px", "margin-bottom": "10px" } -}, yv = ["onClick"], fv = { style: { display: "flex", "flex-direction": "column", gap: "2px", "min-width": "0" } }, hv = { style: { "font-size": "13px", "font-weight": "600" } }, Cv = { style: { "font-size": "11px", color: "rgba(255,255,255,0.58)" } }, Zv = { style: { display: "flex", gap: "10px", "align-items": "stretch", "margin-top": "10px" } }, Av = { style: { display: "flex", "justify-content": "space-between", "align-items": "center", gap: "10px", "margin-top": "8px", "font-size": "11px", color: "rgba(255,255,255,0.58)" } }, Wv = ["open"], wv = { style: { background: "rgba(0,0,0,0.5)", padding: "10px", "border-radius": "6px", "font-size": "11px", overflow: "auto", "max-height": "180px", margin: "10px 0 0 0", color: "#90CAF9", "font-family": "'Consolas', 'Monaco', monospace" } }, zm = 1, Jm = 8, Mv = { +}, yv = ["onClick"], fv = { style: { display: "flex", "flex-direction": "column", gap: "2px", "min-width": "0" } }, Cv = { style: { "font-size": "13px", "font-weight": "600" } }, hv = { style: { "font-size": "11px", color: "rgba(255,255,255,0.58)" } }, Zv = { style: { display: "flex", gap: "10px", "align-items": "stretch", "margin-top": "10px" } }, Av = { style: { display: "flex", "justify-content": "space-between", "align-items": "center", gap: "10px", "margin-top": "8px", "font-size": "11px", color: "rgba(255,255,255,0.58)" } }, Wv = ["open"], wv = { style: { background: "rgba(0,0,0,0.5)", padding: "10px", "border-radius": "6px", "font-size": "11px", overflow: "auto", "max-height": "180px", margin: "10px 0 0 0", color: "#90CAF9", "font-family": "'Consolas', 'Monaco', monospace" } }, zm = 1, Jm = 8, Mv = { __name: "SidebarWorkflowSection", props: { asset: { type: Object, required: !0 } @@ -40180,29 +40217,29 @@ const tv = { { key: "compact", label: "Compact", height: 120 }, { key: "comfortable", label: "Comfort", height: 160 }, { key: "expanded", label: "Expanded", height: 220 } - ]), r = Ae(null), l = Ae(!1), a = Ae(!1), c = Ae(h()), s = Ae({ ...i }), d = Ae("crosshair"), u = Ae(""); - let I = null, y = null, S = null; - function Z(j, O, D) { - const q = Number(j); - return Number.isFinite(q) ? Math.max(O, Math.min(D, q)) : O; + ]), r = We(null), l = We(!1), a = We(!1), c = We(C()), s = We({ ...i }), d = We("crosshair"), u = We(""); + let I = null, A = null, h = null; + function S(v, F, D) { + const q = Number(v); + return Number.isFinite(q) ? Math.max(F, Math.min(D, q)) : F; } - function C(j) { - !j || typeof j != "object" || (s.value = { + function W(v) { + !v || typeof v != "object" || (s.value = { ...s.value, - zoom: Z(j.zoom ?? s.value.zoom, zm, Jm), - centerX: Number.isFinite(Number(j.centerX)) ? Number(j.centerX) : null, - centerY: Number.isFinite(Number(j.centerY)) ? Number(j.centerY) : null + zoom: S(v.zoom ?? s.value.zoom, zm, Jm), + centerX: Number.isFinite(Number(v.centerX)) ? Number(v.centerX) : null, + centerY: Number.isFinite(Number(v.centerY)) ? Number(v.centerY) : null }); } function g() { s.value = { ...i }, u.value = ""; } - function A(j) { - const O = (j == null ? void 0 : j.metadata_raw) ?? null; - if (!O) return null; - if (typeof O == "object") return O; - if (typeof O == "string") { - const D = O.trim(); + function y(v) { + const F = (v == null ? void 0 : v.metadata_raw) ?? null; + if (!F) return null; + if (typeof F == "object") return F; + if (typeof F == "string") { + const D = F.trim(); if (!D) return null; try { const q = JSON.parse(D); @@ -40213,12 +40250,12 @@ const tv = { } return null; } - function p(j) { + function p(v) { try { - const O = Object.entries(j || {}); - if (!O.length) return !1; + const F = Object.entries(v || {}); + if (!F.length) return !1; let D = 0; - for (const [, q] of O.slice(0, 50)) + for (const [, q] of F.slice(0, 50)) if (!(!q || typeof q != "object") && (q.inputs && typeof q.inputs == "object" && (D += 1), D >= 2)) return !0; } catch { @@ -40226,8 +40263,8 @@ const tv = { } return !1; } - function b(j) { - const O = A(j), D = (j == null ? void 0 : j.workflow) || (j == null ? void 0 : j.Workflow) || (j == null ? void 0 : j.comfy_workflow) || (O == null ? void 0 : O.workflow) || (O == null ? void 0 : O.Workflow) || (O == null ? void 0 : O.comfy_workflow) || null; + function b(v) { + const F = y(v), D = (v == null ? void 0 : v.workflow) || (v == null ? void 0 : v.Workflow) || (v == null ? void 0 : v.comfy_workflow) || (F == null ? void 0 : F.workflow) || (F == null ? void 0 : F.Workflow) || (F == null ? void 0 : F.comfy_workflow) || null; if (!D) return null; if (typeof D == "object") return D; if (typeof D == "string") { @@ -40241,8 +40278,8 @@ const tv = { } return null; } - function L(j) { - const O = A(j), D = (j == null ? void 0 : j.prompt) || (j == null ? void 0 : j.Prompt) || (O == null ? void 0 : O.prompt) || (O == null ? void 0 : O.Prompt) || null; + function L(v) { + const F = y(v), D = (v == null ? void 0 : v.prompt) || (v == null ? void 0 : v.Prompt) || (F == null ? void 0 : F.prompt) || (F == null ? void 0 : F.Prompt) || null; if (!D) return null; if (typeof D == "object") return p(D) ? D : null; if (typeof D == "string") { @@ -40257,71 +40294,71 @@ const tv = { } return null; } - function h() { - var j, O, D, q; + function C() { + var v, F, D, q; try { - const ee = Xn == null ? void 0 : Xn(), ce = ee == null ? void 0 : ee.workflowMinimap; - if (ce && typeof ce == "object") - return { ...n, ...ce }; + const ee = kn == null ? void 0 : kn(), ae = ee == null ? void 0 : ee.workflowMinimap; + if (ae && typeof ae == "object") + return { ...n, ...ae }; } catch (ee) { - (j = console.debug) == null || j.call(console, ee); + (v = console.debug) == null || v.call(console, ee); } try { - const ee = (O = localStorage == null ? void 0 : localStorage.getItem) == null ? void 0 : O.call(localStorage, Od); + const ee = (F = localStorage == null ? void 0 : localStorage.getItem) == null ? void 0 : F.call(localStorage, Fd); if (!ee) return { ...n }; - const ce = JSON.parse(ee); - if (!ce || typeof ce != "object") return { ...n }; - const ue = { ...n, ...ce }; + const ae = JSON.parse(ee); + if (!ae || typeof ae != "object") return { ...n }; + const ue = { ...n, ...ae }; try { - const U = Xn(); - U.workflowMinimap = { ...U.workflowMinimap, ...ue }, Be(U), (D = localStorage == null ? void 0 : localStorage.removeItem) == null || D.call(localStorage, Od); - } catch (U) { - (q = console.debug) == null || q.call(console, U); + const B = kn(); + B.workflowMinimap = { ...B.workflowMinimap, ...ue }, Ue(B), (D = localStorage == null ? void 0 : localStorage.removeItem) == null || D.call(localStorage, Fd); + } catch (B) { + (q = console.debug) == null || q.call(console, B); } return ue; } catch { return { ...n }; } } - function G(j) { - var O; + function G(v) { + var F; try { - const D = Xn(); - D.workflowMinimap = { ...D.workflowMinimap, ...j }, Be(D); + const D = kn(); + D.workflowMinimap = { ...D.workflowMinimap, ...v }, Ue(D); } catch (D) { - (O = console.debug) == null || O.call(console, D); + (F = console.debug) == null || F.call(console, D); } } - const W = ze(() => { - const j = b(t.asset), O = L(t.asset); - return !j && !O ? null : j || ev(O); + const Z = ze(() => { + const v = b(t.asset), F = L(t.asset); + return !v && !F ? null : v || ev(F); }), f = ze(() => { - var j; - return (j = t.asset) != null && j.has_generation_data ? "Complete" : "Partial"; + var v; + return (v = t.asset) != null && v.has_generation_data ? "Complete" : "Partial"; }), X = ze( - () => W.value ? JSON.stringify(W.value, null, 2) : "" + () => Z.value ? JSON.stringify(Z.value, null, 2) : "" ), x = ze(() => { - var ee, ce, ue, U, Q; - const j = W.value; - if (!j) + var ee, ae, ue, B, Q; + const v = Z.value; + if (!v) return { nodes: 0, links: 0, groups: 0, source: "" }; - const O = Array.isArray(j == null ? void 0 : j.nodes) ? j.nodes.length : 0, D = Array.isArray(j == null ? void 0 : j.links) && j.links.length || Array.isArray((ee = j == null ? void 0 : j.extra) == null ? void 0 : ee.links) && j.extra.links.length || 0, q = Array.isArray(j == null ? void 0 : j.groups) && j.groups.length || Array.isArray((ce = j == null ? void 0 : j.extra) == null ? void 0 : ce.groups) && j.extra.groups.length || Array.isArray((ue = j == null ? void 0 : j.extra) == null ? void 0 : ue.groupNodes) && j.extra.groupNodes.length || Array.isArray((U = j == null ? void 0 : j.extra) == null ? void 0 : U.group_nodes) && j.extra.group_nodes.length || 0; + const F = Array.isArray(v == null ? void 0 : v.nodes) ? v.nodes.length : 0, D = Array.isArray(v == null ? void 0 : v.links) && v.links.length || Array.isArray((ee = v == null ? void 0 : v.extra) == null ? void 0 : ee.links) && v.extra.links.length || 0, q = Array.isArray(v == null ? void 0 : v.groups) && v.groups.length || Array.isArray((ae = v == null ? void 0 : v.extra) == null ? void 0 : ae.groups) && v.extra.groups.length || Array.isArray((ue = v == null ? void 0 : v.extra) == null ? void 0 : ue.groupNodes) && v.extra.groupNodes.length || Array.isArray((B = v == null ? void 0 : v.extra) == null ? void 0 : B.group_nodes) && v.extra.group_nodes.length || 0; return { - nodes: O, + nodes: F, links: D, groups: q, - source: (Q = j == null ? void 0 : j.extra) != null && Q.synthetic ? "Synthetic" : "Embedded" + source: (Q = v == null ? void 0 : v.extra) != null && Q.synthetic ? "Synthetic" : "Embedded" }; - }), T = ze(() => { - var O; - const j = String(((O = c.value) == null ? void 0 : O.size) || "comfortable"); - return o.find((D) => D.key === j) || o[1]; - }), v = ze(() => `${T.value.height}px`), w = ze(() => [ + }), K = ze(() => { + var F; + const v = String(((F = c.value) == null ? void 0 : F.size) || "comfortable"); + return o.find((D) => D.key === v) || o[1]; + }), j = ze(() => `${K.value.height}px`), w = ze(() => [ { key: "showNodeLabels", label: "Node Labels", iconClass: "pi pi-tag" }, { key: "nodeColors", label: "Node Colors", iconClass: "pi pi-palette" }, { key: "showLinks", label: "Show Links", iconClass: "pi pi-share-alt" }, @@ -40335,192 +40372,192 @@ const tv = { { key: "showViewport", label: "Show Viewport", iconClass: "pi pi-window-maximize" } ]); function R() { - const j = r.value, O = W.value; - if (!j || !O) return; - const D = Math.max(1, j.clientWidth || 320), q = Math.max(1, j.clientHeight || 120), ee = Math.max(1, Math.min(2, window.devicePixelRatio || 1)); - j.width = Math.floor(D * ee), j.height = Math.floor(q * ee); - const ce = j.getContext("2d"); - ce && ce.setTransform(ee, 0, 0, ee, 0, 0), y = $j(j, O, { + const v = r.value, F = Z.value; + if (!v || !F) return; + const D = Math.max(1, v.clientWidth || 320), q = Math.max(1, v.clientHeight || 120), ee = Math.max(1, Math.min(2, window.devicePixelRatio || 1)); + v.width = Math.floor(D * ee), v.height = Math.floor(q * ee); + const ae = v.getContext("2d"); + ae && ae.setTransform(ee, 0, 0, ee, 0, 0), A = $j(v, F, { ...c.value, view: s.value - }) || null, C(y == null ? void 0 : y.resolvedView); + }) || null, W(A == null ? void 0 : A.resolvedView); } - function Y() { - const j = (window == null ? void 0 : window.app) || null, O = (j == null ? void 0 : j.canvas) || null, D = (O == null ? void 0 : O.ds) || null, q = (O == null ? void 0 : O.canvas) || (O == null ? void 0 : O.el) || null; - if (!O || !D || !q) return null; - const ee = Number(D == null ? void 0 : D.scale), ce = Number((q == null ? void 0 : q.width) || (q == null ? void 0 : q.clientWidth) || 0), ue = Number((q == null ? void 0 : q.height) || (q == null ? void 0 : q.clientHeight) || 0); - return !Number.isFinite(ee) || ee <= 0 || !(ce > 0) || !(ue > 0) ? null : { app: j, graphCanvas: O, ds: D, canvas: q, scale: ee, width: ce, height: ue }; + function V() { + const v = (window == null ? void 0 : window.app) || null, F = (v == null ? void 0 : v.canvas) || null, D = (F == null ? void 0 : F.ds) || null, q = (F == null ? void 0 : F.canvas) || (F == null ? void 0 : F.el) || null; + if (!F || !D || !q) return null; + const ee = Number(D == null ? void 0 : D.scale), ae = Number((q == null ? void 0 : q.width) || (q == null ? void 0 : q.clientWidth) || 0), ue = Number((q == null ? void 0 : q.height) || (q == null ? void 0 : q.clientHeight) || 0); + return !Number.isFinite(ee) || ee <= 0 || !(ae > 0) || !(ue > 0) ? null : { app: v, graphCanvas: F, ds: D, canvas: q, scale: ee, width: ae, height: ue }; } - function F(j, O, D) { - if (Array.isArray(j == null ? void 0 : j.offset)) { - j.offset[0] = O, j.offset[1] = D; + function O(v, F, D) { + if (Array.isArray(v == null ? void 0 : v.offset)) { + v.offset[0] = F, v.offset[1] = D; return; } - j != null && j.offset && typeof j.offset == "object" && (j.offset.x = O, j.offset.y = D); + v != null && v.offset && typeof v.offset == "object" && (v.offset.x = F, v.offset.y = D); } - function N(j, O) { - var D, q, ee, ce, ue; + function k(v, F) { + var D, q, ee, ae, ue; try { - (D = O == null ? void 0 : O.setDirty) == null || D.call(O, !0, !0); - } catch (U) { - (q = console.debug) == null || q.call(console, U); + (D = F == null ? void 0 : F.setDirty) == null || D.call(F, !0, !0); + } catch (B) { + (q = console.debug) == null || q.call(console, B); } try { - (ce = (ee = j == null ? void 0 : j.graph) == null ? void 0 : ee.setDirtyCanvas) == null || ce.call(ee, !0, !0); - } catch (U) { - (ue = console.debug) == null || ue.call(console, U); + (ae = (ee = v == null ? void 0 : v.graph) == null ? void 0 : ee.setDirtyCanvas) == null || ae.call(ee, !0, !0); + } catch (B) { + (ue = console.debug) == null || ue.call(console, B); } } - function V(j) { - if (!j) return; - const O = Y(); - if (!O) return; - const D = Math.max(1, Number(window.devicePixelRatio) || 1), q = -Number(j.x) + O.width * 0.5 / (O.scale * D), ee = -Number(j.y) + O.height * 0.5 / (O.scale * D); - !Number.isFinite(q) || !Number.isFinite(ee) || (F(O.ds, q, ee), N(O.app, O.graphCanvas)); + function Y(v) { + if (!v) return; + const F = V(); + if (!F) return; + const D = Math.max(1, Number(window.devicePixelRatio) || 1), q = -Number(v.x) + F.width * 0.5 / (F.scale * D), ee = -Number(v.y) + F.height * 0.5 / (F.scale * D); + !Number.isFinite(q) || !Number.isFinite(ee) || (O(F.ds, q, ee), k(F.app, F.graphCanvas)); } - function k(j) { + function N(v) { var q; - const O = r.value; - if (!O) return null; - const D = (q = O.getBoundingClientRect) == null ? void 0 : q.call(O); + const F = r.value; + if (!F) return null; + const D = (q = F.getBoundingClientRect) == null ? void 0 : q.call(F); return D ? { - x: Number(j == null ? void 0 : j.clientX) - D.left, - y: Number(j == null ? void 0 : j.clientY) - D.top + x: Number(v == null ? void 0 : v.clientX) - D.left, + y: Number(v == null ? void 0 : v.clientY) - D.top } : null; } - function K(j) { - const O = k(j); - return !O || !(y != null && y.canvasToWorld) ? null : { - local: O, - world: y.canvasToWorld(O.x, O.y) + function U(v) { + const F = N(v); + return !F || !(A != null && A.canvasToWorld) ? null : { + local: F, + world: A.canvasToWorld(F.x, F.y) }; } - function z(j) { - const O = k(j), D = O && (y != null && y.hitTestNode) ? y.hitTestNode(O.x, O.y) : null, q = (D == null ? void 0 : D.id) !== null && (D == null ? void 0 : D.id) !== void 0 ? String(D.id) : null, ee = s.value.hoveredNodeId !== null && s.value.hoveredNodeId !== void 0 ? String(s.value.hoveredNodeId) : null; + function z(v) { + const F = N(v), D = F && (A != null && A.hitTestNode) ? A.hitTestNode(F.x, F.y) : null, q = (D == null ? void 0 : D.id) !== null && (D == null ? void 0 : D.id) !== void 0 ? String(D.id) : null, ee = s.value.hoveredNodeId !== null && s.value.hoveredNodeId !== void 0 ? String(s.value.hoveredNodeId) : null; u.value = (D == null ? void 0 : D.label) || "", q !== ee && (s.value = { ...s.value, hoveredNodeId: q }, R()); } - function B(j) { - j && (V(j), s.value = { + function T(v) { + v && (Y(v), s.value = { ...s.value, - centerX: Number(j.x), - centerY: Number(j.y) + centerX: Number(v.x), + centerY: Number(v.y) }, R()); } - function J(j) { - var D, q, ee, ce; - if (Number((j == null ? void 0 : j.button) ?? 0) !== 0) return; - const O = K(j); - O && (S = j.pointerId ?? 1, d.value = "grabbing", (q = (D = r.value) == null ? void 0 : D.setPointerCapture) == null || q.call(D, S), B(O.world), z(j), (ee = j.preventDefault) == null || ee.call(j), (ce = j.stopPropagation) == null || ce.call(j)); + function J(v) { + var D, q, ee, ae; + if (Number((v == null ? void 0 : v.button) ?? 0) !== 0) return; + const F = U(v); + F && (h = v.pointerId ?? 1, d.value = "grabbing", (q = (D = r.value) == null ? void 0 : D.setPointerCapture) == null || q.call(D, h), T(F.world), z(v), (ee = v.preventDefault) == null || ee.call(v), (ae = v.stopPropagation) == null || ae.call(v)); } - function P(j) { - var O, D; - if (S !== null && j.pointerId === S) { - const q = K(j); - q && B(q.world), (O = j.preventDefault) == null || O.call(j), (D = j.stopPropagation) == null || D.call(j); + function P(v) { + var F, D; + if (h !== null && v.pointerId === h) { + const q = U(v); + q && T(q.world), (F = v.preventDefault) == null || F.call(v), (D = v.stopPropagation) == null || D.call(v); return; } - z(j); + z(v); } - function H(j) { - var O, D; - S !== null && (j == null ? void 0 : j.pointerId) === S && ((D = (O = r.value) == null ? void 0 : O.releasePointerCapture) == null || D.call(O, S), S = null, d.value = "crosshair"), (j == null ? void 0 : j.type) === "pointerleave" && (u.value = "", s.value.hoveredNodeId !== null && (s.value = { + function E(v) { + var F, D; + h !== null && (v == null ? void 0 : v.pointerId) === h && ((D = (F = r.value) == null ? void 0 : F.releasePointerCapture) == null || D.call(F, h), h = null, d.value = "crosshair"), (v == null ? void 0 : v.type) === "pointerleave" && (u.value = "", s.value.hoveredNodeId !== null && (s.value = { ...s.value, hoveredNodeId: null }, R())); } - function $(j) { - var le, de, se, ge, je, Se; - const O = K(j), D = y == null ? void 0 : y.resolvedView; - if (!O || !D) return; - const q = Z(Number(j == null ? void 0 : j.deltaY) || 0, -240, 240), ee = Math.exp(-q * 25e-4), ce = Z( + function $(v) { + var le, ce, de, ge, Le, xe; + const F = U(v), D = A == null ? void 0 : A.resolvedView; + if (!F || !D) return; + const q = S(Number(v == null ? void 0 : v.deltaY) || 0, -240, 240), ee = Math.exp(-q * 25e-4), ae = S( (Number(s.value.zoom) || 1) * ee, zm, Jm ); - if (Math.abs(ce - (Number(s.value.zoom) || 1)) < 1e-3) { - (le = j.preventDefault) == null || le.call(j), (de = j.stopPropagation) == null || de.call(j); + if (Math.abs(ae - (Number(s.value.zoom) || 1)) < 1e-3) { + (le = v.preventDefault) == null || le.call(v), (ce = v.stopPropagation) == null || ce.call(v); return; } - const ue = Math.max(1, Number(((se = y == null ? void 0 : y.bounds) == null ? void 0 : se.width) || 1) / ce), U = Math.max(1, Number(((ge = y == null ? void 0 : y.bounds) == null ? void 0 : ge.height) || 1) / ce), Q = Z( - (Number(O.world.x) - Number(D.viewMinX || 0)) / Math.max(1, Number(D.visibleW || 1)), + const ue = Math.max(1, Number(((de = A == null ? void 0 : A.bounds) == null ? void 0 : de.width) || 1) / ae), B = Math.max(1, Number(((ge = A == null ? void 0 : A.bounds) == null ? void 0 : ge.height) || 1) / ae), Q = S( + (Number(F.world.x) - Number(D.viewMinX || 0)) / Math.max(1, Number(D.visibleW || 1)), 0, 1 - ), _ = Z( - (Number(O.world.y) - Number(D.viewMinY || 0)) / Math.max(1, Number(D.visibleH || 1)), + ), _ = S( + (Number(F.world.y) - Number(D.viewMinY || 0)) / Math.max(1, Number(D.visibleH || 1)), 0, 1 ); s.value = { ...s.value, - zoom: ce, - centerX: Number(O.world.x) + (0.5 - Q) * ue, - centerY: Number(O.world.y) + (0.5 - _) * U - }, R(), z(j), (je = j.preventDefault) == null || je.call(j), (Se = j.stopPropagation) == null || Se.call(j); + zoom: ae, + centerX: Number(F.world.x) + (0.5 - Q) * ue, + centerY: Number(F.world.y) + (0.5 - _) * B + }, R(), z(v), (Le = v.preventDefault) == null || Le.call(v), (xe = v.stopPropagation) == null || xe.call(v); } - function E(j) { + function H(v) { var D, q; - const O = K(j); - g(), O && V(O.world), R(), (D = j.preventDefault) == null || D.call(j), (q = j.stopPropagation) == null || q.call(j); + const F = U(v); + g(), F && Y(F.world), R(), (D = v.preventDefault) == null || D.call(v), (q = v.stopPropagation) == null || q.call(v); } - function oe(j) { - var O; + function ne(v) { + var F; c.value = { ...c.value, - [j]: !((O = c.value) != null && O[j]) + [v]: !((F = c.value) != null && F[v]) }, G(c.value); } - function M(j) { - o.some((O) => O.key === j) && (c.value = { + function M(v) { + o.some((F) => F.key === v) && (c.value = { ...c.value, - size: j + size: v }, G(c.value)); } return Dn(() => { r.value && typeof ResizeObserver == "function" && (I = new ResizeObserver(() => R()), I.observe(r.value)), R(); - }), cn(W, () => { + }), dn(Z, () => { g(), R(); - }, { flush: "post" }), cn(c, () => { + }, { flush: "post" }), dn(c, () => { R(); - }, { deep: !0, flush: "post" }), cn(l, () => { + }, { deep: !0, flush: "post" }), dn(l, () => { R(); }, { flush: "post" }), xr(() => { - var j, O; + var v, F; try { - (j = I == null ? void 0 : I.disconnect) == null || j.call(I); + (v = I == null ? void 0 : I.disconnect) == null || v.call(I); } catch (D) { - (O = console.debug) == null || O.call(console, D); + (F = console.debug) == null || F.call(console, D); } - I = null, S = null; - }), (j, O) => W.value ? (be(), Ce("div", tv, [ - O[7] || (O[7] = ie("div", { style: { "font-size": "13px", "font-weight": "600", color: "var(--fg-color, #eaeaea)", "margin-bottom": "12px", "text-transform": "uppercase", "letter-spacing": "0.5px" } }, " ComfyUI Workflow ", -1)), - ie("div", nv, [ - ie("div", iv, Ye(f.value), 1), - x.value.source ? (be(), Ce("div", ov, Ye(x.value.source), 1)) : ft("", !0) + I = null, h = null; + }), (v, F) => Z.value ? (be(), Ze("div", tv, [ + F[7] || (F[7] = te("div", { style: { "font-size": "13px", "font-weight": "600", color: "var(--fg-color, #eaeaea)", "margin-bottom": "12px", "text-transform": "uppercase", "letter-spacing": "0.5px" } }, " ComfyUI Workflow ", -1)), + te("div", nv, [ + te("div", iv, Ne(f.value), 1), + x.value.source ? (be(), Ze("div", ov, Ne(x.value.source), 1)) : yt("", !0) ]), - ie("div", rv, [ - ie("div", lv, [ - O[2] || (O[2] = ie("div", { style: { "font-size": "10px", "font-weight": "700", color: "rgba(255,255,255,0.55)", "text-transform": "uppercase", "letter-spacing": "0.4px" } }, "Nodes", -1)), - ie("div", av, Ye(x.value.nodes), 1) + te("div", rv, [ + te("div", lv, [ + F[2] || (F[2] = te("div", { style: { "font-size": "10px", "font-weight": "700", color: "rgba(255,255,255,0.55)", "text-transform": "uppercase", "letter-spacing": "0.4px" } }, "Nodes", -1)), + te("div", av, Ne(x.value.nodes), 1) ]), - ie("div", cv, [ - O[3] || (O[3] = ie("div", { style: { "font-size": "10px", "font-weight": "700", color: "rgba(255,255,255,0.55)", "text-transform": "uppercase", "letter-spacing": "0.4px" } }, "Links", -1)), - ie("div", sv, Ye(x.value.links), 1) + te("div", cv, [ + F[3] || (F[3] = te("div", { style: { "font-size": "10px", "font-weight": "700", color: "rgba(255,255,255,0.55)", "text-transform": "uppercase", "letter-spacing": "0.4px" } }, "Links", -1)), + te("div", sv, Ne(x.value.links), 1) ]), - ie("div", dv, [ - O[4] || (O[4] = ie("div", { style: { "font-size": "10px", "font-weight": "700", color: "rgba(255,255,255,0.55)", "text-transform": "uppercase", "letter-spacing": "0.4px" } }, "Groups", -1)), - ie("div", uv, Ye(x.value.groups), 1) + te("div", dv, [ + F[4] || (F[4] = te("div", { style: { "font-size": "10px", "font-weight": "700", color: "rgba(255,255,255,0.55)", "text-transform": "uppercase", "letter-spacing": "0.4px" } }, "Groups", -1)), + te("div", uv, Ne(x.value.groups), 1) ]) ]), - ie("div", mv, [ - ie("div", gv, [ - (be(!0), Ce(Nt, null, Cn(xe(o), (D) => (be(), Ce("button", { + te("div", mv, [ + te("div", gv, [ + (be(!0), Ze(Nt, null, Zn(ve(o), (D) => (be(), Ze("button", { key: D.key, type: "button", title: `${D.label} minimap`, - style: Lt({ + style: vt({ appearance: "none", border: c.value.size === D.key ? "1px solid rgba(33,150,243,0.55)" : "1px solid rgba(255,255,255,0.12)", borderRadius: "999px", @@ -40532,25 +40569,25 @@ const tv = { cursor: "pointer" }), onClick: (q) => M(D.key) - }, Ye(D.label), 13, Iv))), 128)) + }, Ne(D.label), 13, Iv))), 128)) ]), - ie("button", { + te("button", { type: "button", class: "mjr-btn mjr-icon-btn", - title: xe(m)("tooltip.minimapSettings", "Minimap settings"), + title: ve(m)("tooltip.minimapSettings", "Minimap settings"), style: { width: "28px", height: "28px", "border-radius": "8px", display: "inline-flex", "align-items": "center", "justify-content": "center", border: "1px solid var(--mjr-border, rgba(255,255,255,0.12))", background: "rgba(255,255,255,0.06)", color: "rgba(255,255,255,0.9)", cursor: "pointer" }, - onClick: O[0] || (O[0] = (D) => l.value = !l.value) - }, [...O[5] || (O[5] = [ - ie("i", { class: "pi pi-sliders-h" }, null, -1) + onClick: F[0] || (F[0] = (D) => l.value = !l.value) + }, [...F[5] || (F[5] = [ + te("i", { class: "pi pi-sliders-h" }, null, -1) ])], 8, bv) ]), - l.value ? (be(), Ce("div", pv, [ - (be(!0), Ce(Nt, null, Cn(w.value, (D) => { - var q, ee, ce, ue, U, Q; - return be(), Ce("button", { + l.value ? (be(), Ze("div", pv, [ + (be(!0), Ze(Nt, null, Zn(w.value, (D) => { + var q, ee, ae, ue, B, Q; + return be(), Ze("button", { key: D.key, type: "button", - style: Lt({ + style: vt({ display: "flex", alignItems: "center", gap: "10px", @@ -40562,44 +40599,44 @@ const tv = { color: "rgba(255,255,255,0.92)", textAlign: "left" }), - onClick: (_) => oe(D.key) + onClick: (_) => ne(D.key) }, [ - ie("span", { - style: Lt({ + te("span", { + style: vt({ width: "22px", height: "22px", borderRadius: "6px", display: "inline-flex", alignItems: "center", justifyContent: "center", - background: (ce = c.value) != null && ce[D.key] ? "rgba(76,175,80,0.95)" : "rgba(255,255,255,0.08)", + background: (ae = c.value) != null && ae[D.key] ? "rgba(76,175,80,0.95)" : "rgba(255,255,255,0.08)", border: (ue = c.value) != null && ue[D.key] ? "1px solid rgba(76,175,80,0.35)" : "1px solid rgba(255,255,255,0.12)", flex: "0 0 auto" }) }, [ - ie("i", { + te("i", { class: "pi pi-check", - style: Lt({ fontSize: "12px", opacity: (U = c.value) != null && U[D.key] ? "1" : "0" }) + style: vt({ fontSize: "12px", opacity: (B = c.value) != null && B[D.key] ? "1" : "0" }) }, null, 4) ], 4), - ie("i", { - class: Zn(D.iconClass), + te("i", { + class: An(D.iconClass), style: { "font-size": "18px", opacity: "0.9", width: "18px" } }, null, 2), - ie("div", fv, [ - ie("div", hv, Ye(D.label), 1), - ie("div", Cv, Ye((Q = c.value) != null && Q[D.key] ? "On" : "Off"), 1) + te("div", fv, [ + te("div", Cv, Ne(D.label), 1), + te("div", hv, Ne((Q = c.value) != null && Q[D.key] ? "On" : "Off"), 1) ]) ], 12, yv); }), 128)) - ])) : ft("", !0), - ie("div", Zv, [ - ie("canvas", { + ])) : yt("", !0), + te("div", Zv, [ + te("canvas", { ref_key: "canvasRef", ref: r, - style: Lt({ + style: vt({ width: "100%", - height: v.value, + height: j.value, cursor: d.value, touchAction: "none", borderRadius: "10px", @@ -40610,31 +40647,31 @@ const tv = { }), onPointerdown: J, onPointermove: P, - onPointerup: H, - onPointercancel: H, - onPointerleave: H, + onPointerup: E, + onPointercancel: E, + onPointerleave: E, onWheel: $, - onDblclick: E + onDblclick: H }, null, 36) ]), - ie("div", Av, [ - ie("span", null, Ye(u.value || "Click/drag to navigate · wheel to zoom"), 1), - ie("span", null, Ye(Math.round((s.value.zoom || 1) * 100)) + "% · " + Ye(T.value.label), 1) + te("div", Av, [ + te("span", null, Ne(u.value || "Click/drag to navigate · wheel to zoom"), 1), + te("span", null, Ne(Math.round((s.value.zoom || 1) * 100)) + "% · " + Ne(K.value.label), 1) ]), - ie("details", { + te("details", { open: a.value, style: { "margin-top": "10px" }, - onToggle: O[1] || (O[1] = (D) => a.value = D.target.open) + onToggle: F[1] || (F[1] = (D) => a.value = D.target.open) }, [ - O[6] || (O[6] = ie("summary", { style: { cursor: "pointer", color: "var(--mjr-muted, rgba(255,255,255,0.65))", "font-size": "12px", "user-select": "none" } }, " Show raw JSON ", -1)), - ie("pre", wv, Ye(X.value), 1) + F[6] || (F[6] = te("summary", { style: { cursor: "pointer", color: "var(--mjr-muted, rgba(255,255,255,0.65))", "font-size": "12px", "user-select": "none" } }, " Show raw JSON ", -1)), + te("pre", wv, Ne(X.value), 1) ], 40, Wv) - ])) : ft("", !0); + ])) : yt("", !0); } -}, Sv = { +}, Gv = { class: "mjr-sidebar-section", style: { background: "rgba(255, 255, 255, 0.03)", border: "1px solid var(--mjr-border, rgba(255, 255, 255, 0.12))", "border-radius": "8px", padding: "10px" } -}, Gv = { style: { display: "flex", "flex-direction": "column", gap: "6px" } }, xv = { style: { "font-size": "12px", opacity: "0.68", "min-width": "92px" } }, jv = ["title"], vv = { +}, Sv = { style: { display: "flex", "flex-direction": "column", gap: "6px" } }, xv = { style: { "font-size": "12px", opacity: "0.68", "min-width": "92px" } }, jv = ["title"], vv = { __name: "SidebarFolderSection", props: { asset: { type: Object, required: !0 } @@ -40651,32 +40688,32 @@ const tv = { return `${a.toFixed(c > 0 ? 1 : 0)} ${l[c]}`; } const i = ze(() => { - const o = t.asset || {}, r = o.folder_info || o.folderInfo || {}, l = String(r.path || o.filepath || o.subfolder || ""), a = String(r.name || o.filename || "").trim(), c = Number(r.files ?? 0), s = Number(r.folders ?? 0), d = Number(r.size ?? 0), u = Number(r.mtime ?? o.mtime ?? 0), I = Number(r.ctime ?? 0), y = !!r.truncated, S = [ + const o = t.asset || {}, r = o.folder_info || o.folderInfo || {}, l = String(r.path || o.filepath || o.subfolder || ""), a = String(r.name || o.filename || "").trim(), c = Number(r.files ?? 0), s = Number(r.folders ?? 0), d = Number(r.size ?? 0), u = Number(r.mtime ?? o.mtime ?? 0), I = Number(r.ctime ?? 0), A = !!r.truncated, h = [ { label: "Name", value: a || "-" }, { label: "Path", value: l || "-" }, { label: "Folders", value: Number.isFinite(s) ? String(s) : "-" }, { label: "Files", value: Number.isFinite(c) ? String(c) : "-" }, { label: "Size", value: n(d) } ]; - return I > 0 && S.push({ label: "Created", value: `${za(I) || "-"} ${Ja(I) || ""}`.trim() }), u > 0 && S.push({ label: "Modified", value: `${za(u) || "-"} ${Ja(u) || ""}`.trim() }), y && S.push({ label: "Note", value: "Scan was truncated for performance", valueStyle: "color:#FFB74D;font-weight:600;" }), S; + return I > 0 && h.push({ label: "Created", value: `${Ja(I) || "-"} ${Ta(I) || ""}`.trim() }), u > 0 && h.push({ label: "Modified", value: `${Ja(u) || "-"} ${Ta(u) || ""}`.trim() }), A && h.push({ label: "Note", value: "Scan was truncated for performance", valueStyle: "color:#FFB74D;font-weight:600;" }), h; }); - return (o, r) => (be(), Ce("div", Sv, [ - r[0] || (r[0] = ie("div", { style: { "font-size": "12px", "font-weight": "700", color: "#26a69a", "margin-bottom": "8px", "text-transform": "uppercase", "letter-spacing": "0.4px" } }, " Folder Details ", -1)), - ie("div", Gv, [ - (be(!0), Ce(Nt, null, Cn(i.value, (l) => (be(), Ce("div", { + return (o, r) => (be(), Ze("div", Gv, [ + r[0] || (r[0] = te("div", { style: { "font-size": "12px", "font-weight": "700", color: "#26a69a", "margin-bottom": "8px", "text-transform": "uppercase", "letter-spacing": "0.4px" } }, " Folder Details ", -1)), + te("div", Sv, [ + (be(!0), Ze(Nt, null, Zn(i.value, (l) => (be(), Ze("div", { key: l.label, style: { display: "flex", gap: "10px", "align-items": "flex-start", "justify-content": "space-between" } }, [ - ie("div", xv, Ye(l.label), 1), - ie("div", { - style: Lt(l.valueStyle || "font-size: 12px; text-align: right; word-break: break-word"), + te("div", xv, Ne(l.label), 1), + te("div", { + style: vt(l.valueStyle || "font-size: 12px; text-align: right; word-break: break-word"), title: String(l.value || "") - }, Ye(l.value), 13, jv) + }, Ne(l.value), 13, jv) ]))), 128)) ]) ])); } -}, Lv = ["aria-busy", "aria-disabled", "aria-label", "aria-valuenow", "tabindex"], Vv = ["aria-label", "aria-pressed", "disabled", "onClick", "onMouseenter"], Yv = { +}, Lv = ["aria-busy", "aria-disabled", "aria-label", "aria-valuenow", "tabindex"], Yv = ["aria-label", "aria-pressed", "disabled", "onClick", "onMouseenter"], Vv = { __name: "RatingEditor", props: { asset: { @@ -40698,95 +40735,95 @@ const tv = { function n(X) { return Math.max(0, Math.min(5, Number(X) || 0)); } - const i = e, o = t, r = n(((f = i.asset) == null ? void 0 : f.rating) ?? i.modelValue), l = Ae(r), a = Ae(0), c = Ae(!1); + const i = e, o = t, r = n(((f = i.asset) == null ? void 0 : f.rating) ?? i.modelValue), l = We(r), a = We(0), c = We(!1); let s = r, d = r, u = null; const I = ze( () => a.value > 0 ? a.value : l.value - ), y = (X) => X <= I.value ? "#FFD45A" : "#555", S = (X) => X <= I.value ? "scale(1.1)" : "scale(1)", Z = (X) => Math.min(100 * 2 ** Math.max(0, X - 1), 2e3), C = (X) => new Promise((x) => setTimeout(x, X)); + ), A = (X) => X <= I.value ? "#FFD45A" : "#555", h = (X) => X <= I.value ? "scale(1.1)" : "scale(1)", S = (X) => Math.min(100 * 2 ** Math.max(0, X - 1), 2e3), W = (X) => new Promise((x) => setTimeout(x, X)); function g(X) { if (c.value) return; const x = n(X); s = x, d = x, x !== l.value && (l.value = x); } - function A(X = null) { - l.value = s, d = s, o("update:modelValue", s), X && Ze(X, "error"); + function y(X = null) { + l.value = s, d = s, o("update:modelValue", s), X && Ae(X, "error"); } async function p() { - var x, T, v, w, R; + var x, K, j, w, R; if (c.value) return; c.value = !0; const X = Date.now(); try { - let Y = 0; - for (; Y < 10; ) { + let V = 0; + for (; V < 10; ) { if (Date.now() - X > 3e4) { - A(m("toast.ratingUpdateFailed", "Rating update failed")); + y(m("toast.ratingUpdateFailed", "Rating update failed")); break; } - Y > 0 && await C(Z(Y)), Y += 1; - const F = n(d), N = typeof AbortController < "u" ? new AbortController() : null; - u = N; - let V = null; + V > 0 && await W(S(V)), V += 1; + const O = n(d), k = typeof AbortController < "u" ? new AbortController() : null; + u = k; + let Y = null; try { - V = await Ho(i.asset, F, N ? { signal: N.signal } : {}); - } catch (k) { - console.error("Failed to update rating:", k); + Y = await Eo(i.asset, O, k ? { signal: k.signal } : {}); + } catch (N) { + console.error("Failed to update rating:", N); } - if (!(V != null && V.ok)) { - if ((V == null ? void 0 : V.code) === "ABORTED" && d !== F) + if (!(Y != null && Y.ok)) { + if ((Y == null ? void 0 : Y.code) === "ABORTED" && d !== O) continue; - A( - (V == null ? void 0 : V.error) || m("toast.ratingUpdateFailed", "Rating update failed") + y( + (Y == null ? void 0 : Y.error) || m("toast.ratingUpdateFailed", "Rating update failed") ); break; } try { - const k = ((x = V == null ? void 0 : V.data) == null ? void 0 : x.asset_id) ?? null; - k != null && !fi(i.asset.id) && (i.asset.id = k); - } catch (k) { - (T = console.debug) == null || T.call(console, k); + const N = ((x = Y == null ? void 0 : Y.data) == null ? void 0 : x.asset_id) ?? null; + N != null && !fi(i.asset.id) && (i.asset.id = N); + } catch (N) { + (K = console.debug) == null || K.call(console, N); } - s = F, l.value = F; + s = O, l.value = O; try { - i.asset.rating = F; - } catch (k) { - (v = console.debug) == null || v.call(console, k); + i.asset.rating = O; + } catch (N) { + (j = console.debug) == null || j.call(console, N); } - if (o("update:modelValue", F), o("rating-change", { assetId: (w = i.asset) == null ? void 0 : w.id, rating: F }), oi(Fi, { + if (o("update:modelValue", O), o("rating-change", { assetId: (w = i.asset) == null ? void 0 : w.id, rating: O }), oi(Oi, { assetId: ((R = i.asset) == null ? void 0 : R.id) != null ? String(i.asset.id) : "", - rating: F - }), d === F) { - Ze(m("toast.ratingSetN", { n: F }), "success", 1e3); + rating: O + }), d === O) { + Ae(m("toast.ratingSetN", { n: O }), "success", 1e3); break; } } - Y >= 10 && A(m("toast.ratingUpdateFailed", "Rating update failed")); + V >= 10 && y(m("toast.ratingUpdateFailed", "Rating update failed")); } finally { u = null, c.value = !1; } } function b(X) { - var T, v; + var K, j; if (i.disabled) return; const x = n(X); d = x, l.value = x, a.value = 0, o("update:modelValue", x); try { - (T = u == null ? void 0 : u.abort) == null || T.call(u); + (K = u == null ? void 0 : u.abort) == null || K.call(u); } catch (w) { - (v = console.debug) == null || v.call(console, w); + (j = console.debug) == null || j.call(console, w); } p(); } function L(X) { b(X); } - function h(X) { + function C(X) { i.disabled || (a.value = X); } function G() { a.value = 0; } - function W(X) { + function Z(X) { if (i.disabled) return; let x = null; switch (X.key) { @@ -40813,15 +40850,15 @@ const tv = { var X, x; try { (X = u == null ? void 0 : u.abort) == null || X.call(u); - } catch (T) { - (x = console.debug) == null || x.call(console, T); + } catch (K) { + (x = console.debug) == null || x.call(console, K); } - }), cn( + }), dn( () => i.modelValue, (X) => { g(X); } - ), cn( + ), dn( () => { var X; return (X = i.asset) == null ? void 0 : X.rating; @@ -40829,9 +40866,9 @@ const tv = { (X) => { g(X); } - ), (X, x) => (be(), Ce("div", { + ), (X, x) => (be(), Ze("div", { class: "mjr-rating-editor", - style: Lt({ + style: vt({ display: "inline-flex", gap: "2px", pointerEvents: e.disabled ? "none" : "auto", @@ -40840,20 +40877,20 @@ const tv = { "aria-busy": c.value, "aria-disabled": e.disabled, role: "slider", - "aria-label": xe(m)("rating.label", "Rating"), + "aria-label": ve(m)("rating.label", "Rating"), "aria-valuemin": 0, "aria-valuemax": 5, "aria-valuenow": l.value, tabindex: e.disabled ? -1 : 0, - onKeydown: W + onKeydown: Z }, [ - (be(), Ce(Nt, null, Cn(5, (T) => ie("button", { - key: T, + (be(), Ze(Nt, null, Zn(5, (K) => te("button", { + key: K, type: "button", class: "mjr-rating-star", - style: Lt({ - color: y(T), - transform: S(T), + style: vt({ + color: A(K), + transform: h(K), fontSize: "16px", background: "none", border: "none", @@ -40861,22 +40898,22 @@ const tv = { padding: "0", transition: "all 0.15s ease" }), - "aria-label": xe(m)("rating.setN", { n: T }), - "aria-pressed": T <= l.value, + "aria-label": ve(m)("rating.setN", { n: K }), + "aria-pressed": K <= l.value, disabled: e.disabled, - onClick: (v) => L(T), - onMouseenter: (v) => h(T), + onClick: (j) => L(K), + onMouseenter: (j) => C(K), onMouseleave: G - }, " ★ ", 44, Vv)), 64)) + }, " ★ ", 44, Yv)), 64)) ], 44, Lv)); } -}, kv = /* @__PURE__ */ Vr(Yv, [["__scopeId", "data-v-6d012325"]]), Xv = { +}, Xv = /* @__PURE__ */ Yr(Vv, [["__scopeId", "data-v-6d012325"]]), Nv = { class: "mjr-sidebar-content", style: { flex: "1", "overflow-y": "auto", padding: "10px 12px", display: "flex", "flex-direction": "column", gap: "16px" } -}, Nv = { +}, kv = { class: "mjr-sidebar-rating-tags", style: { display: "flex", "flex-direction": "column", gap: "10px" } -}, Rv = { style: { display: "flex", "align-items": "center", gap: "8px" } }, Fv = { style: { display: "flex", "flex-direction": "column", gap: "4px" } }, Ov = { +}, Rv = { style: { display: "flex", "align-items": "center", gap: "8px" } }, Ov = { style: { display: "flex", "flex-direction": "column", gap: "4px" } }, Fv = { __name: "AssetSidebarContent", props: { asset: { type: Object, required: !0 }, @@ -40897,7 +40934,7 @@ const tv = { }), a = ze(() => { var s; try { - const d = Xn(); + const d = kn(); return !!(((s = d == null ? void 0 : d.sidebar) == null ? void 0 : s.showPreviewThumb) ?? !0); } catch { return !0; @@ -40907,46 +40944,46 @@ const tv = { var s; if (n.sidebar) try { - Ub(n.sidebar); + Bb(n.sidebar); } catch (d) { (s = console.debug) == null || s.call(console, d); } else i("close"); } - return (s, d) => (be(), Ce(Nt, null, [ - fn(Ox, { + return (s, d) => (be(), Ze(Nt, null, [ + Cn(Fx, { asset: e.asset, onClose: c }, null, 8, ["asset"]), - ie("div", Xv, [ + te("div", Nv, [ o.value ? (be(), Pi(vv, { key: 0, asset: e.asset - }, null, 8, ["asset"])) : (be(), Ce(Nt, { key: 1 }, [ - fn(Hx, { + }, null, 8, ["asset"])) : (be(), Ze(Nt, { key: 1 }, [ + Cn(Ex, { asset: e.asset, "show-preview-thumb": a.value }, null, 8, ["asset", "show-preview-thumb"]), - ie("div", Nv, [ - ie("div", Rv, [ - d[0] || (d[0] = ie("span", { style: { "font-size": "0.8em", opacity: "0.6", "min-width": "44px" } }, "Rating", -1)), - fn(kv, { + te("div", kv, [ + te("div", Rv, [ + d[0] || (d[0] = te("span", { style: { "font-size": "0.8em", opacity: "0.6", "min-width": "44px" } }, "Rating", -1)), + Cn(Xv, { asset: e.asset, "model-value": r.value }, null, 8, ["asset", "model-value"]) ]), - ie("div", Fv, [ - d[1] || (d[1] = ie("span", { style: { "font-size": "0.8em", opacity: "0.6" } }, "Tags", -1)), - fn(gd, { + te("div", Ov, [ + d[1] || (d[1] = te("span", { style: { "font-size": "0.8em", opacity: "0.6" } }, "Tags", -1)), + Cn(gd, { asset: e.asset, "model-value": l.value }, null, 8, ["asset", "model-value"]) ]) ]), - fn($x, { asset: e.asset }, null, 8, ["asset"]), - fn(qj, { asset: e.asset }, null, 8, ["asset"]), - fn(Mv, { asset: e.asset }, null, 8, ["asset"]) + Cn($x, { asset: e.asset }, null, 8, ["asset"]), + Cn(qj, { asset: e.asset }, null, 8, ["asset"]), + Cn(Mv, { asset: e.asset }, null, 8, ["asset"]) ], 64)) ]) ], 64)); @@ -40958,66 +40995,66 @@ const tv = { }, Jv = { __name: "SidebarSection", setup(e, { expose: t }) { - const n = Ae(null), { activeAsset: i, onUpdateCallback: o } = eM(); + const n = We(null), { activeAsset: i, onUpdateCallback: o } = e2(); return Dn(() => { - var I, y; + var I, A; const r = n.value; if (!r) return; r.style.flex = "0 0 0px", r.style.width = "0", r.style.maxWidth = "0", r.style.minWidth = "0", r.style.overflow = "hidden", r.style.borderLeft = "none", r.style.borderRight = "none", r._requestSeq = 0, r._currentAsset = null, r._currentFullAsset = null, r._ratingTagsSection = null; - const l = (S) => { - var C, g, A; - const Z = ((C = r._currentAsset) == null ? void 0 : C.id) ?? ((g = r._currentFullAsset) == null ? void 0 : g.id) ?? ((A = i.value) == null ? void 0 : A.id); - return Z == null || S == null ? !1 : String(Z) === String(S); - }, a = (S) => { - var A; - const Z = (S == null ? void 0 : S.detail) || {}, C = Z.assetId ?? Z.id ?? null, g = Number(Z.rating); - if (!(!l(C) || !Number.isFinite(g))) { - ys({ rating: g }, o.value); + const l = (h) => { + var W, g, y; + const S = ((W = r._currentAsset) == null ? void 0 : W.id) ?? ((g = r._currentFullAsset) == null ? void 0 : g.id) ?? ((y = i.value) == null ? void 0 : y.id); + return S == null || h == null ? !1 : String(S) === String(h); + }, a = (h) => { + var y; + const S = (h == null ? void 0 : h.detail) || {}, W = S.assetId ?? S.id ?? null, g = Number(S.rating); + if (!(!l(W) || !Number.isFinite(g))) { + fs({ rating: g }, o.value); try { r._currentAsset && (r._currentAsset.rating = g), r._currentFullAsset && (r._currentFullAsset.rating = g); } catch (p) { - (A = console.debug) == null || A.call(console, p); + (y = console.debug) == null || y.call(console, p); } } - }, c = (S) => { - var A; - const Z = (S == null ? void 0 : S.detail) || {}, C = Z.assetId ?? Z.id ?? null, g = Array.isArray(Z.tags) ? Z.tags : null; - if (!(!l(C) || !g)) { - ys({ tags: g }, o.value); + }, c = (h) => { + var y; + const S = (h == null ? void 0 : h.detail) || {}, W = S.assetId ?? S.id ?? null, g = Array.isArray(S.tags) ? S.tags : null; + if (!(!l(W) || !g)) { + fs({ tags: g }, o.value); try { r._currentAsset && (r._currentAsset.tags = g), r._currentFullAsset && (r._currentFullAsset.tags = g); } catch (p) { - (A = console.debug) == null || A.call(console, p); + (y = console.debug) == null || y.call(console, p); } } }, s = [], d = typeof AbortController < "u" ? new AbortController() : null; r._mjrAbortController = d, r.dispose = () => { - var S, Z, C; + var h, S, W; try { - (S = d == null ? void 0 : d.abort) == null || S.call(d); + (h = d == null ? void 0 : d.abort) == null || h.call(d); } catch (g) { - (Z = console.debug) == null || Z.call(console, g); + (S = console.debug) == null || S.call(console, g); } for (const g of s.splice(0)) try { g == null || g(); - } catch (A) { - (C = console.debug) == null || C.call(console, A); + } catch (y) { + (W = console.debug) == null || W.call(console, y); } }, r._dispose = r.dispose; const u = d ? { signal: d.signal } : void 0; try { - window.addEventListener(Fi, a, u), window.addEventListener(Do, c, u); - } catch (S) { - (I = console.debug) == null || I.call(console, S); + window.addEventListener(Oi, a, u), window.addEventListener(Do, c, u); + } catch (h) { + (I = console.debug) == null || I.call(console, h); try { - window.addEventListener(Fi, a), window.addEventListener(Do, c), s.push( - () => window.removeEventListener(Fi, a) + window.addEventListener(Oi, a), window.addEventListener(Do, c), s.push( + () => window.removeEventListener(Oi, a) ), s.push( () => window.removeEventListener(Do, c) ); - } catch (Z) { - (y = console.debug) == null || y.call(console, Z); + } catch (S) { + (A = console.debug) == null || A.call(console, S); } } }), _n(() => { @@ -41034,37 +41071,37 @@ const tv = { get sidebar() { return n.value; } - }), (r, l) => (be(), Ce("div", { + }), (r, l) => (be(), Ze("div", { ref_key: "sidebarEl", ref: n, class: "mjr-inline-sidebar", "data-position": "right", style: { display: "flex", "flex-direction": "column", background: "var(--mjr-surface-1,#262626)", transition: "width 140ms ease,max-width 140ms ease,flex-basis 140ms ease,border-color 140ms ease", contain: "layout paint style" } }, [ - xe(i) ? (be(), Pi(Ov, { + ve(i) ? (be(), Pi(Fv, { key: 0, - asset: xe(i), - "on-update": xe(o), + asset: ve(i), + "on-update": ve(o), sidebar: n.value - }, null, 8, ["asset", "on-update", "sidebar"])) : (be(), Ce("div", zv, Ye(xe(m)("sidebar.placeholderSelectAsset", "Select an asset to view details")), 1)) + }, null, 8, ["asset", "on-update", "sidebar"])) : (be(), Ze("div", zv, Ne(ve(m)("sidebar.placeholderSelectAsset", "Select an asset to view details")), 1)) ], 512)); } -}, Tv = ["aria-label"], Bv = { class: "mjr-context-menu-title" }, Uv = { class: "mjr-context-menu-item-left" }, Kv = { +}, Tv = ["aria-label"], Kv = { class: "mjr-context-menu-title" }, Bv = { class: "mjr-context-menu-item-left" }, Uv = { key: 0, class: "mjr-context-menu-note" }, Dv = { key: 1, class: "mjr-context-menu-note is-error" -}, Ev = { +}, Hv = { key: 2, class: "mjr-context-menu-note" -}, Hv = ["onClick"], qv = { class: "mjr-context-menu-item-left" }, Pv = { +}, Ev = ["onClick"], qv = { class: "mjr-context-menu-item-left" }, Pv = { key: 0, class: "mjr-context-menu-hint" }, Qv = { __name: "AddToCollectionMenu", setup(e) { - const t = Ae(null), n = Ae(!1), i = Ae([]), o = Ae(""); + const t = We(null), n = We(!1), i = We([]), o = We(""); let r = 0, l = null; const a = ze(() => ({ position: "fixed", @@ -41075,72 +41112,72 @@ const tv = { })), c = ze(() => Tn.assets.length || 0), s = ze( () => m("ctx.addToCollection", "Add to collection") + (c.value > 1 ? ` (${c.value})` : "") ); - function d({ collectionName: A, selectedCount: p, addRes: b }) { - var X, x, T; - const L = Number(((X = b == null ? void 0 : b.data) == null ? void 0 : X.added) ?? 0) || 0, h = Number(((x = b == null ? void 0 : b.data) == null ? void 0 : x.skipped_existing) ?? 0) || 0, G = Number(((T = b == null ? void 0 : b.data) == null ? void 0 : T.skipped_duplicate) ?? 0) || 0, W = String(A || "").trim() || m("label.collection", "collection"); + function d({ collectionName: y, selectedCount: p, addRes: b }) { + var X, x, K; + const L = Number(((X = b == null ? void 0 : b.data) == null ? void 0 : X.added) ?? 0) || 0, C = Number(((x = b == null ? void 0 : b.data) == null ? void 0 : x.skipped_existing) ?? 0) || 0, G = Number(((K = b == null ? void 0 : b.data) == null ? void 0 : K.skipped_duplicate) ?? 0) || 0, Z = String(y || "").trim() || m("label.collection", "collection"); let f = m("msg.collectionAdd.added", 'Added {added} item(s) to "{name}".', { added: L, - name: W + name: Z }); - return h > 0 && (f += ` + return C > 0 && (f += ` ${m( "msg.collectionAdd.skippedExisting", "Skipped {count} item(s): already present in the collection.", - { count: h } + { count: C } )}`), G > 0 && (f += ` ${m( "msg.collectionAdd.skippedDuplicate", "Ignored {count} duplicate(s) in selection.", { count: G } - )}`), L === 0 && h > 0 && p > 0 && (f = m( + )}`), L === 0 && C > 0 && p > 0 && (f = m( "msg.collectionAdd.noneAddedExisting", 'No new items added to "{name}" (all exist).', - { name: W } + { name: Z } )), f; } function u() { - const A = t.value; - if (!Tn.open || !A) return; - const p = A.getBoundingClientRect(), b = Number(window.innerWidth || 0), L = Number(window.innerHeight || 0); - let h = Number(Tn.x) || 0, G = Number(Tn.y) || 0; - h + p.width > b && (h = Math.max(8, b - p.width - 10)), G + p.height > L && (G = Math.max(8, L - p.height - 10)), h < 8 && (h = 8), G < 8 && (G = 8), Tn.x = h, Tn.y = G; + const y = t.value; + if (!Tn.open || !y) return; + const p = y.getBoundingClientRect(), b = Number(window.innerWidth || 0), L = Number(window.innerHeight || 0); + let C = Number(Tn.x) || 0, G = Number(Tn.y) || 0; + C + p.width > b && (C = Math.max(8, b - p.width - 10)), G + p.height > L && (G = Math.max(8, L - p.height - 10)), C < 8 && (C = 8), G < 8 && (G = 8), Tn.x = C, Tn.y = G; } async function I() { - var p, b, L, h, G; - const A = ++r; + var p, b, L, C, G; + const y = ++r; n.value = !0, o.value = ""; try { - const W = await Fg(); - if (A !== r) return; - i.value = Array.isArray(W == null ? void 0 : W.data) ? W.data : []; - } catch (W) { - if (console.error("[AddToCollectionMenu.vue] listCollections failed:", W), A !== r) return; + const Z = await Og(); + if (y !== r) return; + i.value = Array.isArray(Z == null ? void 0 : Z.data) ? Z.data : []; + } catch (Z) { + if (console.error("[AddToCollectionMenu.vue] listCollections failed:", Z), y !== r) return; i.value = [], o.value = m("toast.failedLoadCollections", "Failed to load collections."); } finally { - if (A === r) { + if (y === r) { n.value = !1, await wo(), u(); try { - (h = (L = (b = (p = t.value) == null ? void 0 : p.querySelector) == null ? void 0 : b.call(p, '.mjr-context-menu-item:not([aria-disabled="true"])')) == null ? void 0 : L.focus) == null || h.call(L); - } catch (W) { - (G = console.debug) == null || G.call(console, W); + (C = (L = (b = (p = t.value) == null ? void 0 : p.querySelector) == null ? void 0 : b.call(p, '.mjr-context-menu-item:not([aria-disabled="true"])')) == null ? void 0 : L.focus) == null || C.call(L); + } catch (Z) { + (G = console.debug) == null || G.call(console, Z); } } } } - async function y(A, p) { + async function A(y, p) { const b = Array.isArray(Tn.assets) ? Tn.assets : []; Po(); - const L = await Ga(A, b); + const L = await Sa(y, b); if (!(L != null && L.ok)) { - Ze( + Ae( (L == null ? void 0 : L.error) || m("toast.failedAddAssetsToCollection", "Failed to add assets to collection."), "error" ); return; } - Ze( + Ae( d({ collectionName: p, selectedCount: b.length, @@ -41150,118 +41187,118 @@ ${m( 4e3 ); } - async function S() { - var G, W; - const A = Array.isArray(Tn.assets) ? Tn.assets : []; + async function h() { + var G, Z; + const y = Array.isArray(Tn.assets) ? Tn.assets : []; Po(); - const p = await Vi( + const p = await Yi( m("dialog.createCollection", "Create collection"), m("dialog.collectionPlaceholder", "My collection") ); if (!p) return; const b = await na(p); if (!(b != null && b.ok)) { - Ze( + Ae( (b == null ? void 0 : b.error) || m("toast.failedCreateCollectionDot", "Failed to create collection."), "error" ); return; } - const L = (G = b.data) == null ? void 0 : G.id, h = await Ga(L, A); - if (!(h != null && h.ok)) { - Ze( - (h == null ? void 0 : h.error) || m("toast.failedAddAssetsToCollection", "Failed to add assets to collection."), + const L = (G = b.data) == null ? void 0 : G.id, C = await Sa(L, y); + if (!(C != null && C.ok)) { + Ae( + (C == null ? void 0 : C.error) || m("toast.failedAddAssetsToCollection", "Failed to add assets to collection."), "error" ); return; } - Ze( + Ae( d({ - collectionName: ((W = b.data) == null ? void 0 : W.name) || p, - selectedCount: A.length, - addRes: h + collectionName: ((Z = b.data) == null ? void 0 : Z.name) || p, + selectedCount: y.length, + addRes: C }), "success", 4e3 ); } - function Z(A) { + function S(y) { var p, b; - (b = (p = t.value) == null ? void 0 : p.contains) != null && b.call(p, A == null ? void 0 : A.target) || Po(); + (b = (p = t.value) == null ? void 0 : p.contains) != null && b.call(p, y == null ? void 0 : y.target) || Po(); } - function C(A) { - (A == null ? void 0 : A.key) === "Escape" && Po(); + function W(y) { + (y == null ? void 0 : y.key) === "Escape" && Po(); } function g() { Po(); } - return cn( + return dn( () => Tn.open, - async (A) => { - A && (i.value = [], await I()); + async (y) => { + y && (i.value = [], await I()); } ), Dn(() => { l = new AbortController(); - const A = { + const y = { capture: !0, passive: !0, signal: l.signal }; - window.addEventListener("pointerdown", Z, A), window.addEventListener("keydown", C, { + window.addEventListener("pointerdown", S, y), window.addEventListener("keydown", W, { capture: !0, signal: l.signal - }), window.addEventListener("scroll", g, A), window.addEventListener("wheel", g, A), window.addEventListener("resize", g, { + }), window.addEventListener("scroll", g, y), window.addEventListener("wheel", g, y), window.addEventListener("resize", g, { passive: !0, signal: l.signal }), window.addEventListener("mjr-close-all-menus", g, { signal: l.signal }); }), _n(() => { - var A; + var y; try { l == null || l.abort(); } catch (p) { - (A = console.debug) == null || A.call(console, p); + (y = console.debug) == null || y.call(console, p); } l = null, Po(); - }), (A, p) => (be(), Pi(ks, { to: "body" }, [ - xe(Tn).open ? (be(), Ce("div", { + }), (y, p) => (be(), Pi(Ns, { to: "body" }, [ + ve(Tn).open ? (be(), Ze("div", { key: 0, ref_key: "menuRef", ref: t, class: "mjr-add-to-collection-menu mjr-context-menu", - style: Lt(a.value), + style: vt(a.value), role: "menu", "aria-label": s.value }, [ - ie("div", Bv, Ye(s.value), 1), - ie("button", { + te("div", Kv, Ne(s.value), 1), + te("button", { type: "button", class: "mjr-context-menu-item", role: "menuitem", - onClick: S + onClick: h }, [ - ie("span", Uv, [ - p[0] || (p[0] = ie("i", { class: "pi pi-plus" }, null, -1)), - ie("span", null, Ye(xe(m)("dialog.createCollection", "Create collection")) + "...", 1) + te("span", Bv, [ + p[0] || (p[0] = te("i", { class: "pi pi-plus" }, null, -1)), + te("span", null, Ne(ve(m)("dialog.createCollection", "Create collection")) + "...", 1) ]) ]), - p[2] || (p[2] = ie("div", { class: "mjr-context-menu-separator" }, null, -1)), - n.value ? (be(), Ce("div", Kv, Ye(xe(m)("msg.loadingCollections", "Loading collections...")), 1)) : o.value ? (be(), Ce("div", Dv, Ye(o.value), 1)) : i.value.length ? ft("", !0) : (be(), Ce("div", Ev, Ye(xe(m)("msg.noCollections", "No collections yet.")), 1)), - (be(!0), Ce(Nt, null, Cn(i.value, (b) => (be(), Ce("button", { + p[2] || (p[2] = te("div", { class: "mjr-context-menu-separator" }, null, -1)), + n.value ? (be(), Ze("div", Uv, Ne(ve(m)("msg.loadingCollections", "Loading collections...")), 1)) : o.value ? (be(), Ze("div", Dv, Ne(o.value), 1)) : i.value.length ? yt("", !0) : (be(), Ze("div", Hv, Ne(ve(m)("msg.noCollections", "No collections yet.")), 1)), + (be(!0), Ze(Nt, null, Zn(i.value, (b) => (be(), Ze("button", { key: String((b == null ? void 0 : b.id) || ""), type: "button", class: "mjr-context-menu-item", role: "menuitem", - onClick: (L) => y(String((b == null ? void 0 : b.id) || ""), String((b == null ? void 0 : b.name) || (b == null ? void 0 : b.id) || "")) + onClick: (L) => A(String((b == null ? void 0 : b.id) || ""), String((b == null ? void 0 : b.name) || (b == null ? void 0 : b.id) || "")) }, [ - ie("span", qv, [ - p[1] || (p[1] = ie("i", { class: "pi pi-bookmark" }, null, -1)), - ie("span", null, Ye(String((b == null ? void 0 : b.name) || (b == null ? void 0 : b.id) || "")), 1) + te("span", qv, [ + p[1] || (p[1] = te("i", { class: "pi pi-bookmark" }, null, -1)), + te("span", null, Ne(String((b == null ? void 0 : b.name) || (b == null ? void 0 : b.id) || "")), 1) ]), - Number((b == null ? void 0 : b.count) || 0) > 0 ? (be(), Ce("span", Pv, Ye(Number((b == null ? void 0 : b.count) || 0)), 1)) : ft("", !0) - ], 8, Hv))), 128)) - ], 12, Tv)) : ft("", !0) + Number((b == null ? void 0 : b.count) || 0) > 0 ? (be(), Ze("span", Pv, Ne(Number((b == null ? void 0 : b.count) || 0)), 1)) : yt("", !0) + ], 8, Ev))), 128)) + ], 12, Tv)) : yt("", !0) ])); } }, _v = { @@ -41282,16 +41319,16 @@ ${m( }, cL = { __name: "GridContextMenu", setup(e) { - const t = Ae(null), n = Ae(null), i = Ae(null); + const t = We(null), n = We(null), i = We(null); let o = null, r = null; - const l = ze(() => s(Dt.main, 10031)), a = ze(() => s(Dt.submenu, 10032)), c = ze(() => s(Dt.tags, 10033)); - function s(x, T) { + const l = ze(() => s(Ut.main, 10031)), a = ze(() => s(Ut.submenu, 10032)), c = ze(() => s(Ut.tags, 10033)); + function s(x, K) { return { position: "fixed", left: `${Math.round(Number(x == null ? void 0 : x.x) || 0)}px`, top: `${Math.round(Number(x == null ? void 0 : x.y) || 0)}px`, display: "block", - zIndex: String(T) + zIndex: String(K) }; } function d() { @@ -41302,43 +41339,43 @@ ${m( Ir(); }, 180); } - function I(x, T) { - if (!(x != null && x.open) || !T) return; - const v = T.getBoundingClientRect(), w = Number(window.innerWidth || 0), R = Number(window.innerHeight || 0); - let Y = Number(x.x) || 0, F = Number(x.y) || 0; - Y + v.width > w && (Y = Math.max(8, w - v.width - 10)), F + v.height > R && (F = Math.max(8, R - v.height - 10)), Y < 8 && (Y = 8), F < 8 && (F = 8), x.x = Y, x.y = F; + function I(x, K) { + if (!(x != null && x.open) || !K) return; + const j = K.getBoundingClientRect(), w = Number(window.innerWidth || 0), R = Number(window.innerHeight || 0); + let V = Number(x.x) || 0, O = Number(x.y) || 0; + V + j.width > w && (V = Math.max(8, w - j.width - 10)), O + j.height > R && (O = Math.max(8, R - j.height - 10)), V < 8 && (V = 8), O < 8 && (O = 8), x.x = V, x.y = O; } - async function y(x, T) { - await wo(), I(x, (T == null ? void 0 : T.value) || null); + async function A(x, K) { + await wo(), I(x, (K == null ? void 0 : K.value) || null); } - function S(x) { - var T, v, w, R, Y; + function h(x) { + var K, j, w, R, V; try { - (R = (w = (v = (T = x == null ? void 0 : x.value) == null ? void 0 : T.querySelector) == null ? void 0 : v.call(T, '.mjr-context-menu-item:not([aria-disabled="true"])')) == null ? void 0 : w.focus) == null || R.call(w); - } catch (F) { - (Y = console.debug) == null || Y.call(console, F); + (R = (w = (j = (K = x == null ? void 0 : x.value) == null ? void 0 : K.querySelector) == null ? void 0 : j.call(K, '.mjr-context-menu-item:not([aria-disabled="true"])')) == null ? void 0 : w.focus) == null || R.call(w); + } catch (O) { + (V = console.debug) == null || V.call(console, O); } } - function Z(x, T) { + function S(x, K) { var R; if (!Array.isArray(x == null ? void 0 : x.submenu) || !x.submenu.length) { Ir(); return; } d(); - const v = T == null ? void 0 : T.currentTarget, w = (R = v == null ? void 0 : v.getBoundingClientRect) == null ? void 0 : R.call(v); + const j = K == null ? void 0 : K.currentTarget, w = (R = j == null ? void 0 : j.getBoundingClientRect) == null ? void 0 : R.call(j); ZW({ - x: Math.round(((w == null ? void 0 : w.right) || Dt.main.x || 0) + 6), - y: Math.round(((w == null ? void 0 : w.top) || Dt.main.y || 0) - 4), + x: Math.round(((w == null ? void 0 : w.right) || Ut.main.x || 0) + 6), + y: Math.round(((w == null ? void 0 : w.top) || Ut.main.y || 0) - 4), items: x.submenu, title: x.label || "" }); } - async function C(x, T, v = "main") { + async function W(x, K, j = "main") { var w; if (!(!x || x.type !== "item" || x.disabled)) { if (Array.isArray(x.submenu) && x.submenu.length) { - Z(x, T); + S(x, K); return; } try { @@ -41346,18 +41383,18 @@ ${m( } catch (R) { console.error("[GridContextMenu.vue] Action failed:", R); } finally { - x.closeOnSelect !== !1 ? Vo() : v === "submenu" && Ir(); + x.closeOnSelect !== !1 ? Yo() : j === "submenu" && Ir(); } } } - function g(x, T) { + function g(x, K) { if (Array.isArray(x == null ? void 0 : x.submenu) && x.submenu.length) { - Z(x, T); + S(x, K); return; } Ir(); } - function A(x) { + function y(x) { Array.isArray(x == null ? void 0 : x.submenu) && x.submenu.length && u(); } function p() { @@ -41367,47 +41404,47 @@ ${m( u(); } function L(x) { - var w, R, Y, F, N, V; - const T = x == null ? void 0 : x.target; - ((R = (w = t.value) == null ? void 0 : w.contains) == null ? void 0 : R.call(w, T)) || ((F = (Y = n.value) == null ? void 0 : Y.contains) == null ? void 0 : F.call(Y, T)) || ((V = (N = i.value) == null ? void 0 : N.contains) == null ? void 0 : V.call(N, T)) || Vo(); + var w, R, V, O, k, Y; + const K = x == null ? void 0 : x.target; + ((R = (w = t.value) == null ? void 0 : w.contains) == null ? void 0 : R.call(w, K)) || ((O = (V = n.value) == null ? void 0 : V.contains) == null ? void 0 : O.call(V, K)) || ((Y = (k = i.value) == null ? void 0 : k.contains) == null ? void 0 : Y.call(k, K)) || Yo(); } - function h(x) { - (x == null ? void 0 : x.key) === "Escape" && Vo(); + function C(x) { + (x == null ? void 0 : x.key) === "Escape" && Yo(); } function G() { - Vo(); + Yo(); } - function W(x) { - var T; - String(((T = x == null ? void 0 : x.detail) == null ? void 0 : T.source) || "") !== "grid" && Vo(); + function Z(x) { + var K; + String(((K = x == null ? void 0 : x.detail) == null ? void 0 : K.source) || "") !== "grid" && Yo(); } function f(x) { - const T = Dt.tags.asset; - T && (T.tags = Array.isArray(x) ? [...x] : []); + const K = Ut.tags.asset; + K && (K.tags = Array.isArray(x) ? [...x] : []); } function X(x) { - var v, w, R; - const T = Array.isArray(x == null ? void 0 : x.tags) ? x.tags : []; + var j, w, R; + const K = Array.isArray(x == null ? void 0 : x.tags) ? x.tags : []; try { - (w = (v = Dt.tags).onChanged) == null || w.call(v, T); - } catch (Y) { - (R = console.debug) == null || R.call(console, Y); + (w = (j = Ut.tags).onChanged) == null || w.call(j, K); + } catch (V) { + (R = console.debug) == null || R.call(console, V); } } - return cn( - () => Dt.main.open, + return dn( + () => Ut.main.open, async (x) => { - x && (await y(Dt.main, t), S(t)); + x && (await A(Ut.main, t), h(t)); } - ), cn( - () => Dt.submenu.open, + ), dn( + () => Ut.submenu.open, async (x) => { - x && (await y(Dt.submenu, n), S(n)); + x && (await A(Ut.submenu, n), h(n)); } - ), cn( - () => Dt.tags.open, + ), dn( + () => Ut.tags.open, async (x) => { - x && await y(Dt.tags, i); + x && await A(Ut.tags, i); } ), Dn(() => { r = new AbortController(); @@ -41416,13 +41453,13 @@ ${m( passive: !0, signal: r.signal }; - window.addEventListener("pointerdown", L, x), window.addEventListener("keydown", h, { + window.addEventListener("pointerdown", L, x), window.addEventListener("keydown", C, { capture: !0, signal: r.signal }), window.addEventListener("scroll", G, x), window.addEventListener("wheel", G, x), window.addEventListener("resize", G, { passive: !0, signal: r.signal - }), window.addEventListener("mjr-close-all-menus", W, { + }), window.addEventListener("mjr-close-all-menus", Z, { signal: r.signal }); }), _n(() => { @@ -41430,121 +41467,121 @@ ${m( d(); try { r == null || r.abort(); - } catch (T) { - (x = console.debug) == null || x.call(console, T); + } catch (K) { + (x = console.debug) == null || x.call(console, K); } - r = null, Vo(); - }), (x, T) => { - var v; - return be(), Pi(ks, { to: "body" }, [ - xe(Dt).main.open ? (be(), Ce("div", { + r = null, Yo(); + }), (x, K) => { + var j; + return be(), Pi(Ns, { to: "body" }, [ + ve(Ut).main.open ? (be(), Ze("div", { key: 0, ref_key: "mainMenuRef", ref: t, class: "mjr-grid-context-menu mjr-context-menu", - style: Lt(l.value), + style: vt(l.value), role: "menu", "aria-label": "Grid context menu" }, [ - (be(!0), Ce(Nt, null, Cn(xe(Dt).main.items, (w) => (be(), Ce(Nt, { + (be(!0), Ze(Nt, null, Zn(ve(Ut).main.items, (w) => (be(), Ze(Nt, { key: w.id }, [ - w.type === "separator" ? (be(), Ce("div", _v)) : (be(), Ce("button", { + w.type === "separator" ? (be(), Ze("div", _v)) : (be(), Ze("button", { key: 1, type: "button", - class: Zn(["mjr-context-menu-item", { + class: An(["mjr-context-menu-item", { "is-disabled": w.disabled, "has-submenu": Array.isArray(w.submenu) && w.submenu.length }]), role: "menuitem", "aria-disabled": w.disabled ? "true" : "false", tabindex: w.disabled ? -1 : 0, - onClick: (R) => C(w, R), + onClick: (R) => W(w, R), onMouseenter: (R) => g(w, R), - onMouseleave: (R) => A(w) + onMouseleave: (R) => y(w) }, [ - ie("span", eL, [ - w.iconClass ? (be(), Ce("i", { + te("span", eL, [ + w.iconClass ? (be(), Ze("i", { key: 0, - class: Zn(w.iconClass) - }, null, 2)) : ft("", !0), - ie("span", null, Ye(w.label), 1) + class: An(w.iconClass) + }, null, 2)) : yt("", !0), + te("span", null, Ne(w.label), 1) ]), - ie("span", tL, [ - w.rightHint ? (be(), Ce("span", nL, Ye(w.rightHint), 1)) : ft("", !0), - Array.isArray(w.submenu) && w.submenu.length ? (be(), Ce("span", iL, " > ")) : ft("", !0) + te("span", tL, [ + w.rightHint ? (be(), Ze("span", nL, Ne(w.rightHint), 1)) : yt("", !0), + Array.isArray(w.submenu) && w.submenu.length ? (be(), Ze("span", iL, " > ")) : yt("", !0) ]) ], 42, $v)) ], 64))), 128)) - ], 4)) : ft("", !0), - xe(Dt).submenu.open ? (be(), Ce("div", { + ], 4)) : yt("", !0), + ve(Ut).submenu.open ? (be(), Ze("div", { key: 1, ref_key: "submenuRef", ref: n, class: "mjr-grid-rating-submenu mjr-context-menu", - style: Lt(a.value), + style: vt(a.value), role: "menu", "aria-label": "Grid context submenu", onMouseenter: p, onMouseleave: b }, [ - (be(!0), Ce(Nt, null, Cn(xe(Dt).submenu.items, (w) => (be(), Ce(Nt, { + (be(!0), Ze(Nt, null, Zn(ve(Ut).submenu.items, (w) => (be(), Ze(Nt, { key: w.id }, [ - w.type === "separator" ? (be(), Ce("div", oL)) : (be(), Ce("button", { + w.type === "separator" ? (be(), Ze("div", oL)) : (be(), Ze("button", { key: 1, type: "button", - class: Zn(["mjr-context-menu-item", { "is-disabled": w.disabled }]), + class: An(["mjr-context-menu-item", { "is-disabled": w.disabled }]), role: "menuitem", "aria-disabled": w.disabled ? "true" : "false", tabindex: w.disabled ? -1 : 0, - onClick: (R) => C(w, R, "submenu") + onClick: (R) => W(w, R, "submenu") }, [ - ie("span", lL, [ - w.iconClass ? (be(), Ce("i", { + te("span", lL, [ + w.iconClass ? (be(), Ze("i", { key: 0, - class: Zn(w.iconClass) - }, null, 2)) : ft("", !0), - ie("span", null, Ye(w.label), 1) + class: An(w.iconClass) + }, null, 2)) : yt("", !0), + te("span", null, Ne(w.label), 1) ]), - w.rightHint ? (be(), Ce("span", aL, Ye(w.rightHint), 1)) : ft("", !0) + w.rightHint ? (be(), Ze("span", aL, Ne(w.rightHint), 1)) : yt("", !0) ], 10, rL)) ], 64))), 128)) - ], 36)) : ft("", !0), - xe(Dt).tags.open && xe(Dt).tags.asset ? (be(), Ce("div", { + ], 36)) : yt("", !0), + ve(Ut).tags.open && ve(Ut).tags.asset ? (be(), Ze("div", { key: 2, ref_key: "tagsPopoverRef", ref: i, class: "mjr-grid-popover", - style: Lt(c.value) + style: vt(c.value) }, [ - fn(gd, { - asset: xe(Dt).tags.asset, - "model-value": ((v = xe(Dt).tags.asset) == null ? void 0 : v.tags) || [], + Cn(gd, { + asset: ve(Ut).tags.asset, + "model-value": ((j = ve(Ut).tags.asset) == null ? void 0 : j.tags) || [], "onUpdate:modelValue": f, onTagsChange: X }, null, 8, ["asset", "model-value"]) - ], 4)) : ft("", !0) + ], 4)) : yt("", !0) ]); }; } }, dp = { __name: "ContextMenuPortal", setup(e) { - const t = Ae(""), n = ze(() => CW(t.value)); + const t = We(""), n = ze(() => hW(t.value)); return Dn(() => { t.value = fW(); }), _n(() => { - hW(t.value), t.value = ""; - }), (i, o) => n.value ? (be(), Ce(Nt, { key: 0 }, [ - fn(cL), - fn(Qv) - ], 64)) : ft("", !0); + CW(t.value), t.value = ""; + }), (i, o) => n.value ? (be(), Ze(Nt, { key: 0 }, [ + Cn(cL), + Cn(Qv) + ], 64)) : yt("", !0); } }, sL = { __name: "App", setup(e) { - const t = Ae(null), n = Ae(null), i = Ae(null), o = Ae(null), r = Ae(null), l = Ae(null); + const t = We(null), n = We(null), i = We(null), o = We(null), r = We(null), l = We(null); let a = null; return Dn(async () => { if (!t.value) return; @@ -41562,11 +41599,11 @@ ${m( var d, u; return (u = (d = r.value) == null ? void 0 : d.initAssetsQueryController) == null ? void 0 : u.call(d, ...s); }, c.loadAssets = (s, d = "*", u = {}) => { - var I, y; - return (y = (I = r.value) == null ? void 0 : I.loadAssets) == null ? void 0 : y.call(I, d, u); + var I, A; + return (A = (I = r.value) == null ? void 0 : I.loadAssets) == null ? void 0 : A.call(I, d, u); }, c.loadAssetsFromList = (s, d = [], u = {}) => { - var I, y; - return (y = (I = r.value) == null ? void 0 : I.loadAssetsFromList) == null ? void 0 : y.call(I, d, u); + var I, A; + return (A = (I = r.value) == null ? void 0 : I.loadAssetsFromList) == null ? void 0 : A.call(I, d, u); }, c.prepareGridForScopeSwitch = (s) => { var d, u; return (u = (d = r.value) == null ? void 0 : d.prepareGridForScopeSwitch) == null ? void 0 : u.call(d); @@ -41580,20 +41617,20 @@ ${m( var u, I; return (I = (u = r.value) == null ? void 0 : u.restoreAnchor) == null ? void 0 : I.call(u, d); }, c.hydrateGridFromSnapshot = (s, d = {}, u = {}) => { - var I, y; - return (y = (I = r.value) == null ? void 0 : I.hydrateGridFromSnapshot) == null ? void 0 : y.call(I, d, u); + var I, A; + return (A = (I = r.value) == null ? void 0 : I.hydrateGridFromSnapshot) == null ? void 0 : A.call(I, d, u); }, c.upsertAsset = (s, d) => { var u, I; return (I = (u = r.value) == null ? void 0 : u.upsertAsset) == null ? void 0 : I.call(u, d); }, c.removeAssets = (s, d = [], u = {}) => { - var I, y; - return (y = (I = r.value) == null ? void 0 : I.removeAssets) == null ? void 0 : y.call(I, d, u); + var I, A; + return (A = (I = r.value) == null ? void 0 : I.removeAssets) == null ? void 0 : A.call(I, d, u); }, c.disposeGrid = (s) => { var d, u; return (u = (d = r.value) == null ? void 0 : d.disposeGrid) == null ? void 0 : u.call(d); }), l.value && (c.sidebar = l.value.sidebar); try { - a = await b2(t.value, { + a = await bM(t.value, { useComfyThemeUI: !0, external: c }); @@ -41607,29 +41644,29 @@ ${m( } catch { } a = null; - }), (c, s) => (be(), Ce(Nt, null, [ - fn(y2, { + }), (c, s) => (be(), Ze(Nt, null, [ + Cn(yM, { ref_key: "statusSectionRef", ref: n }, null, 512), - fn(mx, { + Cn(mx, { ref_key: "headerSectionRef", ref: i }, null, 512), - fn(Mx, { + Cn(Mx, { ref_key: "summaryBarSectionRef", ref: o }, null, 512), - fn(Nx, { + Cn(kx, { ref_key: "assetsGridRef", ref: r }, null, 512), - fn(Jv, { + Cn(Jv, { ref_key: "sidebarSectionRef", ref: l }, null, 512), - fn(dp), - ie("div", { + Cn(dp), + te("div", { ref_key: "containerRef", ref: t, class: "mjr-vue-root", @@ -41640,7 +41677,7 @@ ${m( }, dL = { __name: "GeneratedFeedApp", setup(e) { - const t = Ae(null); + const t = We(null); let n = null; function i(o) { var l, a; @@ -41659,19 +41696,19 @@ ${m( return Dn(() => { if (t.value) try { - i(t.value), n = kV(t.value); + i(t.value), n = XY(t.value); } catch (o) { console.warn("[Majoor] GeneratedFeedApp.vue: createGeneratedFeedHost failed", o); } }), _n(() => { try { - XV(n); + NY(n); } catch { } n = null; - }), (o, r) => (be(), Ce(Nt, null, [ - fn(dp), - ie("div", { + }), (o, r) => (be(), Ze(Nt, null, [ + Cn(dp), + te("div", { ref_key: "containerRef", ref: t, class: "mjr-vue-feed-root", @@ -41679,34 +41716,34 @@ ${m( }, null, 512) ], 64)); } -}, bd = "data-mjr-topbar-mfv-host", up = "data-mjr-topbar-mfv-button", Ws = "data-mjr-topbar-mfv-slot", uL = "label.floatingViewer", mL = "Viewer", gL = "V, Ctrl/Cmd+V"; -let Ii = null, ws = null, Kn = null, hr = null, Cr = null, Ia = !1, cl = null, no = !1, pd = !1; +}, bd = "data-mjr-topbar-mfv-host", up = "data-mjr-topbar-mfv-button", ws = "data-mjr-topbar-mfv-slot", uL = "label.floatingViewer", mL = "Viewer", gL = "V, Ctrl/Cmd+V"; +let Ii = null, Ms = null, Un = null, Cr = null, hr = null, Ia = !1, cl = null, no = !1, pd = !1; function mp(e) { var t, n; - if (!(Ii && ws === e)) { + if (!(Ii && Ms === e)) { if (!e) { - !Kn && typeof MutationObserver < "u" && (Kn = new MutationObserver(() => { + !Un && typeof MutationObserver < "u" && (Un = new MutationObserver(() => { var o; - rc() && ((o = Kn == null ? void 0 : Kn.disconnect) == null || o.call(Kn), Kn = null, Zr()); - }), Kn.observe(document.body, { childList: !0, subtree: !0 })); + lc() && ((o = Un == null ? void 0 : Un.disconnect) == null || o.call(Un), Un = null, Zr()); + }), Un.observe(document.body, { childList: !0, subtree: !0 })); return; } try { (t = Ii == null ? void 0 : Ii.disconnect) == null || t.call(Ii); } catch { } - Ii = new MutationObserver(() => Zr()), Ii.observe(e, { childList: !0 }), ws = e; + Ii = new MutationObserver(() => Zr()), Ii.observe(e, { childList: !0 }), Ms = e; try { - (n = Kn == null ? void 0 : Kn.disconnect) == null || n.call(Kn); + (n = Un == null ? void 0 : Un.disconnect) == null || n.call(Un); } catch { } - Kn = null; + Un = null; } } -function rc() { +function lc() { return typeof document > "u" ? null : document.querySelector(".actionbar-container"); } -function Lc(e = rc()) { +function Yc(e = lc()) { var o; if (typeof document > "u") return; const t = (o = document.documentElement) == null ? void 0 : o.style; @@ -41723,8 +41760,8 @@ function IL(e) { } function bL(e) { if (!e) return null; - let t = e.querySelector(`[${Ws}]`); - t || (t = document.createElement("div"), t.setAttribute(Ws, "1"), t.className = "flex h-full items-center pointer-events-auto", t.style.position = "relative", t.style.zIndex = "10030", t.style.padding = "0 4px"); + let t = e.querySelector(`[${ws}]`); + t || (t = document.createElement("div"), t.setAttribute(ws, "1"), t.className = "flex h-full items-center pointer-events-auto", t.style.position = "relative", t.style.zIndex = "10030", t.style.padding = "0 4px"); const n = IL(e), i = (n == null ? void 0 : n.parentElement) || e; return t.parentElement !== i ? n && i ? i.insertBefore(t, n.nextSibling) : i.appendChild(t) : n && i && t.previousSibling !== n ? i.insertBefore(t, n.nextSibling) : !n && t !== i.lastElementChild && i.appendChild(t), t; } @@ -41749,19 +41786,19 @@ function gp(e) { function fL() { var e; try { - window.dispatchEvent(new Event(ht.MFV_TOGGLE)); + window.dispatchEvent(new Event(ft.MFV_TOGGLE)); } catch (t) { (e = console.debug) == null || e.call(console, "[Majoor] top bar MFV launch failed", t); } Zr(); } -function hL() { +function CL() { const e = document.createElement("button"); return e.type = "button", e.setAttribute(up, "1"), e.className = "comfyui-button mjr-topbar-mfv-button", e.style.position = "relative", e.style.zIndex = "10030", e.style.width = "auto", e.style.height = "32px", e.style.minWidth = "32px", e.style.padding = "0 10px", e.style.gap = "6px", e.style.display = "inline-flex", e.style.alignItems = "center", e.style.justifyContent = "center", e.style.whiteSpace = "nowrap", e.addEventListener("click", fL), gp(e), e; } -function CL() { +function hL() { const e = document.createElement("div"); - return e.setAttribute(bd, "1"), e.className = "mjr-topbar-mfv-button-host", e.style.position = "relative", e.appendChild(hL()), e; + return e.setAttribute(bd, "1"), e.className = "mjr-topbar-mfv-button-host", e.style.position = "relative", e.appendChild(CL()), e; } function ZL() { if (typeof document > "u" || pd) return; @@ -41769,15 +41806,15 @@ function ZL() { no !== e && (no = e); } function AL() { - const e = rc(); + const e = lc(); if (!e) - return Lc(null), null; + return Yc(null), null; mp(e), ZL(); const t = bL(e); if (!t) - return Lc(e), null; + return Yc(e), null; let n = t.querySelector(`[${bd}]`); - return n || (n = CL()), n.parentElement !== t && t.replaceChildren(n), Lc(e), gp(n.querySelector(`[${up}]`)), t; + return n || (n = hL()), n.parentElement !== t && t.replaceChildren(n), Yc(e), gp(n.querySelector(`[${up}]`)), t; } function Zr() { Ia || (Ia = !0, cl = window.setTimeout(() => { @@ -41785,10 +41822,10 @@ function Zr() { }, 32)); } function WL() { - return typeof window > "u" || typeof document > "u" || !document.body ? !1 : (Zr(), hr || (hr = (e) => { + return typeof window > "u" || typeof document > "u" || !document.body ? !1 : (Zr(), Cr || (Cr = (e) => { var t; no = !!((t = e == null ? void 0 : e.detail) != null && t.visible), pd = !0, Zr(); - }, window.addEventListener(ht.MFV_VISIBILITY_CHANGED, hr)), Cr || (Cr = () => Zr(), window.addEventListener("resize", Cr)), mp(rc()), !0); + }, window.addEventListener(ft.MFV_VISIBILITY_CHANGED, Cr)), hr || (hr = () => Zr(), window.addEventListener("resize", hr)), mp(lc()), !0); } function Ip() { var e, t, n, i, o, r, l, a, c, s, d, u; @@ -41797,26 +41834,26 @@ function Ip() { } catch (I) { (t = console.debug) == null || t.call(console, I); } - Ii = null, ws = null; + Ii = null, Ms = null; try { - (n = Kn == null ? void 0 : Kn.disconnect) == null || n.call(Kn); + (n = Un == null ? void 0 : Un.disconnect) == null || n.call(Un); } catch (I) { (i = console.debug) == null || i.call(console, I); } - Kn = null; + Un = null; try { cl && window.clearTimeout(cl); } catch (I) { (o = console.debug) == null || o.call(console, I); } - cl = null, hr && typeof window < "u" && window.removeEventListener(ht.MFV_VISIBILITY_CHANGED, hr), hr = null, Cr && typeof window < "u" && window.removeEventListener("resize", Cr), Cr = null, Ia = !1, no = !1, pd = !1; + cl = null, Cr && typeof window < "u" && window.removeEventListener(ft.MFV_VISIBILITY_CHANGED, Cr), Cr = null, hr && typeof window < "u" && window.removeEventListener("resize", hr), hr = null, Ia = !1, no = !1, pd = !1; try { - (l = (r = document.documentElement) == null ? void 0 : r.style) == null || l.setProperty("--mjr-mfv-top-offset", "60px"), (c = (a = document.querySelector(`[${bd}]`)) == null ? void 0 : a.remove) == null || c.call(a), (d = (s = document.querySelector(`[${Ws}]`)) == null ? void 0 : s.remove) == null || d.call(s); + (l = (r = document.documentElement) == null ? void 0 : r.style) == null || l.setProperty("--mjr-mfv-top-offset", "60px"), (c = (a = document.querySelector(`[${bd}]`)) == null ? void 0 : a.remove) == null || c.call(a), (d = (s = document.querySelector(`[${ws}]`)) == null ? void 0 : s.remove) == null || d.call(s); } catch (I) { (u = console.debug) == null || u.call(console, I); } } -const Ms = "mjr-global-runtime-root", bp = "_mjrGlobalRuntimeVueApp", pp = "_mjrSidebarVueApp", yp = "_mjrFeedVueApp"; +const Gs = "mjr-global-runtime-root", bp = "_mjrGlobalRuntimeVueApp", pp = "_mjrSidebarVueApp", yp = "_mjrFeedVueApp"; let Di = null, Ar = null; const fp = 15e3; let Ss = 0, ii = null; @@ -41831,7 +41868,7 @@ try { }, { once: !0 }); } catch { } -function hp() { +function Cp() { var e; try { return !!String(((e = window == null ? void 0 : window.__MJR_EXECUTION_RUNTIME__) == null ? void 0 : e.active_prompt_id) || "").trim(); @@ -41839,9 +41876,9 @@ function hp() { return !1; } } -function Cp() { +function hp() { var n; - if (hp()) + if (Cp()) return null; const e = Date.now(), t = "output:*:mtime_desc"; if (Di && Ar === t && e - Ss < fp) @@ -41853,9 +41890,9 @@ function Cp() { } catch { } ii = typeof AbortController < "u" ? new AbortController() : null; - const i = Ns({ + const i = Rs({ query: "*", - limit: fe.DEFAULT_PAGE_SIZE || 200, + limit: he.DEFAULT_PAGE_SIZE || 200, offset: 0, scope: "output", sort: "mtime_desc", @@ -41881,25 +41918,25 @@ function wL(e = "output:*:mtime_desc") { } function ML() { if (typeof document > "u" || !(document != null && document.body)) return null; - let e = document.getElementById(Ms); - return e || (e = document.createElement("div"), e.id = Ms, e.setAttribute("role", "presentation"), e.style.cssText = // Keep runtime hosts above panel layers so main viewer overlay cannot render underneath. + let e = document.getElementById(Gs); + return e || (e = document.createElement("div"), e.id = Gs, e.setAttribute("role", "presentation"), e.style.cssText = // Keep runtime hosts above panel layers so main viewer overlay cannot render underneath. "position:fixed;inset:0;overflow:visible;pointer-events:none;z-index:10020;", document.body.appendChild(e), e); } -function SL() { +function GL() { try { const e = ML(); if (!e) return !1; - const t = dd(e, S0, bp); + const t = dd(e, G0, bp); return WL(), t; } catch { return !1; } } -function GL() { +function SL() { var e; try { Ip(); - const t = document.getElementById(Ms); + const t = document.getElementById(Gs); if (!t) return; ud(t, bp), (e = t.remove) == null || e.call(t); } catch { @@ -41910,7 +41947,7 @@ function Zp(e, t) { const n = xy(e, t); if (!n) try { - window.dispatchEvent(new Event(ht.OPEN_ASSETS_MANAGER)); + window.dispatchEvent(new Event(ft.OPEN_ASSETS_MANAGER)); } catch (o) { (i = console.debug) == null || i.call(console, o); } @@ -41920,7 +41957,7 @@ function Ap() { var e; try { window.dispatchEvent( - new CustomEvent(ht.RELOAD_GRID, { detail: { reason: "command" } }) + new CustomEvent(ft.RELOAD_GRID, { detail: { reason: "command" } }) ); } catch (t) { (e = console.debug) == null || e.call(console, t); @@ -41947,7 +41984,7 @@ function Wp(e, { sidebarTabId: t, triggerStartupScan: n }) { function: () => { var i; try { - window.dispatchEvent(new Event(ht.MFV_TOGGLE)); + window.dispatchEvent(new Event(ft.MFV_TOGGLE)); } catch (o) { (i = console.debug) == null || i.call(console, o); } @@ -41974,7 +42011,7 @@ function jL(e, { sidebarTabId: t }) { tooltip: m("tooltip.sidebarTab"), type: "custom", render(n) { - hp() || (Cp(), yh({ idleOnly: !0 }).catch(() => null)), dd(n, sL, pp); + Cp() || (hp(), yC({ idleOnly: !0 }).catch(() => null)), dd(n, sL, pp); }, destroy(n) { } @@ -41999,16 +42036,16 @@ function LL() { } }; } -function VL() { +function YL() { return [LL()]; } -function YL() { +function VL() { try { ud(null, yp); } catch { } } -function kL(e) { +function XL(e) { var n; const t = String( (e == null ? void 0 : e.comfyClass) || (e == null ? void 0 : e.type) || ((n = e == null ? void 0 : e.constructor) == null ? void 0 : n.type) || "" @@ -42018,8 +42055,8 @@ function kL(e) { function Vc(e, t) { return { content: e, callback: t }; } -function XL(e, t, { sidebarTabId: n }) { - return kL(e) ? [ +function NL(e, t, { sidebarTabId: n }) { + return XL(e) ? [ Vc( "View in Assets Manager", () => Zp(t, n) @@ -42027,7 +42064,7 @@ function XL(e, t, { sidebarTabId: n }) { Vc("Open in Floating Viewer", () => { var i; try { - window.dispatchEvent(new Event(ht.MFV_OPEN)); + window.dispatchEvent(new Event(ft.MFV_OPEN)); } catch (o) { (i = console.debug) == null || i.call(console, o); } @@ -42035,14 +42072,14 @@ function XL(e, t, { sidebarTabId: n }) { Vc("Index Output", () => { var i; try { - Ap(), Ze(m("toast.rescanningFile", "Rescanning file…"), "info", 1800); + Ap(), Ae(m("toast.rescanningFile", "Rescanning file…"), "info", 1800); } catch (o) { (i = console.debug) == null || i.call(console, o); } }) ] : []; } -function NL({ count: e = 0, limit: t = 0, offset: n = 0, total: i = null } = {}) { +function kL({ count: e = 0, limit: t = 0, offset: n = 0, total: i = null } = {}) { const o = Math.max(0, Number(e) || 0); if (o <= 0) return 0; const r = Math.max(0, Number(t) || 0), l = Math.max(0, Number(n) || 0), a = i == null ? null : Math.max(0, Number(i) || 0), c = a == null ? null : Math.max(0, a - l); @@ -42054,13 +42091,13 @@ function NL({ count: e = 0, limit: t = 0, offset: n = 0, total: i = null } = {}) return s <= 0 ? o : Math.max(o, s); } function RL(e, t) { - var Z, C, g, A, p, b, L; + var S, W, g, y, p, b, L; if (!t || typeof t != "object") return !1; - const n = String(((Z = e == null ? void 0 : e.dataset) == null ? void 0 : Z.mjrScope) || "output").trim().toLowerCase(), i = String(((C = e == null ? void 0 : e.dataset) == null ? void 0 : C.mjrSubfolder) || "").trim().toLowerCase(), o = String(((g = e == null ? void 0 : e.dataset) == null ? void 0 : g.mjrFilterKind) || "").trim().toLowerCase(), r = ((A = e == null ? void 0 : e.dataset) == null ? void 0 : A.mjrFilterWorkflowOnly) === "1", l = Number(((p = e == null ? void 0 : e.dataset) == null ? void 0 : p.mjrFilterMinRating) || 0) || 0, a = String(((b = e == null ? void 0 : e.dataset) == null ? void 0 : b.mjrFilterWorkflowType) || "").trim().toLowerCase(), c = String(((L = e == null ? void 0 : e.dataset) == null ? void 0 : L.mjrFilterDateExact) || "").trim(), s = String((t == null ? void 0 : t.subfolder) || "").trim().toLowerCase(), d = String((t == null ? void 0 : t.type) || (t == null ? void 0 : t.source) || "output").trim().toLowerCase(), u = String((t == null ? void 0 : t.kind) || "").trim().toLowerCase(), I = String((t == null ? void 0 : t.workflow_type) || (t == null ? void 0 : t.workflowType) || "").trim().toLowerCase(), y = String((t == null ? void 0 : t.date_exact) || (t == null ? void 0 : t.date) || "").trim(), S = (t == null ? void 0 : t.has_workflow) ?? (t == null ? void 0 : t.hasWorkflow) ?? null; - return !(n && n !== "all" && d && d !== n || i && s !== i || o && u && u !== o || r && S !== null && !S || l > 0 && (Number((t == null ? void 0 : t.rating) || 0) || 0) < l || a && I !== a || c && y && y !== c); + const n = String(((S = e == null ? void 0 : e.dataset) == null ? void 0 : S.mjrScope) || "output").trim().toLowerCase(), i = String(((W = e == null ? void 0 : e.dataset) == null ? void 0 : W.mjrSubfolder) || "").trim().toLowerCase(), o = String(((g = e == null ? void 0 : e.dataset) == null ? void 0 : g.mjrFilterKind) || "").trim().toLowerCase(), r = ((y = e == null ? void 0 : e.dataset) == null ? void 0 : y.mjrFilterWorkflowOnly) === "1", l = Number(((p = e == null ? void 0 : e.dataset) == null ? void 0 : p.mjrFilterMinRating) || 0) || 0, a = String(((b = e == null ? void 0 : e.dataset) == null ? void 0 : b.mjrFilterWorkflowType) || "").trim().toLowerCase(), c = String(((L = e == null ? void 0 : e.dataset) == null ? void 0 : L.mjrFilterDateExact) || "").trim(), s = String((t == null ? void 0 : t.subfolder) || "").trim().toLowerCase(), d = String((t == null ? void 0 : t.type) || (t == null ? void 0 : t.source) || "output").trim().toLowerCase(), u = String((t == null ? void 0 : t.kind) || "").trim().toLowerCase(), I = String((t == null ? void 0 : t.workflow_type) || (t == null ? void 0 : t.workflowType) || "").trim().toLowerCase(), A = String((t == null ? void 0 : t.date_exact) || (t == null ? void 0 : t.date) || "").trim(), h = (t == null ? void 0 : t.has_workflow) ?? (t == null ? void 0 : t.hasWorkflow) ?? null; + return !(n && n !== "all" && d && d !== n || i && s !== i || o && u && u !== o || r && h !== null && !h || l > 0 && (Number((t == null ? void 0 : t.rating) || 0) || 0) < l || a && I !== a || c && A && A !== c); } -async function FL(e, t, n, i, o, { requestId: r = 0, signal: l = null } = {}) { - var w, R, Y, F, N, V, k, K, z, B, J, P, H, $, E, oe, M, j, O, D, q, ee, ce, ue, U; +async function OL(e, t, n, i, o, { requestId: r = 0, signal: l = null } = {}) { + var w, R, V, O, k, Y, N, U, z, T, J, P, E, $, H, ne, M, v, F, D, q, ee, ae, ue, B; const a = (Q) => { var _; if (typeof Q == "string") return Q; @@ -42069,10 +42106,10 @@ async function FL(e, t, n, i, o, { requestId: r = 0, signal: l = null } = {}) { if (typeof ((_ = Q.target) == null ? void 0 : _.value) == "string") return Q.target.value; } return String(Q || ""); - }, c = ((w = e == null ? void 0 : e.dataset) == null ? void 0 : w.mjrScope) || "output", s = ((R = e == null ? void 0 : e.dataset) == null ? void 0 : R.mjrCustomRootId) || "", d = ((Y = e == null ? void 0 : e.dataset) == null ? void 0 : Y.mjrSubfolder) || "", u = ((F = e == null ? void 0 : e.dataset) == null ? void 0 : F.mjrFilterKind) || "", I = ((N = e == null ? void 0 : e.dataset) == null ? void 0 : N.mjrFilterWorkflowOnly) === "1", y = Number(((V = e == null ? void 0 : e.dataset) == null ? void 0 : V.mjrFilterMinRating) || 0) || 0, S = Number(((k = e == null ? void 0 : e.dataset) == null ? void 0 : k.mjrFilterMinSizeMB) || 0) || 0, Z = Number(((K = e == null ? void 0 : e.dataset) == null ? void 0 : K.mjrFilterMaxSizeMB) || 0) || 0, C = String(((z = e == null ? void 0 : e.dataset) == null ? void 0 : z.mjrFilterResolutionCompare) || "gte") === "lte" ? "lte" : "gte", g = Number(((B = e == null ? void 0 : e.dataset) == null ? void 0 : B.mjrFilterMinWidth) || 0) || 0, A = Number(((J = e == null ? void 0 : e.dataset) == null ? void 0 : J.mjrFilterMinHeight) || 0) || 0, p = Number(((P = e == null ? void 0 : e.dataset) == null ? void 0 : P.mjrFilterMaxWidth) || 0) || 0, b = Number(((H = e == null ? void 0 : e.dataset) == null ? void 0 : H.mjrFilterMaxHeight) || 0) || 0, L = String((($ = e == null ? void 0 : e.dataset) == null ? void 0 : $.mjrFilterWorkflowType) || "").trim().toUpperCase(), h = String(((E = e == null ? void 0 : e.dataset) == null ? void 0 : E.mjrFilterDateRange) || "").trim().toLowerCase(), G = String(((oe = e == null ? void 0 : e.dataset) == null ? void 0 : oe.mjrFilterDateExact) || "").trim(), W = ((M = e == null ? void 0 : e.dataset) == null ? void 0 : M.mjrSort) || "mtime_desc", f = String(((j = e == null ? void 0 : e.dataset) == null ? void 0 : j.mjrGroupStacks) || "") === "1", x = a(t).trim() || "*", T = /^\[object\s+HTML.*Element\]$/i.test(x) ? "*" : x, v = o.sanitizeQuery(T) || T; + }, c = ((w = e == null ? void 0 : e.dataset) == null ? void 0 : w.mjrScope) || "output", s = ((R = e == null ? void 0 : e.dataset) == null ? void 0 : R.mjrCustomRootId) || "", d = ((V = e == null ? void 0 : e.dataset) == null ? void 0 : V.mjrSubfolder) || "", u = ((O = e == null ? void 0 : e.dataset) == null ? void 0 : O.mjrFilterKind) || "", I = ((k = e == null ? void 0 : e.dataset) == null ? void 0 : k.mjrFilterWorkflowOnly) === "1", A = Number(((Y = e == null ? void 0 : e.dataset) == null ? void 0 : Y.mjrFilterMinRating) || 0) || 0, h = Number(((N = e == null ? void 0 : e.dataset) == null ? void 0 : N.mjrFilterMinSizeMB) || 0) || 0, S = Number(((U = e == null ? void 0 : e.dataset) == null ? void 0 : U.mjrFilterMaxSizeMB) || 0) || 0, W = String(((z = e == null ? void 0 : e.dataset) == null ? void 0 : z.mjrFilterResolutionCompare) || "gte") === "lte" ? "lte" : "gte", g = Number(((T = e == null ? void 0 : e.dataset) == null ? void 0 : T.mjrFilterMinWidth) || 0) || 0, y = Number(((J = e == null ? void 0 : e.dataset) == null ? void 0 : J.mjrFilterMinHeight) || 0) || 0, p = Number(((P = e == null ? void 0 : e.dataset) == null ? void 0 : P.mjrFilterMaxWidth) || 0) || 0, b = Number(((E = e == null ? void 0 : e.dataset) == null ? void 0 : E.mjrFilterMaxHeight) || 0) || 0, L = String((($ = e == null ? void 0 : e.dataset) == null ? void 0 : $.mjrFilterWorkflowType) || "").trim().toUpperCase(), C = String(((H = e == null ? void 0 : e.dataset) == null ? void 0 : H.mjrFilterDateRange) || "").trim().toLowerCase(), G = String(((ne = e == null ? void 0 : e.dataset) == null ? void 0 : ne.mjrFilterDateExact) || "").trim(), Z = ((M = e == null ? void 0 : e.dataset) == null ? void 0 : M.mjrSort) || "mtime_desc", f = String(((v = e == null ? void 0 : e.dataset) == null ? void 0 : v.mjrGroupStacks) || "") === "1", x = a(t).trim() || "*", K = /^\[object\s+HTML.*Element\]$/i.test(x) ? "*" : x, j = o.sanitizeQuery(K) || K; try { - const Q = String(c || "").toLowerCase() === "output", _ = !!(d || s || u || I || y > 0 || S > 0 || Z > 0 || g > 0 || A > 0 || p > 0 || b > 0 || L || h || G || f), le = Q && Number(i ?? 0) === 0 && v === "*" && !_ && String(W || "mtime_desc").toLowerCase() === "mtime_desc", de = !(Q && (Number(i ?? 0) > 0 || le)), se = o.buildListURL({ - q: v, + const Q = String(c || "").toLowerCase() === "output", _ = !!(d || s || u || I || A > 0 || h > 0 || S > 0 || g > 0 || y > 0 || p > 0 || b > 0 || L || C || G || f), le = Q && Number(i ?? 0) === 0 && j === "*" && !_ && String(Z || "mtime_desc").toLowerCase() === "mtime_desc", ce = !(Q && (Number(i ?? 0) > 0 || le)), de = o.buildListURL({ + q: j, limit: n, offset: i, scope: c, @@ -42080,46 +42117,46 @@ async function FL(e, t, n, i, o, { requestId: r = 0, signal: l = null } = {}) { customRootId: s || null, kind: u || null, hasWorkflow: I ? !0 : null, - minRating: y > 0 ? y : null, - minSizeMB: S > 0 ? S : null, - maxSizeMB: Z > 0 ? Z : null, - resolutionCompare: C, + minRating: A > 0 ? A : null, + minSizeMB: h > 0 ? h : null, + maxSizeMB: S > 0 ? S : null, + resolutionCompare: W, minWidth: g > 0 ? g : null, - minHeight: A > 0 ? A : null, + minHeight: y > 0 ? y : null, maxWidth: p > 0 ? p : null, maxHeight: b > 0 ? b : null, workflowType: L || null, - dateRange: h || null, + dateRange: C || null, dateExact: G || null, - sort: W, - includeTotal: de, + sort: Z, + includeTotal: ce, groupStacks: f - }), ge = await o.get(se, { timeoutMs: 12e4, ...l ? { signal: l } : {} }); + }), ge = await o.get(de, { timeoutMs: 12e4, ...l ? { signal: l } : {} }); try { - const je = o.getGridState(e); - if (je && Number(je.requestId) !== Number(r)) + const Le = o.getGridState(e); + if (Le && Number(Le.requestId) !== Number(r)) return { ok: !1, stale: !0, error: "Stale response" }; - } catch (je) { - (O = console.debug) == null || O.call(console, je); + } catch (Le) { + (F = console.debug) == null || F.call(console, Le); } if (ge.ok) { - const je = ((D = ge.data) == null ? void 0 : D.assets) || [], Se = Array.isArray(je) ? je.length : 0, ke = (q = ge.data) == null ? void 0 : q.total, we = ke == null ? null : Number(ke ?? 0) || 0, Je = Math.max(0, Number((ee = ge.data) == null ? void 0 : ee.limit) || 0), $e = Math.max(0, Number((ce = ge.data) == null ? void 0 : ce.offset) || 0); + const Le = ((D = ge.data) == null ? void 0 : D.assets) || [], xe = Array.isArray(Le) ? Le.length : 0, Xe = (q = ge.data) == null ? void 0 : q.total, Me = Xe == null ? null : Number(Xe ?? 0) || 0, Fe = Math.max(0, Number((ee = ge.data) == null ? void 0 : ee.limit) || 0), it = Math.max(0, Number((ae = ge.data) == null ? void 0 : ae.offset) || 0); return { ok: !0, - assets: je, - total: we, - count: Se, - limit: Je, - offset: $e, - sortKey: W, - safeQuery: v + assets: Le, + total: Me, + count: xe, + limit: Fe, + offset: it, + sortKey: Z, + safeQuery: j }; } try { if (String((ge == null ? void 0 : ge.code) || "") === "ABORTED") return { ok: !1, aborted: !0, error: "Aborted" }; - } catch (je) { - (ue = console.debug) == null || ue.call(console, je); + } catch (Le) { + (ue = console.debug) == null || ue.call(console, Le); } return { ok: !1, error: ge.error }; } catch (Q) { @@ -42127,7 +42164,7 @@ async function FL(e, t, n, i, o, { requestId: r = 0, signal: l = null } = {}) { if (String((Q == null ? void 0 : Q.name) || "") === "AbortError") return { ok: !1, aborted: !0, error: "Aborted" }; } catch (_) { - (U = console.debug) == null || U.call(console, _); + (B = console.debug) == null || B.call(console, _); } return { ok: !1, error: Q.message }; } @@ -42145,7 +42182,7 @@ function Ba(e, t) { return -(Number(e == null ? void 0 : e.mtime) || 0); } } -function OL(e, t, n) { +function FL(e, t, n) { if (n === "name_desc") { const r = String((e == null ? void 0 : e.filename) || "").toLowerCase(), l = String((t == null ? void 0 : t.filename) || "").toLowerCase(); return r > l ? -1 : r < l ? 1 : 0; @@ -42174,7 +42211,7 @@ function Dr(e) { function Mp(e) { return (e == null ? void 0 : e._mjrLivePlaceholder) === !0 || (e == null ? void 0 : e.is_live_placeholder) === !0 || String((e == null ? void 0 : e.id) || "").trim().toLowerCase().startsWith("live:"); } -function Yc(e) { +function Xc(e) { var t; if (!e || typeof e != "object") return e; try { @@ -42202,7 +42239,7 @@ function TL(e, t, n) { const o = Tm(n); return o ? i.findIndex((r) => Tm(r) === o) : -1; } -function BL(e, t) { +function KL(e, t) { return !t || typeof t != "object" || !e || typeof e != "object" ? !1 : Mp(t) ? !0 : ![ "filename", "filepath", @@ -42222,7 +42259,7 @@ function BL(e, t) { "date" ].some((i) => Object.prototype.hasOwnProperty.call(e, i)); } -function UL(e, t) { +function BL(e, t) { const n = /* @__PURE__ */ new Set(), i = /* @__PURE__ */ new Set(), o = /* @__PURE__ */ new Map(), r = []; for (const l of Array.isArray(e == null ? void 0 : e.assets) ? e.assets : []) { const a = (l == null ? void 0 : l.id) != null ? String(l.id) : "", c = t.assetKey(l), s = fr(l == null ? void 0 : l.filename); @@ -42230,11 +42267,11 @@ function UL(e, t) { if (s) { const d = o.get(s); if (d) { - const u = Array.isArray(d._mjrDupMembers) ? d._mjrDupMembers : [d], I = new Set(u.map((S) => String((S == null ? void 0 : S.id) || ""))), y = [ + const u = Array.isArray(d._mjrDupMembers) ? d._mjrDupMembers : [d], I = new Set(u.map((h) => String((h == null ? void 0 : h.id) || ""))), A = [ ...u, - ...[l].filter((S) => !I.has(String((S == null ? void 0 : S.id) || ""))) + ...[l].filter((h) => !I.has(String((h == null ? void 0 : h.id) || ""))) ]; - d._mjrDupStack = !0, d._mjrDupMembers = y, d._mjrDupCount = y.length, d._mjrNameCollision = !1, delete d._mjrNameCollisionCount, delete d._mjrNameCollisionPaths, l._mjrNameCollision = !1, delete l._mjrNameCollisionCount, delete l._mjrNameCollisionPaths, l._mjrDupStack = !1, l._mjrDupMembers = null, l._mjrDupCount = 0; + d._mjrDupStack = !0, d._mjrDupMembers = A, d._mjrDupCount = A.length, d._mjrNameCollision = !1, delete d._mjrNameCollisionCount, delete d._mjrNameCollisionPaths, l._mjrNameCollision = !1, delete l._mjrNameCollisionCount, delete l._mjrNameCollisionPaths, l._mjrDupStack = !1, l._mjrDupMembers = null, l._mjrDupCount = 0; continue; } } @@ -42244,7 +42281,7 @@ function UL(e, t) { e.assets = r, e.assetIdSet = n, e.seenKeys = i; } function Ua(e, t) { - var l, a, c, s, d, u, I, y, S, Z, C; + var l, a, c, s, d, u, I, A, h, S, W; const n = t.upsertState.get(e); if (!n || n.pending.size === 0 || n.flushing) return; n.flushing = !0, n.timer && (clearTimeout(n.timer), n.timer = null); @@ -42253,15 +42290,15 @@ function Ua(e, t) { const o = t.getOrCreateState(e), r = t.ensureVirtualGrid(e, o); try { let g = !1; - for (const [A, p] of i.entries()) { + for (const [y, p] of i.entries()) { const b = Mp(p); o.assetKeyFn = t.assetKey; - const L = FI(p, o, t.loadMajoorSettings); + const L = OI(p, o, t.loadMajoorSettings); if (Array.isArray(L == null ? void 0 : L.removed) && L.removed.length) { const w = new Set(L.removed); o.assets = o.assets.filter((R) => { - const Y = !w.has(R); - return Y || as(o, R, o), Y; + const V = !w.has(R); + return V || cs(o, R, o), V; }); try { o.hiddenPngSiblings = (Number(o.hiddenPngSiblings || 0) || 0) + L.removed.length; @@ -42278,36 +42315,36 @@ function Ua(e, t) { } continue; } - const h = o.assets.findIndex((w) => String(w.id) === A), G = h > -1 ? o.assets[h] : null, W = G ? { ...G, ...p } : p, f = h > -1 ? h : TL(o, A, W), X = f > -1 ? o.assets[f] : null, x = X ? { ...X, ...p } : W, T = t.assetKey(W); + const C = o.assets.findIndex((w) => String(w.id) === y), G = C > -1 ? o.assets[C] : null, Z = G ? { ...G, ...p } : p, f = C > -1 ? C : TL(o, y, Z), X = f > -1 ? o.assets[f] : null, x = X ? { ...X, ...p } : Z, K = t.assetKey(Z); if (!RL(e, x)) { if (f > -1) { - if (BL(p, X)) { - Object.assign(X, p), b || Yc(X), o.assets[f] = { ...X }, g = !0; + if (KL(p, X)) { + Object.assign(X, p), b || Xc(X), o.assets[f] = { ...X }, g = !0; continue; } const [w] = o.assets.splice(f, 1); - as(o, w, o), g = !0; + cs(o, w, o), g = !0; } continue; } if (f > -1) { const w = t.assetKey(X); - Object.assign(X, p), b || Yc(X); - const R = { ...X }, Y = t.assetKey(R); - o.assets[f] = R, w && w !== Y && ((s = (c = o.seenKeys) == null ? void 0 : c.delete) == null || s.call(c, w), Y && ((u = (d = o.seenKeys) == null ? void 0 : d.add) == null || u.call(d, Y))), g = !0; - } else if (!(o.seenKeys.has(T) || p.id != null && ((y = (I = o.assetIdSet) == null ? void 0 : I.has) == null ? void 0 : y.call(I, A)))) { - const R = e.dataset.mjrSort || "mtime_desc", Y = b ? W : Yc({ ...W }), F = JL(o.assets, Y, R); - o.seenKeys.add(T), p.id != null && ((Z = (S = o.assetIdSet) == null ? void 0 : S.add) == null || Z.call(S, A)), o.assets.splice(F, 0, Y), g = !0; + Object.assign(X, p), b || Xc(X); + const R = { ...X }, V = t.assetKey(R); + o.assets[f] = R, w && w !== V && ((s = (c = o.seenKeys) == null ? void 0 : c.delete) == null || s.call(c, w), V && ((u = (d = o.seenKeys) == null ? void 0 : d.add) == null || u.call(d, V))), g = !0; + } else if (!(o.seenKeys.has(K) || p.id != null && ((A = (I = o.assetIdSet) == null ? void 0 : I.has) == null ? void 0 : A.call(I, y)))) { + const R = e.dataset.mjrSort || "mtime_desc", V = b ? Z : Xc({ ...Z }), O = JL(o.assets, V, R); + o.seenKeys.add(K), p.id != null && ((S = (h = o.assetIdSet) == null ? void 0 : h.add) == null || S.call(h, y)), o.assets.splice(O, 0, V), g = !0; } } if (g && r) { - UL(o, t); + BL(o, t); try { e.dataset.mjrHiddenPngSiblings = String( Number(o.hiddenPngSiblings || 0) || 0 ); - } catch (A) { - (C = console.debug) == null || C.call(console, A); + } catch (y) { + (W = console.debug) == null || W.call(console, y); } r.setItems(o.assets); } @@ -42320,7 +42357,7 @@ function Ua(e, t) { } } } -function Bm(e, t, n) { +function Km(e, t, n) { if (!t || !t.id) return !1; const i = n.getOrCreateState(e), o = String(t.id); if (!n.ensureVirtualGrid(e, i)) return !1; @@ -42329,8 +42366,8 @@ function Bm(e, t, n) { l.timer = null, Ua(e, n); }, n.debounceMs)), !0; } -const pi = /* @__PURE__ */ new Map(), KL = 8, DL = 800, Sp = "mjr_grid_snapshot_cache_v2", Gp = 1800 * 1e3, EL = 200, HL = 50, kc = /* @__PURE__ */ new WeakMap(), Hl = 50; -let Um = !1; +const pi = /* @__PURE__ */ new Map(), UL = 8, DL = 800, Gp = "mjr_grid_snapshot_cache_v2", Sp = 1800 * 1e3, HL = 200, EL = 50, Nc = /* @__PURE__ */ new WeakMap(), El = 50; +let Bm = !1; const qL = [ "id", "filename", @@ -42383,10 +42420,10 @@ const qL = [ "date", "date_exact" ]; -function Km(e) { +function Um(e) { return new Promise((t) => setTimeout(t, Math.max(0, Number(e) || 0))); } -function Fn(e, t = "") { +function On(e, t = "") { try { return String(e ?? t).trim(); } catch { @@ -42404,29 +42441,29 @@ function PL(e) { ).trim().toLowerCase(); return r ? `${t}|${n}|path|${r}` : ""; } -function Xc(e = {}) { +function kc(e = {}) { return JSON.stringify({ - scope: Fn(e.scope || "output", "output"), - query: Fn(e.query || "*", "*"), - customRootId: Fn(e.customRootId || ""), - subfolder: Fn(e.subfolder || ""), - collectionId: Fn(e.collectionId || ""), - viewScope: Fn(e.viewScope || ""), - kind: Fn(e.kind || ""), - workflowOnly: Fn(e.workflowOnly ? "1" : ""), - minRating: Fn(e.minRating || ""), - minSizeMB: Fn(e.minSizeMB || ""), - maxSizeMB: Fn(e.maxSizeMB || ""), - resolutionCompare: Fn(e.resolutionCompare || ""), - minWidth: Fn(e.minWidth || ""), - minHeight: Fn(e.minHeight || ""), - maxWidth: Fn(e.maxWidth || ""), - maxHeight: Fn(e.maxHeight || ""), - workflowType: Fn(e.workflowType || "").toUpperCase(), - dateRange: Fn(e.dateRange || ""), - dateExact: Fn(e.dateExact || ""), - sort: Fn(e.sort || "mtime_desc", "mtime_desc"), - semanticMode: Fn(e.semanticMode ? "1" : "") + scope: On(e.scope || "output", "output"), + query: On(e.query || "*", "*"), + customRootId: On(e.customRootId || ""), + subfolder: On(e.subfolder || ""), + collectionId: On(e.collectionId || ""), + viewScope: On(e.viewScope || ""), + kind: On(e.kind || ""), + workflowOnly: On(e.workflowOnly ? "1" : ""), + minRating: On(e.minRating || ""), + minSizeMB: On(e.minSizeMB || ""), + maxSizeMB: On(e.maxSizeMB || ""), + resolutionCompare: On(e.resolutionCompare || ""), + minWidth: On(e.minWidth || ""), + minHeight: On(e.minHeight || ""), + maxWidth: On(e.maxWidth || ""), + maxHeight: On(e.maxHeight || ""), + workflowType: On(e.workflowType || "").toUpperCase(), + dateRange: On(e.dateRange || ""), + dateExact: On(e.dateExact || ""), + sort: On(e.sort || "mtime_desc", "mtime_desc"), + semanticMode: On(e.semanticMode ? "1" : "") }); } function xp() { @@ -42446,27 +42483,27 @@ function jp(e) { function vp(e) { if (!e || typeof e != "object") return null; const t = Number(e.at || 0) || 0; - if (!t || Date.now() - t > Gp) return null; + if (!t || Date.now() - t > Sp) return null; const n = Array.isArray(e.assets) ? e.assets.map(jp).filter(Boolean) : []; if (!n.length) return null; const i = Number(e.total ?? n.length), o = Number(e.offset ?? n.length); return { assets: n, - title: Fn(e.title || "Cached", "Cached"), + title: On(e.title || "Cached", "Cached"), at: t, total: Number.isFinite(i) ? Math.max(0, i) : n.length, offset: Number.isFinite(o) ? Math.max(n.length, o) : n.length, done: !!e.done, - query: Fn(e.query || "*", "*") + query: On(e.query || "*", "*") }; } function Lp() { const e = Date.now(); for (const [t, n] of pi.entries()) { const i = Number((n == null ? void 0 : n.at) || 0) || 0; - (!i || e - i > Gp) && pi.delete(t); + (!i || e - i > Sp) && pi.delete(t); } - for (; pi.size > KL; ) { + for (; pi.size > UL; ) { const t = pi.keys().next().value; if (!t) break; pi.delete(t); @@ -42474,10 +42511,10 @@ function Lp() { } function QL() { var e, t; - if (!Um) { - Um = !0; + if (!Bm) { + Bm = !0; try { - const n = xp(), i = (e = n == null ? void 0 : n.getItem) == null ? void 0 : e.call(n, Sp); + const n = xp(), i = (e = n == null ? void 0 : n.getItem) == null ? void 0 : e.call(n, Gp); if (!i) return; const o = JSON.parse(i), r = Array.isArray(o == null ? void 0 : o.entries) ? o.entries : []; for (const l of r) { @@ -42491,14 +42528,14 @@ function QL() { } } } -function Gs() { +function xs() { var e; try { Lp(); const t = xp(); if (!t) return; t.setItem( - Sp, + Gp, JSON.stringify({ version: 2, entries: Array.from(pi.entries()) @@ -42511,7 +42548,7 @@ function Gs() { function _L(e) { QL(); const t = vp(pi.get(e)); - return t ? (pi.delete(e), pi.set(e, t), Gs(), t) : (pi.delete(e), Gs(), null); + return t ? (pi.delete(e), pi.set(e, t), xs(), t) : (pi.delete(e), xs(), null); } function Dm(e) { if (e == null) return e; @@ -42535,10 +42572,10 @@ function $L(e) { } return String(e || ""); } -function eV(e) { +function eY(e) { return e ? typeof e == "object" && "value" in e ? e.value || null : e : null; } -function tV(e) { +function tY(e) { var n; const t = String(e ?? ""); try { @@ -42549,7 +42586,7 @@ function tV(e) { } return t.replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1"); } -async function Em() { +async function Hm() { await wo(), await new Promise((e) => { try { requestAnimationFrame(() => requestAnimationFrame(e)); @@ -42558,7 +42595,7 @@ async function Em() { } }); } -function Nc(e, t) { +function Rc(e, t) { const n = String(e || "Failed to load"); try { const i = String((t == null ? void 0 : t.message) || t || "").trim(), o = i.toLowerCase(); @@ -42567,16 +42604,16 @@ function Nc(e, t) { return n; } } -function nV(e, t) { - const n = Math.max(1, Math.min(fe.MAX_PAGE_SIZE, Number(e) || 1)), i = Math.max(0, Number(t) || 0); +function nY(e, t) { + const n = Math.max(1, Math.min(he.MAX_PAGE_SIZE, Number(e) || 1)), i = Math.max(0, Number(t) || 0); if (i <= 0) return n; const o = 2 ** Math.min(i, 5); - return Math.max(1, Math.min(fe.MAX_PAGE_SIZE, n * o)); + return Math.max(1, Math.min(he.MAX_PAGE_SIZE, n * o)); } function ql(e) { e.seenKeys = /* @__PURE__ */ new Set(), e.assetIdSet = /* @__PURE__ */ new Set(), e.filenameCounts = /* @__PURE__ */ new Map(), e.nonImageSiblingKeys = /* @__PURE__ */ new Set(), e.stemMap = /* @__PURE__ */ new Map(), e.renderedFilenameMap = /* @__PURE__ */ new Map(), e.hiddenPngSiblings = 0; } -function iV({ +function iY({ gridContainerRef: e, state: t, setLoadingMessage: n, @@ -42592,106 +42629,106 @@ function iV({ }, canLoadMore: I = null } = {}) { - var oe; - let y = !1, S = null, Z = null; - function C() { - return eV(e); + var ne; + let A = !1, h = null, S = null; + function W() { + return eY(e); } function g() { - var j, O, D, q, ee, ce, ue, U, Q, _, le, de, se, ge, je, Se, ke, we, Je, $e, qe; - const M = C(); + var v, F, D, q, ee, ae, ue, B, Q, _, le, ce, de, ge, Le, xe, Xe, Me, Fe, it, qe; + const M = W(); return { - scope: ((j = M == null ? void 0 : M.dataset) == null ? void 0 : j.mjrScope) || "output", - query: ((O = M == null ? void 0 : M.dataset) == null ? void 0 : O.mjrQuery) || t.query || "*", + scope: ((v = M == null ? void 0 : M.dataset) == null ? void 0 : v.mjrScope) || "output", + query: ((F = M == null ? void 0 : M.dataset) == null ? void 0 : F.mjrQuery) || t.query || "*", customRootId: ((D = M == null ? void 0 : M.dataset) == null ? void 0 : D.mjrCustomRootId) || "", subfolder: ((q = M == null ? void 0 : M.dataset) == null ? void 0 : q.mjrSubfolder) || "", collectionId: ((ee = M == null ? void 0 : M.dataset) == null ? void 0 : ee.mjrCollectionId) || "", - viewScope: ((ce = M == null ? void 0 : M.dataset) == null ? void 0 : ce.mjrViewScope) || "", + viewScope: ((ae = M == null ? void 0 : M.dataset) == null ? void 0 : ae.mjrViewScope) || "", kind: ((ue = M == null ? void 0 : M.dataset) == null ? void 0 : ue.mjrFilterKind) || "", - workflowOnly: ((U = M == null ? void 0 : M.dataset) == null ? void 0 : U.mjrFilterWorkflowOnly) === "1", + workflowOnly: ((B = M == null ? void 0 : M.dataset) == null ? void 0 : B.mjrFilterWorkflowOnly) === "1", minRating: ((Q = M == null ? void 0 : M.dataset) == null ? void 0 : Q.mjrFilterMinRating) || "", minSizeMB: ((_ = M == null ? void 0 : M.dataset) == null ? void 0 : _.mjrFilterMinSizeMB) || "", maxSizeMB: ((le = M == null ? void 0 : M.dataset) == null ? void 0 : le.mjrFilterMaxSizeMB) || "", - resolutionCompare: ((de = M == null ? void 0 : M.dataset) == null ? void 0 : de.mjrFilterResolutionCompare) || "", - minWidth: ((se = M == null ? void 0 : M.dataset) == null ? void 0 : se.mjrFilterMinWidth) || "", + resolutionCompare: ((ce = M == null ? void 0 : M.dataset) == null ? void 0 : ce.mjrFilterResolutionCompare) || "", + minWidth: ((de = M == null ? void 0 : M.dataset) == null ? void 0 : de.mjrFilterMinWidth) || "", minHeight: ((ge = M == null ? void 0 : M.dataset) == null ? void 0 : ge.mjrFilterMinHeight) || "", - maxWidth: ((je = M == null ? void 0 : M.dataset) == null ? void 0 : je.mjrFilterMaxWidth) || "", - maxHeight: ((Se = M == null ? void 0 : M.dataset) == null ? void 0 : Se.mjrFilterMaxHeight) || "", - workflowType: ((ke = M == null ? void 0 : M.dataset) == null ? void 0 : ke.mjrFilterWorkflowType) || "", - dateRange: ((we = M == null ? void 0 : M.dataset) == null ? void 0 : we.mjrFilterDateRange) || "", - dateExact: ((Je = M == null ? void 0 : M.dataset) == null ? void 0 : Je.mjrFilterDateExact) || "", - sort: (($e = M == null ? void 0 : M.dataset) == null ? void 0 : $e.mjrSort) || "mtime_desc", + maxWidth: ((Le = M == null ? void 0 : M.dataset) == null ? void 0 : Le.mjrFilterMaxWidth) || "", + maxHeight: ((xe = M == null ? void 0 : M.dataset) == null ? void 0 : xe.mjrFilterMaxHeight) || "", + workflowType: ((Xe = M == null ? void 0 : M.dataset) == null ? void 0 : Xe.mjrFilterWorkflowType) || "", + dateRange: ((Me = M == null ? void 0 : M.dataset) == null ? void 0 : Me.mjrFilterDateRange) || "", + dateExact: ((Fe = M == null ? void 0 : M.dataset) == null ? void 0 : Fe.mjrFilterDateExact) || "", + sort: ((it = M == null ? void 0 : M.dataset) == null ? void 0 : it.mjrSort) || "mtime_desc", semanticMode: ((qe = M == null ? void 0 : M.dataset) == null ? void 0 : qe.mjrSemanticMode) === "1" }; } - function A({ reset: M = !0, preserveVisibleUntilReady: j = !0 } = {}) { - return !M || j === !1 ? !1 : Array.isArray(t.assets) && t.assets.length > 0; + function y({ reset: M = !0, preserveVisibleUntilReady: v = !0 } = {}) { + return !M || v === !1 ? !1 : Array.isArray(t.assets) && t.assets.length > 0; } function p() { var M; try { if (typeof I == "function") return !!I(); - } catch (j) { - (M = console.debug) == null || M.call(console, j); + } catch (v) { + (M = console.debug) == null || M.call(console, v); } - return md(C(), s()); + return md(W(), s()); } function b() { - var M, j; - if (!fe.DEFER_GRID_FETCH_DURING_EXECUTION) + var M, v; + if (!he.DEFER_GRID_FETCH_DURING_EXECUTION) return !1; try { return !!String(((M = window == null ? void 0 : window.__MJR_EXECUTION_RUNTIME__) == null ? void 0 : M.active_prompt_id) || "").trim(); - } catch (O) { - return (j = console.debug) == null || j.call(console, O), !1; + } catch (F) { + return (v = console.debug) == null || v.call(console, F), !1; } } function L() { - var M, j; + var M, v; try { - S != null && S.timer && clearTimeout(S.timer); - } catch (O) { - (M = console.debug) == null || M.call(console, O); + h != null && h.timer && clearTimeout(h.timer); + } catch (F) { + (M = console.debug) == null || M.call(console, F); } try { - S != null && S.listener && window.removeEventListener(ht.RUNTIME_STATUS, S.listener); - } catch (O) { - (j = console.debug) == null || j.call(console, O); + h != null && h.listener && window.removeEventListener(ft.RUNTIME_STATUS, h.listener); + } catch (F) { + (v = console.debug) == null || v.call(console, F); + } + h = null; + } + function C() { + var M; + try { + S && clearTimeout(S); + } catch (v) { + (M = console.debug) == null || M.call(console, v); } S = null; } - function h() { - var M; - try { - Z && clearTimeout(Z); - } catch (j) { - (M = console.debug) == null || M.call(console, j); - } - Z = null; - } - function G(M, j = fe.PREFETCH_NEXT_PAGE_DELAY_MS) { - if (!fe.PREFETCH_NEXT_PAGE) + function G(M, v = he.PREFETCH_NEXT_PAGE_DELAY_MS) { + if (!he.PREFETCH_NEXT_PAGE) return; - h(); - const O = Math.max(0, Number(j) || 0); - Z = setTimeout(() => { - Z = null, !(t.requestId !== M || t.done || t.loading) && R().catch((D) => { + C(); + const F = Math.max(0, Number(v) || 0); + S = setTimeout(() => { + S = null, !(t.requestId !== M || t.done || t.loading) && R().catch((D) => { var q; (q = console.debug) == null || q.call(console, "[AssetsManager][GridLoader] Delayed prefetch failed", D); }); - }, O); + }, F); } - function W(M, j = {}) { + function Z(M, v = {}) { var q; L(); - const O = () => { - var ue, U; + const F = () => { + var ue, B; if (b()) { try { - S = { - ...S, - timer: setTimeout(O, 1250) + h = { + ...h, + timer: setTimeout(F, 1250) }; } catch (Q) { (ue = console.debug) == null || ue.call(console, Q); @@ -42699,10 +42736,10 @@ function iV({ return; } L(); - const ee = C(), ce = String(((U = ee == null ? void 0 : ee.dataset) == null ? void 0 : U.mjrQuery) || "").trim() || M; + const ee = W(), ae = String(((B = ee == null ? void 0 : ee.dataset) == null ? void 0 : B.mjrQuery) || "").trim() || M; Promise.resolve().then( - () => Y(ce, { - ...j || {}, + () => V(ae, { + ...v || {}, reset: !0, preserveVisibleUntilReady: !0 }) @@ -42712,138 +42749,138 @@ function iV({ }); }, D = (ee) => { var ue; - String(((ue = ee == null ? void 0 : ee.detail) == null ? void 0 : ue.active_prompt_id) || "").trim() || O(); + String(((ue = ee == null ? void 0 : ee.detail) == null ? void 0 : ue.active_prompt_id) || "").trim() || F(); }; - S = { + h = { listener: D, - timer: setTimeout(O, 1250) + timer: setTimeout(F, 1250) }; try { - window.addEventListener(ht.RUNTIME_STATUS, D); + window.addEventListener(ft.RUNTIME_STATUS, D); } catch (ee) { (q = console.debug) == null || q.call(console, ee); } } - function f(M, j = null) { + function f(M, v = null) { var D; if (!M || typeof M != "object") return ""; - const O = M.id != null ? `id:${M.id}` : `${M.type || ""}|${Mi(M)}|${M.filepath || ""}|${M.subfolder || ""}|${M.filename || ""}`; + const F = M.id != null ? `id:${M.id}` : `${M.type || ""}|${Mi(M)}|${M.filepath || ""}|${M.subfolder || ""}|${M.filename || ""}`; try { - const q = j || C() || (globalThis == null ? void 0 : globalThis.__MJR_LAST_ASSETKEY_GRID__); - return OW(q, M, O); + const q = v || W() || (globalThis == null ? void 0 : globalThis.__MJR_LAST_ASSETKEY_GRID__); + return FW(q, M, F); } catch (q) { - return (D = console.debug) == null || D.call(console, q), O; + return (D = console.debug) == null || D.call(console, q), F; } } function X(M = "") { - var j, O, D, q, ee, ce, ue, U, Q, _, le, de, se, ge, je, Se, ke, we, Je, $e, qe, Ue; + var v, F, D, q, ee, ae, ue, B, Q, _, le, ce, de, ge, Le, xe, Xe, Me, Fe, it, qe, Pe; try { - const Te = C(), Oe = Array.isArray(t.assets) ? t.assets : []; - if (!Te || !Oe.length) return; - const pt = Oe.slice(0, DL).map(jp).filter(Boolean); - if (!pt.length) return; - const Me = pt.length < Oe.length, Xt = Number(t.offset || pt.length) || pt.length, Mt = Number(t.total ?? pt.length), me = Xc({ - scope: ((j = Te.dataset) == null ? void 0 : j.mjrScope) || "output", - query: ((O = Te.dataset) == null ? void 0 : O.mjrQuery) || t.query || "*", - customRootId: ((D = Te.dataset) == null ? void 0 : D.mjrCustomRootId) || "", - subfolder: ((q = Te.dataset) == null ? void 0 : q.mjrSubfolder) || "", - collectionId: ((ee = Te.dataset) == null ? void 0 : ee.mjrCollectionId) || "", - viewScope: ((ce = Te.dataset) == null ? void 0 : ce.mjrViewScope) || "", - kind: ((ue = Te.dataset) == null ? void 0 : ue.mjrFilterKind) || "", - workflowOnly: ((U = Te.dataset) == null ? void 0 : U.mjrFilterWorkflowOnly) === "1", - minRating: ((Q = Te.dataset) == null ? void 0 : Q.mjrFilterMinRating) || "", - minSizeMB: ((_ = Te.dataset) == null ? void 0 : _.mjrFilterMinSizeMB) || "", - maxSizeMB: ((le = Te.dataset) == null ? void 0 : le.mjrFilterMaxSizeMB) || "", - resolutionCompare: ((de = Te.dataset) == null ? void 0 : de.mjrFilterResolutionCompare) || "", - minWidth: ((se = Te.dataset) == null ? void 0 : se.mjrFilterMinWidth) || "", - minHeight: ((ge = Te.dataset) == null ? void 0 : ge.mjrFilterMinHeight) || "", - maxWidth: ((je = Te.dataset) == null ? void 0 : je.mjrFilterMaxWidth) || "", - maxHeight: ((Se = Te.dataset) == null ? void 0 : Se.mjrFilterMaxHeight) || "", - workflowType: ((ke = Te.dataset) == null ? void 0 : ke.mjrFilterWorkflowType) || "", - dateRange: ((we = Te.dataset) == null ? void 0 : we.mjrFilterDateRange) || "", - dateExact: ((Je = Te.dataset) == null ? void 0 : Je.mjrFilterDateExact) || "", - sort: (($e = Te.dataset) == null ? void 0 : $e.mjrSort) || "mtime_desc" + const Re = W(), rt = Array.isArray(t.assets) ? t.assets : []; + if (!Re || !rt.length) return; + const Te = rt.slice(0, DL).map(jp).filter(Boolean); + if (!Te.length) return; + const qt = Te.length < rt.length, kt = Number(t.offset || Te.length) || Te.length, we = Number(t.total ?? Te.length), me = kc({ + scope: ((v = Re.dataset) == null ? void 0 : v.mjrScope) || "output", + query: ((F = Re.dataset) == null ? void 0 : F.mjrQuery) || t.query || "*", + customRootId: ((D = Re.dataset) == null ? void 0 : D.mjrCustomRootId) || "", + subfolder: ((q = Re.dataset) == null ? void 0 : q.mjrSubfolder) || "", + collectionId: ((ee = Re.dataset) == null ? void 0 : ee.mjrCollectionId) || "", + viewScope: ((ae = Re.dataset) == null ? void 0 : ae.mjrViewScope) || "", + kind: ((ue = Re.dataset) == null ? void 0 : ue.mjrFilterKind) || "", + workflowOnly: ((B = Re.dataset) == null ? void 0 : B.mjrFilterWorkflowOnly) === "1", + minRating: ((Q = Re.dataset) == null ? void 0 : Q.mjrFilterMinRating) || "", + minSizeMB: ((_ = Re.dataset) == null ? void 0 : _.mjrFilterMinSizeMB) || "", + maxSizeMB: ((le = Re.dataset) == null ? void 0 : le.mjrFilterMaxSizeMB) || "", + resolutionCompare: ((ce = Re.dataset) == null ? void 0 : ce.mjrFilterResolutionCompare) || "", + minWidth: ((de = Re.dataset) == null ? void 0 : de.mjrFilterMinWidth) || "", + minHeight: ((ge = Re.dataset) == null ? void 0 : ge.mjrFilterMinHeight) || "", + maxWidth: ((Le = Re.dataset) == null ? void 0 : Le.mjrFilterMaxWidth) || "", + maxHeight: ((xe = Re.dataset) == null ? void 0 : xe.mjrFilterMaxHeight) || "", + workflowType: ((Xe = Re.dataset) == null ? void 0 : Xe.mjrFilterWorkflowType) || "", + dateRange: ((Me = Re.dataset) == null ? void 0 : Me.mjrFilterDateRange) || "", + dateExact: ((Fe = Re.dataset) == null ? void 0 : Fe.mjrFilterDateExact) || "", + sort: ((it = Re.dataset) == null ? void 0 : it.mjrSort) || "mtime_desc" }); if (!me) return; pi.delete(me), pi.set(me, { - assets: pt, + assets: Te, title: String(M || "").trim(), - query: String(t.query || ((qe = Te.dataset) == null ? void 0 : qe.mjrQuery) || "*").trim() || "*", - total: Number.isFinite(Mt) ? Mt : pt.length, - offset: Me ? pt.length : Math.max(pt.length, Xt), - done: Me ? !1 : !!t.done, + query: String(t.query || ((qe = Re.dataset) == null ? void 0 : qe.mjrQuery) || "*").trim() || "*", + total: Number.isFinite(we) ? we : Te.length, + offset: qt ? Te.length : Math.max(Te.length, kt), + done: qt ? !1 : !!t.done, at: Date.now() - }), Gs(); - } catch (Te) { - (Ue = console.debug) == null || Ue.call(console, Te); + }), xs(); + } catch (Re) { + (Pe = console.debug) == null || Pe.call(console, Re); } } function x() { - var j; - const M = C(); + var v; + const M = W(); if (M) try { - const O = kc.get(M); - if (!O) return; - O.timer && (clearTimeout(O.timer), O.timer = null), O.pending.clear(), O.flushing = !1; - } catch (O) { - (j = console.debug) == null || j.call(console, O); + const F = Nc.get(M); + if (!F) return; + F.timer && (clearTimeout(F.timer), F.timer = null), F.pending.clear(), F.flushing = !1; + } catch (F) { + (v = console.debug) == null || v.call(console, F); } } - function T(M, j) { - return IZ(M, j, t, { - loadMajoorSettings: Xn, + function K(M, v) { + return IZ(M, v, t, { + loadMajoorSettings: kn, clearGridMessage: () => { r(); }, ensureVirtualGrid: () => t.virtualGrid, setFileBadgeCollision: pZ, - assetKey: (O) => f(O, M), - ensureDupStackCard: (O, D, q) => JW(O, D, q) + assetKey: (F) => f(F, M), + ensureDupStackCard: (F, D, q) => JW(F, D, q) }); } - async function v(M, j, O, { requestId: D = 0, signal: q = null } = {}) { - var ce, ue, U, Q, _; - const ee = C(); + async function j(M, v, F, { requestId: D = 0, signal: q = null } = {}) { + var ae, ue, B, Q, _; + const ee = W(); if (!ee) return { ok: !1, error: "Grid unavailable" }; - if (O === 0) { - const le = String(((ce = ee.dataset) == null ? void 0 : ce.mjrScope) || "output").toLowerCase(), de = String(((ue = ee.dataset) == null ? void 0 : ue.mjrSort) || "mtime_desc").toLowerCase(), se = String(M || "*").trim() || "*"; - if (le === "output" && se === "*" && de === "mtime_desc") { - const je = wL("output:*:mtime_desc"); - if (je) + if (F === 0) { + const le = String(((ae = ee.dataset) == null ? void 0 : ae.mjrScope) || "output").toLowerCase(), ce = String(((ue = ee.dataset) == null ? void 0 : ue.mjrSort) || "mtime_desc").toLowerCase(), de = String(M || "*").trim() || "*"; + if (le === "output" && de === "*" && ce === "mtime_desc") { + const Le = wL("output:*:mtime_desc"); + if (Le) try { - const Se = await je; + const xe = await Le; if (Number(t.requestId) !== Number(D)) return { ok: !1, stale: !0, error: "Stale early fetch" }; if (q != null && q.aborted) return { ok: !1, aborted: !0, error: "Aborted" }; - const ke = (U = Se == null ? void 0 : Se.data) == null ? void 0 : U.assets; - if (Se != null && Se.ok && Array.isArray(ke)) { - io("[Grid] Using early-fetched data:", ke.length, "assets"); - const we = ((Q = Se.data) == null ? void 0 : Q.total) ?? ((_ = Se.meta) == null ? void 0 : _.total) ?? null; + const Xe = (B = xe == null ? void 0 : xe.data) == null ? void 0 : B.assets; + if (xe != null && xe.ok && Array.isArray(Xe)) { + io("[Grid] Using early-fetched data:", Xe.length, "assets"); + const Me = ((Q = xe.data) == null ? void 0 : Q.total) ?? ((_ = xe.meta) == null ? void 0 : _.total) ?? null; return { ok: !0, - assets: ke, - total: we != null ? Number(we) || 0 : null, - count: ke.length, - limit: j, + assets: Xe, + total: Me != null ? Number(Me) || 0 : null, + count: Xe.length, + limit: v, offset: 0 }; } - } catch (Se) { - io("[Grid] Early fetch failed, falling back to normal fetch", Se); + } catch (xe) { + io("[Grid] Early fetch failed, falling back to normal fetch", xe); } } } - return FL( + return OL( ee, M, - j, - O, + v, + F, { sanitizeQuery: Dm, - buildListURL: Ns, + buildListURL: Rs, get: Ft, getGridState: () => t }, @@ -42852,21 +42889,21 @@ function iV({ } function w({ title: M = "" } = {}) { i(), Array.isArray(t.assets) && t.assets.length ? (r(), X(M || t.query)) : (!t.statusMessage || !t.statusError) && o("No assets found"); - const j = (Array.isArray(t.assets) ? t.assets : []).map((O) => String((O == null ? void 0 : O.id) || "")).filter(Boolean); - c(j, { activeId: t.activeId }); + const v = (Array.isArray(t.assets) ? t.assets : []).map((F) => String((F == null ? void 0 : F.id) || "")).filter(Boolean); + c(v, { activeId: t.activeId }); } async function R() { - var ee, ce, ue, U; - const M = C(); + var ee, ae, ue, B; + const M = W(); if (!M || t.loading || t.done) return { ok: !0, skipped: !0 }; if (!p()) - return { ok: !0, skipped: !0, hidden: !0 }; + return !t.assets.length && !t.loading && he.PREFETCH_NEXT_PAGE && G(t.requestId, 400), { ok: !0, skipped: !0, hidden: !0 }; if (b()) return { ok: !0, skipped: !0, busy: !0 }; - const j = Math.max( + const v = Math.max( 1, - Math.min(fe.MAX_PAGE_SIZE, fe.DEFAULT_PAGE_SIZE) - ), O = Date.now(), D = Number(t.total || 0) || 1e3, q = Math.min( + Math.min(he.MAX_PAGE_SIZE, he.DEFAULT_PAGE_SIZE) + ), F = Date.now(), D = Number(t.total || 0) || 1e3, q = Math.min( 200, Math.max(8, Math.ceil(D / 1e3 * 30)) ); @@ -42876,28 +42913,28 @@ function iV({ for (; !t.done; ) { if (!p()) return { ok: !0, skipped: !0, hidden: !0 }; - const _ = nV(j, Q), le = await v(t.query, _, t.offset, { + const _ = nY(v, Q), le = await j(t.query, _, t.offset, { requestId: Number(t.requestId ?? 0) || 0, signal: ((ee = t.abortController) == null ? void 0 : ee.signal) || null }); if (!le.ok) return le.aborted || le.stale || (t.done = !0, o( - Nc("Failed to load assets", (le == null ? void 0 : le.error) || "Unknown error"), + Rc("Failed to load assets", (le == null ? void 0 : le.error) || "Unknown error"), { error: !0 } )), le; - le.total != null && (t.total = Number(le.total) || 0), y && (l({ query: t.query || "*", total: null, done: !1 }), ql(t), y = !1); - const de = Number(le.count || 0) || 0, se = NL({ - count: de, + le.total != null && (t.total = Number(le.total) || 0), A && (l({ query: t.query || "*", total: null, done: !1 }), ql(t), A = !1); + const ce = Number(le.count || 0) || 0, de = kL({ + count: ce, limit: Number(le.limit || _) || _, offset: t.offset, total: le.total != null ? le.total : t.total - }), ge = Number(T(M, le.assets || []) || 0) || 0; - t.offset += se; - const je = t.done; - if (t.done = se <= 0 || Number.isFinite(Number(t.total)) && Number(t.total || 0) > 0 && t.offset >= Number(t.total || 0), (Q > 0 || t.done) && io(`[Grid LoadPage] offset=${t.offset}, fetched=${de}, consumed=${se}, added=${ge}, limit=${_}, done=${t.done}, visibleCount=${t.assets.length}, total=${t.total}, emptyBatches=${Q}/${q}`), t.done || ge > 0) - return (ge > 0 || t.done) && X(t.query || ((ce = M.dataset) == null ? void 0 : ce.mjrQuery) || "*"), { + }), ge = Number(K(M, le.assets || []) || 0) || 0; + t.offset += de; + const Le = t.done; + if (t.done = de <= 0 || Number.isFinite(Number(t.total)) && Number(t.total || 0) > 0 && t.offset >= Number(t.total || 0), (Q > 0 || t.done) && io(`[Grid LoadPage] offset=${t.offset}, fetched=${ce}, consumed=${de}, added=${ge}, limit=${_}, done=${t.done}, visibleCount=${t.assets.length}, total=${t.total}, emptyBatches=${Q}/${q}`), t.done || ge > 0) + return (ge > 0 || t.done) && X(t.query || ((ae = M.dataset) == null ? void 0 : ae.mjrQuery) || "*"), { ok: !0, - count: de, + count: ce, total: t.total }; if (Q += 1, Q >= q) @@ -42920,22 +42957,22 @@ function iV({ } catch (_) { (ue = console.debug) == null || ue.call(console, _); } - return o(Nc("Failed to load assets", Q), { + return o(Rc("Failed to load assets", Q), { error: !0 }), { ok: !1, error: (Q == null ? void 0 : Q.message) || String(Q) }; } finally { try { - const Q = Date.now() - O; - Q < Hl && await Km(Hl - Q); + const Q = Date.now() - F; + Q < El && await Um(El - Q); } catch (Q) { - (U = console.debug) == null || U.call(console, Q); + (B = console.debug) == null || B.call(console, Q); } t.loading = !1, i(); } } - async function Y(M = "*", j = {}) { - var Q, _, le, de, se; - const { reset: O = !0, preserveVisibleUntilReady: D = !0 } = j || {}, q = C(); + async function V(M = "*", v = {}) { + var Q, _, le, ce, de; + const { reset: F = !0, preserveVisibleUntilReady: D = !0 } = v || {}, q = W(); if (!q) return { ok: !1, error: "Grid unavailable" }; try { @@ -42943,44 +42980,44 @@ function iV({ } catch (ge) { (Q = console.debug) == null || Q.call(console, ge); } - const ee = $L(M).trim() || "*", ce = /^\[object\s+HTML.*Element\]$/i.test(ee) ? "*" : ee, ue = Dm(ce) || ce; - if (t.query = ue, O && b()) - return n("Grid refresh deferred while ComfyUI is generating..."), W(ue, j || {}), { + const ee = $L(M).trim() || "*", ae = /^\[object\s+HTML.*Element\]$/i.test(ee) ? "*" : ee, ue = Dm(ae) || ae; + if (t.query = ue, F && b()) + return n("Grid refresh deferred while ComfyUI is generating..."), Z(ue, v || {}), { ok: !0, deferred: !0, count: Number(t.offset || 0) || 0, total: Number(t.total || 0) || 0 }; - if (O) { - y = A({ - reset: O, + if (F) { + A = y({ + reset: F, preserveVisibleUntilReady: D }); try { (le = (_ = t.abortController) == null ? void 0 : _.abort) == null || le.call(_); } catch (ge) { - (de = console.debug) == null || de.call(console, ge); + (ce = console.debug) == null || ce.call(console, ge); } try { t.abortController = typeof AbortController < "u" ? new AbortController() : null; } catch { t.abortController = null; } - if (t.requestId = (Number(t.requestId) || 0) + 1, h(), x(), r(), y ? (t.query = ue, t.offset = 0, t.total = null, t.done = !1) : l({ query: ue, total: null, done: !1 }), n( + if (t.requestId = (Number(t.requestId) || 0) + 1, C(), x(), r(), A ? (t.query = ue, t.offset = 0, t.total = null, t.done = !1) : l({ query: ue, total: null, done: !1 }), n( ue === "*" ? "Loading assets..." : `Searching for "${ue}"...` - ), ue === "*" && y) + ), ue === "*" && A) try { const ge = g(); ge.query = "*"; - const je = Xc(ge); - if (pi.has(je) ? await B(ge, { + const Le = kc(ge); + if (pi.has(Le) ? await T(ge, { allowReplaceExisting: !0 }) : !1) { t.offset = 0, t.done = !1, t.loading = !1, i(); - const we = t.requestId; + const Me = t.requestId; return G( - we, - Math.min(fe.PREFETCH_NEXT_PAGE_DELAY_MS ?? 700, 250) + Me, + Math.min(he.PREFETCH_NEXT_PAGE_DELAY_MS ?? 700, 250) ), { ok: !0, count: Number(t.offset || 0) || 0, @@ -42989,80 +43026,80 @@ function iV({ }; } } catch (ge) { - (se = console.debug) == null || se.call(console, "[Grid] Snapshot fast-path failed, falling back", ge); + (de = console.debug) == null || de.call(console, "[Grid] Snapshot fast-path failed, falling back", ge); } } - const U = await R(); - return fe.PREFETCH_NEXT_PAGE && (U != null && U.ok) && !(U != null && U.skipped) && !t.done && !(U != null && U.aborted) && G(t.requestId), O && w({ title: ue }), { - ok: !!(U != null && U.ok), + const B = await R(); + return he.PREFETCH_NEXT_PAGE && (B != null && B.ok) && !(B != null && B.skipped) && !t.done && !(B != null && B.aborted) && G(t.requestId), F && w({ title: ue }), { + ok: !!(B != null && B.ok), count: Number(t.offset || 0) || 0, total: Number(t.total || 0) || 0, - error: U == null ? void 0 : U.error, - aborted: !!(U != null && U.aborted) + error: B == null ? void 0 : B.error, + aborted: !!(B != null && B.aborted) }; } - async function F(M, j = {}) { - var _, le, de, se, ge; + async function O(M, v = {}) { + var _, le, ce, de, ge; const { - title: O = "Collection", + title: F = "Collection", reset: D = !0, showLoading: q = !0, preserveVisibleUntilReady: ee = !0 - } = j || {}, ce = C(); - if (!ce) + } = v || {}, ae = W(); + if (!ae) return { ok: !1, error: "Grid unavailable" }; - const ue = Array.isArray(M) ? M.slice() : [], U = Date.now(), Q = A({ + const ue = Array.isArray(M) ? M.slice() : [], B = Date.now(), Q = y({ reset: D, preserveVisibleUntilReady: ee }); if (D) { try { (le = (_ = t.abortController) == null ? void 0 : _.abort) == null || le.call(_); - } catch (je) { - (de = console.debug) == null || de.call(console, je); + } catch (Le) { + (ce = console.debug) == null || ce.call(console, Le); } try { t.abortController = typeof AbortController < "u" ? new AbortController() : null; } catch { t.abortController = null; } - t.requestId = (Number(t.requestId) || 0) + 1, x(), r(), Q ? (t.query = String(O || "Collection"), t.offset = 0, t.total = ue.length, t.done = !0) : (l({ - query: String(O || "Collection"), + t.requestId = (Number(t.requestId) || 0) + 1, x(), r(), Q ? (t.query = String(F || "Collection"), t.offset = 0, t.total = ue.length, t.done = !0) : (l({ + query: String(F || "Collection"), total: ue.length, done: !0 - }), ql(t)), q ? (n(ue.length ? `Loading ${O}...` : `${O} is empty`), t.loading = !0) : (i(), t.loading = !1); + }), ql(t)), q ? (n(ue.length ? `Loading ${F}...` : `${F} is empty`), t.loading = !0) : (i(), t.loading = !1); } try { - const je = ((se = ce.dataset) == null ? void 0 : se.mjrSort) || "mtime_desc", Se = ue.sort((ke, we) => OL(ke, we, je)); + const Le = ((de = ae.dataset) == null ? void 0 : de.mjrSort) || "mtime_desc", xe = ue.sort((Xe, Me) => FL(Xe, Me, Le)); return D && Q && (l({ - query: String(O || "Collection"), + query: String(F || "Collection"), total: ue.length, done: !0 - }), ql(t)), T(ce, Se), t.offset = Se.length, t.total = Se.length, t.done = !0, w({ title: O }), { ok: !0, count: Se.length, total: Se.length }; - } catch (je) { - return o(Nc("Failed to load collection", je), { + }), ql(t)), K(ae, xe), t.offset = xe.length, t.total = xe.length, t.done = !0, w({ title: F }), { ok: !0, count: xe.length, total: xe.length }; + } catch (Le) { + return o(Rc("Failed to load collection", Le), { error: !0 - }), { ok: !1, error: (je == null ? void 0 : je.message) || String(je) }; + }), { ok: !1, error: (Le == null ? void 0 : Le.message) || String(Le) }; } finally { if (q) try { - const je = Date.now() - U; - je < Hl && await Km(Hl - je); - } catch (je) { - (ge = console.debug) == null || ge.call(console, je); + const Le = Date.now() - B; + Le < El && await Um(El - Le); + } catch (Le) { + (ge = console.debug) == null || ge.call(console, Le); } t.loading = !1, q && i(); } } - function N() { - var M, j, O, D; + function k() { + var M, v, F, D; try { - zW(C()); + zW(W()); } catch (q) { (M = console.debug) == null || M.call(console, q); } try { - (O = (j = t.abortController) == null ? void 0 : j.abort) == null || O.call(j); + (F = (v = t.abortController) == null ? void 0 : v.abort) == null || F.call(v); } catch (q) { (D = console.debug) == null || D.call(console, q); } @@ -43071,33 +43108,33 @@ function iV({ } catch { t.abortController = null; } - t.requestId = (Number(t.requestId) || 0) + 1, t.loading = !1, h(), x(), i(), r(), y = !0, B(g(), { allowReplaceExisting: !0 }), a([], ""); + t.requestId = (Number(t.requestId) || 0) + 1, t.loading = !1, C(), x(), i(), r(), A = !0, T(g(), { allowReplaceExisting: !0 }), a([], ""); } - function V() { - var M, j; - (j = (M = t.virtualGrid) == null ? void 0 : M.setItems) == null || j.call(M, t.assets || []); + function Y() { + var M, v; + (v = (M = t.virtualGrid) == null ? void 0 : M.setItems) == null || v.call(M, t.assets || []); } - function k(M, { updateSelection: j = !0 } = {}) { - const O = new Set( + function N(M, { updateSelection: v = !0 } = {}) { + const F = new Set( (Array.isArray(M) ? M : [M]).map((q) => q == null ? "" : typeof q == "object" && (q == null ? void 0 : q.id) != null ? String(q.id) : String(q)).filter(Boolean) ); - if (!O.size) + if (!F.size) return { ok: !1, removed: 0, selectedIds: t.selectedIds.slice() }; let D = 0; if (t.assets = (Array.isArray(t.assets) ? t.assets : []).filter((q) => { - var ce; + var ae; const ee = (q == null ? void 0 : q.id) != null ? String(q.id) : ""; - if (ee && O.has(ee)) { + if (ee && F.has(ee)) { D += 1; try { t.assetIdSet.delete(ee); } catch (ue) { - (ce = console.debug) == null || ce.call(console, ue); + (ae = console.debug) == null || ae.call(console, ue); } return !1; } return !0; - }), Number.isFinite(Number(t.total)) && (t.total = Math.max(0, Number(t.total || 0) - D)), j) { + }), Number.isFinite(Number(t.total)) && (t.total = Math.max(0, Number(t.total || 0) - D)), v) { const q = t.assets.map((ee) => String((ee == null ? void 0 : ee.id) || "")).filter(Boolean); c(q, { activeId: t.activeId }); } @@ -43107,26 +43144,26 @@ function iV({ selectedIds: t.selectedIds.slice() }; } - function K() { - var U, Q; - const M = C(), j = s(); - if (!M || !j) return null; - const O = (_) => { + function U() { + var B, Q; + const M = W(), v = s(); + if (!M || !v) return null; + const F = (_) => { if (!_) return !1; try { - const le = _.getBoundingClientRect(), de = j.getBoundingClientRect(); - return le.bottom >= de.top && le.top <= de.bottom; + const le = _.getBoundingClientRect(), ce = v.getBoundingClientRect(); + return le.bottom >= ce.top && le.top <= ce.bottom; } catch { return !1; } - }, D = M.querySelector(".mjr-asset-card.is-selected"), q = d(), ee = q.find((_) => O(_)) || q[0] || null, ue = O(D) ? D : ee; + }, D = M.querySelector(".mjr-asset-card.is-selected"), q = d(), ee = q.find((_) => F(_)) || q[0] || null, ue = F(D) ? D : ee; if (!ue) return null; try { - const _ = ue.getBoundingClientRect(), le = j.getBoundingClientRect(); + const _ = ue.getBoundingClientRect(), le = v.getBoundingClientRect(); return { - id: String(((U = ue.dataset) == null ? void 0 : U.mjrAssetId) || ""), + id: String(((B = ue.dataset) == null ? void 0 : B.mjrAssetId) || ""), top: _.top - le.top, - scrollTop: Number(j.scrollTop || 0) || 0 + scrollTop: Number(v.scrollTop || 0) || 0 }; } catch (_) { return (Q = console.debug) == null || Q.call(console, _), null; @@ -43134,126 +43171,126 @@ function iV({ } async function z(M) { var ee; - const j = C(), O = s(); - if (!j || !O || !M) return; - await Em(); + const v = W(), F = s(); + if (!v || !F || !M) return; + await Hm(); const D = String(M.id || "").trim(); if (!D) { - O.scrollTop = Number(M.scrollTop || 0) || 0; + F.scrollTop = Number(M.scrollTop || 0) || 0; return; } - u(D, { align: "start" }), await Em(); - const q = j.querySelector( - `.mjr-asset-card[data-mjr-asset-id="${tV(D)}"]` + u(D, { align: "start" }), await Hm(); + const q = v.querySelector( + `.mjr-asset-card[data-mjr-asset-id="${tY(D)}"]` ); if (!q) { - O.scrollTop = Number(M.scrollTop || 0) || 0; + F.scrollTop = Number(M.scrollTop || 0) || 0; return; } try { - const ce = q.getBoundingClientRect(), ue = O.getBoundingClientRect(), U = ce.top - ue.top - Number(M.top || 0); - O.scrollTop = (Number(O.scrollTop || 0) || 0) + U; - } catch (ce) { - (ee = console.debug) == null || ee.call(console, ce), O.scrollTop = Number(M.scrollTop || 0) || 0; + const ae = q.getBoundingClientRect(), ue = F.getBoundingClientRect(), B = ae.top - ue.top - Number(M.top || 0); + F.scrollTop = (Number(F.scrollTop || 0) || 0) + B; + } catch (ae) { + (ee = console.debug) == null || ee.call(console, ae), F.scrollTop = Number(M.scrollTop || 0) || 0; } } - async function B(M = {}, j = {}) { - var ee, ce, ue; - const O = C(); - if (!O) return !1; - const D = Xc(M), q = _L(D); - if (!q || !Array.isArray(q.assets) || !q.assets.length || !j.allowReplaceExisting && Array.isArray(t.assets) && t.assets.length) + async function T(M = {}, v = {}) { + var ee, ae, ue; + const F = W(); + if (!F) return !1; + const D = kc(M), q = _L(D); + if (!q || !Array.isArray(q.assets) || !q.assets.length || !v.allowReplaceExisting && Array.isArray(t.assets) && t.assets.length) return !1; try { - (ce = (ee = t.abortController) == null ? void 0 : ee.abort) == null || ce.call(ee); - } catch (U) { - (ue = console.debug) == null || ue.call(console, U); + (ae = (ee = t.abortController) == null ? void 0 : ee.abort) == null || ae.call(ee); + } catch (B) { + (ue = console.debug) == null || ue.call(console, B); } try { t.abortController = typeof AbortController < "u" ? new AbortController() : null; } catch { t.abortController = null; } - return t.requestId = (Number(t.requestId) || 0) + 1, h(), x(), l({ - query: q.query || j.title || "Cached", + return t.requestId = (Number(t.requestId) || 0) + 1, C(), x(), l({ + query: q.query || v.title || "Cached", total: Number(q.total ?? q.assets.length) || q.assets.length, done: !!q.done - }), ql(t), r(), i(), t.loading = !1, T(O, q.assets), t.offset = Math.max( + }), ql(t), r(), i(), t.loading = !1, K(F, q.assets), t.offset = Math.max( Number(q.assets.length || 0) || 0, Number(q.offset || q.assets.length) || q.assets.length - ), t.total = Number(q.total ?? q.assets.length) || q.assets.length, t.done = !!q.done, w({ title: q.title || j.title || "Cached" }), !0; + ), t.total = Number(q.total ?? q.assets.length) || q.assets.length, t.done = !!q.done, w({ title: q.title || v.title || "Cached" }), !0; } function J(M) { return { getOrCreateState: () => t, ensureVirtualGrid: () => t.virtualGrid, - upsertState: kc, - maxBatchSize: HL, - debounceMs: EL, - assetKey: (j) => PL(j) || f(j, M), - loadMajoorSettings: Xn + upsertState: Nc, + maxBatchSize: EL, + debounceMs: HL, + assetKey: (v) => PL(v) || f(v, M), + loadMajoorSettings: kn }; } function P(M) { - const j = C(); - return !j || !M || !M.id ? !1 : Bm(j, M, J(j)); + const v = W(); + return !v || !M || !M.id ? !1 : Km(v, M, J(v)); } - let H = !1; + let E = !1; function $(M) { - const j = C(); - if (!j || !M || !M.id) return !1; - const O = J(j), D = Bm(j, M, O); - return D && !H && (H = !0, queueMicrotask(() => { - H = !1; - const q = C(); + const v = W(); + if (!v || !M || !M.id) return !1; + const F = J(v), D = Km(v, M, F); + return D && !E && (E = !0, queueMicrotask(() => { + E = !1; + const q = W(); q && Ua(q, J(q)); })), D; } - function E() { - var j, O, D, q, ee, ce; - X(t.query || "Cached"), L(), h(); + function H() { + var v, F, D, q, ee, ae; + X(t.query || "Cached"), L(), C(); try { - (O = (j = t.abortController) == null ? void 0 : j.abort) == null || O.call(j); + (F = (v = t.abortController) == null ? void 0 : v.abort) == null || F.call(v); } catch (ue) { (D = console.debug) == null || D.call(console, ue); } - const M = C(); + const M = W(); if (M) try { - const ue = wp(M, kc); + const ue = wp(M, Nc); ue != null && ue.timer && (clearTimeout(ue.timer), ue.timer = null), (ee = (q = ue == null ? void 0 : ue.pending) == null ? void 0 : q.clear) == null || ee.call(q); } catch (ue) { - (ce = console.debug) == null || ce.call(console, ue); + (ae = console.debug) == null || ae.call(console, ue); } } try { - window.addEventListener("pagehide", E, { once: !0 }); + window.addEventListener("pagehide", H, { once: !0 }); } catch (M) { - (oe = console.debug) == null || oe.call(console, M); + (ne = console.debug) == null || ne.call(console, M); } return { - loadAssets: Y, - loadAssetsFromList: F, + loadAssets: V, + loadAssetsFromList: O, loadNextPage: R, - prepareGridForScopeSwitch: N, - refreshGrid: V, - removeAssets: k, - captureAnchor: K, + prepareGridForScopeSwitch: k, + refreshGrid: Y, + removeAssets: N, + captureAnchor: U, restoreAnchor: z, - hydrateFromSnapshot: B, + hydrateFromSnapshot: T, upsertAsset: P, upsertAssetNow: $, - dispose: E + dispose: H }; } -const oV = { +const oY = { key: 0, class: "mjr-grid-loading-overlay", style: { position: "absolute", inset: "0", "z-index": "4", display: "flex", "align-items": "flex-start", "justify-content": "center", padding: "14px", "pointer-events": "none" } -}, rV = { style: { width: "100%" } }, lV = { class: "mjr-grid-skeleton-layout" }, aV = { style: { "margin-top": "10px", "font-size": "12px", opacity: "0.68", "text-align": "center" } }, cV = ["data-index"], sV = ["data-mjr-asset-id", "data-mjr-filename-key", "data-mjr-ext", "data-mjr-stem", "data-mjr-kind", "data-mjr-live-placeholder", "data-mjr-stacked", "data-mjr-stack-count", "data-mjr-dup-stacked", "data-mjr-dup-count", "aria-label", "aria-selected", "onMousedown", "onClick", "onDblclick"], dV = { +}, rY = { style: { width: "100%" } }, lY = { class: "mjr-grid-skeleton-layout" }, aY = { style: { "margin-top": "10px", "font-size": "12px", opacity: "0.68", "text-align": "center" } }, cY = ["data-index"], sY = ["data-mjr-asset-id", "data-mjr-filename-key", "data-mjr-ext", "data-mjr-stem", "data-mjr-kind", "data-mjr-live-placeholder", "data-mjr-stacked", "data-mjr-stack-count", "data-mjr-dup-stacked", "data-mjr-dup-count", "aria-label", "aria-selected", "onMousedown", "onClick", "onDblclick"], dY = { key: 3, style: { display: "flex", "flex-direction": "column", width: "100%" } -}, uV = ["data-mjr-asset-id", "data-mjr-filename-key", "data-mjr-ext", "data-mjr-stem", "data-mjr-kind", "data-mjr-live-placeholder", "data-mjr-stacked", "data-mjr-stack-count", "data-mjr-dup-stacked", "data-mjr-dup-count", "aria-label", "aria-selected", "onMousedown", "onClick", "onDblclick"], mV = { +}, uY = ["data-mjr-asset-id", "data-mjr-filename-key", "data-mjr-ext", "data-mjr-stem", "data-mjr-kind", "data-mjr-live-placeholder", "data-mjr-stacked", "data-mjr-stack-count", "data-mjr-dup-stacked", "data-mjr-dup-count", "aria-label", "aria-selected", "onMousedown", "onClick", "onDblclick"], mY = { __name: "VirtualAssetGridHost", props: { scrollElement: { @@ -43282,53 +43319,53 @@ const oV = { } }, setup(e, { expose: t }) { - const n = e, i = Ae(null), o = Ae(0), r = Ae(!1), l = Ae(0), a = /* @__PURE__ */ new WeakMap(); - function c(te) { - return (Array.isArray(te) ? te : []).slice().sort((ye, We) => { - const pe = Number((ye == null ? void 0 : ye.mtime) || (ye == null ? void 0 : ye.created_at) || 0) || 0; - return (Number((We == null ? void 0 : We.mtime) || (We == null ? void 0 : We.created_at) || 0) || 0) - pe; + const n = e, i = We(null), o = We(0), r = We(!1), l = We(0), a = /* @__PURE__ */ new WeakMap(); + function c(ie) { + return (Array.isArray(ie) ? ie : []).slice().sort((pe, Ce) => { + const ye = Number((pe == null ? void 0 : pe.mtime) || (pe == null ? void 0 : pe.created_at) || 0) || 0; + return (Number((Ce == null ? void 0 : Ce.mtime) || (Ce == null ? void 0 : Ce.created_at) || 0) || 0) - ye; }); } cg("mjrStackService", { - openStackGroup: async (te) => { - const ye = i.value; - if (!ye || !te) return; - const We = String(te.stack_id || "").trim(); - if (!We) return; - const pe = `stack:${We}`; - ye._mjrStackMembersCache || (ye._mjrStackMembersCache = /* @__PURE__ */ new Map()); - let De = ye._mjrStackMembersCache.get(pe); + openStackGroup: async (ie) => { + const pe = i.value; + if (!pe || !ie) return; + const Ce = String(ie.stack_id || "").trim(); + if (!Ce) return; + const ye = `stack:${Ce}`; + pe._mjrStackMembersCache || (pe._mjrStackMembersCache = /* @__PURE__ */ new Map()); + let De = pe._mjrStackMembersCache.get(ye); if (!Array.isArray(De)) { - const Zt = await Ft(ry(We), { timeoutMs: 3e4 }); - if (Zt != null && Zt.ok && Array.isArray(Zt == null ? void 0 : Zt.data)) - De = Zt.data, ye._mjrStackMembersCache.set(pe, De); + const At = await Ft(ry(Ce), { timeoutMs: 3e4 }); + if (At != null && At.ok && Array.isArray(At == null ? void 0 : At.data)) + De = At.data, pe._mjrStackMembersCache.set(ye, De); else return; } - const ot = c(De); - ye.dispatchEvent( - new CustomEvent(ht.OPEN_STACK_GROUP, { + const ut = c(De); + pe.dispatchEvent( + new CustomEvent(ft.OPEN_STACK_GROUP, { bubbles: !0, detail: { - asset: te, - members: ot, - title: `Generation group (${ot.length} assets)`, - stackId: We + asset: ie, + members: ut, + title: `Generation group (${ut.length} assets)`, + stackId: Ce } }) ); }, - openDupGroup: (te) => { - const ye = i.value; - if (!ye || !te) return; - const We = Array.isArray(te._mjrDupMembers) ? te._mjrDupMembers : [te]; - ye.dispatchEvent( - new CustomEvent(ht.OPEN_STACK_GROUP, { + openDupGroup: (ie) => { + const pe = i.value; + if (!pe || !ie) return; + const Ce = Array.isArray(ie._mjrDupMembers) ? ie._mjrDupMembers : [ie]; + pe.dispatchEvent( + new CustomEvent(ft.OPEN_STACK_GROUP, { bubbles: !0, detail: { - asset: te, - members: We, - title: `Duplicates — ${We.length} copies`, + asset: ie, + members: Ce, + title: `Duplicates — ${Ce.length} copies`, isDupGroup: !0 } }) @@ -43340,359 +43377,359 @@ const oV = { selectedIdSet: d, setLoadingMessage: u, clearLoadingMessage: I, - setStatusMessage: y, - clearStatusMessage: S, - resetAssets: Z, - setSelection: C, + setStatusMessage: A, + clearStatusMessage: h, + resetAssets: S, + setSelection: W, reconcileSelection: g, - getSelectedAssets: A, + getSelectedAssets: y, getActiveAsset: p } = _w(); - function b(te) { - return te ? typeof te == "object" && "value" in te ? te.value || null : te : null; + function b(ie) { + return ie ? typeof ie == "object" && "value" in ie ? ie.value || null : ie : null; } const L = ze(() => b(n.scrollElement)); - function h() { - var ye; - const te = i.value; - if (!te) return []; + function C() { + var pe; + const ie = i.value; + if (!ie) return []; try { - return Array.from(te.querySelectorAll(".mjr-asset-card")); - } catch (We) { - return (ye = console.debug) == null || ye.call(console, We), []; + return Array.from(ie.querySelectorAll(".mjr-asset-card")); + } catch (Ce) { + return (pe = console.debug) == null || pe.call(console, Ce), []; } } - function G(te, { align: ye = "auto" } = {}) { - var ot, Zt, tn, Pt; - const We = String(te || "").trim(); - if (!We) return; - const De = (Array.isArray(K.value) ? K.value : []).findIndex( - (vt) => String((vt == null ? void 0 : vt.id) || "") === We + function G(ie, { align: pe = "auto" } = {}) { + var ut, At, Ht, Qt; + const Ce = String(ie || "").trim(); + if (!Ce) return; + const De = (Array.isArray(U.value) ? U.value : []).findIndex( + (xt) => String((xt == null ? void 0 : xt.id) || "") === Ce ); if (!(De < 0)) { if (n.virtualize) { - const vt = Math.floor(De / Math.max(1, $.value)); + const xt = Math.floor(De / Math.max(1, $.value)); try { - ce.value.scrollToIndex(vt, { align: ye }); - } catch (re) { - (ot = console.debug) == null || ot.call(console, re); + ae.value.scrollToIndex(xt, { align: pe }); + } catch (Gt) { + (ut = console.debug) == null || ut.call(console, Gt); } return; } try { - (tn = (Zt = s.cardElements.get(We)) == null ? void 0 : Zt.scrollIntoView) == null || tn.call(Zt, { + (Ht = (At = s.cardElements.get(Ce)) == null ? void 0 : At.scrollIntoView) == null || Ht.call(At, { block: "nearest", inline: "nearest" }); - } catch (vt) { - (Pt = console.debug) == null || Pt.call(console, vt); + } catch (xt) { + (Qt = console.debug) == null || Qt.call(console, xt); } } } - function W() { + function Z() { return md(i.value, L.value); } - const f = iV({ + const f = iY({ gridContainerRef: i, state: s, setLoadingMessage: u, clearLoadingMessage: I, - setStatusMessage: y, - clearStatusMessage: S, - resetAssets: Z, - setSelection: C, + setStatusMessage: A, + clearStatusMessage: h, + resetAssets: S, + setSelection: W, reconcileSelection: g, readScrollElement: () => L.value, - readRenderedCards: h, + readRenderedCards: C, scrollToAssetId: G, - canLoadMore: W + canLoadMore: Z }); - function X(te) { - const ye = String((te == null ? void 0 : te.filename) || ""), We = ye.lastIndexOf("."); - return We >= 0 ? ye.slice(We + 1).toUpperCase() : ""; + function X(ie) { + const pe = String((ie == null ? void 0 : ie.filename) || ""), Ce = pe.lastIndexOf("."); + return Ce >= 0 ? pe.slice(Ce + 1).toUpperCase() : ""; } - function x(te) { - const ye = String((te == null ? void 0 : te.filename) || ""), We = ye.lastIndexOf("."); - return We >= 0 ? ye.slice(0, We).toLowerCase() : ye.toLowerCase(); + function x(ie) { + const pe = String((ie == null ? void 0 : ie.filename) || ""), Ce = pe.lastIndexOf("."); + return Ce >= 0 ? pe.slice(0, Ce).toLowerCase() : pe.toLowerCase(); } - function T(te) { - return d.value.has(String((te == null ? void 0 : te.id) || "")); + function K(ie) { + return d.value.has(String((ie == null ? void 0 : ie.id) || "")); } - function v(te) { - return String((te == null ? void 0 : te.kind) || "").toLowerCase() === "folder"; + function j(ie) { + return String((ie == null ? void 0 : ie.kind) || "").toLowerCase() === "folder"; } - function w(te) { - var We; - const ye = i.value; - return !ye || String(((We = ye.dataset) == null ? void 0 : We.mjrGroupStacks) || "") !== "1" ? !1 : !!String((te == null ? void 0 : te.stack_id) || "").trim() && Number((te == null ? void 0 : te.stack_asset_count) || 0) > 1; + function w(ie) { + var Ce; + const pe = i.value; + return !pe || String(((Ce = pe.dataset) == null ? void 0 : Ce.mjrGroupStacks) || "") !== "1" ? !1 : !!String((ie == null ? void 0 : ie.stack_id) || "").trim() && Number((ie == null ? void 0 : ie.stack_asset_count) || 0) > 1; } - function R(te) { - return (te == null ? void 0 : te._mjrLivePlaceholder) === !0 || (te == null ? void 0 : te.is_live_placeholder) === !0 || String((te == null ? void 0 : te.id) || "").trim().toLowerCase().startsWith("live:"); + function R(ie) { + return (ie == null ? void 0 : ie._mjrLivePlaceholder) === !0 || (ie == null ? void 0 : ie.is_live_placeholder) === !0 || String((ie == null ? void 0 : ie.id) || "").trim().toLowerCase().startsWith("live:"); } - function Y(te) { - return !!te && te._mjrDupHidden !== !0; + function V(ie) { + return !!ie && ie._mjrDupHidden !== !0; } - function F() { - var We; - const te = i.value; - if (!te) return; - const ye = new Set( - (Array.isArray(s.selectedIds) ? s.selectedIds : []).map((pe) => String(pe || "").trim()).filter(Boolean) + function O() { + var Ce; + const ie = i.value; + if (!ie) return; + const pe = new Set( + (Array.isArray(s.selectedIds) ? s.selectedIds : []).map((ye) => String(ye || "").trim()).filter(Boolean) ); - rI(te, ye, s.activeId || ""); + rI(ie, pe, s.activeId || ""); try { - ye.size ? te.dataset.mjrSelectedAssetId = String(s.activeId || Array.from(ye)[0] || "") : delete te.dataset.mjrSelectedAssetId; - } catch (pe) { - (We = console.debug) == null || We.call(console, pe); + pe.size ? ie.dataset.mjrSelectedAssetId = String(s.activeId || Array.from(pe)[0] || "") : delete ie.dataset.mjrSelectedAssetId; + } catch (ye) { + (Ce = console.debug) == null || Ce.call(console, ye); } } - function N() { - var Zt, tn; - const te = i.value; - if (!te) return; - const ye = Array.isArray(s.selectedIds) ? s.selectedIds.slice() : [], We = String(s.activeId || ""), pe = `${ye.join("|")}::${We}`; - if (pe === N._lastSelectionKey) return; - N._lastSelectionKey = pe; - const De = A(), ot = { - selectedIds: ye, - activeId: We, + function k() { + var At, Ht; + const ie = i.value; + if (!ie) return; + const pe = Array.isArray(s.selectedIds) ? s.selectedIds.slice() : [], Ce = String(s.activeId || ""), ye = `${pe.join("|")}::${Ce}`; + if (ye === k._lastSelectionKey) return; + k._lastSelectionKey = ye; + const De = y(), ut = { + selectedIds: pe, + activeId: Ce, selectedAssets: De }; try { - te.dispatchEvent(new CustomEvent("mjr:selection-changed", { detail: ot })); - } catch (Pt) { - (Zt = console.debug) == null || Zt.call(console, Pt); + ie.dispatchEvent(new CustomEvent("mjr:selection-changed", { detail: ut })); + } catch (Qt) { + (At = console.debug) == null || At.call(console, Qt); } if (n.emitWindowSelectionEvents) try { - window.dispatchEvent(new CustomEvent("mjr:selection-changed", { detail: ot })); - } catch (Pt) { - (tn = console.debug) == null || tn.call(console, Pt); + window.dispatchEvent(new CustomEvent("mjr:selection-changed", { detail: ut })); + } catch (Qt) { + (Ht = console.debug) == null || Ht.call(console, Qt); } } - N._lastSelectionKey = ""; - function V(te) { - const ye = Array.isArray(te) ? te : [], We = /* @__PURE__ */ new Map(); - for (const De of ye) { - const ot = fr(De == null ? void 0 : De.filename); - if (!ot) + k._lastSelectionKey = ""; + function Y(ie) { + const pe = Array.isArray(ie) ? ie : [], Ce = /* @__PURE__ */ new Map(); + for (const De of pe) { + const ut = fr(De == null ? void 0 : De.filename); + if (!ut) continue; - let Zt = We.get(ot); - Zt || (Zt = [], We.set(ot, Zt)), Zt.push(De); + let At = Ce.get(ut); + At || (At = [], Ce.set(ut, At)), At.push(De); } - const pe = []; - for (const De of ye) { - const ot = fr(De == null ? void 0 : De.filename); - if (!ot) { - De._mjrNameCollision = !1, delete De._mjrNameCollisionCount, delete De._mjrNameCollisionPaths, De._mjrDupStack = !1, De._mjrDupMembers = null, De._mjrDupCount = 0, pe.push(De); + const ye = []; + for (const De of pe) { + const ut = fr(De == null ? void 0 : De.filename); + if (!ut) { + De._mjrNameCollision = !1, delete De._mjrNameCollisionCount, delete De._mjrNameCollisionPaths, De._mjrDupStack = !1, De._mjrDupMembers = null, De._mjrDupCount = 0, ye.push(De); continue; } - const Zt = We.get(ot) || []; - if (Zt.length && Zt[0] === De) { - for (const tn of Zt) - tn._mjrNameCollision = !1, delete tn._mjrNameCollisionCount, delete tn._mjrNameCollisionPaths, tn._mjrDupStack = !1, tn._mjrDupMembers = null, tn._mjrDupCount = 0; - if (Zt.length >= 2) { - const tn = Array.isArray(De._mjrDupMembers) ? De._mjrDupMembers : [], Pt = new Set(tn.map((re) => String((re == null ? void 0 : re.id) || ""))), vt = [ - ...tn, - ...Zt.filter((re) => !Pt.has(String((re == null ? void 0 : re.id) || ""))) + const At = Ce.get(ut) || []; + if (At.length && At[0] === De) { + for (const Ht of At) + Ht._mjrNameCollision = !1, delete Ht._mjrNameCollisionCount, delete Ht._mjrNameCollisionPaths, Ht._mjrDupStack = !1, Ht._mjrDupMembers = null, Ht._mjrDupCount = 0; + if (At.length >= 2) { + const Ht = Array.isArray(De._mjrDupMembers) ? De._mjrDupMembers : [], Qt = new Set(Ht.map((Gt) => String((Gt == null ? void 0 : Gt.id) || ""))), xt = [ + ...Ht, + ...At.filter((Gt) => !Qt.has(String((Gt == null ? void 0 : Gt.id) || ""))) ]; - De._mjrDupStack = !0, De._mjrDupMembers = vt, De._mjrDupCount = vt.length; + De._mjrDupStack = !0, De._mjrDupMembers = xt, De._mjrDupCount = xt.length; } - pe.push(De); + ye.push(De); } } - return pe; + return ye; } - const k = ze(() => V(s.assets)), K = ze(() => (Array.isArray(k.value) ? k.value : []).filter((ye) => Y(ye))); + const N = ze(() => Y(s.assets)), U = ze(() => (Array.isArray(N.value) ? N.value : []).filter((pe) => V(pe))); function z() { - var We, pe; - const te = i.value; - if (!te) return; - const ye = { - count: Array.isArray(K.value) ? K.value.length : 0, + var Ce, ye; + const ie = i.value; + if (!ie) return; + const pe = { + count: Array.isArray(U.value) ? U.value.length : 0, total: Number(s.total || 0) || 0 }; try { - te.dataset.mjrShown = String(ye.count), te.dataset.mjrTotal = String(ye.total), te.dataset.mjrHiddenPngSiblings = String( + ie.dataset.mjrShown = String(pe.count), ie.dataset.mjrTotal = String(pe.total), ie.dataset.mjrHiddenPngSiblings = String( Number(s.hiddenPngSiblings || 0) || 0 ); } catch (De) { - (We = console.debug) == null || We.call(console, De); + (Ce = console.debug) == null || Ce.call(console, De); } try { - te.dispatchEvent(new CustomEvent("mjr:grid-stats", { detail: ye })); + ie.dispatchEvent(new CustomEvent("mjr:grid-stats", { detail: pe })); } catch (De) { - (pe = console.debug) == null || pe.call(console, De); + (ye = console.debug) == null || ye.call(console, De); } } - function B(te) { - var We; - if (!(te != null && te.id)) return; - const ye = (Array.isArray(s.assets) ? s.assets : []).find( - (pe) => String((pe == null ? void 0 : pe.id) || "") === String(te.id) + function T(ie) { + var Ce; + if (!(ie != null && ie.id)) return; + const pe = (Array.isArray(s.assets) ? s.assets : []).find( + (ye) => String((ye == null ? void 0 : ye.id) || "") === String(ie.id) ); - if (ye) + if (pe) try { - ye.rating = te.rating, ye.tags = te.tags; - } catch (pe) { - (We = console.debug) == null || We.call(console, pe); + pe.rating = ie.rating, pe.tags = ie.tags; + } catch (ye) { + (Ce = console.debug) == null || Ce.call(console, ye); } } function J() { - var te; + var ie; try { window.dispatchEvent(new CustomEvent("mjr:open-sidebar", { detail: { tab: "details" } })); - } catch (ye) { - (te = console.debug) == null || te.call(console, ye); + } catch (pe) { + (ie = console.debug) == null || ie.call(console, pe); } } - function P(te) { - var ye, We, pe, De; - if (te) { - te._mjrSelectionManagedByVue = !0; + function P(ie) { + var pe, Ce, ye, De; + if (ie) { + ie._mjrSelectionManagedByVue = !0; try { - (ye = te._mjrPrimaryPointerSelectionUnbind) == null || ye.call(te); - } catch (ot) { - (We = console.debug) == null || We.call(console, ot); + (pe = ie._mjrPrimaryPointerSelectionUnbind) == null || pe.call(ie); + } catch (ut) { + (Ce = console.debug) == null || Ce.call(console, ut); } try { - Oe == null || Oe(); - } catch (ot) { - (pe = console.debug) == null || pe.call(console, ot); + rt == null || rt(); + } catch (ut) { + (ye = console.debug) == null || ye.call(console, ut); } - eZ(te, { + eZ(ie, { applySettingsClasses: n.applyDefaultSettingsClasses }); try { - Oe = aw(te); - } catch (ot) { - (De = console.debug) == null || De.call(console, ot), Oe = null; + rt = aw(ie); + } catch (ut) { + (De = console.debug) == null || De.call(console, ut), rt = null; } - te._mjrPrimaryPointerSelectionUnbind = () => { - }, te._mjrGetAssets = () => Array.isArray(K.value) ? K.value : [], te._mjrSetSelection = (ot, Zt = "") => { - const tn = C(ot, Zt); - return F(), N(), tn.selectedIds; - }, te._mjrRemoveAssets = (ot, Zt = {}) => { - const tn = f.removeAssets(ot, Zt); - return z(), tn; - }, te._mjrGetRenderedCards = () => h(), te._mjrScrollToAssetId = (ot, Zt = {}) => { - G(ot, Zt); - }, te._mjrHasAssetId = (ot) => (Array.isArray(s.assets) ? s.assets : []).some( - (Zt) => String((Zt == null ? void 0 : Zt.id) || "") === String(ot || "") - ), te._mjrGetGridState = () => s, te._mjrGetSelectedAssets = () => A(), te._mjrGetActiveAsset = () => p(), te._mjrOnKeyboardAssetChanged = (ot) => B(ot), te._mjrOpenKeyboardDetails = () => J(), te._mjrLoadAssets = (...ot) => f.loadAssets(...ot), te._mjrLoadAssetsFromList = (...ot) => f.loadAssetsFromList(...ot), te._mjrPrepareForScopeSwitch = () => f.prepareGridForScopeSwitch(), te._mjrRefreshGrid = () => (n.applyDefaultSettingsClasses && (ol(te), l.value += 1), f.refreshGrid()), te._mjrCaptureAnchor = () => f.captureAnchor(), te._mjrRestoreAnchor = (ot) => f.restoreAnchor(ot), te._mjrHydrateFromSnapshot = (...ot) => f.hydrateFromSnapshot(...ot), te._mjrUpsertAsset = (ot) => f.upsertAsset(ot), te._mjrUpsertAssetNow = (ot) => f.upsertAssetNow(ot), te._mjrDispose = () => { + ie._mjrPrimaryPointerSelectionUnbind = () => { + }, ie._mjrGetAssets = () => Array.isArray(U.value) ? U.value : [], ie._mjrSetSelection = (ut, At = "") => { + const Ht = W(ut, At); + return O(), k(), Ht.selectedIds; + }, ie._mjrRemoveAssets = (ut, At = {}) => { + const Ht = f.removeAssets(ut, At); + return z(), Ht; + }, ie._mjrGetRenderedCards = () => C(), ie._mjrScrollToAssetId = (ut, At = {}) => { + G(ut, At); + }, ie._mjrHasAssetId = (ut) => (Array.isArray(s.assets) ? s.assets : []).some( + (At) => String((At == null ? void 0 : At.id) || "") === String(ut || "") + ), ie._mjrGetGridState = () => s, ie._mjrGetSelectedAssets = () => y(), ie._mjrGetActiveAsset = () => p(), ie._mjrOnKeyboardAssetChanged = (ut) => T(ut), ie._mjrOpenKeyboardDetails = () => J(), ie._mjrLoadAssets = (...ut) => f.loadAssets(...ut), ie._mjrLoadAssetsFromList = (...ut) => f.loadAssetsFromList(...ut), ie._mjrPrepareForScopeSwitch = () => f.prepareGridForScopeSwitch(), ie._mjrRefreshGrid = () => (n.applyDefaultSettingsClasses && (ol(ie), l.value += 1), f.refreshGrid()), ie._mjrCaptureAnchor = () => f.captureAnchor(), ie._mjrRestoreAnchor = (ut) => f.restoreAnchor(ut), ie._mjrHydrateFromSnapshot = (...ut) => f.hydrateFromSnapshot(...ut), ie._mjrUpsertAsset = (ut) => f.upsertAsset(ut), ie._mjrUpsertAssetNow = (ut) => f.upsertAssetNow(ut), ie._mjrDispose = () => { f.prepareGridForScopeSwitch(), f.dispose(), s.cardElements.clear(); }; } } - cn( + dn( i, - (te) => { - te && (P(te), F(), z()); + (ie) => { + ie && (P(ie), O(), z()); }, { immediate: !0 } - ), cn( + ), dn( () => `${(s.selectedIds || []).join("|")}::${String(s.activeId || "")}`, () => { - i.value && (F(), N()); + i.value && (O(), k()); }, { flush: "post" } - ), cn( - () => `${Array.isArray(K.value) ? K.value.length : 0}::${Number(s.total || 0)}::${Number(s.hiddenPngSiblings || 0)}`, + ), dn( + () => `${Array.isArray(U.value) ? U.value.length : 0}::${Number(s.total || 0)}::${Number(s.hiddenPngSiblings || 0)}`, () => { i.value && z(); }, { flush: "post", immediate: !0 } ); - function H() { - var pe; - const te = i.value, ye = String(((pe = te == null ? void 0 : te.dataset) == null ? void 0 : pe.mjrBottomFeed) || "").toLowerCase() === "true", We = Number(fe.GRID_MIN_SIZE || 120) || 120; - return ye ? Math.max( + function E() { + var ye; + const ie = i.value, pe = String(((ye = ie == null ? void 0 : ie.dataset) == null ? void 0 : ye.mjrBottomFeed) || "").toLowerCase() === "true", Ce = Number(he.GRID_MIN_SIZE || 120) || 120; + return pe ? Math.max( 80, - Number(fe.FEED_GRID_MIN_SIZE || We) || We - ) : Math.max(80, We); + Number(he.FEED_GRID_MIN_SIZE || Ce) || Ce + ) : Math.max(80, Ce); } const $ = ze(() => { - var pe; - l.value; - const te = Math.max(0, Number(fe.GRID_GAP || 10) || 10), ye = H(), We = Number(o.value || 0) || Number(((pe = L.value) == null ? void 0 : pe.clientWidth) || 0) || 0; - return We <= 0 ? 1 : Math.max(1, Math.floor((We + te) / (ye + te))); - }), E = ze(() => { var ye; - return (Number(o.value || 0) || Number(((ye = L.value) == null ? void 0 : ye.clientWidth) || 0) || 0) > 0; - }), oe = ze(() => (l.value, Math.max(0, Number(fe.GRID_GAP || 10) || 10))), M = ze(() => { - var We; - const te = Math.max(1, $.value), ye = Number(o.value || 0) || Number(((We = L.value) == null ? void 0 : We.clientWidth) || 0) || 0; - return ye <= 0 ? H() : Math.max(80, Math.floor((ye - oe.value * Math.max(0, te - 1)) / te)); - }), j = ze(() => { l.value; - const te = !!fe.GRID_SHOW_DETAILS; - return M.value + (te ? 82 : 0) + oe.value; - }), O = ze(() => { - const te = Array.isArray(K.value) ? K.value : [], ye = Math.max(1, $.value); + const ie = Math.max(0, Number(he.GRID_GAP || 10) || 10), pe = E(), Ce = Number(o.value || 0) || Number(((ye = L.value) == null ? void 0 : ye.clientWidth) || 0) || 0; + return Ce <= 0 ? 1 : Math.max(1, Math.floor((Ce + ie) / (pe + ie))); + }), H = ze(() => { + var pe; + return (Number(o.value || 0) || Number(((pe = L.value) == null ? void 0 : pe.clientWidth) || 0) || 0) > 0; + }), ne = ze(() => (l.value, Math.max(0, Number(he.GRID_GAP || 10) || 10))), M = ze(() => { + var Ce; + const ie = Math.max(1, $.value), pe = Number(o.value || 0) || Number(((Ce = L.value) == null ? void 0 : Ce.clientWidth) || 0) || 0; + return pe <= 0 ? E() : Math.max(80, Math.floor((pe - ne.value * Math.max(0, ie - 1)) / ie)); + }), v = ze(() => { + l.value; + const ie = !!he.GRID_SHOW_DETAILS; + return M.value + (ie ? 82 : 0) + ne.value; + }), F = ze(() => { + const ie = Array.isArray(U.value) ? U.value : [], pe = Math.max(1, $.value); if (n.virtualize) return []; - const We = []; - for (let pe = 0; pe < te.length; pe += ye) - We.push({ - index: Math.floor(pe / ye), - items: te.slice(pe, pe + ye) + const Ce = []; + for (let ye = 0; ye < ie.length; ye += pe) + Ce.push({ + index: Math.floor(ye / pe), + items: ie.slice(ye, ye + pe) }); - return We; + return Ce; }), D = ze(() => { - const te = Array.isArray(K.value) ? K.value : [], ye = Math.max(1, $.value); - return Math.ceil(te.length / ye); + const ie = Array.isArray(U.value) ? U.value : [], pe = Math.max(1, $.value); + return Math.ceil(ie.length / pe); }); - function q(te) { - const ye = Array.isArray(K.value) ? K.value : [], We = Math.max(1, $.value), pe = Math.max(0, Number(te) || 0) * We; - return ye.slice(pe, pe + We); + function q(ie) { + const pe = Array.isArray(U.value) ? U.value : [], Ce = Math.max(1, $.value), ye = Math.max(0, Number(ie) || 0) * Ce; + return pe.slice(ye, ye + Ce); } const ee = ze(() => { - var We; - const te = Math.max(1, j.value), ye = ((We = L.value) == null ? void 0 : We.clientHeight) || 0; - return ye <= 0 ? 6 : Math.max(3, Math.min(20, Math.ceil(ye / te))); - }), ce = t1( + var Ce; + const ie = Math.max(1, v.value), pe = ((Ce = L.value) == null ? void 0 : Ce.clientHeight) || 0; + return pe <= 0 ? 6 : Math.max(3, Math.min(20, Math.ceil(pe / ie))); + }), ae = t1( ze(() => ({ count: n.virtualize ? D.value : 0, getScrollElement: () => L.value, - estimateSize: () => j.value, + estimateSize: () => v.value, overscan: ee.value, measureElement: fb })) - ), ue = ze(() => n.virtualize ? ce.value.getVirtualItems() : []), U = ze( - () => ue.value.map((te) => ({ - key: te.key, - index: te.index, - items: q(te.index) + ), ue = ze(() => n.virtualize ? ae.value.getVirtualItems() : []), B = ze( + () => ue.value.map((ie) => ({ + key: ie.key, + index: ie.index, + items: q(ie.index) })) ), Q = ze(() => { - const te = /* @__PURE__ */ new Map(); - for (const ye of ue.value) - te.set(ye.index, ye); - return te; - }), _ = ze(() => n.virtualize ? ce.value.getTotalSize() : 0), le = ze(() => (l.value, !!fe.GRID_SHOW_DETAILS)), de = ze(() => { - const te = Math.max(1, Number($.value || 1)); - return Math.max(12, Math.min(36, te * 4)); - }), se = ze( - () => Array.from({ length: Number(de.value || 12) }, (te, ye) => ye) + const ie = /* @__PURE__ */ new Map(); + for (const pe of ue.value) + ie.set(pe.index, pe); + return ie; + }), _ = ze(() => n.virtualize ? ae.value.getTotalSize() : 0), le = ze(() => (l.value, !!he.GRID_SHOW_DETAILS)), ce = ze(() => { + const ie = Math.max(1, Number($.value || 1)); + return Math.max(12, Math.min(36, ie * 4)); + }), de = ze( + () => Array.from({ length: Number(ce.value || 12) }, (ie, pe) => pe) ), ge = ze(() => { - const te = Math.max(1, Number($.value || 1)), ye = se.value, We = []; - for (let pe = 0; pe < ye.length; pe += te) - We.push(ye.slice(pe, pe + te)); - return We; - }), je = ze(() => { - const te = Math.max(80, Number(j.value || 0) - Number(oe.value || 0)), ye = Math.max(80, Number(M.value || 0)); - return Math.max(0, te - ye); - }), Se = ze(() => ({ + const ie = Math.max(1, Number($.value || 1)), pe = de.value, Ce = []; + for (let ye = 0; ye < pe.length; ye += ie) + Ce.push(pe.slice(ye, ye + ie)); + return Ce; + }), Le = ze(() => { + const ie = Math.max(80, Number(v.value || 0) - Number(ne.value || 0)), pe = Math.max(80, Number(M.value || 0)); + return Math.max(0, ie - pe); + }), xe = ze(() => ({ display: "flex", - gap: `${oe.value}px`, - paddingBottom: `${oe.value}px`, + gap: `${ne.value}px`, + paddingBottom: `${ne.value}px`, boxSizing: "border-box" - })), ke = ze(() => { - const te = Math.max(80, Number(M.value || 0)), ye = Math.max(80, Number(j.value || 0) - Number(oe.value || 0)); + })), Xe = ze(() => { + const ie = Math.max(80, Number(M.value || 0)), pe = Math.max(80, Number(v.value || 0) - Number(ne.value || 0)); return { - width: `${te}px`, - flex: `0 0 ${te}px`, - minWidth: `${te}px`, - height: `${ye}px`, + width: `${ie}px`, + flex: `0 0 ${ie}px`, + minWidth: `${ie}px`, + height: `${pe}px`, borderRadius: "12px", border: "1px solid rgba(255,255,255,0.22)", background: "rgba(192,198,206,0.20)", @@ -43700,13 +43737,13 @@ const oV = { boxShadow: "0 6px 18px rgba(0,0,0,0.24)", boxSizing: "border-box" }; - }), we = ze(() => ({ + }), Me = ze(() => ({ width: "100%", height: `${Math.max(80, Number(M.value || 0))}px`, background: "linear-gradient(90deg, rgba(168,174,182,0.40) 0%, rgba(220,225,232,0.54) 50%, rgba(168,174,182,0.40) 100%)", backgroundSize: "220% 100%", animation: "mjr-skeleton-shimmer 2.2s ease-in-out infinite" - })), Je = ze(() => ({ + })), Fe = ze(() => ({ height: "10px", margin: "10px 10px 6px", borderRadius: "8px", @@ -43714,7 +43751,7 @@ const oV = { background: "linear-gradient(90deg, rgba(162,168,176,0.38) 0%, rgba(214,219,226,0.52) 50%, rgba(162,168,176,0.38) 100%)", backgroundSize: "220% 100%", animation: "mjr-skeleton-shimmer 2.2s ease-in-out infinite" - })), $e = ze(() => ({ + })), it = ze(() => ({ height: "10px", margin: "0 10px 10px", borderRadius: "8px", @@ -43724,391 +43761,389 @@ const oV = { animation: "mjr-skeleton-shimmer 2.2s ease-in-out infinite" })), qe = ze(() => ({ display: le.value ? "block" : "none", - minHeight: `${Math.max(0, Number(je.value || 0))}px` + minHeight: `${Math.max(0, Number(Le.value || 0))}px` })); - function Ue() { - var ye; - const te = Number(((ye = L.value) == null ? void 0 : ye.clientWidth) || 0) || 0; - if (te > 0) { - o.value = te, r.value = !0; + function Pe() { + var pe; + const ie = Number(((pe = L.value) == null ? void 0 : pe.clientWidth) || 0) || 0; + if (ie > 0) { + o.value = ie, r.value = !0; return; } r.value || (o.value = 0); } - let Te = null, Oe = null, pt = !1; - cn( + let Re = null, rt = null, Te = !1; + dn( L, - (te, ye) => { - var We, pe, De; + (ie, pe) => { + var Ce, ye, De; try { - (We = Te == null ? void 0 : Te.disconnect) == null || We.call(Te); - } catch (ot) { - (pe = console.debug) == null || pe.call(console, ot); + (Ce = Re == null ? void 0 : Re.disconnect) == null || Ce.call(Re); + } catch (ut) { + (ye = console.debug) == null || ye.call(console, ut); } - if (te) { - Ue(); + if (ie) { + Pe(); try { - Te = new ResizeObserver(() => { - Ue(); - }), Te.observe(te); - } catch (ot) { - (De = console.debug) == null || De.call(console, ot), Te = null; + Re = new ResizeObserver(() => { + Pe(); + }), Re.observe(ie); + } catch (ut) { + (De = console.debug) == null || De.call(console, ut), Re = null; } } }, { immediate: !0 } - ), cn( + ), dn( () => D.value, async () => { - var te; - if (E.value) { + var ie; + if (H.value) { await wo(), me(); try { - ce.value.measure(); - } catch (ye) { - (te = console.debug) == null || te.call(console, ye); + ae.value.measure(); + } catch (pe) { + (ie = console.debug) == null || ie.call(console, pe); } } } - ), cn( + ), dn( () => s.assets, - async (te) => { - if (!Array.isArray(te) || te.length === 0) { - const ye = i.value; - ye != null && ye._mjrStackMembersCache && ye._mjrStackMembersCache.clear(); + async (ie) => { + if (!Array.isArray(ie) || ie.length === 0) { + const pe = i.value; + pe != null && pe._mjrStackMembersCache && pe._mjrStackMembersCache.clear(); } await wo(), me(); } ); - function Me(te, ye) { - const We = String((ye == null ? void 0 : ye.filename) || "").trim().toLowerCase(), pe = a.get(te); - if (pe && pe !== We) { - const ot = s.renderedFilenameMap.get(pe); - ot && (ot.delete(te), ot.size || s.renderedFilenameMap.delete(pe)); + function qt(ie, pe) { + const Ce = String((pe == null ? void 0 : pe.filename) || "").trim().toLowerCase(), ye = a.get(ie); + if (ye && ye !== Ce) { + const ut = s.renderedFilenameMap.get(ye); + ut && (ut.delete(ie), ut.size || s.renderedFilenameMap.delete(ye)); } - if (!We) { - a.delete(te); + if (!Ce) { + a.delete(ie); return; } - let De = s.renderedFilenameMap.get(We); - De || (De = /* @__PURE__ */ new Set(), s.renderedFilenameMap.set(We, De)), De.add(te), a.set(te, We); + let De = s.renderedFilenameMap.get(Ce); + De || (De = /* @__PURE__ */ new Set(), s.renderedFilenameMap.set(Ce, De)), De.add(ie), a.set(ie, Ce); } - function Xt(te) { - if (!te) return; - const ye = a.get(te); - if (!ye) return; - const We = s.renderedFilenameMap.get(ye); - We && (We.delete(te), We.size || s.renderedFilenameMap.delete(ye)), a.delete(te); + function kt(ie) { + if (!ie) return; + const pe = a.get(ie); + if (!pe) return; + const Ce = s.renderedFilenameMap.get(pe); + Ce && (Ce.delete(ie), Ce.size || s.renderedFilenameMap.delete(pe)), a.delete(ie); } - function Mt(te) { - var re, ne, Ie; - const ye = String(te || "").trim().toLowerCase(); - if (!ye) return; - const We = s.renderedFilenameMap.get(ye), pe = Array.from(We || []); - if (!pe.length) return; + function we(ie) { + var Gt, je, oe; + const pe = String(ie || "").trim().toLowerCase(); + if (!pe) return; + const Ce = s.renderedFilenameMap.get(pe), ye = Array.from(Ce || []); + if (!ye.length) return; const De = (Array.isArray(s.assets) ? s.assets : []).filter( - (Ne) => String((Ne == null ? void 0 : Ne.filename) || "").trim().toLowerCase() === ye - ), ot = Math.max( - Number(((ne = (re = s.filenameCounts) == null ? void 0 : re.get) == null ? void 0 : ne.call(re, ye)) || 0) || 0, + (se) => String((se == null ? void 0 : se.filename) || "").trim().toLowerCase() === pe + ), ut = Math.max( + Number(((je = (Gt = s.filenameCounts) == null ? void 0 : Gt.get) == null ? void 0 : je.call(Gt, pe)) || 0) || 0, De.length - ), Zt = VI(De), Pt = pe.find((Ne) => { - var St; - const He = String(((St = Ne._mjrAsset) == null ? void 0 : St.id) || ""), rt = String((Zt == null ? void 0 : Zt.id) || ""); - return He && rt && He === rt; - }) || pe[0] || pe[0] || null, vt = (Pt == null ? void 0 : Pt._mjrAsset) || Zt || De[0] || null; - YI(vt, De); - for (const Ne of pe) { - delete Ne.dataset.mjrDupHidden; - const He = Ne._mjrAsset; - He && (He._mjrNameCollision = !1, delete He._mjrNameCollisionCount, delete He._mjrNameCollisionPaths, He._mjrDupStack = !1, He._mjrDupMembers = null, He._mjrDupCount = 0, He._mjrDupHidden = !1); + ), At = YI(De), Qt = ye.find((se) => { + var gt; + const fe = String(((gt = se._mjrAsset) == null ? void 0 : gt.id) || ""), Be = String((At == null ? void 0 : At.id) || ""); + return fe && Be && fe === Be; + }) || ye[0] || ye[0] || null, xt = (Qt == null ? void 0 : Qt._mjrAsset) || At || De[0] || null; + VI(xt, De); + for (const se of ye) { + delete se.dataset.mjrDupHidden; + const fe = se._mjrAsset; + fe && (fe._mjrNameCollision = !1, delete fe._mjrNameCollisionCount, delete fe._mjrNameCollisionPaths, fe._mjrDupStack = !1, fe._mjrDupMembers = null, fe._mjrDupCount = 0, fe._mjrDupHidden = !1); } - if (!Pt || !vt || ot < 2) { - for (const Ne of pe) + if (!Qt || !xt || ut < 2) { + for (const se of ye) try { r && s.loadingMessage; - } catch (He) { - (Ie = console.debug) == null || Ie.call(console, He); + } catch (fe) { + (oe = console.debug) == null || oe.call(console, fe); } return; } - vt._mjrDupStack = !0, vt._mjrDupMembers = De.length ? De : [vt], vt._mjrDupCount = vt._mjrDupMembers.length, vt._mjrNameCollision = !1; - for (let Ne = 1; Ne < pe.length; Ne += 1) - pe[Ne].dataset.mjrDupHidden = "true", pe[Ne]._mjrAsset && (pe[Ne]._mjrAsset._mjrDupHidden = !0); + xt._mjrDupStack = !0, xt._mjrDupMembers = De.length ? De : [xt], xt._mjrDupCount = xt._mjrDupMembers.length, xt._mjrNameCollision = !1; + for (let se = 1; se < ye.length; se += 1) + ye[se].dataset.mjrDupHidden = "true", ye[se]._mjrAsset && (ye[se]._mjrAsset._mjrDupHidden = !0); } function me() { - for (const te of s.renderedFilenameMap.keys()) - Mt(te); + for (const ie of s.renderedFilenameMap.keys()) + we(ie); } - function Pe(te, ye) { - var De, ot; - const We = String((te == null ? void 0 : te.id) || "").trim(); - if (!We) return; - if (!ye) { - const Zt = s.cardElements.get(We), tn = Zt ? a.get(Zt) : ""; - Xt(Zt), s.cardElements.delete(We), Mt(tn); + function He(ie, pe) { + var De, ut; + const Ce = String((ie == null ? void 0 : ie.id) || "").trim(); + if (!Ce) return; + if (!pe) { + const At = s.cardElements.get(Ce), Ht = At ? a.get(At) : ""; + kt(At), s.cardElements.delete(Ce), we(Ht); return; } - const pe = (ye == null ? void 0 : ye.$el) ?? ye; - if (pe instanceof HTMLElement) { - s.cardElements.set(We, pe), pe._mjrIsVue = !0, pe._mjrAsset = te, pe._mjrReactiveAsset = te, pe.dataset.mjrKind = String((te == null ? void 0 : te.kind) || ""), Me(pe, te), Mt(String((te == null ? void 0 : te.filename) || "").trim().toLowerCase()); + const ye = (pe == null ? void 0 : pe.$el) ?? pe; + if (ye instanceof HTMLElement) { + s.cardElements.set(Ce, ye), ye._mjrIsVue = !0, ye._mjrAsset = ie, ye._mjrReactiveAsset = ie, ye.dataset.mjrKind = String((ie == null ? void 0 : ie.kind) || ""), qt(ye, ie), we(String((ie == null ? void 0 : ie.filename) || "").trim().toLowerCase()); try { - (De = n.onCardRendered) == null || De.call(n, pe, te, i.value); - } catch (Zt) { - (ot = console.debug) == null || ot.call(console, Zt); + (De = n.onCardRendered) == null || De.call(n, ye, ie, i.value); + } catch (At) { + (ut = console.debug) == null || ut.call(console, At); } } } - function Le(te) { - return (ye) => Pe(te, ye); + function Ye(ie) { + return (pe) => He(ie, pe); } - function Ot(te, ye) { - var We, pe; + function Pt(ie, pe) { + var Ce, ye; try { - const De = (We = te == null ? void 0 : te.closest) == null ? void 0 : We.call(te, "a, button, input, textarea, select, label"); - return !!(De && ((pe = ye == null ? void 0 : ye.contains) != null && pe.call(ye, De))); + const De = (Ce = ie == null ? void 0 : ie.closest) == null ? void 0 : Ce.call(ie, "a, button, input, textarea, select, label"); + return !!(De && ((ye = pe == null ? void 0 : pe.contains) != null && ye.call(pe, De))); } catch { return !1; } } - const Xe = { + const ke = { assetId: "", at: 0 }; - function Ee(te, ye) { - var Zt, tn, Pt; - const We = String((ye == null ? void 0 : ye.id) || "").trim(); - if (!We) return; - if ((te == null ? void 0 : te.type) === "click" && Number((te == null ? void 0 : te.detail) || 0) > 0) { - const vt = Date.now() - Number(Xe.at || 0); - if (Xe.assetId === We && vt >= 0 && vt < 500) { - Xe.assetId = "", Xe.at = 0; + function Ee(ie, pe) { + var At, Ht, Qt; + const Ce = String((pe == null ? void 0 : pe.id) || "").trim(); + if (!Ce) return; + if ((ie == null ? void 0 : ie.type) === "click" && Number((ie == null ? void 0 : ie.detail) || 0) > 0) { + const xt = Date.now() - Number(ke.at || 0); + if (ke.assetId === Ce && xt >= 0 && xt < 500) { + ke.assetId = "", ke.at = 0; return; } } - if (Ot(te == null ? void 0 : te.target, te == null ? void 0 : te.currentTarget)) return; - const pe = Array.isArray(s.assets) ? s.assets : [], De = pe.findIndex((vt) => String((vt == null ? void 0 : vt.id) || "") === We), ot = Array.isArray(s.selectedIds) ? s.selectedIds.slice() : []; - if (te != null && te.shiftKey && De >= 0) { - const vt = String(s.selectionAnchorId || s.activeId || We).trim(), re = pe.findIndex((rt) => String((rt == null ? void 0 : rt.id) || "") === vt), ne = re >= 0 ? re : De, Ie = Math.min(ne, De), Ne = Math.max(ne, De), He = pe.slice(Ie, Ne + 1).map((rt) => String((rt == null ? void 0 : rt.id) || "")).filter(Boolean); - C(He, We); + if (Pt(ie == null ? void 0 : ie.target, ie == null ? void 0 : ie.currentTarget)) return; + const ye = Array.isArray(s.assets) ? s.assets : [], De = ye.findIndex((xt) => String((xt == null ? void 0 : xt.id) || "") === Ce), ut = Array.isArray(s.selectedIds) ? s.selectedIds.slice() : []; + if (ie != null && ie.shiftKey && De >= 0) { + const xt = String(s.selectionAnchorId || s.activeId || Ce).trim(), Gt = ye.findIndex((Be) => String((Be == null ? void 0 : Be.id) || "") === xt), je = Gt >= 0 ? Gt : De, oe = Math.min(je, De), se = Math.max(je, De), fe = ye.slice(oe, se + 1).map((Be) => String((Be == null ? void 0 : Be.id) || "")).filter(Boolean); + W(fe, Ce); return; } - if (te != null && te.ctrlKey || te != null && te.metaKey) { - const vt = new Set(ot.map(String)); - vt.has(We) ? vt.delete(We) : vt.add(We); - const re = Array.from(vt); - C(re, vt.has(We) ? We : re[0] || ""); + if (ie != null && ie.ctrlKey || ie != null && ie.metaKey) { + const xt = new Set(ut.map(String)); + xt.has(Ce) ? xt.delete(Ce) : xt.add(Ce); + const Gt = Array.from(xt); + W(Gt, xt.has(Ce) ? Ce : Gt[0] || ""); return; } - C([We], We); + W([Ce], Ce); try { - (tn = (Zt = s.cardElements.get(We)) == null ? void 0 : Zt.focus) == null || tn.call(Zt, { preventScroll: !0 }); - } catch (vt) { - (Pt = console.debug) == null || Pt.call(console, vt); + (Ht = (At = s.cardElements.get(Ce)) == null ? void 0 : At.focus) == null || Ht.call(At, { preventScroll: !0 }); + } catch (xt) { + (Qt = console.debug) == null || Qt.call(console, xt); } } - function Ke(te, ye) { - Number((te == null ? void 0 : te.button) ?? 0) === 0 && (Xe.assetId = String((ye == null ? void 0 : ye.id) || "").trim(), Xe.at = Date.now(), Ee(te, ye)); + function Ke(ie, pe) { + Number((ie == null ? void 0 : ie.button) ?? 0) === 0 && (ke.assetId = String((pe == null ? void 0 : pe.id) || "").trim(), ke.at = Date.now(), Ee(ie, pe)); } - function nt(te) { - const ye = (Array.isArray(s.assets) ? s.assets : []).filter( - (pe) => !v(pe) - ), We = ye.findIndex( - (pe) => String((pe == null ? void 0 : pe.id) || "") === String((te == null ? void 0 : te.id) || "") + function lt(ie) { + const pe = (Array.isArray(s.assets) ? s.assets : []).filter( + (ye) => !j(ye) + ), Ce = pe.findIndex( + (ye) => String((ye == null ? void 0 : ye.id) || "") === String((ie == null ? void 0 : ie.id) || "") ); - !ye.length || We < 0 || tc({ assets: ye, index: We }); + !pe.length || Ce < 0 || nc({ assets: pe, index: Ce }); } - function ut(te) { - var ye, We, pe, De; + function wt(ie) { + var pe, Ce, ye, De; try { if (typeof n.onCardDblclick == "function") { n.onCardDblclick({ - asset: te, + asset: ie, assets: Array.isArray(s.assets) ? s.assets : [], gridContainer: i.value }); return; } - } catch (ot) { - (ye = console.debug) == null || ye.call(console, ot); + } catch (ut) { + (pe = console.debug) == null || pe.call(console, ut); } - if (v(te)) { + if (j(ie)) { try { - (pe = (We = i.value) == null ? void 0 : We.dispatchEvent) == null || pe.call( - We, + (ye = (Ce = i.value) == null ? void 0 : Ce.dispatchEvent) == null || ye.call( + Ce, new CustomEvent("mjr:open-folder-asset", { bubbles: !0, - detail: { asset: te } + detail: { asset: ie } }) ); - } catch (ot) { - (De = console.debug) == null || De.call(console, ot); + } catch (ut) { + (De = console.debug) == null || De.call(console, ut); } return; } - nt(te); + lt(ie); } - let It = null; - function dt() { - var te, ye, We; - Ue(); + let at = null; + function tt() { + var ie, pe, Ce; + Pe(); try { - (ye = (te = ce.value) == null ? void 0 : te.measure) == null || ye.call(te); - } catch (pe) { - (We = console.debug) == null || We.call(console, pe); + (pe = (ie = ae.value) == null ? void 0 : ie.measure) == null || pe.call(ie); + } catch (ye) { + (Ce = console.debug) == null || Ce.call(console, ye); } } - function Re() { - if (dt(), !W()) { + function Oe() { + tt(), requestAnimationFrame(() => { requestAnimationFrame(() => { - requestAnimationFrame(() => { - dt(), lt(); - }); + tt(), nt(); }); - return; - } - lt(); + }), setTimeout(() => { + tt(), nt(); + }, 150); } - function Wt(te) { - if (!te || !n.virtualize) return () => { + function Rt(ie) { + if (!ie || !n.virtualize) return () => { }; - const ye = () => { + const pe = () => { if (s.loading || s.done) return; - Number(te.scrollHeight || 0) - (Number(te.scrollTop || 0) + Number(te.clientHeight || 0)) <= Math.max(600, j.value * 4) && f.loadNextPage(); + Number(ie.scrollHeight || 0) - (Number(ie.scrollTop || 0) + Number(ie.clientHeight || 0)) <= Math.max(600, v.value * 4) && f.loadNextPage(); }; - return te.addEventListener("scroll", ye, { passive: !0 }), () => { - var We; + return ie.addEventListener("scroll", pe, { passive: !0 }), () => { + var Ce; try { - te.removeEventListener("scroll", ye); - } catch (pe) { - (We = console.debug) == null || We.call(console, pe); + ie.removeEventListener("scroll", pe); + } catch (ye) { + (Ce = console.debug) == null || Ce.call(console, ye); } }; } - cn( + dn( L, - (te) => { - var ye; + (ie) => { + var pe; try { - It == null || It(); - } catch (We) { - (ye = console.debug) == null || ye.call(console, We); + at == null || at(); + } catch (Ce) { + (pe = console.debug) == null || pe.call(console, Ce); } - It = Wt(te); + at = Rt(ie); }, { immediate: !0 } ); - async function lt() { - if (!n.virtualize || !E.value || s.loading || s.done) return; - const te = L.value; - if (!te) return; + async function nt() { + if (!n.virtualize || !H.value || s.loading || s.done) return; + const ie = L.value; + if (!ie) return; await wo(); - const ye = Number(te.scrollHeight || 0) || 0, We = Number(te.clientHeight || 0) || 0; - ye <= We + 40 && f.loadNextPage(); + const pe = Number(ie.scrollHeight || 0) || 0, Ce = Number(ie.clientHeight || 0) || 0; + pe <= Ce + 40 && f.loadNextPage(); } - cn( + dn( () => `${Array.isArray(s.assets) ? s.assets.length : 0}::${$.value}::${s.loading}::${s.done}`, () => { - lt(); + nt(); }, { flush: "post" } ); - function qt(te) { - var ye; - if (!(!te || !n.virtualize)) + function Mt(ie) { + var pe; + if (!(!ie || !n.virtualize)) try { - ce.value.measureElement(te); - } catch (We) { - (ye = console.debug) == null || ye.call(console, We); + ae.value.measureElement(ie); + } catch (Ce) { + (pe = console.debug) == null || pe.call(console, Ce); } } - function yt() { + function dt() { return { width: `${M.value}px`, flex: `0 0 ${M.value}px`, minWidth: `${M.value}px` }; } - function mt(te) { - return Q.value.get(te) || null; + function bt(ie) { + return Q.value.get(ie) || null; } - function kt(te) { - const ye = mt(te); + function Yt(ie) { + const pe = bt(ie); return { position: "absolute", left: "0", top: "0", - transform: `translateY(${Number((ye == null ? void 0 : ye.start) || 0)}px)`, + transform: `translateY(${Number((pe == null ? void 0 : pe.start) || 0)}px)`, width: "100%", display: "flex", - gap: `${oe.value}px`, - paddingBottom: `${oe.value}px`, + gap: `${ne.value}px`, + paddingBottom: `${ne.value}px`, boxSizing: "border-box" }; } function $t() { return { display: "flex", - gap: `${oe.value}px`, - paddingBottom: `${oe.value}px`, + gap: `${ne.value}px`, + paddingBottom: `${ne.value}px`, boxSizing: "border-box" }; } - function Tt() { + function nn() { l.value += 1, n.applyDefaultSettingsClasses && i.value && ol(i.value); } - return cn( + return dn( () => n.applyDefaultSettingsClasses, () => { i.value && n.applyDefaultSettingsClasses && ol(i.value); }, { immediate: !0 } ), xr(() => { - var te, ye, We, pe, De, ot, Zt, tn, Pt, vt, re; + var ie, pe, Ce, ye, De, ut, At, Ht, Qt, xt, Gt; try { - (ye = (te = i.value) == null ? void 0 : te._mjrPrimaryPointerSelectionUnbind) == null || ye.call(te); - } catch (ne) { - (We = console.debug) == null || We.call(console, ne); + (pe = (ie = i.value) == null ? void 0 : ie._mjrPrimaryPointerSelectionUnbind) == null || pe.call(ie); + } catch (je) { + (Ce = console.debug) == null || Ce.call(console, je); } try { i.value && (i.value._mjrPrimaryPointerSelectionUnbind = null, i.value._mjrSelectionManagedByVue = !1); - } catch (ne) { - (pe = console.debug) == null || pe.call(console, ne); + } catch (je) { + (ye = console.debug) == null || ye.call(console, je); } try { - (De = Te == null ? void 0 : Te.disconnect) == null || De.call(Te); - } catch (ne) { - (ot = console.debug) == null || ot.call(console, ne); + (De = Re == null ? void 0 : Re.disconnect) == null || De.call(Re); + } catch (je) { + (ut = console.debug) == null || ut.call(console, je); } try { - It == null || It(); - } catch (ne) { - (Zt = console.debug) == null || Zt.call(console, ne); + at == null || at(); + } catch (je) { + (At = console.debug) == null || At.call(console, je); } try { f.dispose(); - } catch (ne) { - (tn = console.debug) == null || tn.call(console, ne); + } catch (je) { + (Ht = console.debug) == null || Ht.call(console, je); } try { - Oe == null || Oe(); - } catch (ne) { - (Pt = console.debug) == null || Pt.call(console, ne); + rt == null || rt(); + } catch (je) { + (Qt = console.debug) == null || Qt.call(console, je); } - Oe = null; + rt = null; try { - window.removeEventListener("mjr-settings-changed", Tt), pt = !1; - } catch (ne) { - (vt = console.debug) == null || vt.call(console, ne); + window.removeEventListener("mjr-settings-changed", nn), Te = !1; + } catch (je) { + (xt = console.debug) == null || xt.call(console, je); } try { - window.removeEventListener("mjr:keepalive-attached", Re); - } catch (ne) { - (re = console.debug) == null || re.call(console, ne); + window.removeEventListener("mjr:keepalive-attached", Oe); + } catch (je) { + (Gt = console.debug) == null || Gt.call(console, je); } - }), cn( + }), dn( i, - (te) => { - te && (pt || (window.addEventListener("mjr-settings-changed", Tt), window.addEventListener("mjr:keepalive-attached", Re), pt = !0)); + (ie) => { + ie && (Te || (window.addEventListener("mjr-settings-changed", nn), window.addEventListener("mjr:keepalive-attached", Oe), Te = !0)); }, { immediate: !0 } ), t({ @@ -44118,40 +44153,40 @@ const oV = { get assets() { return Array.isArray(s.assets) ? s.assets : []; }, - loadAssets(...te) { - return f.loadAssets(...te); + loadAssets(...ie) { + return f.loadAssets(...ie); }, - loadAssetsFromList(...te) { - return f.loadAssetsFromList(...te); + loadAssetsFromList(...ie) { + return f.loadAssetsFromList(...ie); }, - loadNextPage(...te) { - return f.loadNextPage(...te); + loadNextPage(...ie) { + return f.loadNextPage(...ie); }, - prepareGridForScopeSwitch(...te) { - return f.prepareGridForScopeSwitch(...te); + prepareGridForScopeSwitch(...ie) { + return f.prepareGridForScopeSwitch(...ie); }, - refreshGrid(...te) { - return f.refreshGrid(...te); + refreshGrid(...ie) { + return f.refreshGrid(...ie); }, - removeAssets(...te) { - return f.removeAssets(...te); + removeAssets(...ie) { + return f.removeAssets(...ie); }, - upsertAsset(...te) { - return f.upsertAsset(...te); + upsertAsset(...ie) { + return f.upsertAsset(...ie); }, - captureAnchor(...te) { - return f.captureAnchor(...te); + captureAnchor(...ie) { + return f.captureAnchor(...ie); }, - restoreAnchor(...te) { - return f.restoreAnchor(...te); + restoreAnchor(...ie) { + return f.restoreAnchor(...ie); }, - hydrateFromSnapshot(...te) { - return f.hydrateFromSnapshot(...te); + hydrateFromSnapshot(...ie) { + return f.hydrateFromSnapshot(...ie); }, dispose() { return f.dispose(); } - }), (te, ye) => (be(), Ce("div", { + }), (ie, pe) => (be(), Ze("div", { ref_key: "gridContainerRef", ref: i, class: "mjr-grid", @@ -44159,44 +44194,44 @@ const oV = { role: "grid", style: { position: "relative", "min-height": "100%" } }, [ - xe(s).loading && !xe(s).assets.length || !r.value && xe(s).assets.length ? (be(), Ce("div", oV, [ - ie("div", rV, [ - ie("div", lV, [ - (be(!0), Ce(Nt, null, Cn(ge.value, (We, pe) => (be(), Ce("div", { - key: `skr-${pe}`, - style: Lt(Se.value) + ve(s).loading && !ve(s).assets.length || !r.value && ve(s).assets.length ? (be(), Ze("div", oY, [ + te("div", rY, [ + te("div", lY, [ + (be(!0), Ze(Nt, null, Zn(ge.value, (Ce, ye) => (be(), Ze("div", { + key: `skr-${ye}`, + style: vt(xe.value) }, [ - (be(!0), Ce(Nt, null, Cn(We, (De) => (be(), Ce("div", { + (be(!0), Ze(Nt, null, Zn(Ce, (De) => (be(), Ze("div", { key: `sk-${De}`, class: "mjr-grid-skeleton-card", - style: Lt(ke.value) + style: vt(Xe.value) }, [ - ie("div", { + te("div", { class: "mjr-grid-skeleton-thumb mjr-grid-skeleton-shimmer", - style: Lt(we.value) + style: vt(Me.value) }, null, 4), - ie("div", { - style: Lt(qe.value) + te("div", { + style: vt(qe.value) }, [ - ie("div", { + te("div", { class: "mjr-grid-skeleton-line mjr-grid-skeleton-line--title mjr-grid-skeleton-shimmer", - style: Lt(Je.value) + style: vt(Fe.value) }, null, 4), - ie("div", { + te("div", { class: "mjr-grid-skeleton-line mjr-grid-skeleton-line--meta mjr-grid-skeleton-shimmer", - style: Lt($e.value) + style: vt(it.value) }, null, 4) ], 4) ], 4))), 128)) ], 4))), 128)) ]), - ie("div", aV, Ye(r.value ? xe(s).loadingMessage || "Loading assets..." : "Preparing grid..."), 1) + te("div", aY, Ne(r.value ? ve(s).loadingMessage || "Loading assets..." : "Preparing grid..."), 1) ]) - ])) : ft("", !0), - xe(s).statusMessage && !xe(s).assets.length && !xe(s).loading ? (be(), Ce("div", { + ])) : yt("", !0), + ve(s).statusMessage && !ve(s).assets.length && !ve(s).loading ? (be(), Ze("div", { key: 1, class: "mjr-grid-message", - style: Lt({ + style: vt({ position: "absolute", inset: "0", zIndex: 3, @@ -44208,125 +44243,125 @@ const oV = { pointerEvents: "none", fontSize: "14px", lineHeight: "1.4", - color: xe(s).statusError ? "var(--error-text, #f44336)" : "var(--muted-text, #bdbdbd)", + color: ve(s).statusError ? "var(--error-text, #f44336)" : "var(--muted-text, #bdbdbd)", background: "rgba(0, 0, 0, 0.35)" }) - }, Ye(xe(s).statusMessage), 5)) : ft("", !0), - e.virtualize && r.value ? (be(), Ce("div", { + }, Ne(ve(s).statusMessage), 5)) : yt("", !0), + e.virtualize && r.value ? (be(), Ze("div", { key: 2, - style: Lt({ + style: vt({ height: `${_.value}px`, position: "relative", width: "100%" }) }, [ - (be(!0), Ce(Nt, null, Cn(U.value, (We) => (be(), Ce("div", { - key: We.key, + (be(!0), Ze(Nt, null, Zn(B.value, (Ce) => (be(), Ze("div", { + key: Ce.key, ref_for: !0, - ref: qt, - "data-index": We.index, - style: Lt(kt(We.index)) + ref: Mt, + "data-index": Ce.index, + style: vt(Yt(Ce.index)) }, [ - We.items.length ? (be(!0), Ce(Nt, { key: 0 }, Cn(We.items, (pe) => (be(), Ce(Nt, { - key: String(pe.id) + Ce.items.length ? (be(!0), Ze(Nt, { key: 0 }, Zn(Ce.items, (ye) => (be(), Ze(Nt, { + key: String(ye.id) }, [ - v(pe) ? (be(), Pi(cm, { + j(ye) ? (be(), Pi(cm, { key: 0, ref_for: !0, - ref: Le(pe), - asset: pe, - selected: T(pe), - style: Lt(yt()), - onMousedown: On((De) => Ke(De, pe), ["left"]), - onClick: (De) => Ee(De, pe), - onDblclick: On((De) => ut(pe), ["stop"]) - }, null, 8, ["asset", "selected", "style", "onMousedown", "onClick", "onDblclick"])) : (be(), Ce("div", { + ref: Ye(ye), + asset: ye, + selected: K(ye), + style: vt(dt()), + onMousedown: Fn((De) => Ke(De, ye), ["left"]), + onClick: (De) => Ee(De, ye), + onDblclick: Fn((De) => wt(ye), ["stop"]) + }, null, 8, ["asset", "selected", "style", "onMousedown", "onClick", "onDblclick"])) : (be(), Ze("div", { key: 1, ref_for: !0, - ref: Le(pe), - class: Zn(["mjr-asset-card mjr-card", { - "is-selected": T(pe), - "mjr-live-placeholder": R(pe) + ref: Ye(ye), + class: An(["mjr-asset-card mjr-card", { + "is-selected": K(ye), + "mjr-live-placeholder": R(ye) }]), role: "button", tabindex: "0", draggable: "true", - style: Lt([yt(), pe._mjrDupHidden ? { display: "none" } : null]), - "data-mjr-asset-id": String(pe.id ?? ""), - "data-mjr-filename-key": String(pe.filename || "").toLowerCase(), - "data-mjr-ext": X(pe), - "data-mjr-stem": x(pe), - "data-mjr-kind": String(pe.kind || ""), - "data-mjr-live-placeholder": R(pe) ? "true" : void 0, - "data-mjr-stacked": w(pe) ? "true" : void 0, - "data-mjr-stack-count": w(pe) ? String(pe.stack_asset_count || 0) : void 0, - "data-mjr-dup-stacked": pe._mjrDupStack ? "true" : void 0, - "data-mjr-dup-count": pe._mjrDupStack ? String(pe._mjrDupCount || 0) : void 0, - "aria-label": `Asset ${pe.filename || ""}`, - "aria-selected": T(pe) ? "true" : "false", - onMousedown: On((De) => Ke(De, pe), ["left"]), - onClick: (De) => Ee(De, pe), - onDblclick: On((De) => ut(pe), ["stop"]) + style: vt([dt(), ye._mjrDupHidden ? { display: "none" } : null]), + "data-mjr-asset-id": String(ye.id ?? ""), + "data-mjr-filename-key": String(ye.filename || "").toLowerCase(), + "data-mjr-ext": X(ye), + "data-mjr-stem": x(ye), + "data-mjr-kind": String(ye.kind || ""), + "data-mjr-live-placeholder": R(ye) ? "true" : void 0, + "data-mjr-stacked": w(ye) ? "true" : void 0, + "data-mjr-stack-count": w(ye) ? String(ye.stack_asset_count || 0) : void 0, + "data-mjr-dup-stacked": ye._mjrDupStack ? "true" : void 0, + "data-mjr-dup-count": ye._mjrDupStack ? String(ye._mjrDupCount || 0) : void 0, + "aria-label": `Asset ${ye.filename || ""}`, + "aria-selected": K(ye) ? "true" : "false", + onMousedown: Fn((De) => Ke(De, ye), ["left"]), + onClick: (De) => Ee(De, ye), + onDblclick: Fn((De) => wt(ye), ["stop"]) }, [ - fn(am, { asset: pe }, null, 8, ["asset"]) - ], 46, sV)) - ], 64))), 128)) : ft("", !0) - ], 12, cV))), 128)) - ], 4)) : (be(), Ce("div", dV, [ - (be(!0), Ce(Nt, null, Cn(O.value, (We) => (be(), Ce("div", { - key: We.index, - style: Lt($t()) + Cn(am, { asset: ye }, null, 8, ["asset"]) + ], 46, sY)) + ], 64))), 128)) : yt("", !0) + ], 12, cY))), 128)) + ], 4)) : (be(), Ze("div", dY, [ + (be(!0), Ze(Nt, null, Zn(F.value, (Ce) => (be(), Ze("div", { + key: Ce.index, + style: vt($t()) }, [ - (be(!0), Ce(Nt, null, Cn(We.items, (pe) => (be(), Ce(Nt, { - key: String(pe.id) + (be(!0), Ze(Nt, null, Zn(Ce.items, (ye) => (be(), Ze(Nt, { + key: String(ye.id) }, [ - v(pe) ? (be(), Pi(cm, { + j(ye) ? (be(), Pi(cm, { key: 0, ref_for: !0, - ref: Le(pe), - asset: pe, - selected: T(pe), - style: Lt(yt()), - onMousedown: On((De) => Ke(De, pe), ["left"]), - onClick: (De) => Ee(De, pe), - onDblclick: On((De) => ut(pe), ["stop"]) - }, null, 8, ["asset", "selected", "style", "onMousedown", "onClick", "onDblclick"])) : (be(), Ce("div", { + ref: Ye(ye), + asset: ye, + selected: K(ye), + style: vt(dt()), + onMousedown: Fn((De) => Ke(De, ye), ["left"]), + onClick: (De) => Ee(De, ye), + onDblclick: Fn((De) => wt(ye), ["stop"]) + }, null, 8, ["asset", "selected", "style", "onMousedown", "onClick", "onDblclick"])) : (be(), Ze("div", { key: 1, ref_for: !0, - ref: Le(pe), - class: Zn(["mjr-asset-card mjr-card", { - "is-selected": T(pe), - "mjr-live-placeholder": R(pe) + ref: Ye(ye), + class: An(["mjr-asset-card mjr-card", { + "is-selected": K(ye), + "mjr-live-placeholder": R(ye) }]), role: "button", tabindex: "0", draggable: "true", - style: Lt([yt(), pe._mjrDupHidden ? { display: "none" } : null]), - "data-mjr-asset-id": String(pe.id ?? ""), - "data-mjr-filename-key": String(pe.filename || "").toLowerCase(), - "data-mjr-ext": X(pe), - "data-mjr-stem": x(pe), - "data-mjr-kind": String(pe.kind || ""), - "data-mjr-live-placeholder": R(pe) ? "true" : void 0, - "data-mjr-stacked": w(pe) ? "true" : void 0, - "data-mjr-stack-count": w(pe) ? String(pe.stack_asset_count || 0) : void 0, - "data-mjr-dup-stacked": pe._mjrDupStack ? "true" : void 0, - "data-mjr-dup-count": pe._mjrDupStack ? String(pe._mjrDupCount || 0) : void 0, - "aria-label": `Asset ${pe.filename || ""}`, - "aria-selected": T(pe) ? "true" : "false", - onMousedown: On((De) => Ke(De, pe), ["left"]), - onClick: (De) => Ee(De, pe), - onDblclick: On((De) => ut(pe), ["stop"]) + style: vt([dt(), ye._mjrDupHidden ? { display: "none" } : null]), + "data-mjr-asset-id": String(ye.id ?? ""), + "data-mjr-filename-key": String(ye.filename || "").toLowerCase(), + "data-mjr-ext": X(ye), + "data-mjr-stem": x(ye), + "data-mjr-kind": String(ye.kind || ""), + "data-mjr-live-placeholder": R(ye) ? "true" : void 0, + "data-mjr-stacked": w(ye) ? "true" : void 0, + "data-mjr-stack-count": w(ye) ? String(ye.stack_asset_count || 0) : void 0, + "data-mjr-dup-stacked": ye._mjrDupStack ? "true" : void 0, + "data-mjr-dup-count": ye._mjrDupStack ? String(ye._mjrDupCount || 0) : void 0, + "aria-label": `Asset ${ye.filename || ""}`, + "aria-selected": K(ye) ? "true" : "false", + onMousedown: Fn((De) => Ke(De, ye), ["left"]), + onClick: (De) => Ee(De, ye), + onDblclick: Fn((De) => wt(ye), ["stop"]) }, [ - fn(am, { asset: pe }, null, 8, ["asset"]) - ], 46, uV)) + Cn(am, { asset: ye }, null, 8, ["asset"]) + ], 46, uY)) ], 64))), 128)) ], 4))), 128)) ])) ], 512)); } -}, Vp = /* @__PURE__ */ Vr(mV, [["__scopeId", "data-v-d9ff3613"]]), Hm = 240, qm = 120, gV = 80; -function IV(e) { +}, Yp = /* @__PURE__ */ Yr(mY, [["__scopeId", "data-v-c8da1cb5"]]), Em = 240, qm = 120, gY = 80; +function IY(e) { var i; const t = document.createElement("button"); t.type = "button", t.className = "mjr-asset-card mjr-card mjr-feed-group-member-card", t.style.cssText = "display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-end;min-height:110px;padding:8px;border:1px solid var(--mjr-border,#444);border-radius:8px;background:var(--mjr-surface,#202020);color:inherit;text-align:left;overflow:hidden;"; @@ -44356,54 +44391,54 @@ function yd(e) { } function ba(e, t, n = "") { const i = Array.isArray(t) ? t.map(String).filter(Boolean) : []; - return jC( + return jh( e, i, { activeId: n || i[0] || "" }, yd ); } -function bV(e) { +function bY(e) { const t = e == null ? void 0 : e.grid; if (!t) return; const n = (i) => { - var d, u, I, y, S, Z, C, g; + var d, u, I, A, h, S, W, g; if (i.defaultPrevented) return; const o = (u = (d = i.target) == null ? void 0 : d.closest) == null ? void 0 : u.call(d, ".mjr-asset-card"); if (!o || !t.contains(o)) return; - const r = (y = (I = i.target) == null ? void 0 : I.closest) == null ? void 0 : y.call(I, "a, button, input, textarea, select, label"); + const r = (A = (I = i.target) == null ? void 0 : I.closest) == null ? void 0 : A.call(I, "a, button, input, textarea, select, label"); if (r && r !== o && o.contains(r)) return; - const l = String(((S = o.dataset) == null ? void 0 : S.mjrAssetId) || "").trim(); + const l = String(((h = o.dataset) == null ? void 0 : h.mjrAssetId) || "").trim(); if (!l) return; try { window.__MJR_LAST_SELECTION_GRID__ = t; - } catch (A) { - (Z = console.debug) == null || Z.call(console, A); + } catch (y) { + (S = console.debug) == null || S.call(console, y); } - const a = yd(t), c = a.indexOf(o), s = Qa(t); + const a = yd(t), c = a.indexOf(o), s = _a(t); if (i.shiftKey && c >= 0) { - const A = Number.isFinite(Number(t._mjrLastSelectedIndex)) ? Number(t._mjrLastSelectedIndex) : c, p = Math.min(A, c), b = Math.max(A, c), L = a.slice(p, b + 1).map((h) => { + const y = Number.isFinite(Number(t._mjrLastSelectedIndex)) ? Number(t._mjrLastSelectedIndex) : c, p = Math.min(y, c), b = Math.max(y, c), L = a.slice(p, b + 1).map((C) => { var G; - return String(((G = h == null ? void 0 : h.dataset) == null ? void 0 : G.mjrAssetId) || "").trim(); + return String(((G = C == null ? void 0 : C.dataset) == null ? void 0 : G.mjrAssetId) || "").trim(); }).filter(Boolean); ba(t, L, l), t._mjrLastSelectedIndex = c, i.preventDefault(), i.stopPropagation(); return; } if (i.ctrlKey || i.metaKey) { s.has(l) ? s.delete(l) : s.add(l); - const A = Array.from(s); + const y = Array.from(s); ba( t, - A, - s.has(l) ? l : A[0] || "" + y, + s.has(l) ? l : y[0] || "" ), c >= 0 && (t._mjrLastSelectedIndex = c), i.preventDefault(), i.stopPropagation(); return; } ba(t, [l], l), c >= 0 && (t._mjrLastSelectedIndex = c); try { - (C = o.focus) == null || C.call(o, { preventScroll: !0 }); - } catch (A) { - (g = console.debug) == null || g.call(console, A); + (W = o.focus) == null || W.call(o, { preventScroll: !0 }); + } catch (y) { + (g = console.debug) == null || g.call(console, y); } i.preventDefault(), i.stopPropagation(); }; @@ -44420,20 +44455,20 @@ const qi = { hosts: /* @__PURE__ */ new Set(), pendingAssets: /* @__PURE__ */ new Map() }; -function pV(e) { - if (!fe.EXECUTION_GROUPING_ENABLED) - return Ka(e); +function pY(e) { + if (!he.EXECUTION_GROUPING_ENABLED) + return Da(e); const t = String((e == null ? void 0 : e.stack_id) || "").trim(); if (t) return `stack:${t}`; const n = String((e == null ? void 0 : e.job_id) || "").trim(); - return n ? `job:${n}` : Ka(e); + return n ? `job:${n}` : Da(e); } function fd(e) { const t = /* @__PURE__ */ new Map(); for (const i of Array.isArray(e) ? e : []) { - const o = hd(i); + const o = Cd(i); if (!o) continue; - const r = pV(o); + const r = pY(o); let l = t.get(r); l || (l = { key: r, members: [] }, t.set(r, l)), l.members.push(o); } @@ -44460,16 +44495,16 @@ function Ml(e) { var t, n; return Array.from(((n = (t = e == null ? void 0 : e.assetsByKey) == null ? void 0 : t.values) == null ? void 0 : n.call(t)) || []); } -function xs(e, t) { - const n = hd(t); - return !e || !n ? null : (e.assetsByKey || (e.assetsByKey = /* @__PURE__ */ new Map()), e.assetsByKey.set(Ka(n), n), n); +function js(e, t) { + const n = Cd(t); + return !e || !n ? null : (e.assetsByKey || (e.assetsByKey = /* @__PURE__ */ new Map()), e.assetsByKey.set(Da(n), n), n); } -function Yp(e) { +function Vp(e) { !(e != null && e.grid) || !e.loaded || e._renderTimer || (e._renderTimer = setTimeout(() => { - e._renderTimer = null, hV(e); - }, gV)); + e._renderTimer = null, CY(e); + }, gY)); } -function yV(e, t, n = 0) { +function yY(e, t, n = 0) { var a; const i = Array.isArray(t == null ? void 0 : t._mjrFeedGroupAssets) ? t._mjrFeedGroupAssets.filter(Boolean) : [t].filter(Boolean); if (!i.length) return; @@ -44482,9 +44517,9 @@ function yV(e, t, n = 0) { } ba(e.grid, [l], l); } - tc({ assets: i, index: o }); + nc({ assets: i, index: o }); } -function fV(e, t) { +function fY(e, t) { const n = document.createElement("div"); n.className = "mjr-popover mjr-feed-group-popover", n.style.cssText = "display:none; width:min(440px, 92vw); padding:10px;"; const i = document.createElement("div"); @@ -44493,37 +44528,37 @@ function fV(e, t) { o.className = "mjr-feed-group-popover-grid", o.style.cssText = "display:grid; grid-template-columns:repeat(auto-fill, minmax(110px, 1fr)); gap:8px; max-height:360px; overflow-y:auto; overscroll-behavior:contain;"; const r = Array.isArray(t == null ? void 0 : t._mjrFeedGroupAssets) ? t._mjrFeedGroupAssets : []; for (let l = 0; l < r.length; l += 1) { - const a = r[l], c = IV(a); + const a = r[l], c = IY(a); c.classList.add("mjr-feed-group-member-card"), l === 0 && c.classList.add("mjr-feed-group-member-card--cover"), c.addEventListener("click", (s) => { var d, u; - s.preventDefault(), s.stopPropagation(), (u = (d = e.popoverManager) == null ? void 0 : d.close) == null || u.call(d, n), yV(e, t, l); + s.preventDefault(), s.stopPropagation(), (u = (d = e.popoverManager) == null ? void 0 : d.close) == null || u.call(d, n), yY(e, t, l); }), o.appendChild(c); } return n.appendChild(o), e.root.appendChild(n), n; } -function kp(e, t, n) { +function Xp(e, t, n) { if (!t || !n) return; const i = Number((n == null ? void 0 : n._mjrFeedGroupCount) || 0) || 0; if (i <= 1 || (t.dataset.mjrFeedGrouped = "true", t.dataset.mjrFeedGroupCount = String(i), t.dataset.mjrStacked = "true", t.dataset.mjrStackCount = String(i), t.querySelector(".mjr-feed-group-button"))) return; const o = document.createElement("button"); o.type = "button", o.className = "mjr-feed-group-button", o.title = m("bottomFeed.groupOpen", "Show other assets from this generation"), o.setAttribute("aria-label", `${i} assets`), o.innerHTML = `${i}`, o.style.cssText = "position:absolute; top:34px; right:6px; z-index:11;", pb(o); - const r = fV(e, n); + const r = fY(e, n); o.addEventListener("click", (l) => { var a, c; l.preventDefault(), l.stopPropagation(), (c = (a = e.popoverManager) == null ? void 0 : a.toggle) == null || c.call(a, r, o); }), t.appendChild(o); } -function Xp(e, t) { +function Np(e, t) { var i; const n = new Map( (Array.isArray(t) ? t : []).map((o) => [String((o == null ? void 0 : o.id) || "").trim(), o]).filter(([o]) => !!o) ); for (const o of yd(e == null ? void 0 : e.grid)) { const r = String(((i = o == null ? void 0 : o.dataset) == null ? void 0 : i.mjrAssetId) || "").trim(), l = n.get(r); - l && kp(e, o, l); + l && Xp(e, o, l); } } -async function hV(e) { +async function CY(e) { var o, r, l, a, c, s, d; if (!(e != null && e.grid)) return; try { @@ -44541,27 +44576,27 @@ async function hV(e) { title: m("bottomFeed.title", "Generated Feed"), reset: !0 }); - Xp(e, t), Number((n == null ? void 0 : n.count) || 0) <= 0 ? (e.empty.textContent = m("bottomFeed.empty", "No generated assets yet."), e.empty.style.display = "") : e.empty.style.display = "none"; + Np(e, t), Number((n == null ? void 0 : n.count) || 0) <= 0 ? (e.empty.textContent = m("bottomFeed.empty", "No generated assets yet."), e.empty.style.display = "") : e.empty.style.display = "none"; } -function Ka(e) { +function Da(e) { const t = String((e == null ? void 0 : e.id) || "").trim(); if (t) return `id:${t}`; const n = String((e == null ? void 0 : e.filename) || "").trim(), i = String((e == null ? void 0 : e.subfolder) || "").trim(); return `file:${String((e == null ? void 0 : e.source) || (e == null ? void 0 : e.type) || "").trim()}:${i}:${n}`; } -function CV(e) { +function hY(e) { const t = String(e || "").split(".").pop().toUpperCase(), n = /* @__PURE__ */ new Set(["MP4", "WEBM", "MOV", "AVI", "MKV"]), i = /* @__PURE__ */ new Set(["MP3", "WAV", "OGG", "FLAC", "AAC", "M4A"]), o = /* @__PURE__ */ new Set(["OBJ", "FBX", "GLB", "GLTF", "STL", "PLY", "SPLAT", "KSPLAT", "SPZ"]); return n.has(t) ? "video" : i.has(t) ? "audio" : o.has(t) ? "model3d" : "image"; } -function hd(e) { +function Cd(e) { if (!e || typeof e != "object") return null; const t = { ...e }; - return !t.type && t.source && (t.type = t.source), !t.source && t.type && (t.source = t.type), t.kind || (t.kind = CV(t.ext || t.filename || "")), t; + return !t.type && t.source && (t.type = t.source), !t.source && t.type && (t.source = t.type), t.kind || (t.kind = hY(t.ext || t.filename || "")), t; } -function ZV(e) { - const t = hd(e); +function ZY(e) { + const t = Cd(e); if (!t) return null; - const n = Ka(t); + const n = Da(t); if (!n) return null; if (qi.pendingAssets.set(n, t), qi.pendingAssets.size > 64) { const i = qi.pendingAssets.keys().next().value; @@ -44569,10 +44604,10 @@ function ZV(e) { } return t; } -function AV() { +function AY() { return Array.from(qi.pendingAssets.values()); } -async function Np(e) { +async function kp(e) { var t, n; if (e != null && e.grid) { e.empty.style.display = "none", e.empty.textContent = m("bottomFeed.loading", "Loading recent assets..."); @@ -44580,10 +44615,10 @@ async function Np(e) { e.assetsByKey = /* @__PURE__ */ new Map(); const i = []; let o = 0; - for (; o < Hm; ) { - const s = Ns({ + for (; o < Em; ) { + const s = Rs({ q: "*", - limit: Math.min(qm, Hm - o), + limit: Math.min(qm, Em - o), offset: o, scope: "output", sort: "mtime_desc", @@ -44594,20 +44629,20 @@ async function Np(e) { const u = Array.isArray((t = d == null ? void 0 : d.data) == null ? void 0 : t.assets) ? d.data.assets : []; if (!u.length) break; for (const I of u) { - const y = xs(e, I); - y && i.push(y); + const A = js(e, I); + A && i.push(A); } if (u.length < qm) break; o += u.length; } - for (const s of AV()) - xs(e, s); + for (const s of AY()) + js(e, s); qi.pendingAssets.clear(); const r = Ml(e), l = fd(r), a = await td(e.grid, l, { title: m("bottomFeed.title", "Generated Feed"), reset: !0 }); - Xp(e, l), Number((a == null ? void 0 : a.count) || 0) <= 0 ? (e.empty.textContent = m("bottomFeed.empty", "No generated assets yet."), e.empty.style.display = "") : e.empty.style.display = "none"; + Np(e, l), Number((a == null ? void 0 : a.count) || 0) <= 0 ? (e.empty.textContent = m("bottomFeed.empty", "No generated assets yet."), e.empty.style.display = "") : e.empty.style.display = "none"; } catch (i) { (n = console.debug) == null || n.call(console, i), e.empty.textContent = m("bottomFeed.loadFailed", "Failed to load generated assets."), e.empty.style.display = ""; } finally { @@ -44615,23 +44650,23 @@ async function Np(e) { } } } -async function WV() { +async function WY() { var e; for (const t of Array.from(qi.hosts)) try { - await Np(t); + await kp(t); } catch (n) { (e = console.debug) == null || e.call(console, n); } } -function wV() { - WV(); +function wY() { + WY(); } -function MV(e) { +function MY(e) { const t = document.createElement("div"); t.textContent = m("bottomFeed.loading", "Loading recent assets..."), t.style.cssText = "font-size:11px; opacity:0.65; padding:4px 2px 8px 2px;", e.root.appendChild(t), e.empty = t; } -function SV(e) { +function GY(e) { var n, i, o; if (!e) return; const t = [e, e.parentElement, (n = e.parentElement) == null ? void 0 : n.parentElement]; @@ -44653,9 +44688,9 @@ function Pm(e) { const t = (n, i) => { i ? e.classList.add(n) : e.classList.remove(n); }; - t("mjr-feed-show-info", fe.FEED_SHOW_INFO), t("mjr-feed-show-filename", fe.FEED_SHOW_FILENAME), t("mjr-feed-show-dimensions", fe.FEED_SHOW_DIMENSIONS), t("mjr-feed-show-date", fe.FEED_SHOW_DATE), t("mjr-feed-show-gentime", fe.FEED_SHOW_GENTIME), t("mjr-show-hover-info", fe.GRID_SHOW_HOVER_INFO), t("mjr-feed-show-dot", fe.FEED_SHOW_WORKFLOW_DOT), t("mjr-feed-show-badges-ext", fe.FEED_SHOW_BADGES_EXTENSION), t("mjr-feed-show-badges-rating", fe.FEED_SHOW_BADGES_RATING), t("mjr-feed-show-badges-tags", fe.FEED_SHOW_BADGES_TAGS); + t("mjr-feed-show-info", he.FEED_SHOW_INFO), t("mjr-feed-show-filename", he.FEED_SHOW_FILENAME), t("mjr-feed-show-dimensions", he.FEED_SHOW_DIMENSIONS), t("mjr-feed-show-date", he.FEED_SHOW_DATE), t("mjr-feed-show-gentime", he.FEED_SHOW_GENTIME), t("mjr-show-hover-info", he.GRID_SHOW_HOVER_INFO), t("mjr-feed-show-dot", he.FEED_SHOW_WORKFLOW_DOT), t("mjr-feed-show-badges-ext", he.FEED_SHOW_BADGES_EXTENSION), t("mjr-feed-show-badges-rating", he.FEED_SHOW_BADGES_RATING), t("mjr-feed-show-badges-tags", he.FEED_SHOW_BADGES_TAGS); } -function GV(e, t = null) { +function SY(e, t = null) { var d; const n = t ?? document.createElement("div"); n.classList.add("mjr-am-grid-scroll"), n.style.position = "relative", n.style.flex = "1 1 auto", n.style.minHeight = "0", n.style.height = "100%", n.style.overflow = "auto", n.style.scrollbarGutter = "stable", n.style.overscrollBehavior = "contain", n.style.webkitOverflowScrolling = "touch"; @@ -44670,24 +44705,24 @@ function GV(e, t = null) { var u; i(); try { - window.dispatchEvent(new Event(ht.MFV_OPEN)); + window.dispatchEvent(new Event(ft.MFV_OPEN)); } catch (I) { (u = console.debug) == null || u.call(console, I); } }, r = document.createElement("div"); n.appendChild(r), e.root.appendChild(n); - const { app: l } = yb(Vp, { + const { app: l } = yb(Yp, { scrollElement: n, virtualize: !1, applyDefaultSettingsClasses: !1, // MFV listens on window selection events; feed selection changes must be forwarded too. emitWindowSelectionEvents: !0, onCardRendered: (u, I) => { - var y; + var A; try { - kp(e, u, I); - } catch (S) { - (y = console.debug) == null || y.call(console, S); + Xp(e, u, I); + } catch (h) { + (A = console.debug) == null || A.call(console, h); } }, onCardDblclick: () => { @@ -44696,17 +44731,17 @@ function GV(e, t = null) { }), a = l.mount(r), c = (a == null ? void 0 : a.gridContainer) || ((d = r.querySelector) == null ? void 0 : d.call(r, ".mjr-grid")) || null; if (e.gridApp = l, e.gridVm = a, e.grid = c, !c) return; c.style.minHeight = "100%", c.style.height = "auto", c.dataset.mjrScope = "output", c.dataset.mjrQuery = "*", c.dataset.mjrSort = "mtime_desc", c.dataset.mjrBottomFeed = "true"; - const s = Number(fe.FEED_GRID_MIN_SIZE || fe.GRID_MIN_SIZE || 120); + const s = Number(he.FEED_GRID_MIN_SIZE || he.GRID_MIN_SIZE || 120); c.dataset.mjrFeedMinItemWidth = String(s), c.style.setProperty("--mjr-grid-min-size", `${s}px`), c.addEventListener("keydown", (u) => { - var y, S, Z, C, g, A, p; - const I = ((S = (y = u == null ? void 0 : u.key) == null ? void 0 : y.toLowerCase) == null ? void 0 : S.call(y)) || ""; + var A, h, S, W, g, y, p; + const I = ((h = (A = u == null ? void 0 : u.key) == null ? void 0 : A.toLowerCase) == null ? void 0 : h.call(A)) || ""; if (!(u != null && u.ctrlKey || u != null && u.metaKey || u != null && u.altKey)) { if (I === "v") { - (Z = u.preventDefault) == null || Z.call(u), (C = u.stopPropagation) == null || C.call(u), o(); + (S = u.preventDefault) == null || S.call(u), (W = u.stopPropagation) == null || W.call(u), o(); return; } if (I === "c") { - (g = u.preventDefault) == null || g.call(u), (A = u.stopPropagation) == null || A.call(u), i(); + (g = u.preventDefault) == null || g.call(u), (y = u.stopPropagation) == null || y.call(u), i(); try { zn.open().then(() => zn.toggleCompareAB()); } catch (b) { @@ -44718,30 +44753,30 @@ function GV(e, t = null) { var u, I; try { c.removeEventListener("pointerdown", i, !0); - } catch (y) { - (u = console.debug) == null || u.call(console, y); + } catch (A) { + (u = console.debug) == null || u.call(console, A); } try { c.removeEventListener("focusin", i, !0); - } catch (y) { - (I = console.debug) == null || I.call(console, y); + } catch (A) { + (I = console.debug) == null || I.call(console, A); } }; } function Rp(e) { const t = e == null ? void 0 : e.grid; if (!t) return []; - const n = Qa(t); + const n = _a(t); return n.size ? Ml(e).filter((o) => n.has(String((o == null ? void 0 : o.id) || ""))) : []; } -function xV(e) { +function xY(e) { var i; const t = e == null ? void 0 : e.grid; if (!t) return null; const n = String(((i = t.dataset) == null ? void 0 : i.mjrSelectedAssetId) || "").trim(); return n ? Ml(e).find((o) => String((o == null ? void 0 : o.id) || "") === n) || null : Rp(e)[0] || null; } -function jV(e) { +function jY(e) { var n; const t = String(e ?? ""); try { @@ -44752,13 +44787,13 @@ function jV(e) { } return t.replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1"); } -function vV(e) { +function vY(e) { const t = e == null ? void 0 : e.grid; if (!t) return; const n = () => { var i; try { - Yp(e); + Vp(e); } catch (o) { (i = console.debug) == null || i.call(console, o); } @@ -44767,12 +44802,12 @@ function vV(e) { gridContainer: t, getState: () => ({ assets: fd(Ml(e)) }), getSelectedAssets: () => Rp(e), - getActiveAsset: () => xV(e), + getActiveAsset: () => xY(e), onOpenTagsEditor: (i) => { var c, s, d; const o = ((c = t.querySelector) == null ? void 0 : c.call( t, - `.mjr-asset-card[data-mjr-asset-id="${jV((i == null ? void 0 : i.id) || "")}"]` + `.mjr-asset-card[data-mjr-asset-id="${jY((i == null ? void 0 : i.id) || "")}"]` )) || null; let r = null; try { @@ -44786,15 +44821,15 @@ function vV(e) { onAssetChanged: n }), e.keyboard.bind(), e.ratingHotkeys = bb({ gridContainer: t, - createRatingBadge: Ya + createRatingBadge: Xa }), e.ratingHotkeys.bind(); } -const js = 60, Fp = 600, sl = 10; -function Rc(e, t) { +const vs = 60, Op = 600, sl = 10; +function Oc(e, t) { var i, o, r, l; const n = Math.max( - js, - Math.min(Fp, Math.round(Number(t) / sl) * sl) + vs, + Math.min(Op, Math.round(Number(t) / sl) * sl) ); if (e != null && e.grid) try { @@ -44802,10 +44837,10 @@ function Rc(e, t) { } catch (a) { (i = console.debug) == null || i.call(console, a); } - fe.FEED_GRID_MIN_SIZE = n; + he.FEED_GRID_MIN_SIZE = n; try { - const a = Xn(); - a.feed.minSize = n, Be(a), At(a); + const a = kn(); + a.feed.minSize = n, Ue(a), Zt(a); } catch (a) { (o = console.debug) == null || o.call(console, a); } @@ -44823,10 +44858,10 @@ function Rc(e, t) { } return n; } -function LV(e) { +function LY(e) { const t = Math.max( - js, - Number(fe.FEED_GRID_MIN_SIZE || 120) || 120 + vs, + Number(he.FEED_GRID_MIN_SIZE || 120) || 120 ), n = document.createElement("div"); n.className = "mjr-feed-toolbar", n.style.cssText = "display:flex; align-items:center; gap:5px; padding:0 2px 5px 2px; flex-shrink:0; user-select:none;"; const i = document.createElement("span"); @@ -44834,19 +44869,19 @@ function LV(e) { const o = document.createElement("button"); o.type = "button", o.className = "mjr-feed-size-btn", o.textContent = "−", o.title = m("bottomFeed.cardSizeDecrease", "Decrease card size"), o.style.cssText = "width:20px; height:20px; padding:0; border:1px solid var(--mjr-border,#555); border-radius:4px; background:var(--mjr-surface,#2a2a2a); color:inherit; cursor:pointer; font-size:14px; line-height:1; flex-shrink:0; display:flex; align-items:center; justify-content:center;", n.appendChild(o); const r = document.createElement("input"); - r.type = "range", r.className = "mjr-feed-size-slider", r.min = String(js), r.max = String(Fp), r.step = String(sl), r.value = String(t), r.title = m("bottomFeed.cardSizeSlider", "Card size"), r.style.cssText = "flex:1 1 auto; min-width:40px; max-width:180px; height:4px; cursor:pointer; accent-color:var(--mjr-accent,#64b5f6);", n.appendChild(r); + r.type = "range", r.className = "mjr-feed-size-slider", r.min = String(vs), r.max = String(Op), r.step = String(sl), r.value = String(t), r.title = m("bottomFeed.cardSizeSlider", "Card size"), r.style.cssText = "flex:1 1 auto; min-width:40px; max-width:180px; height:4px; cursor:pointer; accent-color:var(--mjr-accent,#64b5f6);", n.appendChild(r); const l = document.createElement("button"); l.type = "button", l.className = "mjr-feed-size-btn", l.textContent = "+", l.title = m("bottomFeed.cardSizeIncrease", "Increase card size"), l.style.cssText = o.style.cssText, n.appendChild(l); const a = document.createElement("span"); a.className = "mjr-feed-size-display", a.textContent = `${t}px`, a.style.cssText = "font-size:11px; opacity:0.65; white-space:nowrap; min-width:36px; text-align:right; flex-shrink:0; font-variant-numeric:tabular-nums;", n.appendChild(a), o.addEventListener("click", () => { - Rc(e, Number(r.value) - sl); + Oc(e, Number(r.value) - sl); }), l.addEventListener("click", () => { - Rc(e, Number(r.value) + sl); + Oc(e, Number(r.value) + sl); }), r.addEventListener("input", () => { - Rc(e, Number(r.value)); + Oc(e, Number(r.value)); }), e.root.appendChild(n), e._sizeToolbar = n; } -function VV(e, t = {}) { +function YY(e, t = {}) { const n = document.createElement("div"); n.className = "mjr-assets-manager mjr-bottom-feed", n.style.cssText = "padding:6px; height:100%; min-height:0; box-sizing:border-box; display:flex; flex-direction:column; overflow:hidden;", e.replaceChildren(n); const i = { @@ -44858,10 +44893,10 @@ function VV(e, t = {}) { assetsByKey: /* @__PURE__ */ new Map(), popoverManager: null }; - LV(i), MV(i), GV(i, t.gridWrapper ?? null), bV(i), i.popoverManager = lb(n), i._disposeContextMenu = sd({ + LY(i), MY(i), SY(i, t.gridWrapper ?? null), bY(i), i.popoverManager = lb(n), i._disposeContextMenu = sd({ gridContainer: i.grid, getState: () => ({ scope: "output" }) - }), vV(i), Pm(i.grid); + }), vY(i), Pm(i.grid); const o = () => { var r; try { @@ -44879,31 +44914,31 @@ function VV(e, t = {}) { } }, i; } -function YV(e) { +function VY(e) { var n; - const t = ZV(e); + const t = ZY(e); if (t) for (const i of Array.from(qi.hosts)) try { - if (!(i != null && i.grid) || (xs(i, t), !i.loaded)) continue; - i.empty.style.display = "none", Yp(i); + if (!(i != null && i.grid) || (js(i, t), !i.loaded)) continue; + i.empty.style.display = "none", Vp(i); } catch (o) { (n = console.debug) == null || n.call(console, o); } } -function kV(e, t = {}) { +function XY(e, t = {}) { var i; - SV(e); - const n = VV(e, t); + GY(e); + const n = YY(e, t); try { e._mjrGeneratedFeedHost = n; } catch (o) { (i = console.debug) == null || i.call(console, o); } - return qi.hosts.add(n), Np(n), n; + return qi.hosts.add(n), kp(n), n; } -function XV(e) { - var i, o, r, l, a, c, s, d, u, I, y, S, Z, C, g, A, p, b, L, h, G, W, f, X, x, T, v; +function NY(e) { + var i, o, r, l, a, c, s, d, u, I, A, h, S, W, g, y, p, b, L, C, G, Z, f, X, x, K, j; const t = (e == null ? void 0 : e._mjrGeneratedFeedHost) || e || null; if (!t) return; const n = t.container || null; @@ -44940,14 +44975,14 @@ function XV(e) { (I = console.debug) == null || I.call(console, w); } try { - (S = (y = t.keyboard) == null ? void 0 : y.dispose) == null || S.call(y); + (h = (A = t.keyboard) == null ? void 0 : A.dispose) == null || h.call(A); } catch (w) { - (Z = console.debug) == null || Z.call(console, w); + (S = console.debug) == null || S.call(console, w); } try { - (g = (C = t.ratingHotkeys) == null ? void 0 : C.dispose) == null || g.call(C); + (g = (W = t.ratingHotkeys) == null ? void 0 : W.dispose) == null || g.call(W); } catch (w) { - (A = console.debug) == null || A.call(console, w); + (y = console.debug) == null || y.call(console, w); } try { (b = (p = t.popoverManager) == null ? void 0 : p.dispose) == null || b.call(p); @@ -44955,9 +44990,9 @@ function XV(e) { (L = console.debug) == null || L.call(console, w); } try { - (G = (h = t.gridApp) == null ? void 0 : h.unmount) == null || G.call(h); + (G = (C = t.gridApp) == null ? void 0 : C.unmount) == null || G.call(C); } catch (w) { - (W = console.debug) == null || W.call(console, w); + (Z = console.debug) == null || Z.call(console, w); } try { t._renderTimer && (clearTimeout(t._renderTimer), t._renderTimer = null); @@ -44965,24 +45000,24 @@ function XV(e) { (f = console.debug) == null || f.call(console, w); } try { - GI(t.grid); + SI(t.grid); } catch (w) { (X = console.debug) == null || X.call(console, w); } try { - (T = (x = t.container) == null ? void 0 : x.replaceChildren) == null || T.call(x); + (K = (x = t.container) == null ? void 0 : x.replaceChildren) == null || K.call(x); } catch (w) { - (v = console.debug) == null || v.call(console, w); + (j = console.debug) == null || j.call(console, w); } } function Fc(e) { return String(e || "").trim(); } -function NV(e) { +function kY(e) { const t = String((e == null ? void 0 : e.filename) || "").trim(), n = String((e == null ? void 0 : e.subfolder) || "").trim(), i = String((e == null ? void 0 : e.type) || "output").trim().toLowerCase(), o = String((e == null ? void 0 : e.root_id) || (e == null ? void 0 : e.custom_root_id) || "").trim(); return `${i}|${o}|${n}|${t}`; } -function RV() { +function RY() { const e = /* @__PURE__ */ new Map(); function t(o, r) { const l = Fc(o); @@ -44992,7 +45027,7 @@ function RV() { let c = e.get(l); c || (c = /* @__PURE__ */ new Map(), e.set(l, c)); for (const s of a) { - const d = NV(s); + const d = kY(s); d && c.set(d, { ...c.get(d) || {}, ...s || {} }); } return Array.from(c.values()); @@ -45015,7 +45050,7 @@ function RV() { _jobs: e }; } -function FV({ defaultDelayMs: e = 900, postJob: t } = {}) { +function OY({ defaultDelayMs: e = 900, postJob: t } = {}) { const n = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Set(); let o = !1; async function r() { @@ -45053,20 +45088,20 @@ function FV({ defaultDelayMs: e = 900, postJob: t } = {}) { _timers: n }; } -function Oc(e) { +function zc(e) { return String(e || "").trim(); } function Qm(e) { const t = String((e == null ? void 0 : e.filename) || "").trim(), n = String((e == null ? void 0 : e.filepath) || "").trim(), i = String((e == null ? void 0 : e.subfolder) || "").trim(), o = String((e == null ? void 0 : e.type) || (e == null ? void 0 : e.source) || "output").trim().toLowerCase(), r = String((e == null ? void 0 : e.root_id) || (e == null ? void 0 : e.custom_root_id) || "").trim(); return `${o}|${r}|${i}|${t || n}`; } -function OV(e, t) { +function FY(e, t) { return !t || String((e == null ? void 0 : e.job_id) || "").trim() === t ? e : { ...e || {}, job_id: t }; } -function zV() { +function zY() { const e = /* @__PURE__ */ new Map(); function t(r, { files: l = [], expectedCount: a = null } = {}) { - const c = Oc(r); + const c = zc(r); if (!c) return; const s = /* @__PURE__ */ new Set(); for (const d of Array.isArray(l) ? l : []) { @@ -45080,24 +45115,24 @@ function zV() { }); } function n(r) { - const l = Oc(r); + const l = zc(r); l && e.delete(l); } function i(r) { var d, u; - const l = Oc(r == null ? void 0 : r.job_id); + const l = zc(r == null ? void 0 : r.job_id); if (l) return l; const a = Qm(r); if (!a) return ""; let c = "", s = 1 / 0; - for (const [I, y] of e.entries()) - (u = (d = y == null ? void 0 : y.fileKeys) == null ? void 0 : d.has) != null && u.call(d, a) && (y.markedAt ?? 1 / 0) < s && (s = y.markedAt ?? 1 / 0, c = I); + for (const [I, A] of e.entries()) + (u = (d = A == null ? void 0 : A.fileKeys) == null ? void 0 : d.has) != null && u.call(d, a) && (A.markedAt ?? 1 / 0) < s && (s = A.markedAt ?? 1 / 0, c = I); return c; } function o(r) { const l = i(r); if (!l) return { detail: r, jobId: "", defer: !1 }; - const a = OV(r, l), c = e.get(l); + const a = FY(r, l), c = e.get(l); if (!c) return { detail: a, jobId: l, defer: !1 }; const s = String((a == null ? void 0 : a.stack_id) || "").trim(), u = Math.max(0, Number((c == null ? void 0 : c.expectedCount) || 0) || 0) > 1; return { @@ -45114,13 +45149,13 @@ function zV() { _pendingJobs: e }; } -const JV = 2e3, TV = 2e3, BV = /* @__PURE__ */ new Set([ +const JY = 2e3, TY = 2e3, KY = /* @__PURE__ */ new Set([ "DB_MAINTENANCE", "TIMEOUT", "NETWORK_ERROR", "SERVICE_UNAVAILABLE" -]), UV = 8, KV = 1200, DV = 15e3, EV = 600 * 1e3, HV = 500, qV = 6, PV = 3e4, QV = 500; -function _V({ +]), BY = 8, UY = 1200, DY = 15e3, HY = 600 * 1e3, EY = 500, qY = 6, PY = 3e4, QY = 500; +function _Y({ post: e, ENDPOINTS: t, reportError: n, @@ -45130,33 +45165,33 @@ function _V({ refreshGeneratedFeedHosts: l, getActiveGridContainer: a }) { - const c = Wr({ ttlMs: JV, maxSize: TV }), s = Wr({ - ttlMs: EV, - maxSize: HV + const c = Wr({ ttlMs: JY, maxSize: TY }), s = Wr({ + ttlMs: HY, + maxSize: EY }), d = Math.max( 0, - Number(fe.EXECUTION_IDLE_GRACE_MS) || 6e3 - ), u = /* @__PURE__ */ new Map(), I = RV(), y = zV(); - let S = "", Z = 0, C = null; + Number(he.EXECUTION_IDLE_GRACE_MS) || 6e3 + ), u = /* @__PURE__ */ new Map(), I = RY(), A = zY(); + let h = "", S = 0, W = null; function g() { - var M, j; + var M, v; try { return typeof window > "u" ? !1 : window.__MJR_DEBUG_JOB_TRACKING__ === !0 ? !0 : String(((M = window.localStorage) == null ? void 0 : M.getItem("mjr.debug.jobTracking")) || "").trim() === "1"; - } catch (O) { - return (j = console.debug) == null || j.call(console, O), !1; + } catch (F) { + return (v = console.debug) == null || v.call(console, F), !1; } } - function A(M, j = {}) { - var O; + function y(M, v = {}) { + var F; if (g()) try { - console.debug("[Majoor][job-tracking]", M, j); + console.debug("[Majoor][job-tracking]", M, v); } catch (D) { - (O = console.debug) == null || O.call(console, D); + (F = console.debug) == null || F.call(console, D); } } function p() { - return !!fe.EXECUTION_GROUPING_ENABLED; + return !!he.EXECUTION_GROUPING_ENABLED; } function b() { const M = p(); @@ -45168,8 +45203,8 @@ function _V({ }; } function L(M = {}) { - var j, O, D, q; - A("stacks-updated", { + var v, F, D, q; + y("stacks-updated", { targeted_job_id: String((M == null ? void 0 : M.targeted_job_id) || ""), stacks: Array.isArray(M == null ? void 0 : M.stacks) ? M.stacks.map((ee) => ({ job_id: String((ee == null ? void 0 : ee.job_id) || ""), @@ -45179,29 +45214,29 @@ function _V({ }); try { const ee = String((M == null ? void 0 : M.targeted_job_id) || "").trim(); - ee && y.clearPendingJob(ee); - const ce = Array.isArray(M == null ? void 0 : M.stacks) ? M.stacks : []; - for (const ue of ce) { - const U = String((ue == null ? void 0 : ue.job_id) || "").trim(); - U && y.clearPendingJob(U); + ee && A.clearPendingJob(ee); + const ae = Array.isArray(M == null ? void 0 : M.stacks) ? M.stacks : []; + for (const ue of ae) { + const B = String((ue == null ? void 0 : ue.job_id) || "").trim(); + B && A.clearPendingJob(B); } } catch (ee) { - (j = console.debug) == null || j.call(console, ee); + (v = console.debug) == null || v.call(console, ee); } try { - const ee = Array.isArray(M == null ? void 0 : M.stacks) ? M.stacks : [], ce = JSON.stringify({ + const ee = Array.isArray(M == null ? void 0 : M.stacks) ? M.stacks : [], ae = JSON.stringify({ targeted_job_id: String((M == null ? void 0 : M.targeted_job_id) || ""), - stacks: ee.map((U) => ({ - job_id: String((U == null ? void 0 : U.job_id) || ""), - stack_id: String((U == null ? void 0 : U.stack_id) || ""), - asset_count: Number((U == null ? void 0 : U.asset_count) || 0) || 0 + stacks: ee.map((B) => ({ + job_id: String((B == null ? void 0 : B.job_id) || ""), + stack_id: String((B == null ? void 0 : B.stack_id) || ""), + asset_count: Number((B == null ? void 0 : B.asset_count) || 0) || 0 })) }), ue = Date.now(); - if (ce && ce === S && ue - Z < 1500) + if (ae && ae === h && ue - S < 1500) return; - S = ce, Z = ue; + h = ae, S = ue; } catch (ee) { - (O = console.debug) == null || O.call(console, ee); + (F = console.debug) == null || F.call(console, ee); } try { window.dispatchEvent( @@ -45216,278 +45251,278 @@ function _V({ (q = console.debug) == null || q.call(console, ee); } } - const h = FV({ + const C = OY({ defaultDelayMs: 900, async postJob(M) { - var j; - A("auto-stack:start", { job_id: M }); + var v; + y("auto-stack:start", { job_id: M }); try { - const O = await e(t.STACKS_AUTO_STACK, { + const F = await e(t.STACKS_AUTO_STACK, { mode: "job_id", job_id: M }); - if (!(O != null && O.ok)) { - y.clearPendingJob(M), n( - new Error(String((O == null ? void 0 : O.error) || "Auto stack failed")), + if (!(F != null && F.ok)) { + A.clearPendingJob(M), n( + new Error(String((F == null ? void 0 : F.error) || "Auto stack failed")), "executionRuntime.execution_end.auto_stack" ); return; } - A("auto-stack:done", { + y("auto-stack:done", { job_id: M, - stacks: Array.isArray((j = O == null ? void 0 : O.data) == null ? void 0 : j.stacks) ? O.data.stacks.length : 0 - }), L((O == null ? void 0 : O.data) || { targeted_job_id: M }); - } catch (O) { - n(O, "executionRuntime.execution_end.auto_stack"); + stacks: Array.isArray((v = F == null ? void 0 : F.data) == null ? void 0 : v.stacks) ? F.data.stacks.length : 0 + }), L((F == null ? void 0 : F.data) || { targeted_job_id: M }); + } catch (F) { + n(F, "executionRuntime.execution_end.auto_stack"); } } }); - function G(M, j) { + function G(M, v) { if (!M) return; - const O = Number(j) || Date.now(); - s.set(String(M), O, { at: O }), s.prune(); + const F = Number(v) || Date.now(); + s.set(String(M), F, { at: F }), s.prune(); } - function W(M) { + function Z(M) { c.prune(); - const j = []; - for (const O of M) { - const D = `${O.type || ""}|${O.subfolder || ""}|${O.filename || ""}`.toLowerCase(); - c.has(D) || (c.set(D, !0), j.push(O)); + const v = []; + for (const F of M) { + const D = `${F.type || ""}|${F.subfolder || ""}|${F.filename || ""}`.toLowerCase(); + c.has(D) || (c.set(D, !0), v.push(F)); } - return j; + return v; } function f(M) { - const j = Math.max(1, Number(M) || 1), O = Math.min(6, j - 1); - return Math.min(DV, KV * 2 ** O); + const v = Math.max(1, Number(M) || 1), F = Math.min(6, v - 1); + return Math.min(DY, UY * 2 ** F); } function X() { - C && (clearTimeout(C), C = null); + W && (clearTimeout(W), W = null); } - function x(M, j = d) { - const O = Math.max(0, Number(j) || 0); - X(), C = setTimeout(() => { - C = null; + function x(M, v = d) { + const F = Math.max(0, Number(v) || 0); + X(), W = setTimeout(() => { + W = null; try { M == null || M(); } catch (D) { n(D, "executionRuntime.post_execution"); } - }, O); + }, F); } - function T(M) { - const j = String((M == null ? void 0 : M.code) || "").trim().toUpperCase(); - return BV.has(j); + function K(M) { + const v = String((M == null ? void 0 : M.code) || "").trim().toUpperCase(); + return KY.has(v); } - function v(M, j = 1, O = {}) { + function j(M, v = 1, F = {}) { const D = Array.isArray(M) ? M : []; if (!D.length) return; const q = { files: D, origin: "generation" }; - (O != null && O.prompt_id || O != null && O.promptId) && (q.prompt_id = String(O.prompt_id || O.promptId)), A("index:direct", { + (F != null && F.prompt_id || F != null && F.promptId) && (q.prompt_id = String(F.prompt_id || F.promptId)), y("index:direct", { prompt_id: String(q.prompt_id || ""), - attempt: j, + attempt: v, files: D.map((ee) => String((ee == null ? void 0 : ee.filename) || (ee == null ? void 0 : ee.filepath) || "")) }), e(t.INDEX_FILES, q).then((ee) => { - var ce; + var ae; if (!(ee != null && ee.ok)) { - if (T(ee) && j < UV) { - const ue = f(j); + if (K(ee) && v < BY) { + const ue = f(v); setTimeout( - () => v(D, j + 1, O), + () => j(D, v + 1, F), ue ); return; } try { - const ue = String((ee == null ? void 0 : ee.code) || "INDEX_FAILED"), U = String((ee == null ? void 0 : ee.error) || "Indexing generated files failed"); - n(new Error(`${ue}: ${U}`), "executionRuntime.executed.index"); + const ue = String((ee == null ? void 0 : ee.code) || "INDEX_FAILED"), B = String((ee == null ? void 0 : ee.error) || "Indexing generated files failed"); + n(new Error(`${ue}: ${B}`), "executionRuntime.executed.index"); } catch (ue) { - (ce = console.debug) == null || ce.call(console, ue); + (ae = console.debug) == null || ae.call(console, ue); } } }).catch((ee) => n(ee, "executionRuntime.executed.index")); } function w(M = {}) { - var O, D; - const j = String((M == null ? void 0 : M.prompt_id) || (M == null ? void 0 : M.promptId) || "").trim(); - if (j) return j; + var F, D; + const v = String((M == null ? void 0 : M.prompt_id) || (M == null ? void 0 : M.promptId) || "").trim(); + if (v) return v; try { - return String(((O = o()) == null ? void 0 : O.active_prompt_id) || "").trim(); + return String(((F = o()) == null ? void 0 : F.active_prompt_id) || "").trim(); } catch (q) { return (D = console.debug) == null || D.call(console, q), ""; } } function R(M) { - return !Array.isArray(M) || !M.length ? "" : M.map((j) => String((j == null ? void 0 : j.filepath) || (j == null ? void 0 : j.filename) || "")).filter(Boolean).sort().join("|"); + return !Array.isArray(M) || !M.length ? "" : M.map((v) => String((v == null ? void 0 : v.filepath) || (v == null ? void 0 : v.filename) || "")).filter(Boolean).sort().join("|"); } - function Y(M, j = {}, O = 1) { + function V(M, v = {}, F = 1) { const D = Array.isArray(M) ? M : []; if (!D.length) return; const q = R(D); if (!q) { - v(D, 1, j); + j(D, 1, v); return; } const ee = u.get(q); ee != null && ee.timer && clearTimeout(ee.timer); - const ce = (ee == null ? void 0 : ee.firstAttemptAt) ?? Date.now(); - if (Date.now() - ce >= PV) { - v(D, 1, j); + const ae = (ee == null ? void 0 : ee.firstAttemptAt) ?? Date.now(); + if (Date.now() - ae >= PY) { + j(D, 1, v); return; } - const ue = Math.max(1, Number(O) || 1), U = Math.min(2e3, 250 * ue), Q = setTimeout(() => { - u.delete(q), V(D, j, ue + 1); - }, U); + const ue = Math.max(1, Number(F) || 1), B = Math.min(2e3, 250 * ue), Q = setTimeout(() => { + u.delete(q), Y(D, v, ue + 1); + }, B); u.set(q, { files: D, - meta: j, + meta: v, attempt: ue, timer: Q, - firstAttemptAt: ce + firstAttemptAt: ae }); } - function F(M) { - var O; - const j = String(M || "").trim(); - if (!(!j || u.size <= 0)) + function O(M) { + var F; + const v = String(M || "").trim(); + if (!(!v || u.size <= 0)) for (const [D, q] of Array.from(u.entries())) { try { q != null && q.timer && clearTimeout(q.timer); } catch (ee) { - (O = console.debug) == null || O.call(console, ee); + (F = console.debug) == null || F.call(console, ee); } - u.delete(D), I.add(j, (q == null ? void 0 : q.files) || []); + u.delete(D), I.add(v, (q == null ? void 0 : q.files) || []); } } - function N() { + function k() { var M; - for (const [j, O] of Array.from(u.entries())) { + for (const [v, F] of Array.from(u.entries())) { try { - O != null && O.timer && clearTimeout(O.timer); + F != null && F.timer && clearTimeout(F.timer); } catch (D) { (M = console.debug) == null || M.call(console, D); } - u.delete(j); + u.delete(v); } } - function V(M, j = {}, O = 1) { - const D = w(j); - if (A("buffer:add", { + function Y(M, v = {}, F = 1) { + const D = w(v); + if (y("buffer:add", { prompt_id: D, - explicit_prompt_id: String((j == null ? void 0 : j.prompt_id) || (j == null ? void 0 : j.promptId) || ""), - attempt: O, + explicit_prompt_id: String((v == null ? void 0 : v.prompt_id) || (v == null ? void 0 : v.promptId) || ""), + attempt: F, file_count: Array.isArray(M) ? M.length : 0, files: Array.isArray(M) ? M.map((q) => String((q == null ? void 0 : q.filename) || (q == null ? void 0 : q.filepath) || "")) : [] }), !D) { - if (O < qV) { - Y(M, j, O); + if (F < qY) { + V(M, v, F); return; } - v(M, 1, j); + j(M, 1, v); return; } I.add(D, M); } - function k(M, j = 900) { - p() && (A("finalize:schedule", { job_id: String(M || ""), delay_ms: j }), h.schedule(M, j)); + function N(M, v = 900) { + p() && (y("finalize:schedule", { job_id: String(M || ""), delay_ms: v }), C.schedule(M, v)); } - function K(M = 1200) { + function U(M = 1200) { x(() => { e(t.SCAN, { recursive: !0, incremental: !0, fast: !0, background_metadata: !0 - }).catch((j) => n(j, "executionRuntime.execution_end.scan")); + }).catch((v) => n(v, "executionRuntime.execution_end.scan")); }, M); } function z(M) { - const j = b(), O = String(M || "").trim(); - if (!O) return; - const D = I.take(O); - if (A("buffer:flush", { - prompt_id: O, + const v = b(), F = String(M || "").trim(); + if (!F) return; + const D = I.take(F); + if (y("buffer:flush", { + prompt_id: F, file_count: D.length, files: D.map((q) => String((q == null ? void 0 : q.filename) || (q == null ? void 0 : q.filepath) || "")) - }), j.allowLiveStackFinalize && y.markPendingJob(O, { files: D, expectedCount: D.length }), !D.length) { - j.allowLiveStackFinalize && k(O); + }), v.allowLiveStackFinalize && A.markPendingJob(F, { files: D, expectedCount: D.length }), !D.length) { + v.allowLiveStackFinalize && N(F); return; } e(t.INDEX_FILES, { files: D, origin: "generation", - prompt_id: O + prompt_id: F }).then((q) => { if (!(q != null && q.ok)) { - j.allowLiveStackFinalize && y.clearPendingJob(O), n( + v.allowLiveStackFinalize && A.clearPendingJob(F), n( new Error(String((q == null ? void 0 : q.error) || "Indexing generated files failed")), "executionRuntime.executed.index" ); return; } - A("index:flush:done", { - prompt_id: O, + y("index:flush:done", { + prompt_id: F, file_count: D.length - }), j.allowLiveStackFinalize && k(O, 1800); + }), v.allowLiveStackFinalize && N(F, 1800); }).catch((q) => { - j.allowLiveStackFinalize && y.clearPendingJob(O), n(q, "executionRuntime.executed.index"); + v.allowLiveStackFinalize && A.clearPendingJob(F), n(q, "executionRuntime.executed.index"); }); } - function B(M) { - var O, D, q; - const j = String(M || "").trim(); - if (!j) return !1; + function T(M) { + var F, D, q; + const v = String(M || "").trim(); + if (!v) return !1; try { - const ee = (D = (O = I == null ? void 0 : I._jobs) == null ? void 0 : O.get) == null ? void 0 : D.call(O, j); + const ee = (D = (F = I == null ? void 0 : I._jobs) == null ? void 0 : F.get) == null ? void 0 : D.call(F, v); return !!ee && typeof ee.size == "number" && ee.size > 0; } catch (ee) { return (q = console.debug) == null || q.call(console, ee), !1; } } function J(M) { - var j; + var v; if (!p()) return { detail: M, jobId: "", defer: !1 }; try { - return y.prepare(M); - } catch (O) { - return (j = console.debug) == null || j.call(console, O), { detail: M, jobId: "", defer: !1 }; + return A.prepare(M); + } catch (F) { + return (v = console.debug) == null || v.call(console, F), { detail: M, jobId: "", defer: !1 }; } } function P(M) { - const j = String((M == null ? void 0 : M.kind) || "").trim(), O = String((M == null ? void 0 : M.filename) || "").trim(), D = String((M == null ? void 0 : M.filepath) || "").trim(); - return !!j && (!!O || !!D); + const v = String((M == null ? void 0 : M.kind) || "").trim(), F = String((M == null ? void 0 : M.filename) || "").trim(), D = String((M == null ? void 0 : M.filepath) || "").trim(); + return !!v && (!!F || !!D); } - function H(M, { appRef: j }) { - var de, se, ge, je, Se, ke, we; + function E(M, { appRef: v }) { + var ce, de, ge, Le, xe, Xe, Me; if (!b().useExecutionBuffer) return; - const D = W(i((de = M == null ? void 0 : M.detail) == null ? void 0 : de.output)); + const D = Z(i((ce = M == null ? void 0 : M.detail) == null ? void 0 : ce.output)); if (!D.length) return; - const q = ((se = M == null ? void 0 : M.detail) == null ? void 0 : se.prompt_id) || ((ge = M == null ? void 0 : M.detail) == null ? void 0 : ge.promptId), ee = String(((je = M == null ? void 0 : M.detail) == null ? void 0 : je.node) || ((Se = M == null ? void 0 : M.detail) == null ? void 0 : Se.display_node) || "").trim(), ce = q ? s.get(String(q)) : null, ue = ce ? Math.max(0, Date.now() - ce) : 0; - let U = ""; + const q = ((de = M == null ? void 0 : M.detail) == null ? void 0 : de.prompt_id) || ((ge = M == null ? void 0 : M.detail) == null ? void 0 : ge.promptId), ee = String(((Le = M == null ? void 0 : M.detail) == null ? void 0 : Le.node) || ((xe = M == null ? void 0 : M.detail) == null ? void 0 : xe.display_node) || "").trim(), ae = q ? s.get(String(q)) : null, ue = ae ? Math.max(0, Date.now() - ae) : 0; + let B = ""; try { - if (ee && typeof j < "u" && (j != null && j.graph)) { - const Je = j.graph.getNodeById(Number(ee)); - Je && (U = String(Je.type || Je.comfyClass || "").trim()); + if (ee && typeof v < "u" && (v != null && v.graph)) { + const Fe = v.graph.getNodeById(Number(ee)); + Fe && (B = String(Fe.type || Fe.comfyClass || "").trim()); } - } catch (Je) { - (ke = console.debug) == null || ke.call(console, Je); + } catch (Fe) { + (Xe = console.debug) == null || Xe.call(console, Fe); } - const Q = D.map((Je) => ({ - ...Je, + const Q = D.map((Fe) => ({ + ...Fe, ...ue > 0 ? { generation_time_ms: ue } : {}, ...ee ? { source_node_id: ee } : {}, - ...U ? { source_node_type: U } : {} + ...B ? { source_node_type: B } : {} })); - A("executed:event", { + y("executed:event", { prompt_id: String(q || ""), source_node_id: ee, - source_node_type: U, + source_node_type: B, file_count: Q.length, - files: Q.map((Je) => String((Je == null ? void 0 : Je.filename) || (Je == null ? void 0 : Je.filepath) || "")) + files: Q.map((Fe) => String((Fe == null ? void 0 : Fe.filename) || (Fe == null ? void 0 : Fe.filepath) || "")) }); try { window.dispatchEvent( - new CustomEvent(ht.NEW_GENERATION_OUTPUT, { + new CustomEvent(ft.NEW_GENERATION_OUTPUT, { detail: { files: Q, prompt_id: String(q || ""), @@ -45495,146 +45530,146 @@ function _V({ } }) ); - } catch (Je) { - (we = console.debug) == null || we.call(console, Je); + } catch (Fe) { + (Me = console.debug) == null || Me.call(console, Fe); } const _ = Q.length > 0 ? [Q[0]] : [], le = Q.length > 1 ? Q.slice(1) : []; - _.length > 0 && v(_, 1, { prompt_id: q }), le.length > 0 && V(le, { prompt_id: q }); + _.length > 0 && j(_, 1, { prompt_id: q }), le.length > 0 && Y(le, { prompt_id: q }); } - function $(M, { setCurrentJobId: j }) { - var q, ee, ce; - const O = ((q = M == null ? void 0 : M.detail) == null ? void 0 : q.prompt_id) || ((ee = M == null ? void 0 : M.detail) == null ? void 0 : ee.promptId), D = (ce = M == null ? void 0 : M.detail) == null ? void 0 : ce.timestamp; - A("execution:start", { - prompt_id: String(O || ""), + function $(M, { setCurrentJobId: v }) { + var q, ee, ae; + const F = ((q = M == null ? void 0 : M.detail) == null ? void 0 : q.prompt_id) || ((ee = M == null ? void 0 : M.detail) == null ? void 0 : ee.promptId), D = (ae = M == null ? void 0 : M.detail) == null ? void 0 : ae.timestamp; + y("execution:start", { + prompt_id: String(F || ""), timestamp: Number(D) || null - }), G(O, D), X(), j == null || j(O || null), r({ - active_prompt_id: O || null, + }), G(F, D), X(), v == null || v(F || null), r({ + active_prompt_id: F || null, cached_nodes: [], progress_node: null, progress_value: null, progress_max: null - }), O && F(O); + }), F && O(F); } - function E(M, { setCurrentJobId: j }) { + function H(M, { setCurrentJobId: v }) { var q, ee; - const O = b(), D = ((q = M == null ? void 0 : M.detail) == null ? void 0 : q.prompt_id) || ((ee = M == null ? void 0 : M.detail) == null ? void 0 : ee.promptId); - if (A("execution:end", { + const F = b(), D = ((q = M == null ? void 0 : M.detail) == null ? void 0 : q.prompt_id) || ((ee = M == null ? void 0 : M.detail) == null ? void 0 : ee.promptId); + if (y("execution:end", { type: String((M == null ? void 0 : M.type) || ""), prompt_id: String(D || "") - }), D && s.delete(String(D)), s.prune(), j == null || j(null), r({ + }), D && s.delete(String(D)), s.prune(), v == null || v(null), r({ active_prompt_id: null, cached_nodes: [], progress_node: null, progress_value: null, progress_max: null - }), D && String((M == null ? void 0 : M.type) || "") !== "execution_success" && (A("buffer:clear", { + }), D && String((M == null ? void 0 : M.type) || "") !== "execution_success" && (y("buffer:clear", { prompt_id: String(D || ""), reason: String((M == null ? void 0 : M.type) || "") - }), X(), I.clear(D), O.allowLiveStackFinalize && y.clearPendingJob(D), N()), String((M == null ? void 0 : M.type) || "") === "execution_success") - if (O.usePostExecutionScan) - K(d); + }), X(), I.clear(D), F.allowLiveStackFinalize && A.clearPendingJob(D), k()), String((M == null ? void 0 : M.type) || "") === "execution_success") + if (F.usePostExecutionScan) + U(d); else { - const ce = B(D) ? Math.min(d, QV) : d; + const ae = T(D) ? Math.min(d, QY) : d; x(() => { - D && F(D), z(D); - }, ce); + D && O(D), z(D); + }, ae); } } - function oe(M) { + function ne(M) { if (!p()) return; - const j = []; - for (const [, O] of M instanceof Map ? M.entries() : []) { - const D = i(O); + const v = []; + for (const [, F] of M instanceof Map ? M.entries() : []) { + const D = i(F); if (D != null && D.length) - for (const q of D) j.push(q); + for (const q of D) v.push(q); } - !j.length || !p() || (A("node-outputs:updated", { + !v.length || !p() || (y("node-outputs:updated", { prompt_id: w(), - file_count: j.length - }), V(j, { prompt_id: w() })); + file_count: v.length + }), Y(v, { prompt_id: w() })); } return { notifyStacksUpdated: L, prepareLiveAssetEvent: J, isRenderableLiveAsset: P, - handleExecutedEvent: H, + handleExecutedEvent: E, handleExecutionStart: $, - handleExecutionEnd: E, - handleNodeOutputsUpdated: oe + handleExecutionEnd: H, + handleNodeOutputsUpdated: ne }; } -function $V(e) { - const t = [], n = /* @__PURE__ */ new Set(), i = 500, o = 4, r = 2e3, l = /\.(png|jpe?g|webp|gif|bmp|tiff?|avif|heic|heif|apng|hdr|svg|mp4|webm|mov|mkv|avi|m4v|mp3|wav|flac|ogg|glb|gltf|obj|fbx|ply|stl)$/i, a = typeof WeakSet < "u" ? /* @__PURE__ */ new WeakSet() : null, c = ({ type: y, subfolder: S, filename: Z, path: C }) => C ? `path|${String(C).trim().toLowerCase()}` : `${y || ""}|${S || ""}|${Z || ""}`.toLowerCase(), s = (y) => { - if (!y) return; - const S = y.path || y.filepath || y.fullpath || y.fullPath || y.full_path; - let Z = y.filename; - if (!Z && S) { - const b = String(S).split(/[/\\\\]/); - Z = b[b.length - 1]; +function $Y(e) { + const t = [], n = /* @__PURE__ */ new Set(), i = 500, o = 4, r = 2e3, l = /\.(png|jpe?g|webp|gif|bmp|tiff?|avif|heic|heif|apng|hdr|svg|mp4|webm|mov|mkv|avi|m4v|mp3|wav|flac|ogg|glb|gltf|obj|fbx|ply|stl)$/i, a = typeof WeakSet < "u" ? /* @__PURE__ */ new WeakSet() : null, c = ({ type: A, subfolder: h, filename: S, path: W }) => W ? `path|${String(W).trim().toLowerCase()}` : `${A || ""}|${h || ""}|${S || ""}`.toLowerCase(), s = (A) => { + if (!A) return; + const h = A.path || A.filepath || A.fullpath || A.fullPath || A.full_path; + let S = A.filename; + if (!S && h) { + const b = String(h).split(/[/\\\\]/); + S = b[b.length - 1]; } - if (!Z || (Z = String(Z), !Z)) return; - const C = y.subfolder || y.sub_folder || y.subFolder || "", g = y.type || y.output_type || "output", A = c({ type: g, subfolder: C, filename: Z, path: S }); - if (n.has(A)) return; - n.add(A); - const p = { filename: Z, subfolder: C, type: g }; - S && (p.path = S), t.push(p); - }, d = (y) => { - if (typeof y != "string") return; - const S = y.trim().replace(/^['"]|['"]$/g, ""); - if (!S || !l.test(S)) return; - const Z = S.split(/[/\\\\]/), C = Z[Z.length - 1]; - if (!C) return; - const g = c({ type: "output", subfolder: "", filename: C, path: S }); - n.has(g) || (n.add(g), t.push({ filename: C, subfolder: "", type: "output", path: S })); - }, u = (y) => { - if (typeof y == "string") { - d(y); + if (!S || (S = String(S), !S)) return; + const W = A.subfolder || A.sub_folder || A.subFolder || "", g = A.type || A.output_type || "output", y = c({ type: g, subfolder: W, filename: S, path: h }); + if (n.has(y)) return; + n.add(y); + const p = { filename: S, subfolder: W, type: g }; + h && (p.path = h), t.push(p); + }, d = (A) => { + if (typeof A != "string") return; + const h = A.trim().replace(/^['"]|['"]$/g, ""); + if (!h || !l.test(h)) return; + const S = h.split(/[/\\\\]/), W = S[S.length - 1]; + if (!W) return; + const g = c({ type: "output", subfolder: "", filename: W, path: h }); + n.has(g) || (n.add(g), t.push({ filename: W, subfolder: "", type: "output", path: h })); + }, u = (A) => { + if (typeof A == "string") { + d(A); return; } - if (!Array.isArray(y)) return; - let S = 0; - for (const Z of y) { - if (t.length >= i || S >= r) break; - S += 1, Z && typeof Z == "object" && "filename" in Z ? s(Z) : typeof Z == "string" ? d(Z) : I(Z, 1); + if (!Array.isArray(A)) return; + let h = 0; + for (const S of A) { + if (t.length >= i || h >= r) break; + h += 1, S && typeof S == "object" && "filename" in S ? s(S) : typeof S == "string" ? d(S) : I(S, 1); } - }, I = (y, S) => { - if (!(!y || S > o || t.length >= i) && typeof y == "object") { + }, I = (A, h) => { + if (!(!A || h > o || t.length >= i) && typeof A == "object") { if (a) { - if (a.has(y)) return; - a.add(y); + if (a.has(A)) return; + a.add(A); } - if (Array.isArray(y)) { - let Z = 0; - for (const C of y) { - if (t.length >= i || Z >= r) break; - Z += 1, C && typeof C == "object" && "filename" in C ? s(C) : typeof C == "string" ? d(C) : I(C, S + 1); + if (Array.isArray(A)) { + let S = 0; + for (const W of A) { + if (t.length >= i || S >= r) break; + S += 1, W && typeof W == "object" && "filename" in W ? s(W) : typeof W == "string" ? d(W) : I(W, h + 1); } return; } - if ((y.images || y.gifs || y.videos || y.meshes || y.mesh || y.audio) && (u(y.images), u(y.gifs), u(y.videos), u(y.meshes), u(y.mesh), u(y.audio)), y.output && I(y.output, S + 1), y.outputs && I(y.outputs, S + 1), y.result && I(y.result, S + 1), y.data && I(y.data, S + 1), S < o) - for (const Z of Object.values(y)) { + if ((A.images || A.gifs || A.videos || A.meshes || A.mesh || A.audio) && (u(A.images), u(A.gifs), u(A.videos), u(A.meshes), u(A.mesh), u(A.audio)), A.output && I(A.output, h + 1), A.outputs && I(A.outputs, h + 1), A.result && I(A.result, h + 1), A.data && I(A.data, h + 1), h < o) + for (const S of Object.values(A)) { if (t.length >= i) break; - if (typeof Z == "string") { - d(Z); + if (typeof S == "string") { + d(S); continue; } - if (!(!Z || typeof Z != "object")) { - if (Z.images || Z.gifs || Z.videos || Z.meshes || Z.mesh || Z.audio) { - u(Z.images), u(Z.gifs), u(Z.videos), u(Z.meshes), u(Z.mesh), u(Z.audio); + if (!(!S || typeof S != "object")) { + if (S.images || S.gifs || S.videos || S.meshes || S.mesh || S.audio) { + u(S.images), u(S.gifs), u(S.videos), u(S.meshes), u(S.mesh), u(S.audio); continue; } - I(Z, S + 1); + I(S, h + 1); } } } }; return I(e, 0), t; } -const _m = 3e4, Er = /* @__PURE__ */ new Map(), eY = "live"; -function tY(e) { +const _m = 3e4, Hr = /* @__PURE__ */ new Map(), eV = "live"; +function tV(e) { return e === !0 || e === 1 || e === "1" ? !0 : e === !1 || e === 0 || e === "0" ? !1 : null; } -function nY(e) { +function nV(e) { const t = [ e == null ? void 0 : e.has_ai_vector, e == null ? void 0 : e.hasAiVector, @@ -45644,30 +45679,30 @@ function nY(e) { e == null ? void 0 : e.vectorIndexed ]; for (const n of t) { - const i = tY(n); + const i = tV(n); if (i !== null) return i; } return !1; } -function iY(e) { - const t = Date.now(), n = Number(Er.get(e) || 0); +function iV(e) { + const t = Date.now(), n = Number(Hr.get(e) || 0); if (n > 0 && t - n < _m) return !0; - if (Er.set(e, t), Er.size > 500) { + if (Hr.set(e, t), Hr.size > 500) { const i = t - 5 * _m; - for (const [o, r] of Er.entries()) - Number(r) < i && Er.delete(o); + for (const [o, r] of Hr.entries()) + Number(r) < i && Hr.delete(o); } return !1; } function $m(e) { const t = String((e == null ? void 0 : e.id) || "").trim(); - t && (nY(e) || iY(t) || Jg(t).catch((n) => { + t && (nV(e) || iV(t) || Jg(t).catch((n) => { var i; return (i = console.debug) == null ? void 0 : i.call(console, "[Majoor] auto vector index failed", n); })); } -function oY(e) { +function oV(e) { var o, r; const t = String((e == null ? void 0 : e.kind) || "").trim().toLowerCase(); if (t) return t; @@ -45676,10 +45711,10 @@ function oY(e) { ).trim(), i = n.includes(".") && ((r = (o = n.split(".").pop()) == null ? void 0 : o.toLowerCase) == null ? void 0 : r.call(o)) || ""; return i ? ["png", "jpg", "jpeg", "webp", "gif", "bmp", "tif", "tiff", "avif", "heic", "heif"].includes(i) ? "image" : ["mp4", "webm", "mov", "mkv", "avi", "m4v"].includes(i) ? "video" : ["mp3", "wav", "flac", "ogg"].includes(i) ? "audio" : ["glb", "gltf", "obj", "fbx", "ply", "stl", "splat", "ksplat", "spz"].includes(i) ? "model3d" : "unknown" : ""; } -function rY(e, { jobId: t = "" } = {}) { +function rV(e, { jobId: t = "" } = {}) { const n = String((e == null ? void 0 : e.filename) || "").trim(), i = String( (e == null ? void 0 : e.filepath) || (e == null ? void 0 : e.path) || (e == null ? void 0 : e.fullpath) || (e == null ? void 0 : e.full_path) || "" - ).trim(), o = String((e == null ? void 0 : e.subfolder) || (e == null ? void 0 : e.sub_folder) || (e == null ? void 0 : e.subFolder) || "").trim(), r = String((e == null ? void 0 : e.type) || (e == null ? void 0 : e.source) || "output").trim().toLowerCase(), l = String((e == null ? void 0 : e.root_id) || (e == null ? void 0 : e.custom_root_id) || "").trim(), a = oY(e); + ).trim(), o = String((e == null ? void 0 : e.subfolder) || (e == null ? void 0 : e.sub_folder) || (e == null ? void 0 : e.subFolder) || "").trim(), r = String((e == null ? void 0 : e.type) || (e == null ? void 0 : e.source) || "output").trim().toLowerCase(), l = String((e == null ? void 0 : e.root_id) || (e == null ? void 0 : e.custom_root_id) || "").trim(), a = oV(e); if (!a || !n && !i) return null; const c = n || i.split(/[/\\]/).filter(Boolean).pop() || ""; if (!c) return null; @@ -45688,9 +45723,9 @@ function rY(e, { jobId: t = "" } = {}) { l, o, c - ].map((y) => String(y || "").trim().toLowerCase()).join("|"), u = Date.now() / 1e3, I = String((e == null ? void 0 : e.job_id) || t || "").trim(); + ].map((A) => String(A || "").trim().toLowerCase()).join("|"), u = Date.now() / 1e3, I = String((e == null ? void 0 : e.job_id) || t || "").trim(); return { - id: `${eY}:${d || s.toLowerCase()}`, + id: `${eV}:${d || s.toLowerCase()}`, filename: c, filepath: s, path: s, @@ -45713,7 +45748,7 @@ function rY(e, { jobId: t = "" } = {}) { _mjrLiveLabel: "In progress" }; } -function lY(e) { +function lV(e) { var n; const t = String(e || ""); try { @@ -45724,11 +45759,11 @@ function lY(e) { } return t.replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1"); } -function aY(e, t) { +function aV(e, t) { const n = String(e || "").trim().toLowerCase(); return n === "delete_db" ? t("btn.deleteDb", "Delete DB") : n === "reset_index" ? t("btn.resetIndex", "Reset index") : n === "restore_db" ? t("btn.dbRestore", "Restore DB") : t("btn.maintenance", "Maintenance"); } -function cY(e, t) { +function cV(e, t) { const n = String(e || "").trim().toLowerCase(), i = String(t || "").trim().toLowerCase(), o = { delete_db: ["started", "stopping_workers", "resetting_db", "delete_db", "recreate_db", "restarting_scan", "done"], reset_index: ["started", "stopping_workers", "resetting_db", "restarting_scan", "done"], @@ -45741,7 +45776,7 @@ function cY(e, t) { label: i.replace(/[_-]+/g, " ") }; } -async function sY({ +async function sV({ api: e, runtime: t, executionRuntime: n, @@ -45755,246 +45790,246 @@ async function sY({ upsertAssetNow: d, removeAssetsFromGrid: u, getEnrichmentState: I, - setEnrichmentState: y, - comfyToast: S, - t: Z, - reportError: C, + setEnrichmentState: A, + comfyToast: h, + t: S, + reportError: W, registerCleanableListener: g, - syncExecutionBackendState: A + syncExecutionBackendState: y }) { - e._mjrExecutedHandler = (h) => { + e._mjrExecutedHandler = (C) => { try { - n.handleExecutedEvent(h, { appRef: i }); + n.handleExecutedEvent(C, { appRef: i }); } catch (G) { - C(G, "entry.executed"); + W(G, "entry.executed"); } - }, g(t, e, "executed", e._mjrExecutedHandler), e._mjrExecutionStartHandler = (h) => { - var G, W; + }, g(t, e, "executed", e._mjrExecutedHandler), e._mjrExecutionStartHandler = (C) => { + var G, Z; try { - n.handleExecutionStart(h, { + n.handleExecutionStart(C, { setCurrentJobId: (f) => o == null ? void 0 : o.setCurrentJobId(f) - }), A == null || A({ + }), y == null || y({ active: !0, - promptId: ((G = h == null ? void 0 : h.detail) == null ? void 0 : G.prompt_id) || ((W = h == null ? void 0 : h.detail) == null ? void 0 : W.promptId) || "" + promptId: ((G = C == null ? void 0 : C.detail) == null ? void 0 : G.prompt_id) || ((Z = C == null ? void 0 : C.detail) == null ? void 0 : Z.promptId) || "" }); } catch (f) { - C(f, "entry.execution_start"); + W(f, "entry.execution_start"); } - }, e._mjrExecutionEndHandler = (h) => { - var G, W; + }, e._mjrExecutionEndHandler = (C) => { + var G, Z; try { - n.handleExecutionEnd(h, { + n.handleExecutionEnd(C, { setCurrentJobId: (f) => o == null ? void 0 : o.setCurrentJobId(f) - }), A == null || A({ + }), y == null || y({ active: !1, - promptId: ((G = h == null ? void 0 : h.detail) == null ? void 0 : G.prompt_id) || ((W = h == null ? void 0 : h.detail) == null ? void 0 : W.promptId) || "" + promptId: ((G = C == null ? void 0 : C.detail) == null ? void 0 : G.prompt_id) || ((Z = C == null ? void 0 : C.detail) == null ? void 0 : Z.promptId) || "" }); } catch (f) { - C(f, "entry.execution_end"); + W(f, "entry.execution_end"); } - }, e._mjrStacksUpdatedHandler = (h) => { + }, e._mjrStacksUpdatedHandler = (C) => { try { - n.notifyStacksUpdated((h == null ? void 0 : h.detail) || {}); + n.notifyStacksUpdated((C == null ? void 0 : C.detail) || {}); } catch (G) { - C(G, "entry.stacks_updated"); + W(G, "entry.stacks_updated"); } - }, e._mjrRuntimeStatusHandler = (h) => { + }, e._mjrRuntimeStatusHandler = (C) => { var G; try { - const W = (h == null ? void 0 : h.detail) || {}; + const Z = (C == null ? void 0 : C.detail) || {}; l({ - progress_node: (W == null ? void 0 : W.node) ?? null, - progress_value: Number.isFinite(Number(W == null ? void 0 : W.value)) ? Number(W.value) : null, - progress_max: Number.isFinite(Number(W == null ? void 0 : W.max)) ? Number(W.max) : null, - queue_remaining: Number.isFinite(Number((G = W == null ? void 0 : W.exec_info) == null ? void 0 : G.queue_remaining)) ? Number(W.exec_info.queue_remaining) : Number.isFinite(Number(W == null ? void 0 : W.queue_remaining)) ? Number(W.queue_remaining) : r().queue_remaining + progress_node: (Z == null ? void 0 : Z.node) ?? null, + progress_value: Number.isFinite(Number(Z == null ? void 0 : Z.value)) ? Number(Z.value) : null, + progress_max: Number.isFinite(Number(Z == null ? void 0 : Z.max)) ? Number(Z.max) : null, + queue_remaining: Number.isFinite(Number((G = Z == null ? void 0 : Z.exec_info) == null ? void 0 : G.queue_remaining)) ? Number(Z.exec_info.queue_remaining) : Number.isFinite(Number(Z == null ? void 0 : Z.queue_remaining)) ? Number(Z.queue_remaining) : r().queue_remaining }); - } catch (W) { - C(W, "entry.runtime_status"); + } catch (Z) { + W(Z, "entry.runtime_status"); } - }, e._mjrExecutionCachedHandler = (h) => { + }, e._mjrExecutionCachedHandler = (C) => { try { - const G = (h == null ? void 0 : h.detail) || {}; + const G = (C == null ? void 0 : C.detail) || {}; l({ active_prompt_id: (G == null ? void 0 : G.prompt_id) || (G == null ? void 0 : G.promptId) || r().active_prompt_id || null, cached_nodes: Array.isArray(G == null ? void 0 : G.nodes) ? G.nodes.slice() : [] }); } catch (G) { - C(G, "entry.execution_cached"); + W(G, "entry.execution_cached"); } - }, g(t, e, "execution_start", e._mjrExecutionStartHandler), g(t, e, "execution_success", e._mjrExecutionEndHandler), g(t, e, "execution_error", e._mjrExecutionEndHandler), g(t, e, "execution_interrupted", e._mjrExecutionEndHandler), g(t, e, "mjr.stacks.updated", e._mjrStacksUpdatedHandler), g(t, e, "progress", e._mjrRuntimeStatusHandler), g(t, e, "status", e._mjrRuntimeStatusHandler), g(t, e, ht.RUNTIME_STATUS, e._mjrRuntimeStatusHandler), g(t, e, "execution_cached", e._mjrExecutionCachedHandler); + }, g(t, e, "execution_start", e._mjrExecutionStartHandler), g(t, e, "execution_success", e._mjrExecutionEndHandler), g(t, e, "execution_error", e._mjrExecutionEndHandler), g(t, e, "execution_interrupted", e._mjrExecutionEndHandler), g(t, e, "mjr.stacks.updated", e._mjrStacksUpdatedHandler), g(t, e, "progress", e._mjrRuntimeStatusHandler), g(t, e, "status", e._mjrRuntimeStatusHandler), g(t, e, ft.RUNTIME_STATUS, e._mjrRuntimeStatusHandler), g(t, e, "execution_cached", e._mjrExecutionCachedHandler); function p() { - var h; + var C; try { window.__mjrLastAssetUpsert = Date.now(), window.__mjrLastAssetUpsertCount = (Number(window.__mjrLastAssetUpsertCount || 0) || 0) + 1; } catch (G) { - (h = console.debug) == null || h.call(console, G); + (C = console.debug) == null || C.call(console, G); } } - function b(h, G, { immediate: W = !1, force: f = !1 } = {}) { - var k, K; - const X = String((G == null ? void 0 : G.id) || "").trim(), x = String((G == null ? void 0 : G.kind) || "").trim(), T = String((G == null ? void 0 : G.filename) || "").trim(), v = String((G == null ? void 0 : G.filepath) || "").trim(), w = !!x && (!!T || !!v); + function b(C, G, { immediate: Z = !1, force: f = !1 } = {}) { + var N, U; + const X = String((G == null ? void 0 : G.id) || "").trim(), x = String((G == null ? void 0 : G.kind) || "").trim(), K = String((G == null ? void 0 : G.filename) || "").trim(), j = String((G == null ? void 0 : G.filepath) || "").trim(), w = !!x && (!!K || !!j); let R = !1; if (X) try { - typeof (h == null ? void 0 : h._mjrHasAssetId) == "function" ? R = !!h._mjrHasAssetId(X) : R = !!h.querySelector( - `.mjr-asset-card[data-mjr-asset-id="${lY(X)}"]` + typeof (C == null ? void 0 : C._mjrHasAssetId) == "function" ? R = !!C._mjrHasAssetId(X) : R = !!C.querySelector( + `.mjr-asset-card[data-mjr-asset-id="${lV(X)}"]` ); } catch (z) { - (k = console.debug) == null || k.call(console, z); + (N = console.debug) == null || N.call(console, z); } - const Y = w || R; - if (!R && Y && !f && (String(((K = h == null ? void 0 : h.dataset) == null ? void 0 : K.mjrQuery) || "*").trim() || "*") !== "*") + const V = w || R; + if (!R && V && !f && (String(((U = C == null ? void 0 : C.dataset) == null ? void 0 : U.mjrQuery) || "*").trim() || "*") !== "*") return; - let F = !R && Y && !G.mtime ? { ...G, mtime: Date.now() / 1e3 } : G; - if (!R && Y) { - const z = G.has_workflow ?? G.hasWorkflow, B = G.has_generation_data ?? G.hasGenerationData; - z == null && B == null || (z == null || B == null) && (F = { - ...F, + let O = !R && V && !G.mtime ? { ...G, mtime: Date.now() / 1e3 } : G; + if (!R && V) { + const z = G.has_workflow ?? G.hasWorkflow, T = G.has_generation_data ?? G.hasGenerationData; + z == null && T == null || (z == null || T == null) && (O = { + ...O, has_workflow: z ?? null, - has_generation_data: B ?? null + has_generation_data: T ?? null }); } - (Y ? !!(W && typeof d == "function" ? d : s)(h, F) : !1) && p(); + (V ? !!(Z && typeof d == "function" ? d : s)(C, O) : !1) && p(); } - e._mjrNewGenerationOutputHandler = (h) => { - var G, W, f, X; + e._mjrNewGenerationOutputHandler = (C) => { + var G, Z, f, X; try { const x = a(); if (!x) return; - const T = String(((G = x == null ? void 0 : x.dataset) == null ? void 0 : G.mjrScope) || "output").trim().toLowerCase(); - if (T !== "output" && T !== "all") return; - const v = Array.isArray((W = h == null ? void 0 : h.detail) == null ? void 0 : W.files) ? h.detail.files : [], w = String(((f = h == null ? void 0 : h.detail) == null ? void 0 : f.prompt_id) || ((X = h == null ? void 0 : h.detail) == null ? void 0 : X.promptId) || "").trim(); - for (const R of v) { - const Y = rY(R, { jobId: w }); - Y && b(x, Y, { immediate: !0, force: !0 }); + const K = String(((G = x == null ? void 0 : x.dataset) == null ? void 0 : G.mjrScope) || "output").trim().toLowerCase(); + if (K !== "output" && K !== "all") return; + const j = Array.isArray((Z = C == null ? void 0 : C.detail) == null ? void 0 : Z.files) ? C.detail.files : [], w = String(((f = C == null ? void 0 : C.detail) == null ? void 0 : f.prompt_id) || ((X = C == null ? void 0 : C.detail) == null ? void 0 : X.promptId) || "").trim(); + for (const R of j) { + const V = rV(R, { jobId: w }); + V && b(x, V, { immediate: !0, force: !0 }); } } catch (x) { - C(x, "entry.new_generation_output"); + W(x, "entry.new_generation_output"); } - }, g(t, window, ht.NEW_GENERATION_OUTPUT, e._mjrNewGenerationOutputHandler), e._mjrAssetAddedHandler = (h) => { - var G, W; + }, g(t, window, ft.NEW_GENERATION_OUTPUT, e._mjrNewGenerationOutputHandler), e._mjrAssetAddedHandler = (C) => { + var G, Z; try { const f = a(); - if (f && (h != null && h.detail)) { - const X = n.prepareLiveAssetEvent(h.detail), x = (X == null ? void 0 : X.detail) || h.detail, T = n.isRenderableLiveAsset(x); - T && c(x), $m(x); - const v = ((G = f.dataset) == null ? void 0 : G.mjrScope) || "output"; - if (v !== "output" && v !== "all") return; - const w = ((W = f.dataset) == null ? void 0 : W.mjrQuery) || "*"; - String(w).trim() === "*" && T && b(f, x, { immediate: !0 }); + if (f && (C != null && C.detail)) { + const X = n.prepareLiveAssetEvent(C.detail), x = (X == null ? void 0 : X.detail) || C.detail, K = n.isRenderableLiveAsset(x); + K && c(x), $m(x); + const j = ((G = f.dataset) == null ? void 0 : G.mjrScope) || "output"; + if (j !== "output" && j !== "all") return; + const w = ((Z = f.dataset) == null ? void 0 : Z.mjrQuery) || "*"; + String(w).trim() === "*" && K && b(f, x, { immediate: !0 }); } } catch (f) { - C(f, "entry.asset_added"); + W(f, "entry.asset_added"); } - }, g(t, e, "mjr-asset-added", e._mjrAssetAddedHandler), e._mjrAssetUpdatedHandler = (h) => { + }, g(t, e, "mjr-asset-added", e._mjrAssetAddedHandler), e._mjrAssetUpdatedHandler = (C) => { try { const G = a(); - if (G && (h != null && h.detail)) { - const W = n.prepareLiveAssetEvent(h.detail), f = (W == null ? void 0 : W.detail) || h.detail; + if (G && (C != null && C.detail)) { + const Z = n.prepareLiveAssetEvent(C.detail), f = (Z == null ? void 0 : Z.detail) || C.detail; n.isRenderableLiveAsset(f) && c(f), b(G, f, { immediate: !0 }); } } catch (G) { - C(G, "entry.asset_updated"); + W(G, "entry.asset_updated"); } - }, g(t, e, "mjr-asset-updated", e._mjrAssetUpdatedHandler), e._mjrScanCompleteHandler = (h) => { + }, g(t, e, "mjr-asset-updated", e._mjrAssetUpdatedHandler), e._mjrScanCompleteHandler = (C) => { var G; try { - const W = (h == null ? void 0 : h.detail) || {}; - window.dispatchEvent(new CustomEvent(ht.SCAN_COMPLETE, { detail: W })); - } catch (W) { - (G = console.debug) == null || G.call(console, W); + const Z = (C == null ? void 0 : C.detail) || {}; + window.dispatchEvent(new CustomEvent(ft.SCAN_COMPLETE, { detail: Z })); + } catch (Z) { + (G = console.debug) == null || G.call(console, Z); } - }, g(t, e, ht.SCAN_COMPLETE, e._mjrScanCompleteHandler), e._mjrScanProgressHandler = (h) => { + }, g(t, e, ft.SCAN_COMPLETE, e._mjrScanCompleteHandler), e._mjrScanProgressHandler = (C) => { var G; try { - const W = (h == null ? void 0 : h.detail) || {}; - window.dispatchEvent(new CustomEvent(ht.SCAN_PROGRESS, { detail: W })); - } catch (W) { - (G = console.debug) == null || G.call(console, W); + const Z = (C == null ? void 0 : C.detail) || {}; + window.dispatchEvent(new CustomEvent(ft.SCAN_PROGRESS, { detail: Z })); + } catch (Z) { + (G = console.debug) == null || G.call(console, Z); } - }, g(t, e, ht.SCAN_PROGRESS, e._mjrScanProgressHandler), e._mjrAssetIndexingHandler = (h) => { + }, g(t, e, ft.SCAN_PROGRESS, e._mjrScanProgressHandler), e._mjrAssetIndexingHandler = (C) => { var G; try { - const W = (h == null ? void 0 : h.detail) || {}; - window.dispatchEvent(new CustomEvent(ht.ASSET_INDEXING, { detail: W })); - } catch (W) { - (G = console.debug) == null || G.call(console, W); + const Z = (C == null ? void 0 : C.detail) || {}; + window.dispatchEvent(new CustomEvent(ft.ASSET_INDEXING, { detail: Z })); + } catch (Z) { + (G = console.debug) == null || G.call(console, Z); } - }, g(t, e, ht.ASSET_INDEXING, e._mjrAssetIndexingHandler), e._mjrAssetIndexedHandler = (h) => { + }, g(t, e, ft.ASSET_INDEXING, e._mjrAssetIndexingHandler), e._mjrAssetIndexedHandler = (C) => { var G; try { - const W = (h == null ? void 0 : h.detail) || {}; - window.dispatchEvent(new CustomEvent(ht.ASSET_INDEXED, { detail: W })); + const Z = (C == null ? void 0 : C.detail) || {}; + window.dispatchEvent(new CustomEvent(ft.ASSET_INDEXED, { detail: Z })); const f = a(); - if (f && W) { - const X = n.prepareLiveAssetEvent(W), x = (X == null ? void 0 : X.detail) || W; + if (f && Z) { + const X = n.prepareLiveAssetEvent(Z), x = (X == null ? void 0 : X.detail) || Z; n.isRenderableLiveAsset(x) && c(x), $m(x), b(f, x, { immediate: !0, force: !0 }); } - } catch (W) { - (G = console.debug) == null || G.call(console, W); + } catch (Z) { + (G = console.debug) == null || G.call(console, Z); } - }, g(t, e, ht.ASSET_INDEXED, e._mjrAssetIndexedHandler), e._mjrEnrichmentStatusHandler = (h) => { + }, g(t, e, ft.ASSET_INDEXED, e._mjrAssetIndexedHandler), e._mjrEnrichmentStatusHandler = (C) => { var G; try { - const W = (h == null ? void 0 : h.detail) || {}, f = Number(W == null ? void 0 : W.queued), X = Number(W == null ? void 0 : W.queue_left), x = Number.isFinite(f) ? Math.max(0, Math.floor(f)) : Number.isFinite(X) ? Math.max(0, Math.floor(X)) : 0, T = !!(W != null && W.active) || x > 0, v = I().active; - y(T, x), window.dispatchEvent(new CustomEvent(ht.ENRICHMENT_STATUS, { detail: W })), v && !T && S(Z("toast.enrichmentComplete", "Metadata enrichment complete"), "success", 2600); - } catch (W) { - (G = console.debug) == null || G.call(console, W); + const Z = (C == null ? void 0 : C.detail) || {}, f = Number(Z == null ? void 0 : Z.queued), X = Number(Z == null ? void 0 : Z.queue_left), x = Number.isFinite(f) ? Math.max(0, Math.floor(f)) : Number.isFinite(X) ? Math.max(0, Math.floor(X)) : 0, K = !!(Z != null && Z.active) || x > 0, j = I().active; + A(K, x), window.dispatchEvent(new CustomEvent(ft.ENRICHMENT_STATUS, { detail: Z })), j && !K && h(S("toast.enrichmentComplete", "Metadata enrichment complete"), "success", 2600); + } catch (Z) { + (G = console.debug) == null || G.call(console, Z); } - }, g(t, e, ht.ENRICHMENT_STATUS, e._mjrEnrichmentStatusHandler), e._mjrDbRestoreStatusHandler = (h) => { + }, g(t, e, ft.ENRICHMENT_STATUS, e._mjrEnrichmentStatusHandler), e._mjrDbRestoreStatusHandler = (C) => { var G; try { - const W = (h == null ? void 0 : h.detail) || {}, f = String((W == null ? void 0 : W.step) || ""), X = String((W == null ? void 0 : W.level) || "info"), x = String((W == null ? void 0 : W.operation) || ""); - window.dispatchEvent(new CustomEvent(ht.DB_RESTORE_STATUS, { detail: W })); - const T = x === "delete_db", v = x === "reset_index", R = { - started: T ? Z("toast.dbDeleteTriggered", "Deleting database and rebuilding...") : v ? Z("toast.resetTriggered", "Reset triggered: Reindexing all files...") : Z("toast.dbRestoreStarted", "DB restore started"), - stopping_workers: Z("toast.dbRestoreStopping", "Stopping running workers"), - resetting_db: Z("toast.dbRestoreResetting", "Unlocking and resetting database"), - delete_db: Z("toast.dbDeleteTriggered", "Deleting database and rebuilding..."), - recreate_db: Z("toast.dbRestoreReplacing", "Recreating database"), - replacing_files: Z("toast.dbRestoreReplacing", "Replacing database files"), - restarting_scan: Z("toast.dbRestoreRescan", "Restarting scan"), - done: T ? Z("toast.dbDeleteSuccess", "Database deleted and rebuilt. Files are being reindexed.") : v ? Z("toast.resetStarted", "Index reset started. Files will be reindexed in the background.") : Z("toast.dbRestoreSuccess", "Database backup restored"), + const Z = (C == null ? void 0 : C.detail) || {}, f = String((Z == null ? void 0 : Z.step) || ""), X = String((Z == null ? void 0 : Z.level) || "info"), x = String((Z == null ? void 0 : Z.operation) || ""); + window.dispatchEvent(new CustomEvent(ft.DB_RESTORE_STATUS, { detail: Z })); + const K = x === "delete_db", j = x === "reset_index", R = { + started: K ? S("toast.dbDeleteTriggered", "Deleting database and rebuilding...") : j ? S("toast.resetTriggered", "Reset triggered: Reindexing all files...") : S("toast.dbRestoreStarted", "DB restore started"), + stopping_workers: S("toast.dbRestoreStopping", "Stopping running workers"), + resetting_db: S("toast.dbRestoreResetting", "Unlocking and resetting database"), + delete_db: S("toast.dbDeleteTriggered", "Deleting database and rebuilding..."), + recreate_db: S("toast.dbRestoreReplacing", "Recreating database"), + replacing_files: S("toast.dbRestoreReplacing", "Replacing database files"), + restarting_scan: S("toast.dbRestoreRescan", "Restarting scan"), + done: K ? S("toast.dbDeleteSuccess", "Database deleted and rebuilt. Files are being reindexed.") : j ? S("toast.resetStarted", "Index reset started. Files will be reindexed in the background.") : S("toast.dbRestoreSuccess", "Database backup restored"), failed: String( - (W == null ? void 0 : W.message) || (T ? Z("toast.dbDeleteFailed", "Failed to delete database") : v ? Z("toast.resetFailed", "Failed to reset index") : Z("toast.dbRestoreFailed", "Failed to restore DB backup")) + (Z == null ? void 0 : Z.message) || (K ? S("toast.dbDeleteFailed", "Failed to delete database") : j ? S("toast.resetFailed", "Failed to reset index") : S("toast.dbRestoreFailed", "Failed to restore DB backup")) ) - }[f] || String((W == null ? void 0 : W.message) || ""); + }[f] || String((Z == null ? void 0 : Z.message) || ""); if (!R) return; - const Y = X === "error" || f === "failed" ? "error" : f === "done" ? "success" : "info", F = { + const V = X === "error" || f === "failed" ? "error" : f === "done" ? "success" : "info", O = { history: { trackId: `maintenance:${String(x || "db_restore").trim().toLowerCase() || "db_restore"}`, - title: aY(x, Z), + title: aV(x, S), detail: R, status: f, operation: String(x || "db_restore").trim().toLowerCase(), - progress: cY(x, f), - source: String((W == null ? void 0 : W.name) || "").trim() || "maintenance", + progress: cV(x, f), + source: String((Z == null ? void 0 : Z.name) || "").trim() || "maintenance", forceStore: !0 } }; - if (T && !["started", "done", "failed"].includes(f)) { - tl(R, Y, 0, F); + if (K && !["started", "done", "failed"].includes(f)) { + tl(R, V, 0, O); return; } - S(R, Y, f === "done" || f === "failed" ? 2800 : 1800, F); - } catch (W) { - (G = console.debug) == null || G.call(console, W); + h(R, V, f === "done" || f === "failed" ? 2800 : 1800, O); + } catch (Z) { + (G = console.debug) == null || G.call(console, Z); } - }, g(t, e, ht.DB_RESTORE_STATUS, e._mjrDbRestoreStatusHandler); - const L = (h) => { - var G, W; + }, g(t, e, ft.DB_RESTORE_STATUS, e._mjrDbRestoreStatusHandler); + const L = (C) => { + var G, Z; try { - const f = Array.isArray((G = h == null ? void 0 : h.detail) == null ? void 0 : G.ids) ? h.detail.ids.map((x) => String(x || "")).filter(Boolean) : []; + const f = Array.isArray((G = C == null ? void 0 : C.detail) == null ? void 0 : G.ids) ? C.detail.ids.map((x) => String(x || "")).filter(Boolean) : []; if (!f.length) return; const X = a(); X && u(X, f); } catch (f) { - (W = console.debug) == null || W.call(console, f); + (Z = console.debug) == null || Z.call(console, f); } }; - g(t, window, ht.ASSETS_DELETED, L), t && typeof t == "object" && (t.api = e, t.assetsDeletedHandler = L), console.debug("[Majoor] Real-time listener registered"); + g(t, window, ft.ASSETS_DELETED, L), t && typeof t == "object" && (t.api = e, t.assetsDeletedHandler = L), console.debug("[Majoor] Real-time listener registered"); } -function dY({ resolveNodeStreamModule: e }) { +function dV({ resolveNodeStreamModule: e }) { var t; if (!(typeof window > "u")) { window.MajoorDebug = { @@ -46024,19 +46059,19 @@ function dY({ resolveNodeStreamModule: e }) { } } } -const vs = "__MJR_ENTRY_RUNTIME__"; -function Ls(e, t) { +const Ls = "__MJR_ENTRY_RUNTIME__"; +function Ys(e, t) { if (e) try { - e._mjrAssetUpdateReloadTimer && (clearTimeout(e._mjrAssetUpdateReloadTimer), e._mjrAssetUpdateReloadTimer = null), e._mjrExecutedHandler && e.removeEventListener("executed", e._mjrExecutedHandler), e._mjrAssetAddedHandler && e.removeEventListener("mjr-asset-added", e._mjrAssetAddedHandler), e._mjrAssetUpdatedHandler && e.removeEventListener("mjr-asset-updated", e._mjrAssetUpdatedHandler), e._mjrScanCompleteHandler && e.removeEventListener(ht.SCAN_COMPLETE, e._mjrScanCompleteHandler), e._mjrScanProgressHandler && e.removeEventListener(ht.SCAN_PROGRESS, e._mjrScanProgressHandler), e._mjrAssetIndexingHandler && e.removeEventListener(ht.ASSET_INDEXING, e._mjrAssetIndexingHandler), e._mjrAssetIndexedHandler && e.removeEventListener(ht.ASSET_INDEXED, e._mjrAssetIndexedHandler), e._mjrExecutionStartHandler && e.removeEventListener("execution_start", e._mjrExecutionStartHandler), e._mjrExecutionEndHandler && (e.removeEventListener("execution_success", e._mjrExecutionEndHandler), e.removeEventListener("execution_error", e._mjrExecutionEndHandler), e.removeEventListener("execution_interrupted", e._mjrExecutionEndHandler)), e._mjrStacksUpdatedHandler && e.removeEventListener("mjr.stacks.updated", e._mjrStacksUpdatedHandler), e._mjrEnrichmentStatusHandler && e.removeEventListener(ht.ENRICHMENT_STATUS, e._mjrEnrichmentStatusHandler), e._mjrDbRestoreStatusHandler && e.removeEventListener(ht.DB_RESTORE_STATUS, e._mjrDbRestoreStatusHandler), e._mjrRuntimeStatusHandler && (e.removeEventListener("progress", e._mjrRuntimeStatusHandler), e.removeEventListener("status", e._mjrRuntimeStatusHandler), e.removeEventListener(ht.RUNTIME_STATUS, e._mjrRuntimeStatusHandler), e.removeEventListener("execution_cached", e._mjrExecutionCachedHandler)); + e._mjrAssetUpdateReloadTimer && (clearTimeout(e._mjrAssetUpdateReloadTimer), e._mjrAssetUpdateReloadTimer = null), e._mjrExecutedHandler && e.removeEventListener("executed", e._mjrExecutedHandler), e._mjrAssetAddedHandler && e.removeEventListener("mjr-asset-added", e._mjrAssetAddedHandler), e._mjrAssetUpdatedHandler && e.removeEventListener("mjr-asset-updated", e._mjrAssetUpdatedHandler), e._mjrScanCompleteHandler && e.removeEventListener(ft.SCAN_COMPLETE, e._mjrScanCompleteHandler), e._mjrScanProgressHandler && e.removeEventListener(ft.SCAN_PROGRESS, e._mjrScanProgressHandler), e._mjrAssetIndexingHandler && e.removeEventListener(ft.ASSET_INDEXING, e._mjrAssetIndexingHandler), e._mjrAssetIndexedHandler && e.removeEventListener(ft.ASSET_INDEXED, e._mjrAssetIndexedHandler), e._mjrExecutionStartHandler && e.removeEventListener("execution_start", e._mjrExecutionStartHandler), e._mjrExecutionEndHandler && (e.removeEventListener("execution_success", e._mjrExecutionEndHandler), e.removeEventListener("execution_error", e._mjrExecutionEndHandler), e.removeEventListener("execution_interrupted", e._mjrExecutionEndHandler)), e._mjrStacksUpdatedHandler && e.removeEventListener("mjr.stacks.updated", e._mjrStacksUpdatedHandler), e._mjrEnrichmentStatusHandler && e.removeEventListener(ft.ENRICHMENT_STATUS, e._mjrEnrichmentStatusHandler), e._mjrDbRestoreStatusHandler && e.removeEventListener(ft.DB_RESTORE_STATUS, e._mjrDbRestoreStatusHandler), e._mjrRuntimeStatusHandler && (e.removeEventListener("progress", e._mjrRuntimeStatusHandler), e.removeEventListener("status", e._mjrRuntimeStatusHandler), e.removeEventListener(ft.RUNTIME_STATUS, e._mjrRuntimeStatusHandler), e.removeEventListener("execution_cached", e._mjrExecutionCachedHandler)); } catch (n) { t == null || t(n, "entry.removeApiHandlers"); } } -function Op(e, t) { +function Fp(e, t) { try { const n = e == null ? void 0 : e.assetsDeletedHandler; - n && typeof window < "u" && window.removeEventListener(ht.ASSETS_DELETED, n); + n && typeof window < "u" && window.removeEventListener(ft.ASSETS_DELETED, n); } catch (n) { t == null || t(n, "entry.removeRuntimeWindowHandlers"); } @@ -46069,13 +46104,13 @@ function zp(e, { reportError: t } = {}) { console.warn("[MJR teardown]", r); } try { - Ls(e.api || null, t), Op(e, t); + Ys(e.api || null, t), Fp(e, t); } catch (r) { console.warn("[MJR teardown]", r); } } } -function uY(e, t, n, i, o = void 0) { +function uV(e, t, n, i, o = void 0) { var l; if (!e || !(t != null && t.addEventListener) || typeof i != "function") return null; const r = o && typeof o == "object" ? { ...o } : o; @@ -46095,7 +46130,7 @@ function uY(e, t, n, i, o = void 0) { } }), null; } -function mY({ +function mV({ cleanupEntryRuntimeFn: e = zp, teardownLiveStreamTracker: t, teardownNodeStream: n, @@ -46109,7 +46144,7 @@ function mY({ try { if (typeof window < "u") { try { - const s = window[vs]; + const s = window[Ls]; e(s, { reportError: c }); } catch (s) { console.warn("[MJR teardown]", s); @@ -46149,7 +46184,7 @@ function mY({ } catch (s) { console.warn("[MJR teardown]", s); } - window[vs] = { + window[Ls] = { api: null, assetsDeletedHandler: null, _cleanupControllers: [], @@ -46161,9 +46196,9 @@ function mY({ } } let dl = null, rr = null; -const Pl = "majoor-assets", Ql = "__MJR_EXECUTION_RUNTIME__", gY = "Majoor.AssetsManager"; -let zc = { active: null, promptId: "" }, _l = null; -function lc() { +const Pl = "majoor-assets", Ql = "__MJR_EXECUTION_RUNTIME__", gV = "Majoor.AssetsManager"; +let Jc = { active: null, promptId: "" }, _l = null; +function ac() { var e; try { return typeof window > "u" ? { @@ -46188,21 +46223,21 @@ function lc() { function Jp(e = {}) { var t; try { - const n = lc(); - Object.assign(n, e || {}), window.dispatchEvent(new CustomEvent(ht.RUNTIME_STATUS, { detail: { ...n } })); + const n = ac(); + Object.assign(n, e || {}), window.dispatchEvent(new CustomEvent(ft.RUNTIME_STATUS, { detail: { ...n } })); } catch (n) { (t = console.debug) == null || t.call(console, n); } } -async function IY({ active: e, promptId: t = "" } = {}) { +async function IV({ active: e, promptId: t = "" } = {}) { const n = !!e, i = String(t || "").trim(); - if (!(zc.active === n && zc.promptId === i)) { - zc = { active: n, promptId: i }; + if (!(Jc.active === n && Jc.promptId === i)) { + Jc = { active: n, promptId: i }; try { - await Et(ct.RUNTIME_EXECUTION, { + await Dt(st.RUNTIME_EXECUTION, { active: n, prompt_id: i || void 0, - cooldown_ms: Number(fe.EXECUTION_IDLE_GRACE_MS) || 6e3 + cooldown_ms: Number(he.EXECUTION_IDLE_GRACE_MS) || 6e3 }); } catch (o) { ai(o, "entry.execution_state_sync"); @@ -46212,12 +46247,12 @@ async function IY({ active: e, promptId: t = "" } = {}) { function Tp() { var e, t; try { - return !!String(((e = lc()) == null ? void 0 : e.active_prompt_id) || "").trim(); + return !!String(((e = ac()) == null ? void 0 : e.active_prompt_id) || "").trim(); } catch (n) { return (t = console.debug) == null || t.call(console, n), !1; } } -function Bp(e = 1200) { +function Kp(e = 1200) { var t; try { _l && clearTimeout(_l); @@ -46226,15 +46261,15 @@ function Bp(e = 1200) { } _l = setTimeout(() => { if (_l = null, Tp()) { - Bp(e); + Kp(e); return; } - const n = So(); + const n = Go(); n && ed(n); }, Math.max(250, Number(e) || 0)); } -function bY(e) { - import("./LiveStreamTracker-CC4jZbCd.js").then((t) => { +function bV(e) { + import("./LiveStreamTracker-BWRfNIz3.js").then((t) => { dl = t; try { t.initLiveStreamTracker(e); @@ -46247,14 +46282,14 @@ function bY(e) { return; } } -async function pY(e, t) { +async function pV(e, t) { var o; - const n = await hg({ app: e, timeoutMs: 4e3 }) || Ca(e); + const n = await Cg({ app: e, timeoutMs: 4e3 }) || ha(e); if (Wy(n || null), !n) { console.warn("Majoor API not available, real-time updates disabled"); return; } - SI({ api: n, app: e }).catch( + GI({ api: n, app: e }).catch( (r) => { var l; return (l = console.debug) == null ? void 0 : l.call(console, "[Majoor] MFV progress tracking init failed", r); @@ -46262,49 +46297,49 @@ async function pY(e, t) { ); let i = null; try { - i = typeof window < "u" && window[vs] || null; + i = typeof window < "u" && window[Ls] || null; } catch (r) { (o = console.debug) == null || o.call(console, r); } - Ls((i == null ? void 0 : i.api) || null, ai), n !== (i == null ? void 0 : i.api) && Ls(n, ai), Op(i, ai), await sY({ + Ys((i == null ? void 0 : i.api) || null, ai), n !== (i == null ? void 0 : i.api) && Ys(n, ai), Fp(i, ai), await sV({ api: n, runtime: i, executionRuntime: t, appRef: vo, liveStreamModule: dl, - ensureExecutionRuntime: lc, + ensureExecutionRuntime: ac, emitRuntimeStatus: Jp, - getActiveGridContainer: So, - pushGeneratedAsset: YV, + getActiveGridContainer: Go, + pushGeneratedAsset: VY, upsertAsset: lZ, upsertAssetNow: aZ, - removeAssetsFromGrid: ls, - getEnrichmentState: $a, + removeAssetsFromGrid: as, + getEnrichmentState: ec, setEnrichmentState: vI, - comfyToast: Ze, + comfyToast: Ae, t: m, reportError: ai, - registerCleanableListener: uY, - syncExecutionBackendState: IY + registerCleanableListener: uV, + syncExecutionBackendState: IV }); } -const eg = _V({ - post: Et, - ENDPOINTS: ct, +const eg = _Y({ + post: Dt, + ENDPOINTS: st, reportError: ai, - extractOutputFiles: $V, - ensureExecutionRuntime: lc, + extractOutputFiles: $Y, + ensureExecutionRuntime: ac, emitRuntimeStatus: Jp, - refreshGeneratedFeedHosts: wV, - getActiveGridContainer: So + refreshGeneratedFeedHosts: wY, + getActiveGridContainer: Go }); vo.registerExtension({ - name: gY, + name: gV, /** * Declarative settings — registered with ComfyUI's settings panel. * Replaces the imperative registerMajoorSettings() call for the settings UI. */ - settings: SC(vo), + settings: Gh(vo), /** * Declarative commands — ComfyUI surfaces these in the command palette * and the shortcut editor without additional imperative calls. @@ -46318,18 +46353,18 @@ vo.registerExtension({ * Each tab's render/destroy callbacks mount/unmount the Vue app via * mountKeepAlive() so state survives panel collapse/expand cycles. */ - bottomPanelTabs: VL(), + bottomPanelTabs: YL(), // ── lifecycle ────────────────────────────────────────────────────────────── async setup() { var t; - mY({ + mV({ cleanupEntryRuntimeFn: zp, teardownLiveStreamTracker: (n) => dl == null ? void 0 : dl.teardownLiveStreamTracker(n), teardownNodeStream: (n) => rr == null ? void 0 : rr.teardownNodeStream(n), teardownFloatingViewerManager: MI, - teardownGeneratedFeed: YL, + teardownGeneratedFeed: VL, teardownAssetsSidebar: vL, - teardownGlobalRuntime: GL, + teardownGlobalRuntime: SL, teardownTopBarMfvButton: Ip, reportError: ai }), Td(vo); @@ -46340,11 +46375,11 @@ vo.registerExtension({ } catch (n) { (t = console.debug) == null || t.call(console, n); } - fh(), Jh({ enabled: !0 }), SL(), bY(e), MC(e, () => { - const n = So(); + fC(), JC({ enabled: !0 }), GL(), bV(e), Mh(e, () => { + const n = Go(); if (n) { - if (fe.DEFER_GRID_FETCH_DURING_EXECUTION && Tp()) { - Bp(); + if (he.DEFER_GRID_FETCH_DURING_EXECUTION && Tp()) { + Kp(); return; } ed(n); @@ -46353,16 +46388,16 @@ vo.registerExtension({ sidebarTabId: Pl, triggerStartupScan: Il }), setTimeout(() => { - zh(); + zC(); }, 5e3), setTimeout(() => { - Cp(); - }, 4e3), pY(e, eg).catch( + hp(); + }, 800), pV(e, eg).catch( (n) => ai(n, "entry.api_setup") ), jL(e, { sidebarTabId: Pl }) ? io("[Majoor] Sidebar tab registered (Vue)") : console.warn( "Majoor Assets Manager: extensionManager.registerSidebarTab is unavailable" - ), dY({ + ), dV({ resolveNodeStreamModule: async () => (rr || (rr = await import("./NodeStreamController-CLm6-3VG.js")), rr) }); }, @@ -46382,48 +46417,50 @@ vo.registerExtension({ }, /** Context-menu items injected into ComfyUI node right-click menus. */ getNodeMenuItems(e) { - return XL(e, vo, { sidebarTabId: Pl }); + return NL(e, vo, { sidebarTabId: Pl }); } }); export { - fe as A, - hY as B, - CY as C, - eb as D, - ht as E, - Sr as F, - Ze as G, - Eg as H, - gl as I, - mA as J, - ZY as K, + he as A, + GI as B, + ha as C, + CV as D, + ft as E, + hV as F, + eb as G, + Gr as H, + Ae as I, + Hg as J, + gl as K, + mA as L, vA as M, + ZV as N, LA as P, $x as _, ib as a, RA as b, - Xu as c, - wc as d, + Nu as c, + Mc as d, zn as e, - WY as f, - AY as g, - In as h, - ku as i, + WV as f, + AV as g, + pn as h, + Xu as i, qj as j, Mv as k, gj as l, - bt as m, + It as m, cp as n, yb as o, PI as p, ul as q, - NA as r, + kA as r, Wo as s, - Ki as t, - Qn as u, - m as v, - hg as w, - Ao as x, - SI as y, - Ca as z + Ui as t, + eA as u, + QI as v, + Cg as w, + Qn as x, + m as y, + Ao as z }; diff --git a/js_dist/chunks/genInfo-CgFRoaPM.js b/js_dist/chunks/genInfo-cg-2k0dV.js similarity index 99% rename from js_dist/chunks/genInfo-CgFRoaPM.js rename to js_dist/chunks/genInfo-cg-2k0dV.js index 9c1f05b7..9d7625d7 100644 --- a/js_dist/chunks/genInfo-CgFRoaPM.js +++ b/js_dist/chunks/genInfo-cg-2k0dV.js @@ -1,4 +1,4 @@ -import { _ as nn, j as on, k as tn, A as B, l as en, m as rn, o as cn } from "./entry-CuODMrGh.js"; +import { _ as nn, j as on, k as tn, A as B, l as en, m as rn, o as cn } from "./entry-CfyS4_5Z.js"; import { o as E, c as R, t as $, a as O, b as I, n as ln, d as z, e as j } from "./mjr-vue-vendor-DZo-ZbFS.js"; const un = { style: { display: "flex", "flex-direction": "column", gap: "10px", "margin-bottom": "14px" } }, fn = { key: 0, diff --git a/js_dist/chunks/model3dRenderer-BJokSmes.js b/js_dist/chunks/model3dRenderer-B8p2IdLl.js similarity index 87% rename from js_dist/chunks/model3dRenderer-BJokSmes.js rename to js_dist/chunks/model3dRenderer-B8p2IdLl.js index a99dbdb7..984c2e0c 100644 --- a/js_dist/chunks/model3dRenderer-BJokSmes.js +++ b/js_dist/chunks/model3dRenderer-B8p2IdLl.js @@ -1,4 +1,4 @@ -import { M as s, a as o, P as D, b as t, c as M, f as d, g as l, i as E, d as r, r as i } from "./entry-CuODMrGh.js"; +import { M as s, a as o, P as D, b as t, c as M, f as d, g as l, i as E, d as r, r as i } from "./entry-CfyS4_5Z.js"; export { s as MODEL3D_EXTS, o as MODEL3D_EXT_TO_LOADER, diff --git a/js_dist/chunks/scopes-B0qS9yvv.js b/js_dist/chunks/scopes-BfKBxPqI.js similarity index 99% rename from js_dist/chunks/scopes-B0qS9yvv.js rename to js_dist/chunks/scopes-BfKBxPqI.js index ef64de50..99bc8880 100644 --- a/js_dist/chunks/scopes-B0qS9yvv.js +++ b/js_dist/chunks/scopes-BfKBxPqI.js @@ -1,4 +1,4 @@ -import { h as C } from "./entry-CuODMrGh.js"; +import { h as C } from "./entry-CfyS4_5Z.js"; function H(t, n, o) { return 0.2126 * t + 0.7152 * n + 0.0722 * o; } diff --git a/js_dist/chunks/sideBySide-DsvoFFQr.js b/js_dist/chunks/sideBySide-Cxerzz-Z.js similarity index 99% rename from js_dist/chunks/sideBySide-DsvoFFQr.js rename to js_dist/chunks/sideBySide-Cxerzz-Z.js index 2124da25..ea4754ff 100644 --- a/js_dist/chunks/sideBySide-DsvoFFQr.js +++ b/js_dist/chunks/sideBySide-Cxerzz-Z.js @@ -1,4 +1,4 @@ -import { i as q, n as Y, s as k } from "./entry-CuODMrGh.js"; +import { i as q, n as Y, s as k } from "./entry-CfyS4_5Z.js"; function Z(o) { if (!o) return null; try { diff --git a/js_dist/entry.js b/js_dist/entry.js index 8c212afa..2aa79533 100644 --- a/js_dist/entry.js +++ b/js_dist/entry.js @@ -1,2 +1,2 @@ -import "./chunks/entry-CuODMrGh.js"; +import "./chunks/entry-CfyS4_5Z.js"; import "../../scripts/app.js";