From 71c2ee9bfd7d83364190832991a71df5287d1813 Mon Sep 17 00:00:00 2001 From: Ewald ALOEBOETOE <129623145+MajoorWaldi@users.noreply.github.com> Date: Wed, 4 Nov 2026 12:46:18 +0000 Subject: [PATCH] Bring the classic viewer's review tools to the Studio viewer as a HUD A tool rail on the left of the stage adds channels, exposure and gamma, zebra, histogram and waveform scopes, composition guides, aspect masks, pixel probe, loupe, copy to clipboard and A/B compare (wipe, side by side, difference, add, subtract, multiply, screen) with B selection, pin and swap. Colour tools are SVG filters so they also apply to playing video; video compare keeps a second player in sync. 3D models and the A/B / side-by-side open modes now use the Studio viewer, audio files show a live spectrum, and the inspector's tag editor no longer steals focus after navigating. --- CHANGELOG.md | 5 +- ...DaVFZWfj.js => FloatingViewer-BWnwwSd7.js} | 18 +- ...vARw8.js => LiveStreamTracker-VoGYaNV3.js} | 4 +- ....js => SidebarWorkflowSection-DrSf3i6L.js} | 686 +- dist/chunks/StudioPlayer-DXSy5UA5.js | 597 -- dist/chunks/StudioPlayer-ZPvmvcGX.js | 1002 +++ ...tor-qDIeaA8P.js => TagsEditor-CZP7xeZ3.js} | 169 +- dist/chunks/ViewerPortal-DMaFAqG8.js | 2287 +++++++ dist/chunks/ViewerPortal-wTimKJbx.js | 917 --- ...{events-cBMXVULQ.js => events-CttACGx4.js} | 132 +- ...p.js => floatingViewerManager-CLgIT9uN.js} | 6 +- ...enInfo-B3LeL9TU.js => genInfo-B9wv7JDq.js} | 38 +- ...e-3mpaVb1C.js => mjr-primevue-C07IsEdU.js} | 5635 +++++++++-------- ...B23qUCEw.js => mjr-vue-vendor-CEDOnn2t.js} | 90 +- ...-J9oQzQ.js => model3dRenderer-CIUrxTBK.js} | 2 +- ...7bmZ.js => openMajoorSettings-Do4UDwGh.js} | 4 +- ...ide-BLNTzu0A.js => sideBySide-FiIpKO3N.js} | 2 +- ...D1rXA.js => viewerOpenRequest-CZXk8yvU.js} | 22 +- ...fHq_.js => viewerRuntimeHosts-XPTU8ZhU.js} | 2 +- dist/entry.js | 1528 ++--- docs/VIEWER_FEATURE_TUTORIAL.md | 33 +- ui/app/i18n.ts | 130 + ui/features/viewer/studio/studioFx.ts | 330 + ui/features/viewer/studio/studioSampler.ts | 134 + .../viewer/studio/studioViewerState.ts | 29 +- ui/tests/studio_fx.vitest.ts | 131 + ui/tests/studio_media.vitest.ts | 19 +- ui/tests/studio_viewer.vitest.ts | 56 +- ui/tests/viewer_vue_components.vitest.ts | 12 +- ui/theme/theme-comfy.css | 582 +- ui/vue/components/common/TagsEditor.vue | 17 +- ui/vue/components/viewer/ViewerPortal.vue | 6 +- .../components/viewer/studio/StudioFxDefs.vue | 88 + .../components/viewer/studio/StudioGuides.vue | 82 + .../viewer/studio/StudioImageStage.vue | 174 +- .../viewer/studio/StudioModel3D.vue | 46 + .../components/viewer/studio/StudioPlayer.vue | 308 +- .../components/viewer/studio/StudioProbe.vue | 110 + .../components/viewer/studio/StudioScopes.vue | 106 + .../components/viewer/studio/StudioSlider.vue | 94 + .../viewer/studio/StudioToolRail.vue | 472 ++ .../components/viewer/studio/StudioViewer.vue | 312 +- .../components/viewer/studio/StudioZebra.vue | 36 + 43 files changed, 10766 insertions(+), 5687 deletions(-) rename dist/chunks/{FloatingViewer-DaVFZWfj.js => FloatingViewer-BWnwwSd7.js} (99%) rename dist/chunks/{LiveStreamTracker-qLlvARw8.js => LiveStreamTracker-VoGYaNV3.js} (97%) rename dist/chunks/{SidebarWorkflowSection-F3hoMYG1.js => SidebarWorkflowSection-DrSf3i6L.js} (93%) delete mode 100644 dist/chunks/StudioPlayer-DXSy5UA5.js create mode 100644 dist/chunks/StudioPlayer-ZPvmvcGX.js rename dist/chunks/{TagsEditor-qDIeaA8P.js => TagsEditor-CZP7xeZ3.js} (73%) create mode 100644 dist/chunks/ViewerPortal-DMaFAqG8.js delete mode 100644 dist/chunks/ViewerPortal-wTimKJbx.js rename dist/chunks/{events-cBMXVULQ.js => events-CttACGx4.js} (96%) rename dist/chunks/{floatingViewerManager-CKeu6wKp.js => floatingViewerManager-CLgIT9uN.js} (99%) rename dist/chunks/{genInfo-B3LeL9TU.js => genInfo-B9wv7JDq.js} (91%) rename dist/chunks/{mjr-primevue-3mpaVb1C.js => mjr-primevue-C07IsEdU.js} (79%) rename dist/chunks/{mjr-vue-vendor-B23qUCEw.js => mjr-vue-vendor-CEDOnn2t.js} (74%) rename dist/chunks/{model3dRenderer-B-J9oQzQ.js => model3dRenderer-CIUrxTBK.js} (99%) rename dist/chunks/{openMajoorSettings-B9ZJ7bmZ.js => openMajoorSettings-Do4UDwGh.js} (99%) rename dist/chunks/{sideBySide-BLNTzu0A.js => sideBySide-FiIpKO3N.js} (99%) rename dist/chunks/{viewerOpenRequest-_DqD1rXA.js => viewerOpenRequest-CZXk8yvU.js} (99%) rename dist/chunks/{viewerRuntimeHosts-CW2DfHq_.js => viewerRuntimeHosts-XPTU8ZhU.js} (99%) create mode 100644 ui/features/viewer/studio/studioFx.ts create mode 100644 ui/features/viewer/studio/studioSampler.ts create mode 100644 ui/tests/studio_fx.vitest.ts create mode 100644 ui/vue/components/viewer/studio/StudioFxDefs.vue create mode 100644 ui/vue/components/viewer/studio/StudioGuides.vue create mode 100644 ui/vue/components/viewer/studio/StudioModel3D.vue create mode 100644 ui/vue/components/viewer/studio/StudioProbe.vue create mode 100644 ui/vue/components/viewer/studio/StudioScopes.vue create mode 100644 ui/vue/components/viewer/studio/StudioSlider.vue create mode 100644 ui/vue/components/viewer/studio/StudioToolRail.vue create mode 100644 ui/vue/components/viewer/studio/StudioZebra.vue diff --git a/CHANGELOG.md b/CHANGELOG.md index af1c9f96..c4bb9039 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,11 +31,14 @@ All notable changes to this project are documented in this file. - **`mjr_am_backend.adapters.tools` missing from Registry installs**: `.comfyignore`'s unanchored `tools/` pattern also matched `mjr_am_backend/adapters/tools/`, stripping the ExifTool/FFProbe adapters out of every Registry-published package and causing `ModuleNotFoundError: No module named 'mjr_am_backend.adapters.tools'` at startup. The pattern is now anchored to the repo-root `/tools/` dev-scripts folder only. ### New Features (viewer) -- **Studio viewer (new default main viewer)**: a simpler, modern viewer for reviewing generations — header with navigation and file summary, zoom/pan image stage with transparency checkerboard, a new video/audio player (frame stepping, frame counter, A-B loop, speed, volume, fullscreen, save frame as PNG, auto-hiding controls), an inspector with rating, tags and the same Generation / Workflow / File data as the asset sidebar, and a filmstrip. Keyboard-first (see the viewer tutorial). Compare modes, 3D models and the analysis tools stay in the classic viewer (one click away); *Viewer → Use the classic viewer* switches back entirely. +- **Studio viewer (new default main viewer)**: a simpler, modern viewer for reviewing generations — header with navigation and file summary, zoom/pan image stage with transparency checkerboard, a new video/audio player (frame stepping, frame counter, A-B loop, speed, volume, fullscreen, save frame as PNG, auto-hiding controls), an inspector with rating, tags and the same Generation / Workflow / File data as the asset sidebar, and a filmstrip. Keyboard-first (see the viewer tutorial). *Viewer → Use the classic viewer* switches back entirely. - **Floating viewer: Studio player and refreshed look**: in Simple mode, video and audio now play in the Studio player (compact, width-aware controls; same frame stepping, A-B loop, speed, volume, fullscreen and frame export as the main viewer), keeping the floating viewer's keyboard forwarding, mute/speed persistence and media release. The floating window gets the Studio styling (flat buttons that light up on hover or when active, softer window chrome, neutral stage). Compare modes keep their synchronised players; *Use the classic viewer* also restores the legacy floating player. +- **Studio viewer: every tool of the classic viewer, as a HUD**: a tool rail on the left of the stage brings channels (R/G/B/alpha/luma), exposure and gamma, zebra, histogram / waveform scopes, composition guides (thirds, golden, centre, safe areas), aspect-ratio masks, pixel probe, loupe, copy to clipboard and A/B compare (wipe ↔/↕, side by side, difference, add, subtract, multiply, screen) with B selection, pin and swap. Colour tools run on the GPU and work on playing video; video compare keeps both players in sync. 3D models and the grid's A/B / side-by-side actions now open in the Studio viewer too, and audio files show a live spectrum. New shortcuts: `C`, `B`, `X`, `Z`, `S`, `G`, `P`, `L`, `R`, `Ctrl+C`. + ### Fixed (follow-ups) +- **Studio viewer shortcuts after navigating**: moving to another asset focused the tag field, so the next shortcuts were typed into it. The inspector's tag editor no longer grabs focus. - **Search by part of a file name**: typing `F` (or `flow`) only found names with a *word starting* with it (`Flux…`, `field…`), never `sunflower.png` or `ComfyUI_…`. Single-word searches now also list file names that contain the text (ranked after word matches); `_` and `%` are matched literally. Multi-word and quoted searches are unchanged. - **Sidecar JSON added after a file was indexed** is now picked up: the watcher maps a new/changed `.json` / `.json` to its media, invalidates that file's metadata cache and scan journal, and forces a re-extraction (a non-incremental re-index no longer trusts an existing metadata row when the cache was invalidated). - **Duplicate index rows for one file (Windows)**: rows whose paths differ only by case or separator (left by older versions) are merged at startup, keeping the highest rating, all tags, the stack cover, execution ids and the embedding. diff --git a/dist/chunks/FloatingViewer-DaVFZWfj.js b/dist/chunks/FloatingViewer-BWnwwSd7.js similarity index 99% rename from dist/chunks/FloatingViewer-DaVFZWfj.js rename to dist/chunks/FloatingViewer-BWnwwSd7.js index c865debd..41cd6a82 100644 --- a/dist/chunks/FloatingViewer-DaVFZWfj.js +++ b/dist/chunks/FloatingViewer-BWnwwSd7.js @@ -1,14 +1,14 @@ -import { $t as e, g as t, y as n } from "./viewerRuntimeHosts-CW2DfHq_.js"; -import { C as r, H as i, I as a, M as o, O as s, P as c, V as l, at as u, j as d, m as f, o as p, r as m, v as h, w as g, x as _, z as v } from "./events-cBMXVULQ.js"; +import { $t as e, g as t, y as n } from "./viewerRuntimeHosts-XPTU8ZhU.js"; +import { C as r, H as i, I as a, M as o, O as s, P as c, V as l, at as u, j as d, m as f, o as p, r as m, v as h, w as g, x as _, z as v } from "./events-CttACGx4.js"; import { a as y, i as b, o as x, s as S } from "./graphTraversal-DTdQWkn5.js"; -import { D as C, _ as w, a as T, b as E, g as D, i as O, y as k } from "./viewerOpenRequest-_DqD1rXA.js"; -import { r as A, tt as j, u as M, v as N } from "./SidebarWorkflowSection-F3hoMYG1.js"; -import { _ as P, a as F, c as I, d as L, f as R, g as z, h as ee, i as B, l as V, m as te, o as ne, p as H, r as re, s as U, t as ie, u as W, v as ae } from "./openMajoorSettings-B9ZJ7bmZ.js"; -import { F as oe } from "./mjr-primevue-3mpaVb1C.js"; -import { a as se, n as ce, r as le } from "./model3dRenderer-B-J9oQzQ.js"; +import { D as C, _ as w, a as T, b as E, g as D, i as O, y as k } from "./viewerOpenRequest-CZXk8yvU.js"; +import { r as A, tt as j, u as M, v as N } from "./SidebarWorkflowSection-DrSf3i6L.js"; +import { _ as P, a as F, c as I, d as L, f as R, g as z, h as ee, i as B, l as V, m as te, o as ne, p as H, r as re, s as U, t as ie, u as W, v as ae } from "./openMajoorSettings-Do4UDwGh.js"; +import { I as oe } from "./mjr-primevue-C07IsEdU.js"; +import { a as se, n as ce, r as le } from "./model3dRenderer-CIUrxTBK.js"; import { i as ue, o as de, r as fe, t as pe } from "./geninfoParser-CgHp-y-n.js"; -import { t as me } from "./StudioPlayer-DXSy5UA5.js"; -import { t as he } from "./genInfo-B3LeL9TU.js"; +import { t as me } from "./StudioPlayer-ZPvmvcGX.js"; +import { t as he } from "./genInfo-B9wv7JDq.js"; // ui/features/viewer/floatingViewerConstants.ts var G = Object.freeze({ SIMPLE: "simple", diff --git a/dist/chunks/LiveStreamTracker-qLlvARw8.js b/dist/chunks/LiveStreamTracker-VoGYaNV3.js similarity index 97% rename from dist/chunks/LiveStreamTracker-qLlvARw8.js rename to dist/chunks/LiveStreamTracker-VoGYaNV3.js index a267d080..ec97b943 100644 --- a/dist/chunks/LiveStreamTracker-qLlvARw8.js +++ b/dist/chunks/LiveStreamTracker-VoGYaNV3.js @@ -1,5 +1,5 @@ -import { Z as e, o as t, r as n } from "./events-cBMXVULQ.js"; -import { t as r } from "./floatingViewerManager-CKeu6wKp.js"; +import { Z as e, o as t, r as n } from "./events-CttACGx4.js"; +import { t as r } from "./floatingViewerManager-CLgIT9uN.js"; // ui/features/viewer/LiveStreamTracker.ts var i = !1, a = null, o = null, s = null, c = null, l = null, u = null, d = null, f = null, p = 0, m = 0, h = !1, g = 400, _ = "kj_preview_override", v = /* @__PURE__ */ new Set([ "image/jpeg", diff --git a/dist/chunks/SidebarWorkflowSection-F3hoMYG1.js b/dist/chunks/SidebarWorkflowSection-DrSf3i6L.js similarity index 93% rename from dist/chunks/SidebarWorkflowSection-F3hoMYG1.js rename to dist/chunks/SidebarWorkflowSection-DrSf3i6L.js index a2f09bc4..60233521 100644 --- a/dist/chunks/SidebarWorkflowSection-F3hoMYG1.js +++ b/dist/chunks/SidebarWorkflowSection-DrSf3i6L.js @@ -1,9 +1,9 @@ -import { $ as e, $t as t, At as n, Bt as r, Ct as i, Dt as a, Et as o, Ft as s, Gt as c, Ht as l, I as u, It as d, K as f, Kt as p, Mt as m, N as h, Nt as g, O as _, Ot as v, Pt as y, Q as b, Qt as x, R as S, Rt as C, S as ee, St as te, T as ne, Tt as w, Ut as T, Vt as re, X as ie, Y as E, Yt as ae, Z as oe, Zt as se, at as ce, cn as le, ct as ue, dt as de, et as D, gt as fe, it as pe, jt as me, k as he, kt as ge, ln as _e, lt as ve, nt as ye, ot as be, p as xe, rt as Se, tn as Ce, tt as we, ut as Te, w as Ee, wt as De } from "./viewerRuntimeHosts-CW2DfHq_.js"; -import { G as Oe, J as ke, N as Ae, R as je, T as Me, Tt as Ne, X as Pe, c as Fe, d as Ie, f as Le, h as Re, ht as ze, j as Be, l as Ve, m as O, o as k, p as He, rt as Ue, s as A, u as We, x as Ge, y as Ke } from "./events-cBMXVULQ.js"; -import { J as qe, L as Je, R as Ye, Z as Xe, _ as Ze, g as Qe, m as $e, t as et } from "./viewerOpenRequest-_DqD1rXA.js"; -import { t as tt } from "./floatingViewerManager-CKeu6wKp.js"; -import { A as nt, B as rt, C as j, D as it, E as M, H as N, K as at, N as ot, O as P, S as st, T as F, W as I, X as ct, Y as lt, _ as ut, a as dt, b as ft, c as pt, d as mt, dt as ht, f as gt, ft as L, g as _t, h as vt, i as yt, it as R, j as bt, k as z, l as xt, m as St, n as Ct, o as wt, p as Tt, pt as B, q as Et, r as Dt, rt as Ot, s as kt, t as At, u as jt, ut as V, y as Mt, z as Nt } from "./mjr-primevue-3mpaVb1C.js"; -import { t as Pt } from "./mjr-vue-vendor-B23qUCEw.js"; +import { $ as e, $t as t, At as n, Bt as r, Ct as i, Dt as a, Et as o, Ft as s, Gt as c, Ht as l, I as u, It as d, K as f, Kt as p, Mt as m, N as h, Nt as g, O as _, Ot as v, Pt as y, Q as b, Qt as x, R as S, Rt as C, S as ee, St as te, T as ne, Tt as w, Ut as T, Vt as re, X as ie, Y as E, Yt as ae, Z as oe, Zt as se, at as ce, cn as le, ct as ue, dt as de, et as D, gt as fe, it as pe, jt as me, k as he, kt as ge, ln as _e, lt as ve, nt as ye, ot as be, p as xe, rt as Se, tn as Ce, tt as we, ut as Te, w as Ee, wt as De } from "./viewerRuntimeHosts-XPTU8ZhU.js"; +import { G as Oe, J as ke, N as Ae, R as je, T as Me, Tt as Ne, X as Pe, c as Fe, d as Ie, f as Le, h as Re, ht as ze, j as Be, l as Ve, m as O, o as k, p as He, rt as Ue, s as A, u as We, x as Ge, y as Ke } from "./events-CttACGx4.js"; +import { J as qe, L as Je, R as Ye, Z as Xe, _ as Ze, g as Qe, m as $e, t as et } from "./viewerOpenRequest-CZXk8yvU.js"; +import { t as tt } from "./floatingViewerManager-CLgIT9uN.js"; +import { $ as nt, C as j, D as rt, E as M, H as it, J as at, K as N, M as ot, O as P, P as st, Q as ct, S as lt, T as F, V as ut, W as I, X as dt, _ as ft, a as pt, b as mt, c as ht, d as gt, f as _t, g as vt, gt as L, h as yt, ht as R, i as bt, j as xt, k as z, l as St, m as Ct, mt as wt, n as Tt, o as Et, ot as Dt, p as Ot, pt as B, r as kt, s as At, st as V, t as jt, u as Mt, y as Nt } from "./mjr-primevue-C07IsEdU.js"; +import { t as Pt } from "./mjr-vue-vendor-CEDOnn2t.js"; import { a as Ft, i as It, n as Lt, o as Rt, r as zt, t as Bt } from "./geninfoParser-CgHp-y-n.js"; // ui/app/settings/settingsUtils.ts var H = (e, t) => { @@ -2697,7 +2697,7 @@ function Fr() { title: "" }; } -var Y = Ot({ +var Y = Dt({ portalOwnerId: "", mountedPortalIds: [], main: Fr(), @@ -3918,7 +3918,7 @@ function Oa(e, t = null) { }; } // ui/features/workflows/workflowPickerState.ts -var X = Ot({ +var X = Dt({ open: !1, mode: "workflow", title: "", @@ -3947,32 +3947,32 @@ function ja(e = null) { } // ui/vue/majoorPrimeVue.ts var Ma = { - Button: gt, - Checkbox: mt, - InputText: jt, - Textarea: xt, - Select: kt, - ToggleButton: wt, - Badge: Tt, - Tag: dt, - Dialog: yt, - Menu: Dt, - Listbox: Ct, - Tree: At, - VirtualScroller: pt + Button: _t, + Checkbox: gt, + InputText: Mt, + Textarea: St, + Select: At, + ToggleButton: Et, + Badge: Ot, + Tag: pt, + Dialog: bt, + Menu: kt, + Listbox: Tt, + Tree: jt, + VirtualScroller: ht }; function Na(e) { - return e.use(_t, { + return e.use(vt, { ripple: !1, unstyled: !0, zIndex: { overlay: 10100 } - }), e.use(vt), e.use(St), Object.entries(Ma).forEach(([t, n]) => { + }), e.use(yt), e.use(Ct), Object.entries(Ma).forEach(([t, n]) => { e.component(`M${t}`, n); }), e; } // ui/vue/createVueApp.ts function Pa(e, t = void 0) { - let n = Pt(), r = ut(e, t); + let n = Pt(), r = ft(e, t); return r.use(n), Na(r), { app: r, pinia: n @@ -4165,7 +4165,7 @@ var Xa = { display: "flex", "flex-direction": "column", gap: "6px" -} }, Qa = ["title"], $a = ["title"], eo = /* @__PURE__ */ ot({ +} }, Qa = ["title"], $a = ["title"], eo = /* @__PURE__ */ st({ __name: "SidebarFileInfoSection", props: { asset: {} }, setup(e) { @@ -4315,14 +4315,14 @@ var Xa = { tooltip: "ComfyUI workflow identifier (from workflow.id in extra_data)" }), f.filter((e) => a(e.value)); }); - return (e, t) => c.value.length ? (N(), z("div", Xa, [t[0] ||= M("div", { style: { + return (e, t) => c.value.length ? (I(), z("div", Xa, [t[0] ||= M("div", { style: { "font-size": "12px", "font-weight": "700", color: "#607d8b", "margin-bottom": "8px", "text-transform": "uppercase", "letter-spacing": "0.4px" - } }, " File Info ", -1), M("div", Za, [(N(!0), z(j, null, I(c.value, (e) => (N(), z("div", { + } }, " File Info ", -1), M("div", Za, [(I(!0), z(j, null, N(c.value, (e) => (I(), z("div", { key: e.label, style: { display: "flex", @@ -4337,10 +4337,10 @@ var Xa = { opacity: "0.68", "min-width": "92px" } - }, B(e.label), 9, Qa), M("div", { - style: L(e.valueStyle || "font-size: 12px; text-align: right; word-break: break-word"), + }, L(e.label), 9, Qa), M("div", { + style: R(e.valueStyle || "font-size: 12px; text-align: right; word-break: break-word"), title: String(e.value || "") - }, B(e.value), 13, $a)]))), 128))])])) : P("", !0); + }, L(e.value), 13, $a)]))), 128))])])) : P("", !0); } }), to = /* @__PURE__ */ new Set([ "png", @@ -5175,13 +5175,13 @@ var Vo = ["title"], Ho = ["src"], Uo = { "font-size": "16px", "pointer-events": "none" } -}, Jo = /* @__PURE__ */ ot({ +}, Jo = /* @__PURE__ */ st({ __name: "GenerationInputThumb", props: { inputFile: {} }, setup(e) { - let n = e, r = R(0), i = R(!1), a = null; + let n = e, r = V(0), i = V(!1), a = null; function o() { - return a ||= import("./floatingViewerManager-CKeu6wKp.js").then((e) => e.n), a; + return a ||= import("./floatingViewerManager-CLgIT9uN.js").then((e) => e.n), a; } function s() { return (Array.isArray(n.inputFile?.previewCandidates) ? n.inputFile.previewCandidates : [])[r.value] || ""; @@ -5333,9 +5333,9 @@ var Vo = ["title"], Ho = ["src"], Uo = { function C() { return !!n.inputFile?.isAudio; } - return (t, n) => (N(), z("div", { + return (t, n) => (I(), z("div", { title: `${e.inputFile.filename} (click to copy, double-click to open in new tab)`, - style: L({ + style: R({ width: "64px", height: "64px", background: "#222", @@ -5352,7 +5352,7 @@ var Vo = ["title"], Ho = ["src"], Uo = { onClick: l, onDblclick: u, onContextmenu: b - }, [e.inputFile.isVideo ? (N(), z("video", { + }, [e.inputFile.isVideo ? (I(), z("video", { key: 0, src: s(), muted: "", @@ -5367,10 +5367,10 @@ var Vo = ["title"], Ho = ["src"], Uo = { onError: c, onMouseover: x, onMouseout: S - }, null, 40, Ho)) : C() ? (N(), z("div", Uo, [n[0] ||= M("div", { style: { + }, null, 40, Ho)) : C() ? (I(), z("div", Uo, [n[0] ||= M("div", { style: { "font-size": "18px", "line-height": "1" - } }, "♪", -1), M("div", Wo, B(e.inputFile.filename), 1)])) : (N(), z("img", { + } }, "♪", -1), M("div", Wo, L(e.inputFile.filename), 1)])) : (I(), z("img", { key: 2, src: s(), style: { @@ -5379,7 +5379,7 @@ var Vo = ["title"], Ho = ["src"], Uo = { "object-fit": "cover" }, onError: c - }, null, 40, Go)), e.inputFile.role && e.inputFile.role !== "secondary" ? (N(), z("div", Ko, B(e.inputFile.roleLabel), 1)) : e.inputFile.isVideo ? (N(), z("div", qo, " Play ")) : P("", !0)], 44, Vo)); + }, null, 40, Go)), e.inputFile.role && e.inputFile.role !== "secondary" ? (I(), z("div", Ko, L(e.inputFile.roleLabel), 1)) : e.inputFile.isVideo ? (I(), z("div", qo, " Play ")) : P("", !0)], 44, Vo)); } }), Yo = { key: 0, @@ -5872,11 +5872,11 @@ var Vo = ["title"], Ho = ["src"], Uo = { display: "flex", gap: "8px", "flex-wrap": "wrap" -} }, Jc = /* @__PURE__ */ ot({ +} }, Jc = /* @__PURE__ */ st({ __name: "SidebarGenerationSection", props: { asset: {} }, setup(e) { - let t = e, n = R(0), r = R(0), i = R(""), a = R(O("action.copy", "Copy")), o = R(O("action.generate", "Generate")), s = R(!1), l = R(d()), u = 0; + let t = e, n = V(0), r = V(0), i = V(""), a = V(O("action.copy", "Copy")), o = V(O("action.generate", "Generate")), s = V(!1), l = V(d()), u = 0; function d() { return { scoreText: "...", @@ -6113,9 +6113,9 @@ var Vo = ["title"], Ho = ["src"], Uo = { console.debug?.(e); } } - return Et(() => t.asset, () => { + return dt(() => t.asset, () => { n.value = 0, r.value = 0, i.value = String(t.asset?.enhanced_caption || "").trim(), a.value = O("action.copy", "Copy"), o.value = O("action.generate", "Generate"); - }, { immediate: !0 }), Et(() => [ + }, { immediate: !0 }), dt(() => [ t.asset?.id, _.value.kind, _.value.showAlignment, @@ -6124,9 +6124,9 @@ var Vo = ["title"], Ho = ["src"], Uo = { se(); }, { immediate: !0 }), (e, t) => { let r = at("MButton"); - return _.value.kind === "empty" ? P("", !0) : (N(), z("div", Yo, [ - _.value.workflowType ? (N(), z("div", Xo, [M("span", Zo, B(V(O)("viewer.workflow", "Workflow")), 1), M("div", Qo, [M("span", { - title: V(O)("sidebar.generation.workflowEngine", "Workflow engine: {value}", { value: _.value.workflowType }), + return _.value.kind === "empty" ? P("", !0) : (I(), z("div", Yo, [ + _.value.workflowType ? (I(), z("div", Xo, [M("span", Zo, L(B(O)("viewer.workflow", "Workflow")), 1), M("div", Qo, [M("span", { + title: B(O)("sidebar.generation.workflowEngine", "Workflow engine: {value}", { value: _.value.workflowType }), style: { background: "#2196F3", color: "white", @@ -6136,9 +6136,9 @@ var Vo = ["title"], Ho = ["src"], Uo = { "font-size": "10px", "letter-spacing": "0.2px" } - }, B(_.value.workflowLabel || _.value.workflowType), 9, $o), _.value.workflowBadge ? (N(), z("span", { + }, L(_.value.workflowLabel || _.value.workflowType), 9, $o), _.value.workflowBadge ? (I(), z("span", { key: 0, - title: V(O)("sidebar.generation.apiProvider", "API provider: {value}", { value: _.value.workflowBadge }), + title: B(O)("sidebar.generation.apiProvider", "API provider: {value}", { value: _.value.workflowBadge }), style: { background: "rgba(255,255,255,0.08)", color: "var(--fg-color, #eee)", @@ -6149,41 +6149,41 @@ var Vo = ["title"], Ho = ["src"], Uo = { "font-size": "10px", "letter-spacing": "0.2px" } - }, B(_.value.workflowBadge), 9, es)) : P("", !0)])])) : P("", !0), - _.value.isOverride ? (N(), z("div", { + }, L(_.value.workflowBadge), 9, es)) : P("", !0)])])) : P("", !0), + _.value.isOverride ? (I(), z("div", { key: 1, - style: L(m("#00BCD4", { + style: R(m("#00BCD4", { emphasis: !0, startAlpha: .14, endAlpha: .08 })) - }, [M("div", ts, [M("span", ns, B(V(O)("sidebar.generation.override", "Override")), 1), M("span", rs, B(_.value.overrideLabel), 1)])], 4)) : P("", !0), - _.value.isTruncated ? (N(), z("div", { + }, [M("div", ts, [M("span", ns, L(B(O)("sidebar.generation.override", "Override")), 1), M("span", rs, L(_.value.overrideLabel), 1)])], 4)) : P("", !0), + _.value.isTruncated ? (I(), z("div", { key: 2, - style: L(m("#FF9800", { + style: R(m("#FF9800", { emphasis: !0, startAlpha: .12, endAlpha: .08 })) - }, [M("div", is, B(V(O)("sidebar.generation.metadataTruncated", "Metadata Truncated")), 1), M("div", as, B(V(O)("sidebar.generation.metadataTruncatedBody", "Generation data is incomplete because it exceeded the size limit.")), 1)], 4)) : P("", !0), - _.value.kind === "media-only" ? (N(), z("div", { + }, [M("div", is, L(B(O)("sidebar.generation.metadataTruncated", "Metadata Truncated")), 1), M("div", as, L(B(O)("sidebar.generation.metadataTruncatedBody", "Generation data is incomplete because it exceeded the size limit.")), 1)], 4)) : P("", !0), + _.value.kind === "media-only" ? (I(), z("div", { key: 3, - style: L(m("#9E9E9E", { + style: R(m("#9E9E9E", { emphasis: !0, startAlpha: .1, endAlpha: .06 })) - }, [M("div", os, B(V(O)("sidebar.generation.generationData", "Generation Data")), 1), M("div", ss, B(_.value.mediaOnlyMessage), 1)], 4)) : P("", !0), - _.value.kind === "full" ? (N(), z(j, { key: 4 }, [ - _.value.ltxDirector ? (N(), z("div", { + }, [M("div", os, L(B(O)("sidebar.generation.generationData", "Generation Data")), 1), M("div", ss, L(_.value.mediaOnlyMessage), 1)], 4)) : P("", !0), + _.value.kind === "full" ? (I(), z(j, { key: 4 }, [ + _.value.ltxDirector ? (I(), z("div", { key: 0, - style: L(m("#26C6DA", { + style: R(m("#26C6DA", { emphasis: !0, startAlpha: .15, endAlpha: .08 })) }, [ - M("div", cs, [M("div", ls, B(_.value.ltxDirector.title || "LTX Director"), 1), t[8] ||= M("span", { style: { + M("div", cs, [M("div", ls, L(_.value.ltxDirector.title || "LTX Director"), 1), t[8] ||= M("span", { style: { "font-size": "10px", "font-weight": "700", color: "#26C6DA", @@ -6192,7 +6192,7 @@ var Vo = ["title"], Ho = ["src"], Uo = { "border-radius": "999px", padding: "2px 8px" } }, " Director ", -1)]), - _.value.ltxDirector.fields.length ? (N(), z("div", us, [(N(!0), z(j, null, I(_.value.ltxDirector.fields, (e) => (N(), z("div", { + _.value.ltxDirector.fields.length ? (I(), z("div", us, [(I(!0), z(j, null, N(_.value.ltxDirector.fields, (e) => (I(), z("div", { key: `ltx-field-${e.label}`, style: { border: "1px solid rgba(255,255,255,0.10)", @@ -6201,8 +6201,8 @@ var Vo = ["title"], Ho = ["src"], Uo = { padding: "7px 8px", "min-width": "0" } - }, [M("div", ds, B(e.label), 1), M("div", fs, B(e.value), 1)]))), 128))])) : P("", !0), - _.value.ltxDirector.globalPrompt ? (N(), z("div", ps, [t[9] ||= M("div", { style: { + }, [M("div", ds, L(e.label), 1), M("div", fs, L(e.value), 1)]))), 128))])) : P("", !0), + _.value.ltxDirector.globalPrompt ? (I(), z("div", ps, [t[9] ||= M("div", { style: { "font-size": "10px", "font-weight": "800", color: "#66BB6A", @@ -6210,7 +6210,7 @@ var Vo = ["title"], Ho = ["src"], Uo = { "letter-spacing": "0.45px", "margin-bottom": "6px" } }, " Global Prompt ", -1), M("div", { - title: V(O)("action.clickToCopy", "Click to copy"), + title: B(O)("action.clickToCopy", "Click to copy"), style: { "font-size": "12px", color: "var(--fg-color,#eee)", @@ -6220,8 +6220,8 @@ var Vo = ["title"], Ho = ["src"], Uo = { cursor: "pointer" }, onClick: t[0] ||= (e) => E(_.value.ltxDirector.globalPrompt, e.currentTarget) - }, B(_.value.ltxDirector.globalPrompt), 9, ms)])) : P("", !0), - _.value.ltxDirector.segments.length ? (N(), z("div", hs, [(N(!0), z(j, null, I(_.value.ltxDirector.segments, (e) => (N(), z("div", { + }, L(_.value.ltxDirector.globalPrompt), 9, ms)])) : P("", !0), + _.value.ltxDirector.segments.length ? (I(), z("div", hs, [(I(!0), z(j, null, N(_.value.ltxDirector.segments, (e) => (I(), z("div", { key: e.key, style: { border: "1px solid rgba(38,198,218,0.30)", @@ -6229,7 +6229,7 @@ var Vo = ["title"], Ho = ["src"], Uo = { background: "rgba(38,198,218,0.075)", padding: "10px" } - }, [M("div", gs, [M("div", _s, B(e.label), 1), M("div", vs, [e.inLabel ? (N(), z("span", ys, " in " + B(e.inLabel), 1)) : P("", !0), e.outLabel ? (N(), z("span", bs, " out " + B(e.outLabel), 1)) : P("", !0)])]), M("div", xs, [e.filename ? (N(), it(Jo, { + }, [M("div", gs, [M("div", _s, L(e.label), 1), M("div", vs, [e.inLabel ? (I(), z("span", ys, " in " + L(e.inLabel), 1)) : P("", !0), e.outLabel ? (I(), z("span", bs, " out " + L(e.outLabel), 1)) : P("", !0)])]), M("div", xs, [e.filename ? (I(), rt(Jo, { key: 0, "input-file": { filename: e.filename, @@ -6240,9 +6240,9 @@ var Vo = ["title"], Ho = ["src"], Uo = { isAudio: e.isAudio, previewCandidates: e.previewCandidates } - }, null, 8, ["input-file"])) : P("", !0), M("div", Ss, [e.prompt ? (N(), z("div", { + }, null, 8, ["input-file"])) : P("", !0), M("div", Ss, [e.prompt ? (I(), z("div", { key: 0, - title: V(O)("action.clickToCopy", "Click to copy"), + title: B(O)("action.clickToCopy", "Click to copy"), style: { "font-size": "12px", color: "var(--fg-color,#eee)", @@ -6252,17 +6252,17 @@ var Vo = ["title"], Ho = ["src"], Uo = { cursor: "pointer" }, onClick: (t) => E(e.prompt, t.currentTarget) - }, B(e.prompt), 9, Cs)) : P("", !0), e.filename || e.type ? (N(), z("div", ws, [e.type ? (N(), z("span", Ts, B(e.type), 1)) : P("", !0), e.filename ? (N(), z("span", Es, B(e.filename), 1)) : P("", !0)])) : P("", !0)])])]))), 128))])) : P("", !0) + }, L(e.prompt), 9, Cs)) : P("", !0), e.filename || e.type ? (I(), z("div", ws, [e.type ? (I(), z("span", Ts, L(e.type), 1)) : P("", !0), e.filename ? (I(), z("span", Es, L(e.filename), 1)) : P("", !0)])) : P("", !0)])])]))), 128))])) : P("", !0) ], 4)) : P("", !0), - _.value.ideogram ? (N(), z("div", { + _.value.ideogram ? (I(), z("div", { key: 1, - style: L(m("#FFB300", { + style: R(m("#FFB300", { emphasis: !0, startAlpha: .15, endAlpha: .08 })) }, [ - M("div", Ds, [M("div", Os, B(_.value.ideogram.title || "Ideogram 4"), 1), t[10] ||= M("span", { style: { + M("div", Ds, [M("div", Os, L(_.value.ideogram.title || "Ideogram 4"), 1), t[10] ||= M("span", { style: { "font-size": "10px", "font-weight": "700", color: "#FFCA28", @@ -6271,7 +6271,7 @@ var Vo = ["title"], Ho = ["src"], Uo = { "border-radius": "999px", padding: "2px 8px" } }, " Prompt JSON ", -1)]), - _.value.ideogram.fields.length ? (N(), z("div", ks, [(N(!0), z(j, null, I(_.value.ideogram.fields, (e) => (N(), z("div", { + _.value.ideogram.fields.length ? (I(), z("div", ks, [(I(!0), z(j, null, N(_.value.ideogram.fields, (e) => (I(), z("div", { key: `ideogram-field-${e.label}`, style: { border: "1px solid rgba(255,255,255,0.10)", @@ -6280,8 +6280,8 @@ var Vo = ["title"], Ho = ["src"], Uo = { padding: "7px 8px", "min-width": "0" } - }, [M("div", As, B(e.label), 1), M("div", js, B(e.value), 1)]))), 128))])) : P("", !0), - _.value.ideogram.highLevelDescription ? (N(), z("div", Ms, [t[11] ||= M("div", { style: { + }, [M("div", As, L(e.label), 1), M("div", js, L(e.value), 1)]))), 128))])) : P("", !0), + _.value.ideogram.highLevelDescription ? (I(), z("div", Ms, [t[11] ||= M("div", { style: { "font-size": "10px", "font-weight": "800", color: "#81C784", @@ -6289,7 +6289,7 @@ var Vo = ["title"], Ho = ["src"], Uo = { "letter-spacing": "0.45px", "margin-bottom": "6px" } }, " High Level Description ", -1), M("div", { - title: V(O)("action.clickToCopy", "Click to copy"), + title: B(O)("action.clickToCopy", "Click to copy"), style: { "font-size": "12px", color: "var(--fg-color,#eee)", @@ -6299,8 +6299,8 @@ var Vo = ["title"], Ho = ["src"], Uo = { cursor: "pointer" }, onClick: t[1] ||= (e) => E(_.value.ideogram.highLevelDescription, e.currentTarget) - }, B(_.value.ideogram.highLevelDescription), 9, Ns)])) : P("", !0), - _.value.ideogram.background ? (N(), z("div", Ps, [t[12] ||= M("div", { style: { + }, L(_.value.ideogram.highLevelDescription), 9, Ns)])) : P("", !0), + _.value.ideogram.background ? (I(), z("div", Ps, [t[12] ||= M("div", { style: { "font-size": "10px", "font-weight": "800", color: "#64B5F6", @@ -6308,7 +6308,7 @@ var Vo = ["title"], Ho = ["src"], Uo = { "letter-spacing": "0.45px", "margin-bottom": "6px" } }, " Background ", -1), M("div", { - title: V(O)("action.clickToCopy", "Click to copy"), + title: B(O)("action.clickToCopy", "Click to copy"), style: { "font-size": "12px", color: "var(--fg-color,#eee)", @@ -6318,8 +6318,8 @@ var Vo = ["title"], Ho = ["src"], Uo = { cursor: "pointer" }, onClick: t[2] ||= (e) => E(_.value.ideogram.background, e.currentTarget) - }, B(_.value.ideogram.background), 9, Fs)])) : P("", !0), - _.value.ideogram.elements.length ? (N(), z("div", Is, [(N(!0), z(j, null, I(_.value.ideogram.elements, (e) => (N(), z("div", { + }, L(_.value.ideogram.background), 9, Fs)])) : P("", !0), + _.value.ideogram.elements.length ? (I(), z("div", Is, [(I(!0), z(j, null, N(_.value.ideogram.elements, (e) => (I(), z("div", { key: e.key, style: { border: "1px solid rgba(255,179,0,0.30)", @@ -6328,10 +6328,10 @@ var Vo = ["title"], Ho = ["src"], Uo = { padding: "10px" } }, [ - M("div", Ls, [M("div", Rs, B(e.label), 1), e.bbox ? (N(), z("span", zs, " bbox " + B(e.bbox), 1)) : P("", !0)]), - e.description ? (N(), z("div", { + M("div", Ls, [M("div", Rs, L(e.label), 1), e.bbox ? (I(), z("span", zs, " bbox " + L(e.bbox), 1)) : P("", !0)]), + e.description ? (I(), z("div", { key: 0, - title: V(O)("action.clickToCopy", "Click to copy"), + title: B(O)("action.clickToCopy", "Click to copy"), style: { "font-size": "12px", color: "var(--fg-color,#eee)", @@ -6341,11 +6341,11 @@ var Vo = ["title"], Ho = ["src"], Uo = { cursor: "pointer" }, onClick: (t) => E(e.description, t.currentTarget) - }, B(e.description), 9, Bs)) : P("", !0), - e.palette.length ? (N(), z("div", Vs, [(N(!0), z(j, null, I(e.palette, (t) => (N(), z("span", { + }, L(e.description), 9, Bs)) : P("", !0), + e.palette.length ? (I(), z("div", Vs, [(I(!0), z(j, null, N(e.palette, (t) => (I(), z("span", { key: `${e.key}-${t}`, title: t, - style: L({ + style: R({ width: "18px", height: "18px", borderRadius: "4px", @@ -6364,7 +6364,7 @@ var Vo = ["title"], Ho = ["src"], Uo = { "text-transform": "uppercase", "letter-spacing": "0.45px" } }, " JSON sent to text encoder ", -1), M("pre", { - title: V(O)("action.clickToCopy", "Click to copy"), + title: B(O)("action.clickToCopy", "Click to copy"), style: { margin: "0", padding: "10px", @@ -6378,24 +6378,24 @@ var Vo = ["title"], Ho = ["src"], Uo = { cursor: "pointer" }, onClick: t[3] ||= (e) => E(_.value.ideogram.json, e.currentTarget) - }, B(_.value.ideogram.json), 9, Ws)]) + }, L(_.value.ideogram.json), 9, Ws)]) ], 4)) : P("", !0), - !_.value.ltxDirector && !_.value.ideogram && _.value.promptTabs.length ? (N(), z("div", { + !_.value.ltxDirector && !_.value.ideogram && _.value.promptTabs.length ? (I(), z("div", { key: 2, - style: L(m("#4CAF50", { + style: R(m("#4CAF50", { emphasis: !0, startAlpha: .16, endAlpha: .1 })) }, [ - M("div", Gs, B(V(O)("sidebar.generation.promptPipeline", "Prompt Pipeline ({count} variants)", { count: _.value.promptTabs.length })), 1), - M("div", Ks, [(N(!0), z(j, null, I(_.value.promptTabs, (e, t) => (N(), it(r, { + M("div", Gs, L(B(O)("sidebar.generation.promptPipeline", "Prompt Pipeline ({count} variants)", { count: _.value.promptTabs.length })), 1), + M("div", Ks, [(I(!0), z(j, null, N(_.value.promptTabs, (e, t) => (I(), rt(r, { key: e.label, type: "button", severity: "secondary", text: "", rounded: "", - style: L({ + style: R({ appearance: "none", border: n.value === t ? "1px solid #4CAF50" : "1px solid var(--border-color, rgba(255,255,255,0.12))", borderRadius: "999px", @@ -6409,10 +6409,10 @@ var Vo = ["title"], Ho = ["src"], Uo = { }), onClick: (e) => n.value = t }, { - default: lt(() => [nt(B(e.label), 1)]), + default: ct(() => [xt(L(e.label), 1)]), _: 2 }, 1032, ["style", "onClick"]))), 128))]), - (N(!0), z(j, null, I(_.value.promptTabs, (e, t) => ct((N(), z("div", { + (I(!0), z(j, null, N(_.value.promptTabs, (e, t) => nt((I(), z("div", { key: `${e.label}-panel`, style: { display: "flex", @@ -6425,7 +6425,7 @@ var Vo = ["title"], Ho = ["src"], Uo = { padding: "10px" } }, [ - M("div", qs, B(V(O)("sidebar.generation.positive", "POSITIVE")), 1), + M("div", qs, L(B(O)("sidebar.generation.positive", "POSITIVE")), 1), M("div", { style: { "font-size": "12px", @@ -6435,8 +6435,8 @@ var Vo = ["title"], Ho = ["src"], Uo = { cursor: "pointer" }, onClick: (t) => E(e.positive, t.currentTarget) - }, B(e.positive), 9, Js), - e.negative ? (N(), z(j, { key: 0 }, [M("div", Ys, B(V(O)("sidebar.generation.negative", "NEGATIVE")), 1), M("div", { + }, L(e.positive), 9, Js), + e.negative ? (I(), z(j, { key: 0 }, [M("div", Ys, L(B(O)("sidebar.generation.negative", "NEGATIVE")), 1), M("div", { style: { "font-size": "12px", color: "var(--fg-color, #ddd)", @@ -6445,21 +6445,21 @@ var Vo = ["title"], Ho = ["src"], Uo = { cursor: "pointer" }, onClick: (t) => E(e.negative, t.currentTarget) - }, B(e.negative), 9, Xs)], 64)) : P("", !0) - ])), [[ft, n.value === t]])), 128)) - ], 4)) : !_.value.ltxDirector && !_.value.ideogram && _.value.positivePrompt ? (N(), z("div", { + }, L(e.negative), 9, Xs)], 64)) : P("", !0) + ])), [[mt, n.value === t]])), 128)) + ], 4)) : !_.value.ltxDirector && !_.value.ideogram && _.value.positivePrompt ? (I(), z("div", { key: 3, - style: L(m("#4CAF50", { + style: R(m("#4CAF50", { emphasis: !0, startAlpha: .16, endAlpha: .1 })) - }, [M("div", Zs, [M("span", null, B(V(O)("sidebar.generation.positivePrompt", "Positive Prompt")), 1), _.value.positivePromptOverride ? (N(), z("span", { + }, [M("div", Zs, [M("span", null, L(B(O)("sidebar.generation.positivePrompt", "Positive Prompt")), 1), _.value.positivePromptOverride ? (I(), z("span", { key: 0, - style: L(g()), - title: V(O)("sidebar.generation.overrideTooltip", "This field was forced by Majoor Gen Info Override") - }, B(V(O)("sidebar.generation.override", "override")), 13, Qs)) : P("", !0)]), M("div", { - title: V(O)("action.clickToCopy", "Click to copy"), + style: R(g()), + title: B(O)("sidebar.generation.overrideTooltip", "This field was forced by Majoor Gen Info Override") + }, L(B(O)("sidebar.generation.override", "override")), 13, Qs)) : P("", !0)]), M("div", { + title: B(O)("action.clickToCopy", "Click to copy"), style: { "font-size": "12px", color: "var(--fg-color, rgba(255,255,255,0.9))", @@ -6469,20 +6469,20 @@ var Vo = ["title"], Ho = ["src"], Uo = { cursor: "pointer" }, onClick: t[4] ||= (e) => E(_.value.positivePrompt, e.currentTarget) - }, B(_.value.positivePrompt), 9, $s)], 4)) : P("", !0), - !_.value.ltxDirector && !_.value.ideogram && !_.value.promptTabs.length && _.value.negativePrompt ? (N(), z("div", { + }, L(_.value.positivePrompt), 9, $s)], 4)) : P("", !0), + !_.value.ltxDirector && !_.value.ideogram && !_.value.promptTabs.length && _.value.negativePrompt ? (I(), z("div", { key: 4, - style: L(m("#F44336", { + style: R(m("#F44336", { emphasis: !0, startAlpha: .16, endAlpha: .1 })) - }, [M("div", ec, [M("span", null, B(V(O)("sidebar.generation.negativePrompt", "Negative Prompt")), 1), _.value.negativePromptOverride ? (N(), z("span", { + }, [M("div", ec, [M("span", null, L(B(O)("sidebar.generation.negativePrompt", "Negative Prompt")), 1), _.value.negativePromptOverride ? (I(), z("span", { key: 0, - style: L(g()), - title: V(O)("sidebar.generation.overrideTooltip", "This field was forced by Majoor Gen Info Override") - }, B(V(O)("sidebar.generation.override", "override")), 13, tc)) : P("", !0)]), M("div", { - title: V(O)("action.clickToCopy", "Click to copy"), + style: R(g()), + title: B(O)("sidebar.generation.overrideTooltip", "This field was forced by Majoor Gen Info Override") + }, L(B(O)("sidebar.generation.override", "override")), 13, tc)) : P("", !0)]), M("div", { + title: B(O)("action.clickToCopy", "Click to copy"), style: { "font-size": "12px", color: "var(--fg-color, rgba(255,255,255,0.9))", @@ -6492,9 +6492,9 @@ var Vo = ["title"], Ho = ["src"], Uo = { cursor: "pointer" }, onClick: t[5] ||= (e) => E(_.value.negativePrompt, e.currentTarget) - }, B(_.value.negativePrompt), 9, nc)], 4)) : P("", !0) + }, L(_.value.negativePrompt), 9, nc)], 4)) : P("", !0) ], 64)) : P("", !0), - y.value ? (N(), z("div", { + y.value ? (I(), z("div", { key: 5, style: { background: "linear-gradient(135deg, rgba(0, 188, 212, 0.14) 0%, rgba(33, 150, 243, 0.10) 100%)", @@ -6505,27 +6505,27 @@ var Vo = ["title"], Ho = ["src"], Uo = { "flex-direction": "column", gap: "10px" }, - class: ht({ "mjr-ai-disabled-block": !v.value }) + class: wt({ "mjr-ai-disabled-block": !v.value }) }, [ - _.value.showAlignment ? (N(), z(j, { key: 0 }, [ - M("div", rc, [M("span", { title: V(O)("sidebar.generation.promptAlignmentTooltip", "How closely the generated image matches the prompt (SigLIP2 score)") }, B(V(O)("sidebar.generation.promptAlignment", "Prompt Alignment")), 9, ic)]), + _.value.showAlignment ? (I(), z(j, { key: 0 }, [ + M("div", rc, [M("span", { title: B(O)("sidebar.generation.promptAlignmentTooltip", "How closely the generated image matches the prompt (SigLIP2 score)") }, L(B(O)("sidebar.generation.promptAlignment", "Prompt Alignment")), 9, ic)]), M("div", ac, [ - M("div", oc, [M("div", { style: L({ + M("div", oc, [M("div", { style: R({ height: "100%", width: l.value.fillWidth, background: l.value.fillColor, borderRadius: "4px", transition: "width 0.6s ease, background 0.4s ease" }) }, null, 4)]), - M("span", { style: L({ + M("span", { style: R({ fontSize: "13px", fontWeight: "700", color: l.value.scoreColor, minWidth: "60px", textAlign: "right", fontFamily: "'Consolas', 'Monaco', monospace" - }) }, B(l.value.scoreText), 5), - M("span", { style: L({ + }) }, L(l.value.scoreText), 5), + M("span", { style: R({ fontSize: "9px", fontWeight: "700", padding: "2px 6px", @@ -6534,17 +6534,17 @@ var Vo = ["title"], Ho = ["src"], Uo = { color: l.value.qualityColor, textTransform: "uppercase", letterSpacing: "0.5px" - }) }, B(l.value.qualityText), 5) + }) }, L(l.value.qualityText), 5) ]), - l.value.aiStatusVisible ? (N(), z("div", sc, B(l.value.aiStatusText), 1)) : P("", !0) + l.value.aiStatusVisible ? (I(), z("div", sc, L(l.value.aiStatusText), 1)) : P("", !0) ], 64)) : P("", !0), - M("div", cc, [M("span", { title: V(O)("sidebar.generation.aiCaptionTooltip", "AI caption generated by Florence-2") }, B(_.value.captionLabel), 9, lc), M("div", uc, [bt(r, { + M("div", cc, [M("span", { title: B(O)("sidebar.generation.aiCaptionTooltip", "AI caption generated by Florence-2") }, L(_.value.captionLabel), 9, lc), M("div", uc, [ot(r, { type: "button", class: "mjr-ai-control", severity: "secondary", text: "", disabled: !x.value || s.value, - style: L([{ + style: R([{ border: "1px solid rgba(0,188,212,0.45)", background: "rgba(0,188,212,0.12)", color: "#00BCD4", @@ -6557,17 +6557,17 @@ var Vo = ["title"], Ho = ["src"], Uo = { opacity: x.value ? "1" : "0.6", cursor: x.value ? "pointer" : "default" }]), - onClick: st(ce, ["stop"]) + onClick: lt(ce, ["stop"]) }, { - default: lt(() => [nt(B(o.value), 1)]), + default: ct(() => [xt(L(o.value), 1)]), _: 1 - }, 8, ["disabled", "style"]), bt(r, { + }, 8, ["disabled", "style"]), ot(r, { type: "button", class: "mjr-ai-control", severity: "secondary", text: "", disabled: !S.value, - style: L([{ + style: R([{ border: "1px solid rgba(0,188,212,0.45)", background: "rgba(0,188,212,0.12)", color: "#00BCD4", @@ -6580,14 +6580,14 @@ var Vo = ["title"], Ho = ["src"], Uo = { opacity: S.value ? "1" : "0.6", cursor: S.value ? "pointer" : "default" }]), - onClick: st(le, ["stop"]) + onClick: lt(le, ["stop"]) }, { - default: lt(() => [nt(B(a.value), 1)]), + default: ct(() => [xt(L(a.value), 1)]), _: 1 }, 8, ["disabled", "style"])])]), M("div", { - title: v.value ? V(O)("sidebar.generation.copyCaptionTooltip", "Click to copy caption") : V(O)("sidebar.generation.aiCaptionDisabled", "AI caption controls are disabled"), - style: L({ + title: v.value ? B(O)("sidebar.generation.copyCaptionTooltip", "Click to copy caption") : B(O)("sidebar.generation.aiCaptionDisabled", "AI caption controls are disabled"), + style: R({ marginTop: "4px", padding: "8px", borderRadius: "6px", @@ -6601,27 +6601,27 @@ var Vo = ["title"], Ho = ["src"], Uo = { cursor: S.value ? "copy" : "default" }), onClick: le - }, B(b.value), 13, dc) + }, L(b.value), 13, dc) ], 2)) : P("", !0), - C.value.length ? (N(), z("div", { + C.value.length ? (I(), z("div", { key: 6, - style: L(m("#9C27B0", { + style: R(m("#9C27B0", { emphasis: !0, startAlpha: .18, endAlpha: .1 })) - }, [M("div", fc, B(V(O)("sidebar.generation.models", "Models")), 1), M("div", pc, [(N(!0), z(j, null, I(C.value, (e) => (N(), z("div", { + }, [M("div", fc, L(B(O)("sidebar.generation.models", "Models")), 1), M("div", pc, [(I(!0), z(j, null, N(C.value, (e) => (I(), z("div", { key: `models-top-${e.key}`, - style: L(w(T(e), !0)) + style: R(w(T(e), !0)) }, [ - M("div", { style: L({ + M("div", { style: R({ fontSize: "10px", fontWeight: "800", color: T(e), letterSpacing: "0.6px", textTransform: "uppercase" - }) }, B(e.label), 5), - (N(!0), z(j, null, I(e.modelFields, (t) => (N(), z("div", { + }) }, L(e.label), 5), + (I(!0), z(j, null, N(e.modelFields, (t) => (I(), z("div", { key: `model-top-${e.key}-${t.label}`, style: { display: "flex", @@ -6629,7 +6629,7 @@ var Vo = ["title"], Ho = ["src"], Uo = { gap: "3px", "min-width": "0" } - }, [M("span", mc, B(t.label), 1), M("span", { + }, [M("span", mc, L(t.label), 1), M("span", { style: { "font-size": "12px", color: "var(--fg-color, rgba(255,255,255,0.96))", @@ -6638,14 +6638,14 @@ var Vo = ["title"], Ho = ["src"], Uo = { cursor: "pointer" }, onClick: (e) => E(t.value, e.currentTarget) - }, B(t.value || "-"), 9, hc)]))), 128)), - e.loras.length ? (N(), z("div", gc, [t[14] ||= M("span", { style: { + }, L(t.value || "-"), 9, hc)]))), 128)), + e.loras.length ? (I(), z("div", gc, [t[14] ||= M("span", { style: { "font-size": "10px", "font-weight": "700", color: "rgba(255,255,255,0.58)", "text-transform": "uppercase", "letter-spacing": "0.4px" - } }, "LoRA", -1), (N(!0), z(j, null, I(e.loras, (t, n) => (N(), z("span", { + } }, "LoRA", -1), (I(!0), z(j, null, N(e.loras, (t, n) => (I(), z("span", { key: `model-top-${e.key}-lora-${n}`, style: { "font-size": "12px", @@ -6659,31 +6659,31 @@ var Vo = ["title"], Ho = ["src"], Uo = { cursor: "pointer" }, onClick: (e) => E(t, e.currentTarget) - }, B(t), 9, _c))), 128))])) : P("", !0) + }, L(t), 9, _c))), 128))])) : P("", !0) ], 4))), 128))])], 4)) : P("", !0), - _.value.lyrics ? (N(), z("div", { + _.value.lyrics ? (I(), z("div", { key: 7, - style: L(m("#00BCD4", { emphasis: !1 })) - }, [M("div", vc, [M("span", null, B(V(O)("sidebar.generation.lyrics", "Lyrics")), 1)]), M("div", yc, B(_.value.lyrics), 1)], 4)) : P("", !0), - _.value.branchCards.length ? (N(), z(j, { key: 8 }, [ + style: R(m("#00BCD4", { emphasis: !1 })) + }, [M("div", vc, [M("span", null, L(B(O)("sidebar.generation.lyrics", "Lyrics")), 1)]), M("div", yc, L(_.value.lyrics), 1)], 4)) : P("", !0), + _.value.branchCards.length ? (I(), z(j, { key: 8 }, [ P("", !0), - ee.value.length ? (N(), z("div", { + ee.value.length ? (I(), z("div", { key: 1, - style: L(m("#FF9800", { + style: R(m("#FF9800", { emphasis: !0, startAlpha: .16, endAlpha: .1 })) - }, [M("div", bc, B(V(O)("sidebar.generation.sampling", "Sampling")), 1), M("div", xc, [(N(!0), z(j, null, I(ee.value, (e) => (N(), z("div", { + }, [M("div", bc, L(B(O)("sidebar.generation.sampling", "Sampling")), 1), M("div", xc, [(I(!0), z(j, null, N(ee.value, (e) => (I(), z("div", { key: `sampling-${e.key}`, - style: L(w(re(e), !0)) - }, [M("div", { style: L({ + style: R(w(re(e), !0)) + }, [M("div", { style: R({ fontSize: "10px", fontWeight: "800", color: re(e), letterSpacing: "0.6px", textTransform: "uppercase" - }) }, B(e.label), 5), (N(!0), z(j, null, I(e.samplingFields, (t) => (N(), z("div", { + }) }, L(e.label), 5), (I(!0), z(j, null, N(e.samplingFields, (t) => (I(), z("div", { key: `sampling-row-${e.key}-${t.label}`, style: { display: "grid", @@ -6693,7 +6693,7 @@ var Vo = ["title"], Ho = ["src"], Uo = { color: "rgba(255,255,255,0.72)", "align-items": "start" } - }, [M("span", null, B(t.label), 1), M("span", { + }, [M("span", null, L(t.label), 1), M("span", { style: { color: "var(--fg-color, #ddd)", "word-break": "break-word", @@ -6701,26 +6701,26 @@ var Vo = ["title"], Ho = ["src"], Uo = { cursor: "pointer" }, onClick: (e) => E(t.value, e.currentTarget) - }, B(t.value), 9, Sc)]))), 128))], 4))), 128))])], 4)) : P("", !0), + }, L(t.value), 9, Sc)]))), 128))], 4))), 128))])], 4)) : P("", !0), P("", !0) - ], 64)) : _.value.modelGroups.length ? (N(), z("div", { + ], 64)) : _.value.modelGroups.length ? (I(), z("div", { key: 9, - style: L(m("#9C27B0", { + style: R(m("#9C27B0", { emphasis: !0, startAlpha: .18, endAlpha: .1 })) - }, [M("div", Cc, B(V(O)("sidebar.generation.models", "Models")), 1), M("div", wc, [(N(!0), z(j, null, I(_.value.modelGroups, (e) => (N(), z("div", { + }, [M("div", Cc, L(B(O)("sidebar.generation.models", "Models")), 1), M("div", wc, [(I(!0), z(j, null, N(_.value.modelGroups, (e) => (I(), z("div", { key: `model-group-${e.key}`, - style: L(w(ie(e.key), !0)) + style: R(w(ie(e.key), !0)) }, [ - M("div", Tc, [M("div", { style: L({ + M("div", Tc, [M("div", { style: R({ fontSize: "10px", fontWeight: "800", color: ie(e.key), letterSpacing: "0.6px", textTransform: "uppercase" - }) }, B(e.label), 5), M("span", { style: L({ + }) }, L(e.label), 5), M("span", { style: R({ fontSize: "9px", fontWeight: "700", color: "#fff", @@ -6730,7 +6730,7 @@ var Vo = ["title"], Ho = ["src"], Uo = { padding: "2px 8px", letterSpacing: "0.4px", textTransform: "uppercase" - }) }, B(e.loras?.length || 0) + " LoRA ", 5)]), + }) }, L(e.loras?.length || 0) + " LoRA ", 5)]), M("div", Ec, [t[15] ||= M("div", { style: { "font-size": "10px", "font-weight": "700", @@ -6746,8 +6746,8 @@ var Vo = ["title"], Ho = ["src"], Uo = { cursor: "pointer" }, onClick: (t) => E(e.model, t.currentTarget) - }, B(e.model || "-"), 9, Dc)]), - e.loras?.length ? (N(), z("div", Oc, [M("div", kc, B(V(O)("sidebar.generation.loraStack", "LoRA Stack")), 1), M("div", Ac, [(N(!0), z(j, null, I(e.loras, (t, n) => (N(), z("div", { + }, L(e.model || "-"), 9, Dc)]), + e.loras?.length ? (I(), z("div", Oc, [M("div", kc, L(B(O)("sidebar.generation.loraStack", "LoRA Stack")), 1), M("div", Ac, [(I(!0), z(j, null, N(e.loras, (t, n) => (I(), z("div", { key: `${e.key}-lora-${n}`, style: { "font-size": "12px", @@ -6761,19 +6761,19 @@ var Vo = ["title"], Ho = ["src"], Uo = { cursor: "pointer" }, onClick: (e) => E(t, e.currentTarget) - }, B(t), 9, jc))), 128))])])) : P("", !0) + }, L(t), 9, jc))), 128))])])) : P("", !0) ], 4))), 128))])], 4)) : P("", !0), - (N(!0), z(j, null, I(te.value, (e) => (N(), z("div", { + (I(!0), z(j, null, N(te.value, (e) => (I(), z("div", { key: e.key, - style: L(m(e.accent, { emphasis: e.emphasis })) - }, [M("div", { style: L({ + style: R(m(e.accent, { emphasis: e.emphasis })) + }, [M("div", { style: R({ fontSize: "11px", fontWeight: "600", color: e.accent, textTransform: "uppercase", letterSpacing: "0.5px", marginBottom: "10px" - }) }, B(e.title), 5), M("div", Mc, [(N(!0), z(j, null, I(e.fields, (t) => (N(), z(j, { key: `${e.key}-${t.label}` }, [M("div", { + }) }, L(e.title), 5), M("div", Mc, [(I(!0), z(j, null, N(e.fields, (t) => (I(), z(j, { key: `${e.key}-${t.label}` }, [M("div", { title: t.label, style: { "font-size": "11px", @@ -6783,11 +6783,11 @@ var Vo = ["title"], Ho = ["src"], Uo = { "align-items": "center", gap: "6px" } - }, [M("span", null, B(t.label) + ":", 1), t.override ? (N(), z("span", { + }, [M("span", null, L(t.label) + ":", 1), t.override ? (I(), z("span", { key: 0, - style: L(g()), - title: V(O)("sidebar.generation.overrideTooltip", "This field was forced by Majoor Gen Info Override") - }, B(V(O)("sidebar.generation.override", "override")), 13, Pc)) : P("", !0)], 8, Nc), M("div", { + style: R(g()), + title: B(O)("sidebar.generation.overrideTooltip", "This field was forced by Majoor Gen Info Override") + }, L(B(O)("sidebar.generation.override", "override")), 13, Pc)) : P("", !0)], 8, Nc), M("div", { title: `${t.label}: ${t.value}`, style: { "font-size": "12px", @@ -6797,11 +6797,11 @@ var Vo = ["title"], Ho = ["src"], Uo = { cursor: "pointer" }, onClick: (e) => E(t.value, e.currentTarget) - }, B(t.value), 9, Fc)], 64))), 128))])], 4))), 128)), - _.value.notesFields.length ? (N(), z("div", { + }, L(t.value), 9, Fc)], 64))), 128))])], 4))), 128)), + _.value.notesFields.length ? (I(), z("div", { key: 10, - style: L(m("#4CAF50", { emphasis: !1 })) - }, [M("div", Ic, B(V(O)("sidebar.generation.notes", "Notes")), 1), (N(!0), z(j, null, I(_.value.notesFields, (e) => (N(), z("div", { + style: R(m("#4CAF50", { emphasis: !1 })) + }, [M("div", Ic, L(B(O)("sidebar.generation.notes", "Notes")), 1), (I(!0), z(j, null, N(_.value.notesFields, (e) => (I(), z("div", { key: e.label, title: `${e.label}: ${e.value}`, style: { @@ -6813,24 +6813,24 @@ var Vo = ["title"], Ho = ["src"], Uo = { cursor: "pointer" }, onClick: (t) => E(e.value, t.currentTarget) - }, B(e.value), 9, Lc))), 128))], 4)) : P("", !0), - _.value.moduleBlocks.length ? (N(), z("div", { + }, L(e.value), 9, Lc))), 128))], 4)) : P("", !0), + _.value.moduleBlocks.length ? (I(), z("div", { key: 11, - style: L(m("#26C6DA", { + style: R(m("#26C6DA", { emphasis: !0, startAlpha: .14, endAlpha: .08 })) - }, [M("div", Rc, B(V(O)("sidebar.generation.modules", "Modules")), 1), M("div", zc, [(N(!0), z(j, null, I(_.value.moduleBlocks, (e) => (N(), z("div", { + }, [M("div", Rc, L(B(O)("sidebar.generation.modules", "Modules")), 1), M("div", zc, [(I(!0), z(j, null, N(_.value.moduleBlocks, (e) => (I(), z("div", { key: `module-${e.key}-${e.title}`, - style: L(w(e.accent, !1)) - }, [M("div", { style: L({ + style: R(w(e.accent, !1)) + }, [M("div", { style: R({ fontSize: "10px", fontWeight: "800", color: e.accent, letterSpacing: "0.6px", textTransform: "uppercase" - }) }, B(e.title), 5), (N(!0), z(j, null, I(e.fields, (t) => (N(), z("div", { + }) }, L(e.title), 5), (I(!0), z(j, null, N(e.fields, (t) => (I(), z("div", { key: `module-${e.key}-${t.label}`, style: { display: "flex", @@ -6838,7 +6838,7 @@ var Vo = ["title"], Ho = ["src"], Uo = { gap: "3px", "min-width": "0" } - }, [M("span", Bc, B(t.label), 1), M("span", { + }, [M("span", Bc, L(t.label), 1), M("span", { title: `${t.label}: ${t.value}`, style: { "font-size": "12px", @@ -6849,12 +6849,12 @@ var Vo = ["title"], Ho = ["src"], Uo = { cursor: "pointer" }, onClick: (e) => E(t.value, e.currentTarget) - }, B(t.value), 9, Vc)]))), 128))], 4))), 128))])], 4)) : P("", !0), - _.value.ttsInstruction ? (N(), z("div", { + }, L(t.value), 9, Vc)]))), 128))], 4))), 128))])], 4)) : P("", !0), + _.value.ttsInstruction ? (I(), z("div", { key: 12, - style: L(m("#26A69A", { emphasis: !1 })) - }, [M("div", Hc, [M("span", null, B(V(O)("sidebar.generation.ttsInstruction", "TTS Instruction")), 1)]), M("div", { - title: V(O)("action.clickToCopy", "Click to copy"), + style: R(m("#26A69A", { emphasis: !1 })) + }, [M("div", Hc, [M("span", null, L(B(O)("sidebar.generation.ttsInstruction", "TTS Instruction")), 1)]), M("div", { + title: B(O)("action.clickToCopy", "Click to copy"), style: { "font-size": "12px", color: "var(--fg-color, rgba(255,255,255,0.9))", @@ -6864,12 +6864,12 @@ var Vo = ["title"], Ho = ["src"], Uo = { cursor: "pointer" }, onClick: t[6] ||= (e) => E(_.value.ttsInstruction, e.currentTarget) - }, B(_.value.ttsInstruction), 9, Uc)], 4)) : P("", !0), - _.value.seed !== null && _.value.seed !== void 0 && _.value.seed !== "" ? (N(), z("div", { + }, L(_.value.ttsInstruction), 9, Uc)], 4)) : P("", !0), + _.value.seed !== null && _.value.seed !== void 0 && _.value.seed !== "" ? (I(), z("div", { key: 13, - style: L(h()) - }, [M("div", Wc, B(V(O)("sidebar.generation.seed", "SEED")), 1), M("div", { - title: V(O)("sidebar.generation.copySeedTooltip", "Click to copy seed: {seed}", { seed: _.value.seed }), + style: R(h()) + }, [M("div", Wc, L(B(O)("sidebar.generation.seed", "SEED")), 1), M("div", { + title: B(O)("sidebar.generation.copySeedTooltip", "Click to copy seed: {seed}", { seed: _.value.seed }), style: { "font-size": "18px", "font-weight": "700", @@ -6882,16 +6882,16 @@ var Vo = ["title"], Ho = ["src"], Uo = { transition: "background 0.2s" }, onClick: t[7] ||= (e) => E(_.value.seed, e.currentTarget, "rgba(76, 175, 80, 0.4)") - }, B(_.value.seed), 9, Gc)], 4)) : P("", !0), - _.value.inputFiles.length ? (N(), z("div", { + }, L(_.value.seed), 9, Gc)], 4)) : P("", !0), + _.value.inputFiles.length ? (I(), z("div", { key: 14, - style: L(m("#4CAF50", { + style: R(m("#4CAF50", { emphasis: !0, startAlpha: .16, endAlpha: .1 })) }, [M("div", { - title: V(O)("tooltip.generationInputs", "Input files used in generation"), + title: B(O)("tooltip.generationInputs", "Input files used in generation"), style: { "font-size": "11px", "font-weight": "600", @@ -6900,7 +6900,7 @@ var Vo = ["title"], Ho = ["src"], Uo = { "letter-spacing": "0.5px", "margin-bottom": "8px" } - }, B(V(O)("sidebar.generation.sourceFiles", "Source Files")), 9, Kc), M("div", qc, [(N(!0), z(j, null, I(_.value.inputFiles, (e) => (N(), it(Jo, { + }, L(B(O)("sidebar.generation.sourceFiles", "Source Files")), 9, Kc), M("div", qc, [(I(!0), z(j, null, N(_.value.inputFiles, (e) => (I(), rt(Jo, { key: e.id, "input-file": e }, null, 8, ["input-file"]))), 128))])], 4)) : P("", !0) @@ -7247,7 +7247,7 @@ var Vo = ["title"], Ho = ["src"], Uo = { margin: "10px 0 0 0", color: "#90CAF9", "font-family": "'Consolas', 'Monaco', monospace" -} }, ou = 1, su = 8, cu = 250, lu = /* @__PURE__ */ ot({ +} }, ou = 1, su = 8, cu = 250, lu = /* @__PURE__ */ st({ __name: "SidebarWorkflowSection", props: { asset: {} }, setup(e) { @@ -7281,7 +7281,7 @@ var Vo = ["title"], Ho = ["src"], Uo = { label: "Expanded", height: 220 } - ]), o = R(null), s = R(""), c = R(!1), l = R(!1), d = R(null), f = R(!1), p = R(null), m = R([]), g = R(null), v = R(!1), y = R(!1), b = R(ue()), x = R({ ...i }), S = R("crosshair"), C = R(""), te = null, w = null, T = null; + ]), o = V(null), s = V(""), c = V(!1), l = V(!1), d = V(null), f = V(!1), p = V(null), m = V([]), g = V(null), v = V(!1), y = V(!1), b = V(ue()), x = V({ ...i }), S = V("crosshair"), C = V(""), te = null, w = null, T = null; function re(e, t, n) { let r = Number(e); return Number.isFinite(r) ? Math.max(t, Math.min(n, r)) : t; @@ -7614,7 +7614,7 @@ var Vo = ["title"], Ho = ["src"], Uo = { } } } - let ot = F(() => (Array.isArray(D.value?.nodes) ? D.value.nodes : []).slice(0, cu).map((e, t) => { + let st = F(() => (Array.isArray(D.value?.nodes) ? D.value.nodes : []).slice(0, cu).map((e, t) => { let n = e?.id ?? e?.key ?? t + 1, r = Ye(e); return { key: String(n), @@ -7625,7 +7625,7 @@ var Vo = ["title"], Ho = ["src"], Uo = { type: r } }; - })), st = F(() => Math.max(0, Number(ut.value.nodes || 0) - ot.value.length)), ut = F(() => { + })), lt = F(() => Math.max(0, Number(ft.value.nodes || 0) - st.value.length)), ft = F(() => { let e = D.value; return e ? { nodes: Array.isArray(e?.nodes) ? e.nodes.length : 0, @@ -7638,10 +7638,10 @@ var Vo = ["title"], Ho = ["src"], Uo = { groups: 0, source: "" }; - }), dt = F(() => { + }), pt = F(() => { let e = String(b.value?.size || "comfortable"); return a.find((t) => t.key === e) || a[1]; - }), ft = F(() => `${dt.value.height}px`), pt = F(() => [ + }), mt = F(() => `${pt.value.height}px`), ht = F(() => [ { key: "showNodeLabels", label: "Node Labels", @@ -7678,7 +7678,7 @@ var Vo = ["title"], Ho = ["src"], Uo = { iconClass: "pi pi-window-maximize" } ]); - function mt() { + function gt() { let e = o.value, t = D.value; if (!e || !t) return; let n = Math.max(1, e.clientWidth || 320), r = Math.max(1, e.clientHeight || 120), i = Math.max(1, Math.min(2, window.devicePixelRatio || 1)); @@ -7689,10 +7689,10 @@ var Vo = ["title"], Ho = ["src"], Uo = { view: x.value }) || null, ie(w?.resolvedView); } - function gt(e) { + function _t(e) { Ke(e); } - function _t(e) { + function vt(e) { let t = o.value; if (!t) return null; let n = t.getBoundingClientRect?.(); @@ -7701,46 +7701,46 @@ var Vo = ["title"], Ho = ["src"], Uo = { y: Number(e?.clientY) - n.top } : null; } - function vt(e) { - let t = _t(e); + function yt(e) { + let t = vt(e); return !t || !w?.canvasToWorld ? null : { local: t, world: w.canvasToWorld(t.x, t.y) }; } - function yt(e) { - let t = _t(e), n = t && w?.hitTestNode ? w.hitTestNode(t.x, t.y) : null, r = n?.id !== null && n?.id !== void 0 ? String(n.id) : null, i = x.value.hoveredNodeId !== null && x.value.hoveredNodeId !== void 0 ? String(x.value.hoveredNodeId) : null; + function bt(e) { + let t = vt(e), n = t && w?.hitTestNode ? w.hitTestNode(t.x, t.y) : null, r = n?.id !== null && n?.id !== void 0 ? String(n.id) : null, i = x.value.hoveredNodeId !== null && x.value.hoveredNodeId !== void 0 ? String(x.value.hoveredNodeId) : null; C.value = n?.label || "", r !== i && (x.value = { ...x.value, hoveredNodeId: r - }, mt()); + }, gt()); } - function xt(e) { - e && (gt(e), x.value = { + function St(e) { + e && (_t(e), x.value = { ...x.value, centerX: Number(e.x), centerY: Number(e.y) - }, mt()); - } - function St(e) { - if (Number(e?.button ?? 0) !== 0) return; - let t = vt(e); - t && (T = e.pointerId ?? 1, S.value = "grabbing", o.value?.setPointerCapture?.(T), xt(t.world), yt(e), e.preventDefault?.(), e.stopPropagation?.()); + }, gt()); } function Ct(e) { - if (T !== null && e.pointerId === T) { - let t = vt(e); - t && xt(t.world), e.preventDefault?.(), e.stopPropagation?.(); - } else yt(e); + if (Number(e?.button ?? 0) !== 0) return; + let t = yt(e); + t && (T = e.pointerId ?? 1, S.value = "grabbing", o.value?.setPointerCapture?.(T), St(t.world), bt(e), e.preventDefault?.(), e.stopPropagation?.()); } - function wt(e) { + function Tt(e) { + if (T !== null && e.pointerId === T) { + let t = yt(e); + t && St(t.world), e.preventDefault?.(), e.stopPropagation?.(); + } else bt(e); + } + function Et(e) { T !== null && e?.pointerId === T && (o.value?.releasePointerCapture?.(T), T = null, S.value = "crosshair"), e?.type === "pointerleave" && (C.value = "", x.value.hoveredNodeId !== null && (x.value = { ...x.value, hoveredNodeId: null - }, mt())); + }, gt())); } - function Tt(e) { - let t = vt(e), n = w?.resolvedView; + function Dt(e) { + let t = yt(e), n = w?.resolvedView; if (!t || !n) return; let r = re(Number(e?.deltaY) || 0, -240, 240), i = Math.exp(-r * .0025), a = re((Number(x.value.zoom) || 1) * i, ou, su); if (Math.abs(a - (Number(x.value.zoom) || 1)) < .001) { @@ -7753,40 +7753,40 @@ var Vo = ["title"], Ho = ["src"], Uo = { zoom: a, centerX: Number(t.world.x) + (.5 - c) * o, centerY: Number(t.world.y) + (.5 - l) * s - }, mt(), yt(e), e.preventDefault?.(), e.stopPropagation?.(); - } - function Dt(e) { - let t = vt(e); - E(), t && gt(t.world), mt(), e.preventDefault?.(), e.stopPropagation?.(); + }, gt(), bt(e), e.preventDefault?.(), e.stopPropagation?.(); } function Ot(e) { + let t = yt(e); + E(), t && _t(t.world), gt(), e.preventDefault?.(), e.stopPropagation?.(); + } + function kt(e) { b.value = { ...b.value, [e]: !b.value?.[e] }, de(b.value); } - function kt(e) { + function At(e) { a.some((t) => t.key === e) && (b.value = { ...b.value, size: e }, de(b.value)); } - return rt(() => { - o.value && typeof ResizeObserver == "function" && (te = new ResizeObserver(() => mt()), te.observe(o.value)), Xe(), k(), mt(); - }), Et(D, () => { - E(), mt(); - }, { flush: "post" }), Et(fe, () => { + return it(() => { + o.value && typeof ResizeObserver == "function" && (te = new ResizeObserver(() => gt()), te.observe(o.value)), Xe(), k(), gt(); + }), dt(D, () => { + E(), gt(); + }, { flush: "post" }), dt(fe, () => { d.value = null, k(); - }, { immediate: !0 }), Et(A, () => { + }, { immediate: !0 }), dt(A, () => { Xe(); - }), Et(b, () => { - mt(); + }), dt(b, () => { + gt(); }, { deep: !0, flush: "post" - }), Et(v, () => { - mt(); - }, { flush: "post" }), Nt(() => { + }), dt(v, () => { + gt(); + }, { flush: "post" }), ut(() => { try { te?.disconnect?.(); } catch (e) { @@ -7795,7 +7795,7 @@ var Vo = ["title"], Ho = ["src"], Uo = { te = null, T = null; }), (e, t) => { let n = at("MButton"), r = at("MTree"); - return D.value ? (N(), z("div", Yc, [ + return D.value ? (I(), z("div", Yc, [ t[18] ||= M("div", { style: { "font-size": "13px", "font-weight": "600", @@ -7805,8 +7805,8 @@ var Vo = ["title"], Ho = ["src"], Uo = { "letter-spacing": "0.5px" } }, " ComfyUI Workflow ", -1), M("div", Xc, [ - M("div", Zc, B(me.value), 1), - fe.value ? (N(), z("div", { + M("div", Zc, L(me.value), 1), + fe.value ? (I(), z("div", { key: 0, style: { "font-size": "11px", @@ -7817,43 +7817,43 @@ var Vo = ["title"], Ho = ["src"], Uo = { "white-space": "nowrap" }, title: fe.value - }, B(fe.value), 9, Qc)) : P("", !0), - Re.value.length ? (N(), z("div", $c, [(N(!0), z(j, null, I(Re.value, (e) => (N(), z("span", { + }, L(fe.value), 9, Qc)) : P("", !0), + Re.value.length ? (I(), z("div", $c, [(I(!0), z(j, null, N(Re.value, (e) => (I(), z("span", { key: e.key, - style: L(ze(e.tone)), + style: R(ze(e.tone)), title: e.label }, [M("i", { - class: ht(e.icon), + class: wt(e.icon), style: { "font-size": "10px", flex: "0 0 auto" } - }, null, 2), M("span", tl, B(e.label), 1)], 12, el))), 128))])) : P("", !0) + }, null, 2), M("span", tl, L(e.label), 1)], 12, el))), 128))])) : P("", !0) ]), - M("div", nl, [M("div", rl, B(He.value), 1), ut.value.source ? (N(), z("div", il, B(ut.value.source), 1)) : P("", !0)]), + M("div", nl, [M("div", rl, L(He.value), 1), ft.value.source ? (I(), z("div", il, L(ft.value.source), 1)) : P("", !0)]), M("div", al, [ - he.value ? (N(), z("div", ol, [t[3] ||= M("div", { style: { + he.value ? (I(), z("div", ol, [t[3] ||= M("div", { style: { "font-size": "10px", "font-weight": "700", color: "rgba(255,255,255,0.55)", "text-transform": "uppercase", "letter-spacing": "0.4px" - } }, "Task", -1), M("div", sl, B(he.value), 1)])) : P("", !0), - ge.value ? (N(), z("div", cl, [t[4] ||= M("div", { style: { + } }, "Task", -1), M("div", sl, L(he.value), 1)])) : P("", !0), + ge.value ? (I(), z("div", cl, [t[4] ||= M("div", { style: { "font-size": "10px", "font-weight": "700", color: "rgba(255,255,255,0.55)", "text-transform": "uppercase", "letter-spacing": "0.4px" - } }, "Model", -1), M("div", ll, B(ge.value), 1)])) : P("", !0), - ye.value ? (N(), z("div", ul, [t[5] ||= M("div", { style: { + } }, "Model", -1), M("div", ll, L(ge.value), 1)])) : P("", !0), + ye.value ? (I(), z("div", ul, [t[5] ||= M("div", { style: { "font-size": "10px", "font-weight": "700", color: "rgba(255,255,255,0.55)", "text-transform": "uppercase", "letter-spacing": "0.4px" - } }, "Runs on", -1), M("div", dl, B(ye.value), 1)])) : P("", !0), - Fe.value || Le.value ? (N(), z("div", fl, [ + } }, "Runs on", -1), M("div", dl, L(ye.value), 1)])) : P("", !0), + Fe.value || Le.value ? (I(), z("div", fl, [ t[6] ||= M("div", { style: { "font-size": "10px", "font-weight": "700", @@ -7861,11 +7861,11 @@ var Vo = ["title"], Ho = ["src"], Uo = { "text-transform": "uppercase", "letter-spacing": "0.4px" } }, "Library", -1), - M("div", pl, B(Fe.value || Le.value), 1), - Fe.value && Le.value ? (N(), z("div", ml, B(Le.value), 1)) : P("", !0) + M("div", pl, L(Fe.value || Le.value), 1), + Fe.value && Le.value ? (I(), z("div", ml, L(Le.value), 1)) : P("", !0) ])) : P("", !0) ]), - Ce.value.length || we.value.length ? (N(), z("div", hl, [ + Ce.value.length || we.value.length ? (I(), z("div", hl, [ t[7] ||= M("div", { style: { "font-size": "10px", "font-weight": "800", @@ -7874,15 +7874,15 @@ var Vo = ["title"], Ho = ["src"], Uo = { "letter-spacing": "0.4px", "margin-bottom": "6px" } }, "Missing dependencies", -1), - Ce.value.length ? (N(), z("div", { + Ce.value.length ? (I(), z("div", { key: 0, - style: L({ + style: R({ display: "flex", flexWrap: "wrap", gap: "5px", marginBottom: we.value.length ? "7px" : "0" }) - }, [(N(!0), z(j, null, I(Ce.value, (e) => (N(), z("span", { + }, [(I(!0), z(j, null, N(Ce.value, (e) => (I(), z("span", { key: `node-${e}`, style: { padding: "3px 7px", @@ -7892,8 +7892,8 @@ var Vo = ["title"], Ho = ["src"], Uo = { "font-weight": "700", color: "#ffcdd2" } - }, B(e), 1))), 128))], 4)) : P("", !0), - we.value.length ? (N(), z("div", gl, [(N(!0), z(j, null, I(we.value, (e) => (N(), z("span", { + }, L(e), 1))), 128))], 4)) : P("", !0), + we.value.length ? (I(), z("div", gl, [(I(!0), z(j, null, N(we.value, (e) => (I(), z("span", { key: `model-${e}`, style: { padding: "3px 7px", @@ -7903,18 +7903,18 @@ var Vo = ["title"], Ho = ["src"], Uo = { "font-weight": "700", color: "#ffe0b2" } - }, B(e), 1))), 128))])) : P("", !0) + }, L(e), 1))), 128))])) : P("", !0) ])) : P("", !0), - be.value || Se.value ? (N(), z("div", _l, [be.value ? (N(), z("div", vl, B(be.value), 1)) : P("", !0), Se.value ? (N(), z("div", { + be.value || Se.value ? (I(), z("div", _l, [be.value ? (I(), z("div", vl, L(be.value), 1)) : P("", !0), Se.value ? (I(), z("div", { key: 1, - style: L({ + style: R({ fontSize: "11px", color: "rgba(255,255,255,0.48)", marginTop: be.value ? "7px" : "0" }) - }, B(Se.value), 5)) : P("", !0)])) : P("", !0), + }, L(Se.value), 5)) : P("", !0)])) : P("", !0), M("div", yl, [ - bt(n, { + ot(n, { type: "button", severity: "secondary", text: "", @@ -7934,10 +7934,10 @@ var Vo = ["title"], Ho = ["src"], Uo = { }, onClick: Qe }, { - default: lt(() => [t[8] ||= M("i", { class: "pi pi-image" }, null, -1), M("span", null, B(V(O)("ctx.setWorkflowThumbnail", "Set workflow thumbnail")), 1)]), + default: ct(() => [t[8] ||= M("i", { class: "pi pi-image" }, null, -1), M("span", null, L(B(O)("ctx.setWorkflowThumbnail", "Set workflow thumbnail")), 1)]), _: 1 }), - bt(n, { + ot(n, { type: "button", severity: "secondary", text: "", @@ -7957,10 +7957,10 @@ var Vo = ["title"], Ho = ["src"], Uo = { }, onClick: $e }, { - default: lt(() => [t[9] ||= M("i", { class: "pi pi-search" }, null, -1), M("span", null, B(V(O)("ctx.inspect", "Inspect")), 1)]), + default: ct(() => [t[9] ||= M("i", { class: "pi pi-search" }, null, -1), M("span", null, L(B(O)("ctx.inspect", "Inspect")), 1)]), _: 1 }), - bt(n, { + ot(n, { type: "button", severity: "secondary", text: "", @@ -7981,19 +7981,19 @@ var Vo = ["title"], Ho = ["src"], Uo = { }, onClick: et }, { - default: lt(() => [M("i", { class: ht(f.value ? "pi pi-spin pi-spinner" : "pi pi-check-circle") }, null, 2), M("span", null, B(f.value ? "Checking" : "Validate"), 1)]), + default: ct(() => [M("i", { class: wt(f.value ? "pi pi-spin pi-spinner" : "pi pi-check-circle") }, null, 2), M("span", null, L(f.value ? "Checking" : "Validate"), 1)]), _: 1 }, 8, ["disabled"]) ]), - p.value ? (N(), z("div", bl, [ + p.value ? (I(), z("div", bl, [ M("div", xl, [t[10] ||= M("div", { style: { "font-size": "10px", "font-weight": "800", color: "#a5d6a7", "text-transform": "uppercase", "letter-spacing": "0.4px" - } }, "Workflow diagnostics", -1), M("div", Sl, B(Me.value), 1)]), - ke.value.length || Ae.value.length ? (N(), z("div", Cl, [ke.value.length ? (N(), z("div", wl, [(N(!0), z(j, null, I(ke.value, (e) => (N(), z("span", { + } }, "Workflow diagnostics", -1), M("div", Sl, L(Me.value), 1)]), + ke.value.length || Ae.value.length ? (I(), z("div", Cl, [ke.value.length ? (I(), z("div", wl, [(I(!0), z(j, null, N(ke.value, (e) => (I(), z("span", { key: `diag-node-${e}`, style: { padding: "3px 7px", @@ -8003,7 +8003,7 @@ var Vo = ["title"], Ho = ["src"], Uo = { "font-weight": "700", color: "#ffcdd2" } - }, " Missing node: " + B(e), 1))), 128))])) : P("", !0), Ae.value.length ? (N(), z("div", Tl, [(N(!0), z(j, null, I(Ae.value, (e) => (N(), z("span", { + }, " Missing node: " + L(e), 1))), 128))])) : P("", !0), Ae.value.length ? (I(), z("div", Tl, [(I(!0), z(j, null, N(Ae.value, (e) => (I(), z("span", { key: `diag-model-${e}`, style: { padding: "3px 7px", @@ -8013,9 +8013,9 @@ var Vo = ["title"], Ho = ["src"], Uo = { "font-weight": "700", color: "#ffe0b2" } - }, " Missing model: " + B(e), 1))), 128))])) : P("", !0)])) : (N(), z("div", El, " No missing dependencies detected by the current ComfyUI runtime. ")), - je.value.length ? (N(), z("div", Dl, B(je.value.join(" | ")), 1)) : P("", !0), - Ne.value || Pe.value ? (N(), z("div", Ol, [nt(" Latest version: " + B(Ne.value || "none"), 1), Pe.value ? (N(), z("span", kl, " | Diff: " + B(Pe.value), 1)) : P("", !0)])) : P("", !0) + }, " Missing model: " + L(e), 1))), 128))])) : P("", !0)])) : (I(), z("div", El, " No missing dependencies detected by the current ComfyUI runtime. ")), + je.value.length ? (I(), z("div", Dl, L(je.value.join(" | ")), 1)) : P("", !0), + Ne.value || Pe.value ? (I(), z("div", Ol, [xt(" Latest version: " + L(Ne.value || "none"), 1), Pe.value ? (I(), z("span", kl, " | Diff: " + L(Pe.value), 1)) : P("", !0)])) : P("", !0) ])) : P("", !0), M("div", Al, [ M("div", jl, [t[11] ||= M("div", { style: { @@ -8024,23 +8024,23 @@ var Vo = ["title"], Ho = ["src"], Uo = { color: "rgba(255,255,255,0.55)", "text-transform": "uppercase", "letter-spacing": "0.4px" - } }, "Nodes", -1), M("div", Ml, B(ut.value.nodes), 1)]), + } }, "Nodes", -1), M("div", Ml, L(ft.value.nodes), 1)]), M("div", Nl, [t[12] ||= M("div", { style: { "font-size": "10px", "font-weight": "700", color: "rgba(255,255,255,0.55)", "text-transform": "uppercase", "letter-spacing": "0.4px" - } }, "Links", -1), M("div", Pl, B(ut.value.links), 1)]), + } }, "Links", -1), M("div", Pl, L(ft.value.links), 1)]), M("div", Fl, [t[13] ||= M("div", { style: { "font-size": "10px", "font-weight": "700", color: "rgba(255,255,255,0.55)", "text-transform": "uppercase", "letter-spacing": "0.4px" - } }, "Groups", -1), M("div", Il, B(ut.value.groups), 1)]) + } }, "Groups", -1), M("div", Il, L(ft.value.groups), 1)]) ]), - pe.value ? (N(), z("div", Ll, [M("div", Rl, [M("div", zl, [t[14] ||= M("div", { style: { + pe.value ? (I(), z("div", Ll, [M("div", Rl, [M("div", zl, [t[14] ||= M("div", { style: { "font-size": "10px", "font-weight": "700", color: "rgba(255,255,255,0.55)", @@ -8057,7 +8057,7 @@ var Vo = ["title"], Ho = ["src"], Uo = { "white-space": "nowrap", "max-width": "100%" } - }, B(Ge.value), 9, Bl)]), qe.value.length ? (N(), z("div", { + }, L(Ge.value), 9, Bl)]), qe.value.length ? (I(), z("div", { key: 0, title: A.value, style: { @@ -8068,7 +8068,7 @@ var Vo = ["title"], Ho = ["src"], Uo = { "min-width": "0", "max-width": "45%" } - }, [(N(!0), z(j, null, I(qe.value, (e) => (N(), z("span", { + }, [(I(!0), z(j, null, N(qe.value, (e) => (I(), z("span", { key: e, style: { padding: "3px 7px", @@ -8085,10 +8085,10 @@ var Vo = ["title"], Ho = ["src"], Uo = { "text-overflow": "ellipsis", "white-space": "nowrap" } - }, B(e), 1))), 128))], 8, Vl)) : P("", !0)]), M("div", Hl, [ct(M("input", { + }, L(e), 1))), 128))], 8, Vl)) : P("", !0)]), M("div", Hl, [nt(M("input", { "onUpdate:modelValue": t[0] ||= (e) => s.value = e, type: "text", - placeholder: V(O)("dialog.workflowCategory", "Workflow category"), + placeholder: B(O)("dialog.workflowCategory", "Workflow category"), style: { flex: "1", "min-width": "0", @@ -8099,13 +8099,13 @@ var Vo = ["title"], Ho = ["src"], Uo = { color: "rgba(255,255,255,0.92)", "font-size": "12px" } - }, null, 8, Ul), [[Mt, s.value]]), bt(n, { + }, null, 8, Ul), [[Nt, s.value]]), ot(n, { type: "button", severity: "secondary", text: "", rounded: "", disabled: c.value, - style: L({ + style: R({ padding: "8px 12px", borderRadius: "8px", border: "1px solid rgba(255,255,255,0.12)", @@ -8118,13 +8118,13 @@ var Vo = ["title"], Ho = ["src"], Uo = { }), onClick: Ze }, { - default: lt(() => [nt(B(c.value ? "Saving..." : "Move"), 1)]), + default: ct(() => [xt(L(c.value ? "Saving..." : "Move"), 1)]), _: 1 }, 8, ["disabled", "style"])])])) : P("", !0), - ot.value.length ? (N(), z("div", Wl, [ + st.value.length ? (I(), z("div", Wl, [ t[15] ||= M("div", { class: "mjr-section-title" }, " Workflow Nodes ", -1), - bt(r, { - value: ot.value, + ot(r, { + value: st.value, class: "mjr-workflow-tree", "scroll-height": "180px", pt: { @@ -8136,23 +8136,23 @@ var Vo = ["title"], Ho = ["src"], Uo = { nodeLabel: { class: "mjr-workflow-tree-label" } } }, { - default: lt(({ node: e }) => [M("span", Gl, [ - M("span", Kl, B(e.label), 1), - e.data?.type ? (N(), z("span", ql, B(e.data.type), 1)) : P("", !0), - M("span", Jl, "#" + B(e.data?.id), 1) + default: ct(({ node: e }) => [M("span", Gl, [ + M("span", Kl, L(e.label), 1), + e.data?.type ? (I(), z("span", ql, L(e.data.type), 1)) : P("", !0), + M("span", Jl, "#" + L(e.data?.id), 1) ])]), _: 1 }, 8, ["value"]), - st.value ? (N(), z("div", Yl, " +" + B(st.value) + " more nodes ", 1)) : P("", !0) + lt.value ? (I(), z("div", Yl, " +" + L(lt.value) + " more nodes ", 1)) : P("", !0) ])) : P("", !0), - M("div", Xl, [M("div", Zl, [(N(!0), z(j, null, I(V(a), (e) => (N(), it(n, { + M("div", Xl, [M("div", Zl, [(I(!0), z(j, null, N(B(a), (e) => (I(), rt(n, { key: e.key, type: "button", severity: "secondary", text: "", rounded: "", title: `${e.label} minimap`, - style: L({ + style: R({ appearance: "none", border: b.value.size === e.key ? "1px solid rgba(33,150,243,0.55)" : "1px solid rgba(255,255,255,0.12)", borderRadius: "999px", @@ -8163,21 +8163,21 @@ var Vo = ["title"], Ho = ["src"], Uo = { fontWeight: b.value.size === e.key ? "700" : "600", cursor: "pointer" }), - onClick: (t) => kt(e.key) + onClick: (t) => At(e.key) }, { - default: lt(() => [nt(B(e.label), 1)]), + default: ct(() => [xt(L(e.label), 1)]), _: 2 }, 1032, [ "title", "style", "onClick" - ]))), 128))]), bt(n, { + ]))), 128))]), ot(n, { type: "button", class: "mjr-btn mjr-icon-btn", severity: "secondary", text: "", rounded: "", - title: V(O)("tooltip.minimapSettings", "Minimap settings"), + title: B(O)("tooltip.minimapSettings", "Minimap settings"), style: { width: "28px", height: "28px", @@ -8192,15 +8192,15 @@ var Vo = ["title"], Ho = ["src"], Uo = { }, onClick: t[1] ||= (e) => v.value = !v.value }, { - default: lt(() => [...t[16] ||= [M("i", { class: "pi pi-sliders-h" }, null, -1)]]), + default: ct(() => [...t[16] ||= [M("i", { class: "pi pi-sliders-h" }, null, -1)]]), _: 1 }, 8, ["title"])]), - v.value ? (N(), z("div", Ql, [(N(!0), z(j, null, I(pt.value, (e) => (N(), it(n, { + v.value ? (I(), z("div", Ql, [(I(!0), z(j, null, N(ht.value, (e) => (I(), rt(n, { key: e.key, type: "button", severity: "secondary", text: "", - style: L({ + style: R({ display: "flex", alignItems: "center", gap: "10px", @@ -8212,10 +8212,10 @@ var Vo = ["title"], Ho = ["src"], Uo = { color: "rgba(255,255,255,0.92)", textAlign: "left" }), - onClick: (t) => Ot(e.key) + onClick: (t) => kt(e.key) }, { - default: lt(() => [ - M("span", { style: L({ + default: ct(() => [ + M("span", { style: R({ width: "22px", height: "22px", borderRadius: "6px", @@ -8227,29 +8227,29 @@ var Vo = ["title"], Ho = ["src"], Uo = { flex: "0 0 auto" }) }, [M("i", { class: "pi pi-check", - style: L({ + style: R({ fontSize: "12px", opacity: b.value?.[e.key] ? "1" : "0" }) }, null, 4)], 4), M("i", { - class: ht(e.iconClass), + class: wt(e.iconClass), style: { "font-size": "18px", opacity: "0.9", width: "18px" } }, null, 2), - M("div", $l, [M("div", eu, B(e.label), 1), M("div", tu, B(b.value?.[e.key] ? "On" : "Off"), 1)]) + M("div", $l, [M("div", eu, L(e.label), 1), M("div", tu, L(b.value?.[e.key] ? "On" : "Off"), 1)]) ]), _: 2 }, 1032, ["style", "onClick"]))), 128))])) : P("", !0), M("div", nu, [M("canvas", { ref_key: "canvasRef", ref: o, - style: L({ + style: R({ width: "100%", - height: ft.value, + height: mt.value, cursor: S.value, touchAction: "none", borderRadius: "10px", @@ -8258,15 +8258,15 @@ var Vo = ["title"], Ho = ["src"], Uo = { border: "1px solid var(--mjr-border, rgba(255,255,255,0.12))", boxShadow: "inset 0 0 0 1px rgba(255,255,255,0.03)" }), - onPointerdown: St, - onPointermove: Ct, - onPointerup: wt, - onPointercancel: wt, - onPointerleave: wt, - onWheel: Tt, - onDblclick: Dt + onPointerdown: Ct, + onPointermove: Tt, + onPointerup: Et, + onPointercancel: Et, + onPointerleave: Et, + onWheel: Dt, + onDblclick: Ot }, null, 36)]), - M("div", ru, [M("span", null, B(C.value || "Click/drag to navigate | wheel to zoom"), 1), M("span", null, B(Math.round((x.value.zoom || 1) * 100)) + "% | " + B(dt.value.label), 1)]), + M("div", ru, [M("span", null, L(C.value || "Click/drag to navigate | wheel to zoom"), 1), M("span", null, L(Math.round((x.value.zoom || 1) * 100)) + "% | " + L(pt.value.label), 1)]), M("details", { open: y.value, style: { "margin-top": "10px" }, @@ -8276,7 +8276,7 @@ var Vo = ["title"], Ho = ["src"], Uo = { color: "var(--mjr-muted, rgba(255,255,255,0.65))", "font-size": "12px", "user-select": "none" - } }, " Show raw JSON ", -1), M("pre", au, B(Ue.value), 1)], 40, iu) + } }, " Show raw JSON ", -1), M("pre", au, L(Ue.value), 1)], 40, iu) ])) : P("", !0); }; } diff --git a/dist/chunks/StudioPlayer-DXSy5UA5.js b/dist/chunks/StudioPlayer-DXSy5UA5.js deleted file mode 100644 index 0c37d91d..00000000 --- a/dist/chunks/StudioPlayer-DXSy5UA5.js +++ /dev/null @@ -1,597 +0,0 @@ -import { m as e } from "./events-cBMXVULQ.js"; -import { g as t, h as n } from "./viewerOpenRequest-_DqD1rXA.js"; -import { A as r, B as i, C as a, D as o, E as s, H as c, K as l, N as u, O as d, S as ee, T as f, Y as p, dt as m, ft as h, it as g, j as _, k as v, pt as y, q as te, ut as b, z as ne } from "./mjr-primevue-3mpaVb1C.js"; -// ui/features/viewer/studio/studioMedia.ts -var x = /* @__PURE__ */ new Set([ - "png", - "jpg", - "jpeg", - "webp", - "gif", - "bmp", - "avif", - "tif", - "tiff", - "jxl", - "exr", - "svg" -]), re = /* @__PURE__ */ new Set([ - "mp4", - "webm", - "mov", - "mkv", - "avi", - "m4v" -]), S = /* @__PURE__ */ new Set([ - "mp3", - "wav", - "flac", - "ogg", - "opus", - "m4a", - "aac", - "aiff" -]), C = /* @__PURE__ */ new Set([ - "glb", - "gltf", - "obj", - "fbx", - "stl", - "ply", - "splat", - "ksplat", - "spz" -]); -function w(e) { - let t = String(e?.filename || e?.name || e?.filepath || "").trim(), n = t.lastIndexOf("."); - return n >= 0 ? t.slice(n + 1).toLowerCase() : ""; -} -function T(e) { - let t = String(e?.kind || "").trim().toLowerCase(); - if (t === "image" || t === "video" || t === "audio" || t === "model3d") return t; - let n = w(e); - return x.has(n) ? "image" : re.has(n) ? "video" : S.has(n) ? "audio" : C.has(n) ? "model3d" : "other"; -} -function E(e, { withCentis: t = !0 } = {}) { - let n = Math.floor((Number.isFinite(e) && e > 0 ? e : 0) * 100 + 1e-6), r = n % 100, i = Math.floor(n / 100), a = i % 60, o = Math.floor(i / 60) % 60, s = Math.floor(i / 3600), c = s > 0 ? String(o).padStart(2, "0") : String(o), l = `${s > 0 ? `${s}:` : ""}${c}:${String(a).padStart(2, "0")}`; - return t ? `${l}.${String(r).padStart(2, "0")}` : l; -} -function D(e, t) { - return !t || !Number.isFinite(t) || t <= 0 ? 0 : Math.max(0, Math.floor(Math.max(0, e) * t + 1e-6)); -} -function O(e, t) { - return !t || !Number.isFinite(t) || t <= 0 ? 0 : Math.max(0, (Math.max(0, Math.floor(e)) + .25) / t); -} -function ie(e, t, n, r) { - let i = t && Number.isFinite(t) && t > 0 ? t : 24, a = O(D(e, i) + n, i); - return Math.min(Math.max(0, a), Math.max(0, (Number.isFinite(r) && r > 0 ? r : a) - .5 / i)); -} -function ae(e, t, n) { - let r = Number(n); - return Number.isFinite(r) && r > 0 ? Math.floor(r) : !t || !Number.isFinite(e) || e <= 0 ? null : Math.max(1, Math.round(e * t)); -} -function oe(e, t) { - if (e.a == null || e.b == null) return null; - let n = Number.isFinite(t) && t > 0 ? t : Math.max(e.a, e.b), r = Math.min(Math.max(0, Math.min(e.a, e.b)), n), i = Math.min(Math.max(0, Math.max(e.a, e.b)), n); - return i - r >= .02 ? { - a: r, - b: i - } : null; -} -function se(e, t, n) { - let r = oe(t, n); - return r && (e >= r.b || e < r.a - .05) ? r.a : null; -} -var ce = [ - .25, - .5, - 1, - 1.5, - 2 -]; -function k(e, r) { - return t(e) ?? n(r?.fps_raw ?? r?.fps ?? r?.frame_rate) ?? n(e?.fps); -} -function A(e) { - let t = [], n = Number(e?.width), r = Number(e?.height); - n > 0 && r > 0 && t.push(`${n}×${r}`); - let i = w(e); - i && t.push(i.toUpperCase()); - let a = Number(e?.duration); - a > 0 && t.push(E(a, { withCentis: !1 })); - let o = Number(e?.size); - return o > 0 && t.push(j(o)), t.join(" · "); -} -function j(e) { - if (!Number.isFinite(e) || e <= 0) return ""; - let t = [ - "B", - "KB", - "MB", - "GB" - ], n = e, r = 0; - for (; n >= 1024 && r < t.length - 1;) n /= 1024, r += 1; - return `${n >= 10 || r === 0 ? Math.round(n) : n.toFixed(1)} ${t[r]}`; -} -function M(e, t, n = 40) { - if (e <= 0) return { - start: 0, - end: 0 - }; - let r = n * 2 + 1; - if (e <= r) return { - start: 0, - end: e - }; - let i = Math.max(0, t - n), a = i + r; - return a > e && (a = e, i = e - r), { - start: i, - end: a - }; -} -// ui/vue/components/viewer/studio/StudioPlayer.vue?vue&type=script&setup=true&lang.ts -var le = ["src"], ue = ["src"], de = { - key: 3, - class: "mjr-studio-player__error" -}, fe = [ - "aria-label", - "aria-valuemax", - "aria-valuenow" -], pe = { class: "mjr-studio-player__row" }, me = { class: "mjr-studio-player__time" }, he = { class: "is-dim" }, ge = ["title"], _e = ["title"], ve = { class: "mjr-studio-player__group" }, ye = ["aria-label", "aria-valuenow"], N = /* @__PURE__ */ u({ - __name: "StudioPlayer", - props: { - src: {}, - kind: {}, - fps: {}, - frameCount: {}, - filename: {}, - initialMuted: { type: Boolean }, - initialRate: {}, - compact: { type: Boolean } - }, - emits: ["ended"], - setup(t, { expose: n, emit: u }) { - let x = t, re = u, S = g(null), C = g(null), w = g(null), T = g(!1), O = g(0), k = g(0), A = g(0), j = g(1), M = g(!!x.initialMuted), N = g(Number(x.initialRate) > 0 ? Number(x.initialRate) : 1), P = g(!0), F = g(null), I = g(null), L = g(null), R = g(!1), z = g(!0), B = g(""), V = null, H = 0, U = f(() => x.fps && x.fps > 0 ? x.fps : null), be = f(() => D(O.value, U.value)), xe = f(() => ae(k.value, U.value, x.frameCount)), Se = f(() => k.value > 0 ? O.value / k.value * 100 : 0), Ce = f(() => k.value > 0 ? A.value / k.value * 100 : 0), W = f(() => oe({ - a: F.value, - b: I.value - }, k.value)), we = f(() => { - if (!W.value || k.value <= 0) return null; - let e = W.value.a / k.value * 100, t = (W.value.b - W.value.a) / k.value * 100; - return { - left: `${e}%`, - width: `${t}%` - }; - }), G = f(() => L.value == null || k.value <= 0 ? null : L.value / 100 * k.value); - function K() { - return S.value; - } - function Te() { - let e = K(); - if (e) { - O.value = e.currentTime || 0; - let t = se(O.value, { - a: F.value, - b: I.value - }, k.value); - t != null && T.value && (e.currentTime = t, O.value = t); - } - T.value && (H = requestAnimationFrame(Te)); - } - function Ee() { - T.value = !0, cancelAnimationFrame(H), H = requestAnimationFrame(Te), Ge(); - } - function De() { - T.value = !1, cancelAnimationFrame(H), We(); - } - function Oe() { - let e = K(); - k.value = Number.isFinite(e?.duration) ? Number(e?.duration) : 0, B.value = "", e && (e.volume = j.value, e.muted = M.value, e.playbackRate = N.value); - } - function q() { - let e = K(); - if (e) { - T.value || (O.value = e.currentTime || 0); - try { - let t = e.buffered; - A.value = t.length ? t.end(t.length - 1) : 0; - } catch { - A.value = 0; - } - } - } - function ke() { - if (P.value && !W.value) { - let e = K(); - e && (e.currentTime = 0, e.play()?.catch?.(() => {})); - } else re("ended"); - } - function Ae() { - B.value = e("viewer.studio.mediaError", "This file cannot be played by the browser."); - } - function J() { - let e = K(); - e && (e.paused ? e.play()?.catch?.(() => {}) : e.pause()); - } - function Y(e) { - let t = K(); - if (!t || !Number.isFinite(e)) return; - let n = k.value > 0 ? k.value : e; - t.currentTime = Math.max(0, Math.min(e, n)), O.value = t.currentTime; - } - function X(e) { - let t = K(); - t && (t.paused || t.pause(), Y(ie(t.currentTime || 0, U.value, e, k.value))); - } - function je(e) { - Y((K()?.currentTime || 0) + e); - } - function Me(e) { - let t = w.value?.getBoundingClientRect(); - return !t || t.width <= 0 ? 0 : Math.max(0, Math.min(100, (e.clientX - t.left) / t.width * 100)); - } - function Ne(e) { - k.value <= 0 || (R.value = !0, e.currentTarget?.setPointerCapture?.(e.pointerId), Y(Me(e) / 100 * k.value)); - } - function Pe(e) { - L.value = Me(e), R.value && Y(L.value / 100 * k.value); - } - function Fe(e) { - R.value = !1, e.currentTarget?.releasePointerCapture?.(e.pointerId); - } - function Ie(e) { - N.value = e; - let t = K(); - t && (t.playbackRate = e); - } - function Le(e = 1, t = !1) { - let n = ce, r = n.indexOf(N.value), i = (r < 0 ? n.indexOf(1) : r) + e; - t && (i = (i + n.length) % n.length), Ie(n[Math.max(0, Math.min(n.length - 1, i))]); - } - function Re() { - M.value = !M.value; - let e = K(); - e && (e.muted = M.value); - } - let Z = g(!1); - function ze(e) { - if (e.type === "pointerdown") Z.value = !0, e.currentTarget?.setPointerCapture?.(e.pointerId); - else if (!Z.value) return; - let t = e.currentTarget.getBoundingClientRect(), n = t.width > 0 ? (e.clientX - t.left) / t.width : 1; - Be(Math.round(Math.max(0, Math.min(1, n)) * 20) / 20); - } - function Be(e) { - j.value = e; - let t = K(); - t && (t.volume = j.value, j.value > 0 && M.value && (M.value = !1, t.muted = !1)); - } - function Ve() { - F.value = O.value, I.value != null && I.value <= F.value && (I.value = null); - } - function He() { - I.value = O.value, F.value ??= 0; - } - function Q() { - F.value = null, I.value = null; - } - function $() { - let e = C.value; - e && (document.fullscreenElement ? document.exitFullscreen?.() : e.requestFullscreen?.()); - } - async function Ue() { - let e = K(); - if (x.kind !== "video" || !(e instanceof HTMLVideoElement) || !e.videoWidth) return; - let t = document.createElement("canvas"); - t.width = e.videoWidth, t.height = e.videoHeight, t.getContext("2d")?.drawImage(e, 0, 0); - let n = await new Promise((e) => t.toBlob(e, "image/png")); - if (!n) return; - let r = URL.createObjectURL(n), i = String(x.filename || "frame").replace(/\.[^.]+$/, ""), a = document.createElement("a"); - a.href = r, a.download = `${i}_f${String(be.value).padStart(5, "0")}.png`, a.click(), setTimeout(() => URL.revokeObjectURL(r), 1e3); - } - function We() { - z.value = !0, Ge(); - } - function Ge() { - V && clearTimeout(V), V = setTimeout(() => { - T.value && !R.value && x.kind === "video" && (z.value = !1); - }, 2200); - } - function Ke() { - let e = K(); - if (e) try { - e.pause(), e.removeAttribute("src"), e.load(); - } catch (e) { - console.debug?.(e); - } - } - te(() => x.src, () => { - Q(), O.value = 0, k.value = 0, A.value = 0, B.value = ""; - }); - function qe() { - let e = K(); - if (!e) return; - e.muted = M.value, e.playbackRate = N.value; - let t = e.play?.(); - t && typeof t.catch == "function" && t.catch(() => { - e.muted || (M.value = !0, e.muted = !0, e.play?.()?.catch?.(() => {})); - }); - } - return i(qe), ne(() => { - cancelAnimationFrame(H), V && clearTimeout(V), Ke(); - }), n({ - togglePlay: J, - play: qe, - stepFrame: X, - seekBy: je, - cycleRate: Le, - toggleMute: Re, - setLoopA: Ve, - setLoopB: He, - clearLoop: Q, - toggleFullscreen: $, - exportFrame: Ue, - release: Ke - }), (n, i) => { - let u = l("MButton"); - return c(), v("div", { - ref_key: "root", - ref: C, - class: m(["mjr-studio-player", { - "is-audio": t.kind === "audio", - "is-compact": t.compact, - "controls-hidden": !z.value - }]), - onPointermove: We - }, [ - t.kind === "video" ? (c(), v("video", { - key: 0, - ref_key: "media", - ref: S, - class: "mjr-studio-player__media", - src: t.src, - playsinline: "", - preload: "auto", - onClick: J, - onDblclick: $, - onPlay: Ee, - onPause: De, - onLoadedmetadata: Oe, - onTimeupdate: q, - onProgress: q, - onEnded: ke, - onError: Ae - }, null, 40, le)) : (c(), v("div", { - key: 1, - class: "mjr-studio-player__audio-art", - onClick: J - }, [ - i[7] ||= s("i", { - class: "pi pi-volume-up", - "aria-hidden": "true" - }, null, -1), - s("span", null, y(t.filename), 1), - s("audio", { - ref_key: "media", - ref: S, - src: t.src, - preload: "auto", - onPlay: Ee, - onPause: De, - onLoadedmetadata: Oe, - onTimeupdate: q, - onProgress: q, - onEnded: ke, - onError: Ae - }, null, 40, ue) - ])), - !T.value && !B.value ? (c(), o(u, { - key: 2, - type: "button", - class: "mjr-studio-player__big-play", - "aria-label": b(e)("viewer.studio.play", "Play"), - onClick: J - }, { - default: p(() => [...i[8] ||= [s("i", { - class: "pi pi-play", - "aria-hidden": "true" - }, null, -1)]]), - _: 1 - }, 8, ["aria-label"])) : d("", !0), - B.value ? (c(), v("div", de, y(B.value), 1)) : d("", !0), - s("div", { - class: "mjr-studio-player__controls", - onPointerdown: i[6] ||= ee(() => {}, ["stop"]) - }, [s("div", { - ref_key: "track", - ref: w, - class: "mjr-studio-player__track", - role: "slider", - "aria-label": b(e)("viewer.studio.seek", "Seek"), - "aria-valuemin": 0, - "aria-valuemax": k.value, - "aria-valuenow": O.value, - onPointerdown: Ne, - onPointermove: Pe, - onPointerup: Fe, - onPointerleave: i[0] ||= (e) => L.value = null - }, [ - s("div", { - class: "mjr-studio-player__buffered", - style: h({ width: `${Ce.value}%` }) - }, null, 4), - we.value ? (c(), v("div", { - key: 0, - class: "mjr-studio-player__loop", - style: h(we.value) - }, null, 4)) : d("", !0), - s("div", { - class: "mjr-studio-player__progress", - style: h({ width: `${Se.value}%` }) - }, null, 4), - s("div", { - class: "mjr-studio-player__thumb", - style: h({ left: `${Se.value}%` }) - }, null, 4), - G.value == null ? d("", !0) : (c(), v("div", { - key: 1, - class: "mjr-studio-player__hover", - style: h({ left: `${L.value}%` }) - }, [r(y(b(E)(G.value)), 1), U.value ? (c(), v(a, { key: 0 }, [r(" · f" + y(b(D)(G.value, U.value)), 1)], 64)) : d("", !0)], 4)) - ], 40, fe), s("div", pe, [ - _(u, { - type: "button", - class: "mjr-studio-btn", - title: b(e)("viewer.studio.playPause", "Play / pause (Space)"), - onClick: J - }, { - default: p(() => [s("i", { - class: m(T.value ? "pi pi-pause" : "pi pi-play"), - "aria-hidden": "true" - }, null, 2)]), - _: 1 - }, 8, ["title"]), - t.kind === "video" ? (c(), v(a, { key: 0 }, [_(u, { - type: "button", - class: "mjr-studio-btn", - title: b(e)("viewer.studio.prevFrame", "Previous frame (,)"), - onClick: i[1] ||= (e) => X(-1) - }, { - default: p(() => [...i[9] ||= [s("i", { - class: "pi pi-step-backward", - "aria-hidden": "true" - }, null, -1)]]), - _: 1 - }, 8, ["title"]), _(u, { - type: "button", - class: "mjr-studio-btn", - title: b(e)("viewer.studio.nextFrame", "Next frame (.)"), - onClick: i[2] ||= (e) => X(1) - }, { - default: p(() => [...i[10] ||= [s("i", { - class: "pi pi-step-forward", - "aria-hidden": "true" - }, null, -1)]]), - _: 1 - }, 8, ["title"])], 64)) : d("", !0), - s("span", me, [r(y(b(E)(O.value)) + " ", 1), s("span", he, "/ " + y(b(E)(k.value)), 1)]), - t.kind === "video" && U.value ? (c(), v("span", { - key: 1, - class: "mjr-studio-chip", - title: b(e)("viewer.studio.frame", "Frame") - }, [ - r(" f " + y(be.value), 1), - xe.value ? (c(), v(a, { key: 0 }, [r(" / " + y(xe.value - 1), 1)], 64)) : d("", !0), - r(" · " + y(Math.round(U.value * 100) / 100) + " fps ", 1) - ], 8, ge)) : d("", !0), - i[17] ||= s("span", { class: "mjr-studio-player__spacer" }, null, -1), - s("div", { - class: "mjr-studio-player__group", - title: b(e)("viewer.studio.abLoop", "A-B loop (I / O, U to clear)") - }, [ - _(u, { - type: "button", - class: m(["mjr-studio-btn is-text", { "is-on": F.value != null }]), - onClick: Ve - }, { - default: p(() => [...i[11] ||= [r("A", -1)]]), - _: 1 - }, 8, ["class"]), - _(u, { - type: "button", - class: m(["mjr-studio-btn is-text", { "is-on": I.value != null }]), - onClick: He - }, { - default: p(() => [...i[12] ||= [r("B", -1)]]), - _: 1 - }, 8, ["class"]), - F.value != null || I.value != null ? (c(), o(u, { - key: 0, - type: "button", - class: "mjr-studio-btn", - title: b(e)("viewer.studio.clearLoop", "Clear A-B loop"), - onClick: Q - }, { - default: p(() => [...i[13] ||= [s("i", { - class: "pi pi-times", - "aria-hidden": "true" - }, null, -1)]]), - _: 1 - }, 8, ["title"])) : d("", !0) - ], 8, _e), - _(u, { - type: "button", - class: m(["mjr-studio-btn", { "is-on": P.value }]), - title: b(e)("viewer.studio.loop", "Loop"), - onClick: i[3] ||= (e) => P.value = !P.value - }, { - default: p(() => [...i[14] ||= [s("i", { - class: "pi pi-replay", - "aria-hidden": "true" - }, null, -1)]]), - _: 1 - }, 8, ["class", "title"]), - _(u, { - type: "button", - class: m(["mjr-studio-btn is-text", { "is-on": N.value !== 1 }]), - title: b(e)("viewer.studio.speed", "Speed ([ / ])"), - onClick: i[4] ||= (e) => Le(1, !0) - }, { - default: p(() => [r(y(N.value) + "×", 1)]), - _: 1 - }, 8, ["class", "title"]), - s("div", ve, [_(u, { - type: "button", - class: "mjr-studio-btn", - title: b(e)("viewer.studio.mute", "Mute (M)"), - onClick: Re - }, { - default: p(() => [s("i", { - class: m(M.value || j.value === 0 ? "pi pi-volume-off" : "pi pi-volume-up"), - "aria-hidden": "true" - }, null, 2)]), - _: 1 - }, 8, ["title"]), s("div", { - class: "mjr-studio-player__volume", - role: "slider", - "aria-label": b(e)("viewer.studio.volume", "Volume"), - "aria-valuemin": 0, - "aria-valuemax": 1, - "aria-valuenow": M.value ? 0 : j.value, - onPointerdown: ze, - onPointermove: ze, - onPointerup: i[5] ||= (e) => Z.value = !1 - }, [s("div", { - class: "mjr-studio-player__volume-fill", - style: h({ width: `${(M.value ? 0 : j.value) * 100}%` }) - }, null, 4)], 40, ye)]), - t.kind === "video" ? (c(), o(u, { - key: 2, - type: "button", - class: "mjr-studio-btn", - title: b(e)("viewer.studio.exportFrame", "Save this frame as PNG"), - onClick: Ue - }, { - default: p(() => [...i[15] ||= [s("i", { - class: "pi pi-camera", - "aria-hidden": "true" - }, null, -1)]]), - _: 1 - }, 8, ["title"])) : d("", !0), - t.kind === "video" ? (c(), o(u, { - key: 3, - type: "button", - class: "mjr-studio-btn", - title: b(e)("viewer.studio.fullscreen", "Fullscreen (F)"), - onClick: $ - }, { - default: p(() => [...i[16] ||= [s("i", { - class: "pi pi-window-maximize", - "aria-hidden": "true" - }, null, -1)]]), - _: 1 - }, 8, ["title"])) : d("", !0) - ])], 32) - ], 34); - }; - } -}); -export { T as a, k as i, A as n, M as r, N as t }; diff --git a/dist/chunks/StudioPlayer-ZPvmvcGX.js b/dist/chunks/StudioPlayer-ZPvmvcGX.js new file mode 100644 index 00000000..75eb45b5 --- /dev/null +++ b/dist/chunks/StudioPlayer-ZPvmvcGX.js @@ -0,0 +1,1002 @@ +import { m as e } from "./events-CttACGx4.js"; +import { g as t, h as n } from "./viewerOpenRequest-CZXk8yvU.js"; +import { $ as r, B as i, C as a, D as o, E as s, H as c, J as ee, M as l, O as u, P as te, Q as d, S as f, T as p, V as ne, W as m, X as re, b as ie, gt as h, ht as g, j as _, k as v, mt as y, pt as b, q as ae, st as x } from "./mjr-primevue-C07IsEdU.js"; +// ui/features/viewer/studio/studioFx.ts +function S() { + return { + channel: "rgb", + exposure: 0, + gamma: 1, + zebra: !1, + zebraThreshold: .95, + scopes: "off", + grid: "off", + aspect: "off", + maskOpacity: .65, + probe: !1, + loupe: !1, + loupeSize: 140, + loupeZoom: 8, + compare: "off", + wipe: 50 + }; +} +var C = .2126, w = .7152, oe = .0722; +function se(e) { + let t = (e, t, n, r = 0) => [ + e, + t, + n, + r, + 0, + e, + t, + n, + r, + 0, + e, + t, + n, + r, + 0 + ].join(" "); + switch (e) { + case "r": return `${t(1, 0, 0)} 0 0 0 1 0`; + case "g": return `${t(0, 1, 0)} 0 0 0 1 0`; + case "b": return `${t(0, 0, 1)} 0 0 0 1 0`; + case "l": return `${t(C, w, oe)} 0 0 0 1 0`; + case "a": return `${t(0, 0, 0, 1)} 0 0 0 0 1`; + default: return null; + } +} +function T(e) { + return 2 ** (Number.isFinite(e) ? Math.max(-10, Math.min(10, e)) : 0); +} +function E(e) { + return 1 / (Number.isFinite(e) && e > 0 ? e : 1); +} +function D(e) { + return e.channel !== "rgb" || Math.abs(e.exposure) > .001 || Math.abs(e.gamma - 1) > .001; +} +function O(e) { + switch (e) { + case "16:9": return 16 / 9; + case "1:1": return 1; + case "4:3": return 4 / 3; + case "2.39": return 2.39; + case "9:16": return 9 / 16; + default: return null; + } +} +function ce(e, t, n) { + let r = O(n); + if (!r || e <= 0 || t <= 0) return null; + let i = e, a = e / r; + return a > t && (a = t, i = t * r), { + x: (e - i) / 2, + y: (t - a) / 2, + w: i, + h: a + }; +} +function le(e, t, n) { + let r = [], i = []; + if (e <= 0 || t <= 0 || n === "off") return { + lines: r, + rects: i + }; + let a = (n) => r.push({ + x1: e * n, + y1: 0, + x2: e * n, + y2: t + }), o = (n) => r.push({ + x1: 0, + y1: t * n, + x2: e, + y2: t * n + }); + if (n === "thirds") a(1 / 3), a(2 / 3), o(1 / 3), o(2 / 3); + else if (n === "golden") { + let e = .381966; + a(e), a(.618034), o(e), o(.618034); + } else if (n === "center") a(.5), o(.5); + else if (n === "safe") { + for (let n of [.9, .8]) i.push({ + x: e * (1 - n) / 2, + y: t * (1 - n) / 2, + w: e * n, + h: t * n + }); + a(.5), o(.5); + } + return { + lines: r, + rects: i + }; +} +function k(e, t, n) { + return C * e + w * t + oe * n; +} +function A(e) { + let t = /* @__PURE__ */ new Uint32Array(256), n = /* @__PURE__ */ new Uint32Array(256), r = /* @__PURE__ */ new Uint32Array(256), i = /* @__PURE__ */ new Uint32Array(256); + for (let a = 0; a + 3 < e.length; a += 4) e[a + 3] !== 0 && (t[e[a]] += 1, n[e[a + 1]] += 1, r[e[a + 2]] += 1, i[Math.round(k(e[a], e[a + 1], e[a + 2]))] += 1); + let a = 1; + for (let e = 1; e < 255; e++) a = Math.max(a, t[e], n[e], r[e], i[e]); + return { + r: t, + g: n, + b: r, + l: i, + max: a + }; +} +function j(e, t, n, r = 256) { + let i = Math.max(1, Math.min(r, t)), a = new Uint32Array(i * 256), o = 1; + for (let r = 0; r < n; r++) for (let n = 0; n < t; n++) { + let s = (r * t + n) * 4; + if (e[s + 3] === 0) continue; + let c = Math.min(i - 1, Math.floor(n * i / t)), ee = Math.round(k(e[s], e[s + 1], e[s + 2])), l = c * 256 + ee; + a[l] += 1, a[l] > o && (o = a[l]); + } + return { + columns: i, + bins: a, + max: o + }; +} +function ue(e, t, n, r, i = 0) { + let a = new Uint8ClampedArray(/* @__PURE__ */ new ArrayBuffer(t * n * 4)), o = Math.max(0, Math.min(1, r)) * 255; + for (let r = 0; r < n; r++) for (let n = 0; n < t; n++) { + let s = (r * t + n) * 4; + if (k(e[s], e[s + 1], e[s + 2]) < o) continue; + let c = Math.floor((n + r + i) / 4) % 2 == 0; + a[s] = c ? 255 : 20, a[s + 1] = c ? 40 : 20, a[s + 2] = c ? 40 : 20, a[s + 3] = 200; + } + return a; +} +function de(e, t, n = 256) { + if (e <= 0 || t <= 0) return { + w: 0, + h: 0 + }; + let r = Math.min(1, n / Math.max(e, t)); + return { + w: Math.max(1, Math.round(e * r)), + h: Math.max(1, Math.round(t * r)) + }; +} +function fe(e, t, n, r) { + return { + hex: `#${[ + e, + t, + n + ].map((e) => Math.round(e).toString(16).padStart(2, "0")).join("")}`.toUpperCase(), + rgb: `${e}, ${t}, ${n}${r < 255 ? ` · α ${r}` : ""}`, + luma: `${Math.round(k(e, t, n) / 255 * 100)}%` + }; +} +function pe(e) { + switch (e) { + case "difference": return "difference"; + case "add": return "plus-lighter"; + case "multiply": return "multiply"; + case "screen": return "screen"; + default: return null; + } +} +var M = [ + { + value: "wipe", + label: "Wipe ↔" + }, + { + value: "wipeV", + label: "Wipe ↕" + }, + { + value: "side", + label: "Side by side" + }, + { + value: "difference", + label: "Difference" + }, + { + value: "add", + label: "Add" + }, + { + value: "subtract", + label: "Subtract", + imageOnly: !0 + }, + { + value: "multiply", + label: "Multiply" + }, + { + value: "screen", + label: "Screen" + } +]; +function N(e, t, n, r = () => !0) { + let i = e.length; + if (i < 2) return null; + let a = n < 0 ? -1 : 1; + for (let n = 1; n < i; n++) { + let o = ((t + a * n) % i + i) % i; + if (o !== t && r(e[o], o)) return o; + } + return null; +} +// ui/features/viewer/studio/studioMedia.ts +var P = /* @__PURE__ */ new Set([ + "png", + "jpg", + "jpeg", + "webp", + "gif", + "bmp", + "avif", + "tif", + "tiff", + "jxl", + "exr", + "svg" +]), F = /* @__PURE__ */ new Set([ + "mp4", + "webm", + "mov", + "mkv", + "avi", + "m4v" +]), I = /* @__PURE__ */ new Set([ + "mp3", + "wav", + "flac", + "ogg", + "opus", + "m4a", + "aac", + "aiff" +]), L = /* @__PURE__ */ new Set([ + "glb", + "gltf", + "obj", + "fbx", + "stl", + "ply", + "splat", + "ksplat", + "spz" +]); +function R(e) { + let t = String(e?.filename || e?.name || e?.filepath || "").trim(), n = t.lastIndexOf("."); + return n >= 0 ? t.slice(n + 1).toLowerCase() : ""; +} +function z(e) { + let t = String(e?.kind || "").trim().toLowerCase(); + if (t === "image" || t === "video" || t === "audio" || t === "model3d") return t; + let n = R(e); + return P.has(n) ? "image" : F.has(n) ? "video" : I.has(n) ? "audio" : L.has(n) ? "model3d" : "other"; +} +function me(e, { withCentis: t = !0 } = {}) { + let n = Math.floor((Number.isFinite(e) && e > 0 ? e : 0) * 100 + 1e-6), r = n % 100, i = Math.floor(n / 100), a = i % 60, o = Math.floor(i / 60) % 60, s = Math.floor(i / 3600), c = s > 0 ? String(o).padStart(2, "0") : String(o), ee = `${s > 0 ? `${s}:` : ""}${c}:${String(a).padStart(2, "0")}`; + return t ? `${ee}.${String(r).padStart(2, "0")}` : ee; +} +function he(e, t) { + return !t || !Number.isFinite(t) || t <= 0 ? 0 : Math.max(0, Math.floor(Math.max(0, e) * t + 1e-6)); +} +function B(e, t) { + return !t || !Number.isFinite(t) || t <= 0 ? 0 : Math.max(0, (Math.max(0, Math.floor(e)) + .25) / t); +} +function ge(e, t, n, r) { + let i = t && Number.isFinite(t) && t > 0 ? t : 24, a = B(he(e, i) + n, i); + return Math.min(Math.max(0, a), Math.max(0, (Number.isFinite(r) && r > 0 ? r : a) - .5 / i)); +} +function _e(e, t, n) { + let r = Number(n); + return Number.isFinite(r) && r > 0 ? Math.floor(r) : !t || !Number.isFinite(e) || e <= 0 ? null : Math.max(1, Math.round(e * t)); +} +function ve(e, t) { + if (e.a == null || e.b == null) return null; + let n = Number.isFinite(t) && t > 0 ? t : Math.max(e.a, e.b), r = Math.min(Math.max(0, Math.min(e.a, e.b)), n), i = Math.min(Math.max(0, Math.max(e.a, e.b)), n); + return i - r >= .02 ? { + a: r, + b: i + } : null; +} +function ye(e, t, n) { + let r = ve(t, n); + return r && (e >= r.b || e < r.a - .05) ? r.a : null; +} +var be = [ + .25, + .5, + 1, + 1.5, + 2 +]; +function V(e, r) { + return t(e) ?? n(r?.fps_raw ?? r?.fps ?? r?.frame_rate) ?? n(e?.fps); +} +function H(e) { + let t = [], n = Number(e?.width), r = Number(e?.height); + n > 0 && r > 0 && t.push(`${n}×${r}`); + let i = R(e); + i && t.push(i.toUpperCase()); + let a = Number(e?.duration); + a > 0 && t.push(me(a, { withCentis: !1 })); + let o = Number(e?.size); + return o > 0 && t.push(U(o)), t.join(" · "); +} +function U(e) { + if (!Number.isFinite(e) || e <= 0) return ""; + let t = [ + "B", + "KB", + "MB", + "GB" + ], n = e, r = 0; + for (; n >= 1024 && r < t.length - 1;) n /= 1024, r += 1; + return `${n >= 10 || r === 0 ? Math.round(n) : n.toFixed(1)} ${t[r]}`; +} +function W(e, t, n = 40) { + if (e <= 0) return { + start: 0, + end: 0 + }; + let r = n * 2 + 1; + if (e <= r) return { + start: 0, + end: e + }; + let i = Math.max(0, t - n), a = i + r; + return a > e && (a = e, i = e - r), { + start: i, + end: a + }; +} +// ui/vue/components/viewer/studio/StudioPlayer.vue?vue&type=script&setup=true&lang.ts +var xe = ["src"], Se = ["src"], Ce = { + key: 0, + class: "mjr-studio-stage__ab" +}, we = { class: "is-sep" }, Te = { + class: "pi pi-volume-up", + "aria-hidden": "true" +}, Ee = ["src"], De = { + key: 3, + class: "mjr-studio-player__error" +}, Oe = [ + "aria-label", + "aria-valuemax", + "aria-valuenow" +], ke = { class: "mjr-studio-player__row" }, Ae = { class: "mjr-studio-player__time" }, je = { class: "is-dim" }, Me = ["title"], Ne = ["title"], Pe = { class: "mjr-studio-player__group" }, Fe = ["aria-label", "aria-valuenow"], G = /* @__PURE__ */ te({ + __name: "StudioPlayer", + props: { + src: {}, + kind: {}, + fps: {}, + frameCount: {}, + filename: {}, + initialMuted: { type: Boolean }, + initialRate: {}, + compact: { type: Boolean }, + mediaFilter: {}, + compareSrc: {}, + compare: {}, + wipe: {} + }, + emits: ["ended", "update:wipe"], + setup(t, { expose: n, emit: te }) { + let S = t, C = te, w = x(null), oe = x(null), se = x(null), T = x(null), E = x(null), D = x({ + x: 0, + y: 0, + w: 0, + h: 0 + }), O = x(!1), ce = null, le = x(null), k = x(!1), A = null, j = null, ue = 0; + async function de() { + if (S.kind !== "audio" || j || A) return; + let e = X(), t = window.AudioContext || window.webkitAudioContext; + if (e && t) try { + if (A = new t(), await A.resume?.(), A.state !== "running") { + A.close?.(), A = null; + return; + } + let n = A.createMediaElementSource(e); + j = A.createAnalyser(), j.fftSize = 256, j.smoothingTimeConstant = .78, n.connect(j), j.connect(A.destination), k.value = !0, fe(); + } catch (e) { + console.debug?.(e); + } + } + function fe() { + cancelAnimationFrame(ue); + let e = le.value, t = e?.getContext("2d"); + if (!e || !t || !j) return; + let n = e.width = e.clientWidth || 480, r = e.height = e.clientHeight || 160, i = new Uint8Array(j.frequencyBinCount); + j.getByteFrequencyData(i), t.clearRect(0, 0, n, r); + let a = Math.min(64, i.length), o = Math.max(2, (n - 3 * (a - 1)) / a); + t.fillStyle = getComputedStyle(e).getPropertyValue("--mjr-accent").trim() || "#4fa3ff"; + for (let e = 0; e < a; e++) { + let n = i[Math.min(i.length - 1, Math.floor((e / a) ** 1.6 * i.length))] / 255, s = Math.max(2, n * r); + t.globalAlpha = .35 + n * .65, t.fillRect(e * (o + 3), r - s, o, s); + } + t.globalAlpha = 1, M.value && (ue = requestAnimationFrame(fe)); + } + let M = x(!1), N = x(0), P = x(0), F = x(0), I = x(1), L = x(!!S.initialMuted), R = x(Number(S.initialRate) > 0 ? Number(S.initialRate) : 1), z = x(!0), B = x(null), V = x(null), H = x(null), U = x(!1), W = x(!0), G = x(""), K = null, q = 0, J = p(() => S.fps && S.fps > 0 ? S.fps : null), Ie = p(() => he(N.value, J.value)), Le = p(() => _e(P.value, J.value, S.frameCount)), Re = p(() => P.value > 0 ? N.value / P.value * 100 : 0), ze = p(() => P.value > 0 ? F.value / P.value * 100 : 0), Y = p(() => ve({ + a: B.value, + b: V.value + }, P.value)), Be = p(() => { + if (!Y.value || P.value <= 0) return null; + let e = Y.value.a / P.value * 100, t = (Y.value.b - Y.value.a) / P.value * 100; + return { + left: `${e}%`, + width: `${t}%` + }; + }), Ve = p(() => H.value == null || P.value <= 0 ? null : H.value / 100 * P.value); + function X() { + return w.value; + } + let Z = p(() => S.kind === "video" && !!S.compareSrc && !!S.compare && S.compare !== "off"), He = p(() => Z.value && S.compare === "side"), Ue = p(() => Z.value && (S.compare === "wipe" || S.compare === "wipeV")), We = p(() => Math.max(0, Math.min(100, Number(S.wipe ?? 50)))), Ge = p(() => { + let e = Z.value ? pe(S.compare || "off") : null; + if (e) return { mixBlendMode: e }; + if (Ue.value) { + let e = D.value; + return S.compare === "wipeV" ? { clipPath: `inset(${e.y + e.h * We.value / 100}px 0 0 0)` } : { clipPath: `inset(0 0 0 ${e.x + e.w * We.value / 100}px)` }; + } + return {}; + }), Ke = p(() => ({ + left: `${D.value.x}px`, + top: `${D.value.y}px`, + width: `${D.value.w}px`, + height: `${D.value.h}px` + })); + function qe() { + let e = w.value; + if (!(e instanceof HTMLVideoElement) || !T.value) return; + let t = e.clientWidth, n = e.clientHeight, r = e.videoWidth, i = e.videoHeight; + if (!t || !n || !r || !i) { + D.value = { + x: e.offsetLeft, + y: e.offsetTop, + w: t, + h: n + }; + return; + } + let a = Math.min(t / r, n / i), o = r * a, s = i * a; + D.value = { + x: e.offsetLeft + (t - o) / 2, + y: e.offsetTop + (n - s) / 2, + w: o, + h: s + }; + } + function Q(e = !1) { + let t = X(), n = E.value; + if (!t || !n || !Z.value) return; + n.muted = !0, n.playbackRate !== t.playbackRate && (n.playbackRate = t.playbackRate); + let r = Math.min(t.currentTime || 0, Number.isFinite(n.duration) ? n.duration : Infinity); + if (e || Math.abs((n.currentTime || 0) - r) > .08) try { + n.currentTime = r; + } catch (e) { + console.debug?.(e); + } + t.paused && !n.paused ? n.pause() : !t.paused && n.paused && n.play()?.catch?.(() => {}); + } + function Je(e) { + let t = T.value?.getBoundingClientRect(), n = D.value; + if (!t || n.w <= 0 || n.h <= 0) return; + let r = S.compare === "wipeV" ? (e.clientY - t.top - n.y) / n.h : (e.clientX - t.left - n.x) / n.w; + C("update:wipe", Math.round(Math.max(0, Math.min(1, r)) * 1e3) / 10); + } + function Ye(e) { + O.value = !0, e.currentTarget?.setPointerCapture?.(e.pointerId), Je(e); + } + function Xe(e) { + O.value && Je(e); + } + function Ze() { + let e = X(); + if (e) { + N.value = e.currentTime || 0; + let t = ye(N.value, { + a: B.value, + b: V.value + }, P.value); + t != null && M.value && (e.currentTime = t, N.value = t), Q(t != null); + } + M.value && (q = requestAnimationFrame(Ze)); + } + function Qe() { + M.value = !0, cancelAnimationFrame(q), q = requestAnimationFrame(Ze), Q(!0), S.kind === "audio" && (j ? fe() : de()), Ct(); + } + function $e() { + M.value = !1, cancelAnimationFrame(q), Q(!0), St(); + } + function et() { + let e = X(); + P.value = Number.isFinite(e?.duration) ? Number(e?.duration) : 0, G.value = "", e && (e.volume = I.value, e.muted = L.value, e.playbackRate = R.value), i(qe); + } + function tt() { + let e = X(); + if (e) { + M.value || (N.value = e.currentTime || 0); + try { + let t = e.buffered; + F.value = t.length ? t.end(t.length - 1) : 0; + } catch { + F.value = 0; + } + } + } + function nt() { + if (z.value && !Y.value) { + let e = X(); + e && (e.currentTime = 0, e.play()?.catch?.(() => {})); + } else C("ended"); + } + function rt() { + G.value = e("viewer.studio.mediaError", "This file cannot be played by the browser."); + } + function $() { + let e = X(); + e && (e.paused ? e.play()?.catch?.(() => {}) : e.pause()); + } + function it(e) { + let t = X(); + if (!t || !Number.isFinite(e)) return; + let n = P.value > 0 ? P.value : e; + t.currentTime = Math.max(0, Math.min(e, n)), N.value = t.currentTime, Q(!0); + } + function at(e) { + let t = X(); + t && (t.paused || t.pause(), it(ge(t.currentTime || 0, J.value, e, P.value))); + } + function ot(e) { + it((X()?.currentTime || 0) + e); + } + function st(e) { + let t = se.value?.getBoundingClientRect(); + return !t || t.width <= 0 ? 0 : Math.max(0, Math.min(100, (e.clientX - t.left) / t.width * 100)); + } + function ct(e) { + P.value <= 0 || (U.value = !0, e.currentTarget?.setPointerCapture?.(e.pointerId), it(st(e) / 100 * P.value)); + } + function lt(e) { + H.value = st(e), U.value && it(H.value / 100 * P.value); + } + function ut(e) { + U.value = !1, e.currentTarget?.releasePointerCapture?.(e.pointerId); + } + function dt(e) { + R.value = e; + let t = X(); + t && (t.playbackRate = e); + } + function ft(e = 1, t = !1) { + let n = be, r = n.indexOf(R.value), i = (r < 0 ? n.indexOf(1) : r) + e; + t && (i = (i + n.length) % n.length), dt(n[Math.max(0, Math.min(n.length - 1, i))]); + } + function pt() { + L.value = !L.value; + let e = X(); + e && (e.muted = L.value); + } + let mt = x(!1); + function ht(e) { + if (e.type === "pointerdown") mt.value = !0, e.currentTarget?.setPointerCapture?.(e.pointerId); + else if (!mt.value) return; + let t = e.currentTarget.getBoundingClientRect(), n = t.width > 0 ? (e.clientX - t.left) / t.width : 1; + gt(Math.round(Math.max(0, Math.min(1, n)) * 20) / 20); + } + function gt(e) { + I.value = e; + let t = X(); + t && (t.volume = I.value, I.value > 0 && L.value && (L.value = !1, t.muted = !1)); + } + function _t() { + B.value = N.value, V.value != null && V.value <= B.value && (V.value = null); + } + function vt() { + V.value = N.value, B.value ??= 0; + } + function yt() { + B.value = null, V.value = null; + } + function bt() { + let e = oe.value; + e && (document.fullscreenElement ? document.exitFullscreen?.() : e.requestFullscreen?.()); + } + async function xt() { + let e = X(); + if (S.kind !== "video" || !(e instanceof HTMLVideoElement) || !e.videoWidth) return; + let t = document.createElement("canvas"); + t.width = e.videoWidth, t.height = e.videoHeight, t.getContext("2d")?.drawImage(e, 0, 0); + let n = await new Promise((e) => t.toBlob(e, "image/png")); + if (!n) return; + let r = URL.createObjectURL(n), i = String(S.filename || "frame").replace(/\.[^.]+$/, ""), a = document.createElement("a"); + a.href = r, a.download = `${i}_f${String(Ie.value).padStart(5, "0")}.png`, a.click(), setTimeout(() => URL.revokeObjectURL(r), 1e3); + } + function St() { + W.value = !0, Ct(); + } + function Ct() { + K && clearTimeout(K), K = setTimeout(() => { + M.value && !U.value && S.kind === "video" && (W.value = !1); + }, 2200); + } + function wt(e) { + if (e) try { + e.pause(), e.removeAttribute("src"), e.load(); + } catch (e) { + console.debug?.(e); + } + } + function Tt() { + wt(E.value), wt(X()); + } + re(() => S.src, () => { + yt(), N.value = 0, P.value = 0, F.value = 0, G.value = ""; + }); + function Et() { + let e = X(); + if (!e) return; + e.muted = L.value, e.playbackRate = R.value; + let t = e.play?.(); + t && typeof t.catch == "function" && t.catch(() => { + e.muted || (L.value = !0, e.muted = !0, e.play?.()?.catch?.(() => {})); + }); + } + return re([ + Z, + () => S.compareSrc, + () => S.compare + ], () => void i(() => { + qe(), Q(!0); + })), c(() => { + Et(); + try { + ce = new ResizeObserver(() => qe()), T.value && ce.observe(T.value); + } catch (e) { + console.debug?.(e); + } + }), ne(() => { + ce?.disconnect(), cancelAnimationFrame(ue); + try { + A?.close?.(); + } catch (e) { + console.debug?.(e); + } + A = null, j = null, cancelAnimationFrame(q), K && clearTimeout(K), Tt(); + }), n({ + togglePlay: $, + play: Et, + stepFrame: at, + seekBy: ot, + cycleRate: ft, + toggleMute: pt, + setLoopA: _t, + setLoopB: vt, + clearLoop: yt, + toggleFullscreen: bt, + exportFrame: xt, + release: Tt, + getSource: () => w.value instanceof HTMLVideoElement ? w.value : null, + getBox: () => S.kind === "video" ? T.value?.querySelector(".mjr-studio-player__box") : null, + isPlaying: () => M.value + }), (n, i) => { + let c = ee("MButton"); + return m(), v("div", { + ref_key: "root", + ref: oe, + class: y(["mjr-studio-player", { + "is-audio": t.kind === "audio", + "is-compact": t.compact, + "controls-hidden": !W.value + }]), + onPointermove: St + }, [ + t.kind === "video" ? (m(), v("div", { + key: 0, + ref_key: "screen", + ref: T, + class: y(["mjr-studio-player__screen", { "is-side": He.value }]), + onClick: $, + onDblclick: bt + }, [ + s("div", { + class: "mjr-studio-player__layers", + style: g(t.mediaFilter ? { filter: t.mediaFilter } : void 0) + }, [s("video", { + ref_key: "media", + ref: w, + class: "mjr-studio-player__media", + src: t.src, + playsinline: "", + preload: "auto", + onPlay: Qe, + onPause: $e, + onLoadedmetadata: et, + onTimeupdate: tt, + onProgress: tt, + onEnded: nt, + onError: rt + }, null, 40, xe), Z.value ? (m(), v("video", { + ref_key: "mediaB", + ref: E, + key: `b:${t.compareSrc}`, + class: "mjr-studio-player__media is-b", + src: t.compareSrc || "", + playsinline: "", + muted: "", + preload: "auto", + style: g(Ge.value), + onLoadedmetadata: i[0] ||= (e) => Q(!0) + }, null, 44, Se)) : u("", !0)], 4), + s("div", { + class: "mjr-studio-player__box", + style: g(Ke.value) + }, [ae(n.$slots, "overlay", { + width: D.value.w, + height: D.value.h + }), Ue.value ? (m(), v("div", { + key: 0, + class: y(["mjr-studio-stage__divider", { + "is-vertical": t.compare === "wipeV", + "is-active": O.value + }]), + style: g(t.compare === "wipeV" ? { top: `${We.value}%` } : { left: `${We.value}%` }), + onClick: i[1] ||= f(() => {}, ["stop"]), + onDblclick: i[2] ||= f((e) => C("update:wipe", 50), ["stop"]), + onPointerdown: f(Ye, ["stop"]), + onPointermove: Xe, + onPointerup: i[3] ||= (e) => O.value = !1, + onPointercancel: i[4] ||= (e) => O.value = !1 + }, [...i[12] ||= [s("span", { class: "mjr-studio-stage__divider-grip" }, null, -1)]], 38)) : u("", !0)], 4), + Z.value ? (m(), v("div", Ce, [ + i[13] ||= s("span", null, "A", -1), + s("span", we, h(t.compare === "wipeV" ? "/" : "|"), 1), + i[14] ||= s("span", null, "B", -1) + ])) : u("", !0) + ], 34)) : (m(), v("div", { + key: 1, + class: y(["mjr-studio-player__audio-art", { "has-spectrum": k.value }]), + onClick: $ + }, [ + r(s("canvas", { + ref_key: "spectrum", + ref: le, + class: "mjr-studio-player__spectrum", + "aria-hidden": "true" + }, null, 512), [[ie, k.value]]), + r(s("i", Te, null, 512), [[ie, !k.value]]), + s("span", null, h(t.filename), 1), + s("audio", { + ref_key: "media", + ref: w, + src: t.src, + preload: "auto", + onPlay: Qe, + onPause: $e, + onLoadedmetadata: et, + onTimeupdate: tt, + onProgress: tt, + onEnded: nt, + onError: rt + }, null, 40, Ee) + ], 2)), + !M.value && !G.value ? (m(), o(c, { + key: 2, + type: "button", + class: "mjr-studio-player__big-play", + "aria-label": b(e)("viewer.studio.play", "Play"), + onClick: $ + }, { + default: d(() => [...i[15] ||= [s("i", { + class: "pi pi-play", + "aria-hidden": "true" + }, null, -1)]]), + _: 1 + }, 8, ["aria-label"])) : u("", !0), + G.value ? (m(), v("div", De, h(G.value), 1)) : u("", !0), + s("div", { + class: "mjr-studio-player__controls", + onPointerdown: i[11] ||= f(() => {}, ["stop"]) + }, [s("div", { + ref_key: "track", + ref: se, + class: "mjr-studio-player__track", + role: "slider", + "aria-label": b(e)("viewer.studio.seek", "Seek"), + "aria-valuemin": 0, + "aria-valuemax": P.value, + "aria-valuenow": N.value, + onPointerdown: ct, + onPointermove: lt, + onPointerup: ut, + onPointerleave: i[5] ||= (e) => H.value = null + }, [ + s("div", { + class: "mjr-studio-player__buffered", + style: g({ width: `${ze.value}%` }) + }, null, 4), + Be.value ? (m(), v("div", { + key: 0, + class: "mjr-studio-player__loop", + style: g(Be.value) + }, null, 4)) : u("", !0), + s("div", { + class: "mjr-studio-player__progress", + style: g({ width: `${Re.value}%` }) + }, null, 4), + s("div", { + class: "mjr-studio-player__thumb", + style: g({ left: `${Re.value}%` }) + }, null, 4), + Ve.value == null ? u("", !0) : (m(), v("div", { + key: 1, + class: "mjr-studio-player__hover", + style: g({ left: `${H.value}%` }) + }, [_(h(b(me)(Ve.value)), 1), J.value ? (m(), v(a, { key: 0 }, [_(" · f" + h(b(he)(Ve.value, J.value)), 1)], 64)) : u("", !0)], 4)) + ], 40, Oe), s("div", ke, [ + l(c, { + type: "button", + class: "mjr-studio-btn", + title: b(e)("viewer.studio.playPause", "Play / pause (Space)"), + onClick: $ + }, { + default: d(() => [s("i", { + class: y(M.value ? "pi pi-pause" : "pi pi-play"), + "aria-hidden": "true" + }, null, 2)]), + _: 1 + }, 8, ["title"]), + t.kind === "video" ? (m(), v(a, { key: 0 }, [l(c, { + type: "button", + class: "mjr-studio-btn", + title: b(e)("viewer.studio.prevFrame", "Previous frame (,)"), + onClick: i[6] ||= (e) => at(-1) + }, { + default: d(() => [...i[16] ||= [s("i", { + class: "pi pi-step-backward", + "aria-hidden": "true" + }, null, -1)]]), + _: 1 + }, 8, ["title"]), l(c, { + type: "button", + class: "mjr-studio-btn", + title: b(e)("viewer.studio.nextFrame", "Next frame (.)"), + onClick: i[7] ||= (e) => at(1) + }, { + default: d(() => [...i[17] ||= [s("i", { + class: "pi pi-step-forward", + "aria-hidden": "true" + }, null, -1)]]), + _: 1 + }, 8, ["title"])], 64)) : u("", !0), + s("span", Ae, [_(h(b(me)(N.value)) + " ", 1), s("span", je, "/ " + h(b(me)(P.value)), 1)]), + t.kind === "video" && J.value ? (m(), v("span", { + key: 1, + class: "mjr-studio-chip", + title: b(e)("viewer.studio.frame", "Frame") + }, [ + _(" f " + h(Ie.value), 1), + Le.value ? (m(), v(a, { key: 0 }, [_(" / " + h(Le.value - 1), 1)], 64)) : u("", !0), + _(" · " + h(Math.round(J.value * 100) / 100) + " fps ", 1) + ], 8, Me)) : u("", !0), + i[24] ||= s("span", { class: "mjr-studio-player__spacer" }, null, -1), + s("div", { + class: "mjr-studio-player__group", + title: b(e)("viewer.studio.abLoop", "A-B loop (I / O, U to clear)") + }, [ + l(c, { + type: "button", + class: y(["mjr-studio-btn is-text", { "is-on": B.value != null }]), + onClick: _t + }, { + default: d(() => [...i[18] ||= [_("A", -1)]]), + _: 1 + }, 8, ["class"]), + l(c, { + type: "button", + class: y(["mjr-studio-btn is-text", { "is-on": V.value != null }]), + onClick: vt + }, { + default: d(() => [...i[19] ||= [_("B", -1)]]), + _: 1 + }, 8, ["class"]), + B.value != null || V.value != null ? (m(), o(c, { + key: 0, + type: "button", + class: "mjr-studio-btn", + title: b(e)("viewer.studio.clearLoop", "Clear A-B loop"), + onClick: yt + }, { + default: d(() => [...i[20] ||= [s("i", { + class: "pi pi-times", + "aria-hidden": "true" + }, null, -1)]]), + _: 1 + }, 8, ["title"])) : u("", !0) + ], 8, Ne), + l(c, { + type: "button", + class: y(["mjr-studio-btn", { "is-on": z.value }]), + title: b(e)("viewer.studio.loop", "Loop"), + onClick: i[8] ||= (e) => z.value = !z.value + }, { + default: d(() => [...i[21] ||= [s("i", { + class: "pi pi-replay", + "aria-hidden": "true" + }, null, -1)]]), + _: 1 + }, 8, ["class", "title"]), + l(c, { + type: "button", + class: y(["mjr-studio-btn is-text", { "is-on": R.value !== 1 }]), + title: b(e)("viewer.studio.speed", "Speed ([ / ])"), + onClick: i[9] ||= (e) => ft(1, !0) + }, { + default: d(() => [_(h(R.value) + "×", 1)]), + _: 1 + }, 8, ["class", "title"]), + s("div", Pe, [l(c, { + type: "button", + class: "mjr-studio-btn", + title: b(e)("viewer.studio.mute", "Mute (M)"), + onClick: pt + }, { + default: d(() => [s("i", { + class: y(L.value || I.value === 0 ? "pi pi-volume-off" : "pi pi-volume-up"), + "aria-hidden": "true" + }, null, 2)]), + _: 1 + }, 8, ["title"]), s("div", { + class: "mjr-studio-player__volume", + role: "slider", + "aria-label": b(e)("viewer.studio.volume", "Volume"), + "aria-valuemin": 0, + "aria-valuemax": 1, + "aria-valuenow": L.value ? 0 : I.value, + onPointerdown: ht, + onPointermove: ht, + onPointerup: i[10] ||= (e) => mt.value = !1 + }, [s("div", { + class: "mjr-studio-player__volume-fill", + style: g({ width: `${(L.value ? 0 : I.value) * 100}%` }) + }, null, 4)], 40, Fe)]), + t.kind === "video" ? (m(), o(c, { + key: 2, + type: "button", + class: "mjr-studio-btn", + title: b(e)("viewer.studio.exportFrame", "Save this frame as PNG"), + onClick: xt + }, { + default: d(() => [...i[22] ||= [s("i", { + class: "pi pi-camera", + "aria-hidden": "true" + }, null, -1)]]), + _: 1 + }, 8, ["title"])) : u("", !0), + t.kind === "video" ? (m(), o(c, { + key: 3, + type: "button", + class: "mjr-studio-btn", + title: b(e)("viewer.studio.fullscreen", "Fullscreen (F)"), + onClick: bt + }, { + default: d(() => [...i[23] ||= [s("i", { + class: "pi pi-window-maximize", + "aria-hidden": "true" + }, null, -1)]]), + _: 1 + }, 8, ["title"])) : u("", !0) + ])], 32) + ], 34); + }; + } +}); +export { le as _, z as a, de as b, se as c, j as d, ue as f, E as g, fe as h, V as i, pe as l, T as m, H as n, M as o, S as p, W as r, ce as s, G as t, A as u, D as v, N as y }; diff --git a/dist/chunks/TagsEditor-qDIeaA8P.js b/dist/chunks/TagsEditor-CZP7xeZ3.js similarity index 73% rename from dist/chunks/TagsEditor-qDIeaA8P.js rename to dist/chunks/TagsEditor-CZP7xeZ3.js index 1b02b745..e2393041 100644 --- a/dist/chunks/TagsEditor-qDIeaA8P.js +++ b/dist/chunks/TagsEditor-CZP7xeZ3.js @@ -1,7 +1,7 @@ -import { $t as e, F as t, P as n, v as r } from "./viewerRuntimeHosts-CW2DfHq_.js"; -import { m as i, n as a, t as o, wt as ee } from "./events-cBMXVULQ.js"; -import { Z as s } from "./viewerOpenRequest-_DqD1rXA.js"; -import { A as c, B as l, C as u, E as d, H as f, K as p, N as m, R as h, T as g, W as _, X as v, Y as y, b, dt as x, ft as S, it as C, j as w, k as T, pt as E, q as D, ut as O, z as k } from "./mjr-primevue-3mpaVb1C.js"; +import { $t as e, F as t, P as n, v as r } from "./viewerRuntimeHosts-XPTU8ZhU.js"; +import { m as i, n as a, t as o, wt as s } from "./events-CttACGx4.js"; +import { Z as c } from "./viewerOpenRequest-CZXk8yvU.js"; +import { $ as l, B as u, C as d, E as f, H as p, J as m, K as h, M as g, P as _, Q as v, T as y, V as ee, W as b, X as x, b as S, gt as C, ht as w, j as T, k as E, mt as D, pt as O, st as k } from "./mjr-primevue-C07IsEdU.js"; // ui/vue/components/common/RatingEditor.vue?vue&type=script&setup=true&lang.ts var A = [ "aria-busy", @@ -9,7 +9,7 @@ var A = [ "aria-label", "aria-valuenow", "tabindex" -], j = /* @__PURE__ */ m({ +], j = /* @__PURE__ */ _({ __name: "RatingEditor", props: { asset: {}, @@ -22,21 +22,21 @@ var A = [ function a(e) { return Math.max(0, Math.min(5, Number(e) || 0)); } - let l = t, d = r, m = a(l.asset?.rating ?? l.modelValue), h = C(m), v = C(0), b = C(!1), x = m, E = m, j = null, M = g(() => v.value > 0 ? v.value : h.value), te = (e) => e <= M.value ? "#FFD45A" : "#555", ne = (e) => e <= M.value ? "scale(1.1)" : "scale(1)", re = g(() => { + let l = t, u = r, f = a(l.asset?.rating ?? l.modelValue), p = k(f), _ = k(0), S = k(!1), C = f, D = f, j = null, M = y(() => _.value > 0 ? _.value : p.value), te = (e) => e <= M.value ? "#FFD45A" : "#555", ne = (e) => e <= M.value ? "scale(1.1)" : "scale(1)", re = y(() => { let e = l.size; return typeof e == "number" ? `${Math.max(8, e)}px` : String(e || "").trim() || "16px"; }), ie = (e) => Math.min(100 * 2 ** Math.max(0, e - 1), 2e3), ae = (e) => new Promise((t) => setTimeout(t, e)); function N(e) { - if (b.value) return; + if (S.value) return; let t = a(e); - x = t, E = t, t !== h.value && (h.value = t); + C = t, D = t, t !== p.value && (p.value = t); } function P(t = null) { - h.value = x, E = x, d("update:modelValue", x), t && e(t, "error"); + p.value = C, D = C, u("update:modelValue", C), t && e(t, "error"); } async function oe() { - if (b.value) return; - b.value = !0; + if (S.value) return; + S.value = !0; let t = Date.now(); try { let r = 0; @@ -46,51 +46,51 @@ var A = [ break; } r > 0 && await ae(ie(r)), r += 1; - let c = a(E), u = typeof AbortController < "u" ? new AbortController() : null; - j = u; - let f = null; + let d = a(D), f = typeof AbortController < "u" ? new AbortController() : null; + j = f; + let m = null; try { - f = await n(l.asset, c, u ? { signal: u.signal } : {}); + m = await n(l.asset, d, f ? { signal: f.signal } : {}); } catch (e) { console.error("Failed to update rating:", e); } - if (!f?.ok) { - if (f?.code === "ABORTED" && E !== c) continue; - P(f?.error || i("toast.ratingUpdateFailed", "Rating update failed")); + if (!m?.ok) { + if (m?.code === "ABORTED" && D !== d) continue; + P(m?.error || i("toast.ratingUpdateFailed", "Rating update failed")); break; } try { - let e = f?.data?.asset_id ?? null; - e != null && !ee(l.asset.id) && (l.asset.id = e); + let e = m?.data?.asset_id ?? null; + e != null && !s(l.asset.id) && (l.asset.id = e); } catch (e) { console.debug?.(e); } - x = c, h.value = c; + C = d, p.value = d; try { - l.asset.rating = c; + l.asset.rating = d; } catch (e) { console.debug?.(e); } - if (d("update:modelValue", c), d("rating-change", { + if (u("update:modelValue", d), u("rating-change", { assetId: l.asset?.id, - rating: c - }), s(o, { + rating: d + }), c(o, { assetId: l.asset?.id == null ? "" : String(l.asset.id), - rating: c - }), E === c) { - e(i("toast.ratingSetN", { n: c }), "success", 1e3); + rating: d + }), D === d) { + e(i("toast.ratingSetN", { n: d }), "success", 1e3); break; } } r >= 10 && P(i("toast.ratingUpdateFailed", "Rating update failed")); } finally { - j = null, b.value = !1; + j = null, S.value = !1; } } function F(e) { if (l.disabled) return; let t = a(e); - E = t, h.value = t, v.value = 0, d("update:modelValue", t); + D = t, p.value = t, _.value = 0, u("update:modelValue", t); try { j?.abort?.(); } catch (e) { @@ -102,10 +102,10 @@ var A = [ F(e); } function L(e) { - l.disabled || (v.value = e); + l.disabled || (_.value = e); } function R() { - v.value = 0; + _.value = 0; } function z(e) { if (l.disabled) return; @@ -113,11 +113,11 @@ var A = [ switch (e.key) { case "ArrowRight": case "ArrowUp": - e.preventDefault(), t = Math.min(5, h.value + 1); + e.preventDefault(), t = Math.min(5, p.value + 1); break; case "ArrowLeft": case "ArrowDown": - e.preventDefault(), t = Math.max(0, h.value - 1); + e.preventDefault(), t = Math.max(0, p.value - 1); break; case "Home": e.preventDefault(), t = 0; @@ -127,45 +127,45 @@ var A = [ break; default: e.key >= "0" && e.key <= "5" && (e.preventDefault(), t = parseInt(e.key, 10)); } - t !== null && t !== h.value && F(t); + t !== null && t !== p.value && F(t); } - return k(() => { + return ee(() => { try { j?.abort?.(); } catch (e) { console.debug?.(e); } - }), D(() => l.modelValue, (e) => { + }), x(() => l.modelValue, (e) => { N(e); - }), D(() => l.asset?.rating, (e) => { + }), x(() => l.asset?.rating, (e) => { N(e); }), (e, n) => { - let r = p("MButton"); - return f(), T("div", { + let r = m("MButton"); + return b(), E("div", { class: "mjr-rating-editor", - style: S({ + style: w({ display: "inline-flex", gap: "2px", pointerEvents: t.disabled ? "none" : "auto", opacity: t.disabled ? .6 : 1 }), - "aria-busy": b.value, + "aria-busy": S.value, "aria-disabled": t.disabled, role: "slider", "aria-label": O(i)("rating.label", "Rating"), "aria-valuemin": 0, "aria-valuemax": 5, - "aria-valuenow": h.value, + "aria-valuenow": p.value, tabindex: t.disabled ? -1 : 0, onKeydown: z - }, [(f(), T(u, null, _(5, (e) => w(r, { + }, [(b(), E(d, null, h(5, (e) => g(r, { key: e, type: "button", class: "mjr-rating-star", severity: "secondary", text: "", rounded: "", - style: S({ + style: w({ color: te(e), transform: ne(e), fontSize: re.value, @@ -176,13 +176,13 @@ var A = [ transition: "all 0.15s ease" }), "aria-label": O(i)("rating.setN", { n: e }), - "aria-pressed": e <= h.value, + "aria-pressed": e <= p.value, disabled: t.disabled, onClick: (t) => I(e), onMouseenter: (t) => L(e), onMouseleave: R }, { - default: y(() => [...n[0] ||= [c(" ★ ", -1)]]), + default: v(() => [...n[0] ||= [T(" ★ ", -1)]]), _: 1 }, 8, [ "style", @@ -197,16 +197,23 @@ var A = [ }), M = ["aria-busy"], te = ["aria-label"], ne = { key: 0, class: "mjr-tags-empty" -}, re = { class: "mjr-tags-input-wrap" }, ie = ["aria-selected", "onMouseenter"], ae = 100, N = 200, P = /* @__PURE__ */ m({ +}, re = { class: "mjr-tags-input-wrap" }, ie = ["aria-selected", "onMouseenter"], ae = 100, N = 200, P = /* @__PURE__ */ _({ __name: "TagsEditor", props: { asset: {}, - modelValue: {}, - disabled: { type: Boolean } + modelValue: { default: void 0 }, + disabled: { + type: Boolean, + default: !1 + }, + autofocus: { + type: Boolean, + default: !0 + } }, emits: ["update:modelValue", "tags-change"], setup(n, { emit: o }) { - function m(e) { + function _(e) { try { let t = String(e ?? "").trim(); if (!t || t.length > ae) return null; @@ -219,7 +226,7 @@ var A = [ return null; } } - function S(e) { + function w(e) { try { return String(e ?? "").replace(/[\x00-\x1f\x7f]/g, "").trim() || null; } catch { @@ -227,13 +234,13 @@ var A = [ } } function A(e) { - let t = S(e); + let t = w(e); return t ? t.toLowerCase() : ""; } function j(e) { let t = [], n = /* @__PURE__ */ new Set(); for (let r of Array.isArray(e) ? e : []) { - let e = S(r); + let e = w(r); if (!e) continue; let i = e.toLowerCase(); if (!n.has(i) && (n.add(i), t.push(e), t.length >= N)) break; @@ -259,7 +266,7 @@ var A = [ for (let n = 0; n < e.length; n += 1) if (e[n] !== t[n]) return !1; return !0; } - let F = n, I = o, L = P(F.asset?.tags ?? F.modelValue ?? []), R = C([...L]), z = C(null), B = C(""), V = C(!1), H = C(-1), U = C(null), W = C([]), G = C(!1), K = (e) => e?.$el || e || null, q = !1, J = !1, Y = null, X = [...L], se = (e) => Math.min(100 * 2 ** Math.max(0, e - 1), 2e3), ce = (e) => new Promise((t) => setTimeout(t, e)), le = () => setTimeout(() => V.value = !1, 200), Z = g(() => { + let F = n, I = o, L = P(F.asset?.tags ?? F.modelValue ?? []), R = k([...L]), z = k(null), B = k(""), V = k(!1), H = k(-1), U = k(null), W = k([]), G = k(!1), K = (e) => e?.$el || e || null, q = !1, J = !1, Y = null, X = [...L], se = (e) => Math.min(100 * 2 ** Math.max(0, e - 1), 2e3), ce = (e) => new Promise((t) => setTimeout(t, e)), le = () => setTimeout(() => V.value = !1, 200), Z = y(() => { let e = B.value.toLowerCase().trim(); if (!e) return []; let t = new Set(R.value.map((e) => A(e)).filter(Boolean)); @@ -267,7 +274,7 @@ var A = [ let r = A(n); return n.toLowerCase().includes(e) && (!r || !t.has(r)); }).slice(0, 10); - }), Q = g(() => Z.value.length > 0); + }), Q = y(() => Z.value.length > 0); function ue(e) { if (q) return; let t = P(e); @@ -278,7 +285,7 @@ var A = [ I("update:modelValue", t), I("tags-change", { assetId: F.asset?.id, tags: t - }), s(a, { + }), c(a, { assetId: n, tags: t }); @@ -320,18 +327,18 @@ var A = [ } try { let e = o?.data?.asset_id ?? null; - e != null && !ee(F.asset.id) && (F.asset.id = e); + e != null && !s(F.asset.id) && (F.asset.id = e); } catch (e) { console.debug?.(e); } - let s = P(Array.isArray(o?.data?.tags) ? o.data.tags : r); - X = [...s]; + let c = P(Array.isArray(o?.data?.tags) ? o.data.tags : r); + X = [...c]; try { - F.asset.tags = [...s]; + F.asset.tags = [...c]; } catch (e) { console.debug?.(e); } - if (J || (R.value = [...s]), de(s), e(i("toast.tagsUpdated", "Tags updated"), "success", 1e3), !J) break; + if (J || (R.value = [...c]), de(c), e(i("toast.tagsUpdated", "Tags updated"), "success", 1e3), !J) break; J = !1; } if (n >= 10) { @@ -346,9 +353,9 @@ var A = [ } q = !1, Y = null, G.value = !1; } - l(async () => { + p(async () => { try { - await h(), K(z.value)?.focus(); + await u(), F.autofocus && K(z.value)?.focus(); } catch (e) { console.debug?.(e); } @@ -358,7 +365,7 @@ var A = [ } catch (e) { console.warn("Failed to load available tags:", e); } - }), k(() => { + }), ee(() => { try { Y?.abort?.(); } catch (e) { @@ -367,7 +374,7 @@ var A = [ }); function $(t) { if (F.disabled) return; - let n = m(t); + let n = _(t); if (!n) return; let r = A(n); r && (R.value.some((e) => A(e) === r) || (R.value.length >= N ? e(i("toast.maxTagsReached", "Maximum number of tags reached"), "warning") : (R.value = [...R.value, n], fe()))); @@ -398,24 +405,24 @@ var A = [ let t = e?.value ?? U.value; t && he(t); } - return D(() => F.modelValue, (e) => { + return x(() => F.modelValue, (e) => { ue(e); - }), D(() => F.asset?.tags, (e) => { + }), x(() => F.asset?.tags, (e) => { ue(e); }), (e, t) => { - let r = p("MButton"), a = p("MInputText"), o = p("MListbox"); - return f(), T("div", { - class: x(["mjr-tags-editor", { "is-disabled": n.disabled }]), + let r = m("MButton"), a = m("MInputText"), o = m("MListbox"); + return b(), E("div", { + class: D(["mjr-tags-editor", { "is-disabled": n.disabled }]), "aria-busy": G.value - }, [d("div", { + }, [f("div", { class: "mjr-tags-display", role: "list", "aria-label": O(i)("tags.label", "Tags") - }, [R.value.length === 0 ? (f(), T("span", ne, E(O(i)("msg.noTagsYet", "No tags yet...")), 1)) : (f(!0), T(u, { key: 1 }, _(R.value, (e, a) => (f(), T("div", { + }, [R.value.length === 0 ? (b(), E("span", ne, C(O(i)("msg.noTagsYet", "No tags yet...")), 1)) : (b(!0), E(d, { key: 1 }, h(R.value, (e, a) => (b(), E("div", { key: e, class: "mjr-tag-chip", role: "listitem" - }, [c(E(e) + " ", 1), w(r, { + }, [T(C(e) + " ", 1), g(r, { type: "button", class: "mjr-tag-chip-remove", severity: "secondary", @@ -425,13 +432,13 @@ var A = [ disabled: n.disabled, onClick: (e) => pe(a) }, { - default: y(() => [...t[4] ||= [c(" x ", -1)]]), + default: v(() => [...t[4] ||= [T(" x ", -1)]]), _: 1 }, 8, [ "aria-label", "disabled", "onClick" - ])]))), 128))], 8, te), d("div", re, [w(a, { + ])]))), 128))], 8, te), f("div", re, [g(a, { ref_key: "inputRef", ref: z, modelValue: B.value, @@ -456,7 +463,7 @@ var A = [ "aria-autocomplete", "aria-expanded", "aria-haspopup" - ]), v(w(o, { + ]), l(g(o, { modelValue: U.value, "onUpdate:modelValue": t[3] ||= (e) => U.value = e, options: Z.value, @@ -465,17 +472,17 @@ var A = [ "aria-label": O(i)("tags.suggestions", "Tag suggestions"), onChange: ge }, { - option: y(({ option: e, index: t }) => [d("div", { - class: x(["mjr-tag-suggestion", { "is-active": t === H.value }]), + option: v(({ option: e, index: t }) => [f("div", { + class: D(["mjr-tag-suggestion", { "is-active": t === H.value }]), "aria-selected": t === H.value, onMouseenter: (e) => H.value = t - }, E(e), 43, ie)]), + }, C(e), 43, ie)]), _: 1 }, 8, [ "modelValue", "options", "aria-label" - ]), [[b, V.value && Q.value]])])], 10, M); + ]), [[S, V.value && Q.value]])])], 10, M); }; } }); diff --git a/dist/chunks/ViewerPortal-DMaFAqG8.js b/dist/chunks/ViewerPortal-DMaFAqG8.js new file mode 100644 index 00000000..bed62dbf --- /dev/null +++ b/dist/chunks/ViewerPortal-DMaFAqG8.js @@ -0,0 +1,2287 @@ +import { $t as e, P as t, a as n, g as r, i, x as a, y as o } from "./viewerRuntimeHosts-XPTU8ZhU.js"; +import { at as s, m as c, mt as l, r as u, t as d } from "./events-CttACGx4.js"; +import { c as f, d as p, f as m, l as h, o as g, r as _, s as v, u as ee } from "./viewerOpenRequest-CZXk8yvU.js"; +import { i as y, n as te, t as ne, tt as b } from "./SidebarWorkflowSection-DrSf3i6L.js"; +import { i as x, r as S } from "./floatingViewerManager-CLgIT9uN.js"; +import { $ as C, A as w, B as re, C as T, D as E, E as D, H as O, J as ie, K as k, M as A, O as j, P as M, Q as N, S as P, T as F, U as I, V as ae, W as L, X as R, Y as oe, b as se, gt as z, ht as B, j as V, k as H, lt as ce, mt as U, ot as le, pt as W, q as ue, rt as de, st as G, w as fe, z as pe } from "./mjr-primevue-C07IsEdU.js"; +import { r as me } from "./model3dRenderer-CIUrxTBK.js"; +import { n as he, t as ge } from "./TagsEditor-CZP7xeZ3.js"; +import { _ as K, a as q, b as _e, c as J, d as ve, f as ye, g as be, h as Y, i as xe, l as Se, m as X, n as Ce, o as we, p as Te, r as Ee, s as De, t as Oe, u as ke, v as Ae, y as je } from "./StudioPlayer-ZPvmvcGX.js"; +import { t as Me } from "./genInfo-B9wv7JDq.js"; +// ui/vue/components/viewer/FloatingViewerHost.vue +var Ne = /* @__PURE__ */ M({ + __name: "FloatingViewerHost", + setup(e) { + let t = G(null), n = null; + return O(() => { + n = i(t.value); + }), I(() => { + n?.(), n = null; + }), (e, n) => (L(), H("div", { + ref_key: "hostRef", + ref: t, + class: "mjr-viewer-runtime-host mjr-viewer-runtime-host--floating", + style: { + position: "fixed", + inset: "0", + "pointer-events": "none", + overflow: "visible" + } + }, null, 512)); + } +}), Pe = /* @__PURE__ */ M({ + __name: "ViewerOverlayHost", + setup(e) { + let t = G(null), r = null; + return O(() => { + r = n(t.value); + }), I(() => { + r?.(), r = null; + }), (e, n) => (L(), H("div", { + ref_key: "hostRef", + ref: t, + class: "mjr-viewer-runtime-host mjr-viewer-runtime-host--main", + style: { + position: "fixed", + inset: "0", + "pointer-events": "none", + overflow: "visible" + } + }, null, 512)); + } +}), Fe = { + key: 0, + class: "mjr-context-menu-separator" +}, Z = { class: "mjr-context-menu-item-left" }, Ie = { class: "mjr-context-menu-item-right" }, Le = { + key: 0, + class: "mjr-context-menu-hint" +}, Re = { + key: 1, + class: "mjr-context-menu-submenu-arrow" +}, ze = { + key: 0, + class: "mjr-context-menu-separator" +}, Be = { class: "mjr-context-menu-item-left" }, Ve = { + key: 0, + class: "mjr-context-menu-hint" +}, He = /* @__PURE__ */ M({ + __name: "ViewerContextMenu", + setup(e) { + let t = G(null), n = G(null), r = G(null), i = null, a = null, o = F(() => l(m.main, 10041)), s = F(() => l(m.submenu, 10042)), c = F(() => l(m.tags, 10043)); + function l(e, t) { + return { + position: "fixed", + left: `${Math.round(Number(e?.x) || 0)}px`, + top: `${Math.round(Number(e?.y) || 0)}px`, + display: "block", + zIndex: String(t) + }; + } + function u() { + i &&= (clearTimeout(i), null); + } + function d() { + u(), i = setTimeout(() => { + f(); + }, 180); + } + function p(e, t) { + if (!e?.open || !t) return; + let n = t.getBoundingClientRect(), r = Number(window.innerWidth || 0), i = Number(window.innerHeight || 0), a = Number(e.x) || 0, o = Number(e.y) || 0; + a + n.width > r && (a = Math.max(8, r - n.width - 10)), o + n.height > i && (o = Math.max(8, i - n.height - 10)), a < 8 && (a = 8), o < 8 && (o = 8), e.x = a, e.y = o; + } + async function h(e, t) { + await re(), p(e, t?.value || null); + } + function g(e) { + try { + e?.value?.querySelector?.(".mjr-context-menu-item:not([aria-disabled=\"true\"])")?.focus?.(); + } catch (e) { + console.debug?.(e); + } + } + function _(e, t) { + if (!Array.isArray(e?.submenu) || !e.submenu.length) { + f(); + return; + } + u(); + let n = (t?.currentTarget)?.getBoundingClientRect?.(); + ee({ + x: Math.round((n?.right || m.main.x || 0) + 6), + y: Math.round((n?.top || m.main.y || 0) - 4), + items: e.submenu, + title: e.label || "" + }); + } + async function y(e, t, n = "main") { + if (e && e.type === "item" && !e.disabled) { + if (Array.isArray(e.submenu) && e.submenu.length) _(e, t); + else try { + await e.action?.(); + } catch (e) { + console.error("[ViewerContextMenu.vue] Action failed:", e); + } finally { + e.closeOnSelect === !1 ? n === "submenu" && f() : v(); + } + } + } + function te(e, t) { + Array.isArray(e?.submenu) && e.submenu.length ? _(e, t) : f(); + } + function ne(e) { + Array.isArray(e?.submenu) && e.submenu.length && d(); + } + function b() { + u(); + } + function x() { + d(); + } + function S(e) { + let i = e?.target; + t.value?.contains?.(i) || n.value?.contains?.(i) || r.value?.contains?.(i) || v(); + } + function C(e) { + e?.key === "Escape" && v(); + } + function w() { + v(); + } + function M(e) { + let t = e?.detail; + String(t?.source || "") !== "viewer" && v(); + } + function P(e) { + let t = m.tags.asset; + t && (t.tags = Array.isArray(e) ? [...e] : []); + } + function ae(e) { + let t = Array.isArray(e?.tags) ? e.tags : []; + try { + m.tags.onChanged?.(t); + } catch (e) { + console.debug?.(e); + } + } + return R(() => m.main.open, async (e) => { + e && (await h(m.main, t), g(t)); + }), R(() => m.submenu.open, async (e) => { + e && (await h(m.submenu, n), g(n)); + }), R(() => m.tags.open, async (e) => { + e && await h(m.tags, r); + }), O(() => { + a = new AbortController(); + let e = { + capture: !0, + passive: !0, + signal: a.signal + }; + window.addEventListener("pointerdown", S, e), window.addEventListener("keydown", C, { + capture: !0, + signal: a.signal + }), window.addEventListener("scroll", w, e), window.addEventListener("wheel", w, e), window.addEventListener("resize", w, { + passive: !0, + signal: a.signal + }), window.addEventListener("mjr-close-all-menus", M, { signal: a.signal }); + }), I(() => { + u(); + try { + a?.abort(); + } catch (e) { + console.debug?.(e); + } + a = null, v(); + }), (e, i) => { + let a = ie("MButton"); + return L(), E(fe, { to: "body" }, [ + W(m).main.open ? (L(), H("div", { + key: 0, + ref_key: "mainMenuRef", + ref: t, + class: "mjr-viewer-context-menu mjr-context-menu", + style: B(o.value), + role: "menu", + "aria-label": "Viewer context menu" + }, [(L(!0), H(T, null, k(W(m).main.items, (e) => (L(), H(T, { key: e.id }, [e.type === "separator" ? (L(), H("div", Fe)) : (L(), E(a, { + key: 1, + type: "button", + class: U(["mjr-context-menu-item", { + "is-disabled": e.disabled, + "has-submenu": Array.isArray(e.submenu) && e.submenu.length + }]), + severity: "secondary", + text: "", + role: "menuitem", + "aria-disabled": e.disabled ? "true" : "false", + tabindex: e.disabled ? -1 : 0, + onClick: (t) => y(e, t), + onMouseenter: (t) => te(e, t), + onMouseleave: (t) => ne(e) + }, { + default: N(() => [D("span", Z, [e.iconClass ? (L(), H("i", { + key: 0, + class: U(e.iconClass) + }, null, 2)) : j("", !0), D("span", null, z(e.label), 1)]), D("span", Ie, [e.rightHint ? (L(), H("span", Le, z(e.rightHint), 1)) : j("", !0), Array.isArray(e.submenu) && e.submenu.length ? (L(), H("span", Re, " > ")) : j("", !0)])]), + _: 2 + }, 1032, [ + "class", + "aria-disabled", + "tabindex", + "onClick", + "onMouseenter", + "onMouseleave" + ]))], 64))), 128))], 4)) : j("", !0), + W(m).submenu.open ? (L(), H("div", { + key: 1, + ref_key: "submenuRef", + ref: n, + class: "mjr-viewer-rating-submenu mjr-context-menu", + style: B(s.value), + role: "menu", + "aria-label": "Viewer context submenu", + onMouseenter: b, + onMouseleave: x + }, [(L(!0), H(T, null, k(W(m).submenu.items, (e) => (L(), H(T, { key: e.id }, [e.type === "separator" ? (L(), H("div", ze)) : (L(), E(a, { + key: 1, + type: "button", + class: U(["mjr-context-menu-item", { "is-disabled": e.disabled }]), + severity: "secondary", + text: "", + role: "menuitem", + "aria-disabled": e.disabled ? "true" : "false", + tabindex: e.disabled ? -1 : 0, + onClick: (t) => y(e, t, "submenu") + }, { + default: N(() => [D("span", Be, [e.iconClass ? (L(), H("i", { + key: 0, + class: U(e.iconClass) + }, null, 2)) : j("", !0), D("span", null, z(e.label), 1)]), e.rightHint ? (L(), H("span", Ve, z(e.rightHint), 1)) : j("", !0)]), + _: 2 + }, 1032, [ + "class", + "aria-disabled", + "tabindex", + "onClick" + ]))], 64))), 128))], 36)) : j("", !0), + W(m).tags.open && W(m).tags.asset ? (L(), H("div", { + key: 2, + ref_key: "tagsPopoverRef", + ref: r, + class: "mjr-viewer-popover", + style: B(c.value) + }, [A(ge, { + asset: W(m).tags.asset, + "model-value": W(m).tags.asset?.tags || [], + "onUpdate:modelValue": P, + onTagsChange: ae + }, null, 8, ["asset", "model-value"])], 4)) : j("", !0) + ]); + }; + } +}), Ue = /* @__PURE__ */ M({ + __name: "ViewerContextMenuPortal", + setup(e) { + let t = G(""), n = F(() => h(t.value)); + return O(() => { + t.value = g(); + }), I(() => { + p(t.value), t.value = ""; + }), (e, t) => n.value ? (L(), E(He, { key: 0 })) : j("", !0); + } +}), We = null, Ge = null; +function Ke(e, t, n) { + let r = e || document.createElement("canvas"); + return r.width !== t && (r.width = t), r.height !== n && (r.height = n), { + c: r, + ctx: r.getContext("2d", { willReadFrequently: !0 }) + }; +} +function qe(e) { + return e ? e instanceof HTMLVideoElement ? { + w: e.videoWidth || 0, + h: e.videoHeight || 0 + } : e instanceof HTMLImageElement ? { + w: e.naturalWidth || 0, + h: e.naturalHeight || 0 + } : { + w: e.width || 0, + h: e.height || 0 + } : { + w: 0, + h: 0 + }; +} +function Je(e) { + return e ? e instanceof HTMLVideoElement ? e.readyState >= 2 && e.videoWidth > 0 : e instanceof HTMLImageElement ? e.complete && e.naturalWidth > 0 : e.width > 0 : !1; +} +function Ye(e, t = 256) { + if (!Je(e)) return null; + let { w: n, h: r } = qe(e), i = _e(n, r, t); + if (!i.w || !i.h) return null; + try { + let { c: t, ctx: n } = Ke(We, i.w, i.h); + return We = t, n ? (n.clearRect(0, 0, i.w, i.h), n.drawImage(e, 0, 0, i.w, i.h), { + data: n.getImageData(0, 0, i.w, i.h).data, + width: i.w, + height: i.h + }) : null; + } catch { + return null; + } +} +function Xe(e, t, n) { + if (!Je(e)) return null; + let { w: r, h: i } = qe(e), a = Math.floor(t), o = Math.floor(n); + if (a < 0 || o < 0 || a >= r || o >= i) return null; + try { + let { c: t, ctx: n } = Ke(Ge, 1, 1); + if (Ge = t, !n) return null; + n.clearRect(0, 0, 1, 1), n.drawImage(e, a, o, 1, 1, 0, 0, 1, 1); + let r = n.getImageData(0, 0, 1, 1).data; + return [ + r[0], + r[1], + r[2], + r[3] + ]; + } catch { + return null; + } +} +function Ze(e, t, n, r, i) { + if (!Je(t)) return !1; + let a = e.getContext("2d"); + if (!a) return !1; + let o = e.width / Math.max(1, i); + try { + return a.imageSmoothingEnabled = !1, a.fillStyle = "#111", a.fillRect(0, 0, e.width, e.height), a.drawImage(t, Math.floor(n - o / 2), Math.floor(r - o / 2), Math.ceil(o), Math.ceil(o), 0, 0, e.width, e.height), !0; + } catch { + return !1; + } +} +async function Qe(e) { + if (!Je(e)) return null; + let { w: t, h: n } = qe(e), r = document.createElement("canvas"); + r.width = t, r.height = n; + try { + return r.getContext("2d")?.drawImage(e, 0, 0), await new Promise((e) => r.toBlob(e, "image/png")); + } catch { + return null; + } +} +// ui/features/viewer/studio/studioViewerState.ts +var Q = le({ + open: !1, + assets: [], + index: 0, + session: 0, + compare: "" +}); +function $e(e = "") { + let t = String(e || "").trim().toLowerCase(); + return t === "ab" ? "wipe" : t === "sidebyside" ? "side" : ""; +} +function et(e, t = 0, n = "") { + let r = (Array.isArray(e) ? e : []).filter(Boolean); + return r.length ? (Q.assets = r, Q.index = Math.max(0, Math.min(Number(t) || 0, r.length - 1)), Q.compare = r.length > 1 ? $e(n) : "", Q.session += 1, Q.open = !0, !0) : !1; +} +function tt() { + Q.open = !1; +} +function nt(e) { + let t = Q.assets.length; + t && (Q.index = (Math.floor(e) % t + t) % t); +} +function rt(e) { + nt(Q.index + e); +} +function it(e, t, n = "") { + try { + if (b()?.viewer?.classic === !0) return !1; + } catch (e) { + console.debug?.(e); + } + let r = Array.isArray(e) ? e : []; + return !!r[Math.max(0, Math.min(Number(t) || 0, r.length - 1))]; +} +// ui/vue/components/viewer/studio/StudioFxDefs.vue?vue&type=script&setup=true&lang.ts +var at = { + class: "mjr-studio-fx-defs", + width: "0", + height: "0", + "aria-hidden": "true", + focusable: "false" +}, ot = ["id"], st = ["href"], ct = ["in"], lt = ["slope"], ut = ["slope"], dt = ["slope"], ft = { + in: "mjrExposed", + result: "mjrGamma" +}, pt = ["exponent"], mt = ["exponent"], ht = ["exponent"], gt = ["values"], _t = /* @__PURE__ */ M({ + __name: "StudioFxDefs", + props: { + filterId: {}, + channel: {}, + exposure: {}, + gamma: {}, + subtractSrc: {} + }, + setup(e) { + let t = e, n = F(() => J(t.channel)), r = F(() => X(t.exposure)), i = F(() => be(t.gamma)); + return (t, a) => (L(), H("svg", at, [D("defs", null, [D("filter", { + id: e.filterId, + x: "0", + y: "0", + width: "1", + height: "1", + filterUnits: "objectBoundingBox", + primitiveUnits: "objectBoundingBox", + "color-interpolation-filters": "sRGB" + }, [ + e.subtractSrc ? (L(), H(T, { key: 0 }, [D("feImage", { + href: e.subtractSrc, + x: "0", + y: "0", + width: "1", + height: "1", + preserveAspectRatio: "none", + result: "mjrB" + }, null, 8, st), a[0] ||= w("", 2)], 64)) : j("", !0), + D("feComponentTransfer", { + in: e.subtractSrc ? "mjrBase" : "SourceGraphic", + result: "mjrExposed" + }, [ + D("feFuncR", { + type: "linear", + slope: r.value + }, null, 8, lt), + D("feFuncG", { + type: "linear", + slope: r.value + }, null, 8, ut), + D("feFuncB", { + type: "linear", + slope: r.value + }, null, 8, dt) + ], 8, ct), + D("feComponentTransfer", ft, [ + D("feFuncR", { + type: "gamma", + amplitude: "1", + exponent: i.value, + offset: "0" + }, null, 8, pt), + D("feFuncG", { + type: "gamma", + amplitude: "1", + exponent: i.value, + offset: "0" + }, null, 8, mt), + D("feFuncB", { + type: "gamma", + amplitude: "1", + exponent: i.value, + offset: "0" + }, null, 8, ht) + ]), + n.value ? (L(), H("feColorMatrix", { + key: 1, + in: "mjrGamma", + type: "matrix", + values: n.value + }, null, 8, gt)) : j("", !0) + ], 8, ot)])])); + } +}), vt = ["viewBox"], yt = ["d", "fill"], bt = [ + "x", + "y", + "width", + "height" +], xt = [ + "x1", + "y1", + "x2", + "y2" +], St = [ + "x", + "y", + "width", + "height" +], Ct = /* @__PURE__ */ M({ + __name: "StudioGuides", + props: { + width: {}, + height: {}, + grid: {}, + aspect: {}, + maskOpacity: {} + }, + setup(e) { + let t = e, n = F(() => K(t.width, t.height, t.grid)), r = F(() => De(t.width, t.height, t.aspect)), i = F(() => { + let e = r.value; + if (!e) return ""; + let { width: n, height: i } = t; + return `M0 0H${n}V${i}H0Z M${e.x} ${e.y}V${e.y + e.h}H${e.x + e.w}V${e.y}Z`; + }), a = F(() => t.width > 0 && t.height > 0 && (t.grid !== "off" || !!r.value)); + return (t, o) => a.value ? (L(), H("svg", { + key: 0, + class: "mjr-studio-guides", + viewBox: `0 0 ${e.width} ${e.height}`, + preserveAspectRatio: "none", + "aria-hidden": "true" + }, [ + i.value ? (L(), H("path", { + key: 0, + d: i.value, + "fill-rule": "evenodd", + fill: `rgba(0,0,0,${e.maskOpacity})` + }, null, 8, yt)) : j("", !0), + r.value ? (L(), H("rect", { + key: 1, + x: r.value.x, + y: r.value.y, + width: r.value.w, + height: r.value.h, + fill: "none", + class: "mjr-studio-guides__mask-edge", + "vector-effect": "non-scaling-stroke" + }, null, 8, bt)) : j("", !0), + (L(!0), H(T, null, k(n.value.lines, (e, t) => (L(), H("line", { + key: `l${t}`, + x1: e.x1, + y1: e.y1, + x2: e.x2, + y2: e.y2, + class: "mjr-studio-guides__line", + "vector-effect": "non-scaling-stroke" + }, null, 8, xt))), 128)), + (L(!0), H(T, null, k(n.value.rects, (e, t) => (L(), H("rect", { + key: `r${t}`, + x: e.x, + y: e.y, + width: e.w, + height: e.h, + fill: "none", + class: "mjr-studio-guides__safe", + "vector-effect": "non-scaling-stroke" + }, null, 8, St))), 128)) + ], 8, vt)) : j("", !0); + } +}), wt = ["src", "alt"], Tt = ["src"], Et = ["src"], Dt = { + key: 0, + class: "mjr-studio-stage__ab" +}, Ot = { class: "is-sep" }, kt = { + key: 1, + class: "mjr-studio-stage__error" +}, At = .05, jt = 32, Mt = 16, Nt = /* @__PURE__ */ M({ + __name: "StudioImageStage", + props: { + src: {}, + alt: { default: "" }, + checker: { + type: Boolean, + default: !1 + }, + mediaFilter: { default: "" }, + compareSrc: { default: null }, + compare: { default: "off" }, + wipe: { default: 50 } + }, + emits: [ + "zoom", + "loaded", + "update:wipe" + ], + setup(e, { expose: t, emit: n }) { + let r = e, i = n, a = G(null), o = G(null), s = G(null), c = G({ + w: 0, + h: 0 + }), l = G(1), u = G({ + x: 0, + y: 0 + }), d = G(!0), f = G(!1), p = G(!1), m = G(!1), h = null, g = null, _ = F(() => !!r.compareSrc && r.compare !== "off"), v = F(() => _.value && r.compare === "side"), ee = F(() => _.value && (r.compare === "wipe" || r.compare === "wipeV")), y = F(() => _.value ? Se(r.compare) : null), te = F(() => _.value && r.compare !== "subtract"); + function ne() { + return v.value ? c.value.w * 2 + Mt : c.value.w; + } + function b() { + let e = a.value?.getBoundingClientRect(); + return { + w: e?.width || 0, + h: e?.height || 0 + }; + } + function x() { + let { w: e, h: t } = b(); + return !c.value.w || !c.value.h || !e || !t ? 1 : Math.min(e / ne(), t / c.value.h); + } + function S() { + d.value = !0, l.value = x(), u.value = { + x: v.value ? -((c.value.w + Mt) / 2) * l.value : 0, + y: 0 + }, i("zoom", l.value); + } + function w(e, t) { + let n = Math.max(At, Math.min(jt, e)), { w: r, h: a } = b(), o = t ? t.x - r / 2 : 0, s = t ? t.y - a / 2 : 0, c = n / l.value; + u.value = { + x: o - (o - u.value.x) * c, + y: s - (s - u.value.y) * c + }, l.value = n, d.value = !1, i("zoom", l.value); + } + function re(e) { + w(l.value * e); + } + function T() { + w(1), u.value = { + x: 0, + y: 0 + }; + } + function E() { + d.value ? T() : S(); + } + function ie(e) { + e.preventDefault(); + let t = a.value?.getBoundingClientRect(), n = Math.exp(-e.deltaY * .0015); + w(l.value * n, t ? { + x: e.clientX - t.left, + y: e.clientY - t.top + } : void 0); + } + function k(e) { + e.button === 0 && (h = { + x: e.clientX, + y: e.clientY, + ox: u.value.x, + oy: u.value.y, + id: e.pointerId + }, p.value = !0, e.currentTarget?.setPointerCapture?.(e.pointerId)); + } + function A(e) { + h && (u.value = { + x: h.ox + e.clientX - h.x, + y: h.oy + e.clientY - h.y + }, Math.abs(e.clientX - h.x) + Math.abs(e.clientY - h.y) > 2 && (d.value = !1)); + } + function M(e) { + h && e.currentTarget?.releasePointerCapture?.(h.id), h = null, p.value = !1; + } + function N(e) { + let t = o.value?.getBoundingClientRect(); + if (!t || t.width <= 0 || t.height <= 0) return; + let n = r.compare === "wipeV" ? (e.clientY - t.top) / t.height : (e.clientX - t.left) / t.width; + i("update:wipe", Math.round(Math.max(0, Math.min(1, n)) * 1e3) / 10); + } + function I(e) { + m.value = !0, e.currentTarget?.setPointerCapture?.(e.pointerId), N(e); + } + function oe(e) { + m.value && N(e); + } + function V() { + m.value = !1; + } + function ce(e) { + let t = e.target; + c.value = { + w: t.naturalWidth, + h: t.naturalHeight + }, f.value = !1, i("loaded", { + width: t.naturalWidth, + height: t.naturalHeight + }), S(); + } + let le = F(() => ({ + width: `${c.value.w}px`, + height: `${c.value.h}px`, + transform: `translate(-50%, -50%) translate(${u.value.x}px, ${u.value.y}px) scale(${l.value})`, + imageRendering: l.value >= 2 ? "pixelated" : "auto", + "--mjr-inv-scale": String(1 / (l.value || 1)) + })), W = F(() => r.mediaFilter ? { filter: r.mediaFilter } : {}), de = F(() => { + if (y.value) return { mixBlendMode: y.value }; + if (ee.value) { + let e = Math.max(0, Math.min(100, r.wipe)); + return { clipPath: r.compare === "wipeV" ? `inset(${e}% 0 0 0)` : `inset(0 0 0 ${e}%)` }; + } + return {}; + }), fe = F(() => r.compare === "wipeV" ? { top: `${r.wipe}%` } : { left: `${r.wipe}%` }); + return R(() => r.src, () => { + c.value = { + w: 0, + h: 0 + }, f.value = !1; + }), R(v, () => { + d.value && S(); + }), O(() => { + try { + g = new ResizeObserver(() => { + d.value && S(); + }), a.value && g.observe(a.value); + } catch (e) { + console.debug?.(e); + } + }), ae(() => g?.disconnect()), t({ + zoomBy: re, + fit: S, + actualSize: T, + toggleFitActual: E, + getSource: () => s.value && !f.value ? s.value : null, + getBox: () => o.value, + naturalSize: () => ({ ...c.value }) + }), (t, n) => (L(), H("div", { + ref_key: "stage", + ref: a, + class: U(["mjr-studio-stage", { + "is-checker": e.checker, + "is-dragging": p.value + }]), + onWheel: ie, + onPointerdown: k, + onPointermove: A, + onPointerup: M, + onPointercancel: M, + onDblclick: E + }, [ + C(D("div", { + class: "mjr-studio-stage__box", + style: B(le.value) + }, [ + D("div", { + ref_key: "box", + ref: o, + class: "mjr-studio-stage__layers", + style: B(W.value) + }, [(L(), H("img", { + ref_key: "img", + ref: s, + key: e.src, + class: "mjr-studio-stage__img", + src: e.src, + alt: e.alt, + draggable: "false", + onLoad: ce, + onError: n[0] ||= (e) => f.value = !0 + }, null, 40, wt)), te.value && !v.value ? (L(), H("img", { + key: `b:${e.compareSrc}`, + class: "mjr-studio-stage__img is-b", + src: e.compareSrc || "", + alt: "", + draggable: "false", + style: B(de.value) + }, null, 12, Tt)) : j("", !0)], 4), + ue(t.$slots, "overlay", { + width: c.value.w, + height: c.value.h + }), + ee.value ? (L(), H("div", { + key: 0, + class: U(["mjr-studio-stage__divider", { + "is-vertical": e.compare === "wipeV", + "is-active": m.value + }]), + style: B(fe.value), + onPointerdown: P(I, ["stop"]), + onPointermove: oe, + onPointerup: V, + onPointercancel: V, + onDblclick: n[1] ||= P((e) => i("update:wipe", 50), ["stop"]) + }, [...n[2] ||= [D("span", { class: "mjr-studio-stage__divider-grip" }, null, -1)]], 38)) : j("", !0), + te.value && v.value ? (L(), H("div", { + key: 1, + class: "mjr-studio-stage__side", + style: B({ + left: `calc(100% + ${Mt}px)`, + filter: e.mediaFilter || void 0 + }) + }, [(L(), H("img", { + key: `side:${e.compareSrc}`, + class: "mjr-studio-stage__img", + src: e.compareSrc || "", + alt: "", + draggable: "false" + }, null, 8, Et))], 4)) : j("", !0) + ], 4), [[se, !f.value]]), + _.value ? (L(), H("div", Dt, [ + n[3] ||= D("span", null, "A", -1), + D("span", Ot, z(e.compare === "wipeV" ? "/" : "|"), 1), + n[4] ||= D("span", null, "B", -1) + ])) : j("", !0), + f.value ? (L(), H("div", kt, [n[5] ||= D("i", { + class: "pi pi-image", + "aria-hidden": "true" + }, null, -1), D("span", null, z(e.alt), 1)])) : j("", !0) + ], 34)); + } +}), Pt = /* @__PURE__ */ M({ + __name: "StudioModel3D", + props: { + asset: {}, + src: {} + }, + setup(e) { + let t = e, n = G(null), r = null; + function i() { + try { + r?.querySelectorAll?.("canvas").forEach((e) => { + e?._mjrProc?.destroy?.(), e._mjrProc = null; + }); + } catch (e) { + console.debug?.(e); + } + r?.remove(), r = null; + } + return O(() => { + if (n.value && t.src) try { + r = me(t.asset, t.src, { + hostClassName: "mjr-model3d-host mjr-studio-model3d__host", + canvasClassName: "mjr-model3d-render-canvas mjr-studio-model3d__canvas", + hintText: "Rotate: left drag Pan: right drag Zoom: wheel or middle drag", + disableViewerTransform: !0 + }), r && n.value.appendChild(r); + } catch (e) { + console.debug?.(e); + } + }), ae(i), (e, t) => (L(), H("div", { + ref_key: "host", + ref: n, + class: "mjr-studio-model3d", + onWheel: t[0] ||= P(() => {}, ["stop"]), + onPointerdown: t[1] ||= P(() => {}, ["stop"]), + onContextmenu: t[2] ||= P(() => {}, ["prevent"]) + }, null, 544)); + } +}), Ft = { + key: 0, + class: "mjr-studio-probe", + "aria-hidden": "true" +}, It = ["width", "height"], Lt = { class: "is-dim" }, Rt = { class: "is-dim" }, zt = /* @__PURE__ */ M({ + __name: "StudioProbe", + props: { + getSource: { type: Function }, + getBox: { type: Function }, + probe: { type: Boolean }, + loupe: { type: Boolean }, + loupeSize: {}, + loupeZoom: {}, + mediaFilter: {} + }, + setup(e) { + let t = e, n = G(null), r = G(null), i = ce(null), a = 0, o = null; + function s() { + a = 0; + let e = o; + o = null; + let s = t.getBox(), c = t.getSource(); + if (!e || !s || !c) return; + let l = s.getBoundingClientRect(); + if (!(e.clientX >= l.left && e.clientX <= l.right && e.clientY >= l.top && e.clientY <= l.bottom) || l.width <= 0 || l.height <= 0) { + r.value = null, i.value = null; + return; + } + let { w: u, h: d } = qe(c), f = (e.clientX - l.left) / l.width * u, p = (e.clientY - l.top) / l.height * d; + if (r.value = { + x: e.clientX, + y: e.clientY + }, t.loupe && n.value && Ze(n.value, c, f, p, t.loupeZoom), t.probe) { + let e = Xe(c, f, p); + i.value = e ? { + x: Math.floor(f), + y: Math.floor(p), + ...Y(e[0], e[1], e[2], e[3]) + } : null; + } + } + function c(e) { + o = e, a ||= requestAnimationFrame(s); + } + return O(() => window.addEventListener("pointermove", c, { passive: !0 })), ae(() => { + window.removeEventListener("pointermove", c), a && cancelAnimationFrame(a); + }), (t, a) => r.value ? (L(), H("div", Ft, [e.loupe ? (L(), H("div", { + key: 0, + class: "mjr-studio-probe__loupe", + style: B({ + left: `${r.value.x + 18}px`, + top: `${r.value.y + 18}px`, + width: `${e.loupeSize}px`, + height: `${e.loupeSize}px` + }) + }, [D("canvas", { + ref_key: "loupeCanvas", + ref: n, + width: e.loupeSize, + height: e.loupeSize, + style: B(e.mediaFilter ? { filter: e.mediaFilter } : void 0) + }, null, 12, It), a[0] ||= D("span", { class: "mjr-studio-probe__cross" }, null, -1)], 4)) : j("", !0), e.probe && i.value ? (L(), H("div", { + key: 1, + class: "mjr-studio-probe__chip", + style: B({ + left: `${r.value.x + 18}px`, + top: `${r.value.y + (e.loupe ? e.loupeSize + 26 : 18)}px` + }) + }, [ + D("span", { + class: "mjr-studio-probe__swatch", + style: B({ background: i.value.hex }) + }, null, 4), + D("span", null, z(i.value.hex), 1), + D("span", Lt, z(i.value.rgb), 1), + D("span", Rt, "L " + z(i.value.luma) + " · " + z(i.value.x) + "," + z(i.value.y), 1) + ], 4)) : j("", !0)])) : j("", !0); + } +}), Bt = { + class: "mjr-studio-scopes", + "aria-label": "Scopes" +}, Vt = { + key: 0, + class: "mjr-studio-scopes__panel" +}, Ht = { class: "mjr-studio-scopes__label" }, Ut = { + key: 1, + class: "mjr-studio-scopes__panel" +}, Wt = { class: "mjr-studio-scopes__label" }, Gt = /* @__PURE__ */ M({ + __name: "StudioScopes", + props: { + getSource: { type: Function }, + mode: {}, + tick: {} + }, + setup(e) { + let t = e, n = G(null), r = G(null); + function i(e) { + let t = n.value, r = t?.getContext("2d"); + if (!t || !r) return; + let i = ke(e); + r.clearRect(0, 0, t.width, t.height), r.globalCompositeOperation = "lighter"; + let a = (e, n) => { + r.fillStyle = n; + for (let n = 0; n < 256; n++) { + let a = Math.min(1, e[n] / i.max) * t.height; + r.fillRect(n / 256 * t.width, t.height - a, t.width / 256 + .5, a); + } + }; + a(i.r, "rgba(255,70,70,0.75)"), a(i.g, "rgba(70,255,90,0.75)"), a(i.b, "rgba(80,140,255,0.75)"), r.globalCompositeOperation = "source-over", r.strokeStyle = "rgba(255,255,255,0.85)", r.beginPath(); + for (let e = 0; e < 256; e++) { + let n = t.height - Math.min(1, i.l[e] / i.max) * t.height; + e === 0 ? r.moveTo(0, n) : r.lineTo(e / 255 * t.width, n); + } + r.stroke(); + } + function a(e, t, n) { + let i = r.value, a = i?.getContext("2d"); + if (!i || !a) return; + let o = ve(e, t, n, 256), s = a.createImageData(o.columns, 256); + for (let e = 0; e < o.columns; e++) for (let t = 0; t < 256; t++) { + let n = o.bins[e * 256 + t]; + if (!n) continue; + let r = Math.min(255, 40 + n / o.max * 1200), i = ((255 - t) * o.columns + e) * 4; + s.data[i] = 120, s.data[i + 1] = 255, s.data[i + 2] = 150, s.data[i + 3] = r; + } + i.width = o.columns, i.height = 256, a.putImageData(s, 0, 0); + } + function o() { + if (t.mode === "off") return; + let e = Ye(t.getSource(), 256); + e && ((t.mode === "hist" || t.mode === "both") && i(e.data), (t.mode === "wave" || t.mode === "both") && a(e.data, e.width, e.height)); + } + return R(() => [t.tick, t.mode], () => requestAnimationFrame(o)), O(o), (t, i) => (L(), H("div", Bt, [e.mode === "hist" || e.mode === "both" ? (L(), H("div", Vt, [D("span", Ht, z(W(c)("viewer.studio.histogram", "Histogram")), 1), D("canvas", { + ref_key: "hist", + ref: n, + width: "256", + height: "110" + }, null, 512)])) : j("", !0), e.mode === "wave" || e.mode === "both" ? (L(), H("div", Ut, [D("span", Wt, z(W(c)("viewer.studio.waveform", "Waveform")), 1), D("canvas", { + ref_key: "wave", + ref: r, + width: "256", + height: "256", + class: "is-wave" + }, null, 512)])) : j("", !0)])); + } +}), Kt = ["title"], qt = { class: "mjr-studio-slider__head" }, Jt = { class: "mjr-studio-slider__value" }, Yt = [ + "aria-label", + "aria-valuemin", + "aria-valuemax", + "aria-valuenow" +], $ = /* @__PURE__ */ M({ + __name: "StudioSlider", + props: /*@__PURE__*/ pe({ + label: {}, + min: {}, + max: {}, + step: { default: .01 }, + defaultValue: { default: void 0 }, + format: { + type: Function, + default: void 0 + } + }, { + modelValue: { required: !0 }, + modelModifiers: {} + }), + emits: ["update:modelValue"], + setup(e) { + let t = e, n = oe(e, "modelValue"), r = G(null), i = G(!1), a = F(() => (n.value - t.min) / (t.max - t.min) * 100), o = F(() => t.format ? t.format(n.value) : String(n.value)); + function s(e) { + let n = Math.round((e - t.min) / t.step) * t.step + t.min; + return Number(Math.max(t.min, Math.min(t.max, n)).toFixed(4)); + } + function c(e) { + let i = r.value?.getBoundingClientRect(); + if (!i || i.width <= 0) return; + let a = Math.max(0, Math.min(1, (e.clientX - i.left) / i.width)); + n.value = s(t.min + a * (t.max - t.min)); + } + function l(e) { + i.value = !0, e.currentTarget?.setPointerCapture?.(e.pointerId), c(e); + } + function u(e) { + i.value && c(e); + } + function d() { + i.value = !1; + } + function f(e) { + let r = e.shiftKey ? 10 : 1; + if (e.key === "ArrowLeft" || e.key === "ArrowDown") n.value = s(n.value - t.step * r); + else if (e.key === "ArrowRight" || e.key === "ArrowUp") n.value = s(n.value + t.step * r); + else return; + e.preventDefault(), e.stopPropagation(); + } + function p() { + t.defaultValue != null && (n.value = t.defaultValue); + } + return (t, i) => (L(), H("div", { + class: "mjr-studio-slider", + title: e.defaultValue == null ? void 0 : "Double-click to reset", + onDblclick: p + }, [D("div", qt, [D("span", null, z(e.label), 1), D("span", Jt, z(o.value), 1)]), D("div", { + ref_key: "track", + ref: r, + class: "mjr-studio-slider__track", + role: "slider", + tabindex: "0", + "aria-label": e.label, + "aria-valuemin": e.min, + "aria-valuemax": e.max, + "aria-valuenow": n.value, + onPointerdown: l, + onPointermove: u, + onPointerup: d, + onPointercancel: d, + onKeydown: f + }, [D("div", { + class: "mjr-studio-slider__fill", + style: B({ width: `${a.value}%` }) + }, null, 4), D("div", { + class: "mjr-studio-slider__knob", + style: B({ left: `${a.value}%` }) + }, null, 4)], 40, Yt)], 40, Kt)); + } +}), Xt = ["aria-label"], Zt = { + key: 0, + class: "mjr-studio-rail__tag" +}, Qt = { class: "mjr-studio-rail__title" }, $t = { class: "mjr-studio-seg" }, en = { class: "mjr-studio-rail__title" }, tn = { class: "mjr-studio-rail__title" }, nn = { class: "mjr-studio-seg" }, rn = { class: "mjr-studio-rail__title" }, an = { class: "mjr-studio-seg is-wrap" }, on = { class: "mjr-studio-rail__title" }, sn = { class: "mjr-studio-seg is-wrap" }, cn = { class: "mjr-studio-rail__title" }, ln = { class: "mjr-studio-seg is-wrap" }, un = { class: "mjr-studio-rail__title" }, dn = { class: "mjr-studio-rail__title" }, fn = { class: "mjr-studio-seg is-wrap" }, pn = { class: "mjr-studio-rail__b" }, mn = ["title"], hn = { class: "mjr-studio-seg" }, gn = /* @__PURE__ */ M({ + __name: "StudioToolRail", + props: /*@__PURE__*/ pe({ + isVideo: { type: Boolean }, + canAnalyse: { type: Boolean }, + canCompare: { type: Boolean }, + compareName: {} + }, { + tools: { required: !0 }, + toolsModifiers: {} + }), + emits: /*@__PURE__*/ pe([ + "cycle-b", + "pin-b", + "swap", + "copy" + ], ["update:tools"]), + setup(e, { expose: t, emit: n }) { + let r = oe(e, "tools"), i = e, a = n, o = G(null), s = G(0), l = G(null), u = [ + { + value: "rgb", + label: "RGB" + }, + { + value: "r", + label: "R" + }, + { + value: "g", + label: "G" + }, + { + value: "b", + label: "B" + }, + { + value: "a", + label: "A" + }, + { + value: "l", + label: "Luma" + } + ], d = [ + { + value: "off", + label: "Off" + }, + { + value: "hist", + label: "Histogram" + }, + { + value: "wave", + label: "Waveform" + }, + { + value: "both", + label: "Both" + } + ], f = [ + { + value: "off", + label: "Off" + }, + { + value: "thirds", + label: "Thirds" + }, + { + value: "golden", + label: "Golden" + }, + { + value: "center", + label: "Center" + }, + { + value: "safe", + label: "Safe areas" + } + ], p = [ + { + value: "off", + label: "Off" + }, + { + value: "16:9", + label: "16:9" + }, + { + value: "9:16", + label: "9:16" + }, + { + value: "1:1", + label: "1:1" + }, + { + value: "4:3", + label: "4:3" + }, + { + value: "2.39", + label: "2.39" + } + ], m = F(() => we.filter((e) => !(i.isVideo && e.imageOnly))), h = F(() => Math.abs(r.value.exposure) > .001 || Math.abs(r.value.gamma - 1) > .001); + function g(e, t) { + if (o.value === e) { + o.value = null; + return; + } + let n = t.currentTarget, r = l.value?.getBoundingClientRect().top ?? 0; + s.value = Math.max(0, (n?.getBoundingClientRect().top ?? r) - r), o.value = e; + } + function _() { + let e = Te(); + r.value.exposure = e.exposure, r.value.gamma = e.gamma; + } + function v() { + let e = Te(); + Object.assign(r.value, { + ...e, + loupeSize: r.value.loupeSize, + loupeZoom: r.value.loupeZoom + }), o.value = null; + } + function ee(e) { + r.value.compare = r.value.compare === e ? "off" : e; + } + function y(e) { + o.value && (l.value?.contains(e.target) || (o.value = null)); + } + O(() => { + document.addEventListener("pointerdown", y, !0); + }), ae(() => { + document.removeEventListener("pointerdown", y, !0); + }); + let te = (e) => `${e > 0 ? "+" : ""}${e.toFixed(2)} EV`, ne = (e) => e.toFixed(2), b = (e) => `${Math.round(e * 100)}%`, x = (e) => `${e}×`, S = (e) => `${e}px`; + function C() { + return o.value ? (o.value = null, !0) : !1; + } + return t({ closePanel: C }), (t, n) => { + let i = ie("MButton"); + return L(), H("div", { + ref_key: "rail", + ref: l, + class: "mjr-studio-rail", + onPointerdown: n[24] ||= P(() => {}, ["stop"]), + onWheel: n[25] ||= P(() => {}, ["stop"]), + onDblclick: n[26] ||= P(() => {}, ["stop"]) + }, [D("div", { + class: "mjr-studio-rail__bar", + role: "toolbar", + "aria-label": W(c)("viewer.studio.tools", "Review tools") + }, [ + e.canAnalyse ? (L(), H(T, { key: 0 }, [ + A(i, { + type: "button", + class: U(["mjr-studio-rail__btn", { + "is-on": r.value.channel !== "rgb", + "is-open": o.value === "channels" + }]), + title: W(c)("viewer.studio.channels", "Channels"), + onClick: n[0] ||= (e) => g("channels", e) + }, { + default: N(() => [n[27] ||= D("i", { + class: "pi pi-palette", + "aria-hidden": "true" + }, null, -1), r.value.channel === "rgb" ? j("", !0) : (L(), H("span", Zt, z(r.value.channel.toUpperCase()), 1))]), + _: 1 + }, 8, ["class", "title"]), + A(i, { + type: "button", + class: U(["mjr-studio-rail__btn", { + "is-on": h.value, + "is-open": o.value === "exposure" + }]), + title: W(c)("viewer.studio.exposure", "Exposure / gamma"), + onClick: n[1] ||= (e) => g("exposure", e) + }, { + default: N(() => [...n[28] ||= [D("i", { + class: "pi pi-bolt", + "aria-hidden": "true" + }, null, -1)]]), + _: 1 + }, 8, ["class", "title"]), + A(i, { + type: "button", + class: U(["mjr-studio-rail__btn", { + "is-on": r.value.zebra, + "is-open": o.value === "zebra" + }]), + title: W(c)("viewer.studio.zebra", "Zebra highlights (Z)"), + onClick: n[2] ||= (e) => g("zebra", e) + }, { + default: N(() => [...n[29] ||= [D("i", { + class: "pi pi-exclamation-triangle", + "aria-hidden": "true" + }, null, -1)]]), + _: 1 + }, 8, ["class", "title"]), + A(i, { + type: "button", + class: U(["mjr-studio-rail__btn", { + "is-on": r.value.scopes !== "off", + "is-open": o.value === "scopes" + }]), + title: W(c)("viewer.studio.scopes", "Scopes (S)"), + onClick: n[3] ||= (e) => g("scopes", e) + }, { + default: N(() => [...n[30] ||= [D("i", { + class: "pi pi-chart-bar", + "aria-hidden": "true" + }, null, -1)]]), + _: 1 + }, 8, ["class", "title"]), + n[31] ||= D("span", { class: "mjr-studio-rail__sep" }, null, -1) + ], 64)) : j("", !0), + A(i, { + type: "button", + class: U(["mjr-studio-rail__btn", { + "is-on": r.value.grid !== "off", + "is-open": o.value === "grid" + }]), + title: W(c)("viewer.studio.grid", "Guides (G)"), + onClick: n[4] ||= (e) => g("grid", e) + }, { + default: N(() => [...n[32] ||= [D("i", { + class: "pi pi-th-large", + "aria-hidden": "true" + }, null, -1)]]), + _: 1 + }, 8, ["class", "title"]), + A(i, { + type: "button", + class: U(["mjr-studio-rail__btn", { + "is-on": r.value.aspect !== "off", + "is-open": o.value === "aspect" + }]), + title: W(c)("viewer.studio.aspect", "Aspect ratio mask"), + onClick: n[5] ||= (e) => g("aspect", e) + }, { + default: N(() => [...n[33] ||= [D("i", { + class: "pi pi-stop", + "aria-hidden": "true" + }, null, -1)]]), + _: 1 + }, 8, ["class", "title"]), + e.canAnalyse ? (L(), H(T, { key: 1 }, [ + n[36] ||= D("span", { class: "mjr-studio-rail__sep" }, null, -1), + A(i, { + type: "button", + class: U(["mjr-studio-rail__btn", { "is-on": r.value.probe }]), + title: W(c)("viewer.studio.probe", "Pixel probe (P)"), + onClick: n[6] ||= (e) => r.value.probe = !r.value.probe + }, { + default: N(() => [...n[34] ||= [D("i", { + class: "pi pi-map-marker", + "aria-hidden": "true" + }, null, -1)]]), + _: 1 + }, 8, ["class", "title"]), + A(i, { + type: "button", + class: U(["mjr-studio-rail__btn", { + "is-on": r.value.loupe, + "is-open": o.value === "loupe" + }]), + title: W(c)("viewer.studio.loupe", "Loupe (L) - right-click for settings"), + onClick: n[7] ||= (e) => r.value.loupe = !r.value.loupe, + onContextmenu: n[8] ||= P((e) => g("loupe", e), ["prevent"]) + }, { + default: N(() => [...n[35] ||= [D("i", { + class: "pi pi-search-plus", + "aria-hidden": "true" + }, null, -1)]]), + _: 1 + }, 8, ["class", "title"]) + ], 64)) : j("", !0), + e.canCompare ? (L(), H(T, { key: 2 }, [n[38] ||= D("span", { class: "mjr-studio-rail__sep" }, null, -1), A(i, { + type: "button", + class: U(["mjr-studio-rail__btn", { + "is-on": r.value.compare !== "off", + "is-open": o.value === "compare" + }]), + title: W(c)("viewer.studio.compareTool", "Compare A/B (C)"), + onClick: n[9] ||= (e) => g("compare", e) + }, { + default: N(() => [...n[37] ||= [D("i", { + class: "pi pi-clone", + "aria-hidden": "true" + }, null, -1)]]), + _: 1 + }, 8, ["class", "title"])], 64)) : j("", !0), + n[41] ||= D("span", { class: "mjr-studio-rail__sep" }, null, -1), + e.canAnalyse ? (L(), E(i, { + key: 3, + type: "button", + class: "mjr-studio-rail__btn", + title: W(c)("viewer.studio.copy", "Copy image / frame to clipboard"), + onClick: n[10] ||= (e) => a("copy") + }, { + default: N(() => [...n[39] ||= [D("i", { + class: "pi pi-copy", + "aria-hidden": "true" + }, null, -1)]]), + _: 1 + }, 8, ["title"])) : j("", !0), + A(i, { + type: "button", + class: "mjr-studio-rail__btn", + title: W(c)("viewer.studio.resetTools", "Reset all tools (R)"), + onClick: v + }, { + default: N(() => [...n[40] ||= [D("i", { + class: "pi pi-refresh", + "aria-hidden": "true" + }, null, -1)]]), + _: 1 + }, 8, ["title"]) + ], 8, Xt), o.value ? (L(), H("div", { + key: 0, + class: "mjr-studio-rail__panel", + style: B({ top: `${s.value}px` }), + role: "dialog" + }, [o.value === "channels" ? (L(), H(T, { key: 0 }, [D("div", Qt, z(W(c)("viewer.studio.channels", "Channels")), 1), D("div", $t, [(L(), H(T, null, k(u, (e) => A(i, { + key: e.value, + type: "button", + class: U({ "is-on": r.value.channel === e.value }), + onClick: (t) => r.value.channel = e.value + }, { + default: N(() => [V(z(e.label), 1)]), + _: 2 + }, 1032, ["class", "onClick"])), 64))])], 64)) : o.value === "exposure" ? (L(), H(T, { key: 1 }, [ + D("div", en, z(W(c)("viewer.studio.exposure", "Exposure / gamma")), 1), + A($, { + modelValue: r.value.exposure, + "onUpdate:modelValue": n[11] ||= (e) => r.value.exposure = e, + label: W(c)("viewer.studio.ev", "Exposure"), + min: -5, + max: 5, + step: .05, + "default-value": 0, + format: te + }, null, 8, ["modelValue", "label"]), + A($, { + modelValue: r.value.gamma, + "onUpdate:modelValue": n[12] ||= (e) => r.value.gamma = e, + label: W(c)("viewer.studio.gamma", "Gamma"), + min: .1, + max: 3, + step: .01, + "default-value": 1, + format: ne + }, null, 8, ["modelValue", "label"]), + A(i, { + type: "button", + class: "mjr-studio-btn is-text", + onClick: _ + }, { + default: N(() => [V(z(W(c)("viewer.studio.reset", "Reset")), 1)]), + _: 1 + }) + ], 64)) : o.value === "zebra" ? (L(), H(T, { key: 2 }, [ + D("div", tn, z(W(c)("viewer.studio.zebra", "Zebra highlights (Z)")), 1), + D("div", nn, [A(i, { + type: "button", + class: U({ "is-on": !r.value.zebra }), + onClick: n[13] ||= (e) => r.value.zebra = !1 + }, { + default: N(() => [...n[42] ||= [V("Off", -1)]]), + _: 1 + }, 8, ["class"]), A(i, { + type: "button", + class: U({ "is-on": r.value.zebra }), + onClick: n[14] ||= (e) => r.value.zebra = !0 + }, { + default: N(() => [...n[43] ||= [V("On", -1)]]), + _: 1 + }, 8, ["class"])]), + A($, { + modelValue: r.value.zebraThreshold, + "onUpdate:modelValue": n[15] ||= (e) => r.value.zebraThreshold = e, + label: W(c)("viewer.studio.threshold", "Threshold"), + min: .5, + max: 1, + step: .01, + "default-value": .95, + format: b + }, null, 8, ["modelValue", "label"]) + ], 64)) : o.value === "scopes" ? (L(), H(T, { key: 3 }, [D("div", rn, z(W(c)("viewer.studio.scopes", "Scopes (S)")), 1), D("div", an, [(L(), H(T, null, k(d, (e) => A(i, { + key: e.value, + type: "button", + class: U({ "is-on": r.value.scopes === e.value }), + onClick: (t) => r.value.scopes = e.value + }, { + default: N(() => [V(z(e.label), 1)]), + _: 2 + }, 1032, ["class", "onClick"])), 64))])], 64)) : o.value === "grid" ? (L(), H(T, { key: 4 }, [D("div", on, z(W(c)("viewer.studio.grid", "Guides (G)")), 1), D("div", sn, [(L(), H(T, null, k(f, (e) => A(i, { + key: e.value, + type: "button", + class: U({ "is-on": r.value.grid === e.value }), + onClick: (t) => r.value.grid = e.value + }, { + default: N(() => [V(z(e.label), 1)]), + _: 2 + }, 1032, ["class", "onClick"])), 64))])], 64)) : o.value === "aspect" ? (L(), H(T, { key: 5 }, [ + D("div", cn, z(W(c)("viewer.studio.aspect", "Aspect ratio mask")), 1), + D("div", ln, [(L(), H(T, null, k(p, (e) => A(i, { + key: e.value, + type: "button", + class: U({ "is-on": r.value.aspect === e.value }), + onClick: (t) => r.value.aspect = e.value + }, { + default: N(() => [V(z(e.label), 1)]), + _: 2 + }, 1032, ["class", "onClick"])), 64))]), + A($, { + modelValue: r.value.maskOpacity, + "onUpdate:modelValue": n[16] ||= (e) => r.value.maskOpacity = e, + label: W(c)("viewer.studio.opacity", "Opacity"), + min: 0, + max: 1, + step: .05, + "default-value": .65, + format: b + }, null, 8, ["modelValue", "label"]) + ], 64)) : o.value === "loupe" ? (L(), H(T, { key: 6 }, [ + D("div", un, z(W(c)("viewer.studio.loupeTitle", "Loupe")), 1), + A($, { + modelValue: r.value.loupeZoom, + "onUpdate:modelValue": n[17] ||= (e) => r.value.loupeZoom = e, + label: W(c)("viewer.studio.magnification", "Magnification"), + min: 2, + max: 32, + step: 1, + "default-value": 8, + format: x + }, null, 8, ["modelValue", "label"]), + A($, { + modelValue: r.value.loupeSize, + "onUpdate:modelValue": n[18] ||= (e) => r.value.loupeSize = e, + label: W(c)("viewer.studio.size", "Size"), + min: 80, + max: 320, + step: 10, + "default-value": 140, + format: S + }, null, 8, ["modelValue", "label"]) + ], 64)) : o.value === "compare" ? (L(), H(T, { key: 7 }, [ + D("div", dn, z(W(c)("viewer.studio.compareTool", "Compare A/B (C)")), 1), + D("div", fn, [(L(!0), H(T, null, k(m.value, (e) => (L(), E(i, { + key: e.value, + type: "button", + class: U({ "is-on": r.value.compare === e.value }), + onClick: (t) => ee(e.value) + }, { + default: N(() => [V(z(e.label), 1)]), + _: 2 + }, 1032, ["class", "onClick"]))), 128))]), + D("div", pn, [ + n[46] ||= D("span", { class: "mjr-studio-rail__b-label" }, "B", -1), + A(i, { + type: "button", + class: "mjr-studio-btn", + title: W(c)("viewer.studio.prevB", "Previous B"), + onClick: n[19] ||= (e) => a("cycle-b", -1) + }, { + default: N(() => [...n[44] ||= [D("i", { + class: "pi pi-chevron-left", + "aria-hidden": "true" + }, null, -1)]]), + _: 1 + }, 8, ["title"]), + D("span", { + class: "mjr-studio-rail__b-name", + title: e.compareName + }, z(e.compareName || "—"), 9, mn), + A(i, { + type: "button", + class: "mjr-studio-btn", + title: W(c)("viewer.studio.nextB", "Next B"), + onClick: n[20] ||= (e) => a("cycle-b", 1) + }, { + default: N(() => [...n[45] ||= [D("i", { + class: "pi pi-chevron-right", + "aria-hidden": "true" + }, null, -1)]]), + _: 1 + }, 8, ["title"]) + ]), + D("div", hn, [A(i, { + type: "button", + title: W(c)("viewer.studio.pinB", "Use the current asset as B (B)"), + onClick: n[21] ||= (e) => a("pin-b") + }, { + default: N(() => [n[47] ||= D("i", { + class: "pi pi-bookmark", + "aria-hidden": "true" + }, null, -1), V(" " + z(W(c)("viewer.studio.pinBShort", "Set B")), 1)]), + _: 1 + }, 8, ["title"]), A(i, { + type: "button", + title: W(c)("viewer.studio.swap", "Swap A and B (X)"), + onClick: n[22] ||= (e) => a("swap") + }, { + default: N(() => [n[48] ||= D("i", { + class: "pi pi-arrow-right-arrow-left", + "aria-hidden": "true" + }, null, -1), V(" " + z(W(c)("viewer.studio.swapShort", "Swap")), 1)]), + _: 1 + }, 8, ["title"])]), + r.value.compare === "wipe" || r.value.compare === "wipeV" ? (L(), E($, { + key: 0, + modelValue: r.value.wipe, + "onUpdate:modelValue": n[23] ||= (e) => r.value.wipe = e, + label: W(c)("viewer.studio.wipe", "Wipe"), + min: 0, + max: 100, + step: 1, + "default-value": 50, + format: (e) => `${e}%` + }, null, 8, [ + "modelValue", + "label", + "format" + ])) : j("", !0) + ], 64)) : j("", !0)], 4)) : j("", !0)], 544); + }; + } +}), _n = /* @__PURE__ */ M({ + __name: "StudioZebra", + props: { + getSource: { type: Function }, + threshold: {}, + tick: {} + }, + setup(e) { + let t = e, n = G(null), r = 0; + function i() { + let e = n.value, i = Ye(t.getSource(), 480); + if (!e || !i) return; + e.width = i.width, e.height = i.height, r = (r + 1) % 8; + let a = ye(i.data, i.width, i.height, t.threshold, r); + e.getContext("2d")?.putImageData(new ImageData(a, i.width, i.height), 0, 0); + } + return R(() => [t.tick, t.threshold], i), O(i), (e, t) => (L(), H("canvas", { + ref_key: "canvas", + ref: n, + class: "mjr-studio-zebra", + "aria-hidden": "true" + }, null, 512)); + } +}), vn = ["aria-label"], yn = { class: "mjr-studio__header" }, bn = { class: "mjr-studio__nav" }, xn = { class: "mjr-studio__counter" }, Sn = { class: "mjr-studio__title" }, Cn = ["title"], wn = { class: "mjr-studio__summary" }, Tn = { class: "mjr-studio__actions" }, En = ["title"], Dn = { class: "mjr-studio__body" }, On = { + key: 4, + class: "mjr-studio__unsupported" +}, kn = { class: "mjr-studio__review" }, An = { class: "mjr-studio__review-row" }, jn = { class: "mjr-studio__label" }, Mn = { + class: "mjr-studio__tabs", + role: "tablist" +}, Nn = { class: "mjr-studio__tab-body" }, Pn = ["aria-label"], Fn = ["src"], In = { + key: 1, + class: "pi pi-file", + "aria-hidden": "true" +}, Ln = { + key: 2, + class: "pi pi-play mjr-studio__thumb-badge", + "aria-hidden": "true" +}, Rn = /* @__PURE__ */ M({ + __name: "StudioViewer", + emits: ["open-classic"], + setup(n, { emit: i }) { + let u = i, f = G(null), p = G(null), m = G(null), h = G(null), g = G(!0), _ = G("generation"), v = G(!1), ee = G(1), b = ce(null), x = ce(null), S = null, C = F(() => Q.assets[Q.index] ?? null), w = F(() => b.value ?? C.value), O = F(() => q(C.value)), M = F(() => C.value ? s(C.value) : ""), I = F(() => Q.assets.length), oe = F(() => Ce(w.value)), se = F(() => xe(w.value, x.value)), B = F(() => Number(x.value?.frame_count) || null), ue = F(() => Number(w.value?.rating) || 0), pe = F(() => Array.isArray(w.value?.tags) ? w.value.tags : []), me = F(() => { + let { start: e, end: t } = Ee(I.value, Q.index); + return Q.assets.slice(e, t).map((t, n) => ({ + asset: t, + index: e + n + })); + }), K = le(Te()), _e = `mjr-studio-fx-${Math.random().toString(36).slice(2, 9)}`, J = G(null), ve = G(0), ye = null, be = -1, Y = F(() => O.value === "image" || O.value === "video"), Se = F(() => { + if (!Y.value) return null; + let e = J.value, t = Q.assets, n = Q.index; + return e != null && e !== n && t[e] && q(t[e]) === O.value ? e : je(t, n, 1, (e) => q(e) === O.value); + }), X = F(() => Se.value != null), we = F(() => Se.value == null ? null : Q.assets[Se.value]), De = F(() => K.compare !== "off" && !!we.value), ke = F(() => De.value && we.value ? s(we.value) : null), Ne = F(() => De.value && K.compare === "subtract" && O.value === "image" ? ke.value : null), Pe = F(() => Y.value && (Ae(K) || Ne.value) ? `url(#${_e})` : ""), Fe = F(() => Y.value && (K.zebra || K.scopes !== "off")); + function Z() { + return O.value === "image" ? p.value?.getSource?.() ?? null : O.value === "video" ? m.value?.getSource?.() ?? null : null; + } + function Ie() { + return O.value === "image" ? p.value?.getBox?.() ?? null : O.value === "video" ? m.value?.getBox?.() ?? null : null; + } + function Le() { + ve.value += 1; + } + function Re() { + ye && clearInterval(ye), ye = null; + } + R([ + Fe, + O, + () => Q.open + ], ([e, t, n]) => { + Re(), e && n && t === "video" && (be = -1, ye = setInterval(() => { + let e = Z()?.currentTime ?? -1; + e !== be && (be = e, Le()); + }, 120)); + }, { immediate: !0 }), R(Fe, (e) => { + e && re(Le); + }); + function ze(e) { + let t = Se.value ?? Q.index, n = je(Q.assets, t, e, (e, t) => t !== Q.index && q(e) === O.value); + n != null && (J.value = n); + } + function Be() { + J.value = Q.index; + let e = je(Q.assets, Q.index, 1, (e) => q(e) === O.value); + e != null && nt(e), K.compare === "off" && (K.compare = "wipe"); + } + function Ve() { + let e = Se.value; + e != null && (J.value = Q.index, nt(e)); + } + function He() { + X.value && (K.compare = K.compare === "off" ? "wipe" : "off"); + } + async function Ue() { + let t = await Qe(Z()), n = window.ClipboardItem; + if (!t || !n || !navigator.clipboard?.write) e(c("viewer.studio.copyFailed", "Could not copy this image"), "error"); + else try { + await navigator.clipboard.write([new n({ "image/png": t })]), e(c("viewer.studio.copied", "Copied to clipboard"), "success"); + } catch (t) { + console.debug?.(t), e(c("viewer.studio.copyFailed", "Could not copy this image"), "error"); + } + } + let We = [ + "off", + "hist", + "wave", + "both" + ], Ge = [ + "off", + "thirds", + "golden", + "center", + "safe" + ]; + function Ke(e, t) { + return e[(e.indexOf(t) + 1) % e.length]; + } + R(() => Q.session, () => { + J.value = null, K.compare = Q.compare || "off", re(() => { + let e = document.activeElement; + e && f.value?.contains(e) && et(e) && e.blur(), f.value?.focus?.({ preventScroll: !0 }); + }); + }, { immediate: !0 }); + async function qe(e) { + if (S?.abort(), b.value = null, x.value = null, !e) return; + let t = typeof AbortController < "u" ? new AbortController() : null; + S = t; + try { + let n = await Me(e, { + getAssetMetadata: r, + getFileMetadataScoped: o, + signal: t?.signal + }); + S === t && C.value === e && (b.value = n && typeof n == "object" ? n : e); + } catch (e) { + console.debug?.(e); + } + let n = q(e); + if ((n === "video" || n === "audio") && e?.id != null) try { + let n = await a(e.id, t ? { signal: t.signal } : {}); + S === t && n?.ok && (x.value = n.data || null); + } catch (e) { + console.debug?.(e); + } + } + R(C, (e) => void qe(e), { immediate: !0 }), R(() => Q.open, async (e) => { + e ? (await re(), f.value?.focus?.(), window.addEventListener("keydown", it, !0)) : (window.removeEventListener("keydown", it, !0), Re(), m.value?.release?.(), S?.abort(), document.fullscreenElement && f.value?.contains(document.fullscreenElement) && document.exitFullscreen?.()); + }, { immediate: !0 }), ae(() => { + window.removeEventListener("keydown", it, !0), Re(), S?.abort(); + }); + function Je() { + tt(); + } + function Ye(e = "") { + let t = { + assets: Q.assets.slice(), + index: Q.index, + mode: e + }; + tt(), u("open-classic", t); + } + function Xe() { + document.fullscreenElement ? document.exitFullscreen?.() : f.value?.requestFullscreen?.(); + } + function Ze() { + if (!M.value) return; + let e = document.createElement("a"); + e.href = M.value, e.download = String(C.value?.filename || ""), e.click(); + } + async function $e(n) { + let r = C.value; + if (!r) return; + let i = Math.max(0, Math.min(5, n)), a = await t(r, i); + a?.ok ? (r.rating = i, b.value = b.value ? { + ...b.value, + rating: i + } : r, window.dispatchEvent(new CustomEvent(d, { detail: { + assetId: r.id == null ? "" : String(r.id), + rating: i + } }))) : e(a?.error || c("toast.ratingUpdateFailed", "Rating update failed"), "error"); + } + function et(e) { + return !!e?.closest?.("input, textarea, select, [contenteditable='true']"); + } + function it(e) { + if (!Q.open) return; + if (et(e.target)) { + e.key === "Escape" && e.target?.blur?.(); + return; + } + let t = O.value === "video" || O.value === "audio", n = e.key, r = n.length === 1 ? n.toLowerCase() : n, i = !e.ctrlKey && !e.metaKey && !e.altKey, a = Y.value && i, o = !0; + n === "Escape" && h.value?.closePanel?.() || (n === "Escape" ? Je() : r === "c" && (e.ctrlKey || e.metaKey) && Y.value ? Ue() : n === "ArrowLeft" && !e.shiftKey ? rt(-1) : n === "ArrowRight" && !e.shiftKey ? rt(1) : n === "ArrowLeft" && e.shiftKey && t ? m.value?.seekBy?.(-5) : n === "ArrowRight" && e.shiftKey && t ? m.value?.seekBy?.(5) : n === "Home" ? nt(0) : n === "End" ? nt(I.value - 1) : n === " " && t ? m.value?.togglePlay?.() : n === "," && t ? m.value?.stepFrame?.(-1) : n === "." && t ? m.value?.stepFrame?.(1) : (n === "i" || n === "I") && t ? m.value?.setLoopA?.() : (n === "o" || n === "O") && t ? m.value?.setLoopB?.() : (n === "u" || n === "U") && t ? m.value?.clearLoop?.() : (n === "m" || n === "M") && t ? m.value?.toggleMute?.() : n === "]" && t ? m.value?.cycleRate?.(1) : n === "[" && t ? m.value?.cycleRate?.(-1) : n === "Tab" ? g.value = !g.value : n === "f" || n === "F" ? Xe() : (n === "+" || n === "=") && O.value === "image" ? p.value?.zoomBy?.(1.25) : n === "-" && O.value === "image" ? p.value?.zoomBy?.(.8) : n === "0" && O.value === "image" && e.altKey ? p.value?.fit?.() : /^[0-5]$/.test(n) && !e.ctrlKey && !e.metaKey && !e.altKey ? $e(Number(n)) : r === "c" && i && X.value ? He() : r === "b" && i && X.value ? Be() : r === "x" && i && De.value ? Ve() : r === "z" && a ? K.zebra = !K.zebra : r === "s" && a ? K.scopes = Ke(We, K.scopes) : r === "g" && i && Y.value ? K.grid = Ke(Ge, K.grid) : r === "p" && a ? K.probe = !K.probe : r === "l" && a ? K.loupe = !K.loupe : r === "r" && a ? Object.assign(K, Te(), { + loupeSize: K.loupeSize, + loupeZoom: K.loupeZoom + }) : o = !1), o && (e.preventDefault(), e.stopPropagation(), e.stopImmediatePropagation?.()); + } + function at(e) { + return l(e, 192) || ""; + } + return (e, t) => { + let n = ie("MButton"); + return L(), E(fe, { to: "body" }, [W(Q).open ? (L(), H("div", { + key: 0, + ref_key: "overlay", + ref: f, + class: U(["mjr-assets-manager mjr-studio", { "is-inspector-closed": !g.value }]), + role: "dialog", + "aria-modal": "true", + "aria-label": W(c)("viewer.studio.title", "Viewer"), + tabindex: "-1" + }, [ + D("header", yn, [ + D("div", bn, [ + A(n, { + type: "button", + class: "mjr-studio-btn", + title: W(c)("viewer.studio.prev", "Previous (←)"), + disabled: I.value < 2, + onClick: t[0] ||= (e) => W(rt)(-1) + }, { + default: N(() => [...t[16] ||= [D("i", { + class: "pi pi-chevron-left", + "aria-hidden": "true" + }, null, -1)]]), + _: 1 + }, 8, ["title", "disabled"]), + D("span", xn, z(W(Q).index + 1) + " / " + z(I.value), 1), + A(n, { + type: "button", + class: "mjr-studio-btn", + title: W(c)("viewer.studio.next", "Next (→)"), + disabled: I.value < 2, + onClick: t[1] ||= (e) => W(rt)(1) + }, { + default: N(() => [...t[17] ||= [D("i", { + class: "pi pi-chevron-right", + "aria-hidden": "true" + }, null, -1)]]), + _: 1 + }, 8, ["title", "disabled"]) + ]), + D("div", Sn, [D("span", { + class: "mjr-studio__filename", + title: w.value?.filepath || w.value?.filename + }, z(w.value?.filename), 9, Cn), D("span", wn, z(oe.value), 1)]), + D("div", Tn, [ + O.value === "image" ? (L(), H(T, { key: 0 }, [ + D("span", { + class: "mjr-studio-chip", + title: W(c)("viewer.studio.zoomHint", "Wheel to zoom, double-click for fit / 100 %") + }, z(Math.round(ee.value * 100)) + "%", 9, En), + A(n, { + type: "button", + class: "mjr-studio-btn", + title: W(c)("viewer.studio.fit", "Fit"), + onClick: t[2] ||= (e) => p.value?.fit() + }, { + default: N(() => [...t[18] ||= [D("i", { + class: "pi pi-arrows-alt", + "aria-hidden": "true" + }, null, -1)]]), + _: 1 + }, 8, ["title"]), + A(n, { + type: "button", + class: "mjr-studio-btn is-text", + title: W(c)("viewer.studio.actualSize", "Actual size"), + onClick: t[3] ||= (e) => p.value?.actualSize() + }, { + default: N(() => [...t[19] ||= [V("1:1", -1)]]), + _: 1 + }, 8, ["title"]), + A(n, { + type: "button", + class: U(["mjr-studio-btn", { "is-on": v.value }]), + title: W(c)("viewer.studio.checker", "Transparency checkerboard"), + onClick: t[4] ||= (e) => v.value = !v.value + }, { + default: N(() => [...t[20] ||= [D("i", { + class: "pi pi-th-large", + "aria-hidden": "true" + }, null, -1)]]), + _: 1 + }, 8, ["class", "title"]) + ], 64)) : j("", !0), + X.value ? (L(), E(n, { + key: 1, + type: "button", + class: U(["mjr-studio-btn", { "is-on": De.value }]), + title: W(c)("viewer.studio.compare", "Compare A/B (C)"), + onClick: He + }, { + default: N(() => [...t[21] ||= [D("i", { + class: "pi pi-clone", + "aria-hidden": "true" + }, null, -1)]]), + _: 1 + }, 8, ["class", "title"])) : j("", !0), + A(n, { + type: "button", + class: "mjr-studio-btn", + title: W(c)("viewer.studio.download", "Download"), + onClick: Ze + }, { + default: N(() => [...t[22] ||= [D("i", { + class: "pi pi-download", + "aria-hidden": "true" + }, null, -1)]]), + _: 1 + }, 8, ["title"]), + A(n, { + type: "button", + class: "mjr-studio-btn", + title: W(c)("viewer.studio.classic", "Open in the classic viewer"), + onClick: t[5] ||= (e) => Ye("") + }, { + default: N(() => [...t[23] ||= [D("i", { + class: "pi pi-sliders-h", + "aria-hidden": "true" + }, null, -1)]]), + _: 1 + }, 8, ["title"]), + A(n, { + type: "button", + class: U(["mjr-studio-btn", { "is-on": g.value }]), + title: W(c)("viewer.studio.inspector", "Generation info (Tab)"), + onClick: t[6] ||= (e) => g.value = !g.value + }, { + default: N(() => [...t[24] ||= [D("i", { + class: "pi pi-info-circle", + "aria-hidden": "true" + }, null, -1)]]), + _: 1 + }, 8, ["class", "title"]), + A(n, { + type: "button", + class: "mjr-studio-btn", + title: W(c)("viewer.studio.fullscreen", "Fullscreen (F)"), + onClick: Xe + }, { + default: N(() => [...t[25] ||= [D("i", { + class: "pi pi-window-maximize", + "aria-hidden": "true" + }, null, -1)]]), + _: 1 + }, 8, ["title"]), + A(n, { + type: "button", + class: "mjr-studio-btn is-close", + title: W(c)("viewer.studio.close", "Close (Esc)"), + onClick: Je + }, { + default: N(() => [...t[26] ||= [D("i", { + class: "pi pi-times", + "aria-hidden": "true" + }, null, -1)]]), + _: 1 + }, 8, ["title"]) + ]) + ]), + D("main", Dn, [D("section", { class: U(["mjr-studio__stage", { "has-rail": Y.value }]) }, [ + Pe.value ? (L(), E(_t, { + key: 0, + "filter-id": _e, + channel: W(K).channel, + exposure: W(K).exposure, + gamma: W(K).gamma, + "subtract-src": Ne.value + }, null, 8, [ + "channel", + "exposure", + "gamma", + "subtract-src" + ])) : j("", !0), + O.value === "image" ? (L(), E(Nt, { + ref_key: "imageStage", + ref: p, + key: `img:${M.value}`, + wipe: W(K).wipe, + "onUpdate:wipe": t[7] ||= (e) => W(K).wipe = e, + src: M.value, + alt: C.value?.filename, + checker: v.value, + "media-filter": Pe.value, + "compare-src": ke.value, + compare: W(K).compare, + class: U({ "is-probing": W(K).probe || W(K).loupe }), + onZoom: t[8] ||= (e) => ee.value = e, + onLoaded: Le + }, { + overlay: N(({ width: e, height: t }) => [W(K).zebra ? (L(), E(_n, { + key: 0, + "get-source": Z, + threshold: W(K).zebraThreshold, + tick: ve.value + }, null, 8, ["threshold", "tick"])) : j("", !0), A(Ct, { + width: e, + height: t, + grid: W(K).grid, + aspect: W(K).aspect, + "mask-opacity": W(K).maskOpacity + }, null, 8, [ + "width", + "height", + "grid", + "aspect", + "mask-opacity" + ])]), + _: 1 + }, 8, [ + "wipe", + "src", + "alt", + "checker", + "media-filter", + "compare-src", + "compare", + "class" + ])) : O.value === "video" || O.value === "audio" ? (L(), E(Oe, { + ref_key: "player", + ref: m, + key: `media:${M.value}`, + wipe: W(K).wipe, + "onUpdate:wipe": t[9] ||= (e) => W(K).wipe = e, + src: M.value, + kind: O.value, + fps: se.value, + "frame-count": B.value, + filename: C.value?.filename, + "media-filter": Pe.value, + "compare-src": ke.value, + compare: W(K).compare, + class: U({ "is-probing": W(K).probe || W(K).loupe }) + }, { + overlay: N(({ width: e, height: t }) => [W(K).zebra ? (L(), E(_n, { + key: 0, + "get-source": Z, + threshold: W(K).zebraThreshold, + tick: ve.value + }, null, 8, ["threshold", "tick"])) : j("", !0), A(Ct, { + width: e, + height: t, + grid: W(K).grid, + aspect: W(K).aspect, + "mask-opacity": W(K).maskOpacity + }, null, 8, [ + "width", + "height", + "grid", + "aspect", + "mask-opacity" + ])]), + _: 1 + }, 8, [ + "wipe", + "src", + "kind", + "fps", + "frame-count", + "filename", + "media-filter", + "compare-src", + "compare", + "class" + ])) : O.value === "model3d" ? (L(), E(Pt, { + key: `3d:${M.value}`, + asset: C.value, + src: M.value + }, null, 8, ["asset", "src"])) : (L(), H("div", On, [ + t[27] ||= D("i", { + class: "pi pi-file", + "aria-hidden": "true" + }, null, -1), + D("span", null, z(W(c)("viewer.studio.unsupported", "No preview for this file type.")), 1), + A(n, { + type: "button", + class: "mjr-studio-btn is-text", + onClick: t[10] ||= (e) => Ye("") + }, { + default: N(() => [V(z(W(c)("viewer.studio.classicShort", "Classic viewer")), 1)]), + _: 1 + }) + ])), + Y.value ? (L(), E(gn, { + key: 5, + ref_key: "toolRail", + ref: h, + tools: W(K), + "onUpdate:tools": t[11] ||= (e) => de(K) ? K.value = e : K = e, + "is-video": O.value === "video", + "can-analyse": Y.value, + "can-compare": X.value, + "compare-name": we.value?.filename, + onCycleB: ze, + onPinB: Be, + onSwap: Ve, + onCopy: Ue + }, null, 8, [ + "tools", + "is-video", + "can-analyse", + "can-compare", + "compare-name" + ])) : j("", !0), + Y.value && W(K).scopes !== "off" ? (L(), E(Gt, { + key: 6, + "get-source": Z, + mode: W(K).scopes, + tick: ve.value + }, null, 8, ["mode", "tick"])) : j("", !0), + Y.value && (W(K).probe || W(K).loupe) ? (L(), E(zt, { + key: 7, + "get-source": Z, + "get-box": Ie, + probe: W(K).probe, + loupe: W(K).loupe, + "loupe-size": W(K).loupeSize, + "loupe-zoom": W(K).loupeZoom, + "media-filter": Ne.value ? "" : Pe.value + }, null, 8, [ + "probe", + "loupe", + "loupe-size", + "loupe-zoom", + "media-filter" + ])) : j("", !0) + ], 2), g.value && w.value ? (L(), H("aside", { + key: 0, + class: "mjr-studio__inspector", + onKeydown: t[15] ||= P(() => {}, ["stop"]) + }, [ + D("div", kn, [D("div", An, [D("span", jn, z(W(c)("sidebar.rating", "Rating")), 1), (L(), E(he, { + key: `r:${w.value.id}`, + asset: w.value, + "model-value": ue.value, + size: 40 + }, null, 8, ["asset", "model-value"]))]), (L(), E(ge, { + key: `t:${w.value.id}`, + asset: w.value, + "model-value": pe.value, + autofocus: !1 + }, null, 8, ["asset", "model-value"]))]), + D("nav", Mn, [ + A(n, { + type: "button", + role: "tab", + class: U({ "is-active": _.value === "generation" }), + onClick: t[12] ||= (e) => _.value = "generation" + }, { + default: N(() => [V(z(W(c)("viewer.studio.tabGeneration", "Generation")), 1)]), + _: 1 + }, 8, ["class"]), + A(n, { + type: "button", + role: "tab", + class: U({ "is-active": _.value === "workflow" }), + onClick: t[13] ||= (e) => _.value = "workflow" + }, { + default: N(() => [V(z(W(c)("viewer.studio.tabWorkflow", "Workflow")), 1)]), + _: 1 + }, 8, ["class"]), + A(n, { + type: "button", + role: "tab", + class: U({ "is-active": _.value === "file" }), + onClick: t[14] ||= (e) => _.value = "file" + }, { + default: N(() => [V(z(W(c)("viewer.studio.tabFile", "File")), 1)]), + _: 1 + }, 8, ["class"]) + ]), + D("div", Nn, [_.value === "generation" ? (L(), E(te, { + key: `g:${w.value.id}`, + asset: w.value + }, null, 8, ["asset"])) : _.value === "workflow" ? (L(), E(ne, { + key: `w:${w.value.id}`, + asset: w.value + }, null, 8, ["asset"])) : (L(), E(y, { + key: `f:${w.value.id}`, + asset: w.value + }, null, 8, ["asset"]))]) + ], 32)) : j("", !0)]), + I.value > 1 ? (L(), H("footer", { + key: 0, + class: "mjr-studio__filmstrip", + role: "listbox", + "aria-label": W(c)("viewer.studio.filmstrip", "Filmstrip") + }, [(L(!0), H(T, null, k(me.value, (e) => (L(), E(n, { + key: `${e.index}:${e.asset?.id ?? e.asset?.filename}`, + type: "button", + role: "option", + class: U(["mjr-studio__thumb", { "is-current": e.index === W(Q).index }]), + "aria-selected": e.index === W(Q).index, + title: e.asset?.filename, + onClick: (t) => W(nt)(e.index) + }, { + default: N(() => [at(e.asset) ? (L(), H("img", { + key: 0, + src: at(e.asset), + alt: "", + loading: "lazy", + draggable: "false" + }, null, 8, Fn)) : (L(), H("i", In)), W(q)(e.asset) === "video" ? (L(), H("i", Ln)) : j("", !0)]), + _: 2 + }, 1032, [ + "class", + "aria-selected", + "title", + "onClick" + ]))), 128))], 8, Pn)) : j("", !0) + ], 10, vn)) : j("", !0)]); + }; + } +}), zn = /* @__PURE__ */ M({ + __name: "ViewerPortal", + setup(e) { + let t = null; + function n(e) { + let n = e?.detail || {}, i = Array.isArray(n?.assets) ? n.assets.filter(Boolean) : n?.asset ? [n.asset] : []; + if (!i.length) return; + let a = Math.max(0, Math.min(Number(n?.index) || 0, i.length - 1)), o = String(n?.mode || "").trim().toLowerCase(); + if (it(i, a, o) && et(i, a, o)) { + try { + t?.close?.(); + } catch (e) { + console.debug?.(e); + } + n.handled = !0; + } else r(i, a, o, n); + } + function r(e, n, r, i = null) { + tt(); + try { + t ||= _(), t.open?.(e, n), (r === "ab" || r === "sidebyside") && t.setMode?.(r), i && (i.handled = !0); + } catch (e) { + console.debug?.(e); + } + } + return O(() => { + try { + S(); + } catch (e) { + console.debug?.(e); + } + try { + t = _(); + } catch (e) { + console.debug?.(e); + } + try { + window.addEventListener(u.OPEN_VIEWER, n); + } catch (e) { + console.debug?.(e); + } + }), I(() => { + try { + window.removeEventListener(u.OPEN_VIEWER, n); + } catch (e) { + console.debug?.(e); + } + try { + x(); + } catch (e) { + console.debug?.(e); + } + try { + t?.dispose?.(); + } catch (e) { + console.debug?.(e); + } + t = null; + }), (e, t) => (L(), H(T, null, [ + A(Rn, { onOpenClassic: t[0] ||= (e) => r(e.assets, e.index, e.mode) }), + A(Pe), + A(Ne), + A(Ue) + ], 64)); + } +}); +export { zn as default }; diff --git a/dist/chunks/ViewerPortal-wTimKJbx.js b/dist/chunks/ViewerPortal-wTimKJbx.js deleted file mode 100644 index a99eab93..00000000 --- a/dist/chunks/ViewerPortal-wTimKJbx.js +++ /dev/null @@ -1,917 +0,0 @@ -import { $t as e, P as t, a as n, g as r, i, x as a, y as o } from "./viewerRuntimeHosts-CW2DfHq_.js"; -import { at as s, m as c, mt as l, r as u, t as d } from "./events-cBMXVULQ.js"; -import { c as f, d as p, f as m, l as h, o as g, r as _, s as v, u as y } from "./viewerOpenRequest-_DqD1rXA.js"; -import { i as b, n as x, t as S, tt as C } from "./SidebarWorkflowSection-F3hoMYG1.js"; -import { i as w, r as T } from "./floatingViewerManager-CKeu6wKp.js"; -import { A as E, B as D, C as O, D as k, E as A, H as j, K as ee, N as M, O as N, R as te, S as ne, T as P, V as F, W as I, X as L, Y as R, b as z, dt as B, ft as V, it as H, j as U, k as W, ot as re, pt as G, q as K, rt as ie, ut as q, w as ae, z as oe } from "./mjr-primevue-3mpaVb1C.js"; -import { n as se, t as ce } from "./TagsEditor-qDIeaA8P.js"; -import { a as J, i as le, n as ue, r as de, t as fe } from "./StudioPlayer-DXSy5UA5.js"; -import { t as pe } from "./genInfo-B3LeL9TU.js"; -// ui/vue/components/viewer/FloatingViewerHost.vue -var me = /* @__PURE__ */ M({ - __name: "FloatingViewerHost", - setup(e) { - let t = H(null), n = null; - return D(() => { - n = i(t.value); - }), F(() => { - n?.(), n = null; - }), (e, n) => (j(), W("div", { - ref_key: "hostRef", - ref: t, - class: "mjr-viewer-runtime-host mjr-viewer-runtime-host--floating", - style: { - position: "fixed", - inset: "0", - "pointer-events": "none", - overflow: "visible" - } - }, null, 512)); - } -}), he = /* @__PURE__ */ M({ - __name: "ViewerOverlayHost", - setup(e) { - let t = H(null), r = null; - return D(() => { - r = n(t.value); - }), F(() => { - r?.(), r = null; - }), (e, n) => (j(), W("div", { - ref_key: "hostRef", - ref: t, - class: "mjr-viewer-runtime-host mjr-viewer-runtime-host--main", - style: { - position: "fixed", - inset: "0", - "pointer-events": "none", - overflow: "visible" - } - }, null, 512)); - } -}), ge = { - key: 0, - class: "mjr-context-menu-separator" -}, _e = { class: "mjr-context-menu-item-left" }, ve = { class: "mjr-context-menu-item-right" }, ye = { - key: 0, - class: "mjr-context-menu-hint" -}, Y = { - key: 1, - class: "mjr-context-menu-submenu-arrow" -}, be = { - key: 0, - class: "mjr-context-menu-separator" -}, xe = { class: "mjr-context-menu-item-left" }, Se = { - key: 0, - class: "mjr-context-menu-hint" -}, Ce = /* @__PURE__ */ M({ - __name: "ViewerContextMenu", - setup(e) { - let t = H(null), n = H(null), r = H(null), i = null, a = null, o = P(() => l(m.main, 10041)), s = P(() => l(m.submenu, 10042)), c = P(() => l(m.tags, 10043)); - function l(e, t) { - return { - position: "fixed", - left: `${Math.round(Number(e?.x) || 0)}px`, - top: `${Math.round(Number(e?.y) || 0)}px`, - display: "block", - zIndex: String(t) - }; - } - function u() { - i &&= (clearTimeout(i), null); - } - function d() { - u(), i = setTimeout(() => { - f(); - }, 180); - } - function p(e, t) { - if (!e?.open || !t) return; - let n = t.getBoundingClientRect(), r = Number(window.innerWidth || 0), i = Number(window.innerHeight || 0), a = Number(e.x) || 0, o = Number(e.y) || 0; - a + n.width > r && (a = Math.max(8, r - n.width - 10)), o + n.height > i && (o = Math.max(8, i - n.height - 10)), a < 8 && (a = 8), o < 8 && (o = 8), e.x = a, e.y = o; - } - async function h(e, t) { - await te(), p(e, t?.value || null); - } - function g(e) { - try { - e?.value?.querySelector?.(".mjr-context-menu-item:not([aria-disabled=\"true\"])")?.focus?.(); - } catch (e) { - console.debug?.(e); - } - } - function _(e, t) { - if (!Array.isArray(e?.submenu) || !e.submenu.length) { - f(); - return; - } - u(); - let n = (t?.currentTarget)?.getBoundingClientRect?.(); - y({ - x: Math.round((n?.right || m.main.x || 0) + 6), - y: Math.round((n?.top || m.main.y || 0) - 4), - items: e.submenu, - title: e.label || "" - }); - } - async function b(e, t, n = "main") { - if (e && e.type === "item" && !e.disabled) { - if (Array.isArray(e.submenu) && e.submenu.length) _(e, t); - else try { - await e.action?.(); - } catch (e) { - console.error("[ViewerContextMenu.vue] Action failed:", e); - } finally { - e.closeOnSelect === !1 ? n === "submenu" && f() : v(); - } - } - } - function x(e, t) { - Array.isArray(e?.submenu) && e.submenu.length ? _(e, t) : f(); - } - function S(e) { - Array.isArray(e?.submenu) && e.submenu.length && d(); - } - function C() { - u(); - } - function w() { - d(); - } - function T(e) { - let i = e?.target; - t.value?.contains?.(i) || n.value?.contains?.(i) || r.value?.contains?.(i) || v(); - } - function E(e) { - e?.key === "Escape" && v(); - } - function M() { - v(); - } - function ne(e) { - let t = e?.detail; - String(t?.source || "") !== "viewer" && v(); - } - function L(e) { - let t = m.tags.asset; - t && (t.tags = Array.isArray(e) ? [...e] : []); - } - function z(e) { - let t = Array.isArray(e?.tags) ? e.tags : []; - try { - m.tags.onChanged?.(t); - } catch (e) { - console.debug?.(e); - } - } - return K(() => m.main.open, async (e) => { - e && (await h(m.main, t), g(t)); - }), K(() => m.submenu.open, async (e) => { - e && (await h(m.submenu, n), g(n)); - }), K(() => m.tags.open, async (e) => { - e && await h(m.tags, r); - }), D(() => { - a = new AbortController(); - let e = { - capture: !0, - passive: !0, - signal: a.signal - }; - window.addEventListener("pointerdown", T, e), window.addEventListener("keydown", E, { - capture: !0, - signal: a.signal - }), window.addEventListener("scroll", M, e), window.addEventListener("wheel", M, e), window.addEventListener("resize", M, { - passive: !0, - signal: a.signal - }), window.addEventListener("mjr-close-all-menus", ne, { signal: a.signal }); - }), F(() => { - u(); - try { - a?.abort(); - } catch (e) { - console.debug?.(e); - } - a = null, v(); - }), (e, i) => { - let a = ee("MButton"); - return j(), k(ae, { to: "body" }, [ - q(m).main.open ? (j(), W("div", { - key: 0, - ref_key: "mainMenuRef", - ref: t, - class: "mjr-viewer-context-menu mjr-context-menu", - style: V(o.value), - role: "menu", - "aria-label": "Viewer context menu" - }, [(j(!0), W(O, null, I(q(m).main.items, (e) => (j(), W(O, { key: e.id }, [e.type === "separator" ? (j(), W("div", ge)) : (j(), k(a, { - key: 1, - type: "button", - class: B(["mjr-context-menu-item", { - "is-disabled": e.disabled, - "has-submenu": Array.isArray(e.submenu) && e.submenu.length - }]), - severity: "secondary", - text: "", - role: "menuitem", - "aria-disabled": e.disabled ? "true" : "false", - tabindex: e.disabled ? -1 : 0, - onClick: (t) => b(e, t), - onMouseenter: (t) => x(e, t), - onMouseleave: (t) => S(e) - }, { - default: R(() => [A("span", _e, [e.iconClass ? (j(), W("i", { - key: 0, - class: B(e.iconClass) - }, null, 2)) : N("", !0), A("span", null, G(e.label), 1)]), A("span", ve, [e.rightHint ? (j(), W("span", ye, G(e.rightHint), 1)) : N("", !0), Array.isArray(e.submenu) && e.submenu.length ? (j(), W("span", Y, " > ")) : N("", !0)])]), - _: 2 - }, 1032, [ - "class", - "aria-disabled", - "tabindex", - "onClick", - "onMouseenter", - "onMouseleave" - ]))], 64))), 128))], 4)) : N("", !0), - q(m).submenu.open ? (j(), W("div", { - key: 1, - ref_key: "submenuRef", - ref: n, - class: "mjr-viewer-rating-submenu mjr-context-menu", - style: V(s.value), - role: "menu", - "aria-label": "Viewer context submenu", - onMouseenter: C, - onMouseleave: w - }, [(j(!0), W(O, null, I(q(m).submenu.items, (e) => (j(), W(O, { key: e.id }, [e.type === "separator" ? (j(), W("div", be)) : (j(), k(a, { - key: 1, - type: "button", - class: B(["mjr-context-menu-item", { "is-disabled": e.disabled }]), - severity: "secondary", - text: "", - role: "menuitem", - "aria-disabled": e.disabled ? "true" : "false", - tabindex: e.disabled ? -1 : 0, - onClick: (t) => b(e, t, "submenu") - }, { - default: R(() => [A("span", xe, [e.iconClass ? (j(), W("i", { - key: 0, - class: B(e.iconClass) - }, null, 2)) : N("", !0), A("span", null, G(e.label), 1)]), e.rightHint ? (j(), W("span", Se, G(e.rightHint), 1)) : N("", !0)]), - _: 2 - }, 1032, [ - "class", - "aria-disabled", - "tabindex", - "onClick" - ]))], 64))), 128))], 36)) : N("", !0), - q(m).tags.open && q(m).tags.asset ? (j(), W("div", { - key: 2, - ref_key: "tagsPopoverRef", - ref: r, - class: "mjr-viewer-popover", - style: V(c.value) - }, [U(ce, { - asset: q(m).tags.asset, - "model-value": q(m).tags.asset?.tags || [], - "onUpdate:modelValue": L, - onTagsChange: z - }, null, 8, ["asset", "model-value"])], 4)) : N("", !0) - ]); - }; - } -}), X = /* @__PURE__ */ M({ - __name: "ViewerContextMenuPortal", - setup(e) { - let t = H(""), n = P(() => h(t.value)); - return D(() => { - t.value = g(); - }), F(() => { - p(t.value), t.value = ""; - }), (e, t) => n.value ? (j(), k(Ce, { key: 0 })) : N("", !0); - } -}), Z = ie({ - open: !1, - assets: [], - index: 0, - session: 0 -}); -function we(e, t = 0) { - let n = (Array.isArray(e) ? e : []).filter(Boolean); - return n.length ? (Z.assets = n, Z.index = Math.max(0, Math.min(Number(t) || 0, n.length - 1)), Z.session += 1, Z.open = !0, !0) : !1; -} -function Te() { - Z.open = !1; -} -function Q(e) { - let t = Z.assets.length; - t && (Z.index = (Math.floor(e) % t + t) % t); -} -function $(e) { - Q(Z.index + e); -} -function Ee(e, t, n = "") { - let r = String(n || "").trim().toLowerCase(); - if (r === "ab" || r === "sidebyside") return !1; - try { - if (C()?.viewer?.classic === !0) return !1; - } catch (e) { - console.debug?.(e); - } - let i = Array.isArray(e) ? e : [], a = i[Math.max(0, Math.min(Number(t) || 0, i.length - 1))]; - return !!a && J(a) !== "model3d"; -} -// ui/vue/components/viewer/studio/StudioImageStage.vue?vue&type=script&setup=true&lang.ts -var De = ["src", "alt"], Oe = { - key: 0, - class: "mjr-studio-stage__error" -}, ke = .05, Ae = 32, je = /* @__PURE__ */ M({ - __name: "StudioImageStage", - props: { - src: {}, - alt: {}, - checker: { type: Boolean } - }, - emits: ["zoom", "loaded"], - setup(e, { expose: t, emit: n }) { - let r = e, i = n, a = H(null), o = H({ - w: 0, - h: 0 - }), s = H(1), c = H({ - x: 0, - y: 0 - }), l = H(!0), u = H(!1), d = H(!1), f = null, p = null; - function m() { - let e = a.value?.getBoundingClientRect(); - return { - w: e?.width || 0, - h: e?.height || 0 - }; - } - function h() { - let { w: e, h: t } = m(); - return !o.value.w || !o.value.h || !e || !t ? 1 : Math.min(e / o.value.w, t / o.value.h); - } - function g() { - l.value = !0, s.value = h(), c.value = { - x: 0, - y: 0 - }, i("zoom", s.value); - } - function _(e, t) { - let n = Math.max(ke, Math.min(Ae, e)), { w: r, h: a } = m(), o = t ? t.x - r / 2 : 0, u = t ? t.y - a / 2 : 0, d = n / s.value; - c.value = { - x: o - (o - c.value.x) * d, - y: u - (u - c.value.y) * d - }, s.value = n, l.value = !1, i("zoom", s.value); - } - function v(e) { - _(s.value * e); - } - function y() { - _(1), c.value = { - x: 0, - y: 0 - }; - } - function b() { - l.value ? y() : g(); - } - function x(e) { - e.preventDefault(); - let t = a.value?.getBoundingClientRect(), n = Math.exp(-e.deltaY * .0015); - _(s.value * n, t ? { - x: e.clientX - t.left, - y: e.clientY - t.top - } : void 0); - } - function S(e) { - e.button === 0 && (f = { - x: e.clientX, - y: e.clientY, - ox: c.value.x, - oy: c.value.y, - id: e.pointerId - }, d.value = !0, e.currentTarget?.setPointerCapture?.(e.pointerId)); - } - function C(e) { - f && (c.value = { - x: f.ox + e.clientX - f.x, - y: f.oy + e.clientY - f.y - }, Math.abs(e.clientX - f.x) + Math.abs(e.clientY - f.y) > 2 && (l.value = !1)); - } - function w(e) { - f && e.currentTarget?.releasePointerCapture?.(f.id), f = null, d.value = !1; - } - function T(e) { - let t = e.target; - o.value = { - w: t.naturalWidth, - h: t.naturalHeight - }, u.value = !1, i("loaded", { - width: t.naturalWidth, - height: t.naturalHeight - }), g(); - } - let E = P(() => ({ - width: `${o.value.w}px`, - height: `${o.value.h}px`, - transform: `translate(-50%, -50%) translate(${c.value.x}px, ${c.value.y}px) scale(${s.value})`, - imageRendering: s.value >= 2 ? "pixelated" : "auto" - })); - return K(() => r.src, () => { - o.value = { - w: 0, - h: 0 - }, u.value = !1; - }), D(() => { - try { - p = new ResizeObserver(() => { - l.value && g(); - }), a.value && p.observe(a.value); - } catch (e) { - console.debug?.(e); - } - }), oe(() => p?.disconnect()), t({ - zoomBy: v, - fit: g, - actualSize: y, - toggleFitActual: b - }), (t, n) => (j(), W("div", { - ref_key: "stage", - ref: a, - class: B(["mjr-studio-stage", { - "is-checker": e.checker, - "is-dragging": d.value - }]), - onWheel: x, - onPointerdown: S, - onPointermove: C, - onPointerup: w, - onPointercancel: w, - onDblclick: b - }, [L((j(), W("img", { - key: e.src, - class: "mjr-studio-stage__img", - src: e.src, - alt: e.alt || "", - draggable: "false", - style: V(E.value), - onLoad: T, - onError: n[0] ||= (e) => u.value = !0 - }, null, 44, De)), [[z, !u.value]]), u.value ? (j(), W("div", Oe, [n[1] ||= A("i", { - class: "pi pi-image", - "aria-hidden": "true" - }, null, -1), A("span", null, G(e.alt), 1)])) : N("", !0)], 34)); - } -}), Me = ["aria-label"], Ne = { class: "mjr-studio__header" }, Pe = { class: "mjr-studio__nav" }, Fe = { class: "mjr-studio__counter" }, Ie = { class: "mjr-studio__title" }, Le = ["title"], Re = { class: "mjr-studio__summary" }, ze = { class: "mjr-studio__actions" }, Be = ["title"], Ve = { class: "mjr-studio__body" }, He = { class: "mjr-studio__stage" }, Ue = { - key: 2, - class: "mjr-studio__unsupported" -}, We = { class: "mjr-studio__review" }, Ge = { class: "mjr-studio__review-row" }, Ke = { class: "mjr-studio__label" }, qe = { - class: "mjr-studio__tabs", - role: "tablist" -}, Je = { class: "mjr-studio__tab-body" }, Ye = ["aria-label"], Xe = ["src"], Ze = { - key: 1, - class: "pi pi-file", - "aria-hidden": "true" -}, Qe = { - key: 2, - class: "pi pi-play mjr-studio__thumb-badge", - "aria-hidden": "true" -}, $e = /* @__PURE__ */ M({ - __name: "StudioViewer", - emits: ["open-classic"], - setup(n, { emit: i }) { - let u = i, f = H(null), p = H(null), m = H(null), h = H(!0), g = H("generation"), _ = H(!1), v = H(1), y = re(null), C = re(null), w = null, T = P(() => Z.assets[Z.index] ?? null), D = P(() => y.value ?? T.value), M = P(() => J(T.value)), F = P(() => T.value ? s(T.value) : ""), L = P(() => Z.assets.length), z = P(() => ue(D.value)), V = P(() => le(D.value, C.value)), ie = P(() => Number(C.value?.frame_count) || null), me = P(() => Number(D.value?.rating) || 0), he = P(() => Array.isArray(D.value?.tags) ? D.value.tags : []), ge = P(() => { - let { start: e, end: t } = de(L.value, Z.index); - return Z.assets.slice(e, t).map((t, n) => ({ - asset: t, - index: e + n - })); - }), _e = P(() => L.value >= 2); - async function ve(e) { - if (w?.abort(), y.value = null, C.value = null, !e) return; - let t = typeof AbortController < "u" ? new AbortController() : null; - w = t; - try { - let n = await pe(e, { - getAssetMetadata: r, - getFileMetadataScoped: o, - signal: t?.signal - }); - w === t && T.value === e && (y.value = n && typeof n == "object" ? n : e); - } catch (e) { - console.debug?.(e); - } - let n = J(e); - if ((n === "video" || n === "audio") && e?.id != null) try { - let n = await a(e.id, t ? { signal: t.signal } : {}); - w === t && n?.ok && (C.value = n.data || null); - } catch (e) { - console.debug?.(e); - } - } - K(T, (e) => void ve(e), { immediate: !0 }), K(() => Z.open, async (e) => { - e ? (await te(), f.value?.focus?.(), window.addEventListener("keydown", X, !0)) : (window.removeEventListener("keydown", X, !0), m.value?.release?.(), w?.abort(), document.fullscreenElement && f.value?.contains(document.fullscreenElement) && document.exitFullscreen?.()); - }, { immediate: !0 }), oe(() => { - window.removeEventListener("keydown", X, !0), w?.abort(); - }); - function ye() { - Te(); - } - function Y(e = "") { - let t = { - assets: Z.assets.slice(), - index: Z.index, - mode: e - }; - Te(), u("open-classic", t); - } - function be() { - document.fullscreenElement ? document.exitFullscreen?.() : f.value?.requestFullscreen?.(); - } - function xe() { - if (!F.value) return; - let e = document.createElement("a"); - e.href = F.value, e.download = String(T.value?.filename || ""), e.click(); - } - async function Se(n) { - let r = T.value; - if (!r) return; - let i = Math.max(0, Math.min(5, n)), a = await t(r, i); - a?.ok ? (r.rating = i, y.value = y.value ? { - ...y.value, - rating: i - } : r, window.dispatchEvent(new CustomEvent(d, { detail: { - assetId: r.id == null ? "" : String(r.id), - rating: i - } }))) : e(a?.error || c("toast.ratingUpdateFailed", "Rating update failed"), "error"); - } - function Ce(e) { - return !!e?.closest?.("input, textarea, select, [contenteditable='true']"); - } - function X(e) { - if (!Z.open) return; - if (Ce(e.target)) { - e.key === "Escape" && e.target?.blur?.(); - return; - } - let t = M.value === "video" || M.value === "audio", n = e.key, r = !0; - n === "Escape" ? ye() : n === "ArrowLeft" && !e.shiftKey ? $(-1) : n === "ArrowRight" && !e.shiftKey ? $(1) : n === "ArrowLeft" && e.shiftKey && t ? m.value?.seekBy?.(-5) : n === "ArrowRight" && e.shiftKey && t ? m.value?.seekBy?.(5) : n === "Home" ? Q(0) : n === "End" ? Q(L.value - 1) : n === " " && t ? m.value?.togglePlay?.() : n === "," && t ? m.value?.stepFrame?.(-1) : n === "." && t ? m.value?.stepFrame?.(1) : (n === "i" || n === "I") && t ? m.value?.setLoopA?.() : (n === "o" || n === "O") && t ? m.value?.setLoopB?.() : (n === "u" || n === "U") && t ? m.value?.clearLoop?.() : (n === "m" || n === "M") && t ? m.value?.toggleMute?.() : n === "]" && t ? m.value?.cycleRate?.(1) : n === "[" && t ? m.value?.cycleRate?.(-1) : n === "Tab" ? h.value = !h.value : n === "f" || n === "F" ? be() : (n === "+" || n === "=") && M.value === "image" ? p.value?.zoomBy?.(1.25) : n === "-" && M.value === "image" ? p.value?.zoomBy?.(.8) : n === "0" && M.value === "image" && e.altKey ? p.value?.fit?.() : /^[0-5]$/.test(n) && !e.ctrlKey && !e.metaKey && !e.altKey ? Se(Number(n)) : (n === "c" || n === "C") && _e.value ? Y("ab") : r = !1, r && (e.preventDefault(), e.stopPropagation(), e.stopImmediatePropagation?.()); - } - function we(e) { - return l(e, 192) || ""; - } - return (e, t) => { - let n = ee("MButton"); - return j(), k(ae, { to: "body" }, [q(Z).open ? (j(), W("div", { - key: 0, - ref_key: "overlay", - ref: f, - class: B(["mjr-assets-manager mjr-studio", { "is-inspector-closed": !h.value }]), - role: "dialog", - "aria-modal": "true", - "aria-label": q(c)("viewer.studio.title", "Viewer"), - tabindex: "-1" - }, [ - A("header", Ne, [ - A("div", Pe, [ - U(n, { - type: "button", - class: "mjr-studio-btn", - title: q(c)("viewer.studio.prev", "Previous (←)"), - disabled: L.value < 2, - onClick: t[0] ||= (e) => q($)(-1) - }, { - default: R(() => [...t[14] ||= [A("i", { - class: "pi pi-chevron-left", - "aria-hidden": "true" - }, null, -1)]]), - _: 1 - }, 8, ["title", "disabled"]), - A("span", Fe, G(q(Z).index + 1) + " / " + G(L.value), 1), - U(n, { - type: "button", - class: "mjr-studio-btn", - title: q(c)("viewer.studio.next", "Next (→)"), - disabled: L.value < 2, - onClick: t[1] ||= (e) => q($)(1) - }, { - default: R(() => [...t[15] ||= [A("i", { - class: "pi pi-chevron-right", - "aria-hidden": "true" - }, null, -1)]]), - _: 1 - }, 8, ["title", "disabled"]) - ]), - A("div", Ie, [A("span", { - class: "mjr-studio__filename", - title: D.value?.filepath || D.value?.filename - }, G(D.value?.filename), 9, Le), A("span", Re, G(z.value), 1)]), - A("div", ze, [ - M.value === "image" ? (j(), W(O, { key: 0 }, [ - A("span", { - class: "mjr-studio-chip", - title: q(c)("viewer.studio.zoomHint", "Wheel to zoom, double-click for fit / 100 %") - }, G(Math.round(v.value * 100)) + "%", 9, Be), - U(n, { - type: "button", - class: "mjr-studio-btn", - title: q(c)("viewer.studio.fit", "Fit"), - onClick: t[2] ||= (e) => p.value?.fit() - }, { - default: R(() => [...t[16] ||= [A("i", { - class: "pi pi-arrows-alt", - "aria-hidden": "true" - }, null, -1)]]), - _: 1 - }, 8, ["title"]), - U(n, { - type: "button", - class: "mjr-studio-btn is-text", - title: q(c)("viewer.studio.actualSize", "Actual size"), - onClick: t[3] ||= (e) => p.value?.actualSize() - }, { - default: R(() => [...t[17] ||= [E("1:1", -1)]]), - _: 1 - }, 8, ["title"]), - U(n, { - type: "button", - class: B(["mjr-studio-btn", { "is-on": _.value }]), - title: q(c)("viewer.studio.checker", "Transparency checkerboard"), - onClick: t[4] ||= (e) => _.value = !_.value - }, { - default: R(() => [...t[18] ||= [A("i", { - class: "pi pi-th-large", - "aria-hidden": "true" - }, null, -1)]]), - _: 1 - }, 8, ["class", "title"]) - ], 64)) : N("", !0), - _e.value ? (j(), k(n, { - key: 1, - type: "button", - class: "mjr-studio-btn", - title: q(c)("viewer.studio.compare", "Compare with next (C)"), - onClick: t[5] ||= (e) => Y("ab") - }, { - default: R(() => [...t[19] ||= [A("i", { - class: "pi pi-clone", - "aria-hidden": "true" - }, null, -1)]]), - _: 1 - }, 8, ["title"])) : N("", !0), - U(n, { - type: "button", - class: "mjr-studio-btn", - title: q(c)("viewer.studio.download", "Download"), - onClick: xe - }, { - default: R(() => [...t[20] ||= [A("i", { - class: "pi pi-download", - "aria-hidden": "true" - }, null, -1)]]), - _: 1 - }, 8, ["title"]), - U(n, { - type: "button", - class: "mjr-studio-btn", - title: q(c)("viewer.studio.classic", "Open in classic viewer (tools: scopes, loupe, grading)"), - onClick: t[6] ||= (e) => Y("") - }, { - default: R(() => [...t[21] ||= [A("i", { - class: "pi pi-sliders-h", - "aria-hidden": "true" - }, null, -1)]]), - _: 1 - }, 8, ["title"]), - U(n, { - type: "button", - class: B(["mjr-studio-btn", { "is-on": h.value }]), - title: q(c)("viewer.studio.inspector", "Generation info (Tab)"), - onClick: t[7] ||= (e) => h.value = !h.value - }, { - default: R(() => [...t[22] ||= [A("i", { - class: "pi pi-info-circle", - "aria-hidden": "true" - }, null, -1)]]), - _: 1 - }, 8, ["class", "title"]), - U(n, { - type: "button", - class: "mjr-studio-btn", - title: q(c)("viewer.studio.fullscreen", "Fullscreen (F)"), - onClick: be - }, { - default: R(() => [...t[23] ||= [A("i", { - class: "pi pi-window-maximize", - "aria-hidden": "true" - }, null, -1)]]), - _: 1 - }, 8, ["title"]), - U(n, { - type: "button", - class: "mjr-studio-btn is-close", - title: q(c)("viewer.studio.close", "Close (Esc)"), - onClick: ye - }, { - default: R(() => [...t[24] ||= [A("i", { - class: "pi pi-times", - "aria-hidden": "true" - }, null, -1)]]), - _: 1 - }, 8, ["title"]) - ]) - ]), - A("main", Ve, [A("section", He, [M.value === "image" ? (j(), k(je, { - ref_key: "imageStage", - ref: p, - key: `img:${F.value}`, - src: F.value, - alt: T.value?.filename, - checker: _.value, - onZoom: t[8] ||= (e) => v.value = e - }, null, 8, [ - "src", - "alt", - "checker" - ])) : M.value === "video" || M.value === "audio" ? (j(), k(fe, { - ref_key: "player", - ref: m, - key: `media:${F.value}`, - src: F.value, - kind: M.value, - fps: V.value, - "frame-count": ie.value, - filename: T.value?.filename - }, null, 8, [ - "src", - "kind", - "fps", - "frame-count", - "filename" - ])) : (j(), W("div", Ue, [ - t[25] ||= A("i", { - class: "pi pi-file", - "aria-hidden": "true" - }, null, -1), - A("span", null, G(q(c)("viewer.studio.unsupported", "No preview for this file type.")), 1), - U(n, { - type: "button", - class: "mjr-studio-btn is-text", - onClick: t[9] ||= (e) => Y("") - }, { - default: R(() => [E(G(q(c)("viewer.studio.classicShort", "Classic viewer")), 1)]), - _: 1 - }) - ]))]), h.value && D.value ? (j(), W("aside", { - key: 0, - class: "mjr-studio__inspector", - onKeydown: t[13] ||= ne(() => {}, ["stop"]) - }, [ - A("div", We, [A("div", Ge, [A("span", Ke, G(q(c)("sidebar.rating", "Rating")), 1), (j(), k(se, { - key: `r:${D.value.id}`, - asset: D.value, - "model-value": me.value, - size: 40 - }, null, 8, ["asset", "model-value"]))]), (j(), k(ce, { - key: `t:${D.value.id}`, - asset: D.value, - "model-value": he.value - }, null, 8, ["asset", "model-value"]))]), - A("nav", qe, [ - U(n, { - type: "button", - role: "tab", - class: B({ "is-active": g.value === "generation" }), - onClick: t[10] ||= (e) => g.value = "generation" - }, { - default: R(() => [E(G(q(c)("viewer.studio.tabGeneration", "Generation")), 1)]), - _: 1 - }, 8, ["class"]), - U(n, { - type: "button", - role: "tab", - class: B({ "is-active": g.value === "workflow" }), - onClick: t[11] ||= (e) => g.value = "workflow" - }, { - default: R(() => [E(G(q(c)("viewer.studio.tabWorkflow", "Workflow")), 1)]), - _: 1 - }, 8, ["class"]), - U(n, { - type: "button", - role: "tab", - class: B({ "is-active": g.value === "file" }), - onClick: t[12] ||= (e) => g.value = "file" - }, { - default: R(() => [E(G(q(c)("viewer.studio.tabFile", "File")), 1)]), - _: 1 - }, 8, ["class"]) - ]), - A("div", Je, [g.value === "generation" ? (j(), k(x, { - key: `g:${D.value.id}`, - asset: D.value - }, null, 8, ["asset"])) : g.value === "workflow" ? (j(), k(S, { - key: `w:${D.value.id}`, - asset: D.value - }, null, 8, ["asset"])) : (j(), k(b, { - key: `f:${D.value.id}`, - asset: D.value - }, null, 8, ["asset"]))]) - ], 32)) : N("", !0)]), - L.value > 1 ? (j(), W("footer", { - key: 0, - class: "mjr-studio__filmstrip", - role: "listbox", - "aria-label": q(c)("viewer.studio.filmstrip", "Filmstrip") - }, [(j(!0), W(O, null, I(ge.value, (e) => (j(), k(n, { - key: `${e.index}:${e.asset?.id ?? e.asset?.filename}`, - type: "button", - role: "option", - class: B(["mjr-studio__thumb", { "is-current": e.index === q(Z).index }]), - "aria-selected": e.index === q(Z).index, - title: e.asset?.filename, - onClick: (t) => q(Q)(e.index) - }, { - default: R(() => [we(e.asset) ? (j(), W("img", { - key: 0, - src: we(e.asset), - alt: "", - loading: "lazy", - draggable: "false" - }, null, 8, Xe)) : (j(), W("i", Ze)), q(J)(e.asset) === "video" ? (j(), W("i", Qe)) : N("", !0)]), - _: 2 - }, 1032, [ - "class", - "aria-selected", - "title", - "onClick" - ]))), 128))], 8, Ye)) : N("", !0) - ], 10, Me)) : N("", !0)]); - }; - } -}), et = /* @__PURE__ */ M({ - __name: "ViewerPortal", - setup(e) { - let t = null; - function n(e) { - let n = e?.detail || {}, i = Array.isArray(n?.assets) ? n.assets.filter(Boolean) : n?.asset ? [n.asset] : []; - if (!i.length) return; - let a = Math.max(0, Math.min(Number(n?.index) || 0, i.length - 1)), o = String(n?.mode || "").trim().toLowerCase(); - if (Ee(i, a, o) && we(i, a)) { - try { - t?.close?.(); - } catch (e) { - console.debug?.(e); - } - n.handled = !0; - } else r(i, a, o, n); - } - function r(e, n, r, i = null) { - Te(); - try { - t ||= _(), t.open?.(e, n), (r === "ab" || r === "sidebyside") && t.setMode?.(r), i && (i.handled = !0); - } catch (e) { - console.debug?.(e); - } - } - return D(() => { - try { - T(); - } catch (e) { - console.debug?.(e); - } - try { - t = _(); - } catch (e) { - console.debug?.(e); - } - try { - window.addEventListener(u.OPEN_VIEWER, n); - } catch (e) { - console.debug?.(e); - } - }), F(() => { - try { - window.removeEventListener(u.OPEN_VIEWER, n); - } catch (e) { - console.debug?.(e); - } - try { - w(); - } catch (e) { - console.debug?.(e); - } - try { - t?.dispose?.(); - } catch (e) { - console.debug?.(e); - } - t = null; - }), (e, t) => (j(), W(O, null, [ - U($e, { onOpenClassic: t[0] ||= (e) => r(e.assets, e.index, e.mode) }), - U(he), - U(me), - U(X) - ], 64)); - } -}); -export { et as default }; diff --git a/dist/chunks/events-cBMXVULQ.js b/dist/chunks/events-CttACGx4.js similarity index 96% rename from dist/chunks/events-cBMXVULQ.js rename to dist/chunks/events-CttACGx4.js index f4344365..0963e902 100644 --- a/dist/chunks/events-cBMXVULQ.js +++ b/dist/chunks/events-CttACGx4.js @@ -2396,7 +2396,71 @@ var W = { "hotkey.details": "Toggle details (D)", "hotkey.delete": "Delete (Del)", "hotkey.viewer": "Open viewer (Enter)", - "hotkey.escape": "Close (Esc)" + "hotkey.escape": "Close (Esc)", + "viewer.studio.abLoop": "A-B loop (I / O, U to clear)", + "viewer.studio.actualSize": "Actual size", + "viewer.studio.aspect": "Aspect ratio mask", + "viewer.studio.channels": "Channels", + "viewer.studio.checker": "Transparency checkerboard", + "viewer.studio.classic": "Open in the classic viewer", + "viewer.studio.classicShort": "Classic viewer", + "viewer.studio.clearLoop": "Clear A-B loop", + "viewer.studio.close": "Close (Esc)", + "viewer.studio.compare": "Compare A/B (C)", + "viewer.studio.compareTool": "Compare A/B (C)", + "viewer.studio.copied": "Copied to clipboard", + "viewer.studio.copy": "Copy image / frame to clipboard", + "viewer.studio.copyFailed": "Could not copy this image", + "viewer.studio.download": "Download", + "viewer.studio.ev": "Exposure", + "viewer.studio.exportFrame": "Save this frame as PNG", + "viewer.studio.exposure": "Exposure / gamma", + "viewer.studio.filmstrip": "Filmstrip", + "viewer.studio.fit": "Fit", + "viewer.studio.frame": "Frame", + "viewer.studio.fullscreen": "Fullscreen (F)", + "viewer.studio.gamma": "Gamma", + "viewer.studio.grid": "Guides (G)", + "viewer.studio.histogram": "Histogram", + "viewer.studio.inspector": "Generation info (Tab)", + "viewer.studio.loop": "Loop", + "viewer.studio.loupe": "Loupe (L) - right-click for settings", + "viewer.studio.loupeTitle": "Loupe", + "viewer.studio.magnification": "Magnification", + "viewer.studio.mediaError": "This file cannot be played by the browser.", + "viewer.studio.mute": "Mute (M)", + "viewer.studio.next": "Next (→)", + "viewer.studio.nextB": "Next B", + "viewer.studio.nextFrame": "Next frame (.)", + "viewer.studio.opacity": "Opacity", + "viewer.studio.pinB": "Use the current asset as B (B)", + "viewer.studio.pinBShort": "Set B", + "viewer.studio.play": "Play", + "viewer.studio.playPause": "Play / pause (Space)", + "viewer.studio.prev": "Previous (←)", + "viewer.studio.prevB": "Previous B", + "viewer.studio.prevFrame": "Previous frame (,)", + "viewer.studio.probe": "Pixel probe (P)", + "viewer.studio.reset": "Reset", + "viewer.studio.resetTools": "Reset all tools (R)", + "viewer.studio.scopes": "Scopes (S)", + "viewer.studio.seek": "Seek", + "viewer.studio.size": "Size", + "viewer.studio.speed": "Speed ([ / ])", + "viewer.studio.swap": "Swap A and B (X)", + "viewer.studio.swapShort": "Swap", + "viewer.studio.tabFile": "File", + "viewer.studio.tabGeneration": "Generation", + "viewer.studio.tabWorkflow": "Workflow", + "viewer.studio.threshold": "Threshold", + "viewer.studio.title": "Viewer", + "viewer.studio.tools": "Review tools", + "viewer.studio.unsupported": "No preview for this file type.", + "viewer.studio.volume": "Volume", + "viewer.studio.waveform": "Waveform", + "viewer.studio.wipe": "Wipe", + "viewer.studio.zebra": "Zebra highlights (Z)", + "viewer.studio.zoomHint": "Wheel to zoom, double-click for fit / 100 %" }, "fr-FR": { "tab.output": "Sortie", @@ -2892,7 +2956,71 @@ var W = { "msg.nightlyUpdateDetail": "Une build nightly plus recente est disponible. Télécharger : https://github.com/MajoorWaldi/ComfyUI-Majoor-AssetsManager/releases/tag/nightly", "msg.newVersionTitle": "Mise à jour disponible", "msg.newVersionDetail": "La version {latest} est disponible. Version installée : {current}.", - "tooltip.starGithub": "Ouvrir GitHub et mettre une etoile" + "tooltip.starGithub": "Ouvrir GitHub et mettre une etoile", + "viewer.studio.abLoop": "Boucle A-B (I / O, U pour effacer)", + "viewer.studio.actualSize": "Taille réelle", + "viewer.studio.aspect": "Masque de format", + "viewer.studio.channels": "Canaux", + "viewer.studio.checker": "Damier de transparence", + "viewer.studio.classic": "Ouvrir dans le viewer classique", + "viewer.studio.classicShort": "Viewer classique", + "viewer.studio.clearLoop": "Effacer la boucle A-B", + "viewer.studio.close": "Fermer (Échap)", + "viewer.studio.compare": "Comparer A/B (C)", + "viewer.studio.compareTool": "Comparer A/B (C)", + "viewer.studio.copied": "Copié dans le presse-papiers", + "viewer.studio.copy": "Copier l'image / la frame", + "viewer.studio.copyFailed": "Impossible de copier cette image", + "viewer.studio.download": "Télécharger", + "viewer.studio.ev": "Exposition", + "viewer.studio.exportFrame": "Enregistrer cette frame en PNG", + "viewer.studio.exposure": "Exposition / gamma", + "viewer.studio.filmstrip": "Pellicule", + "viewer.studio.fit": "Ajuster", + "viewer.studio.frame": "Frame", + "viewer.studio.fullscreen": "Plein écran (F)", + "viewer.studio.gamma": "Gamma", + "viewer.studio.grid": "Guides (G)", + "viewer.studio.histogram": "Histogramme", + "viewer.studio.inspector": "Infos de génération (Tab)", + "viewer.studio.loop": "Boucle", + "viewer.studio.loupe": "Loupe (L) - clic droit pour les réglages", + "viewer.studio.loupeTitle": "Loupe", + "viewer.studio.magnification": "Grossissement", + "viewer.studio.mediaError": "Ce fichier ne peut pas être lu par le navigateur.", + "viewer.studio.mute": "Muet (M)", + "viewer.studio.next": "Suivant (→)", + "viewer.studio.nextB": "B suivant", + "viewer.studio.nextFrame": "Frame suivante (.)", + "viewer.studio.opacity": "Opacité", + "viewer.studio.pinB": "Utiliser l'asset courant comme B (B)", + "viewer.studio.pinBShort": "Définir B", + "viewer.studio.play": "Lecture", + "viewer.studio.playPause": "Lecture / pause (Espace)", + "viewer.studio.prev": "Précédent (←)", + "viewer.studio.prevB": "B précédent", + "viewer.studio.prevFrame": "Frame précédente (,)", + "viewer.studio.probe": "Pipette (P)", + "viewer.studio.reset": "Réinitialiser", + "viewer.studio.resetTools": "Réinitialiser les outils (R)", + "viewer.studio.scopes": "Scopes (S)", + "viewer.studio.seek": "Position", + "viewer.studio.size": "Taille", + "viewer.studio.speed": "Vitesse ([ / ])", + "viewer.studio.swap": "Inverser A et B (X)", + "viewer.studio.swapShort": "Inverser", + "viewer.studio.tabFile": "Fichier", + "viewer.studio.tabGeneration": "Génération", + "viewer.studio.tabWorkflow": "Workflow", + "viewer.studio.threshold": "Seuil", + "viewer.studio.title": "Viewer", + "viewer.studio.tools": "Outils de revue", + "viewer.studio.unsupported": "Pas d'aperçu pour ce type de fichier.", + "viewer.studio.volume": "Volume", + "viewer.studio.waveform": "Waveform", + "viewer.studio.wipe": "Volet", + "viewer.studio.zebra": "Zébras (Z)", + "viewer.studio.zoomHint": "Molette pour zoomer, double-clic pour ajuster / 100 %" } }, Mt = Object.freeze({ "en-US": "English", diff --git a/dist/chunks/floatingViewerManager-CKeu6wKp.js b/dist/chunks/floatingViewerManager-CLgIT9uN.js similarity index 99% rename from dist/chunks/floatingViewerManager-CKeu6wKp.js rename to dist/chunks/floatingViewerManager-CLgIT9uN.js index d6b05379..d34c6e4b 100644 --- a/dist/chunks/floatingViewerManager-CKeu6wKp.js +++ b/dist/chunks/floatingViewerManager-CLgIT9uN.js @@ -1,6 +1,6 @@ import { t as e } from "./rolldown-runtime-CGnMp29N.js"; -import { _ as t, d as n, o as r, s as i, t as a } from "./viewerRuntimeHosts-CW2DfHq_.js"; -import { B as o, o as s, r as c } from "./events-cBMXVULQ.js"; +import { _ as t, d as n, o as r, s as i, t as a } from "./viewerRuntimeHosts-XPTU8ZhU.js"; +import { B as o, o as s, r as c } from "./events-CttACGx4.js"; // ui/features/panel/panelRuntimeRefs.ts var l = null; function u(e) { @@ -96,7 +96,7 @@ var ne = /* @__PURE__ */ e({ teardownFloatingViewerManager: () => Te }), _ = null, v = null; async function re() { - return _ || (v ||= import("./FloatingViewer-DaVFZWfj.js").then((e) => (_ = e.FloatingViewer, _)), v); + return _ || (v ||= import("./FloatingViewer-BWnwwSd7.js").then((e) => (_ = e.FloatingViewer, _)), v); } var y = null, b = null; async function ie() { diff --git a/dist/chunks/genInfo-B3LeL9TU.js b/dist/chunks/genInfo-B9wv7JDq.js similarity index 91% rename from dist/chunks/genInfo-B3LeL9TU.js rename to dist/chunks/genInfo-B9wv7JDq.js index 668b75dd..20bc3c68 100644 --- a/dist/chunks/genInfo-B3LeL9TU.js +++ b/dist/chunks/genInfo-B9wv7JDq.js @@ -1,8 +1,8 @@ import { t as e } from "./rolldown-runtime-CGnMp29N.js"; -import { m as t, o as n } from "./events-cBMXVULQ.js"; -import { v as r } from "./viewerOpenRequest-_DqD1rXA.js"; -import { i, n as a, r as o, t as s, u as c } from "./SidebarWorkflowSection-F3hoMYG1.js"; -import { D as l, E as u, H as d, N as f, O as p, T as m, ft as h, k as g, pt as _, ut as v } from "./mjr-primevue-3mpaVb1C.js"; +import { m as t, o as n } from "./events-CttACGx4.js"; +import { v as r } from "./viewerOpenRequest-CZXk8yvU.js"; +import { i, n as a, r as o, t as s, u as c } from "./SidebarWorkflowSection-DrSf3i6L.js"; +import { D as l, E as u, O as d, P as f, T as p, W as m, gt as h, ht as g, k as _, pt as v } from "./mjr-primevue-C07IsEdU.js"; // ui/vue/components/viewer/ViewerMetadataBlock.vue?vue&type=script&setup=true&lang.ts var y = { style: { display: "flex", @@ -157,7 +157,7 @@ var y = { style: { function I() { typeof r.onRetry == "function" && r.onRetry(); } - let L = m(() => c(r.asset)), R = m(() => o(r.asset)), z = m(() => R.value.kind !== "empty"), B = m(() => P(r.asset)), V = m(() => n.WORKFLOW_MINIMAP_ENABLED !== !1 && N(r.asset)), H = m(() => L.value && typeof L.value == "object" && L.value.kind === "fetch_error"), U = m(() => F(r.asset?.metadata_raw)), W = m(() => !r.loading && !H.value && !B.value && !z.value && !V.value), G = m(() => { + let L = p(() => c(r.asset)), R = p(() => o(r.asset)), z = p(() => R.value.kind !== "empty"), B = p(() => P(r.asset)), V = p(() => n.WORKFLOW_MINIMAP_ENABLED !== !1 && N(r.asset)), H = p(() => L.value && typeof L.value == "object" && L.value.kind === "fetch_error"), U = p(() => F(r.asset?.metadata_raw)), W = p(() => !r.loading && !H.value && !B.value && !z.value && !V.value), G = p(() => { if (!H.value) return ""; let e = String(L.value?.message || L.value?.error || "Failed to load generation data."), n = String(L.value?.code || L.value?.stage || "").trim(); return n ? t("viewer.metadataErrorWithCode", "{message}\n\nCode: {code}\nClick to retry.", { @@ -165,12 +165,12 @@ var y = { style: { code: n }) : t("viewer.metadataErrorRetry", "{message}\n\nClick to retry.", { message: e }); }); - return (e, n) => (d(), g("div", y, [ - r.title ? (d(), g("div", b, _(r.title), 1)) : p("", !0), - r.loading ? (d(), g("div", x, [u("div", S, _(v(t)("status.loading", "Loading")), 1), u("div", C, _(v(t)("viewer.loadingGenerationData", "Loading generation data...")), 1)])) : p("", !0), - H.value ? (d(), g("div", { + return (e, n) => (m(), _("div", y, [ + r.title ? (m(), _("div", b, h(r.title), 1)) : d("", !0), + r.loading ? (m(), _("div", x, [u("div", S, h(v(t)("status.loading", "Loading")), 1), u("div", C, h(v(t)("viewer.loadingGenerationData", "Loading generation data...")), 1)])) : d("", !0), + H.value ? (m(), _("div", { key: 2, - style: h([{ + style: g([{ padding: "10px 12px", "border-radius": "10px", border: "1px solid rgba(244,67,54,0.35)", @@ -179,21 +179,21 @@ var y = { style: { "white-space": "pre-wrap" }, { cursor: r.onRetry ? "pointer" : "default" }]), onClick: I - }, [u("div", w, _(v(t)("viewer.errorLoadingMetadata", "Error Loading Metadata")), 1), u("div", T, _(G.value), 1)], 4)) : p("", !0), - B.value ? (d(), l(i, { + }, [u("div", w, h(v(t)("viewer.errorLoadingMetadata", "Error Loading Metadata")), 1), u("div", T, h(G.value), 1)], 4)) : d("", !0), + B.value ? (m(), l(i, { key: 3, asset: r.asset - }, null, 8, ["asset"])) : p("", !0), - z.value ? (d(), l(a, { + }, null, 8, ["asset"])) : d("", !0), + z.value ? (m(), l(a, { key: 4, asset: r.asset - }, null, 8, ["asset"])) : p("", !0), - V.value ? (d(), l(s, { + }, null, 8, ["asset"])) : d("", !0), + V.value ? (m(), l(s, { key: 5, asset: r.asset - }, null, 8, ["asset"])) : p("", !0), - W.value ? (d(), g("div", E, _(v(t)("viewer.noGenerationDataFile", "No generation data found for this file.")), 1)) : p("", !0), - U.value ? (d(), g("details", D, [u("summary", O, _(v(t)("msg.rawMetadata", "Raw metadata")), 1), u("pre", k, _(U.value), 1)])) : p("", !0) + }, null, 8, ["asset"])) : d("", !0), + W.value ? (m(), _("div", E, h(v(t)("viewer.noGenerationDataFile", "No generation data found for this file.")), 1)) : d("", !0), + U.value ? (m(), _("details", D, [u("summary", O, h(v(t)("msg.rawMetadata", "Raw metadata")), 1), u("pre", k, h(U.value), 1)])) : d("", !0) ])); } }), j = /* @__PURE__ */ e({ diff --git a/dist/chunks/mjr-primevue-3mpaVb1C.js b/dist/chunks/mjr-primevue-C07IsEdU.js similarity index 79% rename from dist/chunks/mjr-primevue-3mpaVb1C.js rename to dist/chunks/mjr-primevue-C07IsEdU.js index 19d7a9a2..15a4b91e 100644 --- a/dist/chunks/mjr-primevue-3mpaVb1C.js +++ b/dist/chunks/mjr-primevue-C07IsEdU.js @@ -11,74 +11,74 @@ var t = {}, n = [], r = () => {}, i = () => !1, a = (e) => e.charCodeAt(0) === 1 }, l = Object.prototype.hasOwnProperty, u = (e, t) => l.call(e, t), d = Array.isArray, f = (e) => x(e) === "[object Map]", p = (e) => x(e) === "[object Set]", m = (e) => x(e) === "[object Date]", h = (e) => typeof e == "function", g = (e) => typeof e == "string", _ = (e) => typeof e == "symbol", v = (e) => typeof e == "object" && !!e, y = (e) => (v(e) || h(e)) && h(e.then) && h(e.catch), b = Object.prototype.toString, x = (e) => b.call(e), S = (e) => x(e).slice(8, -1), C = (e) => x(e) === "[object Object]", w = (e) => g(e) && e !== "NaN" && e[0] !== "-" && "" + parseInt(e, 10) === e, ee = /* @__PURE__ */ e(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"), te = (e) => { let t = /* @__PURE__ */ Object.create(null); return ((n) => t[n] || (t[n] = e(n))); -}, ne = /-\w/g, T = te((e) => e.replace(ne, (e) => e.slice(1).toUpperCase())), re = /\B([A-Z])/g, E = te((e) => e.replace(re, "-$1").toLowerCase()), ie = te((e) => e.charAt(0).toUpperCase() + e.slice(1)), ae = te((e) => e ? `on${ie(e)}` : ""), oe = (e, t) => !Object.is(e, t), se = (e, ...t) => { +}, ne = /-\w/g, T = te((e) => e.replace(ne, (e) => e.slice(1).toUpperCase())), re = /\B([A-Z])/g, E = te((e) => e.replace(re, "-$1").toLowerCase()), ie = te((e) => e.charAt(0).toUpperCase() + e.slice(1)), ae = te((e) => e ? `on${ie(e)}` : ""), D = (e, t) => !Object.is(e, t), oe = (e, ...t) => { for (let n = 0; n < e.length; n++) e[n](...t); -}, ce = (e, t, n, r = !1) => { +}, se = (e, t, n, r = !1) => { Object.defineProperty(e, t, { configurable: !0, enumerable: !1, writable: r, value: n }); -}, le = (e) => { +}, ce = (e) => { let t = parseFloat(e); return isNaN(t) ? e : t; -}, ue = (e) => { +}, le = (e) => { let t = g(e) ? Number(e) : NaN; return isNaN(t) ? e : t; -}, de, fe = () => de ||= typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : typeof window < "u" ? window : typeof global < "u" ? global : {}; -function pe(e) { +}, ue, de = () => ue ||= typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : typeof window < "u" ? window : typeof global < "u" ? global : {}; +function fe(e) { if (d(e)) { let t = {}; for (let n = 0; n < e.length; n++) { - let r = e[n], i = g(r) ? _e(r) : pe(r); + let r = e[n], i = g(r) ? ge(r) : fe(r); if (i) for (let e in i) t[e] = i[e]; } return t; } if (g(e) || v(e)) return e; } -var me = /;(?![^(]*\))/g, he = /:([^]+)/, ge = /"(?:[^"\\]|\\[^])*"|'(?:[^'\\]|\\[^])*'|\\[^]|\/\*[^]*?\*\//g; -function _e(e) { +var pe = /;(?![^(]*\))/g, me = /:([^]+)/, he = /"(?:[^"\\]|\\[^])*"|'(?:[^'\\]|\\[^])*'|\\[^]|\/\*[^]*?\*\//g; +function ge(e) { let t = {}; - return e.replace(ge, (e) => e.startsWith("/*") ? "" : e).split(me).forEach((e) => { + return e.replace(he, (e) => e.startsWith("/*") ? "" : e).split(pe).forEach((e) => { if (e) { - let n = e.split(he); + let n = e.split(me); n.length > 1 && (t[n[0].trim()] = n[1].trim()); } }), t; } -function D(e) { +function O(e) { let t = ""; if (g(e)) t = e; else if (d(e)) for (let n = 0; n < e.length; n++) { - let r = D(e[n]); + let r = O(e[n]); r && (t += r + " "); } else if (v(e)) for (let n in e) e[n] && (t += n + " "); return t.trim(); } -function ve(e) { +function _e(e) { if (!e) return null; let { class: t, style: n } = e; - return t && !g(t) && (e.class = D(t)), n && (e.style = pe(n)), e; + return t && !g(t) && (e.class = O(t)), n && (e.style = fe(n)), e; } -var ye = /* @__PURE__ */ e("itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,playsinline,readonly"); -function be(e) { +var ve = /* @__PURE__ */ e("itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,playsinline,readonly"); +function ye(e) { return !!e || e === ""; } -function xe(e, t, n) { +function be(e, t, n) { if (e.length !== t.length) return !1; let r = !0; - for (let i = 0; r && i < e.length; i++) r = Te(e[i], t[i], n); + for (let i = 0; r && i < e.length; i++) r = we(e[i], t[i], n); return r; } -function Se(e, t, n) { +function xe(e, t, n) { if (e.size !== t.size) return !1; let r = Array.from(t), i = new Uint8Array(r.length); for (let t of e) { let e = -1; - for (let a = 0; a < r.length; a++) if (!i[a] && Te(t, r[a], n)) { + for (let a = 0; a < r.length; a++) if (!i[a] && we(t, r[a], n)) { e = a; break; } @@ -87,17 +87,17 @@ function Se(e, t, n) { } return !0; } -function Ce(e, t, n) { +function Se(e, t, n) { let r = f(e), i = f(t); - if (r || i || (r = p(e), i = p(t), r || i)) return r && i ? Se(e, t, n) : !1; + if (r || i || (r = p(e), i = p(t), r || i)) return r && i ? xe(e, t, n) : !1; if (Object.keys(e).length !== Object.keys(t).length) return !1; for (let r in e) { let i = e.hasOwnProperty(r), a = t.hasOwnProperty(r); - if (i && !a || !i && a || !Te(e[r], t[r], n)) return !1; + if (i && !a || !i && a || !we(e[r], t[r], n)) return !1; } return String(e) === String(t); } -function we(e, t, n, r) { +function Ce(e, t, n, r) { n ||= [/* @__PURE__ */ new Map(), /* @__PURE__ */ new Map()]; let [i, a] = n; if (i.has(e) || a.has(t)) return i.get(e) === t && a.get(t) === e; @@ -105,17 +105,17 @@ function we(e, t, n, r) { let o = r(e, t, n); return i.delete(e), a.delete(t), o; } -function Te(e, t, n) { +function we(e, t, n) { if (e === t) return !0; let r = m(e), i = m(t); - return r || i ? r && i ? e.getTime() === t.getTime() : !1 : (r = _(e), i = _(t), r || i ? e === t : (r = d(e), i = d(t), r || i ? r && i ? we(e, t, n, xe) : !1 : (r = v(e), i = v(t), r || i ? !r || !i ? !1 : we(e, t, n, Ce) : String(e) === String(t)))); + return r || i ? r && i ? e.getTime() === t.getTime() : !1 : (r = _(e), i = _(t), r || i ? e === t : (r = d(e), i = d(t), r || i ? r && i ? Ce(e, t, n, be) : !1 : (r = v(e), i = v(t), r || i ? !r || !i ? !1 : Ce(e, t, n, Se) : String(e) === String(t)))); } -function Ee(e, t) { - return e.findIndex((e) => Te(e, t)); +function Te(e, t) { + return e.findIndex((e) => we(e, t)); } -var De = (e) => !!(e && e.__v_isRef === !0), O = (e) => g(e) ? e : e == null ? "" : d(e) || v(e) && (e.toString === b || !h(e.toString)) ? De(e) ? O(e.value) : JSON.stringify(e, Oe, 2) : String(e), Oe = (e, t) => De(t) ? Oe(e, t.value) : f(t) ? { [`Map(${t.size})`]: [...t.entries()].reduce((e, [t, n], r) => (e[ke(t, r) + " =>"] = n, e), {}) } : p(t) ? { [`Set(${t.size})`]: [...t.values()].map((e) => ke(e)) } : _(t) ? ke(t) : v(t) && !d(t) && !C(t) ? String(t) : t, ke = (e, t = "") => _(e) ? `Symbol(${e.description ?? t})` : e, k, Ae = class { +var Ee = (e) => !!(e && e.__v_isRef === !0), k = (e) => g(e) ? e : e == null ? "" : d(e) || v(e) && (e.toString === b || !h(e.toString)) ? Ee(e) ? k(e.value) : JSON.stringify(e, De, 2) : String(e), De = (e, t) => Ee(t) ? De(e, t.value) : f(t) ? { [`Map(${t.size})`]: [...t.entries()].reduce((e, [t, n], r) => (e[Oe(t, r) + " =>"] = n, e), {}) } : p(t) ? { [`Set(${t.size})`]: [...t.values()].map((e) => Oe(e)) } : _(t) ? Oe(t) : v(t) && !d(t) && !C(t) ? String(t) : t, Oe = (e, t = "") => _(e) ? `Symbol(${e.description ?? t})` : e, A, ke = class { constructor(e = !1) { - this.detached = e, this._active = !0, this._on = 0, this.effects = [], this.cleanups = [], this._isPaused = !1, this._warnOnRun = !0, this.__v_skip = !0, !e && k && (k.active ? (this.parent = k, this.index = (k.scopes || (k.scopes = [])).push(this) - 1) : (this._active = !1, this._warnOnRun = !1)); + this.detached = e, this._active = !0, this._on = 0, this.effects = [], this.cleanups = [], this._isPaused = !1, this._warnOnRun = !0, this.__v_skip = !0, !e && A && (A.active ? (this.parent = A, this.index = (A.scopes || (A.scopes = [])).push(this) - 1) : (this._active = !1, this._warnOnRun = !1)); } get active() { return this._active; @@ -145,22 +145,22 @@ var De = (e) => !!(e && e.__v_isRef === !0), O = (e) => g(e) ? e : e == null ? " } run(e) { if (this._active) { - let t = k; + let t = A; try { - return k = this, e(); + return A = this, e(); } finally { - k = t; + A = t; } } } on() { - ++this._on === 1 && (this.prevScope = k, k = this); + ++this._on === 1 && (this.prevScope = A, A = this); } off() { if (this._on > 0 && --this._on === 0) { - if (k === this) k = this.prevScope; + if (A === this) A = this.prevScope; else { - let e = k; + let e = A; for (; e;) { if (e.prevScope === this) { e.prevScope = this.prevScope; @@ -191,74 +191,74 @@ var De = (e) => !!(e && e.__v_isRef === !0), O = (e) => g(e) ? e : e == null ? " } } }; -function je(e) { - return new Ae(e); +function Ae(e) { + return new ke(e); } -function Me() { - return k; +function je() { + return A; } -function Ne(e, t = !1) { - k && k.cleanups.push(e); +function Me(e, t = !1) { + A && A.cleanups.push(e); } -var A, Pe = /* @__PURE__ */ new WeakSet(), Fe = class { +var j, Ne = /* @__PURE__ */ new WeakSet(), Pe = class { constructor(e) { - this.fn = e, this.deps = void 0, this.depsTail = void 0, this.flags = 5, this.next = void 0, this.cleanup = void 0, this.scheduler = void 0, k && (k.active ? k.effects.push(this) : this.flags &= -2); + this.fn = e, this.deps = void 0, this.depsTail = void 0, this.flags = 5, this.next = void 0, this.cleanup = void 0, this.scheduler = void 0, A && (A.active ? A.effects.push(this) : this.flags &= -2); } pause() { this.flags |= 64; } resume() { - this.flags & 64 && (this.flags &= -65, Pe.has(this) && (Pe.delete(this), this.trigger())); + this.flags & 64 && (this.flags &= -65, Ne.has(this) && (Ne.delete(this), this.trigger())); } notify() { - this.flags & 2 && !(this.flags & 32) || this.flags & 8 || ze(this); + this.flags & 2 && !(this.flags & 32) || this.flags & 8 || Re(this); } run() { if (!(this.flags & 1)) return this.fn(); - this.flags |= 2, Qe(this), He(this); - let e = A, t = Je; - A = this, Je = !0; + this.flags |= 2, Ze(this), Ve(this); + let e = j, t = qe; + j = this, qe = !0; try { return this.fn(); } finally { - Ue(this), A = e, Je = t, this.flags &= -3; + He(this), j = e, qe = t, this.flags &= -3; } } stop() { if (this.flags & 1) { - for (let e = this.deps; e; e = e.nextDep) Ke(e); - this.deps = this.depsTail = void 0, Qe(this), this.onStop && this.onStop(), this.flags &= -2; + for (let e = this.deps; e; e = e.nextDep) Ge(e); + this.deps = this.depsTail = void 0, Ze(this), this.onStop && this.onStop(), this.flags &= -2; } } trigger() { - this.flags & 64 ? Pe.add(this) : this.scheduler ? this.scheduler() : this.runIfDirty(); + this.flags & 64 ? Ne.add(this) : this.scheduler ? this.scheduler() : this.runIfDirty(); } runIfDirty() { - We(this) && this.run(); + Ue(this) && this.run(); } get dirty() { - return We(this); + return Ue(this); } -}, Ie = 0, Le, Re; -function ze(e, t = !1) { - e.flags |= 8, t ? (e.next = Re, Re = e) : (e.next = Le, Le = e); +}, Fe = 0, Ie, Le; +function Re(e, t = !1) { + e.flags |= 8, t ? (e.next = Le, Le = e) : (e.next = Ie, Ie = e); +} +function ze() { + Fe++; } function Be() { - Ie++; -} -function Ve() { - if (--Ie > 0) return; - if (Re) { - let e = Re; - for (Re = void 0; e;) { + if (--Fe > 0) return; + if (Le) { + let e = Le; + for (Le = void 0; e;) { let t = e.next; e.next = void 0, e.flags &= -9, e = t; } } let e; - for (; Le;) { - let t = Le; - for (Le = void 0; t;) { + for (; Ie;) { + let t = Ie; + for (Ie = void 0; t;) { let n = t.next; if (t.next = void 0, t.flags &= -9, t.flags & 1) try { t.trigger(); @@ -270,251 +270,251 @@ function Ve() { } if (e) throw e; } -function He(e) { +function Ve(e) { for (let t = e.deps; t; t = t.nextDep) t.version = -1, t.prevActiveLink = t.dep.activeLink, t.dep.activeLink = t; } -function Ue(e) { +function He(e) { let t, n = e.depsTail, r = n; for (; r;) { let e = r.prevDep; - r.version === -1 ? (r === n && (n = e), Ke(r), qe(r)) : t = r, r.dep.activeLink = r.prevActiveLink, r.prevActiveLink = void 0, r = e; + r.version === -1 ? (r === n && (n = e), Ge(r), Ke(r)) : t = r, r.dep.activeLink = r.prevActiveLink, r.prevActiveLink = void 0, r = e; } e.deps = t, e.depsTail = n; } -function We(e) { - for (let t = e.deps; t; t = t.nextDep) if (t.dep.version !== t.version || t.dep.computed && (Ge(t.dep.computed) || t.dep.version !== t.version)) return !0; +function Ue(e) { + for (let t = e.deps; t; t = t.nextDep) if (t.dep.version !== t.version || t.dep.computed && (We(t.dep.computed) || t.dep.version !== t.version)) return !0; return !!e._dirty; } -function Ge(e) { - if (e.flags & 4 && !(e.flags & 16) || (e.flags &= -17, e.globalVersion === $e) || (e.globalVersion = $e, !e.isSSR && e.flags & 128 && (!e.deps && !e._dirty || !We(e)))) return; +function We(e) { + if (e.flags & 4 && !(e.flags & 16) || (e.flags &= -17, e.globalVersion === Qe) || (e.globalVersion = Qe, !e.isSSR && e.flags & 128 && (!e.deps && !e._dirty || !Ue(e)))) return; e.flags |= 2; - let t = e.dep, n = A, r = Je; - A = e, Je = !0; + let t = e.dep, n = j, r = qe; + j = e, qe = !0; try { - He(e); + Ve(e); let n = e.fn(e._value); - (t.version === 0 || oe(n, e._value)) && (e.flags |= 128, e._value = n, t.version++); + (t.version === 0 || D(n, e._value)) && (e.flags |= 128, e._value = n, t.version++); } catch (e) { throw t.version++, e; } finally { - A = n, Je = r, Ue(e), e.flags &= -3; + j = n, qe = r, He(e), e.flags &= -3; } } -function Ke(e, t = !1) { +function Ge(e, t = !1) { let { dep: n, prevSub: r, nextSub: i } = e; if (r && (r.nextSub = i, e.prevSub = void 0), i && (i.prevSub = r, e.nextSub = void 0), n.subs === e && (n.subs = r, !r && n.computed)) { n.computed.flags &= -5; - for (let e = n.computed.deps; e; e = e.nextDep) Ke(e, !0); + for (let e = n.computed.deps; e; e = e.nextDep) Ge(e, !0); } !t && !--n.sc && n.map && n.map.delete(n.key); } -function qe(e) { +function Ke(e) { let { prevDep: t, nextDep: n } = e; t && (t.nextDep = n, e.prevDep = void 0), n && (n.prevDep = t, e.nextDep = void 0); } -var Je = !0, Ye = []; +var qe = !0, Je = []; +function Ye() { + Je.push(qe), qe = !1; +} function Xe() { - Ye.push(Je), Je = !1; + let e = Je.pop(); + qe = e === void 0 || e; } -function Ze() { - let e = Ye.pop(); - Je = e === void 0 || e; -} -function Qe(e) { +function Ze(e) { let { cleanup: t } = e; if (e.cleanup = void 0, t) { - let e = A; - A = void 0; + let e = j; + j = void 0; try { t(); } finally { - A = e; + j = e; } } } -var $e = 0, et = class { +var Qe = 0, $e = class { constructor(e, t) { this.sub = e, this.dep = t, this.version = t.version, this.nextDep = this.prevDep = this.nextSub = this.prevSub = this.prevActiveLink = void 0; } -}, tt = class { +}, et = class { constructor(e) { this.computed = e, this.version = 0, this.activeLink = void 0, this.subs = void 0, this.map = void 0, this.key = void 0, this.sc = 0, this.__v_skip = !0; } track(e) { - if (!A || !Je || A === this.computed) return; + if (!j || !qe || j === this.computed) return; let t = this.activeLink; - if (t === void 0 || t.sub !== A) t = this.activeLink = new et(A, this), A.deps ? (t.prevDep = A.depsTail, A.depsTail.nextDep = t, A.depsTail = t) : A.deps = A.depsTail = t, nt(t); + if (t === void 0 || t.sub !== j) t = this.activeLink = new $e(j, this), j.deps ? (t.prevDep = j.depsTail, j.depsTail.nextDep = t, j.depsTail = t) : j.deps = j.depsTail = t, tt(t); else if (t.version === -1 && (t.version = this.version, t.nextDep)) { let e = t.nextDep; - e.prevDep = t.prevDep, t.prevDep && (t.prevDep.nextDep = e), t.prevDep = A.depsTail, t.nextDep = void 0, A.depsTail.nextDep = t, A.depsTail = t, A.deps === t && (A.deps = e); + e.prevDep = t.prevDep, t.prevDep && (t.prevDep.nextDep = e), t.prevDep = j.depsTail, t.nextDep = void 0, j.depsTail.nextDep = t, j.depsTail = t, j.deps === t && (j.deps = e); } return t; } trigger(e) { - this.version++, $e++, this.notify(e); + this.version++, Qe++, this.notify(e); } notify(e) { - Be(); + ze(); try { for (let e = this.subs; e; e = e.prevSub) e.sub.notify() && e.sub.dep.notify(); } finally { - Ve(); + Be(); } } }; -function nt(e) { +function tt(e) { if (e.dep.sc++, e.sub.flags & 4) { let t = e.dep.computed; if (t && !e.dep.subs) { t.flags |= 20; - for (let e = t.deps; e; e = e.nextDep) nt(e); + for (let e = t.deps; e; e = e.nextDep) tt(e); } let n = e.dep.subs; n !== e && (e.prevSub = n, n && (n.nextSub = e)), e.dep.subs = e; } } -var rt = /* @__PURE__ */ new WeakMap(), it = /* @__PURE__ */ Symbol(""), at = /* @__PURE__ */ Symbol(""), ot = /* @__PURE__ */ Symbol(""); -function st(e, t, n) { - if (Je && A) { - let t = rt.get(e); - t || rt.set(e, t = /* @__PURE__ */ new Map()); +var nt = /* @__PURE__ */ new WeakMap(), rt = /* @__PURE__ */ Symbol(""), it = /* @__PURE__ */ Symbol(""), at = /* @__PURE__ */ Symbol(""); +function ot(e, t, n) { + if (qe && j) { + let t = nt.get(e); + t || nt.set(e, t = /* @__PURE__ */ new Map()); let r = t.get(n); - r || (t.set(n, r = new tt()), r.map = t, r.key = n), r.track(); + r || (t.set(n, r = new et()), r.map = t, r.key = n), r.track(); } } -function ct(e, t, n, r, i, a) { - let o = rt.get(e); +function st(e, t, n, r, i, a) { + let o = nt.get(e); if (!o) { - $e++; + Qe++; return; } let s = (e) => { e && e.trigger(); }; - if (Be(), t === "clear") o.forEach(s); + if (ze(), t === "clear") o.forEach(s); else { let i = d(e), a = i && w(n); if (i && n === "length") { let e = Number(r); o.forEach((t, n) => { - (n === "length" || n === ot || !_(n) && n >= e) && s(t); + (n === "length" || n === at || !_(n) && n >= e) && s(t); }); - } else switch ((n !== void 0 || o.has(void 0)) && s(o.get(n)), a && s(o.get(ot)), t) { + } else switch ((n !== void 0 || o.has(void 0)) && s(o.get(n)), a && s(o.get(at)), t) { case "add": - i ? a && s(o.get("length")) : (s(o.get(it)), f(e) && s(o.get(at))); + i ? a && s(o.get("length")) : (s(o.get(rt)), f(e) && s(o.get(it))); break; case "delete": - i || (s(o.get(it)), f(e) && s(o.get(at))); + i || (s(o.get(rt)), f(e) && s(o.get(it))); break; - case "set": f(e) && s(o.get(it)); + case "set": f(e) && s(o.get(rt)); } } - Ve(); + Be(); } -function lt(e, t) { - let n = rt.get(e); +function ct(e, t) { + let n = nt.get(e); return n && n.get(t); } +function lt(e) { + let t = /* @__PURE__ */ M(e); + return t === e || (ot(t, "iterate", at), /* @__PURE__ */ Yt(e)) ? t : /* @__PURE__ */ Jt(e) ? /* @__PURE__ */ qt(e) ? t.map((e) => $t(Qt(e))) : t.map($t) : t.map(Qt); +} function ut(e) { - let t = /* @__PURE__ */ j(e); - return t === e || (st(t, "iterate", ot), /* @__PURE__ */ Xt(e)) ? t : /* @__PURE__ */ Yt(e) ? /* @__PURE__ */ Jt(e) ? t.map((e) => en($t(e))) : t.map(en) : t.map($t); + return ot(e = /* @__PURE__ */ M(e), "iterate", at), e; } -function dt(e) { - return st(e = /* @__PURE__ */ j(e), "iterate", ot), e; +function dt(e, t) { + return /* @__PURE__ */ Jt(e) ? $t(/* @__PURE__ */ qt(e) ? Qt(t) : t) : Qt(t); } -function ft(e, t) { - return /* @__PURE__ */ Yt(e) ? en(/* @__PURE__ */ Jt(e) ? $t(t) : t) : $t(t); -} -var pt = { +var ft = { __proto__: null, [Symbol.iterator]() { - return mt(this, Symbol.iterator, (e) => ft(this, e)); + return pt(this, Symbol.iterator, (e) => dt(this, e)); }, concat(...e) { - return ut(this).concat(...e.map((e) => d(e) ? ut(e) : e)); + return lt(this).concat(...e.map((e) => d(e) ? lt(e) : e)); }, entries() { - return mt(this, "entries", (e) => (e[1] = ft(this, e[1]), e)); + return pt(this, "entries", (e) => (e[1] = dt(this, e[1]), e)); }, every(e, t) { - return _t(this, "every", e, t, void 0, arguments); + return gt(this, "every", e, t, void 0, arguments); }, filter(e, t) { - return _t(this, "filter", e, t, (e) => e.map((e) => ft(this, e)), arguments); + return gt(this, "filter", e, t, (e) => e.map((e) => dt(this, e)), arguments); }, find(e, t) { - return _t(this, "find", e, t, (e) => ft(this, e), arguments); + return gt(this, "find", e, t, (e) => dt(this, e), arguments); }, findIndex(e, t) { - return _t(this, "findIndex", e, t, void 0, arguments); + return gt(this, "findIndex", e, t, void 0, arguments); }, findLast(e, t) { - return _t(this, "findLast", e, t, (e) => ft(this, e), arguments); + return gt(this, "findLast", e, t, (e) => dt(this, e), arguments); }, findLastIndex(e, t) { - return _t(this, "findLastIndex", e, t, void 0, arguments); + return gt(this, "findLastIndex", e, t, void 0, arguments); }, forEach(e, t) { - return _t(this, "forEach", e, t, void 0, arguments); + return gt(this, "forEach", e, t, void 0, arguments); }, includes(...e) { - return yt(this, "includes", e); + return vt(this, "includes", e); }, indexOf(...e) { - return yt(this, "indexOf", e); + return vt(this, "indexOf", e); }, join(e) { - return ut(this).join(e); + return lt(this).join(e); }, lastIndexOf(...e) { - return yt(this, "lastIndexOf", e); + return vt(this, "lastIndexOf", e); }, map(e, t) { - return _t(this, "map", e, t, void 0, arguments); + return gt(this, "map", e, t, void 0, arguments); }, pop() { - return bt(this, "pop"); + return yt(this, "pop"); }, push(...e) { - return bt(this, "push", e); + return yt(this, "push", e); }, reduce(e, ...t) { - return vt(this, "reduce", e, t); + return _t(this, "reduce", e, t); }, reduceRight(e, ...t) { - return vt(this, "reduceRight", e, t); + return _t(this, "reduceRight", e, t); }, shift() { - return bt(this, "shift"); + return yt(this, "shift"); }, some(e, t) { - return _t(this, "some", e, t, void 0, arguments); + return gt(this, "some", e, t, void 0, arguments); }, splice(...e) { - return bt(this, "splice", e); + return yt(this, "splice", e); }, toReversed() { - return ut(this).toReversed(); + return lt(this).toReversed(); }, toSorted(e) { - return ut(this).toSorted(e); + return lt(this).toSorted(e); }, toSpliced(...e) { - return ut(this).toSpliced(...e); + return lt(this).toSpliced(...e); }, unshift(...e) { - return bt(this, "unshift", e); + return yt(this, "unshift", e); }, values() { - return mt(this, "values", (e) => ft(this, e)); + return pt(this, "values", (e) => dt(this, e)); } }; -function mt(e, t, n) { - let r = dt(e), i = r[t], a = i.call(r); - if (r !== e && !/* @__PURE__ */ Xt(e)) { +function pt(e, t, n) { + let r = ut(e), i = r[t], a = i.call(r); + if (r !== e && !/* @__PURE__ */ Yt(e)) { if (a[Symbol.toStringTag] === "Array Iterator") { let e = Object.create(Object.getPrototypeOf(a)); - return e.next = () => ht(a.next(), n), i !== gt[t] && Object.defineProperties(e, { + return e.next = () => mt(a.next(), n), i !== ht[t] && Object.defineProperties(e, { return: { get() { let e = a.return; return typeof e == "function" ? e.bind(a) : e; @@ -525,57 +525,57 @@ function mt(e, t, n) { } } }), e; } - a._next = a.next, a.next = () => ht(a._next(), n); + a._next = a.next, a.next = () => mt(a._next(), n); } return a; } -function ht(e, t) { +function mt(e, t) { return e.done || (e.value = t(e.value)), e; } -var gt = Array.prototype; -function _t(e, t, n, r, i, a) { - let o = dt(e), s = o !== e && !/* @__PURE__ */ Xt(e), c = o[t]; - if (c !== gt[t]) { +var ht = Array.prototype; +function gt(e, t, n, r, i, a) { + let o = ut(e), s = o !== e && !/* @__PURE__ */ Yt(e), c = o[t]; + if (c !== ht[t]) { let t = c.apply(e, a); - return s ? $t(t) : t; + return s ? Qt(t) : t; } let l = n; o !== e && (s ? l = function(t, r) { - return n.call(this, ft(e, t), r, e); + return n.call(this, dt(e, t), r, e); } : n.length > 2 && (l = function(t, r) { return n.call(this, t, r, e); })); let u = c.call(o, l, r); return s && i ? i(u) : u; } -function vt(e, t, n, r) { - let i = dt(e), a = i !== e && !/* @__PURE__ */ Xt(e), o = n, s = !1; +function _t(e, t, n, r) { + let i = ut(e), a = i !== e && !/* @__PURE__ */ Yt(e), o = n, s = !1; i !== e && (a ? (s = r.length === 0, o = function(t, r, i) { - return s && (s = !1, t = ft(e, t)), n.call(this, t, ft(e, r), i, e); + return s && (s = !1, t = dt(e, t)), n.call(this, t, dt(e, r), i, e); }) : n.length > 3 && (o = function(t, r, i) { return n.call(this, t, r, i, e); })); let c = i[t](o, ...r); - return s ? ft(e, c) : c; + return s ? dt(e, c) : c; } -function yt(e, t, n) { - let r = /* @__PURE__ */ j(e); - st(r, "iterate", ot); +function vt(e, t, n) { + let r = /* @__PURE__ */ M(e); + ot(r, "iterate", at); let i = r[t](...n); - return (i === -1 || i === !1) && /* @__PURE__ */ Zt(n[0]) ? (n[0] = /* @__PURE__ */ j(n[0]), r[t](...n)) : i; + return (i === -1 || i === !1) && /* @__PURE__ */ Xt(n[0]) ? (n[0] = /* @__PURE__ */ M(n[0]), r[t](...n)) : i; } -function bt(e, t, n = []) { - Xe(), Be(); - let r = (/* @__PURE__ */ j(e))[t].apply(e, n); - return Ve(), Ze(), r; +function yt(e, t, n = []) { + Ye(), ze(); + let r = (/* @__PURE__ */ M(e))[t].apply(e, n); + return Be(), Xe(), r; } -var xt = /* @__PURE__ */ e("__proto__,__v_isRef,__isVue"), St = new Set(/* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((e) => e !== "arguments" && e !== "caller").map((e) => Symbol[e]).filter(_)); -function Ct(e) { +var bt = /* @__PURE__ */ e("__proto__,__v_isRef,__isVue"), xt = new Set(/* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((e) => e !== "arguments" && e !== "caller").map((e) => Symbol[e]).filter(_)); +function St(e) { _(e) || (e = String(e)); - let t = /* @__PURE__ */ j(this); - return st(t, "has", e), t.hasOwnProperty(e); + let t = /* @__PURE__ */ M(this); + return ot(t, "has", e), t.hasOwnProperty(e); } -var wt = class { +var Ct = class { constructor(e = !1, t = !1) { this._isReadonly = e, this._isShallow = t; } @@ -585,46 +585,46 @@ var wt = class { if (t === "__v_isReactive") return !r; if (t === "__v_isReadonly") return r; if (t === "__v_isShallow") return i; - if (t === "__v_raw") return n === (r ? i ? Ht : Vt : i ? Bt : zt).get(e) || Object.getPrototypeOf(e) === Object.getPrototypeOf(n) ? e : void 0; + if (t === "__v_raw") return n === (r ? i ? Vt : Bt : i ? zt : Rt).get(e) || Object.getPrototypeOf(e) === Object.getPrototypeOf(n) ? e : void 0; let a = d(e); if (!r) { let e; - if (a && (e = pt[t])) return e; - if (t === "hasOwnProperty") return Ct; + if (a && (e = ft[t])) return e; + if (t === "hasOwnProperty") return St; } - let o = Reflect.get(e, t, /* @__PURE__ */ M(e) ? e : n); - if ((_(t) ? St.has(t) : xt(t)) || (r || st(e, "get", t), i)) return o; - if (/* @__PURE__ */ M(o)) { + let o = Reflect.get(e, t, /* @__PURE__ */ N(e) ? e : n); + if ((_(t) ? xt.has(t) : bt(t)) || (r || ot(e, "get", t), i)) return o; + if (/* @__PURE__ */ N(o)) { let e = a && w(t) ? o : o.value; - return r && v(e) ? /* @__PURE__ */ Kt(e) : e; + return r && v(e) ? /* @__PURE__ */ Gt(e) : e; } - return v(o) ? r ? /* @__PURE__ */ Kt(o) : /* @__PURE__ */ Wt(o) : o; + return v(o) ? r ? /* @__PURE__ */ Gt(o) : /* @__PURE__ */ Ut(o) : o; } -}, Tt = class extends wt { +}, wt = class extends Ct { constructor(e = !1) { super(!1, e); } set(e, t, n, r) { let i = e[t], a = d(e) && w(t); if (!this._isShallow) { - let e = /* @__PURE__ */ Yt(i); - if (!/* @__PURE__ */ Xt(n) && !/* @__PURE__ */ Yt(n) && (i = /* @__PURE__ */ j(i), n = /* @__PURE__ */ j(n)), !a && /* @__PURE__ */ M(i) && !/* @__PURE__ */ M(n)) return e || (i.value = n), !0; + let e = /* @__PURE__ */ Jt(i); + if (!/* @__PURE__ */ Yt(n) && !/* @__PURE__ */ Jt(n) && (i = /* @__PURE__ */ M(i), n = /* @__PURE__ */ M(n)), !a && /* @__PURE__ */ N(i) && !/* @__PURE__ */ N(n)) return e || (i.value = n), !0; } - let o = a ? Number(t) < e.length : u(e, t), s = Reflect.set(e, t, n, /* @__PURE__ */ M(e) ? e : r); - return e === /* @__PURE__ */ j(r) && s && (o ? oe(n, i) && ct(e, "set", t, n, i) : ct(e, "add", t, n)), s; + let o = a ? Number(t) < e.length : u(e, t), s = Reflect.set(e, t, n, /* @__PURE__ */ N(e) ? e : r); + return e === /* @__PURE__ */ M(r) && s && (o ? D(n, i) && st(e, "set", t, n, i) : st(e, "add", t, n)), s; } deleteProperty(e, t) { let n = u(e, t), r = e[t], i = Reflect.deleteProperty(e, t); - return i && n && ct(e, "delete", t, void 0, r), i; + return i && n && st(e, "delete", t, void 0, r), i; } has(e, t) { let n = Reflect.has(e, t); - return _(t) && St.has(t) || st(e, "has", t), n; + return _(t) && xt.has(t) || ot(e, "has", t), n; } ownKeys(e) { - return st(e, "iterate", d(e) ? "length" : it), Reflect.ownKeys(e); + return ot(e, "iterate", d(e) ? "length" : rt), Reflect.ownKeys(e); } -}, Et = class extends wt { +}, Tt = class extends Ct { constructor(e = !1) { super(!0, e); } @@ -634,11 +634,11 @@ var wt = class { deleteProperty(e, t) { return !0; } -}, Dt = /* @__PURE__ */ new Tt(), Ot = /* @__PURE__ */ new Et(), kt = /* @__PURE__ */ new Tt(!0), At = (e) => e, jt = (e) => Reflect.getPrototypeOf(e); -function Mt(e, t, n) { +}, Et = /* @__PURE__ */ new wt(), Dt = /* @__PURE__ */ new Tt(), Ot = /* @__PURE__ */ new wt(!0), kt = (e) => e, At = (e) => Reflect.getPrototypeOf(e); +function jt(e, t, n) { return function(...r) { - let i = this.__v_raw, a = /* @__PURE__ */ j(i), o = f(a), c = e === "entries" || e === Symbol.iterator && o, l = e === "keys" && o, u = i[e](...r), d = n ? At : t ? en : $t; - return !t && st(a, "iterate", l ? at : it), s(Object.create(u), { next() { + let i = this.__v_raw, a = /* @__PURE__ */ M(i), o = f(a), c = e === "entries" || e === Symbol.iterator && o, l = e === "keys" && o, u = i[e](...r), d = n ? kt : t ? $t : Qt; + return !t && ot(a, "iterate", l ? it : rt), s(Object.create(u), { next() { let { value: e, done: t } = u.next(); return t ? { value: e, @@ -650,60 +650,60 @@ function Mt(e, t, n) { } }); }; } -function Nt(e) { +function Mt(e) { return function(...t) { return e === "delete" ? !1 : e === "clear" ? void 0 : this; }; } -function Pt(e, t) { +function Nt(e, t) { let n = { get(n) { - let r = this.__v_raw, i = /* @__PURE__ */ j(r), a = /* @__PURE__ */ j(n); - e || (oe(n, a) && st(i, "get", n), st(i, "get", a)); - let { has: o } = jt(i), s = t ? At : e ? en : $t; + let r = this.__v_raw, i = /* @__PURE__ */ M(r), a = /* @__PURE__ */ M(n); + e || (D(n, a) && ot(i, "get", n), ot(i, "get", a)); + let { has: o } = At(i), s = t ? kt : e ? $t : Qt; if (o.call(i, n)) return s(r.get(n)); if (o.call(i, a)) return s(r.get(a)); r !== i && r.get(n); }, get size() { let t = this.__v_raw; - return !e && st(/* @__PURE__ */ j(t), "iterate", it), t.size; + return !e && ot(/* @__PURE__ */ M(t), "iterate", rt), t.size; }, has(t) { - let n = this.__v_raw, r = /* @__PURE__ */ j(n), i = /* @__PURE__ */ j(t); - return e || (oe(t, i) && st(r, "has", t), st(r, "has", i)), t === i ? n.has(t) : n.has(t) || n.has(i); + let n = this.__v_raw, r = /* @__PURE__ */ M(n), i = /* @__PURE__ */ M(t); + return e || (D(t, i) && ot(r, "has", t), ot(r, "has", i)), t === i ? n.has(t) : n.has(t) || n.has(i); }, forEach(n, r) { - let i = this, a = i.__v_raw, o = /* @__PURE__ */ j(a), s = t ? At : e ? en : $t; - return !e && st(o, "iterate", it), a.forEach((e, t) => n.call(r, s(e), s(t), i)); + let i = this, a = i.__v_raw, o = /* @__PURE__ */ M(a), s = t ? kt : e ? $t : Qt; + return !e && ot(o, "iterate", rt), a.forEach((e, t) => n.call(r, s(e), s(t), i)); } }; return s(n, e ? { - add: Nt("add"), - set: Nt("set"), - delete: Nt("delete"), - clear: Nt("clear") + add: Mt("add"), + set: Mt("set"), + delete: Mt("delete"), + clear: Mt("clear") } : { add(e) { - let n = /* @__PURE__ */ j(this), r = jt(n), i = /* @__PURE__ */ j(e), a = !t && !/* @__PURE__ */ Xt(e) && !/* @__PURE__ */ Yt(e) ? i : e; - return r.has.call(n, a) || oe(e, a) && r.has.call(n, e) || oe(i, a) && r.has.call(n, i) || (n.add(a), ct(n, "add", a, a)), this; + let n = /* @__PURE__ */ M(this), r = At(n), i = /* @__PURE__ */ M(e), a = !t && !/* @__PURE__ */ Yt(e) && !/* @__PURE__ */ Jt(e) ? i : e; + return r.has.call(n, a) || D(e, a) && r.has.call(n, e) || D(i, a) && r.has.call(n, i) || (n.add(a), st(n, "add", a, a)), this; }, set(e, n) { - t || /* @__PURE__ */ Xt(n) || /* @__PURE__ */ Yt(n) || (n = /* @__PURE__ */ j(n)); - let r = /* @__PURE__ */ j(this), { has: i, get: a } = jt(r), o = i.call(r, e); - o ||= (e = /* @__PURE__ */ j(e), i.call(r, e)); + t || /* @__PURE__ */ Yt(n) || /* @__PURE__ */ Jt(n) || (n = /* @__PURE__ */ M(n)); + let r = /* @__PURE__ */ M(this), { has: i, get: a } = At(r), o = i.call(r, e); + o ||= (e = /* @__PURE__ */ M(e), i.call(r, e)); let s = a.call(r, e); - return r.set(e, n), o ? oe(n, s) && ct(r, "set", e, n, s) : ct(r, "add", e, n), this; + return r.set(e, n), o ? D(n, s) && st(r, "set", e, n, s) : st(r, "add", e, n), this; }, delete(e) { - let t = /* @__PURE__ */ j(this), { has: n, get: r } = jt(t), i = n.call(t, e); - i ||= (e = /* @__PURE__ */ j(e), n.call(t, e)); + let t = /* @__PURE__ */ M(this), { has: n, get: r } = At(t), i = n.call(t, e); + i ||= (e = /* @__PURE__ */ M(e), n.call(t, e)); let a = r ? r.call(t, e) : void 0, o = t.delete(e); - return i && ct(t, "delete", e, void 0, a), o; + return i && st(t, "delete", e, void 0, a), o; }, clear() { - let e = /* @__PURE__ */ j(this), t = e.size !== 0, n = e.clear(); - return t && ct(e, "clear", void 0, void 0, void 0), n; + let e = /* @__PURE__ */ M(this), t = e.size !== 0, n = e.clear(); + return t && st(e, "clear", void 0, void 0, void 0), n; } }), [ "keys", @@ -711,15 +711,15 @@ function Pt(e, t) { "entries", Symbol.iterator ].forEach((r) => { - n[r] = Mt(r, e, t); + n[r] = jt(r, e, t); }), n; } -function Ft(e, t) { - let n = Pt(e, t); +function Pt(e, t) { + let n = Nt(e, t); return (r, i, a) => i === "__v_isReactive" ? !e : i === "__v_isReadonly" ? e : i === "__v_isShallow" ? t : i === "__v_raw" ? r : Reflect.get(u(n, i) && i in r ? n : r, i, a); } -var It = { get: /* @__PURE__ */ Ft(!1, !1) }, Lt = { get: /* @__PURE__ */ Ft(!1, !0) }, Rt = { get: /* @__PURE__ */ Ft(!0, !1) }, zt = /* @__PURE__ */ new WeakMap(), Bt = /* @__PURE__ */ new WeakMap(), Vt = /* @__PURE__ */ new WeakMap(), Ht = /* @__PURE__ */ new WeakMap(); -function Ut(e) { +var Ft = { get: /* @__PURE__ */ Pt(!1, !1) }, It = { get: /* @__PURE__ */ Pt(!1, !0) }, Lt = { get: /* @__PURE__ */ Pt(!0, !1) }, Rt = /* @__PURE__ */ new WeakMap(), zt = /* @__PURE__ */ new WeakMap(), Bt = /* @__PURE__ */ new WeakMap(), Vt = /* @__PURE__ */ new WeakMap(); +function Ht(e) { switch (e) { case "Object": case "Array": return 1; @@ -731,117 +731,133 @@ function Ut(e) { } } // @__NO_SIDE_EFFECTS__ +function Ut(e) { + return /* @__PURE__ */ Jt(e) ? e : Kt(e, !1, Et, Ft, Rt); +} +// @__NO_SIDE_EFFECTS__ function Wt(e) { - return /* @__PURE__ */ Yt(e) ? e : qt(e, !1, Dt, It, zt); + return Kt(e, !1, Ot, It, zt); } // @__NO_SIDE_EFFECTS__ function Gt(e) { - return qt(e, !1, kt, Lt, Bt); + return Kt(e, !0, Dt, Lt, Bt); } -// @__NO_SIDE_EFFECTS__ -function Kt(e) { - return qt(e, !0, Ot, Rt, Vt); -} -function qt(e, t, n, r, i) { +function Kt(e, t, n, r, i) { if (!v(e) || e.__v_raw && !(t && e.__v_isReactive) || e.__v_skip || !Object.isExtensible(e)) return e; let a = i.get(e); if (a) return a; - let o = Ut(S(e)); + let o = Ht(S(e)); if (o === 0) return e; let s = new Proxy(e, o === 2 ? r : n); return i.set(e, s), s; } // @__NO_SIDE_EFFECTS__ -function Jt(e) { - return /* @__PURE__ */ Yt(e) ? /* @__PURE__ */ Jt(e.__v_raw) : !!(e && e.__v_isReactive); +function qt(e) { + return /* @__PURE__ */ Jt(e) ? /* @__PURE__ */ qt(e.__v_raw) : !!(e && e.__v_isReactive); } // @__NO_SIDE_EFFECTS__ -function Yt(e) { +function Jt(e) { return !!(e && e.__v_isReadonly); } // @__NO_SIDE_EFFECTS__ -function Xt(e) { +function Yt(e) { return !!(e && e.__v_isShallow); } // @__NO_SIDE_EFFECTS__ -function Zt(e) { +function Xt(e) { return e ? !!e.__v_raw : !1; } // @__NO_SIDE_EFFECTS__ -function j(e) { - let t = e && e.__v_raw; - return t ? /* @__PURE__ */ j(t) : e; -} -function Qt(e) { - return !u(e, "__v_skip") && Object.isExtensible(e) && ce(e, "__v_skip", !0), e; -} -var $t = (e) => v(e) ? /* @__PURE__ */ Wt(e) : e, en = (e) => v(e) ? /* @__PURE__ */ Kt(e) : e; -// @__NO_SIDE_EFFECTS__ function M(e) { + let t = e && e.__v_raw; + return t ? /* @__PURE__ */ M(t) : e; +} +function Zt(e) { + return !u(e, "__v_skip") && Object.isExtensible(e) && se(e, "__v_skip", !0), e; +} +var Qt = (e) => v(e) ? /* @__PURE__ */ Ut(e) : e, $t = (e) => v(e) ? /* @__PURE__ */ Gt(e) : e; +// @__NO_SIDE_EFFECTS__ +function N(e) { return e ? e.__v_isRef === !0 : !1; } // @__NO_SIDE_EFFECTS__ -function tn(e) { - return rn(e, !1); +function en(e) { + return nn(e, !1); } // @__NO_SIDE_EFFECTS__ -function nn(e) { - return rn(e, !0); +function tn(e) { + return nn(e, !0); } -function rn(e, t) { - return /* @__PURE__ */ M(e) ? e : new an(e, t); +function nn(e, t) { + return /* @__PURE__ */ N(e) ? e : new rn(e, t); } -var an = class { +var rn = class { constructor(e, t) { - this.dep = new tt(), this.__v_isRef = !0, this.__v_isShallow = !1, this._rawValue = t ? e : /* @__PURE__ */ j(e), this._value = t ? e : $t(e), this.__v_isShallow = t; + this.dep = new et(), this.__v_isRef = !0, this.__v_isShallow = !1, this._rawValue = t ? e : /* @__PURE__ */ M(e), this._value = t ? e : Qt(e), this.__v_isShallow = t; } get value() { return this.dep.track(), this._value; } set value(e) { - let t = this._rawValue, n = this.__v_isShallow || /* @__PURE__ */ Xt(e) || /* @__PURE__ */ Yt(e); - e = n ? e : /* @__PURE__ */ j(e), oe(e, t) && (this._rawValue = e, this._value = n ? e : $t(e), this.dep.trigger()); + let t = this._rawValue, n = this.__v_isShallow || /* @__PURE__ */ Yt(e) || /* @__PURE__ */ Jt(e); + e = n ? e : /* @__PURE__ */ M(e), D(e, t) && (this._rawValue = e, this._value = n ? e : Qt(e), this.dep.trigger()); } }; -function on(e) { +function an(e) { e.dep && e.dep.trigger(); } -function sn(e) { - return /* @__PURE__ */ M(e) ? e.value : e; +function on(e) { + return /* @__PURE__ */ N(e) ? e.value : e; } -var cn = { - get: (e, t, n) => t === "__v_raw" ? e : sn(Reflect.get(e, t, n)), +var sn = { + get: (e, t, n) => t === "__v_raw" ? e : on(Reflect.get(e, t, n)), set: (e, t, n, r) => { let i = e[t]; - return /* @__PURE__ */ M(i) && !/* @__PURE__ */ M(n) ? (i.value = n, !0) : Reflect.set(e, t, n, r); + return /* @__PURE__ */ N(i) && !/* @__PURE__ */ N(n) ? (i.value = n, !0) : Reflect.set(e, t, n, r); } }; -function ln(e) { - return /* @__PURE__ */ Jt(e) ? e : new Proxy(e, cn); +function cn(e) { + return /* @__PURE__ */ qt(e) ? e : new Proxy(e, sn); +} +var ln = class { + constructor(e) { + this.__v_isRef = !0, this._value = void 0; + let t = this.dep = new et(), { get: n, set: r } = e(t.track.bind(t), t.trigger.bind(t)); + this._get = n, this._set = r; + } + get value() { + return this._value = this._get(); + } + set value(e) { + this._set(e); + } +}; +function un(e) { + return new ln(e); } // @__NO_SIDE_EFFECTS__ -function un(e) { +function dn(e) { let t = d(e) ? Array(e.length) : {}; - for (let n in e) t[n] = fn(e, n); + for (let n in e) t[n] = pn(e, n); return t; } -var dn = class { +var fn = class { constructor(e, t, n) { - this._object = e, this._defaultValue = n, this.__v_isRef = !0, this._value = void 0, this._key = _(t) ? t : String(t), this._raw = /* @__PURE__ */ j(e); + this._object = e, this._defaultValue = n, this.__v_isRef = !0, this._value = void 0, this._key = _(t) ? t : String(t), this._raw = /* @__PURE__ */ M(e); let r = !0, i = e; if (!d(e) || _(this._key) || !w(this._key)) do - r = !/* @__PURE__ */ Zt(i) || /* @__PURE__ */ Xt(i); + r = !/* @__PURE__ */ Xt(i) || /* @__PURE__ */ Yt(i); while (r && (i = i.__v_raw)); this._shallow = r; } get value() { let e = this._object[this._key]; - return this._shallow && (e = sn(e)), this._value = e === void 0 ? this._defaultValue : e; + return this._shallow && (e = on(e)), this._value = e === void 0 ? this._defaultValue : e; } set value(e) { - if (this._shallow && /* @__PURE__ */ M(this._raw[this._key])) { + if (this._shallow && /* @__PURE__ */ N(this._raw[this._key])) { let t = this._object[this._key]; - if (/* @__PURE__ */ M(t)) { + if (/* @__PURE__ */ N(t)) { t.value = e; return; } @@ -849,66 +865,66 @@ var dn = class { this._object[this._key] = e; } get dep() { - return lt(this._raw, this._key); + return ct(this._raw, this._key); } }; -function fn(e, t, n) { - return new dn(e, t, n); +function pn(e, t, n) { + return new fn(e, t, n); } -var pn = class { +var mn = class { constructor(e, t, n) { - this.fn = e, this.setter = t, this._value = void 0, this.dep = new tt(this), this.__v_isRef = !0, this.deps = void 0, this.depsTail = void 0, this.flags = 16, this.globalVersion = $e - 1, this.next = void 0, this.effect = this, this.__v_isReadonly = !t, this.isSSR = n; + this.fn = e, this.setter = t, this._value = void 0, this.dep = new et(this), this.__v_isRef = !0, this.deps = void 0, this.depsTail = void 0, this.flags = 16, this.globalVersion = Qe - 1, this.next = void 0, this.effect = this, this.__v_isReadonly = !t, this.isSSR = n; } notify() { - if (this.flags |= 16, !(this.flags & 8) && A !== this) return ze(this, !0), !0; + if (this.flags |= 16, !(this.flags & 8) && j !== this) return Re(this, !0), !0; } get value() { let e = this.dep.track(); - return Ge(this), e && (e.version = this.dep.version), this._value; + return We(this), e && (e.version = this.dep.version), this._value; } set value(e) { this.setter && this.setter(e); } }; // @__NO_SIDE_EFFECTS__ -function mn(e, t, n = !1) { +function hn(e, t, n = !1) { let r, i; - return h(e) ? r = e : (r = e.get, i = e.set), new pn(r, i, n); + return h(e) ? r = e : (r = e.get, i = e.set), new mn(r, i, n); } -var hn = {}, gn = /* @__PURE__ */ new WeakMap(), _n = void 0; -function vn(e, t = !1, n = _n) { +var gn = {}, _n = /* @__PURE__ */ new WeakMap(), vn = void 0; +function yn(e, t = !1, n = vn) { if (n) { - let t = gn.get(n); - t || gn.set(n, t = []), t.push(e); + let t = _n.get(n); + t || _n.set(n, t = []), t.push(e); } } -function yn(e, n, i = t) { - let { immediate: a, deep: o, once: s, scheduler: l, augmentJob: u, call: f } = i, p = (e) => o ? e : /* @__PURE__ */ Xt(e) || o === !1 || o === 0 ? bn(e, 1) : bn(e), m, g, _, v, y = !1, b = !1; - if (/* @__PURE__ */ M(e) ? (g = () => e.value, y = /* @__PURE__ */ Xt(e)) : /* @__PURE__ */ Jt(e) ? (g = () => p(e), y = !0) : d(e) ? (b = !0, y = e.some((e) => /* @__PURE__ */ Jt(e) || /* @__PURE__ */ Xt(e)), g = () => e.map((e) => { - if (/* @__PURE__ */ M(e)) return e.value; - if (/* @__PURE__ */ Jt(e)) return p(e); +function bn(e, n, i = t) { + let { immediate: a, deep: o, once: s, scheduler: l, augmentJob: u, call: f } = i, p = (e) => o ? e : /* @__PURE__ */ Yt(e) || o === !1 || o === 0 ? xn(e, 1) : xn(e), m, g, _, v, y = !1, b = !1; + if (/* @__PURE__ */ N(e) ? (g = () => e.value, y = /* @__PURE__ */ Yt(e)) : /* @__PURE__ */ qt(e) ? (g = () => p(e), y = !0) : d(e) ? (b = !0, y = e.some((e) => /* @__PURE__ */ qt(e) || /* @__PURE__ */ Yt(e)), g = () => e.map((e) => { + if (/* @__PURE__ */ N(e)) return e.value; + if (/* @__PURE__ */ qt(e)) return p(e); if (h(e)) return f ? f(e, 2) : e(); })) : g = h(e) ? n ? f ? () => f(e, 2) : e : () => { if (_) { - Xe(); + Ye(); try { _(); } finally { - Ze(); + Xe(); } } - let t = _n; - _n = m; + let t = vn; + vn = m; try { return f ? f(e, 3, [v]) : e(v); } finally { - _n = t; + vn = t; } } : r, n && o) { let e = g, t = o === !0 ? Infinity : o; - g = () => bn(e(), t); + g = () => xn(e(), t); } - let x = Me(), S = () => { + let x = je(), S = () => { m.stop(), x && x.active && c(x.effects, m); }; if (s && n) { @@ -921,72 +937,72 @@ function yn(e, n, i = t) { } }; } - let C = b ? Array(e.length).fill(hn) : hn, w = (e) => { + let C = b ? Array(e.length).fill(gn) : gn, w = (e) => { if (m.flags & 1 && (m.dirty || e)) { if (n) { let t = m.run(); - if (e || o || y || (b ? t.some((e, t) => oe(e, C[t])) : oe(t, C))) { - let e = _n; - Xe(); + if (e || o || y || (b ? t.some((e, t) => D(e, C[t])) : D(t, C))) { + let e = vn; + Ye(); try { - _ && _(), _n = m; + _ && _(), vn = m; let e = [ t, - C === hn ? void 0 : b && C[0] === hn ? [] : C, + C === gn ? void 0 : b && C[0] === gn ? [] : C, v ]; C = t, f ? f(n, 3, e) : n(...e); } finally { - _n = e, Ze(); + vn = e, Xe(); } } } else m.run(); } }; - return u && u(w), m = new Fe(g), m.scheduler = l ? () => l(w, !1) : w, v = (e) => vn(e, !1, m), _ = m.onStop = () => { - let e = gn.get(m); + return u && u(w), m = new Pe(g), m.scheduler = l ? () => l(w, !1) : w, v = (e) => yn(e, !1, m), _ = m.onStop = () => { + let e = _n.get(m); if (e) { if (f) f(e, 4); else for (let t of e) t(); - gn.delete(m); + _n.delete(m); } }, n ? a ? w(!0) : C = m.run() : l ? l(w.bind(null, !0), !0) : m.run(), S.pause = m.pause.bind(m), S.resume = m.resume.bind(m), S.stop = S, S; } -function bn(e, t = Infinity, n) { +function xn(e, t = Infinity, n) { if (t <= 0 || !v(e) || e.__v_skip || (n ||= /* @__PURE__ */ new Map(), (n.get(e) || 0) >= t)) return e; - if (n.set(e, t), t--, /* @__PURE__ */ M(e)) bn(e.value, t, n); - else if (d(e)) for (let r = 0; r < e.length; r++) bn(e[r], t, n); + if (n.set(e, t), t--, /* @__PURE__ */ N(e)) xn(e.value, t, n); + else if (d(e)) for (let r = 0; r < e.length; r++) xn(e[r], t, n); else if (p(e) || f(e)) e.forEach((e) => { - bn(e, t, n); + xn(e, t, n); }); else if (C(e)) { - for (let r in e) bn(e[r], t, n); - for (let r of Object.getOwnPropertySymbols(e)) Object.prototype.propertyIsEnumerable.call(e, r) && bn(e[r], t, n); + for (let r in e) xn(e[r], t, n); + for (let r of Object.getOwnPropertySymbols(e)) Object.prototype.propertyIsEnumerable.call(e, r) && xn(e[r], t, n); } return e; } // node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js -function xn(e, t, n, r) { +function Sn(e, t, n, r) { try { return r ? e(...r) : e(); } catch (e) { - Cn(e, t, n); + wn(e, t, n); } } -function Sn(e, t, n, r) { +function Cn(e, t, n, r) { if (h(e)) { - let i = xn(e, t, n, r); + let i = Sn(e, t, n, r); return i && y(i) && i.catch((e) => { - Cn(e, t, n); + wn(e, t, n); }), i; } if (d(e)) { let i = []; - for (let a = 0; a < e.length; a++) i.push(Sn(e[a], t, n, r)); + for (let a = 0; a < e.length; a++) i.push(Cn(e[a], t, n, r)); return i; } } -function Cn(e, n, r, i = !0) { +function wn(e, n, r, i = !0) { let a = n ? n.vnode : null, { errorHandler: o, throwUnhandledErrorInProduction: s } = n && n.appContext.config || t; if (n) { let t = n.parent, i = n.proxy, a = `https://vuejs.org/error-reference/#runtime-${r}`; @@ -998,136 +1014,136 @@ function Cn(e, n, r, i = !0) { t = t.parent; } if (o) { - Xe(), xn(o, null, 10, [ + Ye(), Sn(o, null, 10, [ e, i, a - ]), Ze(); + ]), Xe(); return; } } - wn(e, r, a, i, s); + Tn(e, r, a, i, s); } -function wn(e, t, n, r = !0, i = !1) { +function Tn(e, t, n, r = !0, i = !1) { if (i) throw e; console.error(e); } -var Tn = [], En = -1, Dn = [], On = null, kn = 0, An = /* @__PURE__ */ Promise.resolve(), jn = null; -function Mn(e) { - let t = jn || An; +var En = [], Dn = -1, On = [], kn = null, An = 0, jn = /* @__PURE__ */ Promise.resolve(), Mn = null; +function Nn(e) { + let t = Mn || jn; return e ? t.then(this ? e.bind(this) : e) : t; } -function Nn(e) { - let t = En + 1, n = Tn.length; +function Pn(e) { + let t = Dn + 1, n = En.length; for (; t < n;) { - let r = t + n >>> 1, i = Tn[r], a = Vn(i); + let r = t + n >>> 1, i = En[r], a = Hn(i); a < e || a === e && i.flags & 2 ? t = r + 1 : n = r; } return t; } -function Pn(e) { +function Fn(e) { if (!(e.flags & 1)) { - let t = Vn(e), n = Tn[Tn.length - 1]; - !n || !(e.flags & 2) && t >= Vn(n) ? Tn.push(e) : Tn.splice(Nn(t), 0, e), e.flags |= 1, Fn(); + let t = Hn(e), n = En[En.length - 1]; + !n || !(e.flags & 2) && t >= Hn(n) ? En.push(e) : En.splice(Pn(t), 0, e), e.flags |= 1, In(); } } -function Fn() { - jn ||= An.then(Hn); +function In() { + Mn ||= jn.then(Un); } -function In(e) { - if (!d(e)) On && e.id === -1 ? On.splice(kn + 1, 0, e) : e.flags & 1 || (Dn.push(e), e.flags |= 1); - else for (let t = 0; t < e.length; t++) Dn.push(e[t]); - Fn(); +function Ln(e) { + if (!d(e)) kn && e.id === -1 ? kn.splice(An + 1, 0, e) : e.flags & 1 || (On.push(e), e.flags |= 1); + else for (let t = 0; t < e.length; t++) On.push(e[t]); + In(); } -function Ln(e, t, n, r = En + 1) { - for (; r < Tn.length; r++) { - let n = Tn[r]; +function Rn(e, t, n, r = Dn + 1) { + for (; r < En.length; r++) { + let n = En[r]; if (n && n.flags & 2) { if (e && n.id !== e.uid || t !== void 0 && !(n.id >= t)) continue; - Tn.splice(r, 1), r = e ? r - 1 : En, n.flags & 4 && (n.flags &= -2), n(), n.flags & 4 || (n.flags &= -2); + En.splice(r, 1), r = e ? r - 1 : Dn, n.flags & 4 && (n.flags &= -2), n(), n.flags & 4 || (n.flags &= -2); } } } -function Rn(e, t, n = 0) { - if (Dn.length) { - let e = Dn, r = 0; +function zn(e, t, n = 0) { + if (On.length) { + let e = On, r = 0; if (t) { e = []; - for (let i = 0; i < Dn.length; i++) { - let a = Dn[i]; - (a.i === void 0 ? t.has(a) : !a.i || a.i.uid < n) ? Dn[r++] = a : e.push(a); + for (let i = 0; i < On.length; i++) { + let a = On[i]; + (a.i === void 0 ? t.has(a) : !a.i || a.i.uid < n) ? On[r++] = a : e.push(a); } } - let i = [...new Set(e)].sort((e, t) => Vn(e) - Vn(t)); - if (Dn.length = r, On) { - for (let e = 0; e < i.length; e++) On.push(i[e]); + let i = [...new Set(e)].sort((e, t) => Hn(e) - Hn(t)); + if (On.length = r, kn) { + for (let e = 0; e < i.length; e++) kn.push(i[e]); return; } - for (On = i, kn = 0; kn < On.length; kn++) { - let e = On[kn]; + for (kn = i, An = 0; An < kn.length; An++) { + let e = kn[An]; e.flags & 4 && (e.flags &= -2), e.flags & 8 || e(), e.flags &= -2; } - On = null, kn = 0; + kn = null, An = 0; } } -var zn = !1; -function Bn(e, t) { - if (zn) { +var Bn = !1; +function Vn(e, t) { + if (Bn) { e(); return; } - let n = t === void 0 ? void 0 : new Set(Dn); - e(), zn = !0; + let n = t === void 0 ? void 0 : new Set(On); + e(), Bn = !0; try { - Ln(void 0, t), Rn(void 0, n, t); + Rn(void 0, t), zn(void 0, n, t); } finally { - zn = !1; + Bn = !1; } } -var Vn = (e) => e.id == null ? e.flags & 2 ? -1 : Infinity : e.id; -function Hn(e) { +var Hn = (e) => e.id == null ? e.flags & 2 ? -1 : Infinity : e.id; +function Un(e) { try { - for (En = 0; En < Tn.length; En++) { - let e = Tn[En]; - e && !(e.flags & 8) && (e.flags & 4 && (e.flags &= -2), xn(e, e.i, e.i ? 15 : 14), e.flags & 4 || (e.flags &= -2)); + for (Dn = 0; Dn < En.length; Dn++) { + let e = En[Dn]; + e && !(e.flags & 8) && (e.flags & 4 && (e.flags &= -2), Sn(e, e.i, e.i ? 15 : 14), e.flags & 4 || (e.flags &= -2)); } } finally { - for (; En < Tn.length; En++) { - let e = Tn[En]; + for (; Dn < En.length; Dn++) { + let e = En[Dn]; e && (e.flags &= -2); } - En = -1, Tn.length = 0, Rn(e), jn = null, (Tn.length || Dn.length) && Hn(e); + Dn = -1, En.length = 0, zn(e), Mn = null, (En.length || On.length) && Un(e); } } -var N = null, Un = null; -function Wn(e) { - let t = N; - return N = e, Un = e && e.type.__scopeId || null, t; +var Wn = null, Gn = null; +function Kn(e) { + let t = Wn; + return Wn = e, Gn = e && e.type.__scopeId || null, t; } -function P(e, t = N, n) { +function P(e, t = Wn, n) { if (!t || e._n) return e; let r = (...n) => { - r._d && Ra(-1); - let i = Wn(t), a = Pa.length, o; + r._d && Ha(-1); + let i = Kn(t), a = Ra.length, o; try { o = e(...n); } finally { - for (let e = Pa.length; e > a; e--) Ia(); - Wn(i), r._d && Ra(1); + for (let e = Ra.length; e > a; e--) Ba(); + Kn(i), r._d && Ha(1); } return o; }; return r._n = !0, r._c = !0, r._d = !0, r; } -function Gn(e, n) { - if (N === null) return e; - let r = go(N), i = e.dirs ||= []; +function qn(e, n) { + if (Wn === null) return e; + let r = So(Wn), i = e.dirs ||= []; for (let e = 0; e < n.length; e++) { let [a, o, s, c = t] = n[e]; a && (h(a) && (a = { mounted: a, updated: a - }), a.deep && bn(o), i.push({ + }), a.deep && xn(o), i.push({ dir: a, instance: r, value: o, @@ -1138,75 +1154,78 @@ function Gn(e, n) { } return e; } -function Kn(e, t, n, r) { +function Jn(e, t, n, r) { let i = e.dirs, a = t && t.dirs; for (let o = 0; o < i.length; o++) { let s = i[o]; a && (s.oldValue = a[o].value); let c = s.dir[r]; - c && (Xe(), Sn(c, n, 8, [ + c && (Ye(), Cn(c, n, 8, [ e.el, s, e, t - ]), Ze()); + ]), Xe()); } } -function qn(e, t) { - if (G) { - let n = G.provides, r = G.parent && G.parent.provides; - r === n && (n = G.provides = Object.create(r)), n[e] = t; +function Yn(e, t) { + if (so) { + let n = so.provides, r = so.parent && so.parent.provides; + r === n && (n = so.provides = Object.create(r)), n[e] = t; } } -function Jn(e, t, n = !1) { - let r = no(); - if (r || Bi) { - let i = Bi ? Bi._context.provides : r ? r.parent == null || r.ce ? r.vnode.appContext && r.vnode.appContext.provides : r.parent.provides : void 0; +function Xn(e, t, n = !1) { + let r = co(); + if (r || Wi) { + let i = Wi ? Wi._context.provides : r ? r.parent == null || r.ce ? r.vnode.appContext && r.vnode.appContext.provides : r.parent.provides : void 0; if (i && e in i) return i[e]; if (arguments.length > 1) return n && h(t) ? t.call(r && r.proxy) : t; } } -function Yn() { - return !!(no() || Bi); +function Zn() { + return !!(co() || Wi); } -var Xn = /* @__PURE__ */ Symbol.for("v-scx"), Zn = () => Jn(Xn); -function Qn(e, t) { - return er(e, null, t); +var Qn = /* @__PURE__ */ Symbol.for("v-scx"), $n = () => Xn(Qn); +function er(e, t) { + return rr(e, null, t); } -function $n(e, t, n) { - return er(e, t, n); +function tr(e, t) { + return rr(e, null, { flush: "sync" }); } -function er(e, n, i = t) { +function nr(e, t, n) { + return rr(e, t, n); +} +function rr(e, n, i = t) { let { immediate: a, deep: o, flush: c, once: l } = i, u = s({}, i), d = n && a || !n && c !== "post", f; - if (co) { + if (ho) { if (c === "sync") { - let e = Zn(); + let e = $n(); f = e.__watcherHandles ||= []; } else if (!d) { let e = () => {}; return e.stop = r, e.resume = r, e.pause = r, e; } } - let p = G; - u.call = (e, t, n) => Sn(e, p, t, n); + let p = so; + u.call = (e, t, n) => Cn(e, p, t, n); let m = !1; c === "post" ? u.scheduler = (e) => { - e.i = p, va(e, p && p.suspense); + e.i = p, Ca(e, p && p.suspense); } : c !== "sync" && (m = !0, u.scheduler = (e, t) => { - t ? e() : Pn(e); + t ? e() : Fn(e); }), u.augmentJob = (e) => { n && (e.flags |= 4), m && (e.flags |= 2, p && (e.id = p.uid, e.i = p)); }; - let h = yn(e, n, u); - return co && (f ? f.push(h) : d && h()), h; + let h = bn(e, n, u); + return ho && (f ? f.push(h) : d && h()), h; } -function tr(e, t, n) { - let r = this.proxy, i = g(e) ? e.includes(".") ? nr(r, e) : () => r[e] : e.bind(r, r), a; +function ir(e, t, n) { + let r = this.proxy, i = g(e) ? e.includes(".") ? ar(r, e) : () => r[e] : e.bind(r, r), a; h(t) ? a = t : (a = t.handler, n = t); - let o = ao(this), s = er(i, a.bind(r), n); + let o = fo(this), s = rr(i, a.bind(r), n); return o(), s; } -function nr(e, t) { +function ar(e, t) { let n = t.split("."); return () => { let t = e; @@ -1214,71 +1233,71 @@ function nr(e, t) { return t; }; } -var rr = /* @__PURE__ */ new WeakMap(), ir = /* @__PURE__ */ Symbol("_vte"), ar = (e) => e.__isTeleport, or = (e) => e && (e.disabled || e.disabled === ""), sr = (e) => e && (e.defer || e.defer === ""), cr = (e) => typeof SVGElement < "u" && e instanceof SVGElement, lr = (e) => typeof MathMLElement == "function" && e instanceof MathMLElement, ur = (e, t) => { +var or = /* @__PURE__ */ new WeakMap(), sr = /* @__PURE__ */ Symbol("_vte"), cr = (e) => e.__isTeleport, lr = (e) => e && (e.disabled || e.disabled === ""), ur = (e) => e && (e.defer || e.defer === ""), dr = (e) => typeof SVGElement < "u" && e instanceof SVGElement, fr = (e) => typeof MathMLElement == "function" && e instanceof MathMLElement, pr = (e, t) => { let n = e && e.to; return g(n) ? t ? t(n) : null : n; -}, dr = { +}, mr = { name: "Teleport", __isTeleport: !0, process(e, t, n, r, i, a, o, s, c, l) { - let { mc: u, pc: d, pbc: f, o: { insert: p, querySelector: m, createText: h, createComment: g, parentNode: _ } } = l, v = or(t.props), { dynamicChildren: y } = t, b = (e, t, n) => { + let { mc: u, pc: d, pbc: f, o: { insert: p, querySelector: m, createText: h, createComment: g, parentNode: _ } } = l, v = lr(t.props), { dynamicChildren: y } = t, b = (e, t, n) => { e.shapeFlag & 16 && u(e.children, t, n, i, a, o, s, c); }, x = (e = t) => { - let n = or(e.props), r = e.target = ur(e.props, m), a = gr(r, e, h, p); - r && (o !== "svg" && cr(r) ? o = "svg" : o !== "mathml" && lr(r) && (o = "mathml"), i && i.isCE && (i.ce._teleportTargets || (i.ce._teleportTargets = /* @__PURE__ */ new Set())).add(r), n || (b(e, r, a), hr(e, !1))); + let n = lr(e.props), r = e.target = pr(e.props, m), a = yr(r, e, h, p); + r && (o !== "svg" && dr(r) ? o = "svg" : o !== "mathml" && fr(r) && (o = "mathml"), i && i.isCE && (i.ce._teleportTargets || (i.ce._teleportTargets = /* @__PURE__ */ new Set())).add(r), n || (b(e, r, a), vr(e, !1))); }, S = (e) => { let t = () => { - if (rr.get(e) === t) { - if (rr.delete(e), or(e.props)) { + if (or.get(e) === t) { + if (or.delete(e), lr(e.props)) { let t = _(e.el) || n; - b(e, t, e.anchor), hr(e, !0); + b(e, t, e.anchor), vr(e, !0); } x(e); } }; - rr.set(e, t), va(t, a); + or.set(e, t), Ca(t, a); }; if (e == null) { let e = t.el = h(""), i = t.anchor = h(""); - if (p(e, n, r), p(i, n, r), sr(t.props) || a && a.pendingBranch) { + if (p(e, n, r), p(i, n, r), ur(t.props) || a && a.pendingBranch) { S(t); return; } - v && (b(t, n, i), hr(t, !0)), x(); + v && (b(t, n, i), vr(t, !0)), x(); } else { t.el = e.el; - let r = t.anchor = e.anchor, u = rr.get(e); + let r = t.anchor = e.anchor, u = or.get(e); if (u) { - u.flags |= 8, rr.delete(e), S(t); + u.flags |= 8, or.delete(e), S(t); return; } t.targetStart = e.targetStart; - let p = t.target = e.target, h = t.targetAnchor = e.targetAnchor, g = or(e.props), _ = g ? n : p, b = g ? r : h; - if (o === "svg" || cr(p) ? o = "svg" : (o === "mathml" || lr(p)) && (o = "mathml"), y ? (f(e.dynamicChildren, y, _, i, a, o, s), wa(e, t, !0)) : c || d(e, t, _, b, i, a, o, s, !1), v) g ? t.props && e.props && t.props.to !== e.props.to && (t.props.to = e.props.to) : fr(t, n, r, l, 1); + let p = t.target = e.target, h = t.targetAnchor = e.targetAnchor, g = lr(e.props), _ = g ? n : p, b = g ? r : h; + if (o === "svg" || dr(p) ? o = "svg" : (o === "mathml" || fr(p)) && (o = "mathml"), y ? (f(e.dynamicChildren, y, _, i, a, o, s), ka(e, t, !0)) : c || d(e, t, _, b, i, a, o, s, !1), v) g ? t.props && e.props && t.props.to !== e.props.to && (t.props.to = e.props.to) : hr(t, n, r, l, 1); else if ((t.props && t.props.to) !== (e.props && e.props.to)) { - let e = ur(t.props, m); - e && (t.target = e, fr(t, e, null, l, 0)); - } else g && fr(t, p, h, l, 1); - hr(t, v); + let e = pr(t.props, m); + e && (t.target = e, hr(t, e, null, l, 0)); + } else g && hr(t, p, h, l, 1); + vr(t, v); } }, remove(e, t, n, { um: r, o: { remove: i } }, a) { - let { shapeFlag: o, children: s, anchor: c, targetStart: l, targetAnchor: u, target: d, props: f } = e, p = or(f), m = a || !p, h = rr.get(e); - if (h && (h.flags |= 8, rr.delete(e)), d && (i(l), i(u)), a && i(c), !h && (p || d) && o & 16) for (let e = 0; e < s.length; e++) { + let { shapeFlag: o, children: s, anchor: c, targetStart: l, targetAnchor: u, target: d, props: f } = e, p = lr(f), m = a || !p, h = or.get(e); + if (h && (h.flags |= 8, or.delete(e)), d && (i(l), i(u)), a && i(c), !h && (p || d) && o & 16) for (let e = 0; e < s.length; e++) { let i = s[e]; r(i, t, n, m, !!i.dynamicChildren); } }, - move: fr, - hydrate: pr + move: hr, + hydrate: gr }; -function fr(e, t, n, { o: { insert: r }, m: i }, a = 2) { +function hr(e, t, n, { o: { insert: r }, m: i }, a = 2) { a === 0 && (e.targetStart && r(e.targetStart, t, n), r(e.targetAnchor, t, n), n = e.targetAnchor); let { el: o, anchor: s, shapeFlag: c, children: l, props: u } = e, d = a === 2; - if (d && r(o, t, n), !rr.has(e) && (!d || or(u)) && c & 16) for (let e = 0; e < l.length; e++) i(l[e], t, n, 2); + if (d && r(o, t, n), !or.has(e) && (!d || lr(u)) && c & 16) for (let e = 0; e < l.length; e++) i(l[e], t, n, 2); d && r(s, t, n); } -function pr(e, t, n, r, i, a, { o: { nextSibling: o, parentNode: s, querySelector: c, insert: l, createText: u } }, d) { +function gr(e, t, n, r, i, a, { o: { nextSibling: o, parentNode: s, querySelector: c, insert: l, createText: u } }, d) { function f(e, n) { let r = n; for (; r;) { @@ -1295,15 +1314,15 @@ function pr(e, t, n, r, i, a, { o: { nextSibling: o, parentNode: s, querySelecto function p(e, t) { t.anchor = d(o(e), t, s(e), n, r, i, a); } - let m = t.target = ur(t.props, c), h = or(t.props); + let m = t.target = pr(t.props, c), h = lr(t.props); if (m) { let c = m._lpa || m.firstChild; - t.shapeFlag & 16 && (h ? (p(e, t), f(m, c), t.targetAnchor || gr(m, t, u, l, s(e) === m ? e : null)) : (t.anchor = o(e), f(m, c), t.targetAnchor || gr(m, t, u, l), d(c && o(c), t, m, n, r, i, a))), hr(t, h); + t.shapeFlag & 16 && (h ? (p(e, t), f(m, c), t.targetAnchor || yr(m, t, u, l, s(e) === m ? e : null)) : (t.anchor = o(e), f(m, c), t.targetAnchor || yr(m, t, u, l), d(c && o(c), t, m, n, r, i, a))), vr(t, h); } else h && t.shapeFlag & 16 && (p(e, t), t.targetStart = e, t.targetAnchor = o(e)); return t.anchor && o(t.anchor); } -var mr = dr; -function hr(e, t) { +var _r = mr; +function vr(e, t) { let n = e.ctx; if (n && n.ut) { let r, i; @@ -1311,64 +1330,64 @@ function hr(e, t) { n.ut(); } } -function gr(e, t, n, r, i = null) { +function yr(e, t, n, r, i = null) { let a = t.targetStart = n(""), o = t.targetAnchor = n(""); - return a[ir] = o, e && (r(a, e, i), r(o, e, i)), o; + return a[sr] = o, e && (r(a, e, i), r(o, e, i)), o; } -var _r = /* @__PURE__ */ Symbol("_leaveCb"), vr = /* @__PURE__ */ Symbol("_enterCb"); -function yr() { +var br = /* @__PURE__ */ Symbol("_leaveCb"), xr = /* @__PURE__ */ Symbol("_enterCb"); +function Sr() { let e = { isMounted: !1, isLeaving: !1, isUnmounting: !1, leavingVNodes: /* @__PURE__ */ new Map() }; - return Qr(() => { + return ti(() => { e.isMounted = !0; - }), ti(() => { + }), ii(() => { e.isUnmounting = !0; }), e; } -var br = [Function, Array], xr = { +var Cr = [Function, Array], wr = { mode: String, appear: Boolean, persisted: Boolean, - onBeforeEnter: br, - onEnter: br, - onAfterEnter: br, - onEnterCancelled: br, - onBeforeLeave: br, - onLeave: br, - onAfterLeave: br, - onLeaveCancelled: br, - onBeforeAppear: br, - onAppear: br, - onAfterAppear: br, - onAppearCancelled: br -}, Sr = { + onBeforeEnter: Cr, + onEnter: Cr, + onAfterEnter: Cr, + onEnterCancelled: Cr, + onBeforeLeave: Cr, + onLeave: Cr, + onAfterLeave: Cr, + onLeaveCancelled: Cr, + onBeforeAppear: Cr, + onAppear: Cr, + onAfterAppear: Cr, + onAppearCancelled: Cr +}, Tr = { name: "BaseTransition", - props: xr, + props: wr, setup(e, { slots: t }) { - let n = no(), r = yr(); + let n = co(), r = Sr(); return () => { - let i = t.default && Ar(t.default(), !0), a = i && i.length ? Cr(i) : n.subTree ? U() : void 0; + let i = t.default && Nr(t.default(), !0), a = i && i.length ? Er(i) : n.subTree ? W() : void 0; if (!a) return; - let o = /* @__PURE__ */ j(e), { mode: s } = o; - if (r.isLeaving) return Dr(a); - let c = Or(a); - if (!c) return Dr(a); - let l = Er(c, o, r, n, (e) => l = e); - c.type !== Ma && kr(c, l); - let u = n.subTree && Or(n.subTree); - if (u && u.type !== Ma && !Va(u, c) && jr(n.subTree)) { - let e = Er(u, o, r, n); - if (kr(u, e), s === "out-in" && c.type !== Ma) return r.isLeaving = !0, e.afterLeave = () => { + let o = /* @__PURE__ */ M(e), { mode: s } = o; + if (r.isLeaving) return Ar(a); + let c = jr(a); + if (!c) return Ar(a); + let l = kr(c, o, r, n, (e) => l = e); + c.type !== R && Mr(c, l); + let u = n.subTree && jr(n.subTree); + if (u && u.type !== R && !Ga(u, c) && Pr(n.subTree)) { + let e = kr(u, o, r, n); + if (Mr(u, e), s === "out-in" && c.type !== R) return r.isLeaving = !0, e.afterLeave = () => { r.isLeaving = !1, n.job.flags & 8 || n.update(), delete e.afterLeave, u = void 0; - }, Dr(a); - s === "in-out" && c.type !== Ma ? e.delayLeave = (e, t, n) => { - let i = Tr(r, u); - i[String(u.key)] = u, e[_r] = () => { - t(), e[_r] = void 0, delete l.delayedLeave, u = void 0; + }, Ar(a); + s === "in-out" && c.type !== R ? e.delayLeave = (e, t, n) => { + let i = Or(r, u); + i[String(u.key)] = u, e[br] = () => { + t(), e[br] = void 0, delete l.delayedLeave, u = void 0; }, l.delayedLeave = () => { n(), delete l.delayedLeave, u = void 0; }; @@ -1378,24 +1397,24 @@ var br = [Function, Array], xr = { }; } }; -function Cr(e) { +function Er(e) { let t = e[0]; if (e.length > 1) { - for (let n of e) if (n.type !== Ma) { + for (let n of e) if (n.type !== R) { t = n; break; } } return t; } -var wr = Sr; -function Tr(e, t) { +var Dr = Tr; +function Or(e, t) { let { leavingVNodes: n } = e, r = n.get(t.type); return r || (r = /* @__PURE__ */ Object.create(null), n.set(t.type, r)), r; } -function Er(e, t, n, r, i) { - let { appear: a, mode: o, persisted: s = !1, onBeforeEnter: c, onEnter: l, onAfterEnter: u, onEnterCancelled: f, onBeforeLeave: p, onLeave: m, onAfterLeave: h, onLeaveCancelled: g, onBeforeAppear: _, onAppear: v, onAfterAppear: y, onAppearCancelled: b } = t, x = String(e.key), S = Tr(n, e), C = (e, t) => { - e && Sn(e, r, 9, t); +function kr(e, t, n, r, i) { + let { appear: a, mode: o, persisted: s = !1, onBeforeEnter: c, onEnter: l, onAfterEnter: u, onEnterCancelled: f, onBeforeLeave: p, onLeave: m, onAfterLeave: h, onLeaveCancelled: g, onBeforeAppear: _, onAppear: v, onAfterAppear: y, onAppearCancelled: b } = t, x = String(e.key), S = Or(n, e), C = (e, t) => { + e && Cn(e, r, 9, t); }, w = (e, t) => { let n = t[1]; C(e, t), d(e) ? e.every((e) => e.length <= 1) && n() : e.length <= 1 && n(); @@ -1408,13 +1427,13 @@ function Er(e, t, n, r, i) { if (a) r = _ || c; else return; } - t[_r] && t[_r](!0); + t[br] && t[br](!0); let i = S[x]; - if (i && Va(e, i)) { - let e = i.el[_r]; + if (i && Ga(e, i)) { + let e = i.el[br]; if (!e) { - let t = jr(i); - e = t && t.el[_r]; + let t = Pr(i); + e = t && t.el[br]; } e && e(); } @@ -1428,35 +1447,35 @@ function Er(e, t, n, r, i) { else return; } let s = !1; - t[vr] = (e) => { - s || (s = !0, C(e ? o : i, [t]), ee.delayedLeave && ee.delayedLeave(), t[vr] = void 0); + t[xr] = (e) => { + s || (s = !0, C(e ? o : i, [t]), ee.delayedLeave && ee.delayedLeave(), t[xr] = void 0); }; - let c = t[vr].bind(null, !1); + let c = t[xr].bind(null, !1); r ? w(r, [t, c]) : c(); }, leave(t, r) { let i = String(e.key); - if (t[vr] && t[vr](!0), n.isUnmounting) return r(); + if (t[xr] && t[xr](!0), n.isUnmounting) return r(); C(p, [t]); let a = !1; - t[_r] = (n) => { - a || (a = !0, r(), C(n ? g : h, [t]), t[_r] = void 0, S[i] === e && delete S[i]); + t[br] = (n) => { + a || (a = !0, r(), C(n ? g : h, [t]), t[br] = void 0, S[i] === e && delete S[i]); }; - let o = t[_r].bind(null, !1); + let o = t[br].bind(null, !1); S[i] = e, m ? w(m, [t, o]) : o(); }, clone(e) { - let a = Er(e, t, n, r, i); + let a = kr(e, t, n, r, i); return i && i(a), a; } }; return ee; } -function Dr(e) { - if (Wr(e)) return e = Ka(e), e.children = null, e; +function Ar(e) { + if (qr(e)) return e = Xa(e), e.children = null, e; } -function Or(e) { - if (!Wr(e)) return ar(e.type) && e.children ? Cr(e.children) : e; +function jr(e) { + if (!qr(e)) return cr(e.type) && e.children ? Er(e.children) : e; if (e.component) return e.component.subTree; let { shapeFlag: t, children: n } = e; if (n) { @@ -1464,74 +1483,74 @@ function Or(e) { if (t & 32 && h(n.default)) return n.default(); } } -function kr(e, t) { +function Mr(e, t) { if (e.shapeFlag & 6 && e.component) { e.transition = t; let n = e.component.subTree; - kr(ar(n.type) && Or(n) || n, t); + Mr(cr(n.type) && jr(n) || n, t); } else if (e.shapeFlag & 128) e.ssContent.transition = t.clone(e.ssContent), e.ssFallback.transition = t.clone(e.ssFallback); else if (e.transition = t, e.type === L && d(e.children)) { - let n = qi(e.children, !1); - n && kr(n, t); + let n = Qi(e.children, !1); + n && Mr(n, t); } } -function Ar(e, t = !1, n) { +function Nr(e, t = !1, n) { let r = [], i = 0; for (let a = 0; a < e.length; a++) { let o = e[a], s = n == null ? o.key : String(n) + String(o.key == null ? a : o.key); - o.type === L ? (o.patchFlag & 128 && i++, r = r.concat(Ar(o.children, t, s))) : (t || o.type !== Ma) && r.push(s == null ? o : Ka(o, { key: s })); + o.type === L ? (o.patchFlag & 128 && i++, r = r.concat(Nr(o.children, t, s))) : (t || o.type !== R) && r.push(s == null ? o : Xa(o, { key: s })); } if (i > 1) for (let e = 0; e < r.length; e++) r[e].patchFlag = -2; return r; } -function jr(e) { - if (e.component) return jr(e.component.subTree); +function Pr(e) { + if (e.component) return Pr(e.component.subTree); if (e.type === L) { - let t = d(e.children) && qi(e.children, !1); - return t ? jr(t) : void 0; + let t = d(e.children) && Qi(e.children, !1); + return t ? Pr(t) : void 0; } - if (e.type !== Ma) return e; + if (e.type !== R) return e; } // @__NO_SIDE_EFFECTS__ -function Mr(e, t) { +function Fr(e, t) { return h(e) ? /* @__PURE__ */ s({ name: e.name }, t, { setup: e }) : e; } -function Nr() { - let e = no(); +function Ir() { + let e = co(); return e ? (e.appContext.config.idPrefix || "v") + "-" + e.ids[0] + e.ids[1]++ : ""; } -function Pr(e) { +function Lr(e) { e.ids = [ e.ids[0] + e.ids[2]++ + "-", 0, 0 ]; } -function Fr(e, t) { +function Rr(e, t) { let n; return !!((n = Object.getOwnPropertyDescriptor(e, t)) && !n.configurable); } -var Ir = /* @__PURE__ */ new WeakMap(); -function Lr(e, n, r, a, o = !1) { +var zr = /* @__PURE__ */ new WeakMap(); +function Br(e, n, r, a, o = !1) { if (d(e)) { - e.forEach((e, t) => Lr(e, n && (d(n) ? n[t] : n), r, a, o)); + e.forEach((e, t) => Br(e, n && (d(n) ? n[t] : n), r, a, o)); return; } - if (Vr(a) && !o) { - a.shapeFlag & 512 && a.type.__asyncResolved && a.component.subTree.component && Lr(e, n, r, a.component.subTree); + if (Wr(a) && !o) { + a.shapeFlag & 512 && a.type.__asyncResolved && a.component.subTree.component && Br(e, n, r, a.component.subTree); return; } - let s = a.shapeFlag & 4 ? go(a.component) : a.el, l = o ? null : s, { i: f, r: p } = e, m = n && n.r, _ = f.refs === t ? f.refs = {} : f.refs, v = f.setupState, y = /* @__PURE__ */ j(v), b = v === t ? i : (e) => !Fr(_, e) && u(y, e), x = (e, t) => !(t && Fr(_, t)); + let s = a.shapeFlag & 4 ? So(a.component) : a.el, l = o ? null : s, { i: f, r: p } = e, m = n && n.r, _ = f.refs === t ? f.refs = {} : f.refs, v = f.setupState, y = /* @__PURE__ */ M(v), b = v === t ? i : (e) => !Rr(_, e) && u(y, e), x = (e, t) => !(t && Rr(_, t)); if (m != null && m !== p) { - if (Rr(n), g(m)) _[m] = null, b(m) && (v[m] = null); - else if (/* @__PURE__ */ M(m)) { + if (Vr(n), g(m)) _[m] = null, b(m) && (v[m] = null); + else if (/* @__PURE__ */ N(m)) { let e = n; x(m, e.k) && (m.value = null), e.k && (_[e.k] = null); } } - if (h(p)) xn(p, f, 12, [l, _]); + if (h(p)) Sn(p, f, 12, [l, _]); else { - let t = g(p), n = /* @__PURE__ */ M(p); + let t = g(p), n = /* @__PURE__ */ N(p); if (t || n) { let i = () => { if (e.f) { @@ -1547,26 +1566,26 @@ function Lr(e, n, r, a, o = !1) { }; if (l) { let t = () => { - i(), Ir.delete(e); + i(), zr.delete(e); }; - t.id = -1, Ir.set(e, t), va(t, r); - } else Rr(e), i(); + t.id = -1, zr.set(e, t), Ca(t, r); + } else Vr(e), i(); } } } -function Rr(e) { - let t = Ir.get(e); - t && (t.flags |= 8, Ir.delete(e)); +function Vr(e) { + let t = zr.get(e); + t && (t.flags |= 8, zr.delete(e)); } -var zr = (e) => e.nodeType === 8; -fe().requestIdleCallback, fe().cancelIdleCallback; -function Br(e, t) { - if (zr(e) && e.data === "[") { +var Hr = (e) => e.nodeType === 8; +de().requestIdleCallback, de().cancelIdleCallback; +function Ur(e, t) { + if (Hr(e) && e.data === "[") { let n = 1, r = e.nextSibling; for (; r;) { if (r.nodeType === 1) { if (t(r) === !1) break; - } else if (zr(r)) { + } else if (Hr(r)) { if (r.data === "]") { if (--n === 0) break; } else r.data === "[" && n++; @@ -1575,9 +1594,9 @@ function Br(e, t) { } } else t(e); } -var Vr = (e) => !!e.type.__asyncLoader; +var Wr = (e) => !!e.type.__asyncLoader; // @__NO_SIDE_EFFECTS__ -function Hr(e) { +function Gr(e) { h(e) && (e = { loader: e }); let { loader: t, loadingComponent: n, errorComponent: r, delay: i = 200, hydrate: a, timeout: o, suspensible: s = !0, onError: c } = e, l = null, u, d = 0, f = () => (d++, l = null, p()), p = () => { let e; @@ -1588,7 +1607,7 @@ function Hr(e) { throw e; }).then((t) => e !== l && l ? l : (t && (t.__esModule || t[Symbol.toStringTag] === "Module") && (t = t.default), u = t, t))); }; - return /* @__PURE__ */ Mr({ + return /* @__PURE__ */ Fr({ name: "AsyncComponentWrapper", __asyncLoader: p, __asyncHydrate(e, t, n) { @@ -1597,7 +1616,7 @@ function Hr(e) { let o = () => { i || !e.parentNode || r && !e.isConnected || n(); }, s = a ? () => { - let n = a(o, (t) => Br(e, t)); + let n = a(o, (t) => Ur(e, t)); n && (t.bum ||= []).push(n); } : o; u ? s() : p().then(() => !t.isUnmounted && s()); @@ -1606,14 +1625,14 @@ function Hr(e) { return u; }, setup() { - let e = G; - if (Pr(e), u) return () => Ur(u, e); + let e = so; + if (Lr(e), u) return () => Kr(u, e); let t = (t) => { - l = null, Cn(t, e, 13, !r); + l = null, wn(t, e, 13, !r); }; - if (s && e.suspense || co) return p().then((t) => () => Ur(t, e)).catch((e) => (t(e), () => r ? H(r, { error: e }) : null)); - let a = /* @__PURE__ */ tn(!1), c = /* @__PURE__ */ tn(), d = /* @__PURE__ */ tn(!!i), f, m; - return ni(() => { + if (s && e.suspense || ho) return p().then((t) => () => Kr(t, e)).catch((e) => (t(e), () => r ? U(r, { error: e }) : null)); + let a = /* @__PURE__ */ en(!1), c = /* @__PURE__ */ en(), d = /* @__PURE__ */ en(!!i), f, m; + return ai(() => { f != null && clearTimeout(f), m != null && clearTimeout(m); }), i && (m = setTimeout(() => { e.isUnmounted || (d.value = !1); @@ -1623,29 +1642,29 @@ function Hr(e) { t(e), c.value = e; } }, o)), p().then(() => { - e.isUnmounted || (a.value = !0, e.parent && Wr(e.parent.vnode) && e.parent.update()); + e.isUnmounted || (a.value = !0, e.parent && qr(e.parent.vnode) && e.parent.update()); }).catch((n) => { e.isUnmounted ? l = null : (t(n), c.value = n); }), () => { - if (a.value && u) return Ur(u, e); - if (c.value && r) return H(r, { error: c.value }); - if (n && !d.value) return Ur(n, e); + if (a.value && u) return Kr(u, e); + if (c.value && r) return U(r, { error: c.value }); + if (n && !d.value) return Kr(n, e); }; } }); } -function Ur(e, t) { - let { ref: n, props: r, children: i, ce: a } = t.vnode, o = H(e, r, i); +function Kr(e, t) { + let { ref: n, props: r, children: i, ce: a } = t.vnode, o = U(e, r, i); return o.ref = n, o.ce = a, delete t.vnode.ce, o; } -var Wr = (e) => e.type.__isKeepAlive; -function Gr(e, t) { - qr(e, "a", t); +var qr = (e) => e.type.__isKeepAlive; +function Jr(e, t) { + Xr(e, "a", t); } -function Kr(e, t) { - qr(e, "da", t); +function Yr(e, t) { + Xr(e, "da", t); } -function qr(e, t, n = G) { +function Xr(e, t, n = so) { let r = e.__wdc ||= () => { let t = n; for (; t;) { @@ -1654,65 +1673,65 @@ function qr(e, t, n = G) { } return e(); }; - if (Yr(t, r, n), n) { + if (Qr(t, r, n), n) { let e = n.parent; - for (; e && e.parent;) Wr(e.parent.vnode) && Jr(r, t, n, e), e = e.parent; + for (; e && e.parent;) qr(e.parent.vnode) && Zr(r, t, n, e), e = e.parent; } } -function Jr(e, t, n, r) { - let i = Yr(t, e, r, !0); - ni(() => { +function Zr(e, t, n, r) { + let i = Qr(t, e, r, !0); + ai(() => { c(r[t], i); }, n); } -function Yr(e, t, n = G, r = !1) { +function Qr(e, t, n = so, r = !1) { if (n) { let i = n[e] || (n[e] = []), a = t.__weh ||= (...r) => { - Xe(); - let i = ao(n), a = Sn(t, n, e, r); - return i(), Ze(), a; + Ye(); + let i = fo(n), a = Cn(t, n, e, r); + return i(), Xe(), a; }; return r ? i.unshift(a) : i.push(a), a; } } -var Xr = (e) => (t, n = G) => { - co && e !== "sp" || Yr(e, (...e) => t(...e), n); -}, Zr = Xr("bm"), Qr = Xr("m"), $r = Xr("bu"), ei = Xr("u"), ti = Xr("bum"), ni = Xr("um"), ri = Xr("sp"), ii = Xr("rtg"), ai = Xr("rtc"); -function oi(e, t = G) { - Yr("ec", e, t); +var $r = (e) => (t, n = so) => { + ho && e !== "sp" || Qr(e, (...e) => t(...e), n); +}, ei = $r("bm"), ti = $r("m"), ni = $r("bu"), ri = $r("u"), ii = $r("bum"), ai = $r("um"), oi = $r("sp"), si = $r("rtg"), ci = $r("rtc"); +function li(e, t = so) { + Qr("ec", e, t); } -var si = "components", ci = "directives"; +var ui = "components", di = "directives"; function F(e, t) { - return fi(si, e, !0, t) || e; + return hi(ui, e, !0, t) || e; } -var li = /* @__PURE__ */ Symbol.for("v-ndc"); -function ui(e) { - return g(e) ? fi(si, e, !1) || e : e || li; +var fi = /* @__PURE__ */ Symbol.for("v-ndc"); +function pi(e) { + return g(e) ? hi(ui, e, !1) || e : e || fi; } -function di(e) { - return fi(ci, e); +function mi(e) { + return hi(di, e); } -function fi(e, t, n = !0, r = !1) { - let i = N || G; +function hi(e, t, n = !0, r = !1) { + let i = Wn || so; if (i) { let n = i.type; - if (e === si) { - let e = _o(n, !1); + if (e === ui) { + let e = Co(n, !1); if (e && (e === t || e === T(t) || e === ie(T(t)))) return n; } - let a = pi(i[e] || n[e], t) || pi(i.appContext[e], t); + let a = gi(i[e] || n[e], t) || gi(i.appContext[e], t); return !a && r ? n : a; } } -function pi(e, t) { +function gi(e, t) { return e && (e[t] || e[T(t)] || e[ie(T(t))]); } -function mi(e, t, n, r) { +function _i(e, t, n, r) { let i, a = n && n[r], o = d(e); if (o || g(e)) { - let n = o && /* @__PURE__ */ Jt(e), r = !1, s = !1; - n && (r = !/* @__PURE__ */ Xt(e), s = /* @__PURE__ */ Yt(e), e = dt(e)), i = Array(e.length); - for (let n = 0, o = e.length; n < o; n++) i[n] = t(r ? s ? en($t(e[n])) : $t(e[n]) : e[n], n, void 0, a && a[n]); + let n = o && /* @__PURE__ */ qt(e), r = !1, s = !1; + n && (r = !/* @__PURE__ */ Yt(e), s = /* @__PURE__ */ Jt(e), e = ut(e)), i = Array(e.length); + for (let n = 0, o = e.length; n < o; n++) i[n] = t(r ? s ? $t(Qt(e[n])) : Qt(e[n]) : e[n], n, void 0, a && a[n]); } else if (typeof e == "number") { if (!Number.isInteger(e) || e < 0) i = []; else { @@ -1732,7 +1751,7 @@ function mi(e, t, n, r) { } else i = []; return n && (n[r] = i), i; } -function hi(e, t) { +function vi(e, t) { for (let n = 0; n < t.length; n++) { let r = t[n]; if (d(r)) for (let t = 0; t < r.length; t++) e[r[t].name] = r[t].fn; @@ -1744,30 +1763,30 @@ function hi(e, t) { return e; } function I(e, t, n, r, i, a) { - if (n ??= {}, N.ce || N.parent && Vr(N.parent) && N.parent.ce) { + if (n ??= {}, Wn.ce || Wn.parent && Wr(Wn.parent) && Wn.parent.ce) { let e = a != null && n.key == null ? s({}, n, { key: a }) : n, i = Object.keys(e).length > 0; - return t !== "default" && (e.name = t), R(), B(L, null, [H("slot", e, r && r())], i ? -2 : 64); + return t !== "default" && (e.name = t), z(), V(L, null, [U("slot", e, r && r())], i ? -2 : 64); } let o = e[t]; o && o._c && (o._d = !1); - let c = Pa.length; - R(); + let c = Ra.length; + z(); let l; try { - let i = o && gi(o(n)), s = n.key || a || i && i.key; - l = B(L, { key: (s && !_(s) ? s : `_${t}`) + (!i && r ? "_fb" : "") }, i || (r ? r() : []), i && e._ === 1 ? 64 : -2); + let i = o && yi(o(n)), s = n.key || a || i && i.key; + l = V(L, { key: (s && !_(s) ? s : `_${t}`) + (!i && r ? "_fb" : "") }, i || (r ? r() : []), i && e._ === 1 ? 64 : -2); } catch (e) { - for (let e = Pa.length; e > c; e--) Ia(); + for (let e = Ra.length; e > c; e--) Ba(); throw e; } finally { o && o._c && (o._d = !0); } return !i && l.scopeId && (l.slotScopeIds = [l.scopeId + "-s"]), l; } -function gi(e) { - return e.some((e) => !Ba(e) || !(e.type === Ma || e.type === L && !gi(e.children))) ? e : null; +function yi(e) { + return e.some((e) => !Wa(e) || !(e.type === R || e.type === L && !yi(e.children))) ? e : null; } -var _i = (e) => e ? so(e) ? go(e) : _i(e.parent) : null, vi = /* @__PURE__ */ s(/* @__PURE__ */ Object.create(null), { +var bi = (e) => e ? mo(e) ? So(e) : bi(e.parent) : null, xi = /* @__PURE__ */ s(/* @__PURE__ */ Object.create(null), { $: (e) => e, $el: (e) => e.vnode.el, $data: (e) => e.data, @@ -1775,17 +1794,17 @@ var _i = (e) => e ? so(e) ? go(e) : _i(e.parent) : null, vi = /* @__PURE__ */ s( $attrs: (e) => e.attrs, $slots: (e) => e.slots, $refs: (e) => e.refs, - $parent: (e) => _i(e.parent), - $root: (e) => _i(e.root), + $parent: (e) => bi(e.parent), + $root: (e) => bi(e.root), $host: (e) => e.ce, $emit: (e) => e.emit, - $options: (e) => Di(e), + $options: (e) => ji(e), $forceUpdate: (e) => e.f ||= () => { - Pn(e.update); + Fn(e.update); }, - $nextTick: (e) => e.n ||= Mn.bind(e.proxy), - $watch: (e) => tr.bind(e) -}), yi = (e, n) => e !== t && !e.__isScriptSetup && u(e, n), bi = { + $nextTick: (e) => e.n ||= Nn.bind(e.proxy), + $watch: (e) => ir.bind(e) +}), Si = (e, n) => e !== t && !e.__isScriptSetup && u(e, n), Ci = { get({ _: e }, n) { if (n === "__v_skip") return !0; let { ctx: r, setupState: i, data: a, props: o, accessCache: s, type: c, appContext: l } = e; @@ -1797,48 +1816,51 @@ var _i = (e) => e ? so(e) ? go(e) : _i(e.parent) : null, vi = /* @__PURE__ */ s( case 4: return r[n]; case 3: return o[n]; } - else if (yi(i, n)) return s[n] = 1, i[n]; + else if (Si(i, n)) return s[n] = 1, i[n]; else if (a !== t && u(a, n)) return s[n] = 2, a[n]; else if (u(o, n)) return s[n] = 3, o[n]; else if (r !== t && u(r, n)) return s[n] = 4, r[n]; - else Si && (s[n] = 0); + else Ei && (s[n] = 0); } - let d = vi[n], f, p; - if (d) return n === "$attrs" && st(e.attrs, "get", ""), d(e); + let d = xi[n], f, p; + if (d) return n === "$attrs" && ot(e.attrs, "get", ""), d(e); if ((f = c.__cssModules) && (f = f[n])) return f; if (r !== t && u(r, n)) return s[n] = 4, r[n]; if (p = l.config.globalProperties, u(p, n)) return p[n]; }, set({ _: e }, n, r) { let { data: i, setupState: a, ctx: o } = e; - return yi(a, n) ? (a[n] = r, !0) : i !== t && u(i, n) ? (i[n] = r, !0) : u(e.props, n) || n[0] === "$" && n.slice(1) in e ? !1 : (o[n] = r, !0); + return Si(a, n) ? (a[n] = r, !0) : i !== t && u(i, n) ? (i[n] = r, !0) : u(e.props, n) || n[0] === "$" && n.slice(1) in e ? !1 : (o[n] = r, !0); }, has({ _: { data: e, setupState: n, accessCache: r, ctx: i, appContext: a, props: o, type: s } }, c) { let l; - return !!(r[c] || e !== t && c[0] !== "$" && u(e, c) || yi(n, c) || u(o, c) || u(i, c) || u(vi, c) || u(a.config.globalProperties, c) || (l = s.__cssModules) && l[c]); + return !!(r[c] || e !== t && c[0] !== "$" && u(e, c) || Si(n, c) || u(o, c) || u(i, c) || u(xi, c) || u(a.config.globalProperties, c) || (l = s.__cssModules) && l[c]); }, defineProperty(e, t, n) { return n.get == null ? u(n, "value") && this.set(e, t, n.value, null) : e._.accessCache[t] = 0, Reflect.defineProperty(e, t, n); } }; -function xi(e) { +function wi(e) { return d(e) ? e.reduce((e, t) => (e[t] = null, e), {}) : e; } -var Si = !0; -function Ci(e) { - let t = Di(e), n = e.proxy, i = e.ctx; - Si = !1, t.beforeCreate && Ti(t.beforeCreate, e, "bc"); - let { data: a, computed: o, methods: s, watch: c, provide: l, inject: u, created: f, beforeMount: p, mounted: m, beforeUpdate: g, updated: _, activated: y, deactivated: b, beforeDestroy: x, beforeUnmount: S, destroyed: C, unmounted: w, render: ee, renderTracked: te, renderTriggered: ne, errorCaptured: T, serverPrefetch: re, expose: E, inheritAttrs: ie, components: ae, directives: oe, filters: se } = t; - if (u && wi(u, i, null), s) for (let e in s) { +function Ti(e, t) { + return !e || !t ? e || t : d(e) && d(t) ? e.concat(t) : s({}, wi(e), wi(t)); +} +var Ei = !0; +function Di(e) { + let t = ji(e), n = e.proxy, i = e.ctx; + Ei = !1, t.beforeCreate && ki(t.beforeCreate, e, "bc"); + let { data: a, computed: o, methods: s, watch: c, provide: l, inject: u, created: f, beforeMount: p, mounted: m, beforeUpdate: g, updated: _, activated: y, deactivated: b, beforeDestroy: x, beforeUnmount: S, destroyed: C, unmounted: w, render: ee, renderTracked: te, renderTriggered: ne, errorCaptured: T, serverPrefetch: re, expose: E, inheritAttrs: ie, components: ae, directives: D, filters: oe } = t; + if (u && Oi(u, i, null), s) for (let e in s) { let t = s[e]; h(t) && (i[e] = t.bind(n)); } if (a) { let t = a.call(n, n); - v(t) && (e.data = /* @__PURE__ */ Wt(t)); + v(t) && (e.data = /* @__PURE__ */ Ut(t)); } - if (Si = !0, o) for (let e in o) { - let t = o[e], a = yo({ + if (Ei = !0, o) for (let e in o) { + let t = o[e], a = To({ get: h(t) ? t.bind(n, n) : h(t.get) ? t.get.bind(n, n) : r, set: !h(t) && h(t.set) ? t.set.bind(n) : r }); @@ -1849,18 +1871,18 @@ function Ci(e) { set: (e) => a.value = e }); } - if (c) for (let e in c) Ei(c[e], i, n, e); + if (c) for (let e in c) Ai(c[e], i, n, e); if (l) { let e = h(l) ? l.call(n) : l; Reflect.ownKeys(e).forEach((t) => { - qn(t, e[t]); + Yn(t, e[t]); }); } - f && Ti(f, e, "c"); - function ce(e, t) { + f && ki(f, e, "c"); + function se(e, t) { d(t) ? t.forEach((t) => e(t.bind(n))) : t && e(t.bind(n)); } - if (ce(Zr, p), ce(Qr, m), ce($r, g), ce(ei, _), ce(Gr, y), ce(Kr, b), ce(oi, T), ce(ai, te), ce(ii, ne), ce(ti, S), ce(ni, w), ce(ri, re), d(E)) { + if (se(ei, p), se(ti, m), se(ni, g), se(ri, _), se(Jr, y), se(Yr, b), se(li, T), se(ci, te), se(si, ne), se(ii, S), se(ai, w), se(oi, re), d(E)) { if (E.length) { let t = e.exposed ||= {}; E.forEach((e) => { @@ -1872,13 +1894,13 @@ function Ci(e) { }); } else e.exposed ||= {}; } - ee && e.render === r && (e.render = ee), ie != null && (e.inheritAttrs = ie), ae && (e.components = ae), oe && (e.directives = oe), re && Pr(e); + ee && e.render === r && (e.render = ee), ie != null && (e.inheritAttrs = ie), ae && (e.components = ae), D && (e.directives = D), re && Lr(e); } -function wi(e, t, n = r) { - d(e) && (e = Mi(e)); +function Oi(e, t, n = r) { + d(e) && (e = Ii(e)); for (let n in e) { let r = e[n], i; - i = v(r) ? "default" in r ? Jn(r.from || n, r.default, !0) : Jn(r.from || n) : Jn(r), /* @__PURE__ */ M(i) ? Object.defineProperty(t, n, { + i = v(r) ? "default" in r ? Xn(r.from || n, r.default, !0) : Xn(r.from || n) : Xn(r), /* @__PURE__ */ N(i) ? Object.defineProperty(t, n, { enumerable: !0, configurable: !0, get: () => i.value, @@ -1886,71 +1908,71 @@ function wi(e, t, n = r) { }) : t[n] = i; } } -function Ti(e, t, n) { - Sn(d(e) ? e.map((e) => e.bind(t.proxy)) : e.bind(t.proxy), t, n); +function ki(e, t, n) { + Cn(d(e) ? e.map((e) => e.bind(t.proxy)) : e.bind(t.proxy), t, n); } -function Ei(e, t, n, r) { - let i = r.includes(".") ? nr(n, r) : () => n[r]; +function Ai(e, t, n, r) { + let i = r.includes(".") ? ar(n, r) : () => n[r]; if (g(e)) { let n = t[e]; - h(n) && $n(i, n); - } else if (h(e)) $n(i, e.bind(n)); + h(n) && nr(i, n); + } else if (h(e)) nr(i, e.bind(n)); else if (v(e)) { - if (d(e)) e.forEach((e) => Ei(e, t, n, r)); + if (d(e)) e.forEach((e) => Ai(e, t, n, r)); else { let r = h(e.handler) ? e.handler.bind(n) : t[e.handler]; - h(r) && $n(i, r, e); + h(r) && nr(i, r, e); } } } -function Di(e) { +function ji(e) { let t = e.type, { mixins: n, extends: r } = t, { mixins: i, optionsCache: a, config: { optionMergeStrategies: o } } = e.appContext, s = a.get(t), c; - return s ? c = s : !i.length && !n && !r ? c = t : (c = {}, i.length && i.forEach((e) => Oi(c, e, o, !0)), Oi(c, t, o)), v(t) && a.set(t, c), c; + return s ? c = s : !i.length && !n && !r ? c = t : (c = {}, i.length && i.forEach((e) => Mi(c, e, o, !0)), Mi(c, t, o)), v(t) && a.set(t, c), c; } -function Oi(e, t, n, r = !1) { +function Mi(e, t, n, r = !1) { let { mixins: i, extends: a } = t; - a && Oi(e, a, n, !0), i && i.forEach((t) => Oi(e, t, n, !0)); + a && Mi(e, a, n, !0), i && i.forEach((t) => Mi(e, t, n, !0)); for (let i in t) if (!(r && i === "expose")) { - let r = ki[i] || n && n[i]; + let r = Ni[i] || n && n[i]; e[i] = r ? r(e[i], t[i]) : t[i]; } return e; } -var ki = { - data: Ai, - props: Fi, - emits: Fi, - methods: Pi, - computed: Pi, - beforeCreate: Ni, - created: Ni, - beforeMount: Ni, - mounted: Ni, - beforeUpdate: Ni, - updated: Ni, - beforeDestroy: Ni, - beforeUnmount: Ni, - destroyed: Ni, - unmounted: Ni, - activated: Ni, - deactivated: Ni, - errorCaptured: Ni, - serverPrefetch: Ni, - components: Pi, - directives: Pi, - watch: Ii, - provide: Ai, - inject: ji +var Ni = { + data: Pi, + props: zi, + emits: zi, + methods: Ri, + computed: Ri, + beforeCreate: Li, + created: Li, + beforeMount: Li, + mounted: Li, + beforeUpdate: Li, + updated: Li, + beforeDestroy: Li, + beforeUnmount: Li, + destroyed: Li, + unmounted: Li, + activated: Li, + deactivated: Li, + errorCaptured: Li, + serverPrefetch: Li, + components: Ri, + directives: Ri, + watch: Bi, + provide: Pi, + inject: Fi }; -function Ai(e, t) { +function Pi(e, t) { return t ? e ? function() { return s(h(e) ? e.call(this, this) : e, h(t) ? t.call(this, this) : t); } : t : e; } -function ji(e, t) { - return Pi(Mi(e), Mi(t)); +function Fi(e, t) { + return Ri(Ii(e), Ii(t)); } -function Mi(e) { +function Ii(e) { if (d(e)) { let t = {}; for (let n = 0; n < e.length; n++) t[e[n]] = e[n]; @@ -1958,23 +1980,23 @@ function Mi(e) { } return e; } -function Ni(e, t) { +function Li(e, t) { return e ? [...new Set([].concat(e, t))] : t; } -function Pi(e, t) { +function Ri(e, t) { return e ? s(/* @__PURE__ */ Object.create(null), e, t) : t; } -function Fi(e, t) { - return e ? d(e) && d(t) ? [.../* @__PURE__ */ new Set([...e, ...t])] : s(/* @__PURE__ */ Object.create(null), xi(e), xi(t ?? {})) : t; +function zi(e, t) { + return e ? d(e) && d(t) ? [.../* @__PURE__ */ new Set([...e, ...t])] : s(/* @__PURE__ */ Object.create(null), wi(e), wi(t ?? {})) : t; } -function Ii(e, t) { +function Bi(e, t) { if (!e) return t; if (!t) return e; let n = s(/* @__PURE__ */ Object.create(null), e); - for (let r in t) n[r] = Ni(e[r], t[r]); + for (let r in t) n[r] = Li(e[r], t[r]); return n; } -function Li() { +function Vi() { return { app: null, config: { @@ -1995,18 +2017,18 @@ function Li() { emitsCache: /* @__PURE__ */ new WeakMap() }; } -var Ri = 0; -function zi(e, t) { +var Hi = 0; +function Ui(e, t) { return function(n, r = null) { h(n) || (n = s({}, n)), r != null && !v(r) && (r = null); - let i = Li(), a = /* @__PURE__ */ new WeakSet(), o = [], c = !1, l = i.app = { - _uid: Ri++, + let i = Vi(), a = /* @__PURE__ */ new WeakSet(), o = [], c = !1, l = i.app = { + _uid: Hi++, _component: n, _props: r, _container: null, _context: i, _instance: null, - version: xo, + version: Do, get config() { return i.config; }, @@ -2025,93 +2047,122 @@ function zi(e, t) { }, mount(a, o, s) { if (!c) { - let u = l._ceVNode || H(n, r); - return u.appContext = i, s === !0 ? s = "svg" : s === !1 && (s = void 0), o && t ? t(u, a) : e(u, a, s), c = !0, l._container = a, a.__vue_app__ = l, go(u.component); + let u = l._ceVNode || U(n, r); + return u.appContext = i, s === !0 ? s = "svg" : s === !1 && (s = void 0), o && t ? t(u, a) : e(u, a, s), c = !0, l._container = a, a.__vue_app__ = l, So(u.component); } }, onUnmount(e) { o.push(e); }, unmount() { - c && (Sn(o, l._instance, 16), e(null, l._container), delete l._container.__vue_app__); + c && (Cn(o, l._instance, 16), e(null, l._container), delete l._container.__vue_app__); }, provide(e, t) { return i.provides[e] = t, l; }, runWithContext(e) { - let t = Bi; - Bi = l; + let t = Wi; + Wi = l; try { return e(); } finally { - Bi = t; + Wi = t; } } }; return l; }; } -var Bi = null, Vi = (e, t) => t === "modelValue" || t === "model-value" ? e.modelModifiers : e[`${t}Modifiers`] || e[`${T(t)}Modifiers`] || e[`${E(t)}Modifiers`]; -function Hi(e, n, ...r) { +var Wi = null; +function Gi(e, n, r = t) { + let i = co(), a = T(n), o = E(n), s = Ki(e, a), c = un((s, c) => { + let l, u = t, d; + return tr(() => { + let t = e[a]; + D(l, t) && (l = t, c()); + }), { + get() { + return s(), r.get ? r.get(l) : l; + }, + set(e) { + let s = r.set ? r.set(e) : e; + if (!D(s, l) && !(u !== t && D(e, u))) return; + let f = i.vnode.props, p = !!(f && (n in f || a in f || o in f) && (`onUpdate:${n}` in f || `onUpdate:${a}` in f || `onUpdate:${o}` in f)); + p || (l = e, c()), i.emit(`update:${n}`, s), D(e, u) && (D(e, s) && !D(s, d) || p && u !== t && !D(s, l)) && c(), u = e, d = s; + } + }; + }); + return c[Symbol.iterator] = () => { + let e = 0; + return { next() { + return e < 2 ? { + value: e++ ? s || t : c, + done: !1 + } : { done: !0 }; + } }; + }, c; +} +var Ki = (e, t) => t === "modelValue" || t === "model-value" ? e.modelModifiers : e[`${t}Modifiers`] || e[`${T(t)}Modifiers`] || e[`${E(t)}Modifiers`]; +function qi(e, n, ...r) { if (e.isUnmounted) return; - let i = e.vnode.props || t, a = r, o = n.startsWith("update:"), s = o && Vi(i, n.slice(7)); - s && (s.trim && (a = r.map((e) => g(e) ? e.trim() : e)), s.number && (a = a.map(le))); + let i = e.vnode.props || t, a = r, o = n.startsWith("update:"), s = o && Ki(i, n.slice(7)); + s && (s.trim && (a = r.map((e) => g(e) ? e.trim() : e)), s.number && (a = a.map(ce))); let c, l = i[c = ae(n)] || i[c = ae(T(n))]; - !l && o && (l = i[c = ae(E(n))]), l && Sn(l, e, 6, a); + !l && o && (l = i[c = ae(E(n))]), l && Cn(l, e, 6, a); let u = i[c + "Once"]; if (u) { if (!e.emitted) e.emitted = {}; else if (e.emitted[c]) return; - e.emitted[c] = !0, Sn(u, e, 6, a); + e.emitted[c] = !0, Cn(u, e, 6, a); } } -var Ui = /* @__PURE__ */ new WeakMap(); -function Wi(e, t, n = !1) { - let r = n ? Ui : t.emitsCache, i = r.get(e); +var Ji = /* @__PURE__ */ new WeakMap(); +function Yi(e, t, n = !1) { + let r = n ? Ji : t.emitsCache, i = r.get(e); if (i !== void 0) return i; let a = e.emits, o = {}, c = !1; if (!h(e)) { let r = (e) => { - let n = Wi(e, t, !0); + let n = Yi(e, t, !0); n && (c = !0, s(o, n)); }; !n && t.mixins.length && t.mixins.forEach(r), e.extends && r(e.extends), e.mixins && e.mixins.forEach(r); } return !a && !c ? (v(e) && r.set(e, null), null) : (d(a) ? a.forEach((e) => o[e] = null) : s(o, a), v(e) && r.set(e, o), o); } -function Gi(e, t) { +function Xi(e, t) { return !e || !a(t) ? !1 : (t = t.slice(2), t = t === "Once" ? t : t.replace(/Once$/, ""), u(e, t[0].toLowerCase() + t.slice(1)) || u(e, E(t)) || u(e, t)); } -function Ki(e) { - let { type: t, vnode: n, proxy: r, withProxy: i, propsOptions: [a], slots: s, attrs: c, emit: l, render: u, renderCache: d, props: f, data: p, setupState: m, ctx: h, inheritAttrs: g } = e, _ = Wn(e), v, y; +function Zi(e) { + let { type: t, vnode: n, proxy: r, withProxy: i, propsOptions: [a], slots: s, attrs: c, emit: l, render: u, renderCache: d, props: f, data: p, setupState: m, ctx: h, inheritAttrs: g } = e, _ = Kn(e), v, y; try { if (n.shapeFlag & 4) { let e = i || r, t = e; - v = Ja(u.call(t, e, d, f, m, p, h)), y = c; + v = $a(u.call(t, e, d, f, m, p, h)), y = c; } else { let e = t; - v = Ja(e.length > 1 ? e(f, { + v = $a(e.length > 1 ? e(f, { attrs: c, slots: s, emit: l - }) : e(f, null)), y = t.props ? c : Ji(c); + }) : e(f, null)), y = t.props ? c : $i(c); } } catch (t) { - Pa.length = 0, Cn(t, e, 1), v = H(Ma); + Ra.length = 0, wn(t, e, 1), v = U(R); } let b = v; if (y && g !== !1) { let e = Object.keys(y), { shapeFlag: t } = b; - e.length && t & 7 && (a && e.some(o) && (y = Yi(y, a)), b = Ka(b, y, !1, !0)); + e.length && t & 7 && (a && e.some(o) && (y = ea(y, a)), b = Xa(b, y, !1, !0)); } - return n.dirs && (b = Ka(b, null, !1, !0), b.dirs = b.dirs ? b.dirs.concat(n.dirs) : n.dirs), n.transition && kr(ar(b.type) && Or(b) || b, n.transition), v = b, Wn(_), v; + return n.dirs && (b = Xa(b, null, !1, !0), b.dirs = b.dirs ? b.dirs.concat(n.dirs) : n.dirs), n.transition && Mr(cr(b.type) && jr(b) || b, n.transition), v = b, Kn(_), v; } -function qi(e, t = !0) { +function Qi(e, t = !0) { let n; for (let t = 0; t < e.length; t++) { let r = e[t]; - if (Ba(r)) { - if (r.type !== Ma || r.children === "v-if") { + if (Wa(r)) { + if (r.type !== R || r.children === "v-if") { if (n) return; n = r; } @@ -2119,45 +2170,45 @@ function qi(e, t = !0) { } return n; } -var Ji = (e) => { +var $i = (e) => { let t; for (let n in e) (n === "class" || n === "style" || a(n)) && ((t ||= {})[n] = e[n]); return t; -}, Yi = (e, t) => { +}, ea = (e, t) => { let n = {}; for (let r in e) o(r) && r.slice(9) in t || (n[r] = e[r]); return n; }; -function Xi(e, t, n) { +function ta(e, t, n) { let { props: r, children: i, component: a } = e, { props: o, children: s, patchFlag: c } = t, l = a.emitsOptions; if (t.dirs || t.transition) return !0; if (n && c >= 0) { if (c & 1024) return !0; - if (c & 16) return r ? Zi(r, o, l) : !!o; + if (c & 16) return r ? na(r, o, l) : !!o; if (c & 8) { let e = t.dynamicProps; for (let t = 0; t < e.length; t++) { let n = e[t]; - if (Qi(o, r, n) && !Gi(l, n)) return !0; + if (ra(o, r, n) && !Xi(l, n)) return !0; } } - } else return (i || s) && (!s || !s.$stable) ? !0 : r === o ? !1 : r ? !o || Zi(r, o, l) : !!o; + } else return (i || s) && (!s || !s.$stable) ? !0 : r === o ? !1 : r ? !o || na(r, o, l) : !!o; return !1; } -function Zi(e, t, n) { +function na(e, t, n) { let r = Object.keys(t); if (r.length !== Object.keys(e).length) return !0; for (let i = 0; i < r.length; i++) { let a = r[i]; - if (!u(e, a) || Qi(t, e, a) && !Gi(n, a)) return !0; + if (!u(e, a) || ra(t, e, a) && !Xi(n, a)) return !0; } return !1; } -function Qi(e, t, n) { +function ra(e, t, n) { let r = e[n], i = t[n]; - return n === "style" && v(r) && v(i) ? !Te(r, i) : r !== i; + return n === "style" && v(r) && v(i) ? !we(r, i) : r !== i; } -function $i({ vnode: e, parent: t, suspense: n }, r) { +function ia({ vnode: e, parent: t, suspense: n }, r) { for (; t;) { let n = t.subTree; if (n.suspense && n.suspense.activeBranch === e && (n.suspense.vnode.el = n.el = r, e = n), n === e) (e = t.vnode).el = r, t = t.parent; @@ -2165,56 +2216,56 @@ function $i({ vnode: e, parent: t, suspense: n }, r) { } n && n.activeBranch === e && (n.vnode.el = r); } -var ea = {}, ta = () => Object.create(ea), na = (e) => Object.getPrototypeOf(e) === ea; -function ra(e, t, n, r = !1) { - let i = {}, a = ta(); - e.propsDefaults = /* @__PURE__ */ Object.create(null), aa(e, t, i, a); +var aa = {}, oa = () => Object.create(aa), sa = (e) => Object.getPrototypeOf(e) === aa; +function ca(e, t, n, r = !1) { + let i = {}, a = oa(); + e.propsDefaults = /* @__PURE__ */ Object.create(null), ua(e, t, i, a); for (let t in e.propsOptions[0]) t in i || (i[t] = void 0); - e.props = n ? r ? i : /* @__PURE__ */ Gt(i) : e.type.props ? i : a, e.attrs = a; + e.props = n ? r ? i : /* @__PURE__ */ Wt(i) : e.type.props ? i : a, e.attrs = a; } -function ia(e, t, n, r) { - let { props: i, attrs: a, vnode: { patchFlag: o } } = e, s = /* @__PURE__ */ j(i), [c] = e.propsOptions, l = !1; +function la(e, t, n, r) { + let { props: i, attrs: a, vnode: { patchFlag: o } } = e, s = /* @__PURE__ */ M(i), [c] = e.propsOptions, l = !1; if ((r || o > 0) && !(o & 16)) { if (o & 8) { let n = e.vnode.dynamicProps; for (let r = 0; r < n.length; r++) { let o = n[r]; - if (Gi(e.emitsOptions, o)) continue; + if (Xi(e.emitsOptions, o)) continue; let d = t[o]; if (c) { if (u(a, o)) d !== a[o] && (a[o] = d, l = !0); else { let t = T(o); - i[t] = oa(c, s, t, d, e, !1); + i[t] = da(c, s, t, d, e, !1); } } else d !== a[o] && (a[o] = d, l = !0); } } } else { - aa(e, t, i, a) && (l = !0); + ua(e, t, i, a) && (l = !0); let r; - for (let a in s) t && (u(t, a) || (r = E(a)) !== a && u(t, r)) || (c ? n && (n[a] !== void 0 || n[r] !== void 0) && (i[a] = oa(c, s, a, void 0, e, !0)) : delete i[a]); + for (let a in s) t && (u(t, a) || (r = E(a)) !== a && u(t, r)) || (c ? n && (n[a] !== void 0 || n[r] !== void 0) && (i[a] = da(c, s, a, void 0, e, !0)) : delete i[a]); if (a !== s) for (let e in a) t && u(t, e) || (delete a[e], l = !0); } - l && ct(e.attrs, "set", ""); + l && st(e.attrs, "set", ""); } -function aa(e, n, r, i) { +function ua(e, n, r, i) { let [a, o] = e.propsOptions, s = !1, c; if (n) for (let t in n) { if (ee(t)) continue; let l = n[t], d; - a && u(a, d = T(t)) ? !o || !o.includes(d) ? r[d] = l : (c ||= {})[d] = l : Gi(e.emitsOptions, t) || t in i && l === i[t] || (i[t] = l, s = !0); + a && u(a, d = T(t)) ? !o || !o.includes(d) ? r[d] = l : (c ||= {})[d] = l : Xi(e.emitsOptions, t) || t in i && l === i[t] || (i[t] = l, s = !0); } if (o) { - let n = /* @__PURE__ */ j(r), i = c || t; + let n = /* @__PURE__ */ M(r), i = c || t; for (let t = 0; t < o.length; t++) { let s = o[t]; - r[s] = oa(a, n, s, i[s], e, !u(i, s)); + r[s] = da(a, n, s, i[s], e, !u(i, s)); } } return s; } -function oa(e, t, n, r, i, a) { +function da(e, t, n, r, i, a) { let o = e[n]; if (o != null) { let e = u(o, "default"); @@ -2224,7 +2275,7 @@ function oa(e, t, n, r, i, a) { let { propsDefaults: a } = i; if (n in a) r = a[n]; else { - let o = ao(i); + let o = fo(i); r = a[n] = e.call(null, t), o(); } } else r = e; @@ -2234,15 +2285,15 @@ function oa(e, t, n, r, i, a) { } return r; } -var sa = /* @__PURE__ */ new WeakMap(); -function ca(e, r, i = !1) { - let a = i ? sa : r.propsCache, o = a.get(e); +var fa = /* @__PURE__ */ new WeakMap(); +function pa(e, r, i = !1) { + let a = i ? fa : r.propsCache, o = a.get(e); if (o) return o; let c = e.props, l = {}, f = [], p = !1; if (!h(e)) { let t = (e) => { p = !0; - let [t, n] = ca(e, r, !0); + let [t, n] = pa(e, r, !0); s(l, t), n && f.push(...n); }; !i && r.mixins.length && r.mixins.forEach(t), e.extends && t(e.extends), e.mixins && e.mixins.forEach(t); @@ -2250,11 +2301,11 @@ function ca(e, r, i = !1) { if (!c && !p) return v(e) && a.set(e, n), n; if (d(c)) for (let e = 0; e < c.length; e++) { let n = T(c[e]); - la(n) && (l[n] = t); + ma(n) && (l[n] = t); } else if (c) for (let e in c) { let t = T(e); - if (la(t)) { + if (ma(t)) { let n = c[e], r = l[t] = d(n) || h(n) ? { type: n } : s({}, n), i = r.type, a = !1, o = !0; if (d(i)) for (let e = 0; e < i.length; ++e) { let t = i[e], n = h(t) && t.name; @@ -2271,69 +2322,69 @@ function ca(e, r, i = !1) { let m = [l, f]; return v(e) && a.set(e, m), m; } -function la(e) { +function ma(e) { return e[0] !== "$" && !ee(e); } -var ua = (e) => e === "_" || e === "_ctx" || e === "$stable", da = (e) => d(e) ? e.map(Ja) : [Ja(e)], fa = (e, t, n) => { +var ha = (e) => e === "_" || e === "_ctx" || e === "$stable", ga = (e) => d(e) ? e.map($a) : [$a(e)], _a = (e, t, n) => { if (t._n) return t; - let r = P((...e) => da(t(...e)), n); + let r = P((...e) => ga(t(...e)), n); return r._c = !1, r; -}, pa = (e, t, n) => { +}, va = (e, t, n) => { let r = e._ctx; for (let n in e) { - if (ua(n)) continue; + if (ha(n)) continue; let i = e[n]; - if (h(i)) t[n] = fa(n, i, r); + if (h(i)) t[n] = _a(n, i, r); else if (i != null) { - let e = da(i); + let e = ga(i); t[n] = () => e; } } -}, ma = (e, t) => { - let n = da(t); +}, ya = (e, t) => { + let n = ga(t); e.slots.default = () => n; -}, ha = (e, t, n) => { - for (let r in t) (n || !ua(r)) && (e[r] = t[r]); -}, ga = (e, t, n) => { - let r = e.slots = ta(); +}, ba = (e, t, n) => { + for (let r in t) (n || !ha(r)) && (e[r] = t[r]); +}, xa = (e, t, n) => { + let r = e.slots = oa(); if (e.vnode.shapeFlag & 32) { let e = t._; - e ? (ha(r, t, n), n && ce(r, "_", e, !0)) : pa(t, r); - } else t && ma(e, t); -}, _a = (e, n, r) => { + e ? (ba(r, t, n), n && se(r, "_", e, !0)) : va(t, r); + } else t && ya(e, t); +}, Sa = (e, n, r) => { let { vnode: i, slots: a } = e, o = !0, s = t; if (i.shapeFlag & 32) { let e = n._; - e ? r && e === 1 ? o = !1 : ha(a, n, r) : (o = !n.$stable, pa(n, a)), s = n; - } else n && (ma(e, n), s = { default: 1 }); - if (o) for (let e in a) !ua(e) && s[e] == null && delete a[e]; -}, va = Aa; -function ya(e) { - return ba(e); + e ? r && e === 1 ? o = !1 : ba(a, n, r) : (o = !n.$stable, va(n, a)), s = n; + } else n && (ya(e, n), s = { default: 1 }); + if (o) for (let e in a) !ha(e) && s[e] == null && delete a[e]; +}, Ca = Fa; +function wa(e) { + return Ta(e); } -function ba(e, i) { - let a = fe(); +function Ta(e, i) { + let a = de(); a.__VUE__ = !0; let { insert: o, remove: s, patchProp: c, createElement: l, createText: u, createComment: d, setText: f, setElementText: p, parentNode: m, nextSibling: h, setScopeId: g = r, insertStaticContent: _ } = e, v = (e, t, r, i = null, a = null, o = null, s = void 0, c = null, l = !!t.dynamicChildren) => { if (e === t) return; - e && !Va(e, t) && (i = xe(e), _e(e, a, o, !0), e = null), t.patchFlag === -2 && (l = !1, t.dynamicChildren = null), t.dynamicChildren && e && e.dynamicChildren && e.dynamicChildren.hasOnce && (t.dynamicChildren === n && (t.dynamicChildren = []), t.dynamicChildren.hasOnce = !0); + e && !Ga(e, t) && (i = be(e), ge(e, a, o, !0), e = null), t.patchFlag === -2 && (l = !1, t.dynamicChildren = null), t.dynamicChildren && e && e.dynamicChildren && e.dynamicChildren.hasOnce && (t.dynamicChildren === n && (t.dynamicChildren = []), t.dynamicChildren.hasOnce = !0); let { type: u, ref: d, shapeFlag: f } = t; switch (u) { - case ja: + case Ia: y(e, t, r, i); break; - case Ma: + case R: b(e, t, r, i); break; - case Na: + case La: e ?? x(t, r, i, s); break; case L: ae(e, t, r, i, a, o, s, c, l); break; - default: f & 1 ? w(e, t, r, i, a, o, s, c, l) : f & 6 ? oe(e, t, r, i, a, o, s, c, l) : (f & 64 || f & 128) && u.process(e, t, r, i, a, o, s, c, l, Ce); + default: f & 1 ? w(e, t, r, i, a, o, s, c, l) : f & 6 ? D(e, t, r, i, a, o, s, c, l) : (f & 64 || f & 128) && u.process(e, t, r, i, a, o, s, c, l, Se); } - d != null && a ? Lr(d, e && e.ref, o, t || e, !t) : d == null && e && e.ref != null && Lr(e.ref, null, o, e, !0); + d != null && a ? Br(d, e && e.ref, o, t || e, !t) : d == null && e && e.ref != null && Br(e.ref, null, o, e, !0); }, y = (e, t, n, r) => { if (e == null) o(t.el = u(t.children), n, r); else { @@ -2364,36 +2415,36 @@ function ba(e, i) { } }, te = (e, t, n, r, i, a, s, u) => { let d, f, { props: m, shapeFlag: h, transition: g, dirs: _ } = e; - if (d = e.el = l(e.type, a, m && m.is, m), h & 8 ? p(d, e.children) : h & 16 && T(e.children, d, null, r, i, xa(e, a), s, u), _ && Kn(e, null, r, "created"), ne(d, e, e.scopeId, s, r), m) { + if (d = e.el = l(e.type, a, m && m.is, m), h & 8 ? p(d, e.children) : h & 16 && T(e.children, d, null, r, i, Ea(e, a), s, u), _ && Jn(e, null, r, "created"), ne(d, e, e.scopeId, s, r), m) { for (let e in m) e !== "value" && !ee(e) && c(d, e, null, m[e], a, r); - "value" in m && c(d, "value", null, m.value, a), (f = m.onVnodeBeforeMount) && Za(f, r, e); + "value" in m && c(d, "value", null, m.value, a), (f = m.onVnodeBeforeMount) && no(f, r, e); } - _ && Kn(e, null, r, "beforeMount"); - let v = Ca(i, g); - v && g.beforeEnter(d), o(d, t, n), ((f = m && m.onVnodeMounted) || v || _) && va(() => { + _ && Jn(e, null, r, "beforeMount"); + let v = Oa(i, g); + v && g.beforeEnter(d), o(d, t, n), ((f = m && m.onVnodeMounted) || v || _) && Ca(() => { try { - f && Za(f, r, e), v && g.enter(d), _ && Kn(e, null, r, "mounted"); + f && no(f, r, e), v && g.enter(d), _ && Jn(e, null, r, "mounted"); } finally {} }, i); }, ne = (e, t, n, r, i) => { if (n && g(e, n), r) for (let t = 0; t < r.length; t++) g(e, r[t]); if (i) { let n = i.subTree; - if (t === n || ka(n.type) && (n.ssContent === t || n.ssFallback === t)) { + if (t === n || Pa(n.type) && (n.ssContent === t || n.ssFallback === t)) { let t = i.vnode; ne(e, t, t.scopeId, t.slotScopeIds, i.parent); } } }, T = (e, t, n, r, i, a, o, s, c = 0) => { for (let l = c; l < e.length; l++) { - let c = e[l] = s ? Ya(e[l]) : Ja(e[l]); + let c = e[l] = s ? eo(e[l]) : $a(e[l]); v(null, c, t, n, r, i, a, o, s); } }, re = (e, n, r, i, a, o, s) => { let l = n.el = e.el, { patchFlag: u, dynamicChildren: d, dirs: f } = n; u |= e.patchFlag & 16; let m = e.props || t, h = n.props || t, g; - if (r && Sa(r, !1), (g = h.onVnodeBeforeUpdate) && Za(g, r, n, e), f && Kn(n, e, r, "beforeUpdate"), r && Sa(r, !0), d && (!e.dynamicChildren || e.dynamicChildren.length !== d.length) && (u = 0, s = !1, d = null), (m.innerHTML && h.innerHTML == null || m.textContent && h.textContent == null) && p(l, ""), d ? E(e.dynamicChildren, d, l, r, i, xa(n, a), o) : s || pe(e, n, l, null, r, i, xa(n, a), o, !1), u > 0) { + if (r && Da(r, !1), (g = h.onVnodeBeforeUpdate) && no(g, r, n, e), f && Jn(n, e, r, "beforeUpdate"), r && Da(r, !0), d && (!e.dynamicChildren || e.dynamicChildren.length !== d.length) && (u = 0, s = !1, d = null), (m.innerHTML && h.innerHTML == null || m.textContent && h.textContent == null) && p(l, ""), d ? E(e.dynamicChildren, d, l, r, i, Ea(n, a), o) : s || fe(e, n, l, null, r, i, Ea(n, a), o, !1), u > 0) { if (u & 16) ie(l, m, h, r, a); else if (u & 2 && m.class !== h.class && c(l, "class", null, h.class, a), u & 4 && c(l, "style", m.style, h.style, a), u & 8) { let e = n.dynamicProps; @@ -2404,12 +2455,12 @@ function ba(e, i) { } u & 1 && e.children !== n.children && p(l, n.children); } else !s && d == null && ie(l, m, h, r, a); - ((g = h.onVnodeUpdated) || f) && va(() => { - g && Za(g, r, n, e), f && Kn(n, e, r, "updated"); + ((g = h.onVnodeUpdated) || f) && Ca(() => { + g && no(g, r, n, e), f && Jn(n, e, r, "updated"); }, i); }, E = (e, t, n, r, i, a, o) => { for (let s = 0; s < t.length; s++) { - let c = e[s], l = t[s], u = c.el || Oa(c), d = u && (c.type === L || !Va(c, l) || c.shapeFlag & 198) ? m(u) : n; + let c = e[s], l = t[s], u = c.el || Na(c), d = u && (c.type === L || !Ga(c, l) || c.shapeFlag & 198) ? m(u) : n; v(c, l, d, null, r, i, a, o, !0); } }, ie = (e, n, r, i, a) => { @@ -2424,35 +2475,35 @@ function ba(e, i) { } }, ae = (e, t, n, r, i, a, s, c, l) => { let d = t.el = e ? e.el : u(""), f = t.anchor = e ? e.anchor : u(""), { patchFlag: p, dynamicChildren: m, slotScopeIds: h } = t; - h && (c = c ? c.concat(h) : h), e == null ? (o(d, n, r), o(f, n, r), T(t.children || [], n, f, i, a, s, c, l)) : p > 0 && p & 64 && m && e.dynamicChildren && e.dynamicChildren.length === m.length ? (E(e.dynamicChildren, m, n, i, a, s, c), (t.key != null || i && t === i.subTree) && wa(e, t, !0)) : pe(e, t, n, f, i, a, s, c, l); - }, oe = (e, t, n, r, i, a, o, s, c) => { - t.slotScopeIds = s, e == null ? t.shapeFlag & 512 ? i.ctx.activate(t, n, r, o, c) : ce(t, n, r, i, a, o, c) : le(e, t, c); - }, ce = (e, t, n, r, i, a, o) => { - let s = e.component = to(e, r, i); - if (Wr(e) && (s.ctx.renderer = Ce), lo(s, !1, o), s.asyncDep) { - if (i && i.registerDep(s, ue, o, a), !e.el) { - let r = s.subTree = H(Ma); + h && (c = c ? c.concat(h) : h), e == null ? (o(d, n, r), o(f, n, r), T(t.children || [], n, f, i, a, s, c, l)) : p > 0 && p & 64 && m && e.dynamicChildren && e.dynamicChildren.length === m.length ? (E(e.dynamicChildren, m, n, i, a, s, c), (t.key != null || i && t === i.subTree) && ka(e, t, !0)) : fe(e, t, n, f, i, a, s, c, l); + }, D = (e, t, n, r, i, a, o, s, c) => { + t.slotScopeIds = s, e == null ? t.shapeFlag & 512 ? i.ctx.activate(t, n, r, o, c) : se(t, n, r, i, a, o, c) : ce(e, t, c); + }, se = (e, t, n, r, i, a, o) => { + let s = e.component = oo(e, r, i); + if (qr(e) && (s.ctx.renderer = Se), go(s, !1, o), s.asyncDep) { + if (i && i.registerDep(s, le, o, a), !e.el) { + let r = s.subTree = U(R); b(null, r, t, n), e.placeholder = r.el; } - } else ue(s, e, t, n, i, a, o); - }, le = (e, t, n) => { + } else le(s, e, t, n, i, a, o); + }, ce = (e, t, n) => { let r = t.component = e.component; - if (Xi(e, t, n)) { + if (ta(e, t, n)) { if (r.asyncDep && !r.asyncResolved) { - t.el = e.el, t.placeholder = e.placeholder, de(r, t, n); + t.el = e.el, t.placeholder = e.placeholder, ue(r, t, n); return; } r.next = t, r.update(); } else t.el = e.el, t.placeholder = e.placeholder, r.vnode = t; - }, ue = (e, t, n, r, i, a, o) => { + }, le = (e, t, n, r, i, a, o) => { let s = () => { if (e.isMounted) { let { next: t, bu: n, u: r, parent: s, vnode: c } = e; { - let n = Ea(e); + let n = ja(e); if (n) { - t && (t.el = c.el, de(e, t, o)), n.asyncDep.then(() => { - va(() => { + t && (t.el = c.el, ue(e, t, o)), n.asyncDep.then(() => { + Ca(() => { e.isUnmounted || l(); }, i); }); @@ -2460,82 +2511,82 @@ function ba(e, i) { } } let u = t, d; - Sa(e, !1), t ? (t.el = c.el, de(e, t, o)) : t = c, n && se(n), (d = t.props && t.props.onVnodeBeforeUpdate) && Za(d, s, t, c), Sa(e, !0); - let f = Ki(e), p = e.subTree; - e.subTree = f, v(p, f, m(p.el), xe(p), e, i, a), t.el = f.el, u === null && $i(e, f.el), r && va(r, i), (d = t.props && t.props.onVnodeUpdated) && va(() => Za(d, s, t, c), i); + Da(e, !1), t ? (t.el = c.el, ue(e, t, o)) : t = c, n && oe(n), (d = t.props && t.props.onVnodeBeforeUpdate) && no(d, s, t, c), Da(e, !0); + let f = Zi(e), p = e.subTree; + e.subTree = f, v(p, f, m(p.el), be(p), e, i, a), t.el = f.el, u === null && ia(e, f.el), r && Ca(r, i), (d = t.props && t.props.onVnodeUpdated) && Ca(() => no(d, s, t, c), i); } else { - let o, { el: s, props: c } = t, { bm: l, m: u, parent: d, root: f, type: p } = e, m = Vr(t); - if (Sa(e, !1), l && se(l), !m && (o = c && c.onVnodeBeforeMount) && Za(o, d, t), Sa(e, !0), s && Te) { + let o, { el: s, props: c } = t, { bm: l, m: u, parent: d, root: f, type: p } = e, m = Wr(t); + if (Da(e, !1), l && oe(l), !m && (o = c && c.onVnodeBeforeMount) && no(o, d, t), Da(e, !0), s && we) { let t = () => { - e.subTree = Ki(e), Te(s, e.subTree, e, i, null); + e.subTree = Zi(e), we(s, e.subTree, e, i, null); }; m && p.__asyncHydrate ? p.__asyncHydrate(s, e, t) : t(); } else { f.ce && f.ce._hasShadowRoot() && f.ce._injectChildStyle(p, e.parent ? e.parent.type : void 0); - let o = e.subTree = Ki(e); + let o = e.subTree = Zi(e); v(null, o, n, r, e, i, a), t.el = o.el; } - if (u && va(u, i), !m && (o = c && c.onVnodeMounted)) { + if (u && Ca(u, i), !m && (o = c && c.onVnodeMounted)) { let e = t; - va(() => Za(o, d, e), i); + Ca(() => no(o, d, e), i); } - (t.shapeFlag & 256 || d && Vr(d.vnode) && d.vnode.shapeFlag & 256) && e.a && va(e.a, i), e.isMounted = !0, t = n = r = null; + (t.shapeFlag & 256 || d && Wr(d.vnode) && d.vnode.shapeFlag & 256) && e.a && Ca(e.a, i), e.isMounted = !0, t = n = r = null; } }; e.scope.on(); - let c = e.effect = new Fe(s); + let c = e.effect = new Pe(s); e.scope.off(); let l = e.update = c.run.bind(c), u = e.job = c.runIfDirty.bind(c); - u.i = e, u.id = e.uid, c.scheduler = () => Pn(u), Sa(e, !0), l(); - }, de = (e, t, n) => { + u.i = e, u.id = e.uid, c.scheduler = () => Fn(u), Da(e, !0), l(); + }, ue = (e, t, n) => { t.component = e; let r = e.vnode.props; - e.vnode = t, e.next = null, ia(e, t.props, r, n), _a(e, t.children, n), Xe(), Ln(e), Ze(); - }, pe = (e, t, n, r, i, a, o, s, c = !1) => { + e.vnode = t, e.next = null, la(e, t.props, r, n), Sa(e, t.children, n), Ye(), Rn(e), Xe(); + }, fe = (e, t, n, r, i, a, o, s, c = !1) => { let l = e && e.children, u = e ? e.shapeFlag : 0, d = t.children, { patchFlag: f, shapeFlag: m } = t; if (f > 0) { if (f & 128) { - he(l, d, n, r, i, a, o, s, c); - return; - } - if (f & 256) { me(l, d, n, r, i, a, o, s, c); return; } + if (f & 256) { + pe(l, d, n, r, i, a, o, s, c); + return; + } } - m & 8 ? (u & 16 && be(l, i, a), d !== l && p(n, d)) : u & 16 ? m & 16 ? he(l, d, n, r, i, a, o, s, c) : be(l, i, a, !0) : (u & 8 && p(n, ""), m & 16 && T(d, n, r, i, a, o, s, c)); - }, me = (e, t, r, i, a, o, s, c, l) => { + m & 8 ? (u & 16 && ye(l, i, a), d !== l && p(n, d)) : u & 16 ? m & 16 ? me(l, d, n, r, i, a, o, s, c) : ye(l, i, a, !0) : (u & 8 && p(n, ""), m & 16 && T(d, n, r, i, a, o, s, c)); + }, pe = (e, t, r, i, a, o, s, c, l) => { e ||= n, t ||= n; let u = e.length, d = t.length, f = Math.min(u, d), p = 0; for (; p < f; p++) { - let n = t[p] = l ? Ya(t[p]) : Ja(t[p]); + let n = t[p] = l ? eo(t[p]) : $a(t[p]); v(e[p], n, r, null, a, o, s, c, l); } - u > d ? be(e, a, o, !0, !1, f) : T(t, r, i, a, o, s, c, l, f); - }, he = (e, t, r, i, a, o, s, c, l) => { + u > d ? ye(e, a, o, !0, !1, f) : T(t, r, i, a, o, s, c, l, f); + }, me = (e, t, r, i, a, o, s, c, l) => { let u = 0, d = t.length, f = e.length - 1, p = d - 1; for (; u <= f && u <= p;) { - let n = e[u], i = t[u] = l ? Ya(t[u]) : Ja(t[u]); - if (Va(n, i)) v(n, i, r, null, a, o, s, c, l); + let n = e[u], i = t[u] = l ? eo(t[u]) : $a(t[u]); + if (Ga(n, i)) v(n, i, r, null, a, o, s, c, l); else break; u++; } for (; u <= f && u <= p;) { - let n = e[f], i = t[p] = l ? Ya(t[p]) : Ja(t[p]); - if (Va(n, i)) v(n, i, r, null, a, o, s, c, l); + let n = e[f], i = t[p] = l ? eo(t[p]) : $a(t[p]); + if (Ga(n, i)) v(n, i, r, null, a, o, s, c, l); else break; f--, p--; } if (u > f) { if (u <= p) { let e = p + 1, n = e < d ? t[e].el : i; - for (; u <= p;) v(null, t[u] = l ? Ya(t[u]) : Ja(t[u]), r, n, a, o, s, c, l), u++; + for (; u <= p;) v(null, t[u] = l ? eo(t[u]) : $a(t[u]), r, n, a, o, s, c, l), u++; } - } else if (u > p) for (; u <= f;) _e(e[u], a, o, !0), u++; + } else if (u > p) for (; u <= f;) ge(e[u], a, o, !0), u++; else { let m = u, h = u, g = /* @__PURE__ */ new Map(); for (u = h; u <= p; u++) { - let e = t[u] = l ? Ya(t[u]) : Ja(t[u]); + let e = t[u] = l ? eo(t[u]) : $a(t[u]); e.key != null && g.set(e.key, u); } let _, y = 0, b = p - h + 1, x = !1, S = 0, C = Array(b); @@ -2543,138 +2594,138 @@ function ba(e, i) { for (u = m; u <= f; u++) { let n = e[u]; if (y >= b) { - _e(n, a, o, !0); + ge(n, a, o, !0); continue; } let i; if (n.key != null) i = g.get(n.key); - else for (_ = h; _ <= p; _++) if (C[_ - h] === 0 && Va(n, t[_])) { + else for (_ = h; _ <= p; _++) if (C[_ - h] === 0 && Ga(n, t[_])) { i = _; break; } - i === void 0 ? _e(n, a, o, !0) : (C[i - h] = u + 1, i >= S ? S = i : x = !0, v(n, t[i], r, null, a, o, s, c, l), y++); + i === void 0 ? ge(n, a, o, !0) : (C[i - h] = u + 1, i >= S ? S = i : x = !0, v(n, t[i], r, null, a, o, s, c, l), y++); } - let w = x ? Ta(C) : n; + let w = x ? Aa(C) : n; for (_ = w.length - 1, u = b - 1; u >= 0; u--) { - let e = h + u, n = t[e], f = t[e + 1], p = e + 1 < d ? f.el || Oa(f) : i; - C[u] === 0 ? v(null, n, r, p, a, o, s, c, l) : x && (_ < 0 || u !== w[_] ? ge(n, r, p, 2) : _--); + let e = h + u, n = t[e], f = t[e + 1], p = e + 1 < d ? f.el || Na(f) : i; + C[u] === 0 ? v(null, n, r, p, a, o, s, c, l) : x && (_ < 0 || u !== w[_] ? he(n, r, p, 2) : _--); } } - }, ge = (e, t, n, r, i = null) => { + }, he = (e, t, n, r, i = null) => { let { el: a, type: c, transition: l, children: u, shapeFlag: d } = e; - if (d & 6) ge(e.component.subTree, t, n, r); + if (d & 6) he(e.component.subTree, t, n, r); else if (d & 128) e.suspense.move(t, n, r); - else if (d & 64) c.move(e, t, n, Ce); + else if (d & 64) c.move(e, t, n, Se); else if (c === L) { o(a, t, n); - for (let e = 0; e < u.length; e++) ge(u[e], t, n, r); + for (let e = 0; e < u.length; e++) he(u[e], t, n, r); o(e.anchor, t, n); - } else if (c === Na) S(e, t, n); + } else if (c === La) S(e, t, n); else if (r !== 2 && d & 1 && l) { - if (r === 0) l.persisted && !a[_r] ? o(a, t, n) : (l.beforeEnter(a), o(a, t, n), va(() => l.enter(a), i)); + if (r === 0) l.persisted && !a[br] ? o(a, t, n) : (l.beforeEnter(a), o(a, t, n), Ca(() => l.enter(a), i)); else { let { leave: r, delayLeave: i, afterLeave: c } = l, u = () => { e.ctx.isUnmounted ? s(a) : o(a, t, n); }, d = () => { - let e = a._isLeaving || !!a[_r]; - a._isLeaving && a[_r](!0), l.persisted && !e ? u() : r(a, () => { + let e = a._isLeaving || !!a[br]; + a._isLeaving && a[br](!0), l.persisted && !e ? u() : r(a, () => { u(), c && c(); }); }; i ? i(a, u, d) : d(); } } else o(a, t, n); - }, _e = (e, t, n, r = !1, i = !1) => { + }, ge = (e, t, n, r = !1, i = !1) => { let { type: a, props: o, ref: s, children: c, dynamicChildren: l, shapeFlag: u, patchFlag: d, dirs: f, cacheIndex: p, memo: m } = e; - if ((d === -2 || l && l.hasOnce) && (i = !1), s != null && (Xe(), Lr(s, null, n, e, !0), Ze()), p == null || e.ctx && e.ctx !== t || (t.renderCache[p] = void 0), u & 256) { + if ((d === -2 || l && l.hasOnce) && (i = !1), s != null && (Ye(), Br(s, null, n, e, !0), Xe()), p == null || e.ctx && e.ctx !== t || (t.renderCache[p] = void 0), u & 256) { t.ctx.deactivate(e); return; } - let h = u & 1 && f, g = !Vr(e), _; - if (g && (_ = o && o.onVnodeBeforeUnmount) && Za(_, t, e), u & 6) ye(e.component, n, r); + let h = u & 1 && f, g = !Wr(e), _; + if (g && (_ = o && o.onVnodeBeforeUnmount) && no(_, t, e), u & 6) ve(e.component, n, r); else { if (u & 128) { e.suspense.unmount(n, r); return; } - h && Kn(e, null, t, "beforeUnmount"), u & 64 ? e.type.remove(e, t, n, Ce, r) : l && !l.hasOnce && (a !== L || d > 0 && d & 64) ? be(l, t, n, !1, !0) : (a === L && d & 384 || !i && u & 16) && be(c, t, n), r && D(e); + h && Jn(e, null, t, "beforeUnmount"), u & 64 ? e.type.remove(e, t, n, Se, r) : l && !l.hasOnce && (a !== L || d > 0 && d & 64) ? ye(l, t, n, !1, !0) : (a === L && d & 384 || !i && u & 16) && ye(c, t, n), r && O(e); } let v = m != null && p == null; - (g && (_ = o && o.onVnodeUnmounted) || h || v) && va(() => { - _ && Za(_, t, e), h && Kn(e, null, t, "unmounted"), v && (e.el = null); + (g && (_ = o && o.onVnodeUnmounted) || h || v) && Ca(() => { + _ && no(_, t, e), h && Jn(e, null, t, "unmounted"), v && (e.el = null); }, n); - }, D = (e) => { + }, O = (e) => { let { type: t, el: n, anchor: r, transition: i } = e, a = t === L; if (a && !i) { - ve(n, r); + _e(n, r); return; } - if (t === Na) { + if (t === La) { C(e), i && !i.persisted && i.afterLeave && i.afterLeave(); return; } - let o = a ? jr(e) : e, c = () => { - a ? m(n) && ve(n, r) : s(n), i && !i.persisted && i.afterLeave && i.afterLeave(); + let o = a ? Pr(e) : e, c = () => { + a ? m(n) && _e(n, r) : s(n), i && !i.persisted && i.afterLeave && i.afterLeave(); }; if (o && o.shapeFlag & 1 && i && !i.persisted) { let { leave: e, delayLeave: t } = i, n = o.el, r = () => e(n, c); t ? t(n, c, r) : r(); } else c(); - }, ve = (e, t) => { + }, _e = (e, t) => { let n; for (; e !== t;) n = h(e), s(e), e = n; s(t); - }, ye = (e, t, n) => { + }, ve = (e, t, n) => { let { bum: r, scope: i, job: a, subTree: o, um: s, m: c, a: l } = e; - Da(c), Da(l), r && se(r), i.stop(), a ? (a.flags |= 8, _e(o, e, t, n)) : e.vnode.el && o && (o.transition = e.vnode.transition, _e(o, e, t, n)), s && va(s, t), va(() => { + Ma(c), Ma(l), r && oe(r), i.stop(), a ? (a.flags |= 8, ge(o, e, t, n)) : e.vnode.el && o && (o.transition = e.vnode.transition, ge(o, e, t, n)), s && Ca(s, t), Ca(() => { e.isUnmounted = !0; }, t); - }, be = (e, t, n, r = !1, i = !1, a = 0) => { - for (let o = a; o < e.length; o++) _e(e[o], t, n, r, i); - }, xe = (e) => { - if (e.shapeFlag & 6) return xe(e.component.subTree); + }, ye = (e, t, n, r = !1, i = !1, a = 0) => { + for (let o = a; o < e.length; o++) ge(e[o], t, n, r, i); + }, be = (e) => { + if (e.shapeFlag & 6) return be(e.component.subTree); if (e.shapeFlag & 128) return e.suspense.next(); - let t = h(e.anchor || e.el), n = t && t[ir]; + let t = h(e.anchor || e.el), n = t && t[sr]; return n ? h(n) : t; - }, Se = (e, t, n) => { - Bn(() => { - e == null ? t._vnode && _e(t._vnode, null, null, !0) : v(t._vnode || null, e, t, null, null, null, n), t._vnode = e; - }, e && t._vnode ? void 0 : e && e.component ? e.component.uid : eo()); - }, Ce = { + }, xe = (e, t, n) => { + Vn(() => { + e == null ? t._vnode && ge(t._vnode, null, null, !0) : v(t._vnode || null, e, t, null, null, null, n), t._vnode = e; + }, e && t._vnode ? void 0 : e && e.component ? e.component.uid : ao()); + }, Se = { p: v, - um: _e, - m: ge, - r: D, - mt: ce, + um: ge, + m: he, + r: O, + mt: se, mc: T, - pc: pe, + pc: fe, pbc: E, - n: xe, + n: be, o: e - }, we, Te; - return i && ([we, Te] = i(Ce)), { - render: Se, - hydrate: we, - createApp: zi(Se, we) + }, Ce, we; + return i && ([Ce, we] = i(Se)), { + render: xe, + hydrate: Ce, + createApp: Ui(xe, Ce) }; } -function xa({ type: e, props: t }, n) { +function Ea({ type: e, props: t }, n) { return n === "svg" && e === "foreignObject" || n === "mathml" && e === "annotation-xml" && t && t.encoding && t.encoding.includes("html") ? void 0 : n; } -function Sa({ effect: e, job: t }, n) { +function Da({ effect: e, job: t }, n) { n ? (e.flags |= 32, t.flags |= 4) : (e.flags &= -33, t.flags &= -5); } -function Ca(e, t) { +function Oa(e, t) { return (!e || e && !e.pendingBranch) && t && !t.persisted; } -function wa(e, t, n = !1) { +function ka(e, t, n = !1) { let r = e.children, i = t.children; if (d(r) && d(i)) for (let e = 0; e < r.length; e++) { let t = r[e], a = i[e]; - a.shapeFlag & 1 && !a.dynamicChildren && ((a.patchFlag <= 0 || a.patchFlag === 32) && (a = i[e] = Ya(i[e]), a.el = t.el), !n && a.patchFlag !== -2 && wa(t, a)), a.type === ja && (a.patchFlag === -1 && (a = i[e] = Ya(a)), a.el = t.el), a.type === Ma && !a.el && (a.el = t.el); + a.shapeFlag & 1 && !a.dynamicChildren && ((a.patchFlag <= 0 || a.patchFlag === 32) && (a = i[e] = eo(i[e]), a.el = t.el), !n && a.patchFlag !== -2 && ka(t, a)), a.type === Ia && (a.patchFlag === -1 && (a = i[e] = eo(a)), a.el = t.el), a.type === R && !a.el && (a.el = t.el); } } -function Ta(e) { +function Aa(e) { let t = e.slice(), n = [0], r, i, a, o, s, c = e.length; for (r = 0; r < c; r++) { let c = e[r]; @@ -2690,63 +2741,63 @@ function Ta(e) { for (a = n.length, o = n[a - 1]; a-- > 0;) n[a] = o, o = t[o]; return n; } -function Ea(e) { +function ja(e) { let t = e.subTree.component; - if (t) return t.asyncDep && !t.asyncResolved ? t : Ea(t); + if (t) return t.asyncDep && !t.asyncResolved ? t : ja(t); } -function Da(e) { +function Ma(e) { if (e) for (let t = 0; t < e.length; t++) e[t].flags |= 8; } -function Oa(e) { +function Na(e) { if (e.placeholder) return e.placeholder; let t = e.component; - return t ? Oa(t.subTree) : null; + return t ? Na(t.subTree) : null; } -var ka = (e) => e.__isSuspense; -function Aa(e, t) { - t && t.pendingBranch ? d(e) ? t.effects.push(...e) : t.effects.push(e) : In(e); +var Pa = (e) => e.__isSuspense; +function Fa(e, t) { + t && t.pendingBranch ? d(e) ? t.effects.push(...e) : t.effects.push(e) : Ln(e); } -var L = /* @__PURE__ */ Symbol.for("v-fgt"), ja = /* @__PURE__ */ Symbol.for("v-txt"), Ma = /* @__PURE__ */ Symbol.for("v-cmt"), Na = /* @__PURE__ */ Symbol.for("v-stc"), Pa = [], Fa = null; -function R(e = !1) { - Pa.push(Fa = e ? null : []); +var L = /* @__PURE__ */ Symbol.for("v-fgt"), Ia = /* @__PURE__ */ Symbol.for("v-txt"), R = /* @__PURE__ */ Symbol.for("v-cmt"), La = /* @__PURE__ */ Symbol.for("v-stc"), Ra = [], za = null; +function z(e = !1) { + Ra.push(za = e ? null : []); } -function Ia() { - Pa.pop(), Fa = Pa[Pa.length - 1] || null; +function Ba() { + Ra.pop(), za = Ra[Ra.length - 1] || null; } -var La = 1; -function Ra(e, t = !1) { - La += e, e < 0 && Fa && t && (Fa.hasOnce = !0); +var Va = 1; +function Ha(e, t = !1) { + Va += e, e < 0 && za && t && (za.hasOnce = !0); } -function za(e) { - return e.dynamicChildren = La > 0 ? Fa || n : null, Ia(), La > 0 && Fa && Fa.push(e), e; +function Ua(e) { + return e.dynamicChildren = Va > 0 ? za || n : null, Ba(), Va > 0 && za && za.push(e), e; } -function z(e, t, n, r, i, a) { - return za(V(e, t, n, r, i, a, !0)); +function B(e, t, n, r, i, a) { + return Ua(H(e, t, n, r, i, a, !0)); } -function B(e, t, n, r, i) { - return za(H(e, t, n, r, i, !0)); +function V(e, t, n, r, i) { + return Ua(U(e, t, n, r, i, !0)); } -function Ba(e) { +function Wa(e) { return e ? e.__v_isVNode === !0 : !1; } -function Va(e, t) { +function Ga(e, t) { return e.type === t.type && e.key === t.key; } -var Ha = ({ key: e }) => e ?? null, Ua = ({ ref: e, ref_key: t, ref_for: n }) => (typeof e == "number" && (e = "" + e), e == null ? null : g(e) || /* @__PURE__ */ M(e) || h(e) ? { - i: N, +var Ka = ({ key: e }) => e ?? null, qa = ({ ref: e, ref_key: t, ref_for: n }) => (typeof e == "number" && (e = "" + e), e == null ? null : g(e) || /* @__PURE__ */ N(e) || h(e) ? { + i: Wn, r: e, k: t, f: !!n } : e); -function V(e, t = null, n = null, r = 0, i = null, a = e === L ? 0 : 1, o = !1, s = !1) { +function H(e, t = null, n = null, r = 0, i = null, a = e === L ? 0 : 1, o = !1, s = !1) { let c = { __v_isVNode: !0, __v_skip: !0, type: e, props: t, - key: t && Ha(t), - ref: t && Ua(t), - scopeId: Un, + key: t && Ka(t), + ref: t && qa(t), + scopeId: Gn, slotScopeIds: null, children: n, component: null, @@ -2766,35 +2817,35 @@ function V(e, t = null, n = null, r = 0, i = null, a = e === L ? 0 : 1, o = !1, dynamicProps: i, dynamicChildren: null, appContext: null, - ctx: N + ctx: Wn }; - return s ? (Xa(c, n), a & 128 && e.normalize(c)) : n && (c.shapeFlag |= g(n) ? 8 : 16), La > 0 && !o && Fa && (c.patchFlag > 0 || a & 6) && c.patchFlag !== 32 && Fa.push(c), c; + return s ? (to(c, n), a & 128 && e.normalize(c)) : n && (c.shapeFlag |= g(n) ? 8 : 16), Va > 0 && !o && za && (c.patchFlag > 0 || a & 6) && c.patchFlag !== 32 && za.push(c), c; } -var H = Wa; -function Wa(e, t = null, n = null, r = 0, i = null, a = !1) { - if (e && e !== li || (e = Ma), Ba(e)) { - let r = Ka(e, t, !0); - return n && Xa(r, n), La > 0 && !a && Fa && (r.shapeFlag & 6 ? Fa[Fa.indexOf(e)] = r : Fa.push(r)), r.patchFlag = -2, r; +var U = Ja; +function Ja(e, t = null, n = null, r = 0, i = null, a = !1) { + if (e && e !== fi || (e = R), Wa(e)) { + let r = Xa(e, t, !0); + return n && to(r, n), Va > 0 && !a && za && (r.shapeFlag & 6 ? za[za.indexOf(e)] = r : za.push(r)), r.patchFlag = -2, r; } - if (vo(e) && (e = e.__vccOpts), t) { - t = Ga(t); + if (wo(e) && (e = e.__vccOpts), t) { + t = Ya(t); let { class: e, style: n } = t; - e && !g(e) && (t.class = D(e)), v(n) && (/* @__PURE__ */ Zt(n) && !d(n) && (n = s({}, n)), t.style = pe(n)); + e && !g(e) && (t.class = O(e)), v(n) && (/* @__PURE__ */ Xt(n) && !d(n) && (n = s({}, n)), t.style = fe(n)); } - let o = g(e) ? 1 : ka(e) ? 128 : ar(e) ? 64 : v(e) ? 4 : h(e) ? 2 : 0; - return V(e, t, n, r, i, o, a, !0); + let o = g(e) ? 1 : Pa(e) ? 128 : cr(e) ? 64 : v(e) ? 4 : h(e) ? 2 : 0; + return H(e, t, n, r, i, o, a, !0); } -function Ga(e) { - return e ? /* @__PURE__ */ Zt(e) || na(e) ? s({}, e) : e : null; +function Ya(e) { + return e ? /* @__PURE__ */ Xt(e) || sa(e) ? s({}, e) : e : null; } -function Ka(e, t, n = !1, r = !1) { - let { props: i, ref: a, patchFlag: o, children: s, transition: c } = e, l = t ? W(i || {}, t) : i, u = { +function Xa(e, t, n = !1, r = !1) { + let { props: i, ref: a, patchFlag: o, children: s, transition: c } = e, l = t ? G(i || {}, t) : i, u = { __v_isVNode: !0, __v_skip: !0, type: e.type, props: l, - key: l && Ha(l), - ref: t && t.ref ? n && a ? d(a) ? a.concat(Ua(t)) : [a, Ua(t)] : Ua(t) : a, + key: l && Ka(l), + ref: t && t.ref ? n && a ? d(a) ? a.concat(qa(t)) : [a, qa(t)] : qa(t) : a, scopeId: e.scopeId, slotScopeIds: e.slotScopeIds, children: s, @@ -2811,8 +2862,8 @@ function Ka(e, t, n = !1, r = !1) { transition: c, component: e.component, suspense: e.suspense, - ssContent: e.ssContent && Ka(e.ssContent), - ssFallback: e.ssFallback && Ka(e.ssFallback), + ssContent: e.ssContent && Xa(e.ssContent), + ssFallback: e.ssFallback && Xa(e.ssFallback), placeholder: e.placeholder, el: e.el, anchor: e.anchor, @@ -2820,53 +2871,57 @@ function Ka(e, t, n = !1, r = !1) { ce: e.ce, cacheIndex: e.cacheIndex }; - return c && r && kr(u, c.clone(u)), u; + return c && r && Mr(u, c.clone(u)), u; } -function qa(e = " ", t = 0) { - return H(ja, null, e, t); +function Za(e = " ", t = 0) { + return U(Ia, null, e, t); } -function U(e = "", t = !1) { - return t ? (R(), B(Ma, null, e)) : H(Ma, null, e); +function Qa(e, t) { + let n = U(La, null, e); + return n.staticCount = t, n; } -function Ja(e) { - return e == null || typeof e == "boolean" ? H(Ma) : d(e) ? H(L, null, e.slice()) : Ba(e) ? Ya(e) : H(ja, null, String(e)); +function W(e = "", t = !1) { + return t ? (z(), V(R, null, e)) : U(R, null, e); } -function Ya(e) { - return e.el === null && e.patchFlag !== -1 || e.memo ? e : Ka(e); +function $a(e) { + return e == null || typeof e == "boolean" ? U(R) : d(e) ? U(L, null, e.slice()) : Wa(e) ? eo(e) : U(Ia, null, String(e)); } -function Xa(e, t) { +function eo(e) { + return e.el === null && e.patchFlag !== -1 || e.memo ? e : Xa(e); +} +function to(e, t) { let n = 0, { shapeFlag: r } = e; if (t == null) t = null; else if (d(t)) n = 16; else if (typeof t == "object") { if (r & 65) { let n = t.default; - n && (n._c && (n._d = !1), Xa(e, n()), n._c && (n._d = !0)); + n && (n._c && (n._d = !1), to(e, n()), n._c && (n._d = !0)); return; } { n = 32; let r = t._; - !r && !na(t) ? t._ctx = N : r === 3 && N && (N.slots._ === 1 ? t._ = 1 : (t._ = 2, e.patchFlag |= 1024)); + !r && !sa(t) ? t._ctx = Wn : r === 3 && Wn && (Wn.slots._ === 1 ? t._ = 1 : (t._ = 2, e.patchFlag |= 1024)); } } else if (h(t)) { if (r & 65) { - Xa(e, { default: t }); + to(e, { default: t }); return; } t = { default: t, - _ctx: N + _ctx: Wn }, n = 32; - } else t = String(t), r & 64 ? (n = 16, t = [qa(t)]) : n = 8; + } else t = String(t), r & 64 ? (n = 16, t = [Za(t)]) : n = 8; e.children = t, e.shapeFlag |= n; } -function W(...e) { +function G(...e) { let t = {}; for (let n = 0; n < e.length; n++) { let r = e[n]; - for (let e in r) if (e === "class") t.class !== r.class && (t.class = D([t.class, r.class])); - else if (e === "style") t.style = pe([t.style, r.style]); + for (let e in r) if (e === "class") t.class !== r.class && (t.class = O([t.class, r.class])); + else if (e === "style") t.style = fe([t.style, r.style]); else if (a(e)) { let n = t[e], i = r[e]; i && n !== i && !(d(n) && n.includes(i)) ? t[e] = n ? [].concat(n, i) : i : i == null && n == null && !o(e) && (t[e] = i); @@ -2874,16 +2929,16 @@ function W(...e) { } return t; } -function Za(e, t, n, r = null) { - Sn(e, t, 7, [n, r]); +function no(e, t, n, r = null) { + Cn(e, t, 7, [n, r]); } -var Qa = Li(), $a = 0; -function eo() { - return $a; +var ro = Vi(), io = 0; +function ao() { + return io; } -function to(e, n, r) { - let i = e.type, a = (n ? n.appContext : e.appContext) || Qa, o = { - uid: $a++, +function oo(e, n, r) { + let i = e.type, a = (n ? n.appContext : e.appContext) || ro, o = { + uid: io++, vnode: e, type: i, parent: n, @@ -2894,7 +2949,7 @@ function to(e, n, r) { effect: null, update: null, job: null, - scope: new Ae(!0), + scope: new ke(!0), render: null, proxy: null, exposed: null, @@ -2910,8 +2965,8 @@ function to(e, n, r) { renderCache: [], components: null, directives: null, - propsOptions: ca(i, a), - emitsOptions: Wi(i, a), + propsOptions: pa(i, a), + emitsOptions: Yi(i, a), emit: null, emitted: null, propsDefaults: t, @@ -2946,81 +3001,81 @@ function to(e, n, r) { ec: null, sp: null }; - return o.ctx = { _: o }, o.root = n ? n.root : o, o.emit = Hi.bind(null, o), e.ce && e.ce(o), o; + return o.ctx = { _: o }, o.root = n ? n.root : o, o.emit = qi.bind(null, o), e.ce && e.ce(o), o; } -var G = null, no = () => G || N, ro, io; +var so = null, co = () => so || Wn, lo, uo; { - let e = fe(), t = (t, n) => { + let e = de(), t = (t, n) => { let r; return (r = e[t]) || (r = e[t] = []), r.push(n), (e) => { r.length > 1 ? r.forEach((t) => t(e)) : r[0](e); }; }; - ro = t("__VUE_INSTANCE_SETTERS__", (e) => G = e), io = t("__VUE_SSR_SETTERS__", (e) => co = e); + lo = t("__VUE_INSTANCE_SETTERS__", (e) => so = e), uo = t("__VUE_SSR_SETTERS__", (e) => ho = e); } -var ao = (e) => { - let t = G; - return ro(e), e.scope.on(), () => { - e.scope.off(), ro(t); +var fo = (e) => { + let t = so; + return lo(e), e.scope.on(), () => { + e.scope.off(), lo(t); }; -}, oo = () => { - G && G.scope.off(), ro(null); +}, po = () => { + so && so.scope.off(), lo(null); }; -function so(e) { +function mo(e) { return e.vnode.shapeFlag & 4; } -var co = !1; -function lo(e, t = !1, n = !1) { - t && io(t); - let { props: r, children: i } = e.vnode, a = so(e); - ra(e, r, a, t), ga(e, i, n || t); - let o = a ? uo(e, t) : void 0; - return t && io(!1), o; +var ho = !1; +function go(e, t = !1, n = !1) { + t && uo(t); + let { props: r, children: i } = e.vnode, a = mo(e); + ca(e, r, a, t), xa(e, i, n || t); + let o = a ? _o(e, t) : void 0; + return t && uo(!1), o; } -function uo(e, t) { +function _o(e, t) { let n = e.type; - e.accessCache = /* @__PURE__ */ Object.create(null), e.proxy = new Proxy(e.ctx, bi); + e.accessCache = /* @__PURE__ */ Object.create(null), e.proxy = new Proxy(e.ctx, Ci); let { setup: r } = n; if (r) { - Xe(); - let n = e.setupContext = r.length > 1 ? ho(e) : null, i = ao(e), a = xn(r, e, 0, [e.props, n]), o = y(a); - if (Ze(), i(), (o || e.sp) && !Vr(e) && Pr(e), o) { - if (a.then(oo, oo), t) return a.then((n) => { - io(!0); + Ye(); + let n = e.setupContext = r.length > 1 ? xo(e) : null, i = fo(e), a = Sn(r, e, 0, [e.props, n]), o = y(a); + if (Xe(), i(), (o || e.sp) && !Wr(e) && Lr(e), o) { + if (a.then(po, po), t) return a.then((n) => { + uo(!0); try { - fo(e, n, t); + vo(e, n, t); } finally { - io(!1); + uo(!1); } }).catch((t) => { - Cn(t, e, 0); + wn(t, e, 0); }); e.asyncDep = a; - } else fo(e, a, t); - } else po(e, t); + } else vo(e, a, t); + } else yo(e, t); } -function fo(e, t, n) { - h(t) ? e.type.__ssrInlineRender ? e.ssrRender = t : e.render = t : v(t) && (e.setupState = ln(t)), po(e, n); +function vo(e, t, n) { + h(t) ? e.type.__ssrInlineRender ? e.ssrRender = t : e.render = t : v(t) && (e.setupState = cn(t)), yo(e, n); } -function po(e, t, n) { +function yo(e, t, n) { let i = e.type; e.render ||= i.render || r; { - let t = ao(e); - Xe(); + let t = fo(e); + Ye(); try { - Ci(e); + Di(e); } finally { - Ze(), t(); + Xe(), t(); } } } -var mo = { get(e, t) { - return st(e, "get", ""), e[t]; +var bo = { get(e, t) { + return ot(e, "get", ""), e[t]; } }; -function ho(e) { +function xo(e) { return { - attrs: new Proxy(e.attrs, mo), + attrs: new Proxy(e.attrs, bo), slots: e.slots, emit: e.emit, expose: (t) => { @@ -3028,38 +3083,38 @@ function ho(e) { } }; } -function go(e) { - return e.exposed ? e.exposeProxy ||= new Proxy(ln(Qt(e.exposed)), { +function So(e) { + return e.exposed ? e.exposeProxy ||= new Proxy(cn(Zt(e.exposed)), { get(t, n) { if (n in t) return t[n]; - if (n in vi) return vi[n](e); + if (n in xi) return xi[n](e); }, has(e, t) { - return t in e || t in vi; + return t in e || t in xi; } }) : e.proxy; } -function _o(e, t = !0) { +function Co(e, t = !0) { return h(e) ? e.displayName || e.name : e.name || t && e.__name; } -function vo(e) { +function wo(e) { return h(e) && "__vccOpts" in e; } -var yo = (e, t) => /* @__PURE__ */ mn(e, t, co); -function bo(e, t, n) { +var To = (e, t) => /* @__PURE__ */ hn(e, t, ho); +function Eo(e, t, n) { try { - Ra(-1); + Ha(-1); let r = arguments.length; - return r === 2 ? v(t) && !d(t) ? Ba(t) ? H(e, null, [t]) : H(e, t) : H(e, null, t) : (r > 3 ? n = Array.prototype.slice.call(arguments, 2) : r === 3 && Ba(n) && (n = [n]), H(e, t, n)); + return r === 2 ? v(t) && !d(t) ? Wa(t) ? U(e, null, [t]) : U(e, t) : U(e, null, t) : (r > 3 ? n = Array.prototype.slice.call(arguments, 2) : r === 3 && Wa(n) && (n = [n]), U(e, t, n)); } finally { - Ra(1); + Ha(1); } } -var xo = "3.5.44", So = void 0, Co = typeof window < "u" && window.trustedTypes; -if (Co) try { - So = /* @__PURE__ */ Co.createPolicy("vue", { createHTML: (e) => e }); +var Do = "3.5.44", Oo = void 0, ko = typeof window < "u" && window.trustedTypes; +if (ko) try { + Oo = /* @__PURE__ */ ko.createPolicy("vue", { createHTML: (e) => e }); } catch {} -var wo = So ? (e) => So.createHTML(e) : (e) => e, To = "http://www.w3.org/2000/svg", Eo = "http://www.w3.org/1998/Math/MathML", Do = typeof document < "u" ? document : null, Oo = Do && /* @__PURE__ */ Do.createElement("template"), ko = { +var Ao = Oo ? (e) => Oo.createHTML(e) : (e) => e, jo = "http://www.w3.org/2000/svg", Mo = "http://www.w3.org/1998/Math/MathML", No = typeof document < "u" ? document : null, Po = No && /* @__PURE__ */ No.createElement("template"), Fo = { insert: (e, t, n) => { t.insertBefore(e, n || null); }, @@ -3068,11 +3123,11 @@ var wo = So ? (e) => So.createHTML(e) : (e) => e, To = "http://www.w3.org/2000/s t && t.removeChild(e); }, createElement: (e, t, n, r) => { - let i = t === "svg" ? Do.createElementNS(To, e) : t === "mathml" ? Do.createElementNS(Eo, e) : n ? Do.createElement(e, { is: n }) : Do.createElement(e); + let i = t === "svg" ? No.createElementNS(jo, e) : t === "mathml" ? No.createElementNS(Mo, e) : n ? No.createElement(e, { is: n }) : No.createElement(e); return e === "select" && r && r.multiple != null && i.setAttribute("multiple", r.multiple), i; }, - createText: (e) => Do.createTextNode(e), - createComment: (e) => Do.createComment(e), + createText: (e) => No.createTextNode(e), + createComment: (e) => No.createComment(e), setText: (e, t) => { e.nodeValue = t; }, @@ -3081,7 +3136,7 @@ var wo = So ? (e) => So.createHTML(e) : (e) => e, To = "http://www.w3.org/2000/s }, parentNode: (e) => e.parentNode, nextSibling: (e) => e.nextSibling, - querySelector: (e) => Do.querySelector(e), + querySelector: (e) => No.querySelector(e), setScopeId(e, t) { e.setAttribute(t, ""); }, @@ -3089,8 +3144,8 @@ var wo = So ? (e) => So.createHTML(e) : (e) => e, To = "http://www.w3.org/2000/s let o = n ? n.previousSibling : t.lastChild; if (i && (i === a || i.nextSibling)) for (; t.insertBefore(i.cloneNode(!0), n), i !== a && (i = i.nextSibling);); else { - Oo.innerHTML = wo(r === "svg" ? `${e}` : r === "mathml" ? `${e}` : e); - let i = Oo.content; + Po.innerHTML = Ao(r === "svg" ? `${e}` : r === "mathml" ? `${e}` : e); + let i = Po.content; if (r === "svg" || r === "mathml") { let e = i.firstChild; for (; e.firstChild;) i.appendChild(e.firstChild); @@ -3100,7 +3155,7 @@ var wo = So ? (e) => So.createHTML(e) : (e) => e, To = "http://www.w3.org/2000/s } return [o ? o.nextSibling : t.firstChild, n ? n.previousSibling : t.lastChild]; } -}, Ao = "transition", jo = "animation", Mo = /* @__PURE__ */ Symbol("_vtc"), No = { +}, Io = "transition", Lo = "animation", Ro = /* @__PURE__ */ Symbol("_vtc"), zo = { name: String, type: String, css: { @@ -3121,81 +3176,81 @@ var wo = So ? (e) => So.createHTML(e) : (e) => e, To = "http://www.w3.org/2000/s leaveFromClass: String, leaveActiveClass: String, leaveToClass: String -}, Po = /* @__PURE__ */ s({}, xr, No), Fo = /* @__PURE__ */ ((e) => (e.displayName = "Transition", e.props = Po, e))((e, { slots: t }) => bo(wr, Ro(e), t)), Io = (e, t = []) => { +}, Bo = /* @__PURE__ */ s({}, wr, zo), Vo = /* @__PURE__ */ ((e) => (e.displayName = "Transition", e.props = Bo, e))((e, { slots: t }) => Eo(Dr, Wo(e), t)), Ho = (e, t = []) => { d(e) ? e.forEach((e) => e(...t)) : e && e(...t); -}, Lo = (e) => e ? d(e) ? e.some((e) => e.length > 1) : e.length > 1 : !1; -function Ro(e) { +}, Uo = (e) => e ? d(e) ? e.some((e) => e.length > 1) : e.length > 1 : !1; +function Wo(e) { let t = {}; - for (let n in e) n in No || (t[n] = e[n]); + for (let n in e) n in zo || (t[n] = e[n]); if (e.css === !1) return t; - let { name: n = "v", type: r, duration: i, enterFromClass: a = `${n}-enter-from`, enterActiveClass: o = `${n}-enter-active`, enterToClass: c = `${n}-enter-to`, appearFromClass: l = a, appearActiveClass: u = o, appearToClass: d = c, leaveFromClass: f = `${n}-leave-from`, leaveActiveClass: p = `${n}-leave-active`, leaveToClass: m = `${n}-leave-to` } = e, h = zo(i), g = h && h[0], _ = h && h[1], { onBeforeEnter: v, onEnter: y, onEnterCancelled: b, onLeave: x, onLeaveCancelled: S, onBeforeAppear: C = v, onAppear: w = y, onAppearCancelled: ee = b } = t, te = (e, t, n, r) => { - e._enterCancelled = r, Ho(e, t ? d : c), Ho(e, t ? u : o), n && n(); + let { name: n = "v", type: r, duration: i, enterFromClass: a = `${n}-enter-from`, enterActiveClass: o = `${n}-enter-active`, enterToClass: c = `${n}-enter-to`, appearFromClass: l = a, appearActiveClass: u = o, appearToClass: d = c, leaveFromClass: f = `${n}-leave-from`, leaveActiveClass: p = `${n}-leave-active`, leaveToClass: m = `${n}-leave-to` } = e, h = Go(i), g = h && h[0], _ = h && h[1], { onBeforeEnter: v, onEnter: y, onEnterCancelled: b, onLeave: x, onLeaveCancelled: S, onBeforeAppear: C = v, onAppear: w = y, onAppearCancelled: ee = b } = t, te = (e, t, n, r) => { + e._enterCancelled = r, Jo(e, t ? d : c), Jo(e, t ? u : o), n && n(); }, ne = (e, t) => { - e._isLeaving = !1, Ho(e, f), Ho(e, m), Ho(e, p), t && t(); + e._isLeaving = !1, Jo(e, f), Jo(e, m), Jo(e, p), t && t(); }, T = (e) => (t, n) => { let i = e ? w : y, o = () => te(t, e, n); - Io(i, [t, o]), Uo(() => { - Ho(t, e ? l : a), Vo(t, e ? d : c), Lo(i) || Go(t, r, g, o); + Ho(i, [t, o]), Yo(() => { + Jo(t, e ? l : a), qo(t, e ? d : c), Uo(i) || Zo(t, r, g, o); }); }; return s(t, { onBeforeEnter(e) { - Io(v, [e]), Vo(e, a), Vo(e, o); + Ho(v, [e]), qo(e, a), qo(e, o); }, onBeforeAppear(e) { - Io(C, [e]), Vo(e, l), Vo(e, u); + Ho(C, [e]), qo(e, l), qo(e, u); }, onEnter: T(!1), onAppear: T(!0), onLeave(e, t) { e._isLeaving = !0; let n = () => ne(e, t); - Vo(e, f), e._enterCancelled ? (Vo(e, p), Yo(e)) : (Yo(e), Vo(e, p)), Uo(() => { - e._isLeaving && (Ho(e, f), Vo(e, m), Lo(x) || Go(e, r, _, n)); - }), Io(x, [e, n]); + qo(e, f), e._enterCancelled ? (qo(e, p), ts(e)) : (ts(e), qo(e, p)), Yo(() => { + e._isLeaving && (Jo(e, f), qo(e, m), Uo(x) || Zo(e, r, _, n)); + }), Ho(x, [e, n]); }, onEnterCancelled(e) { - te(e, !1, void 0, !0), Io(b, [e]); + te(e, !1, void 0, !0), Ho(b, [e]); }, onAppearCancelled(e) { - te(e, !0, void 0, !0), Io(ee, [e]); + te(e, !0, void 0, !0), Ho(ee, [e]); }, onLeaveCancelled(e) { - ne(e), Io(S, [e]); + ne(e), Ho(S, [e]); } }); } -function zo(e) { +function Go(e) { if (e == null) return null; - if (v(e)) return [Bo(e.enter), Bo(e.leave)]; + if (v(e)) return [Ko(e.enter), Ko(e.leave)]; { - let t = Bo(e); + let t = Ko(e); return [t, t]; } } -function Bo(e) { - return ue(e); +function Ko(e) { + return le(e); } -function Vo(e, t) { - t.split(/\s+/).forEach((t) => t && e.classList.add(t)), (e[Mo] || (e[Mo] = /* @__PURE__ */ new Set())).add(t); +function qo(e, t) { + t.split(/\s+/).forEach((t) => t && e.classList.add(t)), (e[Ro] || (e[Ro] = /* @__PURE__ */ new Set())).add(t); } -function Ho(e, t) { +function Jo(e, t) { t.split(/\s+/).forEach((t) => t && e.classList.remove(t)); - let n = e[Mo]; - n && (n.delete(t), n.size || (e[Mo] = void 0)); + let n = e[Ro]; + n && (n.delete(t), n.size || (e[Ro] = void 0)); } -function Uo(e) { +function Yo(e) { requestAnimationFrame(() => { requestAnimationFrame(e); }); } -var Wo = 0; -function Go(e, t, n, r) { - let i = e._endId = ++Wo, a = () => { +var Xo = 0; +function Zo(e, t, n, r) { + let i = e._endId = ++Xo, a = () => { i === e._endId && r(); }; if (n != null) return setTimeout(a, n); - let { type: o, timeout: s, propCount: c } = Ko(e, t); + let { type: o, timeout: s, propCount: c } = Qo(e, t); if (!o) return r(); let l = o + "end", u = 0, d = () => { e.removeEventListener(l, f), a(); @@ -3206,10 +3261,10 @@ function Go(e, t, n, r) { u < c && d(); }, s + 1), e.addEventListener(l, f); } -function Ko(e, t) { - let n = window.getComputedStyle(e), r = (e) => (n[e] || "").split(", "), i = r(`${Ao}Delay`), a = r(`${Ao}Duration`), o = qo(i, a), s = r(`${jo}Delay`), c = r(`${jo}Duration`), l = qo(s, c), u = null, d = 0, f = 0; - t === Ao ? o > 0 && (u = Ao, d = o, f = a.length) : t === jo ? l > 0 && (u = jo, d = l, f = c.length) : (d = Math.max(o, l), u = d > 0 ? o > l ? Ao : jo : null, f = u ? u === Ao ? a.length : c.length : 0); - let p = u === Ao && /\b(?:transform|all)(?:,|$)/.test(r(`${Ao}Property`).toString()); +function Qo(e, t) { + let n = window.getComputedStyle(e), r = (e) => (n[e] || "").split(", "), i = r(`${Io}Delay`), a = r(`${Io}Duration`), o = $o(i, a), s = r(`${Lo}Delay`), c = r(`${Lo}Duration`), l = $o(s, c), u = null, d = 0, f = 0; + t === Io ? o > 0 && (u = Io, d = o, f = a.length) : t === Lo ? l > 0 && (u = Lo, d = l, f = c.length) : (d = Math.max(o, l), u = d > 0 ? o > l ? Io : Lo : null, f = u ? u === Io ? a.length : c.length : 0); + let p = u === Io && /\b(?:transform|all)(?:,|$)/.test(r(`${Io}Property`).toString()); return { type: u, timeout: d, @@ -3217,100 +3272,100 @@ function Ko(e, t) { hasTransform: p }; } -function qo(e, t) { +function $o(e, t) { for (; e.length < t.length;) e = e.concat(e); - return Math.max(...t.map((t, n) => Jo(t) + Jo(e[n]))); + return Math.max(...t.map((t, n) => es(t) + es(e[n]))); } -function Jo(e) { +function es(e) { return e === "auto" ? 0 : Number(e.slice(0, -1).replace(",", ".")) * 1e3; } -function Yo(e) { +function ts(e) { return (e ? e.ownerDocument : document).body.offsetHeight; } -function Xo(e, t, n) { - let r = e[Mo]; +function ns(e, t, n) { + let r = e[Ro]; r && (t = (t ? [t, ...r] : [...r]).join(" ")), t == null ? e.removeAttribute("class") : n ? e.setAttribute("class", t) : e.className = t; } -var Zo = /* @__PURE__ */ Symbol("_vod"), Qo = /* @__PURE__ */ Symbol("_vsh"), $o = { +var rs = /* @__PURE__ */ Symbol("_vod"), is = /* @__PURE__ */ Symbol("_vsh"), as = { name: "show", beforeMount(e, { value: t }, { transition: n }) { - e[Zo] = e.style.display === "none" ? "" : e.style.display, n && t ? n.beforeEnter(e) : es(e, t); + e[rs] = e.style.display === "none" ? "" : e.style.display, n && t ? n.beforeEnter(e) : os(e, t); }, mounted(e, { value: t }, { transition: n }) { n && t && n.enter(e); }, updated(e, { value: t, oldValue: n }, { transition: r }) { - !t != !n && (r ? t ? (r.beforeEnter(e), es(e, !0), r.enter(e)) : r.leave(e, () => { - es(e, !1); - }) : es(e, t)); + !t != !n && (r ? t ? (r.beforeEnter(e), os(e, !0), r.enter(e)) : r.leave(e, () => { + os(e, !1); + }) : os(e, t)); }, beforeUnmount(e, { value: t }) { - es(e, t); + os(e, t); } }; -function es(e, t) { - e.style.display = t ? e[Zo] : "none", e[Qo] = !t; +function os(e, t) { + e.style.display = t ? e[rs] : "none", e[is] = !t; } -var ts = /* @__PURE__ */ Symbol(""), ns = /(?:^|;)\s*display\s*:/; -function rs(e, t, n) { +var ss = /* @__PURE__ */ Symbol(""), cs = /(?:^|;)\s*display\s*:/; +function ls(e, t, n) { let r = e.style, i = g(n), a = !1; if (n && !i) { if (t) { if (g(t)) for (let e of t.split(";")) { let t = e.slice(0, e.indexOf(":")).trim(); - n[t] ?? as(r, t, ""); + n[t] ?? ds(r, t, ""); } - else for (let e in t) n[e] ?? as(r, e, ""); + else for (let e in t) n[e] ?? ds(r, e, ""); } for (let i in n) { i === "display" && (a = !0); let o = n[i]; - o == null ? as(r, i, "") : ls(e, i, !g(t) && t ? t[i] : void 0, o) || as(r, i, o); + o == null ? ds(r, i, "") : hs(e, i, !g(t) && t ? t[i] : void 0, o) || ds(r, i, o); } } else if (i) { if (t !== n) { - let e = r[ts]; - e && (n += ";" + e), r.cssText = n, a = ns.test(n); + let e = r[ss]; + e && (n += ";" + e), r.cssText = n, a = cs.test(n); } } else t && e.removeAttribute("style"); - Zo in e && (i && t === n || (e[Zo] = a ? r.display : ""), e[Qo] && (r.display = "none")); + rs in e && (i && t === n || (e[rs] = a ? r.display : ""), e[is] && (r.display = "none")); } -var is = /\s*!important$/; -function as(e, t, n) { - if (d(n)) n.forEach((n) => as(e, t, n)); - else if (n ??= "", t.startsWith("--")) is.test(n) ? e.setProperty(t, n.replace(is, ""), "important") : e.setProperty(t, n); +var us = /\s*!important$/; +function ds(e, t, n) { + if (d(n)) n.forEach((n) => ds(e, t, n)); + else if (n ??= "", t.startsWith("--")) us.test(n) ? e.setProperty(t, n.replace(us, ""), "important") : e.setProperty(t, n); else { - let r = cs(e, t); - is.test(n) ? e.setProperty(E(r), n.replace(is, ""), "important") : e[r] = n; + let r = ms(e, t); + us.test(n) ? e.setProperty(E(r), n.replace(us, ""), "important") : e[r] = n; } } -var os = [ +var fs = [ "Webkit", "Moz", "ms" -], ss = {}; -function cs(e, t) { - let n = ss[t]; +], ps = {}; +function ms(e, t) { + let n = ps[t]; if (n) return n; let r = T(t); - if (r !== "filter" && r in e) return ss[t] = r; + if (r !== "filter" && r in e) return ps[t] = r; r = ie(r); - for (let n = 0; n < os.length; n++) { - let i = os[n] + r; - if (i in e) return ss[t] = i; + for (let n = 0; n < fs.length; n++) { + let i = fs[n] + r; + if (i in e) return ps[t] = i; } return t; } -function ls(e, t, n, r) { +function hs(e, t, n, r) { return e.tagName === "TEXTAREA" && (t === "width" || t === "height") && g(r) && n === r; } -var us = "http://www.w3.org/1999/xlink"; -function ds(e, t, n, r, i, a = ye(t)) { - r && t.startsWith("xlink:") ? n == null ? e.removeAttributeNS(us, t.slice(6, t.length)) : e.setAttributeNS(us, t, n) : n == null || a && !be(n) ? e.removeAttribute(t) : e.setAttribute(t, a ? "" : _(n) ? String(n) : n); +var gs = "http://www.w3.org/1999/xlink"; +function _s(e, t, n, r, i, a = ve(t)) { + r && t.startsWith("xlink:") ? n == null ? e.removeAttributeNS(gs, t.slice(6, t.length)) : e.setAttributeNS(gs, t, n) : n == null || a && !ye(n) ? e.removeAttribute(t) : e.setAttribute(t, a ? "" : _(n) ? String(n) : n); } -function fs(e, t, n, r, i) { +function vs(e, t, n, r, i) { if (t === "innerHTML" || t === "textContent") { - n != null && (e[t] = t === "innerHTML" ? wo(n) : n); + n != null && (e[t] = t === "innerHTML" ? Ao(n) : n); return; } let a = e.tagName; @@ -3322,36 +3377,36 @@ function fs(e, t, n, r, i) { let o = !1; if (n === "" || n == null) { let r = typeof e[t]; - r === "boolean" ? n = be(n) : n == null && r === "string" ? (n = "", o = !0) : r === "number" && (n = 0, o = !0); + r === "boolean" ? n = ye(n) : n == null && r === "string" ? (n = "", o = !0) : r === "number" && (n = 0, o = !0); } try { e[t] = n; } catch {} o && e.removeAttribute(i || t); } -function ps(e, t, n, r) { +function ys(e, t, n, r) { e.addEventListener(t, n, r); } -function ms(e, t, n, r) { +function bs(e, t, n, r) { e.removeEventListener(t, n, r); } -var hs = /* @__PURE__ */ Symbol("_vei"); -function gs(e, t, n, r, i = null) { - let a = e[hs] || (e[hs] = {}), o = a[t]; +var xs = /* @__PURE__ */ Symbol("_vei"); +function Ss(e, t, n, r, i = null) { + let a = e[xs] || (e[xs] = {}), o = a[t]; if (r && o) o.value = r; else { - let [n, s] = ys(t); - r ? ps(e, n, a[t] = Cs(r, i), s) : o && (ms(e, n, o, s), a[t] = void 0); + let [n, s] = Ts(t); + r ? ys(e, n, a[t] = ks(r, i), s) : o && (bs(e, n, o, s), a[t] = void 0); } } -var _s = /(Once|Passive|Capture)$/, vs = /^on:?(?:Once|Passive|Capture)$/; -function ys(e) { +var Cs = /(Once|Passive|Capture)$/, ws = /^on:?(?:Once|Passive|Capture)$/; +function Ts(e) { let t, n; - for (; (n = e.match(_s)) && !vs.test(e);) t ||= {}, e = e.slice(0, e.length - n[1].length), t[n[1].toLowerCase()] = !0; + for (; (n = e.match(Cs)) && !ws.test(e);) t ||= {}, e = e.slice(0, e.length - n[1].length), t[n[1].toLowerCase()] = !0; return [e[2] === ":" ? e.slice(3) : E(e.slice(2)), t]; } -var bs = 0, xs = /* @__PURE__ */ Promise.resolve(), Ss = () => bs ||= (xs.then(() => bs = 0), Date.now()); -function Cs(e, t) { +var Es = 0, Ds = /* @__PURE__ */ Promise.resolve(), Os = () => Es ||= (Ds.then(() => Es = 0), Date.now()); +function ks(e, t) { let n = (e) => { if (!e._vts) e._vts = Date.now(); else if (e._vts <= n.attached) return; @@ -3364,94 +3419,94 @@ function Cs(e, t) { let i = r.slice(), a = [e]; for (let n = 0; n < i.length && !e._stopped; n++) { let e = i[n]; - e && Sn(e, t, 5, a); + e && Cn(e, t, 5, a); } - } else Sn(r, t, 5, [e]); + } else Cn(r, t, 5, [e]); }; - return n.value = e, n.attached = Ss(), n; + return n.value = e, n.attached = Os(), n; } -var ws = (e) => e.charCodeAt(0) === 111 && e.charCodeAt(1) === 110 && e.charCodeAt(2) > 96 && e.charCodeAt(2) < 123, Ts = (e, t, n, r, i, s) => { +var As = (e) => e.charCodeAt(0) === 111 && e.charCodeAt(1) === 110 && e.charCodeAt(2) > 96 && e.charCodeAt(2) < 123, js = (e, t, n, r, i, s) => { let c = i === "svg"; - t === "class" ? Xo(e, r, c) : t === "style" ? rs(e, n, r) : a(t) ? o(t) || gs(e, t, n, r, s) : (t[0] === "." ? (t = t.slice(1), 1) : t[0] === "^" ? (t = t.slice(1), 0) : Es(e, t, r, c)) ? (fs(e, t, r), e.tagName.includes("-") || t !== "value" && t !== "checked" && t !== "selected" || ds(e, t, r, c, s, t !== "value")) : e._isVueCE && (Ds(e, t) || e._def.__asyncLoader && (/[A-Z]/.test(t) || !g(r))) ? fs(e, T(t), r, s, t) : (t === "true-value" ? e._trueValue = r : t === "false-value" && (e._falseValue = r), ds(e, t, r, c)); + t === "class" ? ns(e, r, c) : t === "style" ? ls(e, n, r) : a(t) ? o(t) || Ss(e, t, n, r, s) : (t[0] === "." ? (t = t.slice(1), 1) : t[0] === "^" ? (t = t.slice(1), 0) : Ms(e, t, r, c)) ? (vs(e, t, r), e.tagName.includes("-") || t !== "value" && t !== "checked" && t !== "selected" || _s(e, t, r, c, s, t !== "value")) : e._isVueCE && (Ns(e, t) || e._def.__asyncLoader && (/[A-Z]/.test(t) || !g(r))) ? vs(e, T(t), r, s, t) : (t === "true-value" ? e._trueValue = r : t === "false-value" && (e._falseValue = r), _s(e, t, r, c)); }; -function Es(e, t, n, r) { - if (r) return !!(t === "innerHTML" || t === "textContent" || t in e && ws(t) && h(n)); +function Ms(e, t, n, r) { + if (r) return !!(t === "innerHTML" || t === "textContent" || t in e && As(t) && h(n)); if (t === "spellcheck" || t === "draggable" || t === "translate" || t === "autocorrect" || t === "sandbox" && e.tagName === "IFRAME" || t === "form" || t === "list" && e.tagName === "INPUT" || t === "type" && e.tagName === "TEXTAREA") return !1; if (t === "width" || t === "height") { let t = e.tagName; if (t === "IMG" || t === "VIDEO" || t === "CANVAS" || t === "SOURCE") return !1; } - return ws(t) && g(n) ? !1 : t in e; + return As(t) && g(n) ? !1 : t in e; } -function Ds(e, t) { +function Ns(e, t) { let n = e._def.props; if (!n) return !1; let r = T(t); return Array.isArray(n) ? n.some((e) => T(e) === r) : Object.keys(n).some((e) => T(e) === r); } -var Os = (e) => { +var Ps = (e) => { let t = e.props["onUpdate:modelValue"] || !1; - return d(t) ? (e) => se(t, e) : t; + return d(t) ? (e) => oe(t, e) : t; }; -function ks(e) { +function Fs(e) { e.target.composing = !0; } -function As(e) { +function Is(e) { let t = e.target; t.composing && (t.composing = !1, t.dispatchEvent(new Event("input"))); } -var js = /* @__PURE__ */ Symbol("_assign"), Ms = /* @__PURE__ */ Symbol("_initialValue"); -function Ns(e, t, n) { - return t && (e = e.trim()), n && (e = le(e)), e; +var Ls = /* @__PURE__ */ Symbol("_assign"), Rs = /* @__PURE__ */ Symbol("_initialValue"); +function zs(e, t, n) { + return t && (e = e.trim()), n && (e = ce(e)), e; } -var Ps = { +var Bs = { created(e, { modifiers: { lazy: t, trim: n, number: r } }, i) { - e.parentNode && (e.type === "text" ? e[Ms] = e.defaultValue.replace(/[\r\n]/g, "") : e.type === "textarea" && (e[Ms] = e.defaultValue.replace(/\r\n?/g, "\n"))), e[js] = Os(i); + e.parentNode && (e.type === "text" ? e[Rs] = e.defaultValue.replace(/[\r\n]/g, "") : e.type === "textarea" && (e[Rs] = e.defaultValue.replace(/\r\n?/g, "\n"))), e[Ls] = Ps(i); let a = r || i.props && i.props.type === "number"; - ps(e, t ? "change" : "input", (t) => { - t.target.composing || e[js](Ns(e.value, n, a)); - }), (n || a) && ps(e, "change", () => { - e.value = Ns(e.value, n, a); - }), t || (ps(e, "compositionstart", ks), ps(e, "compositionend", As), ps(e, "change", As)); + ys(e, t ? "change" : "input", (t) => { + t.target.composing || e[Ls](zs(e.value, n, a)); + }), (n || a) && ys(e, "change", () => { + e.value = zs(e.value, n, a); + }), t || (ys(e, "compositionstart", Fs), ys(e, "compositionend", Is), ys(e, "change", Is)); }, mounted(e, { value: t, modifiers: { trim: n, number: r } }) { - let i = t ?? "", a = e[Ms]; - delete e[Ms], a !== void 0 && (e.type === "text" || e.type === "textarea") && e.value !== a ? e[js](Ns(e.value, n, r)) : e.value = i; + let i = t ?? "", a = e[Rs]; + delete e[Rs], a !== void 0 && (e.type === "text" || e.type === "textarea") && e.value !== a ? e[Ls](zs(e.value, n, r)) : e.value = i; }, beforeUpdate(e, { value: t, oldValue: n, modifiers: { lazy: r, trim: i, number: a } }, o) { - if (e[js] = Os(o), e.composing) return; - let s = (a || e.type === "number") && !/^0\d/.test(e.value) ? le(e.value) : e.value, c = t ?? ""; + if (e[Ls] = Ps(o), e.composing) return; + let s = (a || e.type === "number") && !/^0\d/.test(e.value) ? ce(e.value) : e.value, c = t ?? ""; if (s === c) return; let l = e.getRootNode(); (l instanceof Document || l instanceof ShadowRoot) && l.activeElement === e && e.type !== "range" && (r && t === n || i && e.value.trim() === c) || (e.value = c); } -}, Fs = { +}, Vs = { deep: !0, created(e, { value: t, modifiers: { number: n } }, r) { - e._modelValue = t, ps(e, "change", () => { - let t = Array.prototype.filter.call(e.options, (e) => e.selected).map((e) => n ? le(Rs(e)) : Rs(e)), r = e.multiple, i = r ? p(e._modelValue) ? new Set(t) : t : t[0], a = e._pendingValue = [r, r ? d(i) ? t.slice() : t : i]; + e._modelValue = t, ys(e, "change", () => { + let t = Array.prototype.filter.call(e.options, (e) => e.selected).map((e) => n ? ce(Ws(e)) : Ws(e)), r = e.multiple, i = r ? p(e._modelValue) ? new Set(t) : t : t[0], a = e._pendingValue = [r, r ? d(i) ? t.slice() : t : i]; try { - e[js](i); + e[Ls](i); } finally { - Mn(() => { + Nn(() => { e._pendingValue === a && (e._pendingValue = void 0); }); } - }), e[js] = Os(r); + }), e[Ls] = Ps(r); }, mounted(e, { value: t }) { - Ls(e, t); + Us(e, t); }, beforeUpdate(e, { value: t }, n) { - e._modelValue = t, e[js] = Os(n); + e._modelValue = t, e[Ls] = Ps(n); }, updated(e, { value: t }) { let n = e._pendingValue; - e._pendingValue = void 0, n && n[0] === e.multiple && Is(t, n[1], n[0]) || Ls(e, t); + e._pendingValue = void 0, n && n[0] === e.multiple && Hs(t, n[1], n[0]) || Us(e, t); } }; -function Is(e, t, n) { - if (!n || d(e)) return Te(e, t); +function Hs(e, t, n) { + if (!n || d(e)) return we(e, t); if (p(e)) { if (e.size !== t.length) return !1; for (let n of t) if (!e.has(n)) return !1; @@ -3459,17 +3514,17 @@ function Is(e, t, n) { } return !1; } -function Ls(e, t) { +function Us(e, t) { let n = e.multiple, r = d(t); if (!n || r || p(t)) { for (let i = 0, a = e.options.length; i < a; i++) { - let a = e.options[i], o = Rs(a); + let a = e.options[i], o = Ws(a); if (n) { if (r) { let e = typeof o; - a.selected = e === "string" || e === "number" ? t.some((e) => String(e) === String(o)) : Ee(t, o) > -1; + a.selected = e === "string" || e === "number" ? t.some((e) => String(e) === String(o)) : Te(t, o) > -1; } else a.selected = t.has(o); - } else if (Te(Rs(a), t)) { + } else if (we(Ws(a), t)) { e.selectedIndex !== i && (e.selectedIndex = i); return; } @@ -3477,15 +3532,15 @@ function Ls(e, t) { !n && e.selectedIndex !== -1 && (e.selectedIndex = -1); } } -function Rs(e) { +function Ws(e) { return "_value" in e ? e._value : e.value; } -var zs = [ +var Gs = [ "ctrl", "shift", "alt", "meta" -], Bs = { +], Ks = { stop: (e) => e.stopPropagation(), prevent: (e) => e.preventDefault(), self: (e) => e.target !== e.currentTarget, @@ -3496,18 +3551,18 @@ var zs = [ left: (e) => "button" in e && e.button !== 0, middle: (e) => "button" in e && e.button !== 1, right: (e) => "button" in e && e.button !== 2, - exact: (e, t) => zs.some((n) => e[`${n}Key`] && !t.includes(n)) -}, Vs = (e, t) => { + exact: (e, t) => Gs.some((n) => e[`${n}Key`] && !t.includes(n)) +}, qs = (e, t) => { if (!e) return e; let n = e._withMods ||= {}, r = t.join("."); return n[r] || (n[r] = ((n, ...r) => { for (let e = 0; e < t.length; e++) { - let r = Bs[t[e]]; + let r = Ks[t[e]]; if (r && r(n, t)) return; } return e(n, ...r); })); -}, Hs = { +}, Js = { esc: "escape", space: " ", up: "arrow-up", @@ -3515,57 +3570,57 @@ var zs = [ right: "arrow-right", down: "arrow-down", delete: "backspace" -}, Us = (e, t) => { +}, Ys = (e, t) => { let n = e._withKeys ||= {}, r = t.join("."); return n[r] || (n[r] = ((n) => { if (!("key" in n)) return; let r = E(n.key); - if (t.some((e) => e === r || Hs[e] === r)) return e(n); + if (t.some((e) => e === r || Js[e] === r)) return e(n); })); -}, Ws = /* @__PURE__ */ s({ patchProp: Ts }, ko), Gs; -function Ks() { - return Gs ||= ya(Ws); +}, Xs = /* @__PURE__ */ s({ patchProp: js }, Fo), Zs; +function Qs() { + return Zs ||= wa(Xs); } -var qs = ((...e) => { - let t = Ks().createApp(...e), { mount: n } = t; +var $s = ((...e) => { + let t = Qs().createApp(...e), { mount: n } = t; return t.mount = (e) => { - let r = Ys(e); + let r = tc(e); if (!r) return; let i = t._component; h(i) || i.render || i.template || (i.template = r.innerHTML), r.nodeType === 1 && (r.textContent = ""); - let a = n(r, !1, Js(r)); + let a = n(r, !1, ec(r)); return r instanceof Element && (r.removeAttribute("v-cloak"), r.setAttribute("data-v-app", "")), a; }, t; }); -function Js(e) { +function ec(e) { if (e instanceof SVGElement) return "svg"; if (typeof MathMLElement == "function" && e instanceof MathMLElement) return "mathml"; } -function Ys(e) { +function tc(e) { return g(e) ? document.querySelector(e) : e; } // node_modules/@primeuix/utils/dist/object/index.mjs -var Xs = Object.defineProperty, Zs = Object.getOwnPropertySymbols, Qs = Object.prototype.hasOwnProperty, $s = Object.prototype.propertyIsEnumerable, ec = (e, t, n) => t in e ? Xs(e, t, { +var nc = Object.defineProperty, rc = Object.getOwnPropertySymbols, ic = Object.prototype.hasOwnProperty, ac = Object.prototype.propertyIsEnumerable, oc = (e, t, n) => t in e ? nc(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n -}) : e[t] = n, tc = (e, t) => { - for (var n in t ||= {}) Qs.call(t, n) && ec(e, n, t[n]); - if (Zs) for (var n of Zs(t)) $s.call(t, n) && ec(e, n, t[n]); +}) : e[t] = n, sc = (e, t) => { + for (var n in t ||= {}) ic.call(t, n) && oc(e, n, t[n]); + if (rc) for (var n of rc(t)) ac.call(t, n) && oc(e, n, t[n]); return e; }; -function nc(e) { +function cc(e) { return e == null || e === "" || Array.isArray(e) && e.length === 0 || !(e instanceof Date) && typeof e == "object" && Object.keys(e).length === 0; } -function rc(e, t, n = /* @__PURE__ */ new WeakSet()) { +function lc(e, t, n = /* @__PURE__ */ new WeakSet()) { if (e === t) return !0; if (!e || !t || typeof e != "object" || typeof t != "object" || n.has(e) || n.has(t)) return !1; n.add(e).add(t); let r = Array.isArray(e), i = Array.isArray(t), a, o, s; if (r && i) { if (o = e.length, o != t.length) return !1; - for (a = o; a-- !== 0;) if (!rc(e[a], t[a], n)) return !1; + for (a = o; a-- !== 0;) if (!lc(e[a], t[a], n)) return !1; return !0; } if (r != i) return !1; @@ -3578,26 +3633,26 @@ function rc(e, t, n = /* @__PURE__ */ new WeakSet()) { let f = Object.keys(e); if (o = f.length, o !== Object.keys(t).length) return !1; for (a = o; a-- !== 0;) if (!Object.prototype.hasOwnProperty.call(t, f[a])) return !1; - for (a = o; a-- !== 0;) if (s = f[a], !rc(e[s], t[s], n)) return !1; + for (a = o; a-- !== 0;) if (s = f[a], !lc(e[s], t[s], n)) return !1; return !0; } -function ic(e, t) { - return rc(e, t); +function uc(e, t) { + return lc(e, t); } -function ac(e) { +function dc(e) { return typeof e == "function" && "call" in e && "apply" in e; } function K(e) { - return !nc(e); + return !cc(e); } -function oc(e, t) { +function fc(e, t) { if (!e || !t) return null; try { let n = e[t]; if (K(n)) return n; } catch {} if (Object.keys(e).length) { - if (ac(t)) return t(e); + if (dc(t)) return t(e); if (t.indexOf(".") === -1) return e[t]; { let n = t.split("."), r = e; @@ -3610,29 +3665,29 @@ function oc(e, t) { } return null; } -function sc(e, t, n) { - return n ? oc(e, n) === oc(t, n) : ic(e, t); +function pc(e, t, n) { + return n ? fc(e, n) === fc(t, n) : uc(e, t); } -function cc(e, t) { +function mc(e, t) { if (e != null && t && t.length) { - for (let n of t) if (sc(e, n)) return !0; + for (let n of t) if (pc(e, n)) return !0; } return !1; } -function lc(e, t = !0) { +function hc(e, t = !0) { return e instanceof Object && e.constructor === Object && (t || Object.keys(e).length !== 0); } -function uc(e = {}, t = {}) { - let n = tc({}, e); +function gc(e = {}, t = {}) { + let n = sc({}, e); return Object.keys(t).forEach((r) => { let i = r; - lc(t[i]) && i in e && lc(e[i]) ? n[i] = uc(e[i], t[i]) : n[i] = t[i]; + hc(t[i]) && i in e && hc(e[i]) ? n[i] = gc(e[i], t[i]) : n[i] = t[i]; }), n; } -function dc(...e) { - return e.reduce((e, t, n) => n === 0 ? t : uc(e, t), {}); +function _c(...e) { + return e.reduce((e, t, n) => n === 0 ? t : gc(e, t), {}); } -function fc(e, t) { +function vc(e, t) { let n = -1; if (K(e)) try { n = e.findLastIndex(t); @@ -3641,42 +3696,42 @@ function fc(e, t) { } return n; } -function pc(e, ...t) { - return ac(e) ? e(...t) : e; +function yc(e, ...t) { + return dc(e) ? e(...t) : e; } -function mc(e, t = !0) { +function bc(e, t = !0) { return typeof e == "string" && (t || e !== ""); } -function hc(e) { - return mc(e) ? e.replace(/(-|_)/g, "").toLowerCase() : e; +function xc(e) { + return bc(e) ? e.replace(/(-|_)/g, "").toLowerCase() : e; } -function gc(e, t = "", n = {}) { - let r = hc(t).split("."), i = r.shift(); - return i ? lc(e) ? gc(pc(e[Object.keys(e).find((e) => hc(e) === i) || ""], n), r.join("."), n) : void 0 : pc(e, n); +function Sc(e, t = "", n = {}) { + let r = xc(t).split("."), i = r.shift(); + return i ? hc(e) ? Sc(yc(e[Object.keys(e).find((e) => xc(e) === i) || ""], n), r.join("."), n) : void 0 : yc(e, n); } -function _c(e, t = !0) { +function Cc(e, t = !0) { return Array.isArray(e) && (t || e.length !== 0); } -function vc(e) { +function wc(e) { return K(e) && !isNaN(e); } -function yc(e = "") { +function Tc(e = "") { return K(e) && e.length === 1 && !!e.match(/\S| /); } -function bc(e, t) { +function Ec(e, t) { if (t) { let n = t.test(e); return t.lastIndex = 0, n; } return !1; } -function xc(...e) { - return dc(...e); +function Dc(...e) { + return _c(...e); } -function Sc(e) { +function Oc(e) { return e && e.replace(/\/\*(?:(?!\*\/)[\s\S])*\*\/|[\r\n\t]+/g, "").replace(/ {2,}/g, " ").replace(/ ([{:}]) /g, "$1").replace(/([;,]) /g, "$1").replace(/ !/g, "!").replace(/: /g, ":").trim(); } -function Cc(e) { +function kc(e) { if (e && /[\xC0-\xFF\u0100-\u017E]/.test(e)) { let t = { A: /[\xC0-\xC5\u0100\u0102\u0104]/g, @@ -3728,14 +3783,14 @@ function Cc(e) { } return e; } -function wc(e) { - return mc(e, !1) ? e[0].toUpperCase() + e.slice(1) : e; +function Ac(e) { + return bc(e, !1) ? e[0].toUpperCase() + e.slice(1) : e; } -function Tc(e) { - return mc(e) ? e.replace(/(_)/g, "-").replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase() : e; +function jc(e) { + return bc(e) ? e.replace(/(_)/g, "-").replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase() : e; } // node_modules/@primeuix/utils/dist/eventbus/index.mjs -function Ec() { +function Mc() { let e = /* @__PURE__ */ new Map(); return { on(t, n) { @@ -3775,24 +3830,24 @@ function q(...e) { } } // node_modules/@primeuix/utils/dist/dom/index.mjs -function Dc(e, t) { +function Nc(e, t) { return e ? e.classList ? e.classList.contains(t) : RegExp("(^| )" + t + "( |$)", "gi").test(e.className) : !1; } -function Oc(e, t) { +function Pc(e, t) { if (e && t) { let n = (t) => { - Dc(e, t) || (e.classList ? e.classList.add(t) : e.className += " " + t); + Nc(e, t) || (e.classList ? e.classList.add(t) : e.className += " " + t); }; [t].flat().filter(Boolean).forEach((e) => e.split(" ").forEach(n)); } } -function kc() { +function Fc() { return window.innerWidth - document.documentElement.offsetWidth; } -function Ac(e) { - typeof e == "string" ? Oc(document.body, e || "p-overflow-hidden") : (e != null && e.variableName && document.body.style.setProperty(e.variableName, kc() + "px"), Oc(document.body, e?.className || "p-overflow-hidden")); +function Ic(e) { + typeof e == "string" ? Pc(document.body, e || "p-overflow-hidden") : (e != null && e.variableName && document.body.style.setProperty(e.variableName, Fc() + "px"), Pc(document.body, e?.className || "p-overflow-hidden")); } -function jc(e, t) { +function Lc(e, t) { if (e && t) { let n = (t) => { e.classList ? e.classList.remove(t) : e.className = e.className.replace(RegExp("(^|\\b)" + t.split(" ").join("|") + "(\\b|$)", "gi"), " "); @@ -3800,10 +3855,10 @@ function jc(e, t) { [t].flat().filter(Boolean).forEach((e) => e.split(" ").forEach(n)); } } -function Mc(e) { - typeof e == "string" ? jc(document.body, e || "p-overflow-hidden") : (e != null && e.variableName && document.body.style.removeProperty(e.variableName), jc(document.body, e?.className || "p-overflow-hidden")); +function Rc(e) { + typeof e == "string" ? Lc(document.body, e || "p-overflow-hidden") : (e != null && e.variableName && document.body.style.removeProperty(e.variableName), Lc(document.body, e?.className || "p-overflow-hidden")); } -function Nc(e) { +function zc(e) { for (let t of document == null ? void 0 : document.styleSheets) try { for (let n of t?.cssRules) for (let t of n?.style) if (e.test(t)) return { name: t, @@ -3812,7 +3867,7 @@ function Nc(e) { } catch {} return null; } -function Pc(e) { +function Bc(e) { let t = { width: 0, height: 0 @@ -3823,40 +3878,40 @@ function Pc(e) { } return t; } -function Fc() { +function Vc() { let e = window, t = document, n = t.documentElement, r = t.getElementsByTagName("body")[0]; return { width: e.innerWidth || n.clientWidth || r.clientWidth, height: e.innerHeight || n.clientHeight || r.clientHeight }; } -function Ic(e) { +function Hc(e) { return e ? Math.abs(e.scrollLeft) : 0; } -function Lc() { +function Uc() { let e = document.documentElement; - return (window.pageXOffset || Ic(e)) - (e.clientLeft || 0); + return (window.pageXOffset || Hc(e)) - (e.clientLeft || 0); } -function Rc() { +function Wc() { let e = document.documentElement; return (window.pageYOffset || e.scrollTop) - (e.clientTop || 0); } -function zc(e) { +function Gc(e) { return e ? getComputedStyle(e).direction === "rtl" : !1; } -function Bc(e, t, n = !0) { +function Kc(e, t, n = !0) { if (e) { let r = e.offsetParent ? { width: e.offsetWidth, height: e.offsetHeight - } : Pc(e), i = r.height, a = r.width, o = t.offsetHeight, s = t.offsetWidth, c = t.getBoundingClientRect(), l = Rc(), u = Lc(), d = Fc(), f, p, m = "top"; - c.top + o + i > d.height ? (f = c.top + l - i, m = "bottom", f < 0 && (f = l)) : f = o + c.top + l, p = c.left + a > d.width ? Math.max(0, c.left + u + s - a) : c.left + u, zc(e) ? e.style.insetInlineEnd = p + "px" : e.style.insetInlineStart = p + "px", e.style.top = f + "px", e.style.transformOrigin = m, n && (e.style.marginTop = m === "bottom" ? `calc(${Nc(/-anchor-gutter$/)?.value ?? "2px"} * -1)` : Nc(/-anchor-gutter$/)?.value ?? ""); + } : Bc(e), i = r.height, a = r.width, o = t.offsetHeight, s = t.offsetWidth, c = t.getBoundingClientRect(), l = Wc(), u = Uc(), d = Vc(), f, p, m = "top"; + c.top + o + i > d.height ? (f = c.top + l - i, m = "bottom", f < 0 && (f = l)) : f = o + c.top + l, p = c.left + a > d.width ? Math.max(0, c.left + u + s - a) : c.left + u, Gc(e) ? e.style.insetInlineEnd = p + "px" : e.style.insetInlineStart = p + "px", e.style.top = f + "px", e.style.transformOrigin = m, n && (e.style.marginTop = m === "bottom" ? `calc(${zc(/-anchor-gutter$/)?.value ?? "2px"} * -1)` : zc(/-anchor-gutter$/)?.value ?? ""); } } -function Vc(e, t) { +function qc(e, t) { e && (typeof t == "string" ? e.style.cssText = t : Object.entries(t || {}).forEach(([t, n]) => e.style[t] = n)); } -function Hc(e, t) { +function Jc(e, t) { if (e instanceof HTMLElement) { let n = e.offsetWidth; if (t) { @@ -3867,33 +3922,33 @@ function Hc(e, t) { } return 0; } -function Uc(e, t, n = !0, r = void 0) { +function Yc(e, t, n = !0, r = void 0) { if (e) { let i = e.offsetParent ? { width: e.offsetWidth, height: e.offsetHeight - } : Pc(e), a = t.offsetHeight, o = t.getBoundingClientRect(), s = Fc(), c, l, u = r ?? "top"; + } : Bc(e), a = t.offsetHeight, o = t.getBoundingClientRect(), s = Vc(), c, l, u = r ?? "top"; if (!r && o.top + a + i.height > s.height ? (c = -1 * i.height, u = "bottom", o.top + c < 0 && (c = -1 * o.top)) : c = a, l = i.width > s.width ? o.left * -1 : o.left + i.width > s.width ? (o.left + i.width - s.width) * -1 : 0, e.style.top = c + "px", e.style.insetInlineStart = l + "px", e.style.transformOrigin = u, n) { - let t = Nc(/-anchor-gutter$/)?.value; + let t = zc(/-anchor-gutter$/)?.value; e.style.marginTop = u === "bottom" ? `calc(${t ?? "2px"} * -1)` : t ?? ""; } } } -function Wc(e) { +function Xc(e) { if (e) { let t = e.parentNode; return t && t instanceof ShadowRoot && t.host && (t = t.host), t; } return null; } -function Gc(e) { - return !!(e != null && e.nodeName && Wc(e)); +function Zc(e) { + return !!(e != null && e.nodeName && Xc(e)); } -function Kc(e) { +function Qc(e) { return typeof Element < "u" ? e instanceof Element : typeof e == "object" && !!e && e.nodeType === 1 && typeof e.nodeName == "string"; } -function qc(e, t = {}) { - if (Kc(e)) { +function $c(e, t = {}) { + if (Qc(e)) { let n = (t, r) => { var i; let a = (i = e?.$attrs) != null && i[t] ? [e?.$attrs?.[t]] : []; @@ -3912,34 +3967,34 @@ function qc(e, t = {}) { Object.entries(t).forEach(([t, r]) => { if (r != null) { let i = t.match(/^on(.+)/); - i ? e.addEventListener(i[1].toLowerCase(), r) : t === "p-bind" || t === "pBind" ? qc(e, r) : (r = t === "class" ? [...new Set(n("class", r))].join(" ").trim() : t === "style" ? n("style", r).join(";").trim() : r, (e.$attrs = e.$attrs || {}) && (e.$attrs[t] = r), e.setAttribute(t, r)); + i ? e.addEventListener(i[1].toLowerCase(), r) : t === "p-bind" || t === "pBind" ? $c(e, r) : (r = t === "class" ? [...new Set(n("class", r))].join(" ").trim() : t === "style" ? n("style", r).join(";").trim() : r, (e.$attrs = e.$attrs || {}) && (e.$attrs[t] = r), e.setAttribute(t, r)); } }); } } -function Jc(e, t = {}, ...n) { +function el(e, t = {}, ...n) { if (e) { let r = document.createElement(e); - return qc(r, t), r.append(...n), r; + return $c(r, t), r.append(...n), r; } } -function Yc(e, t) { - return Kc(e) ? Array.from(e.querySelectorAll(t)) : []; +function tl(e, t) { + return Qc(e) ? Array.from(e.querySelectorAll(t)) : []; } -function Xc(e, t) { - return Kc(e) ? e.matches(t) ? e : e.querySelector(t) : null; +function nl(e, t) { + return Qc(e) ? e.matches(t) ? e : e.querySelector(t) : null; } function J(e, t) { e && document.activeElement !== e && e.focus(t); } -function Zc(e, t) { - if (Kc(e)) { +function rl(e, t) { + if (Qc(e)) { let n = e.getAttribute(t); return isNaN(n) ? n === "true" || n === "false" ? n === "true" : n : +n; } } -function Qc(e, t = "") { - let n = Yc(e, `button:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden])${t}, +function il(e, t = "") { + let n = tl(e, `button:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden])${t}, [href]:not([tabindex = "-1"]):not([style*="display:none"]):not([hidden])${t}, input:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden])${t}, select:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden])${t}, @@ -3949,27 +4004,27 @@ function Qc(e, t = "") { for (let e of n) getComputedStyle(e).display != "none" && getComputedStyle(e).visibility != "hidden" && r.push(e); return r; } -function $c(e, t) { - let n = Qc(e, t); +function al(e, t) { + let n = il(e, t); return n.length > 0 ? n[0] : null; } -function el(e) { +function ol(e) { if (e) { let t = e.offsetHeight, n = getComputedStyle(e); return t -= parseFloat(n.paddingTop) + parseFloat(n.paddingBottom) + parseFloat(n.borderTopWidth) + parseFloat(n.borderBottomWidth), t; } return 0; } -function tl(e, t) { - let n = Qc(e, t); +function sl(e, t) { + let n = il(e, t); return n.length > 0 ? n[n.length - 1] : null; } -function nl(e) { +function cl(e) { if (e) { let t = e.getBoundingClientRect(); return { top: t.top + (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0), - left: t.left + (window.pageXOffset || Ic(document.documentElement) || Ic(document.body) || 0) + left: t.left + (window.pageXOffset || Hc(document.documentElement) || Hc(document.body) || 0) }; } return { @@ -3977,7 +4032,7 @@ function nl(e) { left: "auto" }; } -function rl(e, t) { +function ll(e, t) { if (e) { let n = e.offsetHeight; if (t) { @@ -3988,14 +4043,14 @@ function rl(e, t) { } return 0; } -function il(e, t = []) { - let n = Wc(e); - return n === null ? t : il(n, t.concat([n])); +function ul(e, t = []) { + let n = Xc(e); + return n === null ? t : ul(n, t.concat([n])); } -function al(e) { +function dl(e) { let t = []; if (e) { - let n = il(e), r = /(auto|scroll)/, i = (e) => { + let n = ul(e), r = /(auto|scroll)/, i = (e) => { try { let t = window.getComputedStyle(e, null); return r.test(t.getPropertyValue("overflow")) || r.test(t.getPropertyValue("overflowX")) || r.test(t.getPropertyValue("overflowY")); @@ -4008,7 +4063,7 @@ function al(e) { if (n) { let r = n.split(","); for (let n of r) { - let r = Xc(e, n); + let r = nl(e, n); r && i(r) && t.push(r); } } @@ -4017,21 +4072,21 @@ function al(e) { } return t; } -function ol(e) { +function fl(e) { if (e) { let t = e.offsetWidth, n = getComputedStyle(e); return t -= parseFloat(n.paddingLeft) + parseFloat(n.paddingRight) + parseFloat(n.borderLeftWidth) + parseFloat(n.borderRightWidth), t; } return 0; } -function sl() { +function pl() { return /(android)/i.test(navigator.userAgent); } -function cl() { +function ml() { return !!(typeof window < "u" && window.document && window.document.createElement); } -function ll(e, t = "") { - return Kc(e) ? e.matches(`button:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden])${t}, +function hl(e, t = "") { + return Qc(e) ? e.matches(`button:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden])${t}, [href][clientHeight][clientWidth]:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden])${t}, input:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden])${t}, select:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden])${t}, @@ -4039,22 +4094,22 @@ function ll(e, t = "") { [tabIndex]:not([tabIndex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden])${t}, [contenteditable]:not([tabIndex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden])${t}`) : !1; } -function ul(e) { +function gl(e) { return !!(e && e.offsetParent != null); } -function dl() { +function _l() { return "ontouchstart" in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0; } -function fl(e, t = "", n) { - Kc(e) && n != null && e.setAttribute(t, n); +function vl(e, t = "", n) { + Qc(e) && n != null && e.setAttribute(t, n); } // node_modules/@primeuix/utils/dist/uuid/index.mjs -var pl = {}; -function ml(e = "pui_id_") { - return Object.hasOwn(pl, e) || (pl[e] = 0), pl[e]++, `${e}${pl[e]}`; +var yl = {}; +function bl(e = "pui_id_") { + return Object.hasOwn(yl, e) || (yl[e] = 0), yl[e]++, `${e}${yl[e]}`; } // node_modules/@primeuix/utils/dist/zindex/index.mjs -function hl() { +function xl() { let e = [], t = (t, n, r = 999) => { let a = i(t, n, r), o = a.value + (a.key === t ? 0 : r) + 1; return e.push({ @@ -4078,58 +4133,58 @@ function hl() { getCurrent: (e) => r(e, !0) }; } -var gl = hl(), _l = Object.defineProperty, vl = Object.defineProperties, yl = Object.getOwnPropertyDescriptors, bl = Object.getOwnPropertySymbols, xl = Object.prototype.hasOwnProperty, Sl = Object.prototype.propertyIsEnumerable, Cl = (e, t, n) => t in e ? _l(e, t, { +var Sl = xl(), Cl = Object.defineProperty, wl = Object.defineProperties, Tl = Object.getOwnPropertyDescriptors, El = Object.getOwnPropertySymbols, Dl = Object.prototype.hasOwnProperty, Ol = Object.prototype.propertyIsEnumerable, kl = (e, t, n) => t in e ? Cl(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n -}) : e[t] = n, wl = (e, t) => { - for (var n in t ||= {}) xl.call(t, n) && Cl(e, n, t[n]); - if (bl) for (var n of bl(t)) Sl.call(t, n) && Cl(e, n, t[n]); +}) : e[t] = n, Al = (e, t) => { + for (var n in t ||= {}) Dl.call(t, n) && kl(e, n, t[n]); + if (El) for (var n of El(t)) Ol.call(t, n) && kl(e, n, t[n]); return e; -}, Tl = (e, t) => vl(e, yl(t)), El = (e, t) => { +}, jl = (e, t) => wl(e, Tl(t)), Ml = (e, t) => { var n = {}; - for (var r in e) xl.call(e, r) && t.indexOf(r) < 0 && (n[r] = e[r]); - if (e != null && bl) for (var r of bl(e)) t.indexOf(r) < 0 && Sl.call(e, r) && (n[r] = e[r]); + for (var r in e) Dl.call(e, r) && t.indexOf(r) < 0 && (n[r] = e[r]); + if (e != null && El) for (var r of El(e)) t.indexOf(r) < 0 && Ol.call(e, r) && (n[r] = e[r]); return n; -}, Dl = Ec(), Ol = /{([^}]*)}/g, kl = /(\d+\s+[\+\-\*\/]\s+\d+)/g, Al = /var\([^)]+\)/g; -function jl(e) { - return mc(e) ? e.replace(/[A-Z]/g, (e, t) => t === 0 ? e : "." + e.toLowerCase()).toLowerCase() : e; +}, Nl = Mc(), Pl = /{([^}]*)}/g, Fl = /(\d+\s+[\+\-\*\/]\s+\d+)/g, Il = /var\([^)]+\)/g; +function Ll(e) { + return bc(e) ? e.replace(/[A-Z]/g, (e, t) => t === 0 ? e : "." + e.toLowerCase()).toLowerCase() : e; } -function Ml(e) { - return lc(e) && e.hasOwnProperty("$value") && e.hasOwnProperty("$type") ? e.$value : e; +function Rl(e) { + return hc(e) && e.hasOwnProperty("$value") && e.hasOwnProperty("$type") ? e.$value : e; } -function Nl(e) { +function zl(e) { return e.replaceAll(/ /g, "").replace(/[^\w]/g, "-"); } -function Pl(e = "", t = "") { - return Nl(`${mc(e, !1) && mc(t, !1) ? `${e}-` : e}${t}`); +function Bl(e = "", t = "") { + return zl(`${bc(e, !1) && bc(t, !1) ? `${e}-` : e}${t}`); } -function Fl(e = "", t = "") { - return `--${Pl(e, t)}`; +function Vl(e = "", t = "") { + return `--${Bl(e, t)}`; } -function Il(e = "") { +function Hl(e = "") { return ((e.match(/{/g) || []).length + (e.match(/}/g) || []).length) % 2 != 0; } -function Ll(e, t = "", n = "", r = [], i) { - if (mc(e)) { +function Ul(e, t = "", n = "", r = [], i) { + if (bc(e)) { let t = e.trim(); - if (Il(t)) return; - if (bc(t, Ol)) { - let e = t.replaceAll(Ol, (e) => `var(${Fl(n, Tc(e.replace(/{|}/g, "").split(".").filter((e) => !r.some((t) => bc(e, t))).join("-")))}${K(i) ? `, ${i}` : ""})`); - return bc(e.replace(Al, "0"), kl) ? `calc(${e})` : e; + if (Hl(t)) return; + if (Ec(t, Pl)) { + let e = t.replaceAll(Pl, (e) => `var(${Vl(n, jc(e.replace(/{|}/g, "").split(".").filter((e) => !r.some((t) => Ec(e, t))).join("-")))}${K(i) ? `, ${i}` : ""})`); + return Ec(e.replace(Il, "0"), Fl) ? `calc(${e})` : e; } return t; } - if (vc(e)) return e; + if (wc(e)) return e; } -function Rl(e, t, n) { - mc(t, !1) && e.push(`${t}:${n};`); +function Wl(e, t, n) { + bc(t, !1) && e.push(`${t}:${n};`); } -function zl(e, t) { +function Gl(e, t) { return e ? `${e}{${t}}` : ""; } -function Bl(e, t) { +function Kl(e, t) { if (e.indexOf("dt(") === -1) return e; function n(e, t) { let n = [], i = 0, a = "", o = null, s = 0; @@ -4137,7 +4192,7 @@ function Bl(e, t) { let c = e[i]; if ((c === "\"" || c === "'" || c === "`") && e[i - 1] !== "\\" && (o = o === c ? null : c), !o && (c === "(" && s++, c === ")" && s--, (c === "," || i === e.length) && s === 0)) { let e = a.trim(); - e.startsWith("dt(") ? n.push(Bl(e, t)) : n.push(r(e)), a = "", i++; + e.startsWith("dt(") ? n.push(Kl(e, t)) : n.push(r(e)), a = "", i++; } else c !== void 0 && (a += c), i++; } return n; @@ -4161,24 +4216,24 @@ function Bl(e, t) { } return e; } -var Vl = (e) => { - let t = Y.getTheme(), n = Ul(t, e, void 0, "variable"); +var ql = (e) => { + let t = Y.getTheme(), n = Yl(t, e, void 0, "variable"); return { name: n?.match(/--[\w-]+/g)?.[0], variable: n, - value: Ul(t, e, void 0, "value") + value: Yl(t, e, void 0, "value") }; -}, Hl = (...e) => Ul(Y.getTheme(), ...e), Ul = (e = {}, t, n, r) => { +}, Jl = (...e) => Yl(Y.getTheme(), ...e), Yl = (e = {}, t, n, r) => { if (t) { - let { variable: i, options: a } = Y.defaults || {}, { prefix: o, transform: s } = e?.options || a || {}, c = bc(t, Ol) ? t : `{${t}}`; - return r === "value" || nc(r) && s === "strict" ? Y.getTokenValue(t) : Ll(c, void 0, o, [i.excludedKeyRegex], n); + let { variable: i, options: a } = Y.defaults || {}, { prefix: o, transform: s } = e?.options || a || {}, c = Ec(t, Pl) ? t : `{${t}}`; + return r === "value" || cc(r) && s === "strict" ? Y.getTokenValue(t) : Ul(c, void 0, o, [i.excludedKeyRegex], n); } return ""; }; -function Wl(e, ...t) { - return e instanceof Array ? Bl(e.reduce((e, n, r) => e + n + (pc(t[r], { dt: Hl }) ?? ""), ""), Hl) : pc(e, { dt: Hl }); +function Xl(e, ...t) { + return e instanceof Array ? Kl(e.reduce((e, n, r) => e + n + (yc(t[r], { dt: Jl }) ?? ""), ""), Jl) : yc(e, { dt: Jl }); } -function Gl(e, t = {}) { +function Zl(e, t = {}) { let n = Y.defaults.variable, { prefix: r = n.prefix, selector: i = n.selector, excludedKeyRegex: a = n.excludedKeyRegex } = t, o = [], s = [], c = [{ node: e, path: r @@ -4186,13 +4241,13 @@ function Gl(e, t = {}) { for (; c.length;) { let { node: e, path: t } = c.pop(); for (let n in e) { - let i = e[n], l = Ml(i), u = bc(n, a) ? Pl(t) : Pl(t, Tc(n)); - if (lc(l)) c.push({ + let i = e[n], l = Rl(i), u = Ec(n, a) ? Bl(t) : Bl(t, jc(n)); + if (hc(l)) c.push({ node: l, path: u }); else { - Rl(s, Fl(u), Ll(l, u, r, [a])); + Wl(s, Vl(u), Ul(l, u, r, [a])); let e = u; r && e.startsWith(r + "-") && (e = e.slice(r.length + 1)), o.push(e.replace(/-/g, ".")); } @@ -4203,10 +4258,10 @@ function Gl(e, t = {}) { value: s, tokens: o, declarations: l, - css: zl(i, l) + css: Gl(i, l) }; } -var Kl = { +var Ql = { regex: { rules: { class: { @@ -4263,21 +4318,21 @@ var Kl = { } }, _toVariables(e, t) { - return Gl(e, { prefix: t?.prefix }); + return Zl(e, { prefix: t?.prefix }); }, getCommon({ name: e = "", theme: t = {}, params: n, set: r, defaults: i }) { let { preset: a, options: o } = t, s, c, l, u, d, f, p; if (K(a) && o.transform !== "strict") { - let { primitive: t, semantic: n, extend: m } = a, h = n || {}, { colorScheme: g } = h, _ = El(h, ["colorScheme"]), v = m || {}, { colorScheme: y } = v, b = El(v, ["colorScheme"]), x = g || {}, { dark: S } = x, C = El(x, ["dark"]), w = y || {}, { dark: ee } = w, te = El(w, ["dark"]), ne = K(t) ? this._toVariables({ primitive: t }, o) : {}, T = K(_) ? this._toVariables({ semantic: _ }, o) : {}, re = K(C) ? this._toVariables({ light: C }, o) : {}, E = K(S) ? this._toVariables({ dark: S }, o) : {}, ie = K(b) ? this._toVariables({ semantic: b }, o) : {}, ae = K(te) ? this._toVariables({ light: te }, o) : {}, oe = K(ee) ? this._toVariables({ dark: ee }, o) : {}, [se, ce] = [ne.declarations ?? "", ne.tokens], [le, ue] = [T.declarations ?? "", T.tokens || []], [de, fe] = [re.declarations ?? "", re.tokens || []], [pe, me] = [E.declarations ?? "", E.tokens || []], [he, ge] = [ie.declarations ?? "", ie.tokens || []], [_e, D] = [ae.declarations ?? "", ae.tokens || []], [ve, ye] = [oe.declarations ?? "", oe.tokens || []]; - s = this.transformCSS(e, se, "light", "variable", o, r, i), c = ce, l = `${this.transformCSS(e, `${le}${de}`, "light", "variable", o, r, i)}${this.transformCSS(e, `${pe}`, "dark", "variable", o, r, i)}`, u = [.../* @__PURE__ */ new Set([ - ...ue, - ...fe, - ...me - ])], d = `${this.transformCSS(e, `${he}${_e}color-scheme:light`, "light", "variable", o, r, i)}${this.transformCSS(e, `${ve}color-scheme:dark`, "dark", "variable", o, r, i)}`, f = [.../* @__PURE__ */ new Set([ - ...ge, - ...D, - ...ye - ])], p = pc(a.css, { dt: Hl }); + let { primitive: t, semantic: n, extend: m } = a, h = n || {}, { colorScheme: g } = h, _ = Ml(h, ["colorScheme"]), v = m || {}, { colorScheme: y } = v, b = Ml(v, ["colorScheme"]), x = g || {}, { dark: S } = x, C = Ml(x, ["dark"]), w = y || {}, { dark: ee } = w, te = Ml(w, ["dark"]), ne = K(t) ? this._toVariables({ primitive: t }, o) : {}, T = K(_) ? this._toVariables({ semantic: _ }, o) : {}, re = K(C) ? this._toVariables({ light: C }, o) : {}, E = K(S) ? this._toVariables({ dark: S }, o) : {}, ie = K(b) ? this._toVariables({ semantic: b }, o) : {}, ae = K(te) ? this._toVariables({ light: te }, o) : {}, D = K(ee) ? this._toVariables({ dark: ee }, o) : {}, [oe, se] = [ne.declarations ?? "", ne.tokens], [ce, le] = [T.declarations ?? "", T.tokens || []], [ue, de] = [re.declarations ?? "", re.tokens || []], [fe, pe] = [E.declarations ?? "", E.tokens || []], [me, he] = [ie.declarations ?? "", ie.tokens || []], [ge, O] = [ae.declarations ?? "", ae.tokens || []], [_e, ve] = [D.declarations ?? "", D.tokens || []]; + s = this.transformCSS(e, oe, "light", "variable", o, r, i), c = se, l = `${this.transformCSS(e, `${ce}${ue}`, "light", "variable", o, r, i)}${this.transformCSS(e, `${fe}`, "dark", "variable", o, r, i)}`, u = [.../* @__PURE__ */ new Set([ + ...le, + ...de, + ...pe + ])], d = `${this.transformCSS(e, `${me}${ge}color-scheme:light`, "light", "variable", o, r, i)}${this.transformCSS(e, `${_e}color-scheme:dark`, "dark", "variable", o, r, i)}`, f = [.../* @__PURE__ */ new Set([ + ...he, + ...O, + ...ve + ])], p = yc(a.css, { dt: Jl }); } return { primitive: { @@ -4298,16 +4353,16 @@ var Kl = { getPreset({ name: e = "", preset: t = {}, options: n, params: r, set: i, defaults: a, selector: o }) { let s, c, l; if (K(t) && n.transform !== "strict") { - let r = e.replace("-directive", ""), u = t, { colorScheme: d, extend: f, css: p } = u, m = El(u, [ + let r = e.replace("-directive", ""), u = t, { colorScheme: d, extend: f, css: p } = u, m = Ml(u, [ "colorScheme", "extend", "css" - ]), h = f || {}, { colorScheme: g } = h, _ = El(h, ["colorScheme"]), v = d || {}, { dark: y } = v, b = El(v, ["dark"]), x = g || {}, { dark: S } = x, C = El(x, ["dark"]), w = K(m) ? this._toVariables({ [r]: wl(wl({}, m), _) }, n) : {}, ee = K(b) ? this._toVariables({ [r]: wl(wl({}, b), C) }, n) : {}, te = K(y) ? this._toVariables({ [r]: wl(wl({}, y), S) }, n) : {}, [ne, T] = [w.declarations ?? "", w.tokens || []], [re, E] = [ee.declarations ?? "", ee.tokens || []], [ie, ae] = [te.declarations ?? "", te.tokens || []]; + ]), h = f || {}, { colorScheme: g } = h, _ = Ml(h, ["colorScheme"]), v = d || {}, { dark: y } = v, b = Ml(v, ["dark"]), x = g || {}, { dark: S } = x, C = Ml(x, ["dark"]), w = K(m) ? this._toVariables({ [r]: Al(Al({}, m), _) }, n) : {}, ee = K(b) ? this._toVariables({ [r]: Al(Al({}, b), C) }, n) : {}, te = K(y) ? this._toVariables({ [r]: Al(Al({}, y), S) }, n) : {}, [ne, T] = [w.declarations ?? "", w.tokens || []], [re, E] = [ee.declarations ?? "", ee.tokens || []], [ie, ae] = [te.declarations ?? "", te.tokens || []]; s = `${this.transformCSS(r, `${ne}${re}`, "light", "variable", n, i, a, o)}${this.transformCSS(r, ie, "dark", "variable", n, i, a, o)}`, c = [.../* @__PURE__ */ new Set([ ...T, ...E, ...ae - ])], l = pc(p, { dt: Hl }); + ])], l = yc(p, { dt: Jl }); } return { css: s, @@ -4345,7 +4400,7 @@ var Kl = { }, getLayerOrder(e, t = {}, n, r) { let { cssLayer: i } = t; - return i ? `@layer ${pc(i.order || i.name || "primeui", n)}` : ""; + return i ? `@layer ${yc(i.order || i.name || "primeui", n)}` : ""; }, getCommonStyleSheet({ name: e = "", theme: t = {}, params: n, props: r = {}, set: i, defaults: a }) { let o = this.getCommon({ @@ -4356,8 +4411,8 @@ var Kl = { defaults: a }), s = Object.entries(r).reduce((e, [t, n]) => e.push(`${t}="${n}"`) && e, []).join(" "); return Object.entries(o || {}).reduce((e, [t, n]) => { - if (lc(n) && Object.hasOwn(n, "css")) { - let r = Sc(n.css), i = `${t}-variables`; + if (hc(n) && Object.hasOwn(n, "css")) { + let r = Oc(n.css), i = `${t}-variables`; e.push(``); } return e; @@ -4371,7 +4426,7 @@ var Kl = { set: i, defaults: a }, s = (e.includes("-directive") ? this.getPresetD(o) : this.getPresetC(o))?.css, c = Object.entries(r).reduce((e, [t, n]) => e.push(`${t}="${n}"`) && e, []).join(" "); - return s ? `` : ""; + return s ? `` : ""; }, createTokens(e = {}, t, n = "", r = "", i = {}) { let a = function(e, t = {}, n = []) { @@ -4383,16 +4438,16 @@ var Kl = { }; n.push(this.path), t.name = this.path, t.binding ||= {}; let r = this.value; - if (typeof this.value == "string" && Ol.test(this.value)) { - let i = this.value.trim().replace(Ol, (r) => { + if (typeof this.value == "string" && Pl.test(this.value)) { + let i = this.value.trim().replace(Pl, (r) => { let i = r.slice(1, -1), a = this.tokens[i]; if (!a) return console.warn(`Token not found for path: ${i}`), "__UNRESOLVED__"; let o = a.computed(e, t, n); return Array.isArray(o) && o.length === 2 ? `light-dark(${o[0].value},${o[1].value})` : o?.value ?? "__UNRESOLVED__"; }); - r = kl.test(i.replace(Al, "0")) ? `calc(${i})` : i; + r = Fl.test(i.replace(Il, "0")) ? `calc(${i})` : i; } - return nc(t.binding) && delete t.binding, n.pop(), { + return cc(t.binding) && delete t.binding, n.pop(), { colorScheme: e, path: this.path, paths: t, @@ -4400,8 +4455,8 @@ var Kl = { }; }, o = (e, n, r) => { Object.entries(e).forEach(([e, s]) => { - let c = bc(e, t.variable.excludedKeyRegex) ? n : n ? `${n}.${jl(e)}` : jl(e), l = r ? `${r}.${e}` : e; - lc(s) ? o(s, c, l) : (i[c] || (i[c] = { + let c = Ec(e, t.variable.excludedKeyRegex) ? n : n ? `${n}.${Ll(e)}` : Ll(e), l = r ? `${r}.${e}` : e; + hc(s) ? o(s, c, l) : (i[c] || (i[c] = { paths: [], computed: (e, t = {}, n = []) => { if (i[c].paths.length === 1) return i[c].paths[0].computed(i[c].paths[0].scheme, t.binding, n); @@ -4423,31 +4478,31 @@ var Kl = { return o(e, n, r), i; }, getTokenValue(e, t, n) { - let r = ((e) => e.split(".").filter((e) => !bc(e.toLowerCase(), n.variable.excludedKeyRegex)).join("."))(t), i = t.includes("colorScheme.light") ? "light" : t.includes("colorScheme.dark") ? "dark" : void 0, a = [e[r]?.computed(i)].flat().filter((e) => e); + let r = ((e) => e.split(".").filter((e) => !Ec(e.toLowerCase(), n.variable.excludedKeyRegex)).join("."))(t), i = t.includes("colorScheme.light") ? "light" : t.includes("colorScheme.dark") ? "dark" : void 0, a = [e[r]?.computed(i)].flat().filter((e) => e); return a.length === 1 ? a[0].value : a.reduce((e = {}, t) => { let n = t, { colorScheme: r } = n; - return e[r] = El(n, ["colorScheme"]), e; + return e[r] = Ml(n, ["colorScheme"]), e; }, void 0); }, getSelectorRule(e, t, n, r) { - return n === "class" || n === "attr" ? zl(K(t) ? `${e}${t},${e} ${t}` : e, r) : zl(e, zl(t ?? ":root,:host", r)); + return n === "class" || n === "attr" ? Gl(K(t) ? `${e}${t},${e} ${t}` : e, r) : Gl(e, Gl(t ?? ":root,:host", r)); }, transformCSS(e, t, n, r, i = {}, a, o, s) { if (K(t)) { let { cssLayer: c } = i; if (r !== "style") { let e = this.getColorSchemeOption(i, o); - t = n === "dark" ? e.reduce((e, { type: n, selector: r }) => (K(r) && (e += r.includes("[CSS]") ? r.replace("[CSS]", t) : this.getSelectorRule(r, s, n, t)), e), "") : zl(s ?? ":root,:host", t); + t = n === "dark" ? e.reduce((e, { type: n, selector: r }) => (K(r) && (e += r.includes("[CSS]") ? r.replace("[CSS]", t) : this.getSelectorRule(r, s, n, t)), e), "") : Gl(s ?? ":root,:host", t); } if (c) { let n = { name: "primeui", order: "primeui" }; - lc(c) && (n.name = pc(c.name, { + hc(c) && (n.name = yc(c.name, { name: e, type: r - })), K(n.name) && (t = zl(`@layer ${n.name}`, t), a?.layerNames(n.name)); + })), K(n.name) && (t = Gl(`@layer ${n.name}`, t), a?.layerNames(n.name)); } return t; } @@ -4473,7 +4528,7 @@ var Kl = { _tokens: {}, update(e = {}) { let { theme: t } = e; - t && (this._theme = Tl(wl({}, t), { options: wl(wl({}, this.defaults.options), t.options) }), this._tokens = Kl.createTokens(this.preset, this.defaults), this.clearLoadedStyleNames()); + t && (this._theme = jl(Al({}, t), { options: Al(Al({}, this.defaults.options), t.options) }), this._tokens = Ql.createTokens(this.preset, this.defaults), this.clearLoadedStyleNames()); }, get theme() { return this._theme; @@ -4491,19 +4546,19 @@ var Kl = { return this.theme; }, setTheme(e) { - this.update({ theme: e }), Dl.emit("theme:change", e); + this.update({ theme: e }), Nl.emit("theme:change", e); }, getPreset() { return this.preset; }, setPreset(e) { - this._theme = Tl(wl({}, this.theme), { preset: e }), this._tokens = Kl.createTokens(e, this.defaults), this.clearLoadedStyleNames(), Dl.emit("preset:change", e), Dl.emit("theme:change", this.theme); + this._theme = jl(Al({}, this.theme), { preset: e }), this._tokens = Ql.createTokens(e, this.defaults), this.clearLoadedStyleNames(), Nl.emit("preset:change", e), Nl.emit("theme:change", this.theme); }, getOptions() { return this.options; }, setOptions(e) { - this._theme = Tl(wl({}, this.theme), { options: e }), this.clearLoadedStyleNames(), Dl.emit("options:change", e), Dl.emit("theme:change", this.theme); + this._theme = jl(Al({}, this.theme), { options: e }), this.clearLoadedStyleNames(), Nl.emit("options:change", e), Nl.emit("theme:change", this.theme); }, getLayerNames() { return [...this._layerNames]; @@ -4527,10 +4582,10 @@ var Kl = { this._loadedStyleNames.clear(); }, getTokenValue(e) { - return Kl.getTokenValue(this.tokens, e, this.defaults); + return Ql.getTokenValue(this.tokens, e, this.defaults); }, getCommon(e = "", t) { - return Kl.getCommon({ + return Ql.getCommon({ name: e, theme: this.theme, params: t, @@ -4546,7 +4601,7 @@ var Kl = { defaults: this.defaults, set: { layerNames: this.setLayerNames.bind(this) } }; - return Kl.getPresetC(n); + return Ql.getPresetC(n); }, getDirective(e = "", t) { let n = { @@ -4556,7 +4611,7 @@ var Kl = { defaults: this.defaults, set: { layerNames: this.setLayerNames.bind(this) } }; - return Kl.getPresetD(n); + return Ql.getPresetD(n); }, getCustomPreset(e = "", t, n, r) { let i = { @@ -4568,16 +4623,16 @@ var Kl = { defaults: this.defaults, set: { layerNames: this.setLayerNames.bind(this) } }; - return Kl.getPreset(i); + return Ql.getPreset(i); }, getLayerOrderCSS(e = "") { - return Kl.getLayerOrder(e, this.options, { names: this.getLayerNames() }, this.defaults); + return Ql.getLayerOrder(e, this.options, { names: this.getLayerNames() }, this.defaults); }, transformCSS(e = "", t, n = "style", r) { - return Kl.transformCSS(e, t, r, n, this.options, { layerNames: this.setLayerNames.bind(this) }, this.defaults); + return Ql.transformCSS(e, t, r, n, this.options, { layerNames: this.setLayerNames.bind(this) }, this.defaults); }, getCommonStyleSheet(e = "", t, n = {}) { - return Kl.getCommonStyleSheet({ + return Ql.getCommonStyleSheet({ name: e, theme: this.theme, params: t, @@ -4587,7 +4642,7 @@ var Kl = { }); }, getStyleSheet(e, t, n = {}) { - return Kl.getStyleSheet({ + return Ql.getStyleSheet({ name: e, theme: this.theme, params: t, @@ -4603,9 +4658,9 @@ var Kl = { this._loadingStyles.add(e); }, onStyleLoaded(e, { name: t }) { - this._loadingStyles.size && (this._loadingStyles.delete(t), Dl.emit(`theme:${t}:load`, e), !this._loadingStyles.size && Dl.emit("theme:load")); + this._loadingStyles.size && (this._loadingStyles.delete(t), Nl.emit(`theme:${t}:load`, e), !this._loadingStyles.size && Nl.emit("theme:load")); } -}, ql = { +}, $l = { STARTS_WITH: "startsWith", CONTAINS: "contains", NOT_CONTAINS: "notContains", @@ -4623,10 +4678,10 @@ var Kl = { DATE_BEFORE: "dateBefore", DATE_AFTER: "dateAfter" }; -function Jl(e, t) { +function eu(e, t) { var n = typeof Symbol < "u" && e[Symbol.iterator] || e["@@iterator"]; if (!n) { - if (Array.isArray(e) || (n = Yl(e)) || t) { + if (Array.isArray(e) || (n = tu(e)) || t) { n && (e = n); var r = 0, i = function() {}; return { @@ -4666,23 +4721,23 @@ function Jl(e, t) { } }; } -function Yl(e, t) { +function tu(e, t) { if (e) { - if (typeof e == "string") return Xl(e, t); + if (typeof e == "string") return nu(e, t); var n = {}.toString.call(e).slice(8, -1); - return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? Xl(e, t) : void 0; + return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? nu(e, t) : void 0; } } -function Xl(e, t) { +function nu(e, t) { (t == null || t > e.length) && (t = e.length); for (var n = 0, r = Array(t); n < t; n++) r[n] = e[n]; return r; } -var Zl = { +var ru = { filter: function(e, t, n, r, i) { var a = []; if (!e) return a; - var o = Jl(e), s; + var o = eu(e), s; try { for (o.s(); !(s = o.n()).done;) { var c = s.value; @@ -4692,10 +4747,10 @@ var Zl = { continue; } } else { - var l = Jl(t), u; + var l = eu(t), u; try { for (l.s(); !(u = l.n()).done;) { - var d = u.value, f = oc(c, d); + var d = u.value, f = fc(c, d); if (this.filters[r](f, n, i)) { a.push(c); break; @@ -4719,36 +4774,36 @@ var Zl = { startsWith: function(e, t, n) { if (t == null || t === "") return !0; if (e == null) return !1; - var r = Cc(t.toString()).toLocaleLowerCase(n); - return Cc(e.toString()).toLocaleLowerCase(n).slice(0, r.length) === r; + var r = kc(t.toString()).toLocaleLowerCase(n); + return kc(e.toString()).toLocaleLowerCase(n).slice(0, r.length) === r; }, contains: function(e, t, n) { if (t == null || t === "") return !0; if (e == null) return !1; - var r = Cc(t.toString()).toLocaleLowerCase(n); - return Cc(e.toString()).toLocaleLowerCase(n).indexOf(r) !== -1; + var r = kc(t.toString()).toLocaleLowerCase(n); + return kc(e.toString()).toLocaleLowerCase(n).indexOf(r) !== -1; }, notContains: function(e, t, n) { if (t == null || t === "") return !0; if (e == null) return !1; - var r = Cc(t.toString()).toLocaleLowerCase(n); - return Cc(e.toString()).toLocaleLowerCase(n).indexOf(r) === -1; + var r = kc(t.toString()).toLocaleLowerCase(n); + return kc(e.toString()).toLocaleLowerCase(n).indexOf(r) === -1; }, endsWith: function(e, t, n) { if (t == null || t === "") return !0; if (e == null) return !1; - var r = Cc(t.toString()).toLocaleLowerCase(n), i = Cc(e.toString()).toLocaleLowerCase(n); + var r = kc(t.toString()).toLocaleLowerCase(n), i = kc(e.toString()).toLocaleLowerCase(n); return i.indexOf(r, i.length - r.length) !== -1; }, equals: function(e, t, n) { - return t == null || t === "" ? !0 : e == null ? !1 : e.getTime && t.getTime ? e.getTime() === t.getTime() : Cc(e.toString()).toLocaleLowerCase(n) == Cc(t.toString()).toLocaleLowerCase(n); + return t == null || t === "" ? !0 : e == null ? !1 : e.getTime && t.getTime ? e.getTime() === t.getTime() : kc(e.toString()).toLocaleLowerCase(n) == kc(t.toString()).toLocaleLowerCase(n); }, notEquals: function(e, t, n) { - return t == null || t === "" ? !1 : e == null ? !0 : e.getTime && t.getTime ? e.getTime() !== t.getTime() : Cc(e.toString()).toLocaleLowerCase(n) != Cc(t.toString()).toLocaleLowerCase(n); + return t == null || t === "" ? !1 : e == null ? !0 : e.getTime && t.getTime ? e.getTime() !== t.getTime() : kc(e.toString()).toLocaleLowerCase(n) != kc(t.toString()).toLocaleLowerCase(n); }, in: function(e, t) { if (t == null || t.length === 0) return !0; - for (var n = 0; n < t.length; n++) if (sc(e, t[n])) return !0; + for (var n = 0; n < t.length; n++) if (pc(e, t[n])) return !0; return !1; }, between: function(e, t) { @@ -4782,17 +4837,17 @@ var Zl = { register: function(e, t) { this.filters[e] = t; } -}, Ql = "\n *,\n ::before,\n ::after {\n box-sizing: border-box;\n }\n\n .p-collapsible-enter-active {\n animation: p-animate-collapsible-expand 0.2s ease-out;\n overflow: hidden;\n }\n\n .p-collapsible-leave-active {\n animation: p-animate-collapsible-collapse 0.2s ease-out;\n overflow: hidden;\n }\n\n @keyframes p-animate-collapsible-expand {\n from {\n grid-template-rows: 0fr;\n }\n to {\n grid-template-rows: 1fr;\n }\n }\n\n @keyframes p-animate-collapsible-collapse {\n from {\n grid-template-rows: 1fr;\n }\n to {\n grid-template-rows: 0fr;\n }\n }\n\n .p-disabled,\n .p-disabled * {\n cursor: default;\n pointer-events: none;\n user-select: none;\n }\n\n .p-disabled,\n .p-component:disabled {\n opacity: dt('disabled.opacity');\n }\n\n .pi {\n font-size: dt('icon.size');\n }\n\n .p-icon {\n width: dt('icon.size');\n height: dt('icon.size');\n }\n\n .p-overlay-mask {\n background: var(--px-mask-background, dt('mask.background'));\n color: dt('mask.color');\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n .p-overlay-mask-enter-active {\n animation: p-animate-overlay-mask-enter dt('mask.transition.duration') forwards;\n }\n\n .p-overlay-mask-leave-active {\n animation: p-animate-overlay-mask-leave dt('mask.transition.duration') forwards;\n }\n\n @keyframes p-animate-overlay-mask-enter {\n from {\n background: transparent;\n }\n to {\n background: var(--px-mask-background, dt('mask.background'));\n }\n }\n @keyframes p-animate-overlay-mask-leave {\n from {\n background: var(--px-mask-background, dt('mask.background'));\n }\n to {\n background: transparent;\n }\n }\n\n .p-anchored-overlay-enter-active {\n animation: p-animate-anchored-overlay-enter 300ms cubic-bezier(.19,1,.22,1);\n }\n\n .p-anchored-overlay-leave-active {\n animation: p-animate-anchored-overlay-leave 300ms cubic-bezier(.19,1,.22,1);\n }\n\n @keyframes p-animate-anchored-overlay-enter {\n from {\n opacity: 0;\n transform: scale(0.93);\n }\n }\n\n @keyframes p-animate-anchored-overlay-leave {\n to {\n opacity: 0;\n transform: scale(0.93);\n }\n }\n"; +}, iu = "\n *,\n ::before,\n ::after {\n box-sizing: border-box;\n }\n\n .p-collapsible-enter-active {\n animation: p-animate-collapsible-expand 0.2s ease-out;\n overflow: hidden;\n }\n\n .p-collapsible-leave-active {\n animation: p-animate-collapsible-collapse 0.2s ease-out;\n overflow: hidden;\n }\n\n @keyframes p-animate-collapsible-expand {\n from {\n grid-template-rows: 0fr;\n }\n to {\n grid-template-rows: 1fr;\n }\n }\n\n @keyframes p-animate-collapsible-collapse {\n from {\n grid-template-rows: 1fr;\n }\n to {\n grid-template-rows: 0fr;\n }\n }\n\n .p-disabled,\n .p-disabled * {\n cursor: default;\n pointer-events: none;\n user-select: none;\n }\n\n .p-disabled,\n .p-component:disabled {\n opacity: dt('disabled.opacity');\n }\n\n .pi {\n font-size: dt('icon.size');\n }\n\n .p-icon {\n width: dt('icon.size');\n height: dt('icon.size');\n }\n\n .p-overlay-mask {\n background: var(--px-mask-background, dt('mask.background'));\n color: dt('mask.color');\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n\n .p-overlay-mask-enter-active {\n animation: p-animate-overlay-mask-enter dt('mask.transition.duration') forwards;\n }\n\n .p-overlay-mask-leave-active {\n animation: p-animate-overlay-mask-leave dt('mask.transition.duration') forwards;\n }\n\n @keyframes p-animate-overlay-mask-enter {\n from {\n background: transparent;\n }\n to {\n background: var(--px-mask-background, dt('mask.background'));\n }\n }\n @keyframes p-animate-overlay-mask-leave {\n from {\n background: var(--px-mask-background, dt('mask.background'));\n }\n to {\n background: transparent;\n }\n }\n\n .p-anchored-overlay-enter-active {\n animation: p-animate-anchored-overlay-enter 300ms cubic-bezier(.19,1,.22,1);\n }\n\n .p-anchored-overlay-leave-active {\n animation: p-animate-anchored-overlay-leave 300ms cubic-bezier(.19,1,.22,1);\n }\n\n @keyframes p-animate-anchored-overlay-enter {\n from {\n opacity: 0;\n transform: scale(0.93);\n }\n }\n\n @keyframes p-animate-anchored-overlay-leave {\n to {\n opacity: 0;\n transform: scale(0.93);\n }\n }\n"; // node_modules/@primevue/core/usestyle/index.mjs -function $l(e) { +function au(e) { "@babel/helpers - typeof"; - return $l = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { + return au = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { return typeof e; } : function(e) { return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; - }, $l(e); + }, au(e); } -function eu(e, t) { +function ou(e, t) { var n = Object.keys(e); if (Object.getOwnPropertySymbols) { var r = Object.getOwnPropertySymbols(e); @@ -4802,102 +4857,102 @@ function eu(e, t) { } return n; } -function tu(e) { +function su(e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t] == null ? {} : arguments[t]; - t % 2 ? eu(Object(n), !0).forEach(function(t) { - nu(e, t, n[t]); - }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : eu(Object(n)).forEach(function(t) { + t % 2 ? ou(Object(n), !0).forEach(function(t) { + cu(e, t, n[t]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : ou(Object(n)).forEach(function(t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t)); }); } return e; } -function nu(e, t, n) { - return (t = ru(t)) in e ? Object.defineProperty(e, t, { +function cu(e, t, n) { + return (t = lu(t)) in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e; } -function ru(e) { - var t = iu(e, "string"); - return $l(t) == "symbol" ? t : t + ""; +function lu(e) { + var t = uu(e, "string"); + return au(t) == "symbol" ? t : t + ""; } -function iu(e, t) { - if ($l(e) != "object" || !e) return e; +function uu(e, t) { + if (au(e) != "object" || !e) return e; var n = e[Symbol.toPrimitive]; if (n !== void 0) { var r = n.call(e, t); - if ($l(r) != "object") return r; + if (au(r) != "object") return r; throw TypeError("@@toPrimitive must return a primitive value."); } return (t === "string" ? String : Number)(e); } -function au(e) { +function du(e) { var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : !0; - no() && no().components ? Qr(e) : t ? e() : Mn(e); + co() && co().components ? ti(e) : t ? e() : Nn(e); } -var ou = 0; -function su(e) { - var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, n = /* @__PURE__ */ tn(!1), r = /* @__PURE__ */ tn(e), i = /* @__PURE__ */ tn(null), a = cl() ? window.document : void 0, o = t.document, s = o === void 0 ? a : o, c = t.immediate, l = c === void 0 || c, u = t.manual, d = u !== void 0 && u, f = t.name, p = f === void 0 ? `style_${++ou}` : f, m = t.id, h = m === void 0 ? void 0 : m, g = t.media, _ = g === void 0 ? void 0 : g, v = t.nonce, y = v === void 0 ? void 0 : v, b = t.first, x = b !== void 0 && b, S = t.onMounted, C = S === void 0 ? void 0 : S, w = t.onUpdated, ee = w === void 0 ? void 0 : w, te = t.onLoad, ne = te === void 0 ? void 0 : te, T = t.props, re = T === void 0 ? {} : T, E = function() {}, ie = function(t) { +var fu = 0; +function pu(e) { + var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, n = /* @__PURE__ */ en(!1), r = /* @__PURE__ */ en(e), i = /* @__PURE__ */ en(null), a = ml() ? window.document : void 0, o = t.document, s = o === void 0 ? a : o, c = t.immediate, l = c === void 0 || c, u = t.manual, d = u !== void 0 && u, f = t.name, p = f === void 0 ? `style_${++fu}` : f, m = t.id, h = m === void 0 ? void 0 : m, g = t.media, _ = g === void 0 ? void 0 : g, v = t.nonce, y = v === void 0 ? void 0 : v, b = t.first, x = b !== void 0 && b, S = t.onMounted, C = S === void 0 ? void 0 : S, w = t.onUpdated, ee = w === void 0 ? void 0 : w, te = t.onLoad, ne = te === void 0 ? void 0 : te, T = t.props, re = T === void 0 ? {} : T, E = function() {}, ie = function(t) { var a = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; if (s) { - var o = tu(tu({}, re), a), c = o.name || p, l = o.id || h, u = o.nonce || y; - i.value = s.querySelector(`style[data-primevue-style-id="${c}"]`) || s.getElementById(l) || s.createElement("style"), i.value.isConnected || (r.value = t || e, qc(i.value, { + var o = su(su({}, re), a), c = o.name || p, l = o.id || h, u = o.nonce || y; + i.value = s.querySelector(`style[data-primevue-style-id="${c}"]`) || s.getElementById(l) || s.createElement("style"), i.value.isConnected || (r.value = t || e, $c(i.value, { type: "text/css", id: l, media: _, nonce: u - }), x ? s.head.prepend(i.value) : s.head.appendChild(i.value), fl(i.value, "data-primevue-style-id", c), qc(i.value, o), i.value.onload = function(e) { + }), x ? s.head.prepend(i.value) : s.head.appendChild(i.value), vl(i.value, "data-primevue-style-id", c), $c(i.value, o), i.value.onload = function(e) { return ne?.(e, { name: c }); - }, C?.(c)), !n.value && (E = $n(r, function(e) { + }, C?.(c)), !n.value && (E = nr(r, function(e) { i.value.textContent = e, ee?.(c); }, { immediate: !0 }), n.value = !0); } }; - return l && !d && au(ie), { + return l && !d && du(ie), { id: h, name: p, el: i, css: r, unload: function() { - s && n.value && (E(), Gc(i.value) && s.head.removeChild(i.value), n.value = !1, i.value = null); + s && n.value && (E(), Zc(i.value) && s.head.removeChild(i.value), n.value = !1, i.value = null); }, load: ie, - isLoaded: /* @__PURE__ */ Kt(n) + isLoaded: /* @__PURE__ */ Gt(n) }; } // node_modules/@primevue/core/base/style/index.mjs -function cu(e) { +function mu(e) { "@babel/helpers - typeof"; - return cu = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { + return mu = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { return typeof e; } : function(e) { return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; - }, cu(e); + }, mu(e); } -var lu, uu, du, fu; -function pu(e, t) { - return vu(e) || _u(e, t) || hu(e, t) || mu(); +var hu, gu, _u, vu; +function yu(e, t) { + return wu(e) || Cu(e, t) || xu(e, t) || bu(); } -function mu() { +function bu() { throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function hu(e, t) { +function xu(e, t) { if (e) { - if (typeof e == "string") return gu(e, t); + if (typeof e == "string") return Su(e, t); var n = {}.toString.call(e).slice(8, -1); - return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? gu(e, t) : void 0; + return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? Su(e, t) : void 0; } } -function gu(e, t) { +function Su(e, t) { (t == null || t > e.length) && (t = e.length); for (var n = 0, r = Array(t); n < t; n++) r[n] = e[n]; return r; } -function _u(e, t) { +function Cu(e, t) { var n = e == null ? null : typeof Symbol < "u" && e[Symbol.iterator] || e["@@iterator"]; if (n != null) { var r, i, a, o, s = [], c = !0, l = !1; @@ -4915,10 +4970,10 @@ function _u(e, t) { return s; } } -function vu(e) { +function wu(e) { if (Array.isArray(e)) return e; } -function yu(e, t) { +function Tu(e, t) { var n = Object.keys(e); if (Object.getOwnPropertySymbols) { var r = Object.getOwnPropertySymbols(e); @@ -4928,40 +4983,40 @@ function yu(e, t) { } return n; } -function bu(e) { +function Eu(e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t] == null ? {} : arguments[t]; - t % 2 ? yu(Object(n), !0).forEach(function(t) { - xu(e, t, n[t]); - }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : yu(Object(n)).forEach(function(t) { + t % 2 ? Tu(Object(n), !0).forEach(function(t) { + Du(e, t, n[t]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : Tu(Object(n)).forEach(function(t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t)); }); } return e; } -function xu(e, t, n) { - return (t = Su(t)) in e ? Object.defineProperty(e, t, { +function Du(e, t, n) { + return (t = Ou(t)) in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e; } -function Su(e) { - var t = Cu(e, "string"); - return cu(t) == "symbol" ? t : t + ""; +function Ou(e) { + var t = ku(e, "string"); + return mu(t) == "symbol" ? t : t + ""; } -function Cu(e, t) { - if (cu(e) != "object" || !e) return e; +function ku(e, t) { + if (mu(e) != "object" || !e) return e; var n = e[Symbol.toPrimitive]; if (n !== void 0) { var r = n.call(e, t); - if (cu(r) != "object") return r; + if (mu(r) != "object") return r; throw TypeError("@@toPrimitive must return a primitive value."); } return (t === "string" ? String : Number)(e); } -function wu(e, t) { +function Au(e, t) { return t ||= e.slice(0), Object.freeze(Object.defineProperties(e, { raw: { value: Object.freeze(t) } })); } var X = { @@ -4989,14 +5044,14 @@ var X = { } `; }, - style: Ql, + style: iu, classes: {}, inlineStyles: {}, load: function(e) { var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, n = (arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : function(e) { return e; - })(Wl(lu ||= wu(["", ""]), e)); - return K(n) ? su(Sc(n), bu({ name: this.name }, t)) : {}; + })(Xl(hu ||= Au(["", ""]), e)); + return K(n) ? pu(Oc(n), Eu({ name: this.name }, t)) : {}; }, loadCSS: function() { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; @@ -5006,7 +5061,7 @@ var X = { var e = this, t = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, n = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : ""; return this.load(this.style, t, function() { var r = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : ""; - return Y.transformCSS(t.name || e.name, `${r}${Wl(uu ||= wu(["", ""]), n)}`); + return Y.transformCSS(t.name || e.name, `${r}${Xl(gu ||= Au(["", ""]), n)}`); }); }, getCommonTheme: function(e) { @@ -5027,12 +5082,12 @@ var X = { getStyleSheet: function() { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "", t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}; if (this.css) { - var n = pc(this.css, { dt: Hl }) || "", r = Sc(Wl(du ||= wu([ + var n = yc(this.css, { dt: Jl }) || "", r = Oc(Xl(_u ||= Au([ "", "", "" ]), n, e)), i = Object.entries(t).reduce(function(e, t) { - var n = pu(t, 2), r = n[0], i = n[1]; + var n = yu(t, 2), r = n[0], i = n[1]; return e.push(`${r}="${i}"`) && e; }, []).join(" "); return K(r) ? `` : ""; @@ -5046,8 +5101,8 @@ var X = { getThemeStyleSheet: function(e) { var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, n = [Y.getStyleSheet(this.name, e, t)]; if (this.style) { - var r = this.name === "base" ? "global-style" : `${this.name}-style`, i = Wl(fu ||= wu(["", ""]), pc(this.style, { dt: Hl })), a = Sc(Y.transformCSS(r, i)), o = Object.entries(t).reduce(function(e, t) { - var n = pu(t, 2), r = n[0], i = n[1]; + var r = this.name === "base" ? "global-style" : `${this.name}-style`, i = Xl(vu ||= Au(["", ""]), yc(this.style, { dt: Jl })), a = Oc(Y.transformCSS(r, i)), o = Object.entries(t).reduce(function(e, t) { + var n = yu(t, 2), r = n[0], i = n[1]; return e.push(`${r}="${i}"`) && e; }, []).join(" "); K(a) && n.push(``); @@ -5055,22 +5110,22 @@ var X = { return n.join(""); }, extend: function(e) { - return bu(bu({}, this), {}, { + return Eu(Eu({}, this), {}, { css: void 0, style: void 0 }, e); } -}, Tu = Ec(); +}, ju = Mc(); // node_modules/@primevue/core/config/index.mjs -function Eu(e) { +function Mu(e) { "@babel/helpers - typeof"; - return Eu = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { + return Mu = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { return typeof e; } : function(e) { return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; - }, Eu(e); + }, Mu(e); } -function Du(e, t) { +function Nu(e, t) { var n = Object.keys(e); if (Object.getOwnPropertySymbols) { var r = Object.getOwnPropertySymbols(e); @@ -5080,40 +5135,40 @@ function Du(e, t) { } return n; } -function Ou(e) { +function Pu(e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t] == null ? {} : arguments[t]; - t % 2 ? Du(Object(n), !0).forEach(function(t) { - ku(e, t, n[t]); - }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : Du(Object(n)).forEach(function(t) { + t % 2 ? Nu(Object(n), !0).forEach(function(t) { + Fu(e, t, n[t]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : Nu(Object(n)).forEach(function(t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t)); }); } return e; } -function ku(e, t, n) { - return (t = Au(t)) in e ? Object.defineProperty(e, t, { +function Fu(e, t, n) { + return (t = Iu(t)) in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e; } -function Au(e) { - var t = ju(e, "string"); - return Eu(t) == "symbol" ? t : t + ""; +function Iu(e) { + var t = Lu(e, "string"); + return Mu(t) == "symbol" ? t : t + ""; } -function ju(e, t) { - if (Eu(e) != "object" || !e) return e; +function Lu(e, t) { + if (Mu(e) != "object" || !e) return e; var n = e[Symbol.toPrimitive]; if (n !== void 0) { var r = n.call(e, t); - if (Eu(r) != "object") return r; + if (Mu(r) != "object") return r; throw TypeError("@@toPrimitive must return a primitive value."); } return (t === "string" ? String : Number)(e); } -var Mu = { +var Ru = { ripple: !1, inputStyle: null, inputVariant: null, @@ -5300,26 +5355,26 @@ var Mu = { }, filterMatchModeOptions: { text: [ - ql.STARTS_WITH, - ql.CONTAINS, - ql.NOT_CONTAINS, - ql.ENDS_WITH, - ql.EQUALS, - ql.NOT_EQUALS + $l.STARTS_WITH, + $l.CONTAINS, + $l.NOT_CONTAINS, + $l.ENDS_WITH, + $l.EQUALS, + $l.NOT_EQUALS ], numeric: [ - ql.EQUALS, - ql.NOT_EQUALS, - ql.LESS_THAN, - ql.LESS_THAN_OR_EQUAL_TO, - ql.GREATER_THAN, - ql.GREATER_THAN_OR_EQUAL_TO + $l.EQUALS, + $l.NOT_EQUALS, + $l.LESS_THAN, + $l.LESS_THAN_OR_EQUAL_TO, + $l.GREATER_THAN, + $l.GREATER_THAN_OR_EQUAL_TO ], date: [ - ql.DATE_IS, - ql.DATE_IS_NOT, - ql.DATE_BEFORE, - ql.DATE_AFTER + $l.DATE_IS, + $l.DATE_IS_NOT, + $l.DATE_BEFORE, + $l.DATE_AFTER ] }, zIndex: { @@ -5336,59 +5391,59 @@ var Mu = { mergeProps: !1 }, csp: { nonce: void 0 } -}, Nu = Symbol(); -function Pu(e, t) { - var n = { config: /* @__PURE__ */ Wt(t) }; - return e.config.globalProperties.$primevue = n, e.provide(Nu, n), Iu(), Lu(e, n), n; +}, zu = Symbol(); +function Bu(e, t) { + var n = { config: /* @__PURE__ */ Ut(t) }; + return e.config.globalProperties.$primevue = n, e.provide(zu, n), Hu(), Uu(e, n), n; } -var Fu = []; -function Iu() { - Dl.clear(), Fu.forEach(function(e) { +var Vu = []; +function Hu() { + Nl.clear(), Vu.forEach(function(e) { return e?.(); - }), Fu = []; + }), Vu = []; } -function Lu(e, t) { - var n = /* @__PURE__ */ tn(!1), r = function() { +function Uu(e, t) { + var n = /* @__PURE__ */ en(!1), r = function() { if (t.config?.theme !== "none" && !Y.isStyleNameLoaded("common")) { var e, n = X.getCommonTheme?.call(X) || {}, r = n.primitive, i = n.semantic, a = n.global, o = n.style, s = { nonce: (e = t.config) == null || (e = e.csp) == null ? void 0 : e.nonce }; - X.load(r?.css, Ou({ name: "primitive-variables" }, s)), X.load(i?.css, Ou({ name: "semantic-variables" }, s)), X.load(a?.css, Ou({ name: "global-variables" }, s)), X.loadStyle(Ou({ name: "global-style" }, s), o), Y.setLoadedStyleName("common"); + X.load(r?.css, Pu({ name: "primitive-variables" }, s)), X.load(i?.css, Pu({ name: "semantic-variables" }, s)), X.load(a?.css, Pu({ name: "global-variables" }, s)), X.loadStyle(Pu({ name: "global-style" }, s), o), Y.setLoadedStyleName("common"); } }; - Dl.on("theme:change", function(t) { + Nl.on("theme:change", function(t) { n.value ||= (e.config.globalProperties.$primevue.config.theme = t, !0); }); - var i = $n(t.config, function(e, t) { - Tu.emit("config:change", { + var i = nr(t.config, function(e, t) { + ju.emit("config:change", { newValue: e, oldValue: t }); }, { immediate: !0, deep: !0 - }), a = $n(function() { + }), a = nr(function() { return t.config.ripple; }, function(e, t) { - Tu.emit("config:ripple:change", { + ju.emit("config:ripple:change", { newValue: e, oldValue: t }); }, { immediate: !0, deep: !0 - }), o = $n(function() { + }), o = nr(function() { return t.config.theme; }, function(e, i) { - n.value || Y.setTheme(e), t.config.unstyled || r(), n.value = !1, Tu.emit("config:theme:change", { + n.value || Y.setTheme(e), t.config.unstyled || r(), n.value = !1, ju.emit("config:theme:change", { newValue: e, oldValue: i }); }, { immediate: !0, deep: !1 - }), s = $n(function() { + }), s = nr(function() { return t.config.unstyled; }, function(e, n) { - !e && t.config.theme && r(), Tu.emit("config:unstyled:change", { + !e && t.config.theme && r(), ju.emit("config:unstyled:change", { newValue: e, oldValue: n }); @@ -5396,37 +5451,37 @@ function Lu(e, t) { immediate: !0, deep: !0 }); - Fu.push(i), Fu.push(a), Fu.push(o), Fu.push(s); + Vu.push(i), Vu.push(a), Vu.push(o), Vu.push(s); } -var Ru = { install: function(e, t) { - Pu(e, xc(Mu, t)); -} }, zu = Ec(), Bu = Symbol(), Vu = { install: function(e) { +var Wu = { install: function(e, t) { + Bu(e, Dc(Ru, t)); +} }, Gu = Mc(), Ku = Symbol(), qu = { install: function(e) { var t = { add: function(e) { - zu.emit("add", e); + Gu.emit("add", e); }, remove: function(e) { - zu.emit("remove", e); + Gu.emit("remove", e); }, removeGroup: function(e) { - zu.emit("remove-group", e); + Gu.emit("remove-group", e); }, removeAllGroups: function() { - zu.emit("remove-all-groups"); + Gu.emit("remove-all-groups"); } }; - e.config.globalProperties.$toast = t, e.provide(Bu, t); -} }, Hu = Ec(), Uu = Symbol(), Wu = { install: function(e) { + e.config.globalProperties.$toast = t, e.provide(Ku, t); +} }, Ju = Mc(), Yu = Symbol(), Xu = { install: function(e) { var t = { require: function(e) { - Hu.emit("confirm", e); + Ju.emit("confirm", e); }, close: function() { - Hu.emit("close"); + Ju.emit("close"); } }; - e.config.globalProperties.$confirm = t, e.provide(Uu, t); -} }, Gu = { + e.config.globalProperties.$confirm = t, e.provide(Yu, t); +} }, Zu = { _loadedStyleNames: /* @__PURE__ */ new Set(), getLoadedStyleNames: function() { return this._loadedStyleNames; @@ -5445,44 +5500,44 @@ var Ru = { install: function(e, t) { } }; // node_modules/@primevue/core/useattrselector/index.mjs -function Ku() { - return `${arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "pc"}${Nr().replace("v-", "").replaceAll("-", "_")}`; +function Qu() { + return `${arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "pc"}${Ir().replace("v-", "").replaceAll("-", "_")}`; } // node_modules/@primevue/core/basecomponent/index.mjs -var qu = X.extend({ name: "common" }); -function Ju(e) { +var $u = X.extend({ name: "common" }); +function ed(e) { "@babel/helpers - typeof"; - return Ju = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { + return ed = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { return typeof e; } : function(e) { return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; - }, Ju(e); + }, ed(e); } -function Yu(e) { - return nd(e) || Xu(e) || $u(e) || Qu(); +function td(e) { + return cd(e) || nd(e) || ad(e) || id(); } -function Xu(e) { +function nd(e) { if (typeof Symbol < "u" && e[Symbol.iterator] != null || e["@@iterator"] != null) return Array.from(e); } -function Zu(e, t) { - return nd(e) || td(e, t) || $u(e, t) || Qu(); +function rd(e, t) { + return cd(e) || sd(e, t) || ad(e, t) || id(); } -function Qu() { +function id() { throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function $u(e, t) { +function ad(e, t) { if (e) { - if (typeof e == "string") return ed(e, t); + if (typeof e == "string") return od(e, t); var n = {}.toString.call(e).slice(8, -1); - return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? ed(e, t) : void 0; + return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? od(e, t) : void 0; } } -function ed(e, t) { +function od(e, t) { (t == null || t > e.length) && (t = e.length); for (var n = 0, r = Array(t); n < t; n++) r[n] = e[n]; return r; } -function td(e, t) { +function sd(e, t) { var n = e == null ? null : typeof Symbol < "u" && e[Symbol.iterator] || e["@@iterator"]; if (n != null) { var r, i, a, o, s = [], c = !0, l = !1; @@ -5503,10 +5558,10 @@ function td(e, t) { return s; } } -function nd(e) { +function cd(e) { if (Array.isArray(e)) return e; } -function rd(e, t) { +function ld(e, t) { var n = Object.keys(e); if (Object.getOwnPropertySymbols) { var r = Object.getOwnPropertySymbols(e); @@ -5519,37 +5574,37 @@ function rd(e, t) { function Z(e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t] == null ? {} : arguments[t]; - t % 2 ? rd(Object(n), !0).forEach(function(t) { - id(e, t, n[t]); - }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : rd(Object(n)).forEach(function(t) { + t % 2 ? ld(Object(n), !0).forEach(function(t) { + ud(e, t, n[t]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : ld(Object(n)).forEach(function(t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t)); }); } return e; } -function id(e, t, n) { - return (t = ad(t)) in e ? Object.defineProperty(e, t, { +function ud(e, t, n) { + return (t = dd(t)) in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e; } -function ad(e) { - var t = od(e, "string"); - return Ju(t) == "symbol" ? t : t + ""; +function dd(e) { + var t = fd(e, "string"); + return ed(t) == "symbol" ? t : t + ""; } -function od(e, t) { - if (Ju(e) != "object" || !e) return e; +function fd(e, t) { + if (ed(e) != "object" || !e) return e; var n = e[Symbol.toPrimitive]; if (n !== void 0) { var r = n.call(e, t); - if (Ju(r) != "object") return r; + if (ed(r) != "object") return r; throw TypeError("@@toPrimitive must return a primitive value."); } return (t === "string" ? String : Number)(e); } -var sd = { +var pd = { name: "BaseComponent", props: { pt: { @@ -5574,14 +5629,14 @@ var sd = { isUnstyled: { immediate: !0, handler: function(e) { - Dl.off("theme:change", this._loadCoreStyles), e || (this._loadCoreStyles(), this._themeChangeListener(this._loadCoreStyles)); + Nl.off("theme:change", this._loadCoreStyles), e || (this._loadCoreStyles(), this._themeChangeListener(this._loadCoreStyles)); } }, dt: { immediate: !0, handler: function(e, t) { var n = this; - Dl.off("theme:change", this._themeScopedListener), e ? (this._loadScopedThemeStyles(e), this._themeScopedListener = function() { + Nl.off("theme:change", this._themeScopedListener), e ? (this._loadScopedThemeStyles(e), this._themeScopedListener = function() { return n._loadScopedThemeStyles(e); }, this._themeChangeListener(this._themeScopedListener)) : this._unloadScopedThemeStyles(); } @@ -5595,13 +5650,13 @@ var sd = { var e, t, n, r, i, a, o, s, c, l, u = this.pt?._usept, d = u ? (e = this.pt) == null || (e = e.originalValue) == null ? void 0 : e[this.$.type.name] : void 0; (n = (u ? (t = this.pt) == null || (t = t.value) == null ? void 0 : t[this.$.type.name] : this.pt) || d) == null || (n = n.hooks) == null || (r = n.onBeforeCreate) == null || r.call(n); var f = (i = this.$primevueConfig) == null || (i = i.pt) == null ? void 0 : i._usept, p = f ? (a = this.$primevue) == null || (a = a.config) == null || (a = a.pt) == null ? void 0 : a.originalValue : void 0; - (c = (f ? (o = this.$primevue) == null || (o = o.config) == null || (o = o.pt) == null ? void 0 : o.value : (s = this.$primevue) == null || (s = s.config) == null ? void 0 : s.pt) || p) == null || (c = c[this.$.type.name]) == null || (c = c.hooks) == null || (l = c.onBeforeCreate) == null || l.call(c), this.$attrSelector = Ku(), this.uid = this.$attrs.id || this.$attrSelector.replace("pc", "pv_id_"); + (c = (f ? (o = this.$primevue) == null || (o = o.config) == null || (o = o.pt) == null ? void 0 : o.value : (s = this.$primevue) == null || (s = s.config) == null ? void 0 : s.pt) || p) == null || (c = c[this.$.type.name]) == null || (c = c.hooks) == null || (l = c.onBeforeCreate) == null || l.call(c), this.$attrSelector = Qu(), this.uid = this.$attrs.id || this.$attrSelector.replace("pc", "pv_id_"); }, created: function() { this._hook("onCreated"); }, beforeMount: function() { - this.rootEl = Xc(Kc(this.$el) ? this.$el : this.$el?.parentElement, `[${this.$attrSelector}]`), this.rootEl && (this.rootEl.$pc = Z({ + this.rootEl = nl(Qc(this.$el) ? this.$el : this.$el?.parentElement, `[${this.$attrSelector}]`), this.rootEl && (this.rootEl.$pc = Z({ name: this.$.type.name, attrSelector: this.$attrSelector }, this.$params)), this._loadStyles(), this._hook("onBeforeMount"); @@ -5630,17 +5685,17 @@ var sd = { }, _mergeProps: function(e) { var t = [...arguments].slice(1); - return ac(e) ? e.apply(void 0, t) : W.apply(void 0, t); + return dc(e) ? e.apply(void 0, t) : G.apply(void 0, t); }, _load: function() { - Gu.isStyleNameLoaded("base") || (X.loadCSS(this.$styleOptions), this._loadGlobalStyles(), Gu.setLoadedStyleName("base")), this._loadThemeStyles(); + Zu.isStyleNameLoaded("base") || (X.loadCSS(this.$styleOptions), this._loadGlobalStyles(), Zu.setLoadedStyleName("base")), this._loadThemeStyles(); }, _loadStyles: function() { this._load(), this._themeChangeListener(this._load); }, _loadCoreStyles: function() { var e; - !Gu.isStyleNameLoaded(this.$style?.name) && (e = this.$style) != null && e.name && (qu.loadCSS(this.$styleOptions), this.$options.style && this.$style.loadCSS(this.$styleOptions), Gu.setLoadedStyleName(this.$style.name)); + !Zu.isStyleNameLoaded(this.$style?.name) && (e = this.$style) != null && e.name && ($u.loadCSS(this.$styleOptions), this.$options.style && this.$style.loadCSS(this.$styleOptions), Zu.setLoadedStyleName(this.$style.name)); }, _loadGlobalStyles: function() { var e = this._useGlobalPT(this._getOptionValue, "global.css", this.$params); @@ -5676,10 +5731,10 @@ var sd = { }, _themeChangeListener: function() { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : function() {}; - Gu.clearLoadedStyleNames(), Dl.on("theme:change", e); + Zu.clearLoadedStyleNames(), Nl.on("theme:change", e); }, _removeThemeListeners: function() { - Dl.off("theme:change", this._loadCoreStyles), Dl.off("theme:change", this._load), Dl.off("theme:change", this._themeScopedListener); + Nl.off("theme:change", this._loadCoreStyles), Nl.off("theme:change", this._load), Nl.off("theme:change", this._themeScopedListener); }, _getHostInstance: function(e) { return e ? this.$options.hostName ? e.$.type.name === this.$options.hostName ? e : this._getHostInstance(e.$parentInstance) : e.$parentInstance : void 0; @@ -5688,7 +5743,7 @@ var sd = { return this[e] || this._getHostInstance(this)?.[e]; }, _getOptionValue: function(e) { - return gc(e, arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "", arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}); + return Sc(e, arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "", arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}); }, _getPTValue: function() { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "", n = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}, r = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : !0, i = /./g.test(t) && !!n[t.split(".")[0]], a = this._getPropValue("ptOptions") || this.$primevueConfig?.ptOptions || {}, o = a.mergeSections, s = o === void 0 || o, c = a.mergeProps, l = c !== void 0 && c, u = r ? i ? this._useGlobalPT(this._getPTClassValue, t, n) : this._useDefaultPT(this._getPTClassValue, t, n) : void 0, d = i ? void 0 : this._getPTSelf(e, this._getPTClassValue, t, Z(Z({}, n), {}, { global: u || {} })), f = this._getPTDatasets(t); @@ -5696,19 +5751,19 @@ var sd = { }, _getPTSelf: function() { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, t = [...arguments].slice(1); - return W(this._usePT.apply(this, [this._getPT(e, this.$name)].concat(t)), this._usePT.apply(this, [this.$_attrsPT].concat(t))); + return G(this._usePT.apply(this, [this._getPT(e, this.$name)].concat(t)), this._usePT.apply(this, [this.$_attrsPT].concat(t))); }, _getPTDatasets: function() { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "", t = "data-pc-", n = e === "root" && K(this.pt?.["data-pc-section"]); - return e !== "transition" && Z(Z({}, e === "root" && Z(Z(id({}, `${t}name`, hc(n ? this.pt?.["data-pc-section"] : this.$.type.name)), n && id({}, `${t}extend`, hc(this.$.type.name))), {}, id({}, `${this.$attrSelector}`, ""))), {}, id({}, `${t}section`, hc(e))); + return e !== "transition" && Z(Z({}, e === "root" && Z(Z(ud({}, `${t}name`, xc(n ? this.pt?.["data-pc-section"] : this.$.type.name)), n && ud({}, `${t}extend`, xc(this.$.type.name))), {}, ud({}, `${this.$attrSelector}`, ""))), {}, ud({}, `${t}section`, xc(e))); }, _getPTClassValue: function() { var e = this._getOptionValue.apply(this, arguments); - return mc(e) || _c(e) ? { class: e } : e; + return bc(e) || Cc(e) ? { class: e } : e; }, _getPT: function(e) { var t = this, n = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "", r = arguments.length > 2 ? arguments[2] : void 0, i = function(e) { - var i = arguments.length > 1 && arguments[1] !== void 0 && arguments[1], a = r ? r(e) : e, o = hc(n), s = hc(t.$name); + var i = arguments.length > 1 && arguments[1] !== void 0 && arguments[1], a = r ? r(e) : e, o = xc(n), s = xc(t.$name); return (i && o === s ? void 0 : a?.[o]) ?? a; }; return e != null && e.hasOwnProperty("_usept") ? { @@ -5723,7 +5778,7 @@ var sd = { }; if (e != null && e.hasOwnProperty("_usept")) { var a = e._usept || this.$primevueConfig?.ptOptions || {}, o = a.mergeSections, s = o === void 0 || o, c = a.mergeProps, l = c !== void 0 && c, u = i(e.originalValue), d = i(e.value); - return u === void 0 && d === void 0 ? void 0 : mc(d) ? d : mc(u) ? u : s || !s && d ? l ? this._mergeProps(l, u, d) : Z(Z({}, u), d) : d; + return u === void 0 && d === void 0 ? void 0 : bc(d) ? d : bc(u) ? u : s || !s && d ? l ? this._mergeProps(l, u, d) : Z(Z({}, u), d) : d; } return i(e); }, @@ -5738,7 +5793,7 @@ var sd = { return this._getPTValue(this.pt, e, Z(Z({}, this.$params), t)); }, ptmi: function() { - var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "", t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, n = W(this.$_attrsWithoutPT, this.ptm(e, t)); + var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "", t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, n = G(this.$_attrsWithoutPT, this.ptm(e, t)); return n != null && n.hasOwnProperty("id") && (n.id ??= this.$id), n; }, ptmo: function() { @@ -5753,7 +5808,7 @@ var sd = { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "", t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : !0, n = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}; if (t) { var r = this._getOptionValue(this.$style.inlineStyles, e, Z(Z({}, this.$params), n)); - return [this._getOptionValue(qu.inlineStyles, e, Z(Z({}, this.$params), n)), r]; + return [this._getOptionValue($u.inlineStyles, e, Z(Z({}, this.$params), n)), r]; } } }, @@ -5761,13 +5816,13 @@ var sd = { globalPT: function() { var e = this; return this._getPT(this.$primevueConfig?.pt, void 0, function(t) { - return pc(t, { instance: e }); + return yc(t, { instance: e }); }); }, defaultPT: function() { var e = this; return this._getPT(this.$primevueConfig?.pt, void 0, function(t) { - return e._getOptionValue(t, e.$name, Z({}, e.$params)) || pc(t, Z({}, e.$params)); + return e._getOptionValue(t, e.$name, Z({}, e.$params)) || yc(t, Z({}, e.$params)); }); }, isUnstyled: function() { @@ -5779,7 +5834,7 @@ var sd = { $inProps: function() { var e = Object.keys(this.$.vnode?.props || {}); return Object.fromEntries(Object.entries(this.$props).filter(function(t) { - var n = Zu(t, 1)[0]; + var n = rd(t, 1)[0]; return e?.includes(n); })); }, @@ -5822,38 +5877,38 @@ var sd = { }, $_attrsPT: function() { return Object.entries(this.$attrs || {}).filter(function(e) { - return Zu(e, 1)[0]?.startsWith("pt:"); + return rd(e, 1)[0]?.startsWith("pt:"); }).reduce(function(e, t) { - var n = Zu(t, 2), r = n[0], i = n[1]; - return ed(Yu(r.split(":"))).slice(1)?.reduce(function(e, t, n, r) { + var n = rd(t, 2), r = n[0], i = n[1]; + return od(td(r.split(":"))).slice(1)?.reduce(function(e, t, n, r) { return !e[t] && (e[t] = n === r.length - 1 ? i : {}), e[t]; }, e), e; }, {}); }, $_attrsWithoutPT: function() { return Object.entries(this.$attrs || {}).filter(function(e) { - var t = Zu(e, 1)[0]; + var t = rd(e, 1)[0]; return !(t != null && t.startsWith("pt:")); }).reduce(function(e, t) { - var n = Zu(t, 2), r = n[0]; + var n = rd(t, 2), r = n[0]; return e[r] = n[1], e; }, {}); } } -}, cd = X.extend({ +}, md = X.extend({ name: "baseicon", css: "\n.p-icon {\n display: inline-block;\n vertical-align: baseline;\n flex-shrink: 0;\n}\n\n.p-icon-spin {\n -webkit-animation: p-icon-spin 2s infinite linear;\n animation: p-icon-spin 2s infinite linear;\n}\n\n@-webkit-keyframes p-icon-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg);\n }\n}\n\n@keyframes p-icon-spin {\n 0% {\n -webkit-transform: rotate(0deg);\n transform: rotate(0deg);\n }\n 100% {\n -webkit-transform: rotate(359deg);\n transform: rotate(359deg);\n }\n}\n" }); // node_modules/@primevue/icons/baseicon/index.mjs -function ld(e) { +function hd(e) { "@babel/helpers - typeof"; - return ld = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { + return hd = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { return typeof e; } : function(e) { return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; - }, ld(e); + }, hd(e); } -function ud(e, t) { +function gd(e, t) { var n = Object.keys(e); if (Object.getOwnPropertySymbols) { var r = Object.getOwnPropertySymbols(e); @@ -5863,42 +5918,42 @@ function ud(e, t) { } return n; } -function dd(e) { +function _d(e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t] == null ? {} : arguments[t]; - t % 2 ? ud(Object(n), !0).forEach(function(t) { - fd(e, t, n[t]); - }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : ud(Object(n)).forEach(function(t) { + t % 2 ? gd(Object(n), !0).forEach(function(t) { + vd(e, t, n[t]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : gd(Object(n)).forEach(function(t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t)); }); } return e; } -function fd(e, t, n) { - return (t = pd(t)) in e ? Object.defineProperty(e, t, { +function vd(e, t, n) { + return (t = yd(t)) in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e; } -function pd(e) { - var t = md(e, "string"); - return ld(t) == "symbol" ? t : t + ""; +function yd(e) { + var t = bd(e, "string"); + return hd(t) == "symbol" ? t : t + ""; } -function md(e, t) { - if (ld(e) != "object" || !e) return e; +function bd(e, t) { + if (hd(e) != "object" || !e) return e; var n = e[Symbol.toPrimitive]; if (n !== void 0) { var r = n.call(e, t); - if (ld(r) != "object") return r; + if (hd(r) != "object") return r; throw TypeError("@@toPrimitive must return a primitive value."); } return (t === "string" ? String : Number)(e); } -var hd = { +var xd = { name: "BaseIcon", - extends: sd, + extends: pd, props: { label: { type: String, @@ -5909,7 +5964,7 @@ var hd = { default: !1 } }, - style: cd, + style: md, provide: function() { return { $pcIcon: this, @@ -5917,63 +5972,63 @@ var hd = { }; }, methods: { pti: function() { - var e = nc(this.label); - return dd(dd({}, !this.isUnstyled && { class: ["p-icon", { "p-icon-spin": this.spin }] }), {}, { + var e = cc(this.label); + return _d(_d({}, !this.isUnstyled && { class: ["p-icon", { "p-icon-spin": this.spin }] }), {}, { role: e ? void 0 : "img", "aria-label": e ? void 0 : this.label, "aria-hidden": e }); } } -}, gd = { +}, Sd = { name: "SpinnerIcon", - extends: hd + extends: xd }; -function _d(e) { - return xd(e) || bd(e) || yd(e) || vd(); +function Cd(e) { + return Dd(e) || Ed(e) || Td(e) || wd(); } -function vd() { +function wd() { throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function yd(e, t) { +function Td(e, t) { if (e) { - if (typeof e == "string") return Sd(e, t); + if (typeof e == "string") return Od(e, t); var n = {}.toString.call(e).slice(8, -1); - return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? Sd(e, t) : void 0; + return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? Od(e, t) : void 0; } } -function bd(e) { +function Ed(e) { if (typeof Symbol < "u" && e[Symbol.iterator] != null || e["@@iterator"] != null) return Array.from(e); } -function xd(e) { - if (Array.isArray(e)) return Sd(e); +function Dd(e) { + if (Array.isArray(e)) return Od(e); } -function Sd(e, t) { +function Od(e, t) { (t == null || t > e.length) && (t = e.length); for (var n = 0, r = Array(t); n < t; n++) r[n] = e[n]; return r; } -function Cd(e, t, n, r, i, a) { - return R(), z("svg", W({ +function kd(e, t, n, r, i, a) { + return z(), B("svg", G({ width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg" - }, e.pti()), _d(t[0] ||= [V("path", { + }, e.pti()), Cd(t[0] ||= [H("path", { d: "M6.99701 14C5.85441 13.999 4.72939 13.7186 3.72012 13.1832C2.71084 12.6478 1.84795 11.8737 1.20673 10.9284C0.565504 9.98305 0.165424 8.89526 0.041387 7.75989C-0.0826496 6.62453 0.073125 5.47607 0.495122 4.4147C0.917119 3.35333 1.59252 2.4113 2.46241 1.67077C3.33229 0.930247 4.37024 0.413729 5.4857 0.166275C6.60117 -0.0811796 7.76026 -0.0520535 8.86188 0.251112C9.9635 0.554278 10.9742 1.12227 11.8057 1.90555C11.915 2.01493 11.9764 2.16319 11.9764 2.31778C11.9764 2.47236 11.915 2.62062 11.8057 2.73C11.7521 2.78503 11.688 2.82877 11.6171 2.85864C11.5463 2.8885 11.4702 2.90389 11.3933 2.90389C11.3165 2.90389 11.2404 2.8885 11.1695 2.85864C11.0987 2.82877 11.0346 2.78503 10.9809 2.73C9.9998 1.81273 8.73246 1.26138 7.39226 1.16876C6.05206 1.07615 4.72086 1.44794 3.62279 2.22152C2.52471 2.99511 1.72683 4.12325 1.36345 5.41602C1.00008 6.70879 1.09342 8.08723 1.62775 9.31926C2.16209 10.5513 3.10478 11.5617 4.29713 12.1803C5.48947 12.7989 6.85865 12.988 8.17414 12.7157C9.48963 12.4435 10.6711 11.7264 11.5196 10.6854C12.3681 9.64432 12.8319 8.34282 12.8328 7C12.8328 6.84529 12.8943 6.69692 13.0038 6.58752C13.1132 6.47812 13.2616 6.41667 13.4164 6.41667C13.5712 6.41667 13.7196 6.47812 13.8291 6.58752C13.9385 6.69692 14 6.84529 14 7C14 8.85651 13.2622 10.637 11.9489 11.9497C10.6356 13.2625 8.85432 14 6.99701 14Z", fill: "currentColor" }, null, -1)]), 16); } -gd.render = Cd; +Sd.render = kd; // node_modules/primevue/badge/style/index.mjs -var wd = X.extend({ +var Ad = X.extend({ name: "badge", style: "\n .p-badge {\n display: inline-flex;\n border-radius: dt('badge.border.radius');\n align-items: center;\n justify-content: center;\n padding: dt('badge.padding');\n background: dt('badge.primary.background');\n color: dt('badge.primary.color');\n font-size: dt('badge.font.size');\n font-weight: dt('badge.font.weight');\n min-width: dt('badge.min.width');\n height: dt('badge.height');\n }\n\n .p-badge-dot {\n width: dt('badge.dot.size');\n min-width: dt('badge.dot.size');\n height: dt('badge.dot.size');\n border-radius: 50%;\n padding: 0;\n }\n\n .p-badge-circle {\n padding: 0;\n border-radius: 50%;\n }\n\n .p-badge-secondary {\n background: dt('badge.secondary.background');\n color: dt('badge.secondary.color');\n }\n\n .p-badge-success {\n background: dt('badge.success.background');\n color: dt('badge.success.color');\n }\n\n .p-badge-info {\n background: dt('badge.info.background');\n color: dt('badge.info.color');\n }\n\n .p-badge-warn {\n background: dt('badge.warn.background');\n color: dt('badge.warn.color');\n }\n\n .p-badge-danger {\n background: dt('badge.danger.background');\n color: dt('badge.danger.color');\n }\n\n .p-badge-contrast {\n background: dt('badge.contrast.background');\n color: dt('badge.contrast.color');\n }\n\n .p-badge-sm {\n font-size: dt('badge.sm.font.size');\n min-width: dt('badge.sm.min.width');\n height: dt('badge.sm.height');\n }\n\n .p-badge-lg {\n font-size: dt('badge.lg.font.size');\n min-width: dt('badge.lg.min.width');\n height: dt('badge.lg.height');\n }\n\n .p-badge-xl {\n font-size: dt('badge.xl.font.size');\n min-width: dt('badge.xl.min.width');\n height: dt('badge.xl.height');\n }\n", classes: { root: function(e) { var t = e.props, n = e.instance; return ["p-badge p-component", { "p-badge-circle": K(t.value) && String(t.value).length === 1, - "p-badge-dot": nc(t.value) && !n.$slots.default, + "p-badge-dot": cc(t.value) && !n.$slots.default, "p-badge-sm": t.size === "small", "p-badge-lg": t.size === "large", "p-badge-xl": t.size === "xlarge", @@ -5985,9 +6040,9 @@ var wd = X.extend({ "p-badge-contrast": t.severity === "contrast" }]; } } -}), Td = { +}), jd = { name: "BaseBadge", - extends: sd, + extends: pd, props: { value: { type: [String, Number], @@ -6002,7 +6057,7 @@ var wd = X.extend({ default: null } }, - style: wd, + style: Ad, provide: function() { return { $pcBadge: this, @@ -6010,84 +6065,84 @@ var wd = X.extend({ }; } }; -function Ed(e) { +function Md(e) { "@babel/helpers - typeof"; - return Ed = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { + return Md = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { return typeof e; } : function(e) { return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; - }, Ed(e); + }, Md(e); } -function Dd(e, t, n) { - return (t = Od(t)) in e ? Object.defineProperty(e, t, { +function Nd(e, t, n) { + return (t = Pd(t)) in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e; } -function Od(e) { - var t = kd(e, "string"); - return Ed(t) == "symbol" ? t : t + ""; +function Pd(e) { + var t = Fd(e, "string"); + return Md(t) == "symbol" ? t : t + ""; } -function kd(e, t) { - if (Ed(e) != "object" || !e) return e; +function Fd(e, t) { + if (Md(e) != "object" || !e) return e; var n = e[Symbol.toPrimitive]; if (n !== void 0) { var r = n.call(e, t); - if (Ed(r) != "object") return r; + if (Md(r) != "object") return r; throw TypeError("@@toPrimitive must return a primitive value."); } return (t === "string" ? String : Number)(e); } -var Ad = { +var Id = { name: "Badge", - extends: Td, + extends: jd, inheritAttrs: !1, computed: { dataP: function() { - return q(Dd(Dd({ + return q(Nd(Nd({ circle: this.value != null && String(this.value).length === 1, empty: this.value == null && !this.$slots.default }, this.severity, this.severity), this.size, this.size)); } } -}, jd = ["data-p"]; -function Md(e, t, n, r, i, a) { - return R(), z("span", W({ +}, Ld = ["data-p"]; +function Rd(e, t, n, r, i, a) { + return z(), B("span", G({ class: e.cx("root"), "data-p": a.dataP }, e.ptmi("root")), [I(e.$slots, "default", {}, function() { - return [qa(O(e.value), 1)]; - })], 16, jd); + return [Za(k(e.value), 1)]; + })], 16, Ld); } -Ad.render = Md; +Id.render = Rd; // node_modules/@primevue/core/basedirective/index.mjs -function Nd(e) { +function zd(e) { "@babel/helpers - typeof"; - return Nd = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { + return zd = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { return typeof e; } : function(e) { return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; - }, Nd(e); + }, zd(e); } -function Pd(e, t) { - return zd(e) || Rd(e, t) || Id(e, t) || Fd(); +function Bd(e, t) { + return Gd(e) || Wd(e, t) || Hd(e, t) || Vd(); } -function Fd() { +function Vd() { throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function Id(e, t) { +function Hd(e, t) { if (e) { - if (typeof e == "string") return Ld(e, t); + if (typeof e == "string") return Ud(e, t); var n = {}.toString.call(e).slice(8, -1); - return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? Ld(e, t) : void 0; + return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? Ud(e, t) : void 0; } } -function Ld(e, t) { +function Ud(e, t) { (t == null || t > e.length) && (t = e.length); for (var n = 0, r = Array(t); n < t; n++) r[n] = e[n]; return r; } -function Rd(e, t) { +function Wd(e, t) { var n = e == null ? null : typeof Symbol < "u" && e[Symbol.iterator] || e["@@iterator"]; if (n != null) { var r, i, a, o, s = [], c = !0, l = !1; @@ -6105,10 +6160,10 @@ function Rd(e, t) { return s; } } -function zd(e) { +function Gd(e) { if (Array.isArray(e)) return e; } -function Bd(e, t) { +function Kd(e, t) { var n = Object.keys(e); if (Object.getOwnPropertySymbols) { var r = Object.getOwnPropertySymbols(e); @@ -6121,59 +6176,59 @@ function Bd(e, t) { function Q(e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t] == null ? {} : arguments[t]; - t % 2 ? Bd(Object(n), !0).forEach(function(t) { - Vd(e, t, n[t]); - }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : Bd(Object(n)).forEach(function(t) { + t % 2 ? Kd(Object(n), !0).forEach(function(t) { + qd(e, t, n[t]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : Kd(Object(n)).forEach(function(t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t)); }); } return e; } -function Vd(e, t, n) { - return (t = Hd(t)) in e ? Object.defineProperty(e, t, { +function qd(e, t, n) { + return (t = Jd(t)) in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e; } -function Hd(e) { - var t = Ud(e, "string"); - return Nd(t) == "symbol" ? t : t + ""; +function Jd(e) { + var t = Yd(e, "string"); + return zd(t) == "symbol" ? t : t + ""; } -function Ud(e, t) { - if (Nd(e) != "object" || !e) return e; +function Yd(e, t) { + if (zd(e) != "object" || !e) return e; var n = e[Symbol.toPrimitive]; if (n !== void 0) { var r = n.call(e, t); - if (Nd(r) != "object") return r; + if (zd(r) != "object") return r; throw TypeError("@@toPrimitive must return a primitive value."); } return (t === "string" ? String : Number)(e); } var $ = { _getMeta: function() { - return [lc(arguments.length <= 0 ? void 0 : arguments[0]) || arguments.length <= 0 ? void 0 : arguments[0], pc(lc(arguments.length <= 0 ? void 0 : arguments[0]) ? arguments.length <= 0 ? void 0 : arguments[0] : arguments.length <= 1 ? void 0 : arguments[1])]; + return [hc(arguments.length <= 0 ? void 0 : arguments[0]) || arguments.length <= 0 ? void 0 : arguments[0], yc(hc(arguments.length <= 0 ? void 0 : arguments[0]) ? arguments.length <= 0 ? void 0 : arguments[0] : arguments.length <= 1 ? void 0 : arguments[1])]; }, _getConfig: function(e, t) { var n, r; return ((e == null || (n = e.instance) == null ? void 0 : n.$primevue) || (t == null || (r = t.ctx) == null || (r = r.appContext) == null || (r = r.config) == null || (r = r.globalProperties) == null ? void 0 : r.$primevue))?.config; }, - _getOptionValue: gc, + _getOptionValue: Sc, _getPTValue: function() { var e, t = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, n = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, r = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : "", i = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : {}, a = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : !0, o = function() { var e = $._getOptionValue.apply($, arguments); - return mc(e) || _c(e) ? { class: e } : e; + return bc(e) || Cc(e) ? { class: e } : e; }, s = ((e = t.binding) == null || (e = e.value) == null ? void 0 : e.ptOptions) || t.$primevueConfig?.ptOptions || {}, c = s.mergeSections, l = c === void 0 || c, u = s.mergeProps, d = u !== void 0 && u, f = a ? $._useDefaultPT(t, t.defaultPT(), o, r, i) : void 0, p = $._usePT(t, $._getPT(n, t.$name), o, r, Q(Q({}, i), {}, { global: f || {} })), m = $._getPTDatasets(t, r); return l || !l && p ? d ? $._mergeProps(t, d, f, p, m) : Q(Q(Q({}, f), p), m) : Q(Q({}, p), m); }, _getPTDatasets: function() { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "", n = "data-pc-"; - return Q(Q({}, t === "root" && Vd({}, `${n}name`, hc(e.$name))), {}, Vd({}, `${n}section`, hc(t))); + return Q(Q({}, t === "root" && qd({}, `${n}name`, xc(e.$name))), {}, qd({}, `${n}section`, xc(t))); }, _getPT: function(e) { var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "", n = arguments.length > 2 ? arguments[2] : void 0, r = function(e) { - var r = n ? n(e) : e, i = hc(t); + var r = n ? n(e) : e, i = xc(t); return r?.[i] ?? r; }; return e && Object.hasOwn(e, "_usept") ? { @@ -6188,7 +6243,7 @@ var $ = { }; if (t && Object.hasOwn(t, "_usept")) { var o = t._usept || e.$primevueConfig?.ptOptions || {}, s = o.mergeSections, c = s === void 0 || s, l = o.mergeProps, u = l !== void 0 && l, d = a(t.originalValue), f = a(t.value); - return d === void 0 && f === void 0 ? void 0 : mc(f) ? f : mc(d) ? d : c || !c && f ? u ? $._mergeProps(e, u, d, f) : Q(Q({}, d), f) : f; + return d === void 0 && f === void 0 ? void 0 : bc(f) ? f : bc(d) ? d : c || !c && f ? u ? $._mergeProps(e, u, d, f) : Q(Q({}, d), f) : f; } return a(t); }, @@ -6204,9 +6259,9 @@ var $ = { }, _loadCoreStyles: function() { var e, t = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, n = arguments.length > 1 ? arguments[1] : void 0; - if (!Gu.isStyleNameLoaded(t.$style?.name) && (e = t.$style) != null && e.name) { + if (!Zu.isStyleNameLoaded(t.$style?.name) && (e = t.$style) != null && e.name) { var r; - X.loadCSS(n), (r = t.$style) == null || r.loadCSS(n), Gu.setLoadedStyleName(t.$style.name); + X.loadCSS(n), (r = t.$style) == null || r.loadCSS(n), Zu.setLoadedStyleName(t.$style.name); } }, _loadThemeStyles: function() { @@ -6238,14 +6293,14 @@ var $ = { }, _themeChangeListener: function() { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : function() {}; - Gu.clearLoadedStyleNames(), Dl.on("theme:change", e); + Zu.clearLoadedStyleNames(), Nl.on("theme:change", e); }, _removeThemeListeners: function() { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}; - Dl.off("theme:change", e.$loadStyles), e.$loadStyles = void 0; + Nl.off("theme:change", e.$loadStyles), e.$loadStyles = void 0; }, _hook: function(e, t, n, r, i, a) { - var o, s, c = `on${wc(t)}`, l = $._getConfig(r, i), u = n?.$instance, d = $._usePT(u, $._getPT(r == null || (o = r.value) == null ? void 0 : o.pt, e), $._getOptionValue, `hooks.${c}`), f = $._useDefaultPT(u, l == null || (s = l.pt) == null || (s = s.directives) == null ? void 0 : s[e], $._getOptionValue, `hooks.${c}`), p = { + var o, s, c = `on${Ac(t)}`, l = $._getConfig(r, i), u = n?.$instance, d = $._usePT(u, $._getPT(r == null || (o = r.value) == null ? void 0 : o.pt, e), $._getOptionValue, `hooks.${c}`), f = $._useDefaultPT(u, l == null || (s = l.pt) == null || (s = s.directives) == null ? void 0 : s[e], $._getOptionValue, `hooks.${c}`), p = { el: n, binding: r, vnode: i, @@ -6255,13 +6310,13 @@ var $ = { }, _mergeProps: function() { var e = arguments.length > 1 ? arguments[1] : void 0, t = [...arguments].slice(2); - return ac(e) ? e.apply(void 0, t) : W.apply(void 0, t); + return dc(e) ? e.apply(void 0, t) : G.apply(void 0, t); }, _extend: function(e) { var t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, n = function(n, r, i, a, o) { var s, c, l; r._$instances = r._$instances || {}; - var u = $._getConfig(i, a), d = r._$instances[e] || {}, f = nc(d) ? Q(Q({}, t), t?.methods) : {}; + var u = $._getConfig(i, a), d = r._$instances[e] || {}, f = cc(d) ? Q(Q({}, t), t?.methods) : {}; r._$instances[e] = Q(Q({}, d), {}, { $name: e, $host: r, @@ -6327,16 +6382,16 @@ var $ = { a.$watchersCallback = { config: s, "config.ripple": c - }, o == null || (n = o.config) == null || n.call(a, a?.$primevueConfig), Tu.on("config:change", s), o == null || (r = o["config.ripple"]) == null || r.call(a, a == null || (i = a.$primevueConfig) == null ? void 0 : i.ripple), Tu.on("config:ripple:change", c); + }, o == null || (n = o.config) == null || n.call(a, a?.$primevueConfig), ju.on("config:change", s), o == null || (r = o["config.ripple"]) == null || r.call(a, a == null || (i = a.$primevueConfig) == null ? void 0 : i.ripple), ju.on("config:ripple:change", c); }, i = function(t) { var n = t._$instances[e].$watchersCallback; - n && (Tu.off("config:change", n.config), Tu.off("config:ripple:change", n["config.ripple"]), t._$instances[e].$watchersCallback = void 0); + n && (ju.off("config:change", n.config), ju.off("config:ripple:change", n["config.ripple"]), t._$instances[e].$watchersCallback = void 0); }; return { created: function(t, r, i, a) { t.$pd ||= {}, t.$pd[e] = { name: e, - attrSelector: ml("pd") + attrSelector: bl("pd") }, n("created", t, r, i, a); }, beforeMount: function(t, i, a, o) { @@ -6361,72 +6416,72 @@ var $ = { }; }, extend: function() { - var e = Pd($._getMeta.apply($, arguments), 2), t = e[0], n = e[1]; + var e = Bd($._getMeta.apply($, arguments), 2), t = e[0], n = e[1]; return Q({ extend: function() { - var e = Pd($._getMeta.apply($, arguments), 2), t = e[0], r = e[1]; + var e = Bd($._getMeta.apply($, arguments), 2), t = e[0], r = e[1]; return $.extend(t, Q(Q(Q({}, n), n?.methods), r)); } }, $._extend(t, n)); } -}, Wd = X.extend({ +}, Xd = X.extend({ name: "ripple-directive", style: "\n .p-ink {\n display: block;\n position: absolute;\n background: dt('ripple.background');\n border-radius: 100%;\n transform: scale(0);\n pointer-events: none;\n }\n\n .p-ink-active {\n animation: ripple 0.4s linear;\n }\n\n @keyframes ripple {\n 100% {\n opacity: 0;\n transform: scale(2.5);\n }\n }\n", classes: { root: "p-ink" } -}), Gd = $.extend({ style: Wd }); -function Kd(e) { +}), Zd = $.extend({ style: Xd }); +function Qd(e) { "@babel/helpers - typeof"; - return Kd = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { + return Qd = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { return typeof e; } : function(e) { return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; - }, Kd(e); + }, Qd(e); } -function qd(e) { - return Zd(e) || Xd(e) || Yd(e) || Jd(); +function $d(e) { + return rf(e) || nf(e) || tf(e) || ef(); } -function Jd() { +function ef() { throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function Yd(e, t) { +function tf(e, t) { if (e) { - if (typeof e == "string") return Qd(e, t); + if (typeof e == "string") return af(e, t); var n = {}.toString.call(e).slice(8, -1); - return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? Qd(e, t) : void 0; + return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? af(e, t) : void 0; } } -function Xd(e) { +function nf(e) { if (typeof Symbol < "u" && e[Symbol.iterator] != null || e["@@iterator"] != null) return Array.from(e); } -function Zd(e) { - if (Array.isArray(e)) return Qd(e); +function rf(e) { + if (Array.isArray(e)) return af(e); } -function Qd(e, t) { +function af(e, t) { (t == null || t > e.length) && (t = e.length); for (var n = 0, r = Array(t); n < t; n++) r[n] = e[n]; return r; } -function $d(e, t, n) { - return (t = ef(t)) in e ? Object.defineProperty(e, t, { +function of(e, t, n) { + return (t = sf(t)) in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e; } -function ef(e) { - var t = tf(e, "string"); - return Kd(t) == "symbol" ? t : t + ""; +function sf(e) { + var t = cf(e, "string"); + return Qd(t) == "symbol" ? t : t + ""; } -function tf(e, t) { - if (Kd(e) != "object" || !e) return e; +function cf(e, t) { + if (Qd(e) != "object" || !e) return e; var n = e[Symbol.toPrimitive]; if (n !== void 0) { var r = n.call(e, t); - if (Kd(r) != "object") return r; + if (Qd(r) != "object") return r; throw TypeError("@@toPrimitive must return a primitive value."); } return (t === "string" ? String : Number)(e); } -var nf = Gd.extend("ripple", { +var lf = Zd.extend("ripple", { watch: { "config.ripple": function(e) { e ? (this.createRipple(this.$host), this.bindEvents(this.$host), this.$host.setAttribute("data-pd-ripple", !0), this.$host.style.overflow = "hidden", this.$host.style.position = "relative") : (this.remove(this.$host), this.$host.removeAttribute("data-pd-ripple")); } }, @@ -6443,7 +6498,7 @@ var nf = Gd.extend("ripple", { }, createRipple: function(e) { var t = this.getInk(e); - t || (t = Jc("span", $d($d({ + t || (t = el("span", of(of({ role: "presentation", "aria-hidden": !0, "data-p-ink": !0, @@ -6459,64 +6514,64 @@ var nf = Gd.extend("ripple", { onMouseDown: function(e) { var t = this, n = e.currentTarget, r = this.getInk(n); if (r && getComputedStyle(r, null).display !== "none") { - if (!this.isUnstyled() && jc(r, "p-ink-active"), r.setAttribute("data-p-ink-active", "false"), !el(r) && !ol(r)) { - var i = Math.max(Hc(n), rl(n)); + if (!this.isUnstyled() && Lc(r, "p-ink-active"), r.setAttribute("data-p-ink-active", "false"), !ol(r) && !fl(r)) { + var i = Math.max(Jc(n), ll(n)); r.style.height = i + "px", r.style.width = i + "px"; } - var a = nl(n), o = e.pageX - a.left + document.body.scrollTop - ol(r) / 2, s = e.pageY - a.top + document.body.scrollLeft - el(r) / 2; - r.style.top = s + "px", r.style.left = o + "px", !this.isUnstyled() && Oc(r, "p-ink-active"), r.setAttribute("data-p-ink-active", "true"), this.timeout = setTimeout(function() { - r && (!t.isUnstyled() && jc(r, "p-ink-active"), r.setAttribute("data-p-ink-active", "false")); + var a = cl(n), o = e.pageX - a.left + document.body.scrollTop - fl(r) / 2, s = e.pageY - a.top + document.body.scrollLeft - ol(r) / 2; + r.style.top = s + "px", r.style.left = o + "px", !this.isUnstyled() && Pc(r, "p-ink-active"), r.setAttribute("data-p-ink-active", "true"), this.timeout = setTimeout(function() { + r && (!t.isUnstyled() && Lc(r, "p-ink-active"), r.setAttribute("data-p-ink-active", "false")); }, 401); } }, onAnimationEnd: function(e) { - this.timeout && clearTimeout(this.timeout), !this.isUnstyled() && jc(e.currentTarget, "p-ink-active"), e.currentTarget.setAttribute("data-p-ink-active", "false"); + this.timeout && clearTimeout(this.timeout), !this.isUnstyled() && Lc(e.currentTarget, "p-ink-active"), e.currentTarget.setAttribute("data-p-ink-active", "false"); }, getInk: function(e) { - return e && e.children ? qd(e.children).find(function(e) { - return Zc(e, "data-pc-name") === "ripple"; + return e && e.children ? $d(e.children).find(function(e) { + return rl(e, "data-pc-name") === "ripple"; }) : void 0; } } -}), rf = "\n .p-button {\n display: inline-flex;\n cursor: pointer;\n user-select: none;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n position: relative;\n color: dt('button.primary.color');\n background: dt('button.primary.background');\n border: 1px solid dt('button.primary.border.color');\n padding: dt('button.padding.y') dt('button.padding.x');\n font-size: 1rem;\n font-family: inherit;\n font-feature-settings: inherit;\n transition:\n background dt('button.transition.duration'),\n color dt('button.transition.duration'),\n border-color dt('button.transition.duration'),\n outline-color dt('button.transition.duration'),\n box-shadow dt('button.transition.duration');\n border-radius: dt('button.border.radius');\n outline-color: transparent;\n gap: dt('button.gap');\n }\n\n .p-button:disabled {\n cursor: default;\n }\n\n .p-button-icon-right {\n order: 1;\n }\n\n .p-button-icon-right:dir(rtl) {\n order: -1;\n }\n\n .p-button:not(.p-button-vertical) .p-button-icon:not(.p-button-icon-right):dir(rtl) {\n order: 1;\n }\n\n .p-button-icon-bottom {\n order: 2;\n }\n\n .p-button-icon-only {\n width: dt('button.icon.only.width');\n padding-inline-start: 0;\n padding-inline-end: 0;\n gap: 0;\n }\n\n .p-button-icon-only.p-button-rounded {\n border-radius: 50%;\n height: dt('button.icon.only.width');\n }\n\n .p-button-icon-only .p-button-label {\n visibility: hidden;\n width: 0;\n }\n\n .p-button-icon-only::after {\n content: \"\xA0\";\n visibility: hidden;\n width: 0;\n }\n\n .p-button-sm {\n font-size: dt('button.sm.font.size');\n padding: dt('button.sm.padding.y') dt('button.sm.padding.x');\n }\n\n .p-button-sm .p-button-icon {\n font-size: dt('button.sm.font.size');\n }\n\n .p-button-sm.p-button-icon-only {\n width: dt('button.sm.icon.only.width');\n }\n\n .p-button-sm.p-button-icon-only.p-button-rounded {\n height: dt('button.sm.icon.only.width');\n }\n\n .p-button-lg {\n font-size: dt('button.lg.font.size');\n padding: dt('button.lg.padding.y') dt('button.lg.padding.x');\n }\n\n .p-button-lg .p-button-icon {\n font-size: dt('button.lg.font.size');\n }\n\n .p-button-lg.p-button-icon-only {\n width: dt('button.lg.icon.only.width');\n }\n\n .p-button-lg.p-button-icon-only.p-button-rounded {\n height: dt('button.lg.icon.only.width');\n }\n\n .p-button-vertical {\n flex-direction: column;\n }\n\n .p-button-label {\n font-weight: dt('button.label.font.weight');\n }\n\n .p-button-fluid {\n width: 100%;\n }\n\n .p-button-fluid.p-button-icon-only {\n width: dt('button.icon.only.width');\n }\n\n .p-button:not(:disabled):hover {\n background: dt('button.primary.hover.background');\n border: 1px solid dt('button.primary.hover.border.color');\n color: dt('button.primary.hover.color');\n }\n\n .p-button:not(:disabled):active {\n background: dt('button.primary.active.background');\n border: 1px solid dt('button.primary.active.border.color');\n color: dt('button.primary.active.color');\n }\n\n .p-button:focus-visible {\n box-shadow: dt('button.primary.focus.ring.shadow');\n outline: dt('button.focus.ring.width') dt('button.focus.ring.style') dt('button.primary.focus.ring.color');\n outline-offset: dt('button.focus.ring.offset');\n }\n\n .p-button .p-badge {\n min-width: dt('button.badge.size');\n height: dt('button.badge.size');\n line-height: dt('button.badge.size');\n }\n\n .p-button-raised {\n box-shadow: dt('button.raised.shadow');\n }\n\n .p-button-rounded {\n border-radius: dt('button.rounded.border.radius');\n }\n\n .p-button-secondary {\n background: dt('button.secondary.background');\n border: 1px solid dt('button.secondary.border.color');\n color: dt('button.secondary.color');\n }\n\n .p-button-secondary:not(:disabled):hover {\n background: dt('button.secondary.hover.background');\n border: 1px solid dt('button.secondary.hover.border.color');\n color: dt('button.secondary.hover.color');\n }\n\n .p-button-secondary:not(:disabled):active {\n background: dt('button.secondary.active.background');\n border: 1px solid dt('button.secondary.active.border.color');\n color: dt('button.secondary.active.color');\n }\n\n .p-button-secondary:focus-visible {\n outline-color: dt('button.secondary.focus.ring.color');\n box-shadow: dt('button.secondary.focus.ring.shadow');\n }\n\n .p-button-success {\n background: dt('button.success.background');\n border: 1px solid dt('button.success.border.color');\n color: dt('button.success.color');\n }\n\n .p-button-success:not(:disabled):hover {\n background: dt('button.success.hover.background');\n border: 1px solid dt('button.success.hover.border.color');\n color: dt('button.success.hover.color');\n }\n\n .p-button-success:not(:disabled):active {\n background: dt('button.success.active.background');\n border: 1px solid dt('button.success.active.border.color');\n color: dt('button.success.active.color');\n }\n\n .p-button-success:focus-visible {\n outline-color: dt('button.success.focus.ring.color');\n box-shadow: dt('button.success.focus.ring.shadow');\n }\n\n .p-button-info {\n background: dt('button.info.background');\n border: 1px solid dt('button.info.border.color');\n color: dt('button.info.color');\n }\n\n .p-button-info:not(:disabled):hover {\n background: dt('button.info.hover.background');\n border: 1px solid dt('button.info.hover.border.color');\n color: dt('button.info.hover.color');\n }\n\n .p-button-info:not(:disabled):active {\n background: dt('button.info.active.background');\n border: 1px solid dt('button.info.active.border.color');\n color: dt('button.info.active.color');\n }\n\n .p-button-info:focus-visible {\n outline-color: dt('button.info.focus.ring.color');\n box-shadow: dt('button.info.focus.ring.shadow');\n }\n\n .p-button-warn {\n background: dt('button.warn.background');\n border: 1px solid dt('button.warn.border.color');\n color: dt('button.warn.color');\n }\n\n .p-button-warn:not(:disabled):hover {\n background: dt('button.warn.hover.background');\n border: 1px solid dt('button.warn.hover.border.color');\n color: dt('button.warn.hover.color');\n }\n\n .p-button-warn:not(:disabled):active {\n background: dt('button.warn.active.background');\n border: 1px solid dt('button.warn.active.border.color');\n color: dt('button.warn.active.color');\n }\n\n .p-button-warn:focus-visible {\n outline-color: dt('button.warn.focus.ring.color');\n box-shadow: dt('button.warn.focus.ring.shadow');\n }\n\n .p-button-help {\n background: dt('button.help.background');\n border: 1px solid dt('button.help.border.color');\n color: dt('button.help.color');\n }\n\n .p-button-help:not(:disabled):hover {\n background: dt('button.help.hover.background');\n border: 1px solid dt('button.help.hover.border.color');\n color: dt('button.help.hover.color');\n }\n\n .p-button-help:not(:disabled):active {\n background: dt('button.help.active.background');\n border: 1px solid dt('button.help.active.border.color');\n color: dt('button.help.active.color');\n }\n\n .p-button-help:focus-visible {\n outline-color: dt('button.help.focus.ring.color');\n box-shadow: dt('button.help.focus.ring.shadow');\n }\n\n .p-button-danger {\n background: dt('button.danger.background');\n border: 1px solid dt('button.danger.border.color');\n color: dt('button.danger.color');\n }\n\n .p-button-danger:not(:disabled):hover {\n background: dt('button.danger.hover.background');\n border: 1px solid dt('button.danger.hover.border.color');\n color: dt('button.danger.hover.color');\n }\n\n .p-button-danger:not(:disabled):active {\n background: dt('button.danger.active.background');\n border: 1px solid dt('button.danger.active.border.color');\n color: dt('button.danger.active.color');\n }\n\n .p-button-danger:focus-visible {\n outline-color: dt('button.danger.focus.ring.color');\n box-shadow: dt('button.danger.focus.ring.shadow');\n }\n\n .p-button-contrast {\n background: dt('button.contrast.background');\n border: 1px solid dt('button.contrast.border.color');\n color: dt('button.contrast.color');\n }\n\n .p-button-contrast:not(:disabled):hover {\n background: dt('button.contrast.hover.background');\n border: 1px solid dt('button.contrast.hover.border.color');\n color: dt('button.contrast.hover.color');\n }\n\n .p-button-contrast:not(:disabled):active {\n background: dt('button.contrast.active.background');\n border: 1px solid dt('button.contrast.active.border.color');\n color: dt('button.contrast.active.color');\n }\n\n .p-button-contrast:focus-visible {\n outline-color: dt('button.contrast.focus.ring.color');\n box-shadow: dt('button.contrast.focus.ring.shadow');\n }\n\n .p-button-outlined {\n background: transparent;\n border-color: dt('button.outlined.primary.border.color');\n color: dt('button.outlined.primary.color');\n }\n\n .p-button-outlined:not(:disabled):hover {\n background: dt('button.outlined.primary.hover.background');\n border-color: dt('button.outlined.primary.border.color');\n color: dt('button.outlined.primary.color');\n }\n\n .p-button-outlined:not(:disabled):active {\n background: dt('button.outlined.primary.active.background');\n border-color: dt('button.outlined.primary.border.color');\n color: dt('button.outlined.primary.color');\n }\n\n .p-button-outlined.p-button-secondary {\n border-color: dt('button.outlined.secondary.border.color');\n color: dt('button.outlined.secondary.color');\n }\n\n .p-button-outlined.p-button-secondary:not(:disabled):hover {\n background: dt('button.outlined.secondary.hover.background');\n border-color: dt('button.outlined.secondary.border.color');\n color: dt('button.outlined.secondary.color');\n }\n\n .p-button-outlined.p-button-secondary:not(:disabled):active {\n background: dt('button.outlined.secondary.active.background');\n border-color: dt('button.outlined.secondary.border.color');\n color: dt('button.outlined.secondary.color');\n }\n\n .p-button-outlined.p-button-success {\n border-color: dt('button.outlined.success.border.color');\n color: dt('button.outlined.success.color');\n }\n\n .p-button-outlined.p-button-success:not(:disabled):hover {\n background: dt('button.outlined.success.hover.background');\n border-color: dt('button.outlined.success.border.color');\n color: dt('button.outlined.success.color');\n }\n\n .p-button-outlined.p-button-success:not(:disabled):active {\n background: dt('button.outlined.success.active.background');\n border-color: dt('button.outlined.success.border.color');\n color: dt('button.outlined.success.color');\n }\n\n .p-button-outlined.p-button-info {\n border-color: dt('button.outlined.info.border.color');\n color: dt('button.outlined.info.color');\n }\n\n .p-button-outlined.p-button-info:not(:disabled):hover {\n background: dt('button.outlined.info.hover.background');\n border-color: dt('button.outlined.info.border.color');\n color: dt('button.outlined.info.color');\n }\n\n .p-button-outlined.p-button-info:not(:disabled):active {\n background: dt('button.outlined.info.active.background');\n border-color: dt('button.outlined.info.border.color');\n color: dt('button.outlined.info.color');\n }\n\n .p-button-outlined.p-button-warn {\n border-color: dt('button.outlined.warn.border.color');\n color: dt('button.outlined.warn.color');\n }\n\n .p-button-outlined.p-button-warn:not(:disabled):hover {\n background: dt('button.outlined.warn.hover.background');\n border-color: dt('button.outlined.warn.border.color');\n color: dt('button.outlined.warn.color');\n }\n\n .p-button-outlined.p-button-warn:not(:disabled):active {\n background: dt('button.outlined.warn.active.background');\n border-color: dt('button.outlined.warn.border.color');\n color: dt('button.outlined.warn.color');\n }\n\n .p-button-outlined.p-button-help {\n border-color: dt('button.outlined.help.border.color');\n color: dt('button.outlined.help.color');\n }\n\n .p-button-outlined.p-button-help:not(:disabled):hover {\n background: dt('button.outlined.help.hover.background');\n border-color: dt('button.outlined.help.border.color');\n color: dt('button.outlined.help.color');\n }\n\n .p-button-outlined.p-button-help:not(:disabled):active {\n background: dt('button.outlined.help.active.background');\n border-color: dt('button.outlined.help.border.color');\n color: dt('button.outlined.help.color');\n }\n\n .p-button-outlined.p-button-danger {\n border-color: dt('button.outlined.danger.border.color');\n color: dt('button.outlined.danger.color');\n }\n\n .p-button-outlined.p-button-danger:not(:disabled):hover {\n background: dt('button.outlined.danger.hover.background');\n border-color: dt('button.outlined.danger.border.color');\n color: dt('button.outlined.danger.color');\n }\n\n .p-button-outlined.p-button-danger:not(:disabled):active {\n background: dt('button.outlined.danger.active.background');\n border-color: dt('button.outlined.danger.border.color');\n color: dt('button.outlined.danger.color');\n }\n\n .p-button-outlined.p-button-contrast {\n border-color: dt('button.outlined.contrast.border.color');\n color: dt('button.outlined.contrast.color');\n }\n\n .p-button-outlined.p-button-contrast:not(:disabled):hover {\n background: dt('button.outlined.contrast.hover.background');\n border-color: dt('button.outlined.contrast.border.color');\n color: dt('button.outlined.contrast.color');\n }\n\n .p-button-outlined.p-button-contrast:not(:disabled):active {\n background: dt('button.outlined.contrast.active.background');\n border-color: dt('button.outlined.contrast.border.color');\n color: dt('button.outlined.contrast.color');\n }\n\n .p-button-outlined.p-button-plain {\n border-color: dt('button.outlined.plain.border.color');\n color: dt('button.outlined.plain.color');\n }\n\n .p-button-outlined.p-button-plain:not(:disabled):hover {\n background: dt('button.outlined.plain.hover.background');\n border-color: dt('button.outlined.plain.border.color');\n color: dt('button.outlined.plain.color');\n }\n\n .p-button-outlined.p-button-plain:not(:disabled):active {\n background: dt('button.outlined.plain.active.background');\n border-color: dt('button.outlined.plain.border.color');\n color: dt('button.outlined.plain.color');\n }\n\n .p-button-text {\n background: transparent;\n border-color: transparent;\n color: dt('button.text.primary.color');\n }\n\n .p-button-text:not(:disabled):hover {\n background: dt('button.text.primary.hover.background');\n border-color: transparent;\n color: dt('button.text.primary.color');\n }\n\n .p-button-text:not(:disabled):active {\n background: dt('button.text.primary.active.background');\n border-color: transparent;\n color: dt('button.text.primary.color');\n }\n\n .p-button-text.p-button-secondary {\n background: transparent;\n border-color: transparent;\n color: dt('button.text.secondary.color');\n }\n\n .p-button-text.p-button-secondary:not(:disabled):hover {\n background: dt('button.text.secondary.hover.background');\n border-color: transparent;\n color: dt('button.text.secondary.color');\n }\n\n .p-button-text.p-button-secondary:not(:disabled):active {\n background: dt('button.text.secondary.active.background');\n border-color: transparent;\n color: dt('button.text.secondary.color');\n }\n\n .p-button-text.p-button-success {\n background: transparent;\n border-color: transparent;\n color: dt('button.text.success.color');\n }\n\n .p-button-text.p-button-success:not(:disabled):hover {\n background: dt('button.text.success.hover.background');\n border-color: transparent;\n color: dt('button.text.success.color');\n }\n\n .p-button-text.p-button-success:not(:disabled):active {\n background: dt('button.text.success.active.background');\n border-color: transparent;\n color: dt('button.text.success.color');\n }\n\n .p-button-text.p-button-info {\n background: transparent;\n border-color: transparent;\n color: dt('button.text.info.color');\n }\n\n .p-button-text.p-button-info:not(:disabled):hover {\n background: dt('button.text.info.hover.background');\n border-color: transparent;\n color: dt('button.text.info.color');\n }\n\n .p-button-text.p-button-info:not(:disabled):active {\n background: dt('button.text.info.active.background');\n border-color: transparent;\n color: dt('button.text.info.color');\n }\n\n .p-button-text.p-button-warn {\n background: transparent;\n border-color: transparent;\n color: dt('button.text.warn.color');\n }\n\n .p-button-text.p-button-warn:not(:disabled):hover {\n background: dt('button.text.warn.hover.background');\n border-color: transparent;\n color: dt('button.text.warn.color');\n }\n\n .p-button-text.p-button-warn:not(:disabled):active {\n background: dt('button.text.warn.active.background');\n border-color: transparent;\n color: dt('button.text.warn.color');\n }\n\n .p-button-text.p-button-help {\n background: transparent;\n border-color: transparent;\n color: dt('button.text.help.color');\n }\n\n .p-button-text.p-button-help:not(:disabled):hover {\n background: dt('button.text.help.hover.background');\n border-color: transparent;\n color: dt('button.text.help.color');\n }\n\n .p-button-text.p-button-help:not(:disabled):active {\n background: dt('button.text.help.active.background');\n border-color: transparent;\n color: dt('button.text.help.color');\n }\n\n .p-button-text.p-button-danger {\n background: transparent;\n border-color: transparent;\n color: dt('button.text.danger.color');\n }\n\n .p-button-text.p-button-danger:not(:disabled):hover {\n background: dt('button.text.danger.hover.background');\n border-color: transparent;\n color: dt('button.text.danger.color');\n }\n\n .p-button-text.p-button-danger:not(:disabled):active {\n background: dt('button.text.danger.active.background');\n border-color: transparent;\n color: dt('button.text.danger.color');\n }\n\n .p-button-text.p-button-contrast {\n background: transparent;\n border-color: transparent;\n color: dt('button.text.contrast.color');\n }\n\n .p-button-text.p-button-contrast:not(:disabled):hover {\n background: dt('button.text.contrast.hover.background');\n border-color: transparent;\n color: dt('button.text.contrast.color');\n }\n\n .p-button-text.p-button-contrast:not(:disabled):active {\n background: dt('button.text.contrast.active.background');\n border-color: transparent;\n color: dt('button.text.contrast.color');\n }\n\n .p-button-text.p-button-plain {\n background: transparent;\n border-color: transparent;\n color: dt('button.text.plain.color');\n }\n\n .p-button-text.p-button-plain:not(:disabled):hover {\n background: dt('button.text.plain.hover.background');\n border-color: transparent;\n color: dt('button.text.plain.color');\n }\n\n .p-button-text.p-button-plain:not(:disabled):active {\n background: dt('button.text.plain.active.background');\n border-color: transparent;\n color: dt('button.text.plain.color');\n }\n\n .p-button-link {\n background: transparent;\n border-color: transparent;\n color: dt('button.link.color');\n }\n\n .p-button-link:not(:disabled):hover {\n background: transparent;\n border-color: transparent;\n color: dt('button.link.hover.color');\n }\n\n .p-button-link:not(:disabled):hover .p-button-label {\n text-decoration: underline;\n }\n\n .p-button-link:not(:disabled):active {\n background: transparent;\n border-color: transparent;\n color: dt('button.link.active.color');\n }\n"; +}), uf = "\n .p-button {\n display: inline-flex;\n cursor: pointer;\n user-select: none;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n position: relative;\n color: dt('button.primary.color');\n background: dt('button.primary.background');\n border: 1px solid dt('button.primary.border.color');\n padding: dt('button.padding.y') dt('button.padding.x');\n font-size: 1rem;\n font-family: inherit;\n font-feature-settings: inherit;\n transition:\n background dt('button.transition.duration'),\n color dt('button.transition.duration'),\n border-color dt('button.transition.duration'),\n outline-color dt('button.transition.duration'),\n box-shadow dt('button.transition.duration');\n border-radius: dt('button.border.radius');\n outline-color: transparent;\n gap: dt('button.gap');\n }\n\n .p-button:disabled {\n cursor: default;\n }\n\n .p-button-icon-right {\n order: 1;\n }\n\n .p-button-icon-right:dir(rtl) {\n order: -1;\n }\n\n .p-button:not(.p-button-vertical) .p-button-icon:not(.p-button-icon-right):dir(rtl) {\n order: 1;\n }\n\n .p-button-icon-bottom {\n order: 2;\n }\n\n .p-button-icon-only {\n width: dt('button.icon.only.width');\n padding-inline-start: 0;\n padding-inline-end: 0;\n gap: 0;\n }\n\n .p-button-icon-only.p-button-rounded {\n border-radius: 50%;\n height: dt('button.icon.only.width');\n }\n\n .p-button-icon-only .p-button-label {\n visibility: hidden;\n width: 0;\n }\n\n .p-button-icon-only::after {\n content: \"\xA0\";\n visibility: hidden;\n width: 0;\n }\n\n .p-button-sm {\n font-size: dt('button.sm.font.size');\n padding: dt('button.sm.padding.y') dt('button.sm.padding.x');\n }\n\n .p-button-sm .p-button-icon {\n font-size: dt('button.sm.font.size');\n }\n\n .p-button-sm.p-button-icon-only {\n width: dt('button.sm.icon.only.width');\n }\n\n .p-button-sm.p-button-icon-only.p-button-rounded {\n height: dt('button.sm.icon.only.width');\n }\n\n .p-button-lg {\n font-size: dt('button.lg.font.size');\n padding: dt('button.lg.padding.y') dt('button.lg.padding.x');\n }\n\n .p-button-lg .p-button-icon {\n font-size: dt('button.lg.font.size');\n }\n\n .p-button-lg.p-button-icon-only {\n width: dt('button.lg.icon.only.width');\n }\n\n .p-button-lg.p-button-icon-only.p-button-rounded {\n height: dt('button.lg.icon.only.width');\n }\n\n .p-button-vertical {\n flex-direction: column;\n }\n\n .p-button-label {\n font-weight: dt('button.label.font.weight');\n }\n\n .p-button-fluid {\n width: 100%;\n }\n\n .p-button-fluid.p-button-icon-only {\n width: dt('button.icon.only.width');\n }\n\n .p-button:not(:disabled):hover {\n background: dt('button.primary.hover.background');\n border: 1px solid dt('button.primary.hover.border.color');\n color: dt('button.primary.hover.color');\n }\n\n .p-button:not(:disabled):active {\n background: dt('button.primary.active.background');\n border: 1px solid dt('button.primary.active.border.color');\n color: dt('button.primary.active.color');\n }\n\n .p-button:focus-visible {\n box-shadow: dt('button.primary.focus.ring.shadow');\n outline: dt('button.focus.ring.width') dt('button.focus.ring.style') dt('button.primary.focus.ring.color');\n outline-offset: dt('button.focus.ring.offset');\n }\n\n .p-button .p-badge {\n min-width: dt('button.badge.size');\n height: dt('button.badge.size');\n line-height: dt('button.badge.size');\n }\n\n .p-button-raised {\n box-shadow: dt('button.raised.shadow');\n }\n\n .p-button-rounded {\n border-radius: dt('button.rounded.border.radius');\n }\n\n .p-button-secondary {\n background: dt('button.secondary.background');\n border: 1px solid dt('button.secondary.border.color');\n color: dt('button.secondary.color');\n }\n\n .p-button-secondary:not(:disabled):hover {\n background: dt('button.secondary.hover.background');\n border: 1px solid dt('button.secondary.hover.border.color');\n color: dt('button.secondary.hover.color');\n }\n\n .p-button-secondary:not(:disabled):active {\n background: dt('button.secondary.active.background');\n border: 1px solid dt('button.secondary.active.border.color');\n color: dt('button.secondary.active.color');\n }\n\n .p-button-secondary:focus-visible {\n outline-color: dt('button.secondary.focus.ring.color');\n box-shadow: dt('button.secondary.focus.ring.shadow');\n }\n\n .p-button-success {\n background: dt('button.success.background');\n border: 1px solid dt('button.success.border.color');\n color: dt('button.success.color');\n }\n\n .p-button-success:not(:disabled):hover {\n background: dt('button.success.hover.background');\n border: 1px solid dt('button.success.hover.border.color');\n color: dt('button.success.hover.color');\n }\n\n .p-button-success:not(:disabled):active {\n background: dt('button.success.active.background');\n border: 1px solid dt('button.success.active.border.color');\n color: dt('button.success.active.color');\n }\n\n .p-button-success:focus-visible {\n outline-color: dt('button.success.focus.ring.color');\n box-shadow: dt('button.success.focus.ring.shadow');\n }\n\n .p-button-info {\n background: dt('button.info.background');\n border: 1px solid dt('button.info.border.color');\n color: dt('button.info.color');\n }\n\n .p-button-info:not(:disabled):hover {\n background: dt('button.info.hover.background');\n border: 1px solid dt('button.info.hover.border.color');\n color: dt('button.info.hover.color');\n }\n\n .p-button-info:not(:disabled):active {\n background: dt('button.info.active.background');\n border: 1px solid dt('button.info.active.border.color');\n color: dt('button.info.active.color');\n }\n\n .p-button-info:focus-visible {\n outline-color: dt('button.info.focus.ring.color');\n box-shadow: dt('button.info.focus.ring.shadow');\n }\n\n .p-button-warn {\n background: dt('button.warn.background');\n border: 1px solid dt('button.warn.border.color');\n color: dt('button.warn.color');\n }\n\n .p-button-warn:not(:disabled):hover {\n background: dt('button.warn.hover.background');\n border: 1px solid dt('button.warn.hover.border.color');\n color: dt('button.warn.hover.color');\n }\n\n .p-button-warn:not(:disabled):active {\n background: dt('button.warn.active.background');\n border: 1px solid dt('button.warn.active.border.color');\n color: dt('button.warn.active.color');\n }\n\n .p-button-warn:focus-visible {\n outline-color: dt('button.warn.focus.ring.color');\n box-shadow: dt('button.warn.focus.ring.shadow');\n }\n\n .p-button-help {\n background: dt('button.help.background');\n border: 1px solid dt('button.help.border.color');\n color: dt('button.help.color');\n }\n\n .p-button-help:not(:disabled):hover {\n background: dt('button.help.hover.background');\n border: 1px solid dt('button.help.hover.border.color');\n color: dt('button.help.hover.color');\n }\n\n .p-button-help:not(:disabled):active {\n background: dt('button.help.active.background');\n border: 1px solid dt('button.help.active.border.color');\n color: dt('button.help.active.color');\n }\n\n .p-button-help:focus-visible {\n outline-color: dt('button.help.focus.ring.color');\n box-shadow: dt('button.help.focus.ring.shadow');\n }\n\n .p-button-danger {\n background: dt('button.danger.background');\n border: 1px solid dt('button.danger.border.color');\n color: dt('button.danger.color');\n }\n\n .p-button-danger:not(:disabled):hover {\n background: dt('button.danger.hover.background');\n border: 1px solid dt('button.danger.hover.border.color');\n color: dt('button.danger.hover.color');\n }\n\n .p-button-danger:not(:disabled):active {\n background: dt('button.danger.active.background');\n border: 1px solid dt('button.danger.active.border.color');\n color: dt('button.danger.active.color');\n }\n\n .p-button-danger:focus-visible {\n outline-color: dt('button.danger.focus.ring.color');\n box-shadow: dt('button.danger.focus.ring.shadow');\n }\n\n .p-button-contrast {\n background: dt('button.contrast.background');\n border: 1px solid dt('button.contrast.border.color');\n color: dt('button.contrast.color');\n }\n\n .p-button-contrast:not(:disabled):hover {\n background: dt('button.contrast.hover.background');\n border: 1px solid dt('button.contrast.hover.border.color');\n color: dt('button.contrast.hover.color');\n }\n\n .p-button-contrast:not(:disabled):active {\n background: dt('button.contrast.active.background');\n border: 1px solid dt('button.contrast.active.border.color');\n color: dt('button.contrast.active.color');\n }\n\n .p-button-contrast:focus-visible {\n outline-color: dt('button.contrast.focus.ring.color');\n box-shadow: dt('button.contrast.focus.ring.shadow');\n }\n\n .p-button-outlined {\n background: transparent;\n border-color: dt('button.outlined.primary.border.color');\n color: dt('button.outlined.primary.color');\n }\n\n .p-button-outlined:not(:disabled):hover {\n background: dt('button.outlined.primary.hover.background');\n border-color: dt('button.outlined.primary.border.color');\n color: dt('button.outlined.primary.color');\n }\n\n .p-button-outlined:not(:disabled):active {\n background: dt('button.outlined.primary.active.background');\n border-color: dt('button.outlined.primary.border.color');\n color: dt('button.outlined.primary.color');\n }\n\n .p-button-outlined.p-button-secondary {\n border-color: dt('button.outlined.secondary.border.color');\n color: dt('button.outlined.secondary.color');\n }\n\n .p-button-outlined.p-button-secondary:not(:disabled):hover {\n background: dt('button.outlined.secondary.hover.background');\n border-color: dt('button.outlined.secondary.border.color');\n color: dt('button.outlined.secondary.color');\n }\n\n .p-button-outlined.p-button-secondary:not(:disabled):active {\n background: dt('button.outlined.secondary.active.background');\n border-color: dt('button.outlined.secondary.border.color');\n color: dt('button.outlined.secondary.color');\n }\n\n .p-button-outlined.p-button-success {\n border-color: dt('button.outlined.success.border.color');\n color: dt('button.outlined.success.color');\n }\n\n .p-button-outlined.p-button-success:not(:disabled):hover {\n background: dt('button.outlined.success.hover.background');\n border-color: dt('button.outlined.success.border.color');\n color: dt('button.outlined.success.color');\n }\n\n .p-button-outlined.p-button-success:not(:disabled):active {\n background: dt('button.outlined.success.active.background');\n border-color: dt('button.outlined.success.border.color');\n color: dt('button.outlined.success.color');\n }\n\n .p-button-outlined.p-button-info {\n border-color: dt('button.outlined.info.border.color');\n color: dt('button.outlined.info.color');\n }\n\n .p-button-outlined.p-button-info:not(:disabled):hover {\n background: dt('button.outlined.info.hover.background');\n border-color: dt('button.outlined.info.border.color');\n color: dt('button.outlined.info.color');\n }\n\n .p-button-outlined.p-button-info:not(:disabled):active {\n background: dt('button.outlined.info.active.background');\n border-color: dt('button.outlined.info.border.color');\n color: dt('button.outlined.info.color');\n }\n\n .p-button-outlined.p-button-warn {\n border-color: dt('button.outlined.warn.border.color');\n color: dt('button.outlined.warn.color');\n }\n\n .p-button-outlined.p-button-warn:not(:disabled):hover {\n background: dt('button.outlined.warn.hover.background');\n border-color: dt('button.outlined.warn.border.color');\n color: dt('button.outlined.warn.color');\n }\n\n .p-button-outlined.p-button-warn:not(:disabled):active {\n background: dt('button.outlined.warn.active.background');\n border-color: dt('button.outlined.warn.border.color');\n color: dt('button.outlined.warn.color');\n }\n\n .p-button-outlined.p-button-help {\n border-color: dt('button.outlined.help.border.color');\n color: dt('button.outlined.help.color');\n }\n\n .p-button-outlined.p-button-help:not(:disabled):hover {\n background: dt('button.outlined.help.hover.background');\n border-color: dt('button.outlined.help.border.color');\n color: dt('button.outlined.help.color');\n }\n\n .p-button-outlined.p-button-help:not(:disabled):active {\n background: dt('button.outlined.help.active.background');\n border-color: dt('button.outlined.help.border.color');\n color: dt('button.outlined.help.color');\n }\n\n .p-button-outlined.p-button-danger {\n border-color: dt('button.outlined.danger.border.color');\n color: dt('button.outlined.danger.color');\n }\n\n .p-button-outlined.p-button-danger:not(:disabled):hover {\n background: dt('button.outlined.danger.hover.background');\n border-color: dt('button.outlined.danger.border.color');\n color: dt('button.outlined.danger.color');\n }\n\n .p-button-outlined.p-button-danger:not(:disabled):active {\n background: dt('button.outlined.danger.active.background');\n border-color: dt('button.outlined.danger.border.color');\n color: dt('button.outlined.danger.color');\n }\n\n .p-button-outlined.p-button-contrast {\n border-color: dt('button.outlined.contrast.border.color');\n color: dt('button.outlined.contrast.color');\n }\n\n .p-button-outlined.p-button-contrast:not(:disabled):hover {\n background: dt('button.outlined.contrast.hover.background');\n border-color: dt('button.outlined.contrast.border.color');\n color: dt('button.outlined.contrast.color');\n }\n\n .p-button-outlined.p-button-contrast:not(:disabled):active {\n background: dt('button.outlined.contrast.active.background');\n border-color: dt('button.outlined.contrast.border.color');\n color: dt('button.outlined.contrast.color');\n }\n\n .p-button-outlined.p-button-plain {\n border-color: dt('button.outlined.plain.border.color');\n color: dt('button.outlined.plain.color');\n }\n\n .p-button-outlined.p-button-plain:not(:disabled):hover {\n background: dt('button.outlined.plain.hover.background');\n border-color: dt('button.outlined.plain.border.color');\n color: dt('button.outlined.plain.color');\n }\n\n .p-button-outlined.p-button-plain:not(:disabled):active {\n background: dt('button.outlined.plain.active.background');\n border-color: dt('button.outlined.plain.border.color');\n color: dt('button.outlined.plain.color');\n }\n\n .p-button-text {\n background: transparent;\n border-color: transparent;\n color: dt('button.text.primary.color');\n }\n\n .p-button-text:not(:disabled):hover {\n background: dt('button.text.primary.hover.background');\n border-color: transparent;\n color: dt('button.text.primary.color');\n }\n\n .p-button-text:not(:disabled):active {\n background: dt('button.text.primary.active.background');\n border-color: transparent;\n color: dt('button.text.primary.color');\n }\n\n .p-button-text.p-button-secondary {\n background: transparent;\n border-color: transparent;\n color: dt('button.text.secondary.color');\n }\n\n .p-button-text.p-button-secondary:not(:disabled):hover {\n background: dt('button.text.secondary.hover.background');\n border-color: transparent;\n color: dt('button.text.secondary.color');\n }\n\n .p-button-text.p-button-secondary:not(:disabled):active {\n background: dt('button.text.secondary.active.background');\n border-color: transparent;\n color: dt('button.text.secondary.color');\n }\n\n .p-button-text.p-button-success {\n background: transparent;\n border-color: transparent;\n color: dt('button.text.success.color');\n }\n\n .p-button-text.p-button-success:not(:disabled):hover {\n background: dt('button.text.success.hover.background');\n border-color: transparent;\n color: dt('button.text.success.color');\n }\n\n .p-button-text.p-button-success:not(:disabled):active {\n background: dt('button.text.success.active.background');\n border-color: transparent;\n color: dt('button.text.success.color');\n }\n\n .p-button-text.p-button-info {\n background: transparent;\n border-color: transparent;\n color: dt('button.text.info.color');\n }\n\n .p-button-text.p-button-info:not(:disabled):hover {\n background: dt('button.text.info.hover.background');\n border-color: transparent;\n color: dt('button.text.info.color');\n }\n\n .p-button-text.p-button-info:not(:disabled):active {\n background: dt('button.text.info.active.background');\n border-color: transparent;\n color: dt('button.text.info.color');\n }\n\n .p-button-text.p-button-warn {\n background: transparent;\n border-color: transparent;\n color: dt('button.text.warn.color');\n }\n\n .p-button-text.p-button-warn:not(:disabled):hover {\n background: dt('button.text.warn.hover.background');\n border-color: transparent;\n color: dt('button.text.warn.color');\n }\n\n .p-button-text.p-button-warn:not(:disabled):active {\n background: dt('button.text.warn.active.background');\n border-color: transparent;\n color: dt('button.text.warn.color');\n }\n\n .p-button-text.p-button-help {\n background: transparent;\n border-color: transparent;\n color: dt('button.text.help.color');\n }\n\n .p-button-text.p-button-help:not(:disabled):hover {\n background: dt('button.text.help.hover.background');\n border-color: transparent;\n color: dt('button.text.help.color');\n }\n\n .p-button-text.p-button-help:not(:disabled):active {\n background: dt('button.text.help.active.background');\n border-color: transparent;\n color: dt('button.text.help.color');\n }\n\n .p-button-text.p-button-danger {\n background: transparent;\n border-color: transparent;\n color: dt('button.text.danger.color');\n }\n\n .p-button-text.p-button-danger:not(:disabled):hover {\n background: dt('button.text.danger.hover.background');\n border-color: transparent;\n color: dt('button.text.danger.color');\n }\n\n .p-button-text.p-button-danger:not(:disabled):active {\n background: dt('button.text.danger.active.background');\n border-color: transparent;\n color: dt('button.text.danger.color');\n }\n\n .p-button-text.p-button-contrast {\n background: transparent;\n border-color: transparent;\n color: dt('button.text.contrast.color');\n }\n\n .p-button-text.p-button-contrast:not(:disabled):hover {\n background: dt('button.text.contrast.hover.background');\n border-color: transparent;\n color: dt('button.text.contrast.color');\n }\n\n .p-button-text.p-button-contrast:not(:disabled):active {\n background: dt('button.text.contrast.active.background');\n border-color: transparent;\n color: dt('button.text.contrast.color');\n }\n\n .p-button-text.p-button-plain {\n background: transparent;\n border-color: transparent;\n color: dt('button.text.plain.color');\n }\n\n .p-button-text.p-button-plain:not(:disabled):hover {\n background: dt('button.text.plain.hover.background');\n border-color: transparent;\n color: dt('button.text.plain.color');\n }\n\n .p-button-text.p-button-plain:not(:disabled):active {\n background: dt('button.text.plain.active.background');\n border-color: transparent;\n color: dt('button.text.plain.color');\n }\n\n .p-button-link {\n background: transparent;\n border-color: transparent;\n color: dt('button.link.color');\n }\n\n .p-button-link:not(:disabled):hover {\n background: transparent;\n border-color: transparent;\n color: dt('button.link.hover.color');\n }\n\n .p-button-link:not(:disabled):hover .p-button-label {\n text-decoration: underline;\n }\n\n .p-button-link:not(:disabled):active {\n background: transparent;\n border-color: transparent;\n color: dt('button.link.active.color');\n }\n"; // node_modules/primevue/button/style/index.mjs -function af(e) { +function df(e) { "@babel/helpers - typeof"; - return af = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { + return df = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { return typeof e; } : function(e) { return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; - }, af(e); + }, df(e); } -function of(e, t, n) { - return (t = sf(t)) in e ? Object.defineProperty(e, t, { +function ff(e, t, n) { + return (t = pf(t)) in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e; } -function sf(e) { - var t = cf(e, "string"); - return af(t) == "symbol" ? t : t + ""; +function pf(e) { + var t = mf(e, "string"); + return df(t) == "symbol" ? t : t + ""; } -function cf(e, t) { - if (af(e) != "object" || !e) return e; +function mf(e, t) { + if (df(e) != "object" || !e) return e; var n = e[Symbol.toPrimitive]; if (n !== void 0) { var r = n.call(e, t); - if (af(r) != "object") return r; + if (df(r) != "object") return r; throw TypeError("@@toPrimitive must return a primitive value."); } return (t === "string" ? String : Number)(e); } -var lf = X.extend({ +var hf = X.extend({ name: "button", - style: rf, + style: uf, classes: { root: function(e) { var t = e.instance, n = e.props; - return ["p-button p-component", of(of(of(of(of(of(of(of(of({ + return ["p-button p-component", ff(ff(ff(ff(ff(ff(ff(ff(ff({ "p-button-icon-only": t.hasIcon && !n.label && !n.badge, "p-button-vertical": (n.iconPos === "top" || n.iconPos === "bottom") && n.label, "p-button-loading": n.loading, @@ -6526,13 +6581,13 @@ var lf = X.extend({ loadingIcon: "p-button-loading-icon", icon: function(e) { var t = e.props; - return ["p-button-icon", of({}, `p-button-icon-${t.iconPos}`, t.label)]; + return ["p-button-icon", ff({}, `p-button-icon-${t.iconPos}`, t.label)]; }, label: "p-button-label" } -}), uf = { +}), gf = { name: "BaseButton", - extends: sd, + extends: pd, props: { label: { type: String, @@ -6619,7 +6674,7 @@ var lf = X.extend({ default: null } }, - style: lf, + style: hf, provide: function() { return { $pcButton: this, @@ -6627,39 +6682,39 @@ var lf = X.extend({ }; } }; -function df(e) { +function _f(e) { "@babel/helpers - typeof"; - return df = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { + return _f = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { return typeof e; } : function(e) { return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; - }, df(e); + }, _f(e); } -function ff(e, t, n) { - return (t = pf(t)) in e ? Object.defineProperty(e, t, { +function vf(e, t, n) { + return (t = yf(t)) in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e; } -function pf(e) { - var t = mf(e, "string"); - return df(t) == "symbol" ? t : t + ""; +function yf(e) { + var t = bf(e, "string"); + return _f(t) == "symbol" ? t : t + ""; } -function mf(e, t) { - if (df(e) != "object" || !e) return e; +function bf(e, t) { + if (_f(e) != "object" || !e) return e; var n = e[Symbol.toPrimitive]; if (n !== void 0) { var r = n.call(e, t); - if (df(r) != "object") return r; + if (_f(r) != "object") return r; throw TypeError("@@toPrimitive must return a primitive value."); } return (t === "string" ? String : Number)(e); } -var hf = { +var xf = { name: "Button", - extends: uf, + extends: gf, inheritAttrs: !1, inject: { $pcFluid: { default: null } }, methods: { getPTOptions: function(e) { @@ -6676,7 +6731,7 @@ var hf = { return this.icon || this.$slots.icon; }, attrs: function() { - return W(this.asAttrs, this.a11yAttrs, this.getPTOptions("root")); + return G(this.asAttrs, this.a11yAttrs, this.getPTOptions("root")); }, asAttrs: function() { return this.as === "BUTTON" ? { @@ -6693,31 +6748,31 @@ var hf = { }; }, hasFluid: function() { - return nc(this.fluid) ? !!this.$pcFluid : this.fluid; + return cc(this.fluid) ? !!this.$pcFluid : this.fluid; }, dataP: function() { - return q(ff(ff(ff(ff(ff(ff(ff(ff(ff(ff({}, this.size, this.size), "icon-only", this.hasIcon && !this.label && !this.badge), "loading", this.loading), "fluid", this.hasFluid), "rounded", this.rounded), "raised", this.raised), "outlined", this.outlined || this.variant === "outlined"), "text", this.text || this.variant === "text"), "link", this.link || this.variant === "link"), "vertical", (this.iconPos === "top" || this.iconPos === "bottom") && this.label)); + return q(vf(vf(vf(vf(vf(vf(vf(vf(vf(vf({}, this.size, this.size), "icon-only", this.hasIcon && !this.label && !this.badge), "loading", this.loading), "fluid", this.hasFluid), "rounded", this.rounded), "raised", this.raised), "outlined", this.outlined || this.variant === "outlined"), "text", this.text || this.variant === "text"), "link", this.link || this.variant === "link"), "vertical", (this.iconPos === "top" || this.iconPos === "bottom") && this.label)); }, dataIconP: function() { - return q(ff(ff({}, this.iconPos, this.iconPos), this.size, this.size)); + return q(vf(vf({}, this.iconPos, this.iconPos), this.size, this.size)); }, dataLabelP: function() { - return q(ff(ff({}, this.size, this.size), "icon-only", this.hasIcon && !this.label && !this.badge)); + return q(vf(vf({}, this.size, this.size), "icon-only", this.hasIcon && !this.label && !this.badge)); } }, components: { - SpinnerIcon: gd, - Badge: Ad + SpinnerIcon: Sd, + Badge: Id }, - directives: { ripple: nf } -}, gf = ["data-p"], _f = ["data-p"]; -function vf(e, t, n, r, i, a) { - var o = F("SpinnerIcon"), s = F("Badge"), c = di("ripple"); + directives: { ripple: lf } +}, Sf = ["data-p"], Cf = ["data-p"]; +function wf(e, t, n, r, i, a) { + var o = F("SpinnerIcon"), s = F("Badge"), c = mi("ripple"); return e.asChild ? I(e.$slots, "default", { key: 1, - class: D(e.cx("root")), + class: O(e.cx("root")), a11yAttrs: a.a11yAttrs - }) : Gn((R(), B(ui(e.as), W({ + }) : qn((z(), V(pi(e.as), G({ key: 0, class: e.cx("root"), "data-p": a.dataP @@ -6725,27 +6780,27 @@ function vf(e, t, n, r, i, a) { default: P(function() { return [I(e.$slots, "default", {}, function() { return [ - e.loading ? I(e.$slots, "loadingicon", W({ + e.loading ? I(e.$slots, "loadingicon", G({ key: 0, class: [e.cx("loadingIcon"), e.cx("icon")] }, e.ptm("loadingIcon")), function() { - return [e.loadingIcon ? (R(), z("span", W({ + return [e.loadingIcon ? (z(), B("span", G({ key: 0, class: [ e.cx("loadingIcon"), e.cx("icon"), e.loadingIcon ] - }, e.ptm("loadingIcon")), null, 16)) : (R(), B(o, W({ + }, e.ptm("loadingIcon")), null, 16)) : (z(), V(o, G({ key: 1, class: [e.cx("loadingIcon"), e.cx("icon")], spin: "" }, e.ptm("loadingIcon")), null, 16, ["class"]))]; - }) : I(e.$slots, "icon", W({ + }) : I(e.$slots, "icon", G({ key: 1, class: [e.cx("icon")] }, e.ptm("icon")), function() { - return [e.icon ? (R(), z("span", W({ + return [e.icon ? (z(), B("span", G({ key: 0, class: [ e.cx("icon"), @@ -6753,16 +6808,16 @@ function vf(e, t, n, r, i, a) { e.iconClass ], "data-p": a.dataIconP - }, e.ptm("icon")), null, 16, gf)) : U("", !0)]; + }, e.ptm("icon")), null, 16, Sf)) : W("", !0)]; }), - e.label ? (R(), z("span", W({ + e.label ? (z(), B("span", G({ key: 2, class: e.cx("label") - }, e.ptm("label"), { "data-p": a.dataLabelP }), O(e.label), 17, _f)) : U("", !0), - e.badge ? (R(), B(s, { + }, e.ptm("label"), { "data-p": a.dataLabelP }), k(e.label), 17, Cf)) : W("", !0), + e.badge ? (z(), V(s, { key: 3, value: e.badge, - class: D(e.badgeClass), + class: O(e.badgeClass), severity: e.badgeSeverity, unstyled: e.unstyled, pt: e.ptm("pcBadge") @@ -6772,102 +6827,102 @@ function vf(e, t, n, r, i, a) { "severity", "unstyled", "pt" - ])) : U("", !0) + ])) : W("", !0) ]; })]; }), _: 3 }, 16, ["class", "data-p"])), [[c]]); } -hf.render = vf; +xf.render = wf; // node_modules/@primevue/icons/check/index.mjs -var yf = { +var Tf = { name: "CheckIcon", - extends: hd + extends: xd }; -function bf(e) { - return wf(e) || Cf(e) || Sf(e) || xf(); +function Ef(e) { + return Af(e) || kf(e) || Of(e) || Df(); } -function xf() { +function Df() { throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function Sf(e, t) { +function Of(e, t) { if (e) { - if (typeof e == "string") return Tf(e, t); + if (typeof e == "string") return jf(e, t); var n = {}.toString.call(e).slice(8, -1); - return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? Tf(e, t) : void 0; + return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? jf(e, t) : void 0; } } -function Cf(e) { +function kf(e) { if (typeof Symbol < "u" && e[Symbol.iterator] != null || e["@@iterator"] != null) return Array.from(e); } -function wf(e) { - if (Array.isArray(e)) return Tf(e); +function Af(e) { + if (Array.isArray(e)) return jf(e); } -function Tf(e, t) { +function jf(e, t) { (t == null || t > e.length) && (t = e.length); for (var n = 0, r = Array(t); n < t; n++) r[n] = e[n]; return r; } -function Ef(e, t, n, r, i, a) { - return R(), z("svg", W({ +function Mf(e, t, n, r, i, a) { + return z(), B("svg", G({ width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg" - }, e.pti()), bf(t[0] ||= [V("path", { + }, e.pti()), Ef(t[0] ||= [H("path", { d: "M4.86199 11.5948C4.78717 11.5923 4.71366 11.5745 4.64596 11.5426C4.57826 11.5107 4.51779 11.4652 4.46827 11.4091L0.753985 7.69483C0.683167 7.64891 0.623706 7.58751 0.580092 7.51525C0.536478 7.44299 0.509851 7.36177 0.502221 7.27771C0.49459 7.19366 0.506156 7.10897 0.536046 7.03004C0.565935 6.95111 0.613367 6.88 0.674759 6.82208C0.736151 6.76416 0.8099 6.72095 0.890436 6.69571C0.970973 6.67046 1.05619 6.66385 1.13966 6.67635C1.22313 6.68886 1.30266 6.72017 1.37226 6.76792C1.44186 6.81567 1.4997 6.8786 1.54141 6.95197L4.86199 10.2503L12.6397 2.49483C12.7444 2.42694 12.8689 2.39617 12.9932 2.40745C13.1174 2.41873 13.2343 2.47141 13.3251 2.55705C13.4159 2.64268 13.4753 2.75632 13.4938 2.87973C13.5123 3.00315 13.4888 3.1292 13.4271 3.23768L5.2557 11.4091C5.20618 11.4652 5.14571 11.5107 5.07801 11.5426C5.01031 11.5745 4.9368 11.5923 4.86199 11.5948Z", fill: "currentColor" }, null, -1)]), 16); } -yf.render = Ef; +Tf.render = Mf; // node_modules/@primevue/icons/minus/index.mjs -var Df = { +var Nf = { name: "MinusIcon", - extends: hd + extends: xd }; -function Of(e) { - return Mf(e) || jf(e) || Af(e) || kf(); +function Pf(e) { + return Rf(e) || Lf(e) || If(e) || Ff(); } -function kf() { +function Ff() { throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function Af(e, t) { +function If(e, t) { if (e) { - if (typeof e == "string") return Nf(e, t); + if (typeof e == "string") return zf(e, t); var n = {}.toString.call(e).slice(8, -1); - return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? Nf(e, t) : void 0; + return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? zf(e, t) : void 0; } } -function jf(e) { +function Lf(e) { if (typeof Symbol < "u" && e[Symbol.iterator] != null || e["@@iterator"] != null) return Array.from(e); } -function Mf(e) { - if (Array.isArray(e)) return Nf(e); +function Rf(e) { + if (Array.isArray(e)) return zf(e); } -function Nf(e, t) { +function zf(e, t) { (t == null || t > e.length) && (t = e.length); for (var n = 0, r = Array(t); n < t; n++) r[n] = e[n]; return r; } -function Pf(e, t, n, r, i, a) { - return R(), z("svg", W({ +function Bf(e, t, n, r, i, a) { + return z(), B("svg", G({ width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg" - }, e.pti()), Of(t[0] ||= [V("path", { + }, e.pti()), Pf(t[0] ||= [H("path", { d: "M13.2222 7.77778H0.777778C0.571498 7.77778 0.373667 7.69584 0.227806 7.54998C0.0819442 7.40412 0 7.20629 0 7.00001C0 6.79373 0.0819442 6.5959 0.227806 6.45003C0.373667 6.30417 0.571498 6.22223 0.777778 6.22223H13.2222C13.4285 6.22223 13.6263 6.30417 13.7722 6.45003C13.9181 6.5959 14 6.79373 14 7.00001C14 7.20629 13.9181 7.40412 13.7722 7.54998C13.6263 7.69584 13.4285 7.77778 13.2222 7.77778Z", fill: "currentColor" }, null, -1)]), 16); } -Df.render = Pf; +Nf.render = Bf; // node_modules/@primevue/core/baseeditableholder/index.mjs -var Ff = { +var Vf = { name: "BaseEditableHolder", - extends: sd, + extends: pd, emits: ["update:modelValue", "value-change"], props: { modelValue: { @@ -6986,9 +7041,9 @@ var Ff = { return this.$filled; } } -}, If = { +}, Hf = { name: "BaseInput", - extends: Ff, + extends: Vf, props: { size: { type: String, @@ -7018,7 +7073,7 @@ var Ff = { return this.$fluid; } } -}, Lf = X.extend({ +}, Uf = X.extend({ name: "checkbox", style: "\n .p-checkbox {\n position: relative;\n display: inline-flex;\n user-select: none;\n vertical-align: bottom;\n width: dt('checkbox.width');\n height: dt('checkbox.height');\n }\n\n .p-checkbox-input {\n cursor: pointer;\n appearance: none;\n position: absolute;\n inset-block-start: 0;\n inset-inline-start: 0;\n width: 100%;\n height: 100%;\n padding: 0;\n margin: 0;\n opacity: 0;\n z-index: 1;\n outline: 0 none;\n border: 1px solid transparent;\n border-radius: dt('checkbox.border.radius');\n }\n\n .p-checkbox-box {\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: dt('checkbox.border.radius');\n border: 1px solid dt('checkbox.border.color');\n background: dt('checkbox.background');\n width: dt('checkbox.width');\n height: dt('checkbox.height');\n transition:\n background dt('checkbox.transition.duration'),\n color dt('checkbox.transition.duration'),\n border-color dt('checkbox.transition.duration'),\n box-shadow dt('checkbox.transition.duration'),\n outline-color dt('checkbox.transition.duration');\n outline-color: transparent;\n box-shadow: dt('checkbox.shadow');\n }\n\n .p-checkbox-icon {\n transition-duration: dt('checkbox.transition.duration');\n color: dt('checkbox.icon.color');\n font-size: dt('checkbox.icon.size');\n width: dt('checkbox.icon.size');\n height: dt('checkbox.icon.size');\n }\n\n .p-checkbox:not(.p-disabled):has(.p-checkbox-input:hover) .p-checkbox-box {\n border-color: dt('checkbox.hover.border.color');\n }\n\n .p-checkbox-checked .p-checkbox-box {\n border-color: dt('checkbox.checked.border.color');\n background: dt('checkbox.checked.background');\n }\n\n .p-checkbox-checked .p-checkbox-icon {\n color: dt('checkbox.icon.checked.color');\n }\n\n .p-checkbox-checked:not(.p-disabled):has(.p-checkbox-input:hover) .p-checkbox-box {\n background: dt('checkbox.checked.hover.background');\n border-color: dt('checkbox.checked.hover.border.color');\n }\n\n .p-checkbox-checked:not(.p-disabled):has(.p-checkbox-input:hover) .p-checkbox-icon {\n color: dt('checkbox.icon.checked.hover.color');\n }\n\n .p-checkbox:not(.p-disabled):has(.p-checkbox-input:focus-visible) .p-checkbox-box {\n border-color: dt('checkbox.focus.border.color');\n box-shadow: dt('checkbox.focus.ring.shadow');\n outline: dt('checkbox.focus.ring.width') dt('checkbox.focus.ring.style') dt('checkbox.focus.ring.color');\n outline-offset: dt('checkbox.focus.ring.offset');\n }\n\n .p-checkbox-checked:not(.p-disabled):has(.p-checkbox-input:focus-visible) .p-checkbox-box {\n border-color: dt('checkbox.checked.focus.border.color');\n }\n\n .p-checkbox.p-invalid > .p-checkbox-box {\n border-color: dt('checkbox.invalid.border.color');\n }\n\n .p-checkbox.p-variant-filled .p-checkbox-box {\n background: dt('checkbox.filled.background');\n }\n\n .p-checkbox-checked.p-variant-filled .p-checkbox-box {\n background: dt('checkbox.checked.background');\n }\n\n .p-checkbox-checked.p-variant-filled:not(.p-disabled):has(.p-checkbox-input:hover) .p-checkbox-box {\n background: dt('checkbox.checked.hover.background');\n }\n\n .p-checkbox.p-disabled {\n opacity: 1;\n }\n\n .p-checkbox.p-disabled .p-checkbox-box {\n background: dt('checkbox.disabled.background');\n border-color: dt('checkbox.checked.disabled.border.color');\n }\n\n .p-checkbox.p-disabled .p-checkbox-box .p-checkbox-icon {\n color: dt('checkbox.icon.disabled.color');\n }\n\n .p-checkbox-sm,\n .p-checkbox-sm .p-checkbox-box {\n width: dt('checkbox.sm.width');\n height: dt('checkbox.sm.height');\n }\n\n .p-checkbox-sm .p-checkbox-icon {\n font-size: dt('checkbox.icon.sm.size');\n width: dt('checkbox.icon.sm.size');\n height: dt('checkbox.icon.sm.size');\n }\n\n .p-checkbox-lg,\n .p-checkbox-lg .p-checkbox-box {\n width: dt('checkbox.lg.width');\n height: dt('checkbox.lg.height');\n }\n\n .p-checkbox-lg .p-checkbox-icon {\n font-size: dt('checkbox.icon.lg.size');\n width: dt('checkbox.icon.lg.size');\n height: dt('checkbox.icon.lg.size');\n }\n", classes: { @@ -7037,9 +7092,9 @@ var Ff = { input: "p-checkbox-input", icon: "p-checkbox-icon" } -}), Rf = { +}), Wf = { name: "BaseCheckbox", - extends: If, + extends: Hf, props: { value: null, binary: Boolean, @@ -7088,7 +7143,7 @@ var Ff = { default: null } }, - style: Lf, + style: Uf, provide: function() { return { $pcCheckbox: this, @@ -7096,63 +7151,63 @@ var Ff = { }; } }; -function zf(e) { +function Gf(e) { "@babel/helpers - typeof"; - return zf = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { + return Gf = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { return typeof e; } : function(e) { return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; - }, zf(e); + }, Gf(e); } -function Bf(e, t, n) { - return (t = Vf(t)) in e ? Object.defineProperty(e, t, { +function Kf(e, t, n) { + return (t = qf(t)) in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e; } -function Vf(e) { - var t = Hf(e, "string"); - return zf(t) == "symbol" ? t : t + ""; +function qf(e) { + var t = Jf(e, "string"); + return Gf(t) == "symbol" ? t : t + ""; } -function Hf(e, t) { - if (zf(e) != "object" || !e) return e; +function Jf(e, t) { + if (Gf(e) != "object" || !e) return e; var n = e[Symbol.toPrimitive]; if (n !== void 0) { var r = n.call(e, t); - if (zf(r) != "object") return r; + if (Gf(r) != "object") return r; throw TypeError("@@toPrimitive must return a primitive value."); } return (t === "string" ? String : Number)(e); } -function Uf(e) { - return qf(e) || Kf(e) || Gf(e) || Wf(); +function Yf(e) { + return $f(e) || Qf(e) || Zf(e) || Xf(); } -function Wf() { +function Xf() { throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function Gf(e, t) { +function Zf(e, t) { if (e) { - if (typeof e == "string") return Jf(e, t); + if (typeof e == "string") return ep(e, t); var n = {}.toString.call(e).slice(8, -1); - return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? Jf(e, t) : void 0; + return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? ep(e, t) : void 0; } } -function Kf(e) { +function Qf(e) { if (typeof Symbol < "u" && e[Symbol.iterator] != null || e["@@iterator"] != null) return Array.from(e); } -function qf(e) { - if (Array.isArray(e)) return Jf(e); +function $f(e) { + if (Array.isArray(e)) return ep(e); } -function Jf(e, t) { +function ep(e, t) { (t == null || t > e.length) && (t = e.length); for (var n = 0, r = Array(t); n < t; n++) r[n] = e[n]; return r; } -var Yf = { +var tp = { name: "Checkbox", - extends: Rf, + extends: Wf, inheritAttrs: !1, emits: [ "change", @@ -7185,8 +7240,8 @@ var Yf = { var t = this; if (!this.disabled && !this.readonly) { var n = this.$pcCheckboxGroup ? this.$pcCheckboxGroup.d_value : this.d_value, r = this.binary ? this.d_indeterminate ? this.trueValue : this.checked ? this.falseValue : this.trueValue : this.checked || this.d_indeterminate ? n.filter(function(e) { - return !sc(e, t.value); - }) : n ? [].concat(Uf(n), [this.value]) : [this.value]; + return !pc(e, t.value); + }) : n ? [].concat(Yf(n), [this.value]) : [this.value]; this.d_indeterminate && (this.d_indeterminate = !1, this.$emit("update:indeterminate", this.d_indeterminate)), this.$pcCheckboxGroup ? this.$pcCheckboxGroup.writeValue(r, e) : this.writeValue(r, e), this.$emit("change", e); } }, @@ -7207,10 +7262,10 @@ var Yf = { }, checked: function() { var e = this.$pcCheckboxGroup ? this.$pcCheckboxGroup.d_value : this.d_value; - return this.d_indeterminate ? !1 : this.binary ? e === this.trueValue : cc(this.value, e); + return this.d_indeterminate ? !1 : this.binary ? e === this.trueValue : mc(this.value, e); }, dataP: function() { - return q(Bf({ + return q(Kf({ invalid: this.$invalid, checked: this.checked, disabled: this.disabled, @@ -7219,15 +7274,15 @@ var Yf = { } }, components: { - CheckIcon: yf, - MinusIcon: Df + CheckIcon: Tf, + MinusIcon: Nf } -}, Xf = [ +}, np = [ "data-p-checked", "data-p-indeterminate", "data-p-disabled", "data-p" -], Zf = [ +], rp = [ "id", "value", "name", @@ -7239,15 +7294,15 @@ var Yf = { "aria-labelledby", "aria-label", "aria-invalid" -], Qf = ["data-p"]; -function $f(e, t, n, r, i, a) { +], ip = ["data-p"]; +function ap(e, t, n, r, i, a) { var o = F("CheckIcon"), s = F("MinusIcon"); - return R(), z("div", W({ class: e.cx("root") }, a.getPTOptions("root"), { + return z(), B("div", G({ class: e.cx("root") }, a.getPTOptions("root"), { "data-p-checked": a.checked, "data-p-indeterminate": i.d_indeterminate || void 0, "data-p-disabled": e.disabled, "data-p": a.dataP - }), [V("input", W({ + }), [H("input", G({ ref: "input", id: e.inputId, type: "checkbox", @@ -7272,26 +7327,26 @@ function $f(e, t, n, r, i, a) { onChange: t[2] ||= function() { return a.onChange && a.onChange.apply(a, arguments); } - }, a.getPTOptions("input")), null, 16, Zf), V("div", W({ class: e.cx("box") }, a.getPTOptions("box"), { "data-p": a.dataP }), [I(e.$slots, "icon", { + }, a.getPTOptions("input")), null, 16, rp), H("div", G({ class: e.cx("box") }, a.getPTOptions("box"), { "data-p": a.dataP }), [I(e.$slots, "icon", { checked: a.checked, indeterminate: i.d_indeterminate, - class: D(e.cx("icon")), + class: O(e.cx("icon")), dataP: a.dataP }, function() { - return [a.checked ? (R(), B(o, W({ + return [a.checked ? (z(), V(o, G({ key: 0, class: e.cx("icon") - }, a.getPTOptions("icon"), { "data-p": a.dataP }), null, 16, ["class", "data-p"])) : i.d_indeterminate ? (R(), B(s, W({ + }, a.getPTOptions("icon"), { "data-p": a.dataP }), null, 16, ["class", "data-p"])) : i.d_indeterminate ? (z(), V(s, G({ key: 1, class: e.cx("icon") - }, a.getPTOptions("icon"), { "data-p": a.dataP }), null, 16, ["class", "data-p"])) : U("", !0)]; - })], 16, Qf)], 16, Xf); + }, a.getPTOptions("icon"), { "data-p": a.dataP }), null, 16, ["class", "data-p"])) : W("", !0)]; + })], 16, ip)], 16, np); } -Yf.render = $f; +tp.render = ap; // node_modules/primevue/inputtext/index.mjs -var ep = { +var op = { name: "BaseInputText", - extends: If, + extends: Hf, style: X.extend({ name: "inputtext", style: "\n .p-inputtext {\n font-family: inherit;\n font-feature-settings: inherit;\n font-size: 1rem;\n color: dt('inputtext.color');\n background: dt('inputtext.background');\n padding-block: dt('inputtext.padding.y');\n padding-inline: dt('inputtext.padding.x');\n border: 1px solid dt('inputtext.border.color');\n transition:\n background dt('inputtext.transition.duration'),\n color dt('inputtext.transition.duration'),\n border-color dt('inputtext.transition.duration'),\n outline-color dt('inputtext.transition.duration'),\n box-shadow dt('inputtext.transition.duration');\n appearance: none;\n border-radius: dt('inputtext.border.radius');\n outline-color: transparent;\n box-shadow: dt('inputtext.shadow');\n }\n\n .p-inputtext:enabled:hover {\n border-color: dt('inputtext.hover.border.color');\n }\n\n .p-inputtext:enabled:focus {\n border-color: dt('inputtext.focus.border.color');\n box-shadow: dt('inputtext.focus.ring.shadow');\n outline: dt('inputtext.focus.ring.width') dt('inputtext.focus.ring.style') dt('inputtext.focus.ring.color');\n outline-offset: dt('inputtext.focus.ring.offset');\n }\n\n .p-inputtext.p-invalid {\n border-color: dt('inputtext.invalid.border.color');\n }\n\n .p-inputtext.p-variant-filled {\n background: dt('inputtext.filled.background');\n }\n\n .p-inputtext.p-variant-filled:enabled:hover {\n background: dt('inputtext.filled.hover.background');\n }\n\n .p-inputtext.p-variant-filled:enabled:focus {\n background: dt('inputtext.filled.focus.background');\n }\n\n .p-inputtext:disabled {\n opacity: 1;\n background: dt('inputtext.disabled.background');\n color: dt('inputtext.disabled.color');\n }\n\n .p-inputtext::placeholder {\n color: dt('inputtext.placeholder.color');\n }\n\n .p-inputtext.p-invalid::placeholder {\n color: dt('inputtext.invalid.placeholder.color');\n }\n\n .p-inputtext-sm {\n font-size: dt('inputtext.sm.font.size');\n padding-block: dt('inputtext.sm.padding.y');\n padding-inline: dt('inputtext.sm.padding.x');\n }\n\n .p-inputtext-lg {\n font-size: dt('inputtext.lg.font.size');\n padding-block: dt('inputtext.lg.padding.y');\n padding-inline: dt('inputtext.lg.padding.x');\n }\n\n .p-inputtext-fluid {\n width: 100%;\n }\n", @@ -7314,67 +7369,67 @@ var ep = { }; } }; -function tp(e) { +function sp(e) { "@babel/helpers - typeof"; - return tp = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { + return sp = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { return typeof e; } : function(e) { return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; - }, tp(e); + }, sp(e); } -function np(e, t, n) { - return (t = rp(t)) in e ? Object.defineProperty(e, t, { +function cp(e, t, n) { + return (t = lp(t)) in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e; } -function rp(e) { - var t = ip(e, "string"); - return tp(t) == "symbol" ? t : t + ""; +function lp(e) { + var t = up(e, "string"); + return sp(t) == "symbol" ? t : t + ""; } -function ip(e, t) { - if (tp(e) != "object" || !e) return e; +function up(e, t) { + if (sp(e) != "object" || !e) return e; var n = e[Symbol.toPrimitive]; if (n !== void 0) { var r = n.call(e, t); - if (tp(r) != "object") return r; + if (sp(r) != "object") return r; throw TypeError("@@toPrimitive must return a primitive value."); } return (t === "string" ? String : Number)(e); } -var ap = { +var dp = { name: "InputText", - extends: ep, + extends: op, inheritAttrs: !1, methods: { onInput: function(e) { this.writeValue(e.target.value, e); } }, computed: { attrs: function() { - return W(this.ptmi("root", { context: { + return G(this.ptmi("root", { context: { filled: this.$filled, disabled: this.disabled } }), this.formField); }, dataP: function() { - return q(np({ + return q(cp({ invalid: this.$invalid, fluid: this.$fluid, filled: this.$variant === "filled" }, this.size, this.size)); } } -}, op = [ +}, fp = [ "value", "name", "disabled", "aria-invalid", "data-p" ]; -function sp(e, t, n, r, i, a) { - return R(), z("input", W({ +function pp(e, t, n, r, i, a) { + return z(), B("input", G({ type: "text", class: e.cx("root"), value: e.d_value, @@ -7385,11 +7440,11 @@ function sp(e, t, n, r, i, a) { onInput: t[0] ||= function() { return a.onInput && a.onInput.apply(a, arguments); } - }, a.attrs), null, 16, op); + }, a.attrs), null, 16, fp); } -ap.render = sp; +dp.render = pp; // node_modules/primevue/textarea/style/index.mjs -var cp = X.extend({ +var mp = X.extend({ name: "textarea", style: "\n .p-textarea {\n font-family: inherit;\n font-feature-settings: inherit;\n font-size: 1rem;\n color: dt('textarea.color');\n background: dt('textarea.background');\n padding-block: dt('textarea.padding.y');\n padding-inline: dt('textarea.padding.x');\n border: 1px solid dt('textarea.border.color');\n transition:\n background dt('textarea.transition.duration'),\n color dt('textarea.transition.duration'),\n border-color dt('textarea.transition.duration'),\n outline-color dt('textarea.transition.duration'),\n box-shadow dt('textarea.transition.duration');\n appearance: none;\n border-radius: dt('textarea.border.radius');\n outline-color: transparent;\n box-shadow: dt('textarea.shadow');\n }\n\n .p-textarea:enabled:hover {\n border-color: dt('textarea.hover.border.color');\n }\n\n .p-textarea:enabled:focus {\n border-color: dt('textarea.focus.border.color');\n box-shadow: dt('textarea.focus.ring.shadow');\n outline: dt('textarea.focus.ring.width') dt('textarea.focus.ring.style') dt('textarea.focus.ring.color');\n outline-offset: dt('textarea.focus.ring.offset');\n }\n\n .p-textarea.p-invalid {\n border-color: dt('textarea.invalid.border.color');\n }\n\n .p-textarea.p-variant-filled {\n background: dt('textarea.filled.background');\n }\n\n .p-textarea.p-variant-filled:enabled:hover {\n background: dt('textarea.filled.hover.background');\n }\n\n .p-textarea.p-variant-filled:enabled:focus {\n background: dt('textarea.filled.focus.background');\n }\n\n .p-textarea:disabled {\n opacity: 1;\n background: dt('textarea.disabled.background');\n color: dt('textarea.disabled.color');\n }\n\n .p-textarea::placeholder {\n color: dt('textarea.placeholder.color');\n }\n\n .p-textarea.p-invalid::placeholder {\n color: dt('textarea.invalid.placeholder.color');\n }\n\n .p-textarea-fluid {\n width: 100%;\n }\n\n .p-textarea-resizable {\n overflow: hidden;\n resize: none;\n }\n\n .p-textarea-sm {\n font-size: dt('textarea.sm.font.size');\n padding-block: dt('textarea.sm.padding.y');\n padding-inline: dt('textarea.sm.padding.x');\n }\n\n .p-textarea-lg {\n font-size: dt('textarea.lg.font.size');\n padding-block: dt('textarea.lg.padding.y');\n padding-inline: dt('textarea.lg.padding.x');\n }\n", classes: { root: function(e) { @@ -7404,11 +7459,11 @@ var cp = X.extend({ "p-textarea-fluid": t.$fluid }]; } } -}), lp = { +}), hp = { name: "BaseTextarea", - extends: If, + extends: Hf, props: { autoResize: Boolean }, - style: cp, + style: mp, provide: function() { return { $pcTextarea: this, @@ -7416,39 +7471,39 @@ var cp = X.extend({ }; } }; -function up(e) { +function gp(e) { "@babel/helpers - typeof"; - return up = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { + return gp = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { return typeof e; } : function(e) { return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; - }, up(e); + }, gp(e); } -function dp(e, t, n) { - return (t = fp(t)) in e ? Object.defineProperty(e, t, { +function _p(e, t, n) { + return (t = vp(t)) in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e; } -function fp(e) { - var t = pp(e, "string"); - return up(t) == "symbol" ? t : t + ""; +function vp(e) { + var t = yp(e, "string"); + return gp(t) == "symbol" ? t : t + ""; } -function pp(e, t) { - if (up(e) != "object" || !e) return e; +function yp(e, t) { + if (gp(e) != "object" || !e) return e; var n = e[Symbol.toPrimitive]; if (n !== void 0) { var r = n.call(e, t); - if (up(r) != "object") return r; + if (gp(r) != "object") return r; throw TypeError("@@toPrimitive must return a primitive value."); } return (t === "string" ? String : Number)(e); } -var mp = { +var bp = { name: "Textarea", - extends: lp, + extends: hp, inheritAttrs: !1, observer: null, mounted: function() { @@ -7478,28 +7533,28 @@ var mp = { }, computed: { attrs: function() { - return W(this.ptmi("root", { context: { + return G(this.ptmi("root", { context: { filled: this.$filled, disabled: this.disabled } }), this.formField); }, dataP: function() { - return q(dp({ + return q(_p({ invalid: this.$invalid, fluid: this.$fluid, filled: this.$variant === "filled" }, this.size, this.size)); } } -}, hp = [ +}, xp = [ "value", "name", "disabled", "aria-invalid", "data-p" ]; -function gp(e, t, n, r, i, a) { - return R(), z("textarea", W({ +function Sp(e, t, n, r, i, a) { + return z(), B("textarea", G({ class: e.cx("root"), value: e.d_value, name: e.name, @@ -7509,54 +7564,54 @@ function gp(e, t, n, r, i, a) { onInput: t[0] ||= function() { return a.onInput && a.onInput.apply(a, arguments); } - }, a.attrs), null, 16, hp); + }, a.attrs), null, 16, xp); } -mp.render = gp; +bp.render = Sp; // node_modules/@primevue/core/utils/index.mjs -function _p(e) { +function Cp(e) { "@babel/helpers - typeof"; - return _p = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { + return Cp = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { return typeof e; } : function(e) { return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; - }, _p(e); + }, Cp(e); } -function vp(e, t) { +function wp(e, t) { if (!(e instanceof t)) throw TypeError("Cannot call a class as a function"); } -function yp(e, t) { +function Tp(e, t) { for (var n = 0; n < t.length; n++) { var r = t[n]; - r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(e, xp(r.key), r); + r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(e, Dp(r.key), r); } } -function bp(e, t, n) { - return t && yp(e.prototype, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; +function Ep(e, t, n) { + return t && Tp(e.prototype, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } -function xp(e) { - var t = Sp(e, "string"); - return _p(t) == "symbol" ? t : t + ""; +function Dp(e) { + var t = Op(e, "string"); + return Cp(t) == "symbol" ? t : t + ""; } -function Sp(e, t) { - if (_p(e) != "object" || !e) return e; +function Op(e, t) { + if (Cp(e) != "object" || !e) return e; var n = e[Symbol.toPrimitive]; if (n !== void 0) { var r = n.call(e, t); - if (_p(r) != "object") return r; + if (Cp(r) != "object") return r; throw TypeError("@@toPrimitive must return a primitive value."); } return String(e); } -var Cp = /*#__PURE__*/ function() { +var kp = /*#__PURE__*/ function() { function e(t) { var n = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : function() {}; - vp(this, e), this.element = t, this.listener = n; + wp(this, e), this.element = t, this.listener = n; } - return bp(e, [ + return Ep(e, [ { key: "bindScrollListener", value: function() { - this.scrollableParents = al(this.element); + this.scrollableParents = dl(this.element); for (var e = 0; e < this.scrollableParents.length; e++) this.scrollableParents[e].addEventListener("scroll", this.listener); } }, @@ -7573,183 +7628,183 @@ var Cp = /*#__PURE__*/ function() { } } ]); -}(), wp = { +}(), Ap = { name: "BlankIcon", - extends: hd + extends: xd }; -function Tp(e) { - return kp(e) || Op(e) || Dp(e) || Ep(); +function jp(e) { + return Fp(e) || Pp(e) || Np(e) || Mp(); } -function Ep() { +function Mp() { throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function Dp(e, t) { +function Np(e, t) { if (e) { - if (typeof e == "string") return Ap(e, t); + if (typeof e == "string") return Ip(e, t); var n = {}.toString.call(e).slice(8, -1); - return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? Ap(e, t) : void 0; + return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? Ip(e, t) : void 0; } } -function Op(e) { +function Pp(e) { if (typeof Symbol < "u" && e[Symbol.iterator] != null || e["@@iterator"] != null) return Array.from(e); } -function kp(e) { - if (Array.isArray(e)) return Ap(e); +function Fp(e) { + if (Array.isArray(e)) return Ip(e); } -function Ap(e, t) { +function Ip(e, t) { (t == null || t > e.length) && (t = e.length); for (var n = 0, r = Array(t); n < t; n++) r[n] = e[n]; return r; } -function jp(e, t, n, r, i, a) { - return R(), z("svg", W({ +function Lp(e, t, n, r, i, a) { + return z(), B("svg", G({ width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg" - }, e.pti()), Tp(t[0] ||= [V("rect", { + }, e.pti()), jp(t[0] ||= [H("rect", { width: "1", height: "1", fill: "currentColor", "fill-opacity": "0" }, null, -1)]), 16); } -wp.render = jp; +Ap.render = Lp; // node_modules/@primevue/icons/chevrondown/index.mjs -var Mp = { +var Rp = { name: "ChevronDownIcon", - extends: hd + extends: xd }; -function Np(e) { - return Lp(e) || Ip(e) || Fp(e) || Pp(); +function zp(e) { + return Up(e) || Hp(e) || Vp(e) || Bp(); } -function Pp() { +function Bp() { throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function Fp(e, t) { +function Vp(e, t) { if (e) { - if (typeof e == "string") return Rp(e, t); + if (typeof e == "string") return Wp(e, t); var n = {}.toString.call(e).slice(8, -1); - return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? Rp(e, t) : void 0; + return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? Wp(e, t) : void 0; } } -function Ip(e) { +function Hp(e) { if (typeof Symbol < "u" && e[Symbol.iterator] != null || e["@@iterator"] != null) return Array.from(e); } -function Lp(e) { - if (Array.isArray(e)) return Rp(e); +function Up(e) { + if (Array.isArray(e)) return Wp(e); } -function Rp(e, t) { +function Wp(e, t) { (t == null || t > e.length) && (t = e.length); for (var n = 0, r = Array(t); n < t; n++) r[n] = e[n]; return r; } -function zp(e, t, n, r, i, a) { - return R(), z("svg", W({ +function Gp(e, t, n, r, i, a) { + return z(), B("svg", G({ width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg" - }, e.pti()), Np(t[0] ||= [V("path", { + }, e.pti()), zp(t[0] ||= [H("path", { d: "M7.01744 10.398C6.91269 10.3985 6.8089 10.378 6.71215 10.3379C6.61541 10.2977 6.52766 10.2386 6.45405 10.1641L1.13907 4.84913C1.03306 4.69404 0.985221 4.5065 1.00399 4.31958C1.02276 4.13266 1.10693 3.95838 1.24166 3.82747C1.37639 3.69655 1.55301 3.61742 1.74039 3.60402C1.92777 3.59062 2.11386 3.64382 2.26584 3.75424L7.01744 8.47394L11.769 3.75424C11.9189 3.65709 12.097 3.61306 12.2748 3.62921C12.4527 3.64535 12.6199 3.72073 12.7498 3.84328C12.8797 3.96582 12.9647 4.12842 12.9912 4.30502C13.0177 4.48162 12.9841 4.662 12.8958 4.81724L7.58083 10.1322C7.50996 10.2125 7.42344 10.2775 7.32656 10.3232C7.22968 10.3689 7.12449 10.3944 7.01744 10.398Z", fill: "currentColor" }, null, -1)]), 16); } -Mp.render = zp; +Rp.render = Gp; // node_modules/@primevue/icons/search/index.mjs -var Bp = { +var Kp = { name: "SearchIcon", - extends: hd + extends: xd }; -function Vp(e) { - return Gp(e) || Wp(e) || Up(e) || Hp(); +function qp(e) { + return Zp(e) || Xp(e) || Yp(e) || Jp(); } -function Hp() { +function Jp() { throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function Up(e, t) { +function Yp(e, t) { if (e) { - if (typeof e == "string") return Kp(e, t); + if (typeof e == "string") return Qp(e, t); var n = {}.toString.call(e).slice(8, -1); - return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? Kp(e, t) : void 0; + return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? Qp(e, t) : void 0; } } -function Wp(e) { +function Xp(e) { if (typeof Symbol < "u" && e[Symbol.iterator] != null || e["@@iterator"] != null) return Array.from(e); } -function Gp(e) { - if (Array.isArray(e)) return Kp(e); +function Zp(e) { + if (Array.isArray(e)) return Qp(e); } -function Kp(e, t) { +function Qp(e, t) { (t == null || t > e.length) && (t = e.length); for (var n = 0, r = Array(t); n < t; n++) r[n] = e[n]; return r; } -function qp(e, t, n, r, i, a) { - return R(), z("svg", W({ +function $p(e, t, n, r, i, a) { + return z(), B("svg", G({ width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg" - }, e.pti()), Vp(t[0] ||= [V("path", { + }, e.pti()), qp(t[0] ||= [H("path", { "fill-rule": "evenodd", "clip-rule": "evenodd", d: "M2.67602 11.0265C3.6661 11.688 4.83011 12.0411 6.02086 12.0411C6.81149 12.0411 7.59438 11.8854 8.32483 11.5828C8.87005 11.357 9.37808 11.0526 9.83317 10.6803L12.9769 13.8241C13.0323 13.8801 13.0983 13.9245 13.171 13.9548C13.2438 13.985 13.3219 14.0003 13.4007 14C13.4795 14.0003 13.5575 13.985 13.6303 13.9548C13.7031 13.9245 13.7691 13.8801 13.8244 13.8241C13.9367 13.7116 13.9998 13.5592 13.9998 13.4003C13.9998 13.2414 13.9367 13.089 13.8244 12.9765L10.6807 9.8328C11.053 9.37773 11.3573 8.86972 11.5831 8.32452C11.8857 7.59408 12.0414 6.81119 12.0414 6.02056C12.0414 4.8298 11.6883 3.66579 11.0268 2.67572C10.3652 1.68564 9.42494 0.913972 8.32483 0.45829C7.22472 0.00260857 6.01418 -0.116618 4.84631 0.115686C3.67844 0.34799 2.60568 0.921393 1.76369 1.76338C0.921698 2.60537 0.348296 3.67813 0.115991 4.84601C-0.116313 6.01388 0.00291375 7.22441 0.458595 8.32452C0.914277 9.42464 1.68595 10.3649 2.67602 11.0265ZM3.35565 2.0158C4.14456 1.48867 5.07206 1.20731 6.02086 1.20731C7.29317 1.20731 8.51338 1.71274 9.41304 2.6124C10.3127 3.51206 10.8181 4.73226 10.8181 6.00457C10.8181 6.95337 10.5368 7.88088 10.0096 8.66978C9.48251 9.45868 8.73328 10.0736 7.85669 10.4367C6.98011 10.7997 6.01554 10.8947 5.08496 10.7096C4.15439 10.5245 3.2996 10.0676 2.62869 9.39674C1.95778 8.72583 1.50089 7.87104 1.31579 6.94046C1.13068 6.00989 1.22568 5.04532 1.58878 4.16874C1.95187 3.29215 2.56675 2.54292 3.35565 2.0158Z", fill: "currentColor" }, null, -1)]), 16); } -Bp.render = qp; +Kp.render = $p; // node_modules/@primevue/icons/times/index.mjs -var Jp = { +var em = { name: "TimesIcon", - extends: hd + extends: xd }; -function Yp(e) { - return $p(e) || Qp(e) || Zp(e) || Xp(); +function tm(e) { + return am(e) || im(e) || rm(e) || nm(); } -function Xp() { +function nm() { throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function Zp(e, t) { +function rm(e, t) { if (e) { - if (typeof e == "string") return em(e, t); + if (typeof e == "string") return om(e, t); var n = {}.toString.call(e).slice(8, -1); - return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? em(e, t) : void 0; + return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? om(e, t) : void 0; } } -function Qp(e) { +function im(e) { if (typeof Symbol < "u" && e[Symbol.iterator] != null || e["@@iterator"] != null) return Array.from(e); } -function $p(e) { - if (Array.isArray(e)) return em(e); +function am(e) { + if (Array.isArray(e)) return om(e); } -function em(e, t) { +function om(e, t) { (t == null || t > e.length) && (t = e.length); for (var n = 0, r = Array(t); n < t; n++) r[n] = e[n]; return r; } -function tm(e, t, n, r, i, a) { - return R(), z("svg", W({ +function sm(e, t, n, r, i, a) { + return z(), B("svg", G({ width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg" - }, e.pti()), Yp(t[0] ||= [V("path", { + }, e.pti()), tm(t[0] ||= [H("path", { d: "M8.01186 7.00933L12.27 2.75116C12.341 2.68501 12.398 2.60524 12.4375 2.51661C12.4769 2.42798 12.4982 2.3323 12.4999 2.23529C12.5016 2.13827 12.4838 2.0419 12.4474 1.95194C12.4111 1.86197 12.357 1.78024 12.2884 1.71163C12.2198 1.64302 12.138 1.58893 12.0481 1.55259C11.9581 1.51625 11.8617 1.4984 11.7647 1.50011C11.6677 1.50182 11.572 1.52306 11.4834 1.56255C11.3948 1.60204 11.315 1.65898 11.2488 1.72997L6.99067 5.98814L2.7325 1.72997C2.59553 1.60234 2.41437 1.53286 2.22718 1.53616C2.03999 1.53946 1.8614 1.61529 1.72901 1.74767C1.59663 1.88006 1.5208 2.05865 1.5175 2.24584C1.5142 2.43303 1.58368 2.61419 1.71131 2.75116L5.96948 7.00933L1.71131 11.2675C1.576 11.403 1.5 11.5866 1.5 11.7781C1.5 11.9696 1.576 12.1532 1.71131 12.2887C1.84679 12.424 2.03043 12.5 2.2219 12.5C2.41338 12.5 2.59702 12.424 2.7325 12.2887L6.99067 8.03052L11.2488 12.2887C11.3843 12.424 11.568 12.5 11.7594 12.5C11.9509 12.5 12.1346 12.424 12.27 12.2887C12.4053 12.1532 12.4813 11.9696 12.4813 11.7781C12.4813 11.5866 12.4053 11.403 12.27 11.2675L8.01186 7.00933Z", fill: "currentColor" }, null, -1)]), 16); } -Jp.render = tm; +em.render = sm; // node_modules/primevue/iconfield/index.mjs -var nm = { +var cm = { name: "IconField", extends: { name: "BaseIconField", - extends: sd, + extends: pd, style: X.extend({ name: "iconfield", style: "\n .p-iconfield {\n position: relative;\n display: block;\n }\n\n .p-inputicon {\n position: absolute;\n top: 50%;\n margin-top: calc(-1 * (dt('icon.size') / 2));\n color: dt('iconfield.icon.color');\n line-height: 1;\n z-index: 1;\n }\n\n .p-iconfield .p-inputicon:first-child {\n inset-inline-start: dt('form.field.padding.x');\n }\n\n .p-iconfield .p-inputicon:last-child {\n inset-inline-end: dt('form.field.padding.x');\n }\n\n .p-iconfield .p-inputtext:not(:first-child),\n .p-iconfield .p-inputwrapper:not(:first-child) .p-inputtext {\n padding-inline-start: calc((dt('form.field.padding.x') * 2) + dt('icon.size'));\n }\n\n .p-iconfield .p-inputtext:not(:last-child) {\n padding-inline-end: calc((dt('form.field.padding.x') * 2) + dt('icon.size'));\n }\n\n .p-iconfield:has(.p-inputfield-sm) .p-inputicon {\n font-size: dt('form.field.sm.font.size');\n width: dt('form.field.sm.font.size');\n height: dt('form.field.sm.font.size');\n margin-top: calc(-1 * (dt('form.field.sm.font.size') / 2));\n }\n\n .p-iconfield:has(.p-inputfield-lg) .p-inputicon {\n font-size: dt('form.field.lg.font.size');\n width: dt('form.field.lg.font.size');\n height: dt('form.field.lg.font.size');\n margin-top: calc(-1 * (dt('form.field.lg.font.size') / 2));\n }\n", @@ -7764,16 +7819,16 @@ var nm = { }, inheritAttrs: !1 }; -function rm(e, t, n, r, i, a) { - return R(), z("div", W({ class: e.cx("root") }, e.ptmi("root")), [I(e.$slots, "default")], 16); +function lm(e, t, n, r, i, a) { + return z(), B("div", G({ class: e.cx("root") }, e.ptmi("root")), [I(e.$slots, "default")], 16); } -nm.render = rm; +cm.render = lm; // node_modules/primevue/inputicon/index.mjs -var im = { +var um = { name: "InputIcon", extends: { name: "BaseInputIcon", - extends: sd, + extends: pd, style: X.extend({ name: "inputicon", classes: { root: "p-inputicon" } @@ -7791,12 +7846,12 @@ var im = { return [this.cx("root"), this.class]; } } }; -function am(e, t, n, r, i, a) { - return R(), z("span", W({ class: a.containerClass }, e.ptmi("root"), { "aria-hidden": "true" }), [I(e.$slots, "default")], 16); +function dm(e, t, n, r, i, a) { + return z(), B("span", G({ class: a.containerClass }, e.ptmi("root"), { "aria-hidden": "true" }), [I(e.$slots, "default")], 16); } -im.render = am; +um.render = dm; // node_modules/primevue/overlayeventbus/index.mjs -var om = Ec(), sm = { +var fm = Mc(), pm = { name: "Portal", props: { appendTo: { @@ -7812,27 +7867,27 @@ var om = Ec(), sm = { return { mounted: !1 }; }, mounted: function() { - this.mounted = cl(); + this.mounted = ml(); }, computed: { inline: function() { return this.disabled || this.appendTo === "self"; } } }; -function cm(e, t, n, r, i, a) { - return a.inline ? I(e.$slots, "default", { key: 0 }) : i.mounted ? (R(), B(mr, { +function mm(e, t, n, r, i, a) { + return a.inline ? I(e.$slots, "default", { key: 0 }) : i.mounted ? (z(), V(_r, { key: 1, to: n.appendTo - }, [I(e.$slots, "default")], 8, ["to"])) : U("", !0); + }, [I(e.$slots, "default")], 8, ["to"])) : W("", !0); } -sm.render = cm; +pm.render = mm; // node_modules/primevue/virtualscroller/style/index.mjs -var lm = X.extend({ +var hm = X.extend({ name: "virtualscroller", css: "\n.p-virtualscroller {\n position: relative;\n overflow: auto;\n contain: strict;\n transform: translateZ(0);\n will-change: scroll-position;\n outline: 0 none;\n}\n\n.p-virtualscroller-content {\n position: absolute;\n top: 0;\n left: 0;\n min-height: 100%;\n min-width: 100%;\n will-change: transform;\n}\n\n.p-virtualscroller-spacer {\n position: absolute;\n top: 0;\n left: 0;\n height: 1px;\n width: 1px;\n transform-origin: 0 0;\n pointer-events: none;\n}\n\n.p-virtualscroller-loader {\n position: sticky;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.p-virtualscroller-loader-mask {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.p-virtualscroller-horizontal > .p-virtualscroller-content {\n display: flex;\n}\n\n.p-virtualscroller-inline .p-virtualscroller-content {\n position: static;\n}\n\n.p-virtualscroller .p-virtualscroller-loading {\n transform: none !important;\n min-height: 0;\n position: sticky;\n inset-block-start: 0;\n inset-inline-start: 0;\n}\n", style: "\n .p-virtualscroller-loader {\n background: dt('virtualscroller.loader.mask.background');\n color: dt('virtualscroller.loader.mask.color');\n }\n\n .p-virtualscroller-loading-icon {\n font-size: dt('virtualscroller.loader.icon.size');\n width: dt('virtualscroller.loader.icon.size');\n height: dt('virtualscroller.loader.icon.size');\n }\n" -}), um = { +}), gm = { name: "BaseVirtualScroller", - extends: sd, + extends: pd, props: { id: { type: String, @@ -7915,7 +7970,7 @@ var lm = X.extend({ default: !1 } }, - style: lm, + style: hm, provide: function() { return { $pcVirtualScroller: this, @@ -7924,18 +7979,18 @@ var lm = X.extend({ }, beforeMount: function() { var e; - lm.loadCSS({ nonce: (e = this.$primevueConfig) == null || (e = e.csp) == null ? void 0 : e.nonce }); + hm.loadCSS({ nonce: (e = this.$primevueConfig) == null || (e = e.csp) == null ? void 0 : e.nonce }); } }; -function dm(e) { +function _m(e) { "@babel/helpers - typeof"; - return dm = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { + return _m = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { return typeof e; } : function(e) { return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; - }, dm(e); + }, _m(e); } -function fm(e, t) { +function vm(e, t) { var n = Object.keys(e); if (Object.getOwnPropertySymbols) { var r = Object.getOwnPropertySymbols(e); @@ -7945,42 +8000,42 @@ function fm(e, t) { } return n; } -function pm(e) { +function ym(e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t] == null ? {} : arguments[t]; - t % 2 ? fm(Object(n), !0).forEach(function(t) { - mm(e, t, n[t]); - }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : fm(Object(n)).forEach(function(t) { + t % 2 ? vm(Object(n), !0).forEach(function(t) { + bm(e, t, n[t]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : vm(Object(n)).forEach(function(t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t)); }); } return e; } -function mm(e, t, n) { - return (t = hm(t)) in e ? Object.defineProperty(e, t, { +function bm(e, t, n) { + return (t = xm(t)) in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e; } -function hm(e) { - var t = gm(e, "string"); - return dm(t) == "symbol" ? t : t + ""; +function xm(e) { + var t = Sm(e, "string"); + return _m(t) == "symbol" ? t : t + ""; } -function gm(e, t) { - if (dm(e) != "object" || !e) return e; +function Sm(e, t) { + if (_m(e) != "object" || !e) return e; var n = e[Symbol.toPrimitive]; if (n !== void 0) { var r = n.call(e, t); - if (dm(r) != "object") return r; + if (_m(r) != "object") return r; throw TypeError("@@toPrimitive must return a primitive value."); } return (t === "string" ? String : Number)(e); } -var _m = { +var Cm = { name: "VirtualScroller", - extends: um, + extends: gm, inheritAttrs: !1, emits: [ "update:numToleratedItems", @@ -8075,7 +8130,7 @@ var _m = { }, methods: { viewInit: function() { - ul(this.element) && (this.setContentEl(this.content), this.init(), this.calculateAutoSize(), this.defaultWidth = ol(this.element), this.defaultHeight = el(this.element), this.defaultContentWidth = ol(this.content), this.defaultContentHeight = el(this.content), this.initialized = !0), this.element && this.bindResizeListener(); + gl(this.element) && (this.setContentEl(this.content), this.init(), this.calculateAutoSize(), this.defaultWidth = fl(this.element), this.defaultHeight = ol(this.element), this.defaultContentWidth = fl(this.content), this.defaultContentHeight = ol(this.content), this.initialized = !0), this.element && this.bindResizeListener(); }, init: function() { this.disabled || (this.setSize(), this.calculateOptions(), this.setSpacerSize()); @@ -8213,7 +8268,7 @@ var _m = { if (e.content) { var t = e.isBoth(), n = e.isHorizontal(), r = e.isVertical(); e.content.style.minHeight = e.content.style.minWidth = "auto", e.content.style.position = "relative", e.element.style.contain = "none"; - var i = [ol(e.element), el(e.element)], a = i[0], o = i[1]; + var i = [fl(e.element), ol(e.element)], a = i[0], o = i[1]; (t || n) && (e.element.style.width = a < e.defaultWidth ? a + "px" : e.scrollWidth || e.defaultWidth + "px"), (t || r) && (e.element.style.height = o < e.defaultHeight ? o + "px" : e.scrollHeight || e.defaultHeight + "px"), e.content.style.minHeight = e.content.style.minWidth = "", e.content.style.position = "", e.element.style.contain = ""; } }); @@ -8257,7 +8312,7 @@ var _m = { if (t) { var n = this.isBoth(), r = this.isHorizontal(), i = this.getContentPosition(), a = function(t, n, r) { var i = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : 0; - return e.spacerStyle = pm(pm({}, e.spacerStyle), mm({}, `${t}`, (n || []).length * r + i + "px")); + return e.spacerStyle = ym(ym({}, e.spacerStyle), bm({}, `${t}`, (n || []).length * r + i + "px")); }; n ? (a("height", t, this.itemSize[0], i.y), a("width", this.columns || t[1], this.itemSize[1], i.x)) : r ? a("width", this.columns || t, this.itemSize, i.x) : a("height", t, this.itemSize, i.y); } @@ -8269,7 +8324,7 @@ var _m = { return e * t; }, o = function() { var e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0, n = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0; - return t.contentStyle = pm(pm({}, t.contentStyle), { transform: `translate3d(${e}px, ${n}px, 0)` }); + return t.contentStyle = ym(ym({}, t.contentStyle), { transform: `translate3d(${e}px, ${n}px, 0)` }); }; if (n) o(a(i.cols, this.itemSize[1]), a(i.rows, this.itemSize[0])); else { @@ -8356,9 +8411,9 @@ var _m = { onResize: function() { var e = this; this.resizeTimeout && clearTimeout(this.resizeTimeout), this.resizeTimeout = setTimeout(function() { - if (ul(e.element)) { - var t = e.isBoth(), n = e.isVertical(), r = e.isHorizontal(), i = [ol(e.element), el(e.element)], a = i[0], o = i[1], s = a !== e.defaultWidth, c = o !== e.defaultHeight; - (t ? s || c : r ? s : n && c) && (e.d_numToleratedItems = e.numToleratedItems, e.defaultWidth = a, e.defaultHeight = o, e.defaultContentWidth = ol(e.content), e.defaultContentHeight = el(e.content), e.init()); + if (gl(e.element)) { + var t = e.isBoth(), n = e.isVertical(), r = e.isHorizontal(), i = [fl(e.element), ol(e.element)], a = i[0], o = i[1], s = a !== e.defaultWidth, c = o !== e.defaultHeight; + (t ? s || c : r ? s : n && c) && (e.d_numToleratedItems = e.numToleratedItems, e.defaultWidth = a, e.defaultHeight = o, e.defaultContentWidth = fl(e.content), e.defaultContentHeight = ol(e.content), e.init()); } }, this.resizeDelay); }, @@ -8384,7 +8439,7 @@ var _m = { }, getLoaderOptions: function(e, t) { var n = this.loaderArr.length; - return pm({ + return ym({ index: e, count: n, first: e === 0, @@ -8400,7 +8455,7 @@ var _m = { return this.step && !this.lazy ? this.page !== this.getPageByFirst(e ?? this.first) : !0; }, setContentEl: function(e) { - this.content = e || this.content || Xc(this.element, "[data-pc-section=\"content\"]"); + this.content = e || this.content || nl(this.element, "[data-pc-section=\"content\"]"); }, elementRef: function(e) { this.element = e; @@ -8444,15 +8499,15 @@ var _m = { return this.columns; } }, - components: { SpinnerIcon: gd } -}, vm = ["tabindex"]; -function ym(e, t, n, r, i, a) { + components: { SpinnerIcon: Sd } +}, wm = ["tabindex"]; +function Tm(e, t, n, r, i, a) { var o = F("SpinnerIcon"); - return e.disabled ? (R(), z(L, { key: 1 }, [I(e.$slots, "default"), I(e.$slots, "content", { + return e.disabled ? (z(), B(L, { key: 1 }, [I(e.$slots, "default"), I(e.$slots, "content", { items: e.items, rows: e.items, columns: a.loadedColumns - })], 64)) : (R(), z("div", W({ + })], 64)) : (z(), B("div", G({ key: 0, ref: a.elementRef, class: a.containerClass, @@ -8478,11 +8533,11 @@ function ym(e, t, n, r, i, a) { horizontal: a.isHorizontal(), both: a.isBoth() }, function() { - return [V("div", W({ + return [H("div", G({ ref: a.contentRef, class: a.contentClass, style: i.contentStyle - }, e.ptm("content")), [(R(!0), z(L, null, mi(a.loadedItems, function(t, n) { + }, e.ptm("content")), [(z(!0), B(L, null, _i(a.loadedItems, function(t, n) { return I(e.$slots, "item", { key: n, item: t, @@ -8490,30 +8545,30 @@ function ym(e, t, n, r, i, a) { }); }), 128))], 16)]; }), - e.showSpacer ? (R(), z("div", W({ + e.showSpacer ? (z(), B("div", G({ key: 0, class: "p-virtualscroller-spacer", style: i.spacerStyle - }, e.ptm("spacer")), null, 16)) : U("", !0), - !e.loaderDisabled && e.showLoader && i.d_loading ? (R(), z("div", W({ + }, e.ptm("spacer")), null, 16)) : W("", !0), + !e.loaderDisabled && e.showLoader && i.d_loading ? (z(), B("div", G({ key: 1, class: a.loaderClass - }, e.ptm("loader")), [e.$slots && e.$slots.loader ? (R(!0), z(L, { key: 0 }, mi(i.loaderArr, function(t, n) { + }, e.ptm("loader")), [e.$slots && e.$slots.loader ? (z(!0), B(L, { key: 0 }, _i(i.loaderArr, function(t, n) { return I(e.$slots, "loader", { key: n, options: a.getLoaderOptions(n, a.isBoth() && { numCols: e.d_numItemsInViewport.cols }) }); - }), 128)) : U("", !0), I(e.$slots, "loadingicon", {}, function() { - return [H(o, W({ + }), 128)) : W("", !0), I(e.$slots, "loadingicon", {}, function() { + return [U(o, G({ spin: "", class: "p-virtualscroller-loading-icon" }, e.ptm("loadingIcon")), null, 16)]; - })], 16)) : U("", !0) - ], 16, vm)); + })], 16)) : W("", !0) + ], 16, wm)); } -_m.render = ym; +Cm.render = Tm; // node_modules/primevue/select/style/index.mjs -var bm = X.extend({ +var Em = X.extend({ name: "select", style: "\n .p-select {\n display: inline-flex;\n cursor: pointer;\n position: relative;\n user-select: none;\n background: dt('select.background');\n border: 1px solid dt('select.border.color');\n transition:\n background dt('select.transition.duration'),\n color dt('select.transition.duration'),\n border-color dt('select.transition.duration'),\n outline-color dt('select.transition.duration'),\n box-shadow dt('select.transition.duration');\n border-radius: dt('select.border.radius');\n outline-color: transparent;\n box-shadow: dt('select.shadow');\n }\n\n .p-select:not(.p-disabled):hover {\n border-color: dt('select.hover.border.color');\n }\n\n .p-select:not(.p-disabled).p-focus {\n border-color: dt('select.focus.border.color');\n box-shadow: dt('select.focus.ring.shadow');\n outline: dt('select.focus.ring.width') dt('select.focus.ring.style') dt('select.focus.ring.color');\n outline-offset: dt('select.focus.ring.offset');\n }\n\n .p-select.p-variant-filled {\n background: dt('select.filled.background');\n }\n\n .p-select.p-variant-filled:not(.p-disabled):hover {\n background: dt('select.filled.hover.background');\n }\n\n .p-select.p-variant-filled:not(.p-disabled).p-focus {\n background: dt('select.filled.focus.background');\n }\n\n .p-select.p-invalid {\n border-color: dt('select.invalid.border.color');\n }\n\n .p-select.p-disabled {\n opacity: 1;\n background: dt('select.disabled.background');\n }\n\n .p-select-clear-icon {\n align-self: center;\n color: dt('select.clear.icon.color');\n inset-inline-end: dt('select.dropdown.width');\n }\n\n .p-select-dropdown {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: transparent;\n color: dt('select.dropdown.color');\n width: dt('select.dropdown.width');\n border-start-end-radius: dt('select.border.radius');\n border-end-end-radius: dt('select.border.radius');\n }\n\n .p-select-label {\n display: block;\n white-space: nowrap;\n overflow: hidden;\n flex: 1 1 auto;\n width: 1%;\n padding: dt('select.padding.y') dt('select.padding.x');\n text-overflow: ellipsis;\n cursor: pointer;\n color: dt('select.color');\n background: transparent;\n border: 0 none;\n outline: 0 none;\n font-size: 1rem;\n }\n\n .p-select-label.p-placeholder {\n color: dt('select.placeholder.color');\n }\n\n .p-select.p-invalid .p-select-label.p-placeholder {\n color: dt('select.invalid.placeholder.color');\n }\n\n .p-select.p-disabled .p-select-label {\n color: dt('select.disabled.color');\n }\n\n .p-select-label-empty {\n overflow: hidden;\n opacity: 0;\n }\n\n input.p-select-label {\n cursor: default;\n }\n\n .p-select-overlay {\n position: absolute;\n top: 0;\n left: 0;\n background: dt('select.overlay.background');\n color: dt('select.overlay.color');\n border: 1px solid dt('select.overlay.border.color');\n border-radius: dt('select.overlay.border.radius');\n box-shadow: dt('select.overlay.shadow');\n min-width: 100%;\n transform-origin: inherit;\n will-change: transform;\n }\n\n .p-select-header {\n padding: dt('select.list.header.padding');\n }\n\n .p-select-filter {\n width: 100%;\n }\n\n .p-select-list-container {\n overflow: auto;\n }\n\n .p-select-option-group {\n cursor: auto;\n margin: 0;\n padding: dt('select.option.group.padding');\n background: dt('select.option.group.background');\n color: dt('select.option.group.color');\n font-weight: dt('select.option.group.font.weight');\n }\n\n .p-select-list {\n margin: 0;\n padding: 0;\n list-style-type: none;\n padding: dt('select.list.padding');\n gap: dt('select.list.gap');\n display: flex;\n flex-direction: column;\n }\n\n .p-select-option {\n cursor: pointer;\n font-weight: normal;\n white-space: nowrap;\n position: relative;\n overflow: hidden;\n display: flex;\n align-items: center;\n padding: dt('select.option.padding');\n border: 0 none;\n color: dt('select.option.color');\n background: transparent;\n transition:\n background dt('select.transition.duration'),\n color dt('select.transition.duration'),\n border-color dt('select.transition.duration'),\n box-shadow dt('select.transition.duration'),\n outline-color dt('select.transition.duration');\n border-radius: dt('select.option.border.radius');\n }\n\n .p-select-option:not(.p-select-option-selected):not(.p-disabled).p-focus {\n background: dt('select.option.focus.background');\n color: dt('select.option.focus.color');\n }\n\n .p-select-option:not(.p-select-option-selected):not(.p-disabled):hover {\n background: dt('select.option.focus.background');\n color: dt('select.option.focus.color');\n }\n\n .p-select-option.p-select-option-selected {\n background: dt('select.option.selected.background');\n color: dt('select.option.selected.color');\n }\n\n .p-select-option.p-select-option-selected.p-focus {\n background: dt('select.option.selected.focus.background');\n color: dt('select.option.selected.focus.color');\n }\n \n .p-select-option-blank-icon {\n flex-shrink: 0;\n }\n\n .p-select-option-check-icon {\n position: relative;\n flex-shrink: 0;\n margin-inline-start: dt('select.checkmark.gutter.start');\n margin-inline-end: dt('select.checkmark.gutter.end');\n color: dt('select.checkmark.color');\n }\n\n .p-select-empty-message {\n padding: dt('select.empty.message.padding');\n }\n\n .p-select-fluid {\n display: flex;\n width: 100%;\n }\n\n .p-select-sm .p-select-label {\n font-size: dt('select.sm.font.size');\n padding-block: dt('select.sm.padding.y');\n padding-inline: dt('select.sm.padding.x');\n }\n\n .p-select-sm .p-select-dropdown .p-icon {\n font-size: dt('select.sm.font.size');\n width: dt('select.sm.font.size');\n height: dt('select.sm.font.size');\n }\n\n .p-select-lg .p-select-label {\n font-size: dt('select.lg.font.size');\n padding-block: dt('select.lg.padding.y');\n padding-inline: dt('select.lg.padding.x');\n }\n\n .p-select-lg .p-select-dropdown .p-icon {\n font-size: dt('select.lg.font.size');\n width: dt('select.lg.font.size');\n height: dt('select.lg.font.size');\n }\n\n .p-floatlabel-in .p-select-filter {\n padding-block-start: dt('select.padding.y');\n padding-block-end: dt('select.padding.y');\n }\n", classes: { @@ -8563,9 +8618,9 @@ var bm = X.extend({ optionBlankIcon: "p-select-option-blank-icon", emptyMessage: "p-select-empty-message" } -}), xm = { +}), Dm = { name: "BaseSelect", - extends: If, + extends: Hf, props: { options: Array, optionLabel: [String, Function], @@ -8731,7 +8786,7 @@ var bm = X.extend({ default: null } }, - style: bm, + style: Em, provide: function() { return { $pcSelect: this, @@ -8739,39 +8794,39 @@ var bm = X.extend({ }; } }; -function Sm(e) { +function Om(e) { "@babel/helpers - typeof"; - return Sm = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { + return Om = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { return typeof e; } : function(e) { return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; - }, Sm(e); + }, Om(e); } -function Cm(e) { - return Dm(e) || Em(e) || Tm(e) || wm(); +function km(e) { + return Nm(e) || Mm(e) || jm(e) || Am(); } -function wm() { +function Am() { throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function Tm(e, t) { +function jm(e, t) { if (e) { - if (typeof e == "string") return Om(e, t); + if (typeof e == "string") return Pm(e, t); var n = {}.toString.call(e).slice(8, -1); - return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? Om(e, t) : void 0; + return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? Pm(e, t) : void 0; } } -function Em(e) { +function Mm(e) { if (typeof Symbol < "u" && e[Symbol.iterator] != null || e["@@iterator"] != null) return Array.from(e); } -function Dm(e) { - if (Array.isArray(e)) return Om(e); +function Nm(e) { + if (Array.isArray(e)) return Pm(e); } -function Om(e, t) { +function Pm(e, t) { (t == null || t > e.length) && (t = e.length); for (var n = 0, r = Array(t); n < t; n++) r[n] = e[n]; return r; } -function km(e, t) { +function Fm(e, t) { var n = Object.keys(e); if (Object.getOwnPropertySymbols) { var r = Object.getOwnPropertySymbols(e); @@ -8781,42 +8836,42 @@ function km(e, t) { } return n; } -function Am(e) { +function Im(e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t] == null ? {} : arguments[t]; - t % 2 ? km(Object(n), !0).forEach(function(t) { - jm(e, t, n[t]); - }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : km(Object(n)).forEach(function(t) { + t % 2 ? Fm(Object(n), !0).forEach(function(t) { + Lm(e, t, n[t]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : Fm(Object(n)).forEach(function(t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t)); }); } return e; } -function jm(e, t, n) { - return (t = Mm(t)) in e ? Object.defineProperty(e, t, { +function Lm(e, t, n) { + return (t = Rm(t)) in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e; } -function Mm(e) { - var t = Nm(e, "string"); - return Sm(t) == "symbol" ? t : t + ""; +function Rm(e) { + var t = zm(e, "string"); + return Om(t) == "symbol" ? t : t + ""; } -function Nm(e, t) { - if (Sm(e) != "object" || !e) return e; +function zm(e, t) { + if (Om(e) != "object" || !e) return e; var n = e[Symbol.toPrimitive]; if (n !== void 0) { var r = n.call(e, t); - if (Sm(r) != "object") return r; + if (Om(r) != "object") return r; throw TypeError("@@toPrimitive must return a primitive value."); } return (t === "string" ? String : Number)(e); } -var Pm = { +var Bm = { name: "Select", - extends: xm, + extends: Dm, inheritAttrs: !1, emits: [ "change", @@ -8864,20 +8919,20 @@ var Pm = { this.overlayVisible && this.isModelValueChanged && this.scrollInView(this.findSelectedOptionIndex()), this.isModelValueChanged = !1; }, beforeUnmount: function() { - this.unbindOutsideClickListener(), this.unbindResizeListener(), this.unbindLabelClickListener(), this.unbindMatchMediaOrientationListener(), this.scrollHandler &&= (this.scrollHandler.destroy(), null), this.overlay &&= (gl.clear(this.overlay), null); + this.unbindOutsideClickListener(), this.unbindResizeListener(), this.unbindLabelClickListener(), this.unbindMatchMediaOrientationListener(), this.scrollHandler &&= (this.scrollHandler.destroy(), null), this.overlay &&= (Sl.clear(this.overlay), null); }, methods: { getOptionIndex: function(e, t) { return this.virtualScrollerDisabled ? e : t && t(e).index; }, getOptionLabel: function(e) { - return this.optionLabel ? oc(e, this.optionLabel) : e; + return this.optionLabel ? fc(e, this.optionLabel) : e; }, getOptionValue: function(e) { - return this.optionValue ? oc(e, this.optionValue) : e; + return this.optionValue ? fc(e, this.optionValue) : e; }, getOptionRenderKey: function(e, t) { - return (this.dataKey ? oc(e, this.dataKey) : this.getOptionLabel(e)) + "_" + t; + return (this.dataKey ? fc(e, this.dataKey) : this.getOptionLabel(e)) + "_" + t; }, getPTItemOptions: function(e, t, n, r) { return this.ptm(r, { context: { @@ -8889,16 +8944,16 @@ var Pm = { } }); }, isOptionDisabled: function(e) { - return this.optionDisabled ? oc(e, this.optionDisabled) : !1; + return this.optionDisabled ? fc(e, this.optionDisabled) : !1; }, isOptionGroup: function(e) { return this.optionGroupLabel && e.optionGroup && e.group; }, getOptionGroupLabel: function(e) { - return oc(e, this.optionGroupLabel); + return fc(e, this.optionGroupLabel); }, getOptionGroupChildren: function(e) { - return oc(e, this.optionGroupChildren); + return fc(e, this.optionGroupChildren); }, getAriaPosInset: function(e) { var t = this; @@ -8931,7 +8986,7 @@ var Pm = { var t = this; if (this.disabled) e.preventDefault(); else { - if (sl()) switch (e.code) { + if (pl()) switch (e.code) { case "Backspace": this.onBackspaceKey(e, this.editable); break; @@ -8985,7 +9040,7 @@ var Pm = { break; case "ShiftLeft": case "ShiftRight": break; - default: !n && yc(e.key) && (!this.overlayVisible && this.show(), !this.editable && this.searchOptions(e, e.key), this.filter && this.$nextTick(function() { + default: !n && Tc(e.key) && (!this.overlayVisible && this.show(), !this.editable && this.searchOptions(e, e.key), this.filter && this.$nextTick(function() { t.$refs.filterInput && J(t.$refs.filterInput.$el); })); } @@ -9003,10 +9058,10 @@ var Pm = { this.updateModel(e, null), this.resetFilterOnClear && (this.filterValue = null); }, onFirstHiddenFocus: function(e) { - J(e.relatedTarget === this.$refs.focusInput ? $c(this.overlay, ":not([data-p-hidden-focusable=\"true\"])") : this.$refs.focusInput); + J(e.relatedTarget === this.$refs.focusInput ? al(this.overlay, ":not([data-p-hidden-focusable=\"true\"])") : this.$refs.focusInput); }, onLastHiddenFocus: function(e) { - J(e.relatedTarget === this.$refs.focusInput ? tl(this.overlay, ":not([data-p-hidden-focusable=\"true\"])") : this.$refs.focusInput); + J(e.relatedTarget === this.$refs.focusInput ? sl(this.overlay, ":not([data-p-hidden-focusable=\"true\"])") : this.$refs.focusInput); }, onOptionSelect: function(e, t) { var n = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : !0; @@ -9060,7 +9115,7 @@ var Pm = { this.overlayVisible && this.alignOverlay(); }, onOverlayClick: function(e) { - om.emit("overlay-click", { + fm.emit("overlay-click", { originalEvent: e, target: this.$el }); @@ -9128,7 +9183,7 @@ var Pm = { }, onOverlayEnter: function(e) { var t = this; - gl.set("overlay", e, this.$primevue.config.zIndex.overlay), Vc(e, { + Sl.set("overlay", e, this.$primevue.config.zIndex.overlay), qc(e, { position: "absolute", top: "0" }), this.alignOverlay(), this.scrollInView(), this.$attrSelector && e.setAttribute(this.$attrSelector, ""), setTimeout(function() { @@ -9145,10 +9200,10 @@ var Pm = { }), this.$emit("hide"), this.overlay = null; }, onOverlayAfterLeave: function(e) { - gl.clear(e); + Sl.clear(e); }, alignOverlay: function() { - this.appendTo === "self" ? Uc(this.overlay, this.$el) : this.overlay && (this.overlay.style.minWidth = Hc(this.$el) + "px", Bc(this.overlay, this.$el)); + this.appendTo === "self" ? Yc(this.overlay, this.$el) : this.overlay && (this.overlay.style.minWidth = Jc(this.$el) + "px", Kc(this.overlay, this.$el)); }, bindOutsideClickListener: function() { var e = this; @@ -9162,7 +9217,7 @@ var Pm = { }, bindScrollListener: function() { var e = this; - this.scrollHandler ||= new Cp(this.$refs.container, function() { + this.scrollHandler ||= new kp(this.$refs.container, function() { e.overlayVisible && e.hide(); }), this.scrollHandler.bindScrollListener(); }, @@ -9172,7 +9227,7 @@ var Pm = { bindResizeListener: function() { var e = this; this.resizeListener || (this.resizeListener = function() { - e.overlayVisible && !dl() && e.hide(); + e.overlayVisible && !_l() && e.hide(); }, window.addEventListener("resize", this.resizeListener)); }, unbindResizeListener: function() { @@ -9182,7 +9237,7 @@ var Pm = { var e = this; if (!this.editable && !this.labelClickListener) { var t = document.querySelector(`label[for="${this.labelId}"]`); - t && ul(t) && (this.labelClickListener = function() { + t && gl(t) && (this.labelClickListener = function() { J(e.$refs.focusInput); }, t.addEventListener("click", this.labelClickListener)); } @@ -9190,7 +9245,7 @@ var Pm = { unbindLabelClickListener: function() { if (this.labelClickListener) { var e = document.querySelector(`label[for="${this.labelId}"]`); - e && ul(e) && e.removeEventListener("click", this.labelClickListener); + e && gl(e) && e.removeEventListener("click", this.labelClickListener); } }, bindMatchMediaOrientationListener: function() { @@ -9206,7 +9261,7 @@ var Pm = { this.matchMediaOrientationListener &&= (this.queryOrientation.removeEventListener("change", this.matchMediaOrientationListener), this.queryOrientation = null, null); }, hasFocusableElements: function() { - return Qc(this.overlay, ":not([data-p-hidden-focusable=\"true\"])").length > 0; + return il(this.overlay, ":not([data-p-hidden-focusable=\"true\"])").length > 0; }, isOptionExactMatched: function(e) { return this.isValidOption(e) && typeof this.getOptionLabel(e) == "string" && this.getOptionLabel(e)?.toLocaleLowerCase(this.filterLocale) == this.searchValue.toLocaleLowerCase(this.filterLocale); @@ -9221,7 +9276,7 @@ var Pm = { return this.isValidOption(e) && this.isSelected(e); }, isSelected: function(e) { - return sc(this.d_value, this.getOptionValue(e), this.equalityKey); + return pc(this.d_value, this.getOptionValue(e), this.equalityKey); }, findFirstOptionIndex: function() { var e = this; @@ -9231,7 +9286,7 @@ var Pm = { }, findLastOptionIndex: function() { var e = this; - return fc(this.visibleOptions, function(t) { + return vc(this.visibleOptions, function(t) { return e.isValidOption(t); }); }, @@ -9242,7 +9297,7 @@ var Pm = { return n > -1 ? n + e + 1 : e; }, findPrevOptionIndex: function(e) { - var t = this, n = e > 0 ? fc(this.visibleOptions.slice(0, e), function(e) { + var t = this, n = e > 0 ? vc(this.visibleOptions.slice(0, e), function(e) { return t.isValidOption(e); }) : -1; return n > -1 ? n : e; @@ -9279,7 +9334,7 @@ var Pm = { scrollInView: function() { var e = this, t = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : -1; this.$nextTick(function() { - var n = t === -1 ? e.focusedOptionId : `${e.$id}_${t}`, r = Xc(e.list, `li[id="${n}"]`); + var n = t === -1 ? e.focusedOptionId : `${e.$id}_${t}`, r = nl(e.list, `li[id="${n}"]`); r ? r.scrollIntoView && r.scrollIntoView({ block: "nearest", inline: "nearest" @@ -9323,14 +9378,14 @@ var Pm = { visibleOptions: function() { var e = this, t = this.optionGroupLabel ? this.flatOptions(this.options) : this.options || []; if (this.filterValue) { - var n = Zl.filter(t, this.searchFields, this.filterValue, this.filterMatchMode, this.filterLocale); + var n = ru.filter(t, this.searchFields, this.filterValue, this.filterMatchMode, this.filterLocale); if (this.optionGroupLabel) { var r = this.options || [], i = []; return r.forEach(function(t) { var r = e.getOptionGroupChildren(t).filter(function(e) { return n.includes(e); }); - r.length > 0 && i.push(Am(Am({}, t), {}, jm({}, typeof e.optionGroupChildren == "string" ? e.optionGroupChildren : "items", Cm(r)))); + r.length > 0 && i.push(Im(Im({}, t), {}, Lm({}, typeof e.optionGroupChildren == "string" ? e.optionGroupChildren : "items", km(r)))); }), this.flatOptions(i); } return n; @@ -9391,7 +9446,7 @@ var Pm = { return !this.virtualScrollerOptions; }, containerDataP: function() { - return q(jm({ + return q(Lm({ invalid: this.$invalid, disabled: this.disabled, focus: this.focused, @@ -9400,7 +9455,7 @@ var Pm = { }, this.size, this.size)); }, labelDataP: function() { - return q(jm(jm({ + return q(Lm(Lm({ placeholder: !this.editable && this.label === this.placeholder, clearable: this.showClear, disabled: this.disabled, @@ -9408,27 +9463,27 @@ var Pm = { }, this.size, this.size), "empty", !this.editable && !this.$slots.value && (this.label === "p-emptylabel" || this.label.length === 0))); }, dropdownIconDataP: function() { - return q(jm({}, this.size, this.size)); + return q(Lm({}, this.size, this.size)); }, overlayDataP: function() { - return q(jm({}, "portal-" + this.appendTo, "portal-" + this.appendTo)); + return q(Lm({}, "portal-" + this.appendTo, "portal-" + this.appendTo)); } }, - directives: { ripple: nf }, + directives: { ripple: lf }, components: { - InputText: ap, - VirtualScroller: _m, - Portal: sm, - InputIcon: im, - IconField: nm, - TimesIcon: Jp, - ChevronDownIcon: Mp, - SpinnerIcon: gd, - SearchIcon: Bp, - CheckIcon: yf, - BlankIcon: wp + InputText: dp, + VirtualScroller: Cm, + Portal: pm, + InputIcon: um, + IconField: cm, + TimesIcon: em, + ChevronDownIcon: Rp, + SpinnerIcon: Sd, + SearchIcon: Kp, + CheckIcon: Tf, + BlankIcon: Ap } -}, Fm = ["id", "data-p"], Im = [ +}, Vm = ["id", "data-p"], Hm = [ "name", "id", "value", @@ -9442,7 +9497,7 @@ var Pm = { "aria-activedescendant", "aria-invalid", "data-p" -], Lm = [ +], Um = [ "name", "id", "tabindex", @@ -9454,7 +9509,7 @@ var Pm = { "aria-invalid", "aria-disabled", "data-p" -], Rm = ["data-p"], zm = ["id"], Bm = ["id"], Vm = [ +], Wm = ["data-p"], Gm = ["id"], Km = ["id"], qm = [ "id", "aria-label", "aria-selected", @@ -9467,9 +9522,9 @@ var Pm = { "data-p-focused", "data-p-disabled" ]; -function Hm(e, t, n, r, i, a) { - var o = F("SpinnerIcon"), s = F("InputText"), c = F("SearchIcon"), l = F("InputIcon"), u = F("IconField"), d = F("CheckIcon"), f = F("BlankIcon"), p = F("VirtualScroller"), m = F("Portal"), h = di("ripple"); - return R(), z("div", W({ +function Jm(e, t, n, r, i, a) { + var o = F("SpinnerIcon"), s = F("InputText"), c = F("SearchIcon"), l = F("InputIcon"), u = F("IconField"), d = F("CheckIcon"), f = F("BlankIcon"), p = F("VirtualScroller"), m = F("Portal"), h = mi("ripple"); + return z(), B("div", G({ ref: "container", id: e.$id, class: e.cx("root"), @@ -9478,7 +9533,7 @@ function Hm(e, t, n, r, i, a) { }, "data-p": a.containerDataP }, e.ptmi("root")), [ - e.editable ? (R(), z("input", W({ + e.editable ? (z(), B("input", G({ key: 0, ref: "focusInput", name: e.name, @@ -9516,7 +9571,7 @@ function Hm(e, t, n, r, i, a) { return a.onEditableInput && a.onEditableInput.apply(a, arguments); }, "data-p": a.labelDataP - }, e.ptm("label")), null, 16, Im)) : (R(), z("span", W({ + }, e.ptm("label")), null, 16, Hm)) : (z(), B("span", G({ key: 1, ref: "focusInput", name: e.name, @@ -9551,24 +9606,24 @@ function Hm(e, t, n, r, i, a) { value: e.d_value, placeholder: e.placeholder }, function() { - return [qa(O(a.label === "p-emptylabel" ? "\xA0" : a.label ?? "empty"), 1)]; - })], 16, Lm)), + return [Za(k(a.label === "p-emptylabel" ? "\xA0" : a.label ?? "empty"), 1)]; + })], 16, Um)), a.isClearIconVisible ? I(e.$slots, "clearicon", { key: 2, - class: D(e.cx("clearIcon")), + class: O(e.cx("clearIcon")), clearCallback: a.onClearClick }, function() { - return [(R(), B(ui(e.clearIcon ? "i" : "TimesIcon"), W({ + return [(z(), V(pi(e.clearIcon ? "i" : "TimesIcon"), G({ ref: "clearIcon", class: [e.cx("clearIcon"), e.clearIcon], onClick: a.onClearClick }, e.ptm("clearIcon"), { "data-pc-section": "clearicon" }), null, 16, ["class", "onClick"]))]; - }) : U("", !0), - V("div", W({ class: e.cx("dropdown") }, e.ptm("dropdown")), [e.loading ? I(e.$slots, "loadingicon", { + }) : W("", !0), + H("div", G({ class: e.cx("dropdown") }, e.ptm("dropdown")), [e.loading ? I(e.$slots, "loadingicon", { key: 0, - class: D(e.cx("loadingIcon")) + class: O(e.cx("loadingIcon")) }, function() { - return [e.loadingIcon ? (R(), z("span", W({ + return [e.loadingIcon ? (z(), B("span", G({ key: 0, class: [ e.cx("loadingIcon"), @@ -9576,7 +9631,7 @@ function Hm(e, t, n, r, i, a) { e.loadingIcon ], "aria-hidden": "true" - }, e.ptm("loadingIcon")), null, 16)) : (R(), B(o, W({ + }, e.ptm("loadingIcon")), null, 16)) : (z(), V(o, G({ key: 1, class: e.cx("loadingIcon"), spin: "", @@ -9584,17 +9639,17 @@ function Hm(e, t, n, r, i, a) { }, e.ptm("loadingIcon")), null, 16, ["class"]))]; }) : I(e.$slots, "dropdownicon", { key: 1, - class: D(e.cx("dropdownIcon")) + class: O(e.cx("dropdownIcon")) }, function() { - return [(R(), B(ui(e.dropdownIcon ? "span" : "ChevronDownIcon"), W({ + return [(z(), V(pi(e.dropdownIcon ? "span" : "ChevronDownIcon"), G({ class: [e.cx("dropdownIcon"), e.dropdownIcon], "aria-hidden": "true", "data-p": a.dropdownIconDataP }, e.ptm("dropdownIcon")), null, 16, ["class", "data-p"]))]; })], 16), - H(m, { appendTo: e.appendTo }, { + U(m, { appendTo: e.appendTo }, { default: P(function() { - return [H(Fo, W({ + return [U(Vo, G({ name: "p-anchored-overlay", onEnter: a.onOverlayEnter, onAfterEnter: a.onOverlayAfterEnter, @@ -9602,7 +9657,7 @@ function Hm(e, t, n, r, i, a) { onAfterLeave: a.onOverlayAfterLeave }, e.ptm("transition")), { default: P(function() { - return [i.overlayVisible ? (R(), z("div", W({ + return [i.overlayVisible ? (z(), B("div", G({ key: 0, ref: a.overlayRef, class: [ @@ -9619,7 +9674,7 @@ function Hm(e, t, n, r, i, a) { }, "data-p": a.overlayDataP }, e.ptm("overlay")), [ - V("span", W({ + H("span", G({ ref: "firstHiddenFocusableElementOnOverlay", role: "presentation", "aria-hidden": "true", @@ -9636,21 +9691,21 @@ function Hm(e, t, n, r, i, a) { value: e.d_value, options: a.visibleOptions }), - e.filter ? (R(), z("div", W({ + e.filter ? (z(), B("div", G({ key: 0, class: e.cx("header") - }, e.ptm("header")), [H(u, { + }, e.ptm("header")), [U(u, { unstyled: e.unstyled, pt: e.ptm("pcFilterContainer") }, { default: P(function() { - return [H(s, { + return [U(s, { ref: "filterInput", type: "text", value: i.filterValue, onVnodeMounted: a.onFilterUpdated, onVnodeUpdated: a.onFilterUpdated, - class: D(e.cx("pcFilter")), + class: O(e.cx("pcFilter")), placeholder: e.filterPlaceholder, variant: e.variant, unstyled: e.unstyled, @@ -9677,40 +9732,40 @@ function Hm(e, t, n, r, i, a) { "onBlur", "onInput", "pt" - ]), H(l, { + ]), U(l, { unstyled: e.unstyled, pt: e.ptm("pcFilterIconContainer") }, { default: P(function() { return [I(e.$slots, "filtericon", {}, function() { - return [e.filterIcon ? (R(), z("span", W({ + return [e.filterIcon ? (z(), B("span", G({ key: 0, class: e.filterIcon - }, e.ptm("filterIcon")), null, 16)) : (R(), B(c, ve(W({ key: 1 }, e.ptm("filterIcon"))), null, 16))]; + }, e.ptm("filterIcon")), null, 16)) : (z(), V(c, _e(G({ key: 1 }, e.ptm("filterIcon"))), null, 16))]; })]; }), _: 3 }, 8, ["unstyled", "pt"])]; }), _: 3 - }, 8, ["unstyled", "pt"]), V("span", W({ + }, 8, ["unstyled", "pt"]), H("span", G({ role: "status", "aria-live": "polite", class: "p-hidden-accessible" - }, e.ptm("hiddenFilterResult"), { "data-p-hidden-accessible": !0 }), O(a.filterResultMessageText), 17)], 16)) : U("", !0), - V("div", W({ + }, e.ptm("hiddenFilterResult"), { "data-p-hidden-accessible": !0 }), k(a.filterResultMessageText), 17)], 16)) : W("", !0), + H("div", G({ class: e.cx("listContainer"), style: { "max-height": a.virtualScrollerDisabled ? e.scrollHeight : "" } - }, e.ptm("listContainer")), [H(p, W({ ref: a.virtualScrollerRef }, e.virtualScrollerOptions, { + }, e.ptm("listContainer")), [U(p, G({ ref: a.virtualScrollerRef }, e.virtualScrollerOptions, { items: a.visibleOptions, style: { height: e.scrollHeight }, tabindex: -1, disabled: a.virtualScrollerDisabled, pt: e.ptm("virtualScroller") - }), hi({ + }), vi({ content: P(function(n) { var r = n.styleClass, o = n.contentRef, s = n.items, c = n.getItemOptions, l = n.contentStyle, u = n.itemSize; - return [V("ul", W({ + return [H("ul", G({ ref: function(e) { return a.listRef(e, o); }, @@ -9718,8 +9773,8 @@ function Hm(e, t, n, r, i, a) { class: [e.cx("list"), r], style: l, role: "listbox" - }, e.ptm("list")), [(R(!0), z(L, null, mi(s, function(n, r) { - return R(), z(L, { key: a.getOptionRenderKey(n, a.getOptionIndex(r, c)) }, [a.isOptionGroup(n) ? (R(), z("li", W({ + }, e.ptm("list")), [(z(!0), B(L, null, _i(s, function(n, r) { + return z(), B(L, { key: a.getOptionRenderKey(n, a.getOptionIndex(r, c)) }, [a.isOptionGroup(n) ? (z(), B("li", G({ key: 0, id: e.$id + "_" + a.getOptionIndex(r, c), style: { height: u ? u + "px" : void 0 }, @@ -9729,8 +9784,8 @@ function Hm(e, t, n, r, i, a) { option: n.optionGroup, index: a.getOptionIndex(r, c) }, function() { - return [V("span", W({ class: e.cx("optionGroupLabel") }, { ref_for: !0 }, e.ptm("optionGroupLabel")), O(a.getOptionGroupLabel(n.optionGroup)), 17)]; - })], 16, Bm)) : Gn((R(), z("li", W({ + return [H("span", G({ class: e.cx("optionGroupLabel") }, { ref_for: !0 }, e.ptm("optionGroupLabel")), k(a.getOptionGroupLabel(n.optionGroup)), 17)]; + })], 16, Km)) : qn((z(), B("li", G({ key: 1, id: e.$id + "_" + a.getOptionIndex(r, c), class: e.cx("option", { @@ -9750,36 +9805,36 @@ function Hm(e, t, n, r, i, a) { onMousemove: function(e) { return a.onOptionMouseMove(e, a.getOptionIndex(r, c)); }, - onClick: t[8] ||= Vs(function() {}, ["stop"]), + onClick: t[8] ||= qs(function() {}, ["stop"]), "data-p-selected": !e.checkmark && a.isSelected(n), "data-p-focused": i.focusedOptionIndex === a.getOptionIndex(r, c), "data-p-disabled": a.isOptionDisabled(n) - }, { ref_for: !0 }, a.getPTItemOptions(n, c, r, "option")), [e.checkmark ? (R(), z(L, { key: 0 }, [a.isSelected(n) ? (R(), B(d, W({ + }, { ref_for: !0 }, a.getPTItemOptions(n, c, r, "option")), [e.checkmark ? (z(), B(L, { key: 0 }, [a.isSelected(n) ? (z(), V(d, G({ key: 0, class: e.cx("optionCheckIcon") - }, { ref_for: !0 }, e.ptm("optionCheckIcon")), null, 16, ["class"])) : (R(), B(f, W({ + }, { ref_for: !0 }, e.ptm("optionCheckIcon")), null, 16, ["class"])) : (z(), V(f, G({ key: 1, class: e.cx("optionBlankIcon") - }, { ref_for: !0 }, e.ptm("optionBlankIcon")), null, 16, ["class"]))], 64)) : U("", !0), I(e.$slots, "option", { + }, { ref_for: !0 }, e.ptm("optionBlankIcon")), null, 16, ["class"]))], 64)) : W("", !0), I(e.$slots, "option", { option: n, selected: a.isSelected(n), index: a.getOptionIndex(r, c) }, function() { - return [V("span", W({ class: e.cx("optionLabel") }, { ref_for: !0 }, e.ptm("optionLabel")), O(a.getOptionLabel(n)), 17)]; - })], 16, Vm)), [[h]])], 64); - }), 128)), i.filterValue && (!s || s && s.length === 0) ? (R(), z("li", W({ + return [H("span", G({ class: e.cx("optionLabel") }, { ref_for: !0 }, e.ptm("optionLabel")), k(a.getOptionLabel(n)), 17)]; + })], 16, qm)), [[h]])], 64); + }), 128)), i.filterValue && (!s || s && s.length === 0) ? (z(), B("li", G({ key: 0, class: e.cx("emptyMessage"), role: "option" }, e.ptm("emptyMessage"), { "data-p-hidden-accessible": !0 }), [I(e.$slots, "emptyfilter", {}, function() { - return [qa(O(a.emptyFilterMessageText), 1)]; - })], 16)) : !e.options || e.options && e.options.length === 0 ? (R(), z("li", W({ + return [Za(k(a.emptyFilterMessageText), 1)]; + })], 16)) : !e.options || e.options && e.options.length === 0 ? (z(), B("li", G({ key: 1, class: e.cx("emptyMessage"), role: "option" }, e.ptm("emptyMessage"), { "data-p-hidden-accessible": !0 }), [I(e.$slots, "empty", {}, function() { - return [qa(O(a.emptyMessageText), 1)]; - })], 16)) : U("", !0)], 16, zm)]; + return [Za(k(a.emptyMessageText), 1)]; + })], 16)) : W("", !0)], 16, Gm)]; }), _: 2 }, [e.$slots.loader ? { @@ -9799,18 +9854,18 @@ function Hm(e, t, n, r, i, a) { value: e.d_value, options: a.visibleOptions }), - !e.options || e.options && e.options.length === 0 ? (R(), z("span", W({ + !e.options || e.options && e.options.length === 0 ? (z(), B("span", G({ key: 1, role: "status", "aria-live": "polite", class: "p-hidden-accessible" - }, e.ptm("hiddenEmptyMessage"), { "data-p-hidden-accessible": !0 }), O(a.emptyMessageText), 17)) : U("", !0), - V("span", W({ + }, e.ptm("hiddenEmptyMessage"), { "data-p-hidden-accessible": !0 }), k(a.emptyMessageText), 17)) : W("", !0), + H("span", G({ role: "status", "aria-live": "polite", class: "p-hidden-accessible" - }, e.ptm("hiddenSelectedMessage"), { "data-p-hidden-accessible": !0 }), O(a.selectedMessageText), 17), - V("span", W({ + }, e.ptm("hiddenSelectedMessage"), { "data-p-hidden-accessible": !0 }), k(a.selectedMessageText), 17), + H("span", G({ ref: "lastHiddenFocusableElementOnOverlay", role: "presentation", "aria-hidden": "true", @@ -9823,7 +9878,7 @@ function Hm(e, t, n, r, i, a) { "data-p-hidden-accessible": !0, "data-p-hidden-focusable": !0 }), null, 16) - ], 16, Rm)) : U("", !0)]; + ], 16, Wm)) : W("", !0)]; }), _: 3 }, 16, [ @@ -9835,11 +9890,11 @@ function Hm(e, t, n, r, i, a) { }), _: 3 }, 8, ["appendTo"]) - ], 16, Fm); + ], 16, Vm); } -Pm.render = Hm; +Bm.render = Jm; // node_modules/primevue/togglebutton/style/index.mjs -var Um = X.extend({ +var Ym = X.extend({ name: "togglebutton", style: "\n .p-togglebutton {\n display: inline-flex;\n cursor: pointer;\n user-select: none;\n overflow: hidden;\n position: relative;\n color: dt('togglebutton.color');\n background: dt('togglebutton.background');\n border: 1px solid dt('togglebutton.border.color');\n padding: dt('togglebutton.padding');\n font-size: 1rem;\n font-family: inherit;\n font-feature-settings: inherit;\n transition:\n background dt('togglebutton.transition.duration'),\n color dt('togglebutton.transition.duration'),\n border-color dt('togglebutton.transition.duration'),\n outline-color dt('togglebutton.transition.duration'),\n box-shadow dt('togglebutton.transition.duration');\n border-radius: dt('togglebutton.border.radius');\n outline-color: transparent;\n font-weight: dt('togglebutton.font.weight');\n }\n\n .p-togglebutton-content {\n display: inline-flex;\n flex: 1 1 auto;\n align-items: center;\n justify-content: center;\n gap: dt('togglebutton.gap');\n padding: dt('togglebutton.content.padding');\n background: transparent;\n border-radius: dt('togglebutton.content.border.radius');\n transition:\n background dt('togglebutton.transition.duration'),\n color dt('togglebutton.transition.duration'),\n border-color dt('togglebutton.transition.duration'),\n outline-color dt('togglebutton.transition.duration'),\n box-shadow dt('togglebutton.transition.duration');\n }\n\n .p-togglebutton:not(:disabled):not(.p-togglebutton-checked):hover {\n background: dt('togglebutton.hover.background');\n color: dt('togglebutton.hover.color');\n }\n\n .p-togglebutton.p-togglebutton-checked {\n background: dt('togglebutton.checked.background');\n border-color: dt('togglebutton.checked.border.color');\n color: dt('togglebutton.checked.color');\n }\n\n .p-togglebutton-checked .p-togglebutton-content {\n background: dt('togglebutton.content.checked.background');\n box-shadow: dt('togglebutton.content.checked.shadow');\n }\n\n .p-togglebutton:focus-visible {\n box-shadow: dt('togglebutton.focus.ring.shadow');\n outline: dt('togglebutton.focus.ring.width') dt('togglebutton.focus.ring.style') dt('togglebutton.focus.ring.color');\n outline-offset: dt('togglebutton.focus.ring.offset');\n }\n\n .p-togglebutton.p-invalid {\n border-color: dt('togglebutton.invalid.border.color');\n }\n\n .p-togglebutton:disabled {\n opacity: 1;\n cursor: default;\n background: dt('togglebutton.disabled.background');\n border-color: dt('togglebutton.disabled.border.color');\n color: dt('togglebutton.disabled.color');\n }\n\n .p-togglebutton-label,\n .p-togglebutton-icon {\n position: relative;\n transition: none;\n }\n\n .p-togglebutton-icon {\n color: dt('togglebutton.icon.color');\n }\n\n .p-togglebutton:not(:disabled):not(.p-togglebutton-checked):hover .p-togglebutton-icon {\n color: dt('togglebutton.icon.hover.color');\n }\n\n .p-togglebutton.p-togglebutton-checked .p-togglebutton-icon {\n color: dt('togglebutton.icon.checked.color');\n }\n\n .p-togglebutton:disabled .p-togglebutton-icon {\n color: dt('togglebutton.icon.disabled.color');\n }\n\n .p-togglebutton-sm {\n padding: dt('togglebutton.sm.padding');\n font-size: dt('togglebutton.sm.font.size');\n }\n\n .p-togglebutton-sm .p-togglebutton-content {\n padding: dt('togglebutton.content.sm.padding');\n }\n\n .p-togglebutton-lg {\n padding: dt('togglebutton.lg.padding');\n font-size: dt('togglebutton.lg.font.size');\n }\n\n .p-togglebutton-lg .p-togglebutton-content {\n padding: dt('togglebutton.content.lg.padding');\n }\n\n .p-togglebutton-fluid {\n width: 100%;\n }\n", classes: { @@ -9857,9 +9912,9 @@ var Um = X.extend({ icon: "p-togglebutton-icon", label: "p-togglebutton-label" } -}), Wm = { +}), Xm = { name: "BaseToggleButton", - extends: Ff, + extends: Vf, props: { onIcon: String, offIcon: String, @@ -9896,7 +9951,7 @@ var Um = X.extend({ default: null } }, - style: Um, + style: Ym, provide: function() { return { $pcToggleButton: this, @@ -9904,39 +9959,39 @@ var Um = X.extend({ }; } }; -function Gm(e) { +function Zm(e) { "@babel/helpers - typeof"; - return Gm = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { + return Zm = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { return typeof e; } : function(e) { return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; - }, Gm(e); + }, Zm(e); } -function Km(e, t, n) { - return (t = qm(t)) in e ? Object.defineProperty(e, t, { +function Qm(e, t, n) { + return (t = $m(t)) in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e; } -function qm(e) { - var t = Jm(e, "string"); - return Gm(t) == "symbol" ? t : t + ""; +function $m(e) { + var t = eh(e, "string"); + return Zm(t) == "symbol" ? t : t + ""; } -function Jm(e, t) { - if (Gm(e) != "object" || !e) return e; +function eh(e, t) { + if (Zm(e) != "object" || !e) return e; var n = e[Symbol.toPrimitive]; if (n !== void 0) { var r = n.call(e, t); - if (Gm(r) != "object") return r; + if (Zm(r) != "object") return r; throw TypeError("@@toPrimitive must return a primitive value."); } return (t === "string" ? String : Number)(e); } -var Ym = { +var th = { name: "ToggleButton", - extends: Wm, + extends: Xm, inheritAttrs: !1, emits: ["change"], methods: { @@ -9965,14 +10020,14 @@ var Ym = { return this.hasLabel ? this.d_value ? this.onLabel : this.offLabel : "\xA0"; }, dataP: function() { - return q(Km({ + return q(Qm({ checked: this.active, invalid: this.$invalid }, this.size, this.size)); } }, - directives: { ripple: nf } -}, Xm = [ + directives: { ripple: lf } +}, nh = [ "tabindex", "disabled", "aria-pressed", @@ -9981,10 +10036,10 @@ var Ym = { "data-p-checked", "data-p-disabled", "data-p" -], Zm = ["data-p"]; -function Qm(e, t, n, r, i, a) { - var o = di("ripple"); - return Gn((R(), z("button", W({ +], rh = ["data-p"]; +function ih(e, t, n, r, i, a) { + var o = mi("ripple"); + return qn((z(), B("button", G({ type: "button", class: e.cx("root"), tabindex: e.tabindex, @@ -10002,21 +10057,21 @@ function Qm(e, t, n, r, i, a) { "data-p-checked": a.active, "data-p-disabled": e.disabled, "data-p": a.dataP - }), [V("span", W({ class: e.cx("content") }, a.getPTOptions("content"), { "data-p": a.dataP }), [I(e.$slots, "default", {}, function() { + }), [H("span", G({ class: e.cx("content") }, a.getPTOptions("content"), { "data-p": a.dataP }), [I(e.$slots, "default", {}, function() { return [I(e.$slots, "icon", { value: e.d_value, - class: D(e.cx("icon")) + class: O(e.cx("icon")) }, function() { - return [e.onIcon || e.offIcon ? (R(), z("span", W({ + return [e.onIcon || e.offIcon ? (z(), B("span", G({ key: 0, class: [e.cx("icon"), e.d_value ? e.onIcon : e.offIcon] - }, a.getPTOptions("icon")), null, 16)) : U("", !0)]; - }), V("span", W({ class: e.cx("label") }, a.getPTOptions("label")), O(a.label), 17)]; - })], 16, Zm)], 16, Xm)), [[o]]); + }, a.getPTOptions("icon")), null, 16)) : W("", !0)]; + }), H("span", G({ class: e.cx("label") }, a.getPTOptions("label")), k(a.label), 17)]; + })], 16, rh)], 16, nh)), [[o]]); } -Ym.render = Qm; +th.render = ih; // node_modules/primevue/tag/style/index.mjs -var $m = X.extend({ +var ah = X.extend({ name: "tag", style: "\n .p-tag {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: dt('tag.primary.background');\n color: dt('tag.primary.color');\n font-size: dt('tag.font.size');\n font-weight: dt('tag.font.weight');\n padding: dt('tag.padding');\n border-radius: dt('tag.border.radius');\n gap: dt('tag.gap');\n }\n\n .p-tag-icon {\n font-size: dt('tag.icon.size');\n width: dt('tag.icon.size');\n height: dt('tag.icon.size');\n }\n\n .p-tag-rounded {\n border-radius: dt('tag.rounded.border.radius');\n }\n\n .p-tag-success {\n background: dt('tag.success.background');\n color: dt('tag.success.color');\n }\n\n .p-tag-info {\n background: dt('tag.info.background');\n color: dt('tag.info.color');\n }\n\n .p-tag-warn {\n background: dt('tag.warn.background');\n color: dt('tag.warn.color');\n }\n\n .p-tag-danger {\n background: dt('tag.danger.background');\n color: dt('tag.danger.color');\n }\n\n .p-tag-secondary {\n background: dt('tag.secondary.background');\n color: dt('tag.secondary.color');\n }\n\n .p-tag-contrast {\n background: dt('tag.contrast.background');\n color: dt('tag.contrast.color');\n }\n", classes: { @@ -10035,16 +10090,16 @@ var $m = X.extend({ icon: "p-tag-icon", label: "p-tag-label" } -}), eh = { +}), oh = { name: "BaseTag", - extends: sd, + extends: pd, props: { value: null, severity: null, rounded: Boolean, icon: String }, - style: $m, + style: ah, provide: function() { return { $pcTag: this, @@ -10052,158 +10107,158 @@ var $m = X.extend({ }; } }; -function th(e) { +function sh(e) { "@babel/helpers - typeof"; - return th = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { + return sh = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { return typeof e; } : function(e) { return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; - }, th(e); + }, sh(e); } -function nh(e, t, n) { - return (t = rh(t)) in e ? Object.defineProperty(e, t, { +function ch(e, t, n) { + return (t = lh(t)) in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e; } -function rh(e) { - var t = ih(e, "string"); - return th(t) == "symbol" ? t : t + ""; +function lh(e) { + var t = uh(e, "string"); + return sh(t) == "symbol" ? t : t + ""; } -function ih(e, t) { - if (th(e) != "object" || !e) return e; +function uh(e, t) { + if (sh(e) != "object" || !e) return e; var n = e[Symbol.toPrimitive]; if (n !== void 0) { var r = n.call(e, t); - if (th(r) != "object") return r; + if (sh(r) != "object") return r; throw TypeError("@@toPrimitive must return a primitive value."); } return (t === "string" ? String : Number)(e); } -var ah = { +var dh = { name: "Tag", - extends: eh, + extends: oh, inheritAttrs: !1, computed: { dataP: function() { - return q(nh({ rounded: this.rounded }, this.severity, this.severity)); + return q(ch({ rounded: this.rounded }, this.severity, this.severity)); } } -}, oh = ["data-p"]; -function sh(e, t, n, r, i, a) { - return R(), z("span", W({ +}, fh = ["data-p"]; +function ph(e, t, n, r, i, a) { + return z(), B("span", G({ class: e.cx("root"), "data-p": a.dataP - }, e.ptmi("root")), [e.$slots.icon ? (R(), B(ui(e.$slots.icon), W({ + }, e.ptmi("root")), [e.$slots.icon ? (z(), V(pi(e.$slots.icon), G({ key: 0, class: e.cx("icon") - }, e.ptm("icon")), null, 16, ["class"])) : e.icon ? (R(), z("span", W({ + }, e.ptm("icon")), null, 16, ["class"])) : e.icon ? (z(), B("span", G({ key: 1, class: [e.cx("icon"), e.icon] - }, e.ptm("icon")), null, 16)) : U("", !0), e.value != null || e.$slots.default ? I(e.$slots, "default", { key: 2 }, function() { - return [V("span", W({ class: e.cx("label") }, e.ptm("label")), O(e.value), 17)]; - }) : U("", !0)], 16, oh); + }, e.ptm("icon")), null, 16)) : W("", !0), e.value != null || e.$slots.default ? I(e.$slots, "default", { key: 2 }, function() { + return [H("span", G({ class: e.cx("label") }, e.ptm("label")), k(e.value), 17)]; + }) : W("", !0)], 16, fh); } -ah.render = sh; +dh.render = ph; // node_modules/@primevue/icons/windowmaximize/index.mjs -var ch = { +var mh = { name: "WindowMaximizeIcon", - extends: hd + extends: xd }; -function lh(e) { - return ph(e) || fh(e) || dh(e) || uh(); +function hh(e) { + return yh(e) || vh(e) || _h(e) || gh(); } -function uh() { +function gh() { throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function dh(e, t) { +function _h(e, t) { if (e) { - if (typeof e == "string") return mh(e, t); + if (typeof e == "string") return bh(e, t); var n = {}.toString.call(e).slice(8, -1); - return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? mh(e, t) : void 0; + return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? bh(e, t) : void 0; } } -function fh(e) { +function vh(e) { if (typeof Symbol < "u" && e[Symbol.iterator] != null || e["@@iterator"] != null) return Array.from(e); } -function ph(e) { - if (Array.isArray(e)) return mh(e); +function yh(e) { + if (Array.isArray(e)) return bh(e); } -function mh(e, t) { +function bh(e, t) { (t == null || t > e.length) && (t = e.length); for (var n = 0, r = Array(t); n < t; n++) r[n] = e[n]; return r; } -function hh(e, t, n, r, i, a) { - return R(), z("svg", W({ +function xh(e, t, n, r, i, a) { + return z(), B("svg", G({ width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg" - }, e.pti()), lh(t[0] ||= [V("path", { + }, e.pti()), hh(t[0] ||= [H("path", { "fill-rule": "evenodd", "clip-rule": "evenodd", d: "M7 14H11.8C12.3835 14 12.9431 13.7682 13.3556 13.3556C13.7682 12.9431 14 12.3835 14 11.8V2.2C14 1.61652 13.7682 1.05694 13.3556 0.644365C12.9431 0.231785 12.3835 0 11.8 0H2.2C1.61652 0 1.05694 0.231785 0.644365 0.644365C0.231785 1.05694 0 1.61652 0 2.2V7C0 7.15913 0.063214 7.31174 0.175736 7.42426C0.288258 7.53679 0.44087 7.6 0.6 7.6C0.75913 7.6 0.911742 7.53679 1.02426 7.42426C1.13679 7.31174 1.2 7.15913 1.2 7V2.2C1.2 1.93478 1.30536 1.68043 1.49289 1.49289C1.68043 1.30536 1.93478 1.2 2.2 1.2H11.8C12.0652 1.2 12.3196 1.30536 12.5071 1.49289C12.6946 1.68043 12.8 1.93478 12.8 2.2V11.8C12.8 12.0652 12.6946 12.3196 12.5071 12.5071C12.3196 12.6946 12.0652 12.8 11.8 12.8H7C6.84087 12.8 6.68826 12.8632 6.57574 12.9757C6.46321 13.0883 6.4 13.2409 6.4 13.4C6.4 13.5591 6.46321 13.7117 6.57574 13.8243C6.68826 13.9368 6.84087 14 7 14ZM9.77805 7.42192C9.89013 7.534 10.0415 7.59788 10.2 7.59995C10.3585 7.59788 10.5099 7.534 10.622 7.42192C10.7341 7.30985 10.798 7.15844 10.8 6.99995V3.94242C10.8066 3.90505 10.8096 3.86689 10.8089 3.82843C10.8079 3.77159 10.7988 3.7157 10.7824 3.6623C10.756 3.55552 10.701 3.45698 10.622 3.37798C10.5099 3.2659 10.3585 3.20202 10.2 3.19995H7.00002C6.84089 3.19995 6.68828 3.26317 6.57576 3.37569C6.46324 3.48821 6.40002 3.64082 6.40002 3.79995C6.40002 3.95908 6.46324 4.11169 6.57576 4.22422C6.68828 4.33674 6.84089 4.39995 7.00002 4.39995H8.80006L6.19997 7.00005C6.10158 7.11005 6.04718 7.25246 6.04718 7.40005C6.04718 7.54763 6.10158 7.69004 6.19997 7.80005C6.30202 7.91645 6.44561 7.98824 6.59997 8.00005C6.75432 7.98824 6.89791 7.91645 6.99997 7.80005L9.60002 5.26841V6.99995C9.6021 7.15844 9.66598 7.30985 9.77805 7.42192ZM1.4 14H3.8C4.17066 13.9979 4.52553 13.8498 4.78763 13.5877C5.04973 13.3256 5.1979 12.9707 5.2 12.6V10.2C5.1979 9.82939 5.04973 9.47452 4.78763 9.21242C4.52553 8.95032 4.17066 8.80215 3.8 8.80005H1.4C1.02934 8.80215 0.674468 8.95032 0.412371 9.21242C0.150274 9.47452 0.00210008 9.82939 0 10.2V12.6C0.00210008 12.9707 0.150274 13.3256 0.412371 13.5877C0.674468 13.8498 1.02934 13.9979 1.4 14ZM1.25858 10.0586C1.29609 10.0211 1.34696 10 1.4 10H3.8C3.85304 10 3.90391 10.0211 3.94142 10.0586C3.97893 10.0961 4 10.147 4 10.2V12.6C4 12.6531 3.97893 12.704 3.94142 12.7415C3.90391 12.779 3.85304 12.8 3.8 12.8H1.4C1.34696 12.8 1.29609 12.779 1.25858 12.7415C1.22107 12.704 1.2 12.6531 1.2 12.6V10.2C1.2 10.147 1.22107 10.0961 1.25858 10.0586Z", fill: "currentColor" }, null, -1)]), 16); } -ch.render = hh; +mh.render = xh; // node_modules/@primevue/icons/windowminimize/index.mjs -var gh = { +var Sh = { name: "WindowMinimizeIcon", - extends: hd + extends: xd }; -function _h(e) { - return xh(e) || bh(e) || yh(e) || vh(); +function Ch(e) { + return Dh(e) || Eh(e) || Th(e) || wh(); } -function vh() { +function wh() { throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function yh(e, t) { +function Th(e, t) { if (e) { - if (typeof e == "string") return Sh(e, t); + if (typeof e == "string") return Oh(e, t); var n = {}.toString.call(e).slice(8, -1); - return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? Sh(e, t) : void 0; + return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? Oh(e, t) : void 0; } } -function bh(e) { +function Eh(e) { if (typeof Symbol < "u" && e[Symbol.iterator] != null || e["@@iterator"] != null) return Array.from(e); } -function xh(e) { - if (Array.isArray(e)) return Sh(e); +function Dh(e) { + if (Array.isArray(e)) return Oh(e); } -function Sh(e, t) { +function Oh(e, t) { (t == null || t > e.length) && (t = e.length); for (var n = 0, r = Array(t); n < t; n++) r[n] = e[n]; return r; } -function Ch(e, t, n, r, i, a) { - return R(), z("svg", W({ +function kh(e, t, n, r, i, a) { + return z(), B("svg", G({ width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg" - }, e.pti()), _h(t[0] ||= [V("path", { + }, e.pti()), Ch(t[0] ||= [H("path", { "fill-rule": "evenodd", "clip-rule": "evenodd", d: "M11.8 0H2.2C1.61652 0 1.05694 0.231785 0.644365 0.644365C0.231785 1.05694 0 1.61652 0 2.2V7C0 7.15913 0.063214 7.31174 0.175736 7.42426C0.288258 7.53679 0.44087 7.6 0.6 7.6C0.75913 7.6 0.911742 7.53679 1.02426 7.42426C1.13679 7.31174 1.2 7.15913 1.2 7V2.2C1.2 1.93478 1.30536 1.68043 1.49289 1.49289C1.68043 1.30536 1.93478 1.2 2.2 1.2H11.8C12.0652 1.2 12.3196 1.30536 12.5071 1.49289C12.6946 1.68043 12.8 1.93478 12.8 2.2V11.8C12.8 12.0652 12.6946 12.3196 12.5071 12.5071C12.3196 12.6946 12.0652 12.8 11.8 12.8H7C6.84087 12.8 6.68826 12.8632 6.57574 12.9757C6.46321 13.0883 6.4 13.2409 6.4 13.4C6.4 13.5591 6.46321 13.7117 6.57574 13.8243C6.68826 13.9368 6.84087 14 7 14H11.8C12.3835 14 12.9431 13.7682 13.3556 13.3556C13.7682 12.9431 14 12.3835 14 11.8V2.2C14 1.61652 13.7682 1.05694 13.3556 0.644365C12.9431 0.231785 12.3835 0 11.8 0ZM6.368 7.952C6.44137 7.98326 6.52025 7.99958 6.6 8H9.8C9.95913 8 10.1117 7.93678 10.2243 7.82426C10.3368 7.71174 10.4 7.55913 10.4 7.4C10.4 7.24087 10.3368 7.08826 10.2243 6.97574C10.1117 6.86321 9.95913 6.8 9.8 6.8H8.048L10.624 4.224C10.73 4.11026 10.7877 3.95982 10.7849 3.80438C10.7822 3.64894 10.7192 3.50063 10.6093 3.3907C10.4994 3.28077 10.3511 3.2178 10.1956 3.21506C10.0402 3.21232 9.88974 3.27002 9.776 3.376L7.2 5.952V4.2C7.2 4.04087 7.13679 3.88826 7.02426 3.77574C6.91174 3.66321 6.75913 3.6 6.6 3.6C6.44087 3.6 6.28826 3.66321 6.17574 3.77574C6.06321 3.88826 6 4.04087 6 4.2V7.4C6.00042 7.47975 6.01674 7.55862 6.048 7.632C6.07656 7.70442 6.11971 7.7702 6.17475 7.82524C6.2298 7.88029 6.29558 7.92344 6.368 7.952ZM1.4 8.80005H3.8C4.17066 8.80215 4.52553 8.95032 4.78763 9.21242C5.04973 9.47452 5.1979 9.82939 5.2 10.2V12.6C5.1979 12.9707 5.04973 13.3256 4.78763 13.5877C4.52553 13.8498 4.17066 13.9979 3.8 14H1.4C1.02934 13.9979 0.674468 13.8498 0.412371 13.5877C0.150274 13.3256 0.00210008 12.9707 0 12.6V10.2C0.00210008 9.82939 0.150274 9.47452 0.412371 9.21242C0.674468 8.95032 1.02934 8.80215 1.4 8.80005ZM3.94142 12.7415C3.97893 12.704 4 12.6531 4 12.6V10.2C4 10.147 3.97893 10.0961 3.94142 10.0586C3.90391 10.0211 3.85304 10 3.8 10H1.4C1.34696 10 1.29609 10.0211 1.25858 10.0586C1.22107 10.0961 1.2 10.147 1.2 10.2V12.6C1.2 12.6531 1.22107 12.704 1.25858 12.7415C1.29609 12.779 1.34696 12.8 1.4 12.8H3.8C3.85304 12.8 3.90391 12.779 3.94142 12.7415Z", fill: "currentColor" }, null, -1)]), 16); } -gh.render = Ch; +Sh.render = kh; // node_modules/primevue/focustrap/style/index.mjs -var wh = X.extend({ name: "focustrap-directive" }), Th = $.extend({ style: wh }); -function Eh(e) { +var Ah = X.extend({ name: "focustrap-directive" }), jh = $.extend({ style: Ah }); +function Mh(e) { "@babel/helpers - typeof"; - return Eh = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { + return Mh = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { return typeof e; } : function(e) { return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; - }, Eh(e); + }, Mh(e); } -function Dh(e, t) { +function Nh(e, t) { var n = Object.keys(e); if (Object.getOwnPropertySymbols) { var r = Object.getOwnPropertySymbols(e); @@ -10213,40 +10268,40 @@ function Dh(e, t) { } return n; } -function Oh(e) { +function Ph(e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t] == null ? {} : arguments[t]; - t % 2 ? Dh(Object(n), !0).forEach(function(t) { - kh(e, t, n[t]); - }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : Dh(Object(n)).forEach(function(t) { + t % 2 ? Nh(Object(n), !0).forEach(function(t) { + Fh(e, t, n[t]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : Nh(Object(n)).forEach(function(t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t)); }); } return e; } -function kh(e, t, n) { - return (t = Ah(t)) in e ? Object.defineProperty(e, t, { +function Fh(e, t, n) { + return (t = Ih(t)) in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e; } -function Ah(e) { - var t = jh(e, "string"); - return Eh(t) == "symbol" ? t : t + ""; +function Ih(e) { + var t = Lh(e, "string"); + return Mh(t) == "symbol" ? t : t + ""; } -function jh(e, t) { - if (Eh(e) != "object" || !e) return e; +function Lh(e, t) { + if (Mh(e) != "object" || !e) return e; var n = e[Symbol.toPrimitive]; if (n !== void 0) { var r = n.call(e, t); - if (Eh(r) != "object") return r; + if (Mh(r) != "object") return r; throw TypeError("@@toPrimitive must return a primitive value."); } return (t === "string" ? String : Number)(e); } -var Mh = Th.extend("focustrap", { +var Rh = jh.extend("focustrap", { mounted: function(e, t) { (t.value || {}).disabled || (this.createHiddenFocusableElements(e, t), this.bind(e, t), this.autoElementFocus(e, t)), e.setAttribute("data-pd-focustrap", !0), this.$el = e; }, @@ -10266,7 +10321,7 @@ var Mh = Th.extend("focustrap", { t.forEach(function(t) { if (t.type === "childList" && !e.contains(document.activeElement)) { var r = function(t) { - var i = ll(t) ? ll(t, n.getComputedSelector(e.$_pfocustrap_focusableselector)) ? t : $c(e, n.getComputedSelector(e.$_pfocustrap_focusableselector)) : $c(t); + var i = hl(t) ? hl(t, n.getComputedSelector(e.$_pfocustrap_focusableselector)) ? t : al(e, n.getComputedSelector(e.$_pfocustrap_focusableselector)) : al(t); return K(i) ? i : t.nextSibling && r(t.nextSibling); }; J(r(t.nextSibling)); @@ -10282,23 +10337,23 @@ var Mh = Th.extend("focustrap", { e.$_pfocustrap_mutationobserver && e.$_pfocustrap_mutationobserver.disconnect(), e.$_pfocustrap_focusinlistener && e.removeEventListener("focusin", e.$_pfocustrap_focusinlistener) && (e.$_pfocustrap_focusinlistener = null), e.$_pfocustrap_focusoutlistener && e.removeEventListener("focusout", e.$_pfocustrap_focusoutlistener) && (e.$_pfocustrap_focusoutlistener = null); }, autoFocus: function(e) { - this.autoElementFocus(this.$el, { value: Oh(Oh({}, e), {}, { autoFocus: !0 }) }); + this.autoElementFocus(this.$el, { value: Ph(Ph({}, e), {}, { autoFocus: !0 }) }); }, autoElementFocus: function(e, t) { - var n = t.value || {}, r = n.autoFocusSelector, i = r === void 0 ? "" : r, a = n.firstFocusableSelector, o = a === void 0 ? "" : a, s = n.autoFocus, c = s !== void 0 && s, l = $c(e, `[autofocus]${this.getComputedSelector(i)}`); - c && !l && (l = $c(e, this.getComputedSelector(o))), J(l); + var n = t.value || {}, r = n.autoFocusSelector, i = r === void 0 ? "" : r, a = n.firstFocusableSelector, o = a === void 0 ? "" : a, s = n.autoFocus, c = s !== void 0 && s, l = al(e, `[autofocus]${this.getComputedSelector(i)}`); + c && !l && (l = al(e, this.getComputedSelector(o))), J(l); }, onFirstHiddenElementFocus: function(e) { var t, n = e.currentTarget, r = e.relatedTarget; - J(r === n.$_pfocustrap_lasthiddenfocusableelement || !((t = this.$el) != null && t.contains(r)) ? $c(n.parentElement, this.getComputedSelector(n.$_pfocustrap_focusableselector)) : n.$_pfocustrap_lasthiddenfocusableelement); + J(r === n.$_pfocustrap_lasthiddenfocusableelement || !((t = this.$el) != null && t.contains(r)) ? al(n.parentElement, this.getComputedSelector(n.$_pfocustrap_focusableselector)) : n.$_pfocustrap_lasthiddenfocusableelement); }, onLastHiddenElementFocus: function(e) { var t, n = e.currentTarget, r = e.relatedTarget; - J(r === n.$_pfocustrap_firsthiddenfocusableelement || !((t = this.$el) != null && t.contains(r)) ? tl(n.parentElement, this.getComputedSelector(n.$_pfocustrap_focusableselector)) : n.$_pfocustrap_firsthiddenfocusableelement); + J(r === n.$_pfocustrap_firsthiddenfocusableelement || !((t = this.$el) != null && t.contains(r)) ? sl(n.parentElement, this.getComputedSelector(n.$_pfocustrap_focusableselector)) : n.$_pfocustrap_firsthiddenfocusableelement); }, createHiddenFocusableElements: function(e, t) { var n = this, r = t.value || {}, i = r.tabIndex, a = i === void 0 ? 0 : i, o = r.firstFocusableSelector, s = o === void 0 ? "" : o, c = r.lastFocusableSelector, l = c === void 0 ? "" : c, u = function(e) { - return Jc("span", { + return el("span", { class: "p-hidden-accessible p-hidden-focusable", tabIndex: a, role: "presentation", @@ -10313,14 +10368,14 @@ var Mh = Th.extend("focustrap", { } }); // node_modules/primevue/utils/index.mjs -function Nh() { - Ac({ variableName: Vl("scrollbar.width").name }); +function zh() { + Ic({ variableName: ql("scrollbar.width").name }); } -function Ph() { - Mc({ variableName: Vl("scrollbar.width").name }); +function Bh() { + Rc({ variableName: ql("scrollbar.width").name }); } // node_modules/primevue/dialog/style/index.mjs -var Fh = X.extend({ +var Vh = X.extend({ name: "dialog", style: "\n .p-dialog {\n max-height: 90%;\n transform: scale(1);\n border-radius: dt('dialog.border.radius');\n box-shadow: dt('dialog.shadow');\n background: dt('dialog.background');\n border: 1px solid dt('dialog.border.color');\n color: dt('dialog.color');\n will-change: transform;\n }\n\n .p-dialog-content {\n overflow-y: auto;\n padding: dt('dialog.content.padding');\n flex-grow: 1;\n }\n\n .p-dialog-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-shrink: 0;\n padding: dt('dialog.header.padding');\n }\n\n .p-dialog-title {\n font-weight: dt('dialog.title.font.weight');\n font-size: dt('dialog.title.font.size');\n }\n\n .p-dialog-footer {\n flex-shrink: 0;\n padding: dt('dialog.footer.padding');\n display: flex;\n justify-content: flex-end;\n gap: dt('dialog.footer.gap');\n }\n\n .p-dialog-header-actions {\n display: flex;\n align-items: center;\n gap: dt('dialog.header.gap');\n }\n\n .p-dialog-top .p-dialog,\n .p-dialog-bottom .p-dialog,\n .p-dialog-left .p-dialog,\n .p-dialog-right .p-dialog,\n .p-dialog-topleft .p-dialog,\n .p-dialog-topright .p-dialog,\n .p-dialog-bottomleft .p-dialog,\n .p-dialog-bottomright .p-dialog {\n margin: 1rem;\n }\n\n .p-dialog-maximized {\n width: 100vw !important;\n height: 100vh !important;\n top: 0px !important;\n left: 0px !important;\n max-height: 100%;\n height: 100%;\n border-radius: 0;\n }\n\n .p-dialog .p-resizable-handle {\n position: absolute;\n font-size: 0.1px;\n display: block;\n cursor: se-resize;\n width: 12px;\n height: 12px;\n right: 1px;\n bottom: 1px;\n }\n\n .p-dialog-enter-active {\n animation: p-animate-dialog-enter 300ms cubic-bezier(.19,1,.22,1);\n }\n\n .p-dialog-leave-active {\n animation: p-animate-dialog-leave 300ms cubic-bezier(.19,1,.22,1);\n }\n\n @keyframes p-animate-dialog-enter {\n from {\n opacity: 0;\n transform: scale(0.93);\n }\n }\n\n @keyframes p-animate-dialog-leave {\n to {\n opacity: 0;\n transform: scale(0.93);\n }\n }\n", classes: { @@ -10376,11 +10431,11 @@ var Fh = X.extend({ pointerEvents: "auto" } } -}), Ih = { +}), Hh = { name: "Dialog", extends: { name: "BaseDialog", - extends: sd, + extends: pd, props: { header: { type: null, @@ -10504,7 +10559,7 @@ var Fh = X.extend({ }, _instance: null }, - style: Fh, + style: Vh, provide: function() { return { $pcDialog: this, @@ -10525,7 +10580,7 @@ var Fh = X.extend({ ], provide: function() { var e = this; - return { dialogRef: yo(function() { + return { dialogRef: To(function() { return e._instance; }) }; }, @@ -10557,7 +10612,7 @@ var Fh = X.extend({ this.visible && (this.containerVisible = this.visible); }, beforeUnmount: function() { - this.unbindDocumentState(), this.unbindGlobalListeners(), this.destroyStyle(), this.mask && this.autoZIndex && gl.clear(this.mask), this.container = null, this.mask = null; + this.unbindDocumentState(), this.unbindGlobalListeners(), this.destroyStyle(), this.mask && this.autoZIndex && Sl.clear(this.mask), this.container = null, this.mask = null; }, mounted: function() { this.breakpoints && this.createStyle(); @@ -10567,19 +10622,19 @@ var Fh = X.extend({ this.$emit("update:visible", !1); }, onEnter: function() { - this.$emit("show"), this.target = document.activeElement, this.enableDocumentSettings(), this.bindGlobalListeners(), this.autoZIndex && gl.set("modal", this.mask, this.baseZIndex || this.$primevue.config.zIndex.modal); + this.$emit("show"), this.target = document.activeElement, this.enableDocumentSettings(), this.bindGlobalListeners(), this.autoZIndex && Sl.set("modal", this.mask, this.baseZIndex || this.$primevue.config.zIndex.modal); }, onAfterEnter: function() { this.focus(); }, onBeforeLeave: function() { - this.modal && !this.isUnstyled && Oc(this.mask, "p-overlay-mask-leave-active"), this.dragging && this.documentDragEndListener && this.documentDragEndListener(); + this.modal && !this.isUnstyled && Pc(this.mask, "p-overlay-mask-leave-active"), this.dragging && this.documentDragEndListener && this.documentDragEndListener(); }, onLeave: function() { this.$emit("hide"), J(this.target), this.target = null, this.focusableClose = null, this.focusableMax = null; }, onAfterLeave: function() { - this.autoZIndex && gl.clear(this.mask), this.containerVisible = !1, this.unbindDocumentState(), this.unbindGlobalListeners(), this.$emit("after-hide"); + this.autoZIndex && Sl.clear(this.mask), this.containerVisible = !1, this.unbindDocumentState(), this.unbindGlobalListeners(), this.$emit("after-hide"); }, onMaskMouseDown: function(e) { this.maskMouseDownTarget = e.target; @@ -10594,13 +10649,13 @@ var Fh = X.extend({ t || (t = this.$slots.header && e(this.headerContainer), t || (t = this.$slots.default && e(this.content), t || (this.maximizable ? (this.focusableMax = !0, t = this.maximizableButton) : (this.focusableClose = !0, t = this.closeButton)))), t && J(t, { focusVisible: !0 }); }, maximize: function(e) { - this.maximized ? (this.maximized = !1, this.$emit("unmaximize", e)) : (this.maximized = !0, this.$emit("maximize", e)), this.modal || (this.maximized ? Nh() : Ph()); + this.maximized ? (this.maximized = !1, this.$emit("unmaximize", e)) : (this.maximized = !0, this.$emit("maximize", e)), this.modal || (this.maximized ? zh() : Bh()); }, enableDocumentSettings: function() { - (this.modal || !this.modal && this.blockScroll || this.maximizable && this.maximized) && Nh(); + (this.modal || !this.modal && this.blockScroll || this.maximizable && this.maximized) && zh(); }, unbindDocumentState: function() { - (this.modal || !this.modal && this.blockScroll || this.maximizable && this.maximized) && Ph(); + (this.modal || !this.modal && this.blockScroll || this.maximizable && this.maximized) && Bh(); }, onKeyDown: function(e) { e.code === "Escape" && this.closeOnEscape && !e.isComposing && this.close(); @@ -10635,7 +10690,7 @@ var Fh = X.extend({ createStyle: function() { if (!this.styleElement && !this.isUnstyled) { var e; - this.styleElement = document.createElement("style"), this.styleElement.type = "text/css", fl(this.styleElement, "nonce", (e = this.$primevue) == null || (e = e.config) == null || (e = e.csp) == null ? void 0 : e.nonce), document.head.appendChild(this.styleElement); + this.styleElement = document.createElement("style"), this.styleElement.type = "text/css", vl(this.styleElement, "nonce", (e = this.$primevue) == null || (e = e.config) == null || (e = e.csp) == null ? void 0 : e.nonce), document.head.appendChild(this.styleElement); var t = ""; for (var n in this.breakpoints) t += ` @media screen and (max-width: ${n}) { @@ -10651,7 +10706,7 @@ var Fh = X.extend({ this.styleElement &&= (document.head.removeChild(this.styleElement), null); }, initDrag: function(e) { - e.target.closest("div").getAttribute("data-pc-section") !== "headeractions" && this.draggable && (this.dragging = !0, this.lastPageX = e.pageX, this.lastPageY = e.pageY, this.container.style.margin = "0", document.body.setAttribute("data-p-unselectable-text", "true"), !this.isUnstyled && Vc(document.body, { "user-select": "none" }), this.$emit("dragstart", e)); + e.target.closest("div").getAttribute("data-pc-section") !== "headeractions" && this.draggable && (this.dragging = !0, this.lastPageX = e.pageX, this.lastPageY = e.pageY, this.container.style.margin = "0", document.body.setAttribute("data-p-unselectable-text", "true"), !this.isUnstyled && qc(document.body, { "user-select": "none" }), this.$emit("dragstart", e)); }, bindGlobalListeners: function() { this.draggable && (this.bindDocumentDragListener(), this.bindDocumentDragEndListener()), this.closeOnEscape && this.bindDocumentKeyDownListener(); @@ -10663,7 +10718,7 @@ var Fh = X.extend({ var e = this; this.documentDragListener = function(t) { if (e.dragging) { - var n = Hc(e.container), r = rl(e.container), i = t.pageX - e.lastPageX, a = t.pageY - e.lastPageY, o = e.container.getBoundingClientRect(), s = o.left + i, c = o.top + a, l = Fc(), u = getComputedStyle(e.container), d = parseFloat(u.marginLeft), f = parseFloat(u.marginTop); + var n = Jc(e.container), r = ll(e.container), i = t.pageX - e.lastPageX, a = t.pageY - e.lastPageY, o = e.container.getBoundingClientRect(), s = o.left + i, c = o.top + a, l = Vc(), u = getComputedStyle(e.container), d = parseFloat(u.marginLeft), f = parseFloat(u.marginTop); e.container.style.position = "fixed", e.keepInViewport ? (s >= e.minX && s + n < l.width && (e.lastPageX = t.pageX, e.container.style.left = s - d + "px"), c >= e.minY && c + r < l.height && (e.lastPageY = t.pageY, e.container.style.top = c - f + "px")) : (e.lastPageX = t.pageX, e.container.style.left = s - d + "px", e.lastPageY = t.pageY, e.container.style.top = c - f + "px"); } }, window.document.addEventListener("mousemove", this.documentDragListener); @@ -10699,26 +10754,26 @@ var Fh = X.extend({ } }, directives: { - ripple: nf, - focustrap: Mh + ripple: lf, + focustrap: Rh }, components: { - Button: hf, - Portal: sm, - WindowMinimizeIcon: gh, - WindowMaximizeIcon: ch, - TimesIcon: Jp + Button: xf, + Portal: pm, + WindowMinimizeIcon: Sh, + WindowMaximizeIcon: mh, + TimesIcon: em } }; -function Lh(e) { +function Uh(e) { "@babel/helpers - typeof"; - return Lh = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { + return Uh = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { return typeof e; } : function(e) { return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; - }, Lh(e); + }, Uh(e); } -function Rh(e, t) { +function Wh(e, t) { var n = Object.keys(e); if (Object.getOwnPropertySymbols) { var r = Object.getOwnPropertySymbols(e); @@ -10728,49 +10783,49 @@ function Rh(e, t) { } return n; } -function zh(e) { +function Gh(e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t] == null ? {} : arguments[t]; - t % 2 ? Rh(Object(n), !0).forEach(function(t) { - Bh(e, t, n[t]); - }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : Rh(Object(n)).forEach(function(t) { + t % 2 ? Wh(Object(n), !0).forEach(function(t) { + Kh(e, t, n[t]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : Wh(Object(n)).forEach(function(t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t)); }); } return e; } -function Bh(e, t, n) { - return (t = Vh(t)) in e ? Object.defineProperty(e, t, { +function Kh(e, t, n) { + return (t = qh(t)) in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e; } -function Vh(e) { - var t = Hh(e, "string"); - return Lh(t) == "symbol" ? t : t + ""; +function qh(e) { + var t = Jh(e, "string"); + return Uh(t) == "symbol" ? t : t + ""; } -function Hh(e, t) { - if (Lh(e) != "object" || !e) return e; +function Jh(e, t) { + if (Uh(e) != "object" || !e) return e; var n = e[Symbol.toPrimitive]; if (n !== void 0) { var r = n.call(e, t); - if (Lh(r) != "object") return r; + if (Uh(r) != "object") return r; throw TypeError("@@toPrimitive must return a primitive value."); } return (t === "string" ? String : Number)(e); } -var Uh = ["data-p"], Wh = [ +var Yh = ["data-p"], Xh = [ "aria-labelledby", "aria-modal", "data-p" -], Gh = ["id"], Kh = ["data-p"]; -function qh(e, t, n, r, i, a) { - var o = F("Button"), s = F("Portal"), c = di("focustrap"); - return R(), B(s, { appendTo: e.appendTo }, { +], Zh = ["id"], Qh = ["data-p"]; +function $h(e, t, n, r, i, a) { + var o = F("Button"), s = F("Portal"), c = mi("focustrap"); + return z(), V(s, { appendTo: e.appendTo }, { default: P(function() { - return [i.containerVisible ? (R(), z("div", W({ + return [i.containerVisible ? (z(), B("div", G({ key: 0, ref: a.maskRef, class: e.cx("mask"), @@ -10785,7 +10840,7 @@ function qh(e, t, n, r, i, a) { return a.onMaskMouseUp && a.onMaskMouseUp.apply(a, arguments); }, "data-p": a.dataP - }, e.ptm("mask")), [H(Fo, W({ + }, e.ptm("mask")), [U(Vo, G({ name: "p-dialog", onEnter: a.onEnter, onAfterEnter: a.onAfterEnter, @@ -10795,7 +10850,7 @@ function qh(e, t, n, r, i, a) { appear: "" }, e.ptm("transition")), { default: P(function() { - return [e.visible ? Gn((R(), z("div", W({ + return [e.visible ? qn((z(), B("div", G({ key: 0, ref: a.containerRef, class: e.cx("root"), @@ -10811,28 +10866,28 @@ function qh(e, t, n, r, i, a) { return a.maximize(e); }, initDragCallback: a.initDrag - }) : (R(), z(L, { key: 1 }, [ - e.showHeader ? (R(), z("div", W({ + }) : (z(), B(L, { key: 1 }, [ + e.showHeader ? (z(), B("div", G({ key: 0, ref: a.headerContainerRef, class: e.cx("header"), onMousedown: t[0] ||= function() { return a.initDrag && a.initDrag.apply(a, arguments); } - }, e.ptm("header")), [I(e.$slots, "header", { class: D(e.cx("title")) }, function() { - return [e.header ? (R(), z("span", W({ + }, e.ptm("header")), [I(e.$slots, "header", { class: O(e.cx("title")) }, function() { + return [e.header ? (z(), B("span", G({ key: 0, id: a.ariaLabelledById, class: e.cx("title") - }, e.ptm("title")), O(e.header), 17, Gh)) : U("", !0)]; - }), V("div", W({ class: e.cx("headerActions") }, e.ptm("headerActions")), [e.maximizable ? I(e.$slots, "maximizebutton", { + }, e.ptm("title")), k(e.header), 17, Zh)) : W("", !0)]; + }), H("div", G({ class: e.cx("headerActions") }, e.ptm("headerActions")), [e.maximizable ? I(e.$slots, "maximizebutton", { key: 0, maximized: i.maximized, maximizeCallback: function(e) { return a.maximize(e); } }, function() { - return [H(o, W({ + return [U(o, G({ ref: a.maximizableRef, autofocus: i.focusableMax, class: e.cx("pcMaximizeButton"), @@ -10845,7 +10900,7 @@ function qh(e, t, n, r, i, a) { }), { icon: P(function(t) { return [I(e.$slots, "maximizeicon", { maximized: i.maximized }, function() { - return [(R(), B(ui(a.maximizeIconComponent), W({ class: [t.class, i.maximized ? e.minimizeIcon : e.maximizeIcon] }, e.ptm("pcMaximizeButton").icon), null, 16, ["class"]))]; + return [(z(), V(pi(a.maximizeIconComponent), G({ class: [t.class, i.maximized ? e.minimizeIcon : e.maximizeIcon] }, e.ptm("pcMaximizeButton").icon), null, 16, ["class"]))]; })]; }), _: 3 @@ -10857,11 +10912,11 @@ function qh(e, t, n, r, i, a) { "unstyled", "pt" ])]; - }) : U("", !0), e.closable ? I(e.$slots, "closebutton", { + }) : W("", !0), e.closable ? I(e.$slots, "closebutton", { key: 1, closeCallback: a.close }, function() { - return [H(o, W({ + return [U(o, G({ ref: a.closeButtonRef, autofocus: i.focusableClose, class: e.cx("pcCloseButton"), @@ -10874,7 +10929,7 @@ function qh(e, t, n, r, i, a) { }), { icon: P(function(t) { return [I(e.$slots, "closeicon", {}, function() { - return [(R(), B(ui(e.closeIcon ? "span" : "TimesIcon"), W({ class: [e.closeIcon, t.class] }, e.ptm("pcCloseButton").icon), null, 16, ["class"]))]; + return [(z(), V(pi(e.closeIcon ? "span" : "TimesIcon"), G({ class: [e.closeIcon, t.class] }, e.ptm("pcCloseButton").icon), null, 16, ["class"]))]; })]; }), _: 3 @@ -10886,21 +10941,21 @@ function qh(e, t, n, r, i, a) { "unstyled", "pt" ])]; - }) : U("", !0)], 16)], 16)) : U("", !0), - V("div", W({ + }) : W("", !0)], 16)], 16)) : W("", !0), + H("div", G({ ref: a.contentRef, class: [e.cx("content"), e.contentClass], style: e.contentStyle, "data-p": a.dataP - }, zh(zh({}, e.contentProps), e.ptm("content"))), [I(e.$slots, "default")], 16, Kh), - e.footer || e.$slots.footer ? (R(), z("div", W({ + }, Gh(Gh({}, e.contentProps), e.ptm("content"))), [I(e.$slots, "default")], 16, Qh), + e.footer || e.$slots.footer ? (z(), B("div", G({ key: 1, ref: a.footerContainerRef, class: e.cx("footer") }, e.ptm("footer")), [I(e.$slots, "footer", {}, function() { - return [qa(O(e.footer), 1)]; - })], 16)) : U("", !0) - ], 64))], 16, Wh)), [[c, { disabled: !e.modal }]]) : U("", !0)]; + return [Za(k(e.footer), 1)]; + })], 16)) : W("", !0) + ], 64))], 16, Xh)), [[c, { disabled: !e.modal }]]) : W("", !0)]; }), _: 3 }, 16, [ @@ -10909,14 +10964,14 @@ function qh(e, t, n, r, i, a) { "onBeforeLeave", "onLeave", "onAfterLeave" - ])], 16, Uh)) : U("", !0)]; + ])], 16, Yh)) : W("", !0)]; }), _: 3 }, 8, ["appendTo"]); } -Ih.render = qh; +Hh.render = $h; // node_modules/primevue/menu/style/index.mjs -var Jh = X.extend({ +var eg = X.extend({ name: "menu", style: "\n .p-menu {\n background: dt('menu.background');\n color: dt('menu.color');\n border: 1px solid dt('menu.border.color');\n border-radius: dt('menu.border.radius');\n min-width: 12.5rem;\n }\n\n .p-menu-list {\n margin: 0;\n padding: dt('menu.list.padding');\n outline: 0 none;\n list-style: none;\n display: flex;\n flex-direction: column;\n gap: dt('menu.list.gap');\n }\n\n .p-menu-item-content {\n transition:\n background dt('menu.transition.duration'),\n color dt('menu.transition.duration');\n border-radius: dt('menu.item.border.radius');\n color: dt('menu.item.color');\n overflow: hidden;\n }\n\n .p-menu-item-link {\n cursor: pointer;\n display: flex;\n align-items: center;\n text-decoration: none;\n overflow: hidden;\n position: relative;\n color: inherit;\n padding: dt('menu.item.padding');\n gap: dt('menu.item.gap');\n user-select: none;\n outline: 0 none;\n }\n\n .p-menu-item-label {\n line-height: 1;\n }\n\n .p-menu-item-icon {\n color: dt('menu.item.icon.color');\n }\n\n .p-menu-item.p-focus .p-menu-item-content {\n color: dt('menu.item.focus.color');\n background: dt('menu.item.focus.background');\n }\n\n .p-menu-item.p-focus .p-menu-item-icon {\n color: dt('menu.item.icon.focus.color');\n }\n\n .p-menu-item:not(.p-disabled) .p-menu-item-content:hover {\n color: dt('menu.item.focus.color');\n background: dt('menu.item.focus.background');\n }\n\n .p-menu-item:not(.p-disabled) .p-menu-item-content:hover .p-menu-item-icon {\n color: dt('menu.item.icon.focus.color');\n }\n\n .p-menu-overlay {\n box-shadow: dt('menu.shadow');\n }\n\n .p-menu-submenu-label {\n background: dt('menu.submenu.label.background');\n padding: dt('menu.submenu.label.padding');\n color: dt('menu.submenu.label.color');\n font-weight: dt('menu.submenu.label.font.weight');\n }\n\n .p-menu-separator {\n border-block-start: 1px solid dt('menu.separator.border.color');\n }\n", classes: { @@ -10940,9 +10995,9 @@ var Jh = X.extend({ itemIcon: "p-menu-item-icon", itemLabel: "p-menu-item-label" } -}), Yh = { +}), tg = { name: "BaseMenu", - extends: sd, + extends: pd, props: { popup: { type: Boolean, @@ -10977,17 +11032,17 @@ var Jh = X.extend({ default: null } }, - style: Jh, + style: eg, provide: function() { return { $pcMenu: this, $parentInstance: this }; } -}, Xh = { +}, ng = { name: "Menuitem", hostName: "Menu", - extends: sd, + extends: pd, inheritAttrs: !1, emits: ["item-click", "item-mousemove"], props: { @@ -10999,7 +11054,7 @@ var Jh = X.extend({ }, methods: { getItemProp: function(e, t) { - return e && e.item ? pc(e.item[t]) : void 0; + return e && e.item ? yc(e.item[t]) : void 0; }, getPTOptions: function(e) { return this.ptm(e, { context: { @@ -11041,12 +11096,12 @@ var Jh = X.extend({ }, getMenuItemProps: function(e) { return { - action: W({ + action: G({ class: this.cx("itemLink"), tabindex: "-1" }, this.getPTOptions("itemLink")), - icon: W({ class: [this.cx("itemIcon"), e.icon] }, this.getPTOptions("itemIcon")), - label: W({ class: this.cx("itemLabel") }, this.getPTOptions("itemLabel")) + icon: G({ class: [this.cx("itemIcon"), e.icon] }, this.getPTOptions("itemIcon")), + label: G({ class: this.cx("itemLabel") }, this.getPTOptions("itemLabel")) }; } }, @@ -11056,18 +11111,18 @@ var Jh = X.extend({ disabled: this.disabled() }); } }, - directives: { ripple: nf } -}, Zh = [ + directives: { ripple: lf } +}, rg = [ "id", "aria-label", "aria-disabled", "data-p-focused", "data-p-disabled", "data-p" -], Qh = ["data-p"], $h = ["href", "target"], eg = ["data-p"], tg = ["data-p"]; -function ng(e, t, n, r, i, a) { - var o = di("ripple"); - return a.visible() ? (R(), z("li", W({ +], ig = ["data-p"], ag = ["href", "target"], og = ["data-p"], sg = ["data-p"]; +function cg(e, t, n, r, i, a) { + var o = mi("ripple"); + return a.visible() ? (z(), B("li", G({ key: 0, id: n.id, class: [e.cx("item"), n.item.class], @@ -11078,7 +11133,7 @@ function ng(e, t, n, r, i, a) { "data-p-focused": a.isItemFocused(), "data-p-disabled": a.disabled() || !1, "data-p": a.dataP - }, a.getPTOptions("item")), [V("div", W({ + }, a.getPTOptions("item")), [H("div", G({ class: e.cx("itemContent"), onClick: t[0] ||= function(e) { return a.onItemClick(e); @@ -11087,7 +11142,7 @@ function ng(e, t, n, r, i, a) { return a.onItemMouseMove(e); }, "data-p": a.dataP - }, a.getPTOptions("itemContent")), [n.templates.item ? n.templates.item ? (R(), B(ui(n.templates.item), { + }, a.getPTOptions("itemContent")), [n.templates.item ? n.templates.item ? (z(), V(pi(n.templates.item), { key: 1, item: n.item, label: a.label(), @@ -11096,53 +11151,53 @@ function ng(e, t, n, r, i, a) { "item", "label", "props" - ])) : U("", !0) : Gn((R(), z("a", W({ + ])) : W("", !0) : qn((z(), B("a", G({ key: 0, href: n.item.url, class: e.cx("itemLink"), target: n.item.target, tabindex: "-1" - }, a.getPTOptions("itemLink")), [n.templates.itemicon ? (R(), B(ui(n.templates.itemicon), { + }, a.getPTOptions("itemLink")), [n.templates.itemicon ? (z(), V(pi(n.templates.itemicon), { key: 0, item: n.item, - class: D(e.cx("itemIcon")) - }, null, 8, ["item", "class"])) : n.item.icon ? (R(), z("span", W({ + class: O(e.cx("itemIcon")) + }, null, 8, ["item", "class"])) : n.item.icon ? (z(), B("span", G({ key: 1, class: [e.cx("itemIcon"), n.item.icon], "data-p": a.dataP - }, a.getPTOptions("itemIcon")), null, 16, eg)) : U("", !0), V("span", W({ + }, a.getPTOptions("itemIcon")), null, 16, og)) : W("", !0), H("span", G({ class: e.cx("itemLabel"), "data-p": a.dataP - }, a.getPTOptions("itemLabel")), O(a.label()), 17, tg)], 16, $h)), [[o]])], 16, Qh)], 16, Zh)) : U("", !0); + }, a.getPTOptions("itemLabel")), k(a.label()), 17, sg)], 16, ag)), [[o]])], 16, ig)], 16, rg)) : W("", !0); } -Xh.render = ng; -function rg(e) { - return sg(e) || og(e) || ag(e) || ig(); +ng.render = cg; +function lg(e) { + return pg(e) || fg(e) || dg(e) || ug(); } -function ig() { +function ug() { throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function ag(e, t) { +function dg(e, t) { if (e) { - if (typeof e == "string") return cg(e, t); + if (typeof e == "string") return mg(e, t); var n = {}.toString.call(e).slice(8, -1); - return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? cg(e, t) : void 0; + return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? mg(e, t) : void 0; } } -function og(e) { +function fg(e) { if (typeof Symbol < "u" && e[Symbol.iterator] != null || e["@@iterator"] != null) return Array.from(e); } -function sg(e) { - if (Array.isArray(e)) return cg(e); +function pg(e) { + if (Array.isArray(e)) return mg(e); } -function cg(e, t) { +function mg(e, t) { (t == null || t > e.length) && (t = e.length); for (var n = 0, r = Array(t); n < t; n++) r[n] = e[n]; return r; } -var lg = { +var hg = { name: "Menu", - extends: Yh, + extends: tg, inheritAttrs: !1, emits: [ "show", @@ -11168,7 +11223,7 @@ var lg = { this.popup || (this.bindResizeListener(), this.bindOutsideClickListener()); }, beforeUnmount: function() { - this.unbindResizeListener(), this.unbindOutsideClickListener(), this.scrollHandler &&= (this.scrollHandler.destroy(), null), this.target = null, this.container && this.autoZIndex && gl.clear(this.container), this.container = null; + this.unbindResizeListener(), this.unbindOutsideClickListener(), this.scrollHandler &&= (this.scrollHandler.destroy(), null), this.target = null, this.container && this.autoZIndex && Sl.clear(this.container), this.container = null; }, methods: { itemClick: function(e) { @@ -11224,29 +11279,29 @@ var lg = { this.changeFocusedOptionIndex(0), e.preventDefault(); }, onEndKey: function(e) { - this.changeFocusedOptionIndex(Yc(this.container, "li[data-pc-section=\"item\"][data-p-disabled=\"false\"]").length - 1), e.preventDefault(); + this.changeFocusedOptionIndex(tl(this.container, "li[data-pc-section=\"item\"][data-p-disabled=\"false\"]").length - 1), e.preventDefault(); }, onEnterKey: function(e) { - var t = Xc(this.list, `li[id="${`${this.focusedOptionIndex}`}"]`), n = t && Xc(t, "a[data-pc-section=\"itemlink\"]"); + var t = nl(this.list, `li[id="${`${this.focusedOptionIndex}`}"]`), n = t && nl(t, "a[data-pc-section=\"itemlink\"]"); this.popup && J(this.target), n ? n.click() : t && t.click(), e.preventDefault(); }, onSpaceKey: function(e) { this.onEnterKey(e); }, findNextOptionIndex: function(e) { - var t = rg(Yc(this.container, "li[data-pc-section=\"item\"][data-p-disabled=\"false\"]")).findIndex(function(t) { + var t = lg(tl(this.container, "li[data-pc-section=\"item\"][data-p-disabled=\"false\"]")).findIndex(function(t) { return t.id === e; }); return t > -1 ? t + 1 : 0; }, findPrevOptionIndex: function(e) { - var t = rg(Yc(this.container, "li[data-pc-section=\"item\"][data-p-disabled=\"false\"]")).findIndex(function(t) { + var t = lg(tl(this.container, "li[data-pc-section=\"item\"][data-p-disabled=\"false\"]")).findIndex(function(t) { return t.id === e; }); return t > -1 ? t - 1 : 0; }, changeFocusedOptionIndex: function(e) { - var t = Yc(this.container, "li[data-pc-section=\"item\"][data-p-disabled=\"false\"]"), n = e >= t.length ? t.length - 1 : e < 0 ? 0 : e; + var t = tl(this.container, "li[data-pc-section=\"item\"][data-p-disabled=\"false\"]"), n = e >= t.length ? t.length - 1 : e < 0 ? 0 : e; n > -1 && (this.focusedOptionIndex = t[n].getAttribute("id")); }, toggle: function(e, t) { @@ -11259,19 +11314,19 @@ var lg = { this.overlayVisible = !1, this.target = null; }, onEnter: function(e) { - Vc(e, { + qc(e, { position: "absolute", top: "0" - }), this.alignOverlay(), this.bindOutsideClickListener(), this.bindResizeListener(), this.bindScrollListener(), this.autoZIndex && gl.set("menu", e, this.baseZIndex || this.$primevue.config.zIndex.menu), this.popup && J(this.list), this.$emit("show"); + }), this.alignOverlay(), this.bindOutsideClickListener(), this.bindResizeListener(), this.bindScrollListener(), this.autoZIndex && Sl.set("menu", e, this.baseZIndex || this.$primevue.config.zIndex.menu), this.popup && J(this.list), this.$emit("show"); }, onLeave: function() { this.unbindOutsideClickListener(), this.unbindResizeListener(), this.unbindScrollListener(), this.$emit("hide"); }, onAfterLeave: function(e) { - this.autoZIndex && gl.clear(e); + this.autoZIndex && Sl.clear(e); }, alignOverlay: function() { - Bc(this.container, this.target), Hc(this.target) > Hc(this.container) && (this.container.style.minWidth = Hc(this.target) + "px"); + Kc(this.container, this.target), Jc(this.target) > Jc(this.container) && (this.container.style.minWidth = Jc(this.target) + "px"); }, bindOutsideClickListener: function() { var e = this; @@ -11285,7 +11340,7 @@ var lg = { }, bindScrollListener: function() { var e = this; - this.scrollHandler ||= new Cp(this.target, function() { + this.scrollHandler ||= new kp(this.target, function() { e.overlayVisible && e.hide(); }), this.scrollHandler.bindScrollListener(); }, @@ -11295,7 +11350,7 @@ var lg = { bindResizeListener: function() { var e = this; this.resizeListener || (this.resizeListener = function() { - e.overlayVisible && !dl() && e.hide(); + e.overlayVisible && !_l() && e.hide(); }, window.addEventListener("resize", this.resizeListener)); }, unbindResizeListener: function() { @@ -11311,7 +11366,7 @@ var lg = { return typeof e.label == "function" ? e.label() : e.label; }, onOverlayClick: function(e) { - om.emit("overlay-click", { + fm.emit("overlay-click", { originalEvent: e, target: this.target }); @@ -11332,31 +11387,31 @@ var lg = { } }, components: { - PVMenuitem: Xh, - Portal: sm + PVMenuitem: ng, + Portal: pm } -}, ug = ["id", "data-p"], dg = [ +}, gg = ["id", "data-p"], _g = [ "id", "tabindex", "aria-activedescendant", "aria-label", "aria-labelledby" -], fg = ["id"]; -function pg(e, t, n, r, i, a) { +], vg = ["id"]; +function yg(e, t, n, r, i, a) { var o = F("PVMenuitem"), s = F("Portal"); - return R(), B(s, { + return z(), V(s, { appendTo: e.appendTo, disabled: !e.popup }, { default: P(function() { - return [H(Fo, W({ + return [U(Vo, G({ name: "p-anchored-overlay", onEnter: a.onEnter, onLeave: a.onLeave, onAfterLeave: a.onAfterLeave }, e.ptm("transition")), { default: P(function() { - return [!e.popup || i.overlayVisible ? (R(), z("div", W({ + return [!e.popup || i.overlayVisible ? (z(), B("div", G({ key: 0, ref: a.containerRef, id: e.$id, @@ -11366,11 +11421,11 @@ function pg(e, t, n, r, i, a) { }, "data-p": a.dataP }, e.ptmi("root")), [ - e.$slots.start ? (R(), z("div", W({ + e.$slots.start ? (z(), B("div", G({ key: 0, class: e.cx("start") - }, e.ptm("start")), [I(e.$slots, "start")], 16)) : U("", !0), - V("ul", W({ + }, e.ptm("start")), [I(e.$slots, "start")], 16)) : W("", !0), + H("ul", G({ ref: a.listRef, id: e.$id + "_list", class: e.cx("list"), @@ -11388,16 +11443,16 @@ function pg(e, t, n, r, i, a) { onKeydown: t[2] ||= function() { return a.onListKeyDown && a.onListKeyDown.apply(a, arguments); } - }, e.ptm("list")), [(R(!0), z(L, null, mi(e.model, function(t, n) { - return R(), z(L, { key: a.label(t) + n.toString() }, [t.items && a.visible(t) && !t.separator ? (R(), z(L, { key: 0 }, [t.items ? (R(), z("li", W({ + }, e.ptm("list")), [(z(!0), B(L, null, _i(e.model, function(t, n) { + return z(), B(L, { key: a.label(t) + n.toString() }, [t.items && a.visible(t) && !t.separator ? (z(), B(L, { key: 0 }, [t.items ? (z(), B("li", G({ key: 0, id: e.$id + "_" + n, class: [e.cx("submenuLabel"), t.class], role: "none" }, { ref_for: !0 }, e.ptm("submenuLabel")), [I(e.$slots, e.$slots.submenulabel ? "submenulabel" : "submenuheader", { item: t }, function() { - return [qa(O(a.label(t)), 1)]; - })], 16, fg)) : U("", !0), (R(!0), z(L, null, mi(t.items, function(r, i) { - return R(), z(L, { key: r.label + n + "_" + i }, [a.visible(r) && !r.separator ? (R(), B(o, { + return [Za(k(a.label(t)), 1)]; + })], 16, vg)) : W("", !0), (z(!0), B(L, null, _i(t.items, function(r, i) { + return z(), B(L, { key: r.label + n + "_" + i }, [a.visible(r) && !r.separator ? (z(), V(o, { key: 0, id: e.$id + "_" + n + "_" + i, item: r, @@ -11416,18 +11471,18 @@ function pg(e, t, n, r, i, a) { "onItemClick", "onItemMousemove", "pt" - ])) : a.visible(r) && r.separator ? (R(), z("li", W({ + ])) : a.visible(r) && r.separator ? (z(), B("li", G({ key: "separator" + n + i, class: [e.cx("separator"), t.class], style: r.style, role: "separator" - }, { ref_for: !0 }, e.ptm("separator")), null, 16)) : U("", !0)], 64); - }), 128))], 64)) : a.visible(t) && t.separator ? (R(), z("li", W({ + }, { ref_for: !0 }, e.ptm("separator")), null, 16)) : W("", !0)], 64); + }), 128))], 64)) : a.visible(t) && t.separator ? (z(), B("li", G({ key: "separator" + n.toString(), class: [e.cx("separator"), t.class], style: t.style, role: "separator" - }, { ref_for: !0 }, e.ptm("separator")), null, 16)) : (R(), B(o, { + }, { ref_for: !0 }, e.ptm("separator")), null, 16)) : (z(), V(o, { key: a.label(t) + n.toString(), id: e.$id + "_" + n, item: t, @@ -11449,12 +11504,12 @@ function pg(e, t, n, r, i, a) { "onItemMousemove", "pt" ]))], 64); - }), 128))], 16, dg), - e.$slots.end ? (R(), z("div", W({ + }), 128))], 16, _g), + e.$slots.end ? (z(), B("div", G({ key: 1, class: e.cx("end") - }, e.ptm("end")), [I(e.$slots, "end")], 16)) : U("", !0) - ], 16, ug)) : U("", !0)]; + }, e.ptm("end")), [I(e.$slots, "end")], 16)) : W("", !0) + ], 16, gg)) : W("", !0)]; }), _: 3 }, 16, [ @@ -11466,9 +11521,9 @@ function pg(e, t, n, r, i, a) { _: 3 }, 8, ["appendTo", "disabled"]); } -lg.render = pg; +hg.render = yg; // node_modules/primevue/listbox/style/index.mjs -var mg = X.extend({ +var bg = X.extend({ name: "listbox", style: "\n .p-listbox {\n display: block;\n background: dt('listbox.background');\n color: dt('listbox.color');\n border: 1px solid dt('listbox.border.color');\n border-radius: dt('listbox.border.radius');\n transition:\n background dt('listbox.transition.duration'),\n color dt('listbox.transition.duration'),\n border-color dt('listbox.transition.duration'),\n box-shadow dt('listbox.transition.duration'),\n outline-color dt('listbox.transition.duration');\n outline-color: transparent;\n box-shadow: dt('listbox.shadow');\n }\n\n .p-listbox.p-disabled {\n opacity: 1;\n background: dt('listbox.disabled.background');\n color: dt('listbox.disabled.color');\n }\n\n .p-listbox.p-disabled .p-listbox-option {\n color: dt('listbox.disabled.color');\n }\n\n .p-listbox.p-invalid {\n border-color: dt('listbox.invalid.border.color');\n }\n\n .p-listbox-header {\n padding: dt('listbox.list.header.padding');\n }\n\n .p-listbox-filter {\n width: 100%;\n }\n\n .p-listbox-list-container {\n overflow: auto;\n }\n\n .p-listbox-list {\n list-style-type: none;\n margin: 0;\n padding: dt('listbox.list.padding');\n outline: 0 none;\n display: flex;\n flex-direction: column;\n gap: dt('listbox.list.gap');\n }\n\n .p-listbox-option {\n display: flex;\n align-items: center;\n cursor: pointer;\n position: relative;\n overflow: hidden;\n padding: dt('listbox.option.padding');\n border: 0 none;\n border-radius: dt('listbox.option.border.radius');\n color: dt('listbox.option.color');\n transition:\n background dt('listbox.transition.duration'),\n color dt('listbox.transition.duration'),\n border-color dt('listbox.transition.duration'),\n box-shadow dt('listbox.transition.duration'),\n outline-color dt('listbox.transition.duration');\n }\n\n .p-listbox-striped li:nth-child(even of .p-listbox-option) {\n background: dt('listbox.option.striped.background');\n }\n\n .p-listbox .p-listbox-list .p-listbox-option.p-listbox-option-selected {\n background: dt('listbox.option.selected.background');\n color: dt('listbox.option.selected.color');\n }\n\n .p-listbox:not(.p-disabled) .p-listbox-option.p-listbox-option-selected.p-focus {\n background: dt('listbox.option.selected.focus.background');\n color: dt('listbox.option.selected.focus.color');\n }\n\n .p-listbox:not(.p-disabled) .p-listbox-option:not(.p-listbox-option-selected):not(.p-disabled).p-focus {\n background: dt('listbox.option.focus.background');\n color: dt('listbox.option.focus.color');\n }\n\n .p-listbox:not(.p-disabled) .p-listbox-option:not(.p-listbox-option-selected):not(.p-disabled):hover {\n background: dt('listbox.option.focus.background');\n color: dt('listbox.option.focus.color');\n }\n\n .p-listbox-option-blank-icon {\n flex-shrink: 0;\n }\n\n .p-listbox-option-check-icon {\n position: relative;\n flex-shrink: 0;\n margin-inline-start: dt('listbox.checkmark.gutter.start');\n margin-inline-end: dt('listbox.checkmark.gutter.end');\n color: dt('listbox.checkmark.color');\n }\n\n .p-listbox-option-group {\n margin: 0;\n padding: dt('listbox.option.group.padding');\n color: dt('listbox.option.group.color');\n background: dt('listbox.option.group.background');\n font-weight: dt('listbox.option.group.font.weight');\n }\n\n .p-listbox-empty-message {\n padding: dt('listbox.empty.message.padding');\n }\n\n .p-listbox-fluid {\n width: 100%;\n }\n", classes: { @@ -11498,9 +11553,9 @@ var mg = X.extend({ optionBlankIcon: "p-listbox-option-blank-icon", emptyMessage: "p-listbox-empty-message" } -}), hg = { +}), xg = { name: "BaseListbox", - extends: Ff, + extends: Vf, props: { options: Array, optionLabel: null, @@ -11602,7 +11657,7 @@ var mg = X.extend({ default: null } }, - style: mg, + style: bg, provide: function() { return { $pcListbox: this, @@ -11610,33 +11665,33 @@ var mg = X.extend({ }; } }; -function gg(e) { - return bg(e) || yg(e) || vg(e) || _g(); +function Sg(e) { + return Eg(e) || Tg(e) || wg(e) || Cg(); } -function _g() { +function Cg() { throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function vg(e, t) { +function wg(e, t) { if (e) { - if (typeof e == "string") return xg(e, t); + if (typeof e == "string") return Dg(e, t); var n = {}.toString.call(e).slice(8, -1); - return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? xg(e, t) : void 0; + return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? Dg(e, t) : void 0; } } -function yg(e) { +function Tg(e) { if (typeof Symbol < "u" && e[Symbol.iterator] != null || e["@@iterator"] != null) return Array.from(e); } -function bg(e) { - if (Array.isArray(e)) return xg(e); +function Eg(e) { + if (Array.isArray(e)) return Dg(e); } -function xg(e, t) { +function Dg(e, t) { (t == null || t > e.length) && (t = e.length); for (var n = 0, r = Array(t); n < t; n++) r[n] = e[n]; return r; } -var Sg = { +var Og = { name: "Listbox", - extends: hg, + extends: xg, inheritAttrs: !1, emits: [ "change", @@ -11670,13 +11725,13 @@ var Sg = { return this.virtualScrollerDisabled ? e : t && t(e).index; }, getOptionLabel: function(e) { - return this.optionLabel ? oc(e, this.optionLabel) : typeof e == "string" || typeof e == "number" || typeof e == "boolean" ? e : null; + return this.optionLabel ? fc(e, this.optionLabel) : typeof e == "string" || typeof e == "number" || typeof e == "boolean" ? e : null; }, getOptionValue: function(e) { - return this.optionValue ? oc(e, this.optionValue) : e; + return this.optionValue ? fc(e, this.optionValue) : e; }, getOptionRenderKey: function(e, t) { - return (this.dataKey ? oc(e, this.dataKey) : this.getOptionLabel(e)) + "_" + t; + return (this.dataKey ? fc(e, this.dataKey) : this.getOptionLabel(e)) + "_" + t; }, getPTOptions: function(e, t, n, r) { return this.ptm(r, { context: { @@ -11686,16 +11741,16 @@ var Sg = { } }); }, isOptionDisabled: function(e) { - return this.optionDisabled ? oc(e, this.optionDisabled) : !1; + return this.optionDisabled ? fc(e, this.optionDisabled) : !1; }, isOptionGroup: function(e) { return this.optionGroupLabel && e.optionGroup && e.group; }, getOptionGroupLabel: function(e) { - return oc(e, this.optionGroupLabel); + return fc(e, this.optionGroupLabel); }, getOptionGroupChildren: function(e) { - return oc(e, this.optionGroupChildren); + return fc(e, this.optionGroupChildren); }, getAriaPosInset: function(e) { var t = this; @@ -11705,11 +11760,11 @@ var Sg = { }, onFirstHiddenFocus: function() { J(this.list); - var e = $c(this.$el, ":not([data-p-hidden-focusable=\"true\"])"); - this.$refs.lastHiddenFocusableElement.tabIndex = Kc(e) ? void 0 : -1, this.$refs.firstHiddenFocusableElement.tabIndex = -1; + var e = al(this.$el, ":not([data-p-hidden-focusable=\"true\"])"); + this.$refs.lastHiddenFocusableElement.tabIndex = Qc(e) ? void 0 : -1, this.$refs.firstHiddenFocusableElement.tabIndex = -1; }, onLastHiddenFocus: function(e) { - e.relatedTarget === this.list ? (J($c(this.$el, ":not([data-p-hidden-focusable=\"true\"])")), this.$refs.firstHiddenFocusableElement.tabIndex = void 0) : J(this.$refs.firstHiddenFocusableElement), this.$refs.lastHiddenFocusableElement.tabIndex = -1; + e.relatedTarget === this.list ? (J(al(this.$el, ":not([data-p-hidden-focusable=\"true\"])")), this.$refs.firstHiddenFocusableElement.tabIndex = void 0) : J(this.$refs.firstHiddenFocusableElement), this.$refs.lastHiddenFocusableElement.tabIndex = -1; }, onFocusout: function(e) { !this.$el.contains(e.relatedTarget) && this.$refs.lastHiddenFocusableElement && this.$refs.firstHiddenFocusableElement && (this.$refs.lastHiddenFocusableElement.tabIndex = this.$refs.firstHiddenFocusableElement.tabIndex = void 0); @@ -11761,7 +11816,7 @@ var Sg = { this.updateModel(e, r), e.preventDefault(); break; } - !n && yc(e.key) && (this.searchOptions(e, e.key), e.preventDefault()); + !n && Tc(e.key) && (this.searchOptions(e, e.key), e.preventDefault()); } }, onOptionSelect: function(e, t) { @@ -11798,8 +11853,8 @@ var Sg = { var n = this.isSelected(t), r = null; if (!this.optionTouched && this.metaKeySelection) { var i = e.metaKey || e.ctrlKey; - n ? r = i ? this.removeOption(t) : [this.getOptionValue(t)] : (r = i && this.d_value || [], r = [].concat(gg(r), [this.getOptionValue(t)])); - } else r = n ? this.removeOption(t) : [].concat(gg(this.d_value || []), [this.getOptionValue(t)]); + n ? r = i ? this.removeOption(t) : [this.getOptionValue(t)] : (r = i && this.d_value || [], r = [].concat(Sg(r), [this.getOptionValue(t)])); + } else r = n ? this.removeOption(t) : [].concat(Sg(this.d_value || []), [this.getOptionValue(t)]); this.updateModel(e, r); }, onOptionSelectRange: function(e) { @@ -11906,7 +11961,7 @@ var Sg = { return this.isValidOption(e) && this.isSelected(e); }, isEquals: function(e, t) { - return sc(e, t, this.equalityKey); + return pc(e, t, this.equalityKey); }, isSelected: function(e) { var t = this, n = this.getOptionValue(e); @@ -11922,7 +11977,7 @@ var Sg = { }, findLastOptionIndex: function() { var e = this; - return fc(this.visibleOptions, function(t) { + return vc(this.visibleOptions, function(t) { return e.isValidOption(t); }); }, @@ -11933,7 +11988,7 @@ var Sg = { return n > -1 ? n + e + 1 : e; }, findPrevOptionIndex: function(e) { - var t = this, n = e > 0 ? fc(this.visibleOptions.slice(0, e), function(e) { + var t = this, n = e > 0 ? vc(this.visibleOptions.slice(0, e), function(e) { return t.isValidOption(e); }) : -1; return n > -1 ? n : e; @@ -11962,7 +12017,7 @@ var Sg = { }, findLastSelectedOptionIndex: function() { var e = this; - return this.$filled ? fc(this.visibleOptions, function(t) { + return this.$filled ? vc(this.visibleOptions, function(t) { return e.isValidSelectedOption(t); }) : -1; }, @@ -11973,7 +12028,7 @@ var Sg = { return n > -1 ? n + e + 1 : -1; }, findPrevSelectedOptionIndex: function(e) { - var t = this, n = this.$filled && e > 0 ? fc(this.visibleOptions.slice(0, e), function(e) { + var t = this, n = this.$filled && e > 0 ? vc(this.visibleOptions.slice(0, e), function(e) { return t.isValidSelectedOption(e); }) : -1; return n > -1 ? n : -1; @@ -12007,7 +12062,7 @@ var Sg = { removeOption: function(e) { var t = this; return this.d_value.filter(function(n) { - return !sc(n, t.getOptionValue(e), t.equalityKey); + return !pc(n, t.getOptionValue(e), t.equalityKey); }); }, changeFocusedOptionIndex: function(e, t) { @@ -12016,7 +12071,7 @@ var Sg = { scrollInView: function() { var e = this, t = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : -1; this.$nextTick(function() { - var n = t === -1 ? e.focusedOptionId : `${e.$id}_${t}`, r = Xc(e.list, `li[id="${n}"]`); + var n = t === -1 ? e.focusedOptionId : `${e.$id}_${t}`, r = nl(e.list, `li[id="${n}"]`); r ? r.scrollIntoView && r.scrollIntoView({ block: "nearest", inline: "nearest", @@ -12042,16 +12097,16 @@ var Sg = { }, computed: { optionsListFlat: function() { - return this.filterValue ? Zl.filter(this.options, this.searchFields, this.filterValue, this.filterMatchMode, this.filterLocale) : this.options; + return this.filterValue ? ru.filter(this.options, this.searchFields, this.filterValue, this.filterMatchMode, this.filterLocale) : this.options; }, optionsListGroup: function() { var e = this, t = []; return (this.options || []).forEach(function(n) { - var r = e.getOptionGroupChildren(n) || [], i = e.filterValue ? Zl.filter(r, e.searchFields, e.filterValue, e.filterMatchMode, e.filterLocale) : r; + var r = e.getOptionGroupChildren(n) || [], i = e.filterValue ? ru.filter(r, e.searchFields, e.filterValue, e.filterMatchMode, e.filterLocale) : r; i != null && i.length && t.push.apply(t, [{ optionGroup: n, group: !0 - }].concat(gg(i))); + }].concat(Sg(i))); }), t; }, visibleOptions: function() { @@ -12106,24 +12161,24 @@ var Sg = { }); } }, - directives: { ripple: nf }, + directives: { ripple: lf }, components: { - InputText: ap, - VirtualScroller: _m, - InputIcon: im, - IconField: nm, - SearchIcon: Bp, - CheckIcon: yf, - BlankIcon: wp + InputText: dp, + VirtualScroller: Cm, + InputIcon: um, + IconField: cm, + SearchIcon: Kp, + CheckIcon: Tf, + BlankIcon: Ap } -}, Cg = ["id", "data-p"], wg = ["tabindex"], Tg = [ +}, kg = ["id", "data-p"], Ag = ["tabindex"], jg = [ "id", "aria-multiselectable", "aria-label", "aria-labelledby", "aria-activedescendant", "aria-disabled" -], Eg = ["id"], Dg = [ +], Mg = ["id"], Ng = [ "id", "aria-label", "aria-selected", @@ -12137,10 +12192,10 @@ var Sg = { "data-p-selected", "data-p-focused", "data-p-disabled" -], Og = ["tabindex"]; -function kg(e, t, n, r, i, a) { - var o = F("InputText"), s = F("SearchIcon"), c = F("InputIcon"), l = F("IconField"), u = F("CheckIcon"), d = F("BlankIcon"), f = F("VirtualScroller"), p = di("ripple"); - return R(), z("div", W({ +], Pg = ["tabindex"]; +function Fg(e, t, n, r, i, a) { + var o = F("InputText"), s = F("SearchIcon"), c = F("InputIcon"), l = F("IconField"), u = F("CheckIcon"), d = F("BlankIcon"), f = F("VirtualScroller"), p = mi("ripple"); + return z(), B("div", G({ id: e.$id, class: e.cx("root"), onFocusout: t[7] ||= function() { @@ -12148,7 +12203,7 @@ function kg(e, t, n, r, i, a) { }, "data-p": a.containerDataP }, e.ptmi("root")), [ - V("span", W({ + H("span", G({ ref: "firstHiddenFocusableElement", role: "presentation", "aria-hidden": "true", @@ -12160,29 +12215,29 @@ function kg(e, t, n, r, i, a) { }, e.ptm("hiddenFirstFocusableEl"), { "data-p-hidden-accessible": !0, "data-p-hidden-focusable": !0 - }), null, 16, wg), - e.$slots.header ? (R(), z("div", W({ + }), null, 16, Ag), + e.$slots.header ? (z(), B("div", G({ key: 0, class: e.cx("header") }, e.ptm("header")), [I(e.$slots, "header", { value: e.d_value, options: a.visibleOptions - })], 16)) : U("", !0), - e.filter ? (R(), z("div", W({ + })], 16)) : W("", !0), + e.filter ? (z(), B("div", G({ key: 1, class: e.cx("header") - }, e.ptm("header")), [H(l, { + }, e.ptm("header")), [U(l, { unstyled: e.unstyled, pt: e.ptm("pcFilterContainer") }, { default: P(function() { - return [H(o, { + return [U(o, { modelValue: i.filterValue, "onUpdate:modelValue": t[1] ||= function(e) { return i.filterValue = e; }, type: "text", - class: D(e.cx("pcFilter")), + class: O(e.cx("pcFilter")), placeholder: e.filterPlaceholder, role: "searchbox", autocomplete: "off", @@ -12206,40 +12261,40 @@ function kg(e, t, n, r, i, a) { "onInput", "onKeydown", "pt" - ]), H(c, { + ]), U(c, { unstyled: e.unstyled, pt: e.ptm("pcFilterIconContainer") }, { default: P(function() { return [I(e.$slots, "filtericon", {}, function() { - return [e.filterIcon ? (R(), z("span", W({ + return [e.filterIcon ? (z(), B("span", G({ key: 0, class: e.filterIcon - }, e.ptm("filterIcon")), null, 16)) : (R(), B(s, ve(W({ key: 1 }, e.ptm("filterIcon"))), null, 16))]; + }, e.ptm("filterIcon")), null, 16)) : (z(), V(s, _e(G({ key: 1 }, e.ptm("filterIcon"))), null, 16))]; })]; }), _: 3 }, 8, ["unstyled", "pt"])]; }), _: 3 - }, 8, ["unstyled", "pt"]), V("span", W({ + }, 8, ["unstyled", "pt"]), H("span", G({ role: "status", "aria-live": "polite", class: "p-hidden-accessible" - }, e.ptm("hiddenFilterResult"), { "data-p-hidden-accessible": !0 }), O(a.filterResultMessageText), 17)], 16)) : U("", !0), - V("div", W({ + }, e.ptm("hiddenFilterResult"), { "data-p-hidden-accessible": !0 }), k(a.filterResultMessageText), 17)], 16)) : W("", !0), + H("div", G({ class: e.cx("listContainer"), style: [{ "max-height": a.virtualScrollerDisabled ? e.scrollHeight : "" }, e.listStyle] - }, e.ptm("listContainer")), [H(f, W({ ref: a.virtualScrollerRef }, e.virtualScrollerOptions, { + }, e.ptm("listContainer")), [U(f, G({ ref: a.virtualScrollerRef }, e.virtualScrollerOptions, { items: a.visibleOptions, style: [{ height: e.scrollHeight }, e.listStyle], tabindex: -1, disabled: a.virtualScrollerDisabled, pt: e.ptm("virtualScroller") - }), hi({ + }), vi({ content: P(function(n) { var r = n.styleClass, o = n.contentRef, s = n.items, c = n.getItemOptions, l = n.contentStyle, f = n.itemSize; - return [V("ul", W({ + return [H("ul", G({ ref: function(e) { return a.listRef(e, o); }, @@ -12262,8 +12317,8 @@ function kg(e, t, n, r, i, a) { onKeydown: t[5] ||= function() { return a.onListKeyDown && a.onListKeyDown.apply(a, arguments); } - }, e.ptm("list")), [(R(!0), z(L, null, mi(s, function(n, r) { - return R(), z(L, { key: a.getOptionRenderKey(n, a.getOptionIndex(r, c)) }, [a.isOptionGroup(n) ? (R(), z("li", W({ + }, e.ptm("list")), [(z(!0), B(L, null, _i(s, function(n, r) { + return z(), B(L, { key: a.getOptionRenderKey(n, a.getOptionIndex(r, c)) }, [a.isOptionGroup(n) ? (z(), B("li", G({ key: 0, id: e.$id + "_" + a.getOptionIndex(r, c), style: { height: f ? f + "px" : void 0 }, @@ -12273,8 +12328,8 @@ function kg(e, t, n, r, i, a) { option: n.optionGroup, index: a.getOptionIndex(r, c) }, function() { - return [qa(O(a.getOptionGroupLabel(n.optionGroup)), 1)]; - })], 16, Eg)) : Gn((R(), z("li", W({ + return [Za(k(a.getOptionGroupLabel(n.optionGroup)), 1)]; + })], 16, Mg)) : qn((z(), B("li", G({ key: 1, id: e.$id + "_" + a.getOptionIndex(r, c), style: { height: f ? f + "px" : void 0 }, @@ -12308,32 +12363,32 @@ function kg(e, t, n, r, i, a) { "data-p-selected": !e.checkmark && a.isSelected(n), "data-p-focused": i.focusedOptionIndex === a.getOptionIndex(r, c), "data-p-disabled": a.isOptionDisabled(n) - }), [e.checkmark ? (R(), z(L, { key: 0 }, [a.isSelected(n) ? (R(), B(u, W({ + }), [e.checkmark ? (z(), B(L, { key: 0 }, [a.isSelected(n) ? (z(), V(u, G({ key: 0, class: e.cx("optionCheckIcon") - }, { ref_for: !0 }, e.ptm("optionCheckIcon")), null, 16, ["class"])) : (R(), B(d, W({ + }, { ref_for: !0 }, e.ptm("optionCheckIcon")), null, 16, ["class"])) : (z(), V(d, G({ key: 1, class: e.cx("optionBlankIcon") - }, { ref_for: !0 }, e.ptm("optionBlankIcon")), null, 16, ["class"]))], 64)) : U("", !0), I(e.$slots, "option", { + }, { ref_for: !0 }, e.ptm("optionBlankIcon")), null, 16, ["class"]))], 64)) : W("", !0), I(e.$slots, "option", { option: n, selected: a.isSelected(n), index: a.getOptionIndex(r, c) }, function() { - return [qa(O(a.getOptionLabel(n)), 1)]; - })], 16, Dg)), [[p]])], 64); - }), 128)), i.filterValue && (!s || s && s.length === 0) ? (R(), z("li", W({ + return [Za(k(a.getOptionLabel(n)), 1)]; + })], 16, Ng)), [[p]])], 64); + }), 128)), i.filterValue && (!s || s && s.length === 0) ? (z(), B("li", G({ key: 0, class: e.cx("emptyMessage"), role: "option" }, e.ptm("emptyMessage")), [I(e.$slots, "emptyfilter", {}, function() { - return [qa(O(a.emptyFilterMessageText), 1)]; - })], 16)) : !e.options || e.options && e.options.length === 0 ? (R(), z("li", W({ + return [Za(k(a.emptyFilterMessageText), 1)]; + })], 16)) : !e.options || e.options && e.options.length === 0 ? (z(), B("li", G({ key: 1, class: e.cx("emptyMessage"), role: "option" }, e.ptm("emptyMessage")), [I(e.$slots, "empty", {}, function() { - return [qa(O(a.emptyMessageText), 1)]; - })], 16)) : U("", !0)], 16, Tg)]; + return [Za(k(a.emptyMessageText), 1)]; + })], 16)) : W("", !0)], 16, jg)]; }), _: 2 }, [e.$slots.loader ? { @@ -12353,18 +12408,18 @@ function kg(e, t, n, r, i, a) { value: e.d_value, options: a.visibleOptions }), - !e.options || e.options && e.options.length === 0 ? (R(), z("span", W({ + !e.options || e.options && e.options.length === 0 ? (z(), B("span", G({ key: 2, role: "status", "aria-live": "polite", class: "p-hidden-accessible" - }, e.ptm("hiddenEmptyMessage"), { "data-p-hidden-accessible": !0 }), O(a.emptyMessageText), 17)) : U("", !0), - V("span", W({ + }, e.ptm("hiddenEmptyMessage"), { "data-p-hidden-accessible": !0 }), k(a.emptyMessageText), 17)) : W("", !0), + H("span", G({ role: "status", "aria-live": "polite", class: "p-hidden-accessible" - }, e.ptm("hiddenSelectedMessage"), { "data-p-hidden-accessible": !0 }), O(a.selectedMessageText), 17), - V("span", W({ + }, e.ptm("hiddenSelectedMessage"), { "data-p-hidden-accessible": !0 }), k(a.selectedMessageText), 17), + H("span", G({ ref: "lastHiddenFocusableElement", role: "presentation", "aria-hidden": "true", @@ -12376,12 +12431,12 @@ function kg(e, t, n, r, i, a) { }, e.ptm("hiddenLastFocusableEl"), { "data-p-hidden-accessible": !0, "data-p-hidden-focusable": !0 - }), null, 16, Og) - ], 16, Cg); + }), null, 16, Pg) + ], 16, kg); } -Sg.render = kg; +Og.render = Fg; // node_modules/primevue/tree/style/index.mjs -var Ag = X.extend({ +var Ig = X.extend({ name: "tree", style: "\n .p-tree {\n display: block;\n background: dt('tree.background');\n color: dt('tree.color');\n padding: dt('tree.padding');\n position: relative;\n }\n\n .p-tree-root-children,\n .p-tree-node-children {\n display: flex;\n list-style-type: none;\n flex-direction: column;\n margin: 0;\n gap: dt('tree.gap');\n }\n\n .p-tree-root-children {\n padding: 0;\n padding-block-start: dt('tree.gap');\n }\n\n .p-tree-node-children {\n padding: 0;\n padding-block-start: dt('tree.gap');\n padding-inline-start: dt('tree.indent');\n }\n\n .p-tree-node {\n padding: 0;\n outline: 0 none;\n }\n\n .p-tree-node-content {\n border-radius: dt('tree.node.border.radius');\n padding: dt('tree.node.padding');\n display: flex;\n align-items: center;\n outline-color: transparent;\n color: dt('tree.node.color');\n gap: dt('tree.node.gap');\n transition:\n background dt('tree.transition.duration'),\n color dt('tree.transition.duration'),\n outline-color dt('tree.transition.duration'),\n box-shadow dt('tree.transition.duration');\n }\n\n .p-tree-node-content[data-p-dragging] {\n outline: 1px dashed dt('primary.color');\n outline-offset: -1px;\n }\n\n .p-tree-node-content[data-pc-section=\"drag-image\"] {\n background: dt('tree.background');\n }\n\n .p-tree-node:focus-visible > .p-tree-node-content {\n box-shadow: dt('tree.node.focus.ring.shadow');\n outline: dt('tree.node.focus.ring.width') dt('tree.node.focus.ring.style') dt('tree.node.focus.ring.color');\n outline-offset: dt('tree.node.focus.ring.offset');\n }\n\n .p-tree-node-content.p-tree-node-selectable:not(.p-tree-node-selected):hover {\n background: dt('tree.node.hover.background');\n color: dt('tree.node.hover.color');\n }\n\n .p-tree-node-content.p-tree-node-selectable:not(.p-tree-node-selected):hover .p-tree-node-icon {\n color: dt('tree.node.icon.hover.color');\n }\n\n .p-tree-node-content.p-tree-node-selected {\n background: dt('tree.node.selected.background');\n color: dt('tree.node.selected.color');\n }\n\n .p-tree-node-content.p-tree-node-selected .p-tree-node-toggle-button {\n color: inherit;\n }\n\n .p-tree-node-content.p-tree-node-dragover {\n background: dt('tree.node.hover.background');\n color: dt('tree.node.hover.color');\n }\n\n .p-tree-node-content:focus-visible,\n .p-tree-node-content.p-tree-node-contextmenu-selected {\n box-shadow: dt('tree.node.focus.ring.shadow');\n outline: dt('tree.node.focus.ring.width') dt('tree.node.focus.ring.style') dt('tree.node.focus.ring.color');\n outline-offset: dt('tree.node.focus.ring.offset');\n }\n\n .p-tree-node-drop-point {\n outline: 1px solid dt('primary.color');\n }\n\n .p-tree-node-toggle-button {\n cursor: pointer;\n user-select: none;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n position: relative;\n flex-shrink: 0;\n width: dt('tree.node.toggle.button.size');\n height: dt('tree.node.toggle.button.size');\n color: dt('tree.node.toggle.button.color');\n border: 0 none;\n background: transparent;\n border-radius: dt('tree.node.toggle.button.border.radius');\n transition:\n background dt('tree.transition.duration'),\n color dt('tree.transition.duration'),\n border-color dt('tree.transition.duration'),\n outline-color dt('tree.transition.duration'),\n box-shadow dt('tree.transition.duration');\n outline-color: transparent;\n padding: 0;\n }\n\n .p-tree-node-toggle-button:enabled:hover {\n background: dt('tree.node.toggle.button.hover.background');\n color: dt('tree.node.toggle.button.hover.color');\n }\n\n .p-tree-node-content.p-tree-node-selected .p-tree-node-toggle-button:hover {\n background: dt('tree.node.toggle.button.selected.hover.background');\n color: dt('tree.node.toggle.button.selected.hover.color');\n }\n\n .p-tree-root {\n overflow: auto;\n }\n\n .p-tree-node-selectable {\n cursor: pointer;\n user-select: none;\n }\n\n .p-tree-node-leaf > .p-tree-node-content .p-tree-node-toggle-button {\n visibility: hidden;\n }\n\n .p-tree-node-icon {\n color: dt('tree.node.icon.color');\n transition: color dt('tree.transition.duration');\n }\n\n .p-tree-node-content.p-tree-node-selected .p-tree-node-icon {\n color: dt('tree.node.icon.selected.color');\n }\n\n .p-tree-filter {\n margin: dt('tree.filter.margin');\n }\n\n .p-tree-filter-input {\n width: 100%;\n }\n\n .p-tree-loading-icon {\n font-size: dt('tree.loading.icon.size');\n width: dt('tree.loading.icon.size');\n height: dt('tree.loading.icon.size');\n }\n\n .p-tree .p-tree-mask {\n position: absolute;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .p-tree-flex-scrollable {\n display: flex;\n flex: 1;\n height: 100%;\n flex-direction: column;\n }\n\n .p-tree-flex-scrollable .p-tree-root {\n flex: 1;\n }\n", classes: { @@ -12424,51 +12479,51 @@ var Ag = X.extend({ emptyMessage: "p-tree-empty-message", dropPoint: "p-tree-node-drop-point" } -}), jg = { +}), Lg = { name: "ChevronRightIcon", - extends: hd + extends: xd }; -function Mg(e) { - return Ig(e) || Fg(e) || Pg(e) || Ng(); +function Rg(e) { + return Hg(e) || Vg(e) || Bg(e) || zg(); } -function Ng() { +function zg() { throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function Pg(e, t) { +function Bg(e, t) { if (e) { - if (typeof e == "string") return Lg(e, t); + if (typeof e == "string") return Ug(e, t); var n = {}.toString.call(e).slice(8, -1); - return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? Lg(e, t) : void 0; + return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? Ug(e, t) : void 0; } } -function Fg(e) { +function Vg(e) { if (typeof Symbol < "u" && e[Symbol.iterator] != null || e["@@iterator"] != null) return Array.from(e); } -function Ig(e) { - if (Array.isArray(e)) return Lg(e); +function Hg(e) { + if (Array.isArray(e)) return Ug(e); } -function Lg(e, t) { +function Ug(e, t) { (t == null || t > e.length) && (t = e.length); for (var n = 0, r = Array(t); n < t; n++) r[n] = e[n]; return r; } -function Rg(e, t, n, r, i, a) { - return R(), z("svg", W({ +function Wg(e, t, n, r, i, a) { + return z(), B("svg", G({ width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg" - }, e.pti()), Mg(t[0] ||= [V("path", { + }, e.pti()), Rg(t[0] ||= [H("path", { d: "M4.38708 13C4.28408 13.0005 4.18203 12.9804 4.08691 12.9409C3.99178 12.9014 3.9055 12.8433 3.83313 12.7701C3.68634 12.6231 3.60388 12.4238 3.60388 12.2161C3.60388 12.0084 3.68634 11.8091 3.83313 11.6622L8.50507 6.99022L3.83313 2.31827C3.69467 2.16968 3.61928 1.97313 3.62287 1.77005C3.62645 1.56698 3.70872 1.37322 3.85234 1.22959C3.99596 1.08597 4.18972 1.00371 4.3928 1.00012C4.59588 0.996539 4.79242 1.07192 4.94102 1.21039L10.1669 6.43628C10.3137 6.58325 10.3962 6.78249 10.3962 6.99022C10.3962 7.19795 10.3137 7.39718 10.1669 7.54416L4.94102 12.7701C4.86865 12.8433 4.78237 12.9014 4.68724 12.9409C4.59212 12.9804 4.49007 13.0005 4.38708 13Z", fill: "currentColor" }, null, -1)]), 16); } -jg.render = Rg; +Lg.render = Wg; // node_modules/primevue/tree/index.mjs -var zg = { +var Gg = { name: "BaseTree", - extends: sd, + extends: pd, props: { value: { type: null, @@ -12563,55 +12618,55 @@ var zg = { default: null } }, - style: Ag, + style: Ig, provide: function() { return { $pcTree: this, $parentInstance: this }; } -}, Bg = /* @__PURE__ */ Wt({ +}, Kg = /* @__PURE__ */ Ut({ isDragging: !1, dragNode: null, dragScope: null -}), Vg = /* @__PURE__ */ new Set(), Hg = /* @__PURE__ */ new Set(); -function Ug() { +}), qg = /* @__PURE__ */ new Set(), Jg = /* @__PURE__ */ new Set(); +function Yg() { return { - dragState: Bg, + dragState: Kg, startDrag: function(e) { - Bg.isDragging = !0, Bg.dragNode = e.node, Bg.dragScope = e.scope, Vg.forEach(function(t) { + Kg.isDragging = !0, Kg.dragNode = e.node, Kg.dragScope = e.scope, qg.forEach(function(t) { return t(e); }); }, stopDrag: function(e) { - Bg.isDragging = !1, Bg.dragNode = null, Bg.dragScope = null, Hg.forEach(function(t) { + Kg.isDragging = !1, Kg.dragNode = null, Kg.dragScope = null, Jg.forEach(function(t) { return t(e); }); }, onDragStart: function(e) { - return Vg.add(e), function() { - return Vg.delete(e); + return qg.add(e), function() { + return qg.delete(e); }; }, onDragStop: function(e) { - return Hg.add(e), function() { - return Hg.delete(e); + return Jg.add(e), function() { + return Jg.delete(e); }; } }; } -function Wg(e) { +function Xg(e) { "@babel/helpers - typeof"; - return Wg = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { + return Xg = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { return typeof e; } : function(e) { return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; - }, Wg(e); + }, Xg(e); } -function Gg(e, t) { +function Zg(e, t) { var n = typeof Symbol < "u" && e[Symbol.iterator] || e["@@iterator"]; if (!n) { - if (Array.isArray(e) || (n = Jg(e)) || t) { + if (Array.isArray(e) || (n = e_(e)) || t) { n && (e = n); var r = 0, i = function() {}; return { @@ -12651,31 +12706,31 @@ function Gg(e, t) { } }; } -function Kg(e) { - return Xg(e) || Yg(e) || Jg(e) || qg(); +function Qg(e) { + return n_(e) || t_(e) || e_(e) || $g(); } -function qg() { +function $g() { throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function Jg(e, t) { +function e_(e, t) { if (e) { - if (typeof e == "string") return Zg(e, t); + if (typeof e == "string") return r_(e, t); var n = {}.toString.call(e).slice(8, -1); - return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? Zg(e, t) : void 0; + return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? r_(e, t) : void 0; } } -function Yg(e) { +function t_(e) { if (typeof Symbol < "u" && e[Symbol.iterator] != null || e["@@iterator"] != null) return Array.from(e); } -function Xg(e) { - if (Array.isArray(e)) return Zg(e); +function n_(e) { + if (Array.isArray(e)) return r_(e); } -function Zg(e, t) { +function r_(e, t) { (t == null || t > e.length) && (t = e.length); for (var n = 0, r = Array(t); n < t; n++) r[n] = e[n]; return r; } -function Qg(e, t) { +function i_(e, t) { var n = Object.keys(e); if (Object.getOwnPropertySymbols) { var r = Object.getOwnPropertySymbols(e); @@ -12685,43 +12740,43 @@ function Qg(e, t) { } return n; } -function $g(e) { +function a_(e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t] == null ? {} : arguments[t]; - t % 2 ? Qg(Object(n), !0).forEach(function(t) { - e_(e, t, n[t]); - }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : Qg(Object(n)).forEach(function(t) { + t % 2 ? i_(Object(n), !0).forEach(function(t) { + o_(e, t, n[t]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : i_(Object(n)).forEach(function(t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t)); }); } return e; } -function e_(e, t, n) { - return (t = t_(t)) in e ? Object.defineProperty(e, t, { +function o_(e, t, n) { + return (t = s_(t)) in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e; } -function t_(e) { - var t = n_(e, "string"); - return Wg(t) == "symbol" ? t : t + ""; +function s_(e) { + var t = c_(e, "string"); + return Xg(t) == "symbol" ? t : t + ""; } -function n_(e, t) { - if (Wg(e) != "object" || !e) return e; +function c_(e, t) { + if (Xg(e) != "object" || !e) return e; var n = e[Symbol.toPrimitive]; if (n !== void 0) { var r = n.call(e, t); - if (Wg(r) != "object") return r; + if (Xg(r) != "object") return r; throw TypeError("@@toPrimitive must return a primitive value."); } return (t === "string" ? String : Number)(e); } -var r_ = { +var l_ = { name: "TreeNode", hostName: "Tree", - extends: sd, + extends: pd, emits: [ "node-toggle", "node-click", @@ -12821,7 +12876,7 @@ var r_ = { } }); }, onClick: function(e) { - this.toggleClicked || Zc(e.target, "[data-pc-section=\"nodetogglebutton\"]") || Zc(e.target.parentElement, "[data-pc-section=\"nodetogglebutton\"]") ? this.toggleClicked = !1 : (this.isCheckboxSelectionMode() ? this.node.selectable != 0 && this.toggleCheckbox() : this.$emit("node-click", { + this.toggleClicked || rl(e.target, "[data-pc-section=\"nodetogglebutton\"]") || rl(e.target.parentElement, "[data-pc-section=\"nodetogglebutton\"]") ? this.toggleClicked = !1 : (this.isCheckboxSelectionMode() ? this.node.selectable != 0 && this.toggleCheckbox() : this.$emit("node-click", { originalEvent: e, nodeTouched: this.nodeTouched, node: this.node @@ -12881,7 +12936,7 @@ var r_ = { })); }, onArrowLeft: function(e) { - var t = Xc(e.currentTarget, "[data-pc-section=\"nodetogglebutton\"]"); + var t = nl(e.currentTarget, "[data-pc-section=\"nodetogglebutton\"]"); if (this.level === 0 && !this.expanded) return !1; if (this.expanded && !this.leaf) return t.click(), !1; var n = this.findBeforeClickableNode(e.currentTarget); @@ -12899,7 +12954,7 @@ var r_ = { if (r.key === t.key) return e; if (r.children && r.children.length > 0) { var i = n.removeNodeFromTree(r.children, t); - e.push($g($g({}, r), {}, { children: i })); + e.push(a_(a_({}, r), {}, { children: i })); } else e.push(r); return e; }, []); @@ -12909,13 +12964,13 @@ var r_ = { return e.key === t; }); return a === -1 ? e.map(function(e) { - return e.children && e.children.length > 0 ? $g($g({}, e), {}, { children: i.insertNodeInSiblings(e.children, t, n, r) }) : e; + return e.children && e.children.length > 0 ? a_(a_({}, e), {}, { children: i.insertNodeInSiblings(e.children, t, n, r) }) : e; }) : e.toSpliced(a + r, 0, n); }, addNodeAsChild: function(e, t, n) { var r = this; return e.map(function(e) { - return e.key === t ? $g($g({}, e), {}, { children: [].concat(Kg(e.children || []), [n]) }) : e.children && e.children.length > 0 ? $g($g({}, e), {}, { children: r.addNodeAsChild(e.children, t, n) }) : e; + return e.key === t ? a_(a_({}, e), {}, { children: [].concat(Qg(e.children || []), [n]) }) : e.children && e.children.length > 0 ? a_(a_({}, e), {}, { children: r.addNodeAsChild(e.children, t, n) }) : e; }); }, insertNodeOnDrop: function() { @@ -12972,7 +13027,7 @@ var r_ = { if (this.isNodeDraggable) { e.dataTransfer.effectAllowed = "all", e.dataTransfer.setData("text", "data"); var t = e.currentTarget, n = t.cloneNode(!0), r = n.querySelector("[data-pc-section=\"nodetogglebutton\"]"), i = n.querySelector("[data-pc-name=\"pcnodecheckbox\"]"); - t.setAttribute("data-p-dragging", "true"), n.style.width = Hc(t) + "px", n.style.height = rl(t) + "px", n.setAttribute("data-pc-section", "drag-image"), r.style.visibility = "hidden", i?.remove(), document.body.appendChild(n), e.dataTransfer.setDragImage(n, 0, 0), setTimeout(function() { + t.setAttribute("data-p-dragging", "true"), n.style.width = Jc(t) + "px", n.style.height = ll(t) + "px", n.setAttribute("data-pc-section", "drag-image"), r.style.visibility = "hidden", i?.remove(), document.body.appendChild(n), e.dataTransfer.setDragImage(n, 0, 0), setTimeout(function() { return document.body.removeChild(n); }, 0), this.$pcTree.dragDropService.startDrag({ node: this.node, @@ -13005,21 +13060,21 @@ var r_ = { }); }, setAllNodesTabIndexes: function() { - var e = Yc(this.$refs.currentNode.closest("[data-pc-section=\"rootchildren\"]"), "[role=\"treeitem\"]"), t = Kg(e).some(function(e) { + var e = tl(this.$refs.currentNode.closest("[data-pc-section=\"rootchildren\"]"), "[role=\"treeitem\"]"), t = Qg(e).some(function(e) { return e.getAttribute("aria-selected") === "true" || e.getAttribute("aria-checked") === "true"; }); - if (Kg(e).forEach(function(e) { + if (Qg(e).forEach(function(e) { e.tabIndex = -1; }), t) { - var n = Kg(e).filter(function(e) { + var n = Qg(e).filter(function(e) { return e.getAttribute("aria-selected") === "true" || e.getAttribute("aria-checked") === "true"; }); n[0].tabIndex = 0; - } else Kg(e)[0].tabIndex = 0; + } else Qg(e)[0].tabIndex = 0; }, setTabIndexForSelectionMode: function(e, t) { if (this.selectionMode !== null) { - var n = Kg(Yc(this.$refs.currentNode.parentElement, "[role=\"treeitem\"]")); + var n = Qg(tl(this.$refs.currentNode.parentElement, "[role=\"treeitem\"]")); e.currentTarget.tabIndex = t === !1 ? -1 : 0, n.every(function(e) { return e.tabIndex === -1; }) && (n[0].tabIndex = 0); @@ -13031,13 +13086,13 @@ var r_ = { findBeforeClickableNode: function(e) { var t = e.closest("ul").closest("li"); if (t) { - var n = Xc(t, "button"); + var n = nl(t, "button"); return n && n.style.visibility !== "hidden" ? t : this.findBeforeClickableNode(e.previousElementSibling); } return null; }, toggleCheckbox: function() { - var e = this.selectionKeys ? $g({}, this.selectionKeys) : {}, t = !this.checked; + var e = this.selectionKeys ? a_({}, this.selectionKeys) : {}, t = !this.checked; this.propagateDown(this.node, t, e), this.$emit("checkbox-change", { node: this.node, check: t, @@ -13049,7 +13104,7 @@ var r_ = { checked: !0, partialChecked: !1 } : delete n[e.key], e.children && e.children.length) { - var r = Gg(e.children), i; + var r = Zg(e.children), i; try { for (r.s(); !(i = r.n()).done;) { var a = i.value; @@ -13063,7 +13118,7 @@ var r_ = { } }, propagateUp: function(e) { - var t = e.check, n = $g({}, e.selectionKeys), r = 0, i = !1, a = Gg(this.node.children), o; + var t = e.check, n = a_({}, e.selectionKeys), r = 0, i = !1, a = Zg(this.node.children), o; try { for (a.s(); !(o = a.n()).done;) { var s = o.value; @@ -13103,7 +13158,7 @@ var r_ = { }, getParentNodeElement: function(e) { var t = e.parentElement.parentElement; - return Zc(t, "role") === "treeitem" ? t : null; + return rl(t, "role") === "treeitem" ? t : null; }, focusNode: function(e) { e.focus(); @@ -13175,15 +13230,15 @@ var r_ = { } }, components: { - Checkbox: Yf, - ChevronDownIcon: Mp, - ChevronRightIcon: jg, - CheckIcon: yf, - MinusIcon: Df, - SpinnerIcon: gd + Checkbox: tp, + ChevronDownIcon: Rp, + ChevronRightIcon: Lg, + CheckIcon: Tf, + MinusIcon: Nf, + SpinnerIcon: Sd }, - directives: { ripple: nf } -}, i_ = [ + directives: { ripple: lf } +}, u_ = [ "aria-label", "aria-selected", "aria-expanded", @@ -13192,14 +13247,14 @@ var r_ = { "aria-level", "aria-checked", "tabindex" -], a_ = [ +], d_ = [ "draggable", "data-p-selected", "data-p-selectable" -], o_ = ["data-p-leaf"]; -function s_(e, t, n, r, i, a) { - var o = F("SpinnerIcon"), s = F("Checkbox"), c = F("TreeNode", !0), l = di("ripple"); - return R(), z("li", W({ +], f_ = ["data-p-leaf"]; +function p_(e, t, n, r, i, a) { + var o = F("SpinnerIcon"), s = F("Checkbox"), c = F("TreeNode", !0), l = mi("ripple"); + return z(), B("li", G({ ref: "currentNode", class: e.cx("node"), role: "treeitem", @@ -13215,12 +13270,12 @@ function s_(e, t, n, r, i, a) { return a.onKeyDown && a.onKeyDown.apply(a, arguments); } }, a.getPTOptions("node")), [ - a.isPrevDropPointActive ? (R(), z("div", { + a.isPrevDropPointActive ? (z(), B("div", { key: 0, - class: D(e.cx("dropPoint")), + class: O(e.cx("dropPoint")), "aria-hidden": "true" - }, null, 2)) : U("", !0), - V("div", W({ + }, null, 2)) : W("", !0), + H("div", G({ class: e.cx("nodeContent"), style: n.node.style, draggable: a.isDraggable, @@ -13252,7 +13307,7 @@ function s_(e, t, n, r, i, a) { "data-p-selected": a.checkboxMode ? a.checked : a.selected, "data-p-selectable": a.selectable }), [ - Gn((R(), z("button", W({ + qn((z(), B("button", G({ type: "button", class: e.cx("nodeToggleButton"), onClick: t[0] ||= function() { @@ -13260,57 +13315,57 @@ function s_(e, t, n, r, i, a) { }, tabindex: "-1", "data-p-leaf": a.leaf - }, a.getPTOptions("nodeToggleButton")), [n.node.loading && n.loadingMode === "icon" ? (R(), z(L, { key: 0 }, [n.templates.nodetoggleicon || n.templates.nodetogglericon ? (R(), B(ui(n.templates.nodetoggleicon || n.templates.nodetogglericon), { + }, a.getPTOptions("nodeToggleButton")), [n.node.loading && n.loadingMode === "icon" ? (z(), B(L, { key: 0 }, [n.templates.nodetoggleicon || n.templates.nodetogglericon ? (z(), V(pi(n.templates.nodetoggleicon || n.templates.nodetogglericon), { key: 0, node: n.node, expanded: a.expanded, - class: D(e.cx("nodeToggleIcon")) + class: O(e.cx("nodeToggleIcon")) }, null, 8, [ "node", "expanded", "class" - ])) : (R(), B(o, W({ + ])) : (z(), V(o, G({ key: 1, spin: "", class: e.cx("nodeToggleIcon") - }, a.getPTOptions("nodeToggleIcon")), null, 16, ["class"]))], 64)) : (R(), z(L, { key: 1 }, [n.templates.nodetoggleicon || n.templates.togglericon ? (R(), B(ui(n.templates.nodetoggleicon || n.templates.togglericon), { + }, a.getPTOptions("nodeToggleIcon")), null, 16, ["class"]))], 64)) : (z(), B(L, { key: 1 }, [n.templates.nodetoggleicon || n.templates.togglericon ? (z(), V(pi(n.templates.nodetoggleicon || n.templates.togglericon), { key: 0, node: n.node, expanded: a.expanded, - class: D(e.cx("nodeToggleIcon")) + class: O(e.cx("nodeToggleIcon")) }, null, 8, [ "node", "expanded", "class" - ])) : a.expanded ? (R(), B(ui(n.node.expandedIcon ? "span" : "ChevronDownIcon"), W({ + ])) : a.expanded ? (z(), V(pi(n.node.expandedIcon ? "span" : "ChevronDownIcon"), G({ key: 1, class: e.cx("nodeToggleIcon") - }, a.getPTOptions("nodeToggleIcon")), null, 16, ["class"])) : (R(), B(ui(n.node.collapsedIcon ? "span" : "ChevronRightIcon"), W({ + }, a.getPTOptions("nodeToggleIcon")), null, 16, ["class"])) : (z(), V(pi(n.node.collapsedIcon ? "span" : "ChevronRightIcon"), G({ key: 2, class: e.cx("nodeToggleIcon") - }, a.getPTOptions("nodeToggleIcon")), null, 16, ["class"]))], 64))], 16, o_)), [[l]]), - a.checkboxMode ? (R(), B(s, { + }, a.getPTOptions("nodeToggleIcon")), null, 16, ["class"]))], 64))], 16, f_)), [[l]]), + a.checkboxMode ? (z(), V(s, { key: 0, defaultValue: a.checked, binary: !0, indeterminate: a.partialChecked, - class: D(e.cx("nodeCheckbox")), + class: O(e.cx("nodeCheckbox")), tabindex: -1, unstyled: e.unstyled, pt: a.getPTOptions("pcNodeCheckbox"), "data-p-partialchecked": a.partialChecked }, { icon: P(function(e) { - return [n.templates.checkboxicon ? (R(), B(ui(n.templates.checkboxicon), { + return [n.templates.checkboxicon ? (z(), V(pi(n.templates.checkboxicon), { key: 0, checked: e.checked, partialChecked: a.partialChecked, - class: D(e.class) + class: O(e.class) }, null, 8, [ "checked", "partialChecked", "class" - ])) : U("", !0)]; + ])) : W("", !0)]; }), _: 1 }, 8, [ @@ -13320,16 +13375,16 @@ function s_(e, t, n, r, i, a) { "unstyled", "pt", "data-p-partialchecked" - ])) : U("", !0), - n.templates.nodeicon ? (R(), B(ui(n.templates.nodeicon), W({ + ])) : W("", !0), + n.templates.nodeicon ? (z(), V(pi(n.templates.nodeicon), G({ key: 1, node: n.node, class: [e.cx("nodeIcon")] - }, a.getPTOptions("nodeIcon")), null, 16, ["node", "class"])) : (R(), z("span", W({ + }, a.getPTOptions("nodeIcon")), null, 16, ["node", "class"])) : (z(), B("span", G({ key: 2, class: [e.cx("nodeIcon"), n.node.icon] }, a.getPTOptions("nodeIcon")), null, 16)), - V("span", W({ class: e.cx("nodeLabel") }, a.getPTOptions("nodeLabel"), { onKeydown: t[1] ||= Vs(function() {}, ["stop"]) }), [n.templates[n.node.type] || n.templates.default ? (R(), B(ui(n.templates[n.node.type] || n.templates.default), { + H("span", G({ class: e.cx("nodeLabel") }, a.getPTOptions("nodeLabel"), { onKeydown: t[1] ||= qs(function() {}, ["stop"]) }), [n.templates[n.node.type] || n.templates.default ? (z(), V(pi(n.templates[n.node.type] || n.templates.default), { key: 0, node: n.node, expanded: a.expanded, @@ -13338,19 +13393,19 @@ function s_(e, t, n, r, i, a) { "node", "expanded", "selected" - ])) : (R(), z(L, { key: 1 }, [qa(O(a.label(n.node)), 1)], 64))], 16) - ], 16, a_), - a.isNextDropPointActive ? (R(), z("div", { + ])) : (z(), B(L, { key: 1 }, [Za(k(a.label(n.node)), 1)], 64))], 16) + ], 16, d_), + a.isNextDropPointActive ? (z(), B("div", { key: 1, - class: D(e.cx("dropPoint")), + class: O(e.cx("dropPoint")), "aria-hidden": "true" - }, null, 2)) : U("", !0), - a.hasChildren && a.expanded ? (R(), z("ul", W({ + }, null, 2)) : W("", !0), + a.hasChildren && a.expanded ? (z(), B("ul", G({ key: 2, class: e.cx("nodeChildren"), role: "group" - }, e.ptm("nodeChildren")), [(R(!0), z(L, null, mi(n.node.children, function(r, i) { - return R(), B(c, { + }, e.ptm("nodeChildren")), [(z(!0), B(L, null, _i(n.node.children, function(r, i) { + return z(), V(c, { key: r.key, node: r, parentNode: n.node, @@ -13404,22 +13459,22 @@ function s_(e, t, n, r, i, a) { "unstyled", "pt" ]); - }), 128))], 16)) : U("", !0) - ], 16, i_); + }), 128))], 16)) : W("", !0) + ], 16, u_); } -r_.render = s_; -function c_(e) { +l_.render = p_; +function m_(e) { "@babel/helpers - typeof"; - return c_ = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { + return m_ = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { return typeof e; } : function(e) { return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; - }, c_(e); + }, m_(e); } -function l_(e, t) { +function h_(e, t) { var n = typeof Symbol < "u" && e[Symbol.iterator] || e["@@iterator"]; if (!n) { - if (Array.isArray(e) || (n = f_(e)) || t) { + if (Array.isArray(e) || (n = v_(e)) || t) { n && (e = n); var r = 0, i = function() {}; return { @@ -13459,31 +13514,31 @@ function l_(e, t) { } }; } -function u_(e) { - return m_(e) || p_(e) || f_(e) || d_(); +function g_(e) { + return b_(e) || y_(e) || v_(e) || __(); } -function d_() { +function __() { throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } -function f_(e, t) { +function v_(e, t) { if (e) { - if (typeof e == "string") return h_(e, t); + if (typeof e == "string") return x_(e, t); var n = {}.toString.call(e).slice(8, -1); - return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? h_(e, t) : void 0; + return n === "Object" && e.constructor && (n = e.constructor.name), n === "Map" || n === "Set" ? Array.from(e) : n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n) ? x_(e, t) : void 0; } } -function p_(e) { +function y_(e) { if (typeof Symbol < "u" && e[Symbol.iterator] != null || e["@@iterator"] != null) return Array.from(e); } -function m_(e) { - if (Array.isArray(e)) return h_(e); +function b_(e) { + if (Array.isArray(e)) return x_(e); } -function h_(e, t) { +function x_(e, t) { (t == null || t > e.length) && (t = e.length); for (var n = 0, r = Array(t); n < t; n++) r[n] = e[n]; return r; } -function g_(e, t) { +function S_(e, t) { var n = Object.keys(e); if (Object.getOwnPropertySymbols) { var r = Object.getOwnPropertySymbols(e); @@ -13493,42 +13548,42 @@ function g_(e, t) { } return n; } -function __(e) { +function C_(e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t] == null ? {} : arguments[t]; - t % 2 ? g_(Object(n), !0).forEach(function(t) { - v_(e, t, n[t]); - }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : g_(Object(n)).forEach(function(t) { + t % 2 ? S_(Object(n), !0).forEach(function(t) { + w_(e, t, n[t]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : S_(Object(n)).forEach(function(t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t)); }); } return e; } -function v_(e, t, n) { - return (t = y_(t)) in e ? Object.defineProperty(e, t, { +function w_(e, t, n) { + return (t = T_(t)) in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e; } -function y_(e) { - var t = b_(e, "string"); - return c_(t) == "symbol" ? t : t + ""; +function T_(e) { + var t = E_(e, "string"); + return m_(t) == "symbol" ? t : t + ""; } -function b_(e, t) { - if (c_(e) != "object" || !e) return e; +function E_(e, t) { + if (m_(e) != "object" || !e) return e; var n = e[Symbol.toPrimitive]; if (n !== void 0) { var r = n.call(e, t); - if (c_(r) != "object") return r; + if (m_(r) != "object") return r; throw TypeError("@@toPrimitive must return a primitive value."); } return (t === "string" ? String : Number)(e); } -var x_ = { +var D_ = { name: "Tree", - extends: zg, + extends: Gg, inheritAttrs: !1, emits: [ "node-expand", @@ -13577,7 +13632,7 @@ var x_ = { methods: { initDragDropService: function() { var e = this; - this.dragDropService || (this.dragDropService = Ug(), this.dragStartCleanup = this.dragDropService.onDragStart(function(t) { + this.dragDropService || (this.dragDropService = Yg(), this.dragStartCleanup = this.dragDropService.onDragStart(function(t) { e.dragNode = t.node, e.dragNodeSubNodes = t.subNodes, e.dragNodeIndex = t.index, e.dragNodeScope = t.scope; }), this.dragStopCleanup = this.dragDropService.onDragStop(function() { e.dragNode = null, e.dragNodeSubNodes = null, e.dragNodeIndex = null, e.dragNodeScope = null, e.dragHover = !1; @@ -13588,7 +13643,7 @@ var x_ = { }, onNodeToggle: function(e) { var t = e.key; - this.d_expandedKeys[t] ? (delete this.d_expandedKeys[t], this.$emit("node-collapse", e)) : (this.d_expandedKeys[t] = !0, this.$emit("node-expand", e)), this.d_expandedKeys = __({}, this.d_expandedKeys), this.$emit("update:expandedKeys", this.d_expandedKeys); + this.d_expandedKeys[t] ? (delete this.d_expandedKeys[t], this.$emit("node-collapse", e)) : (this.d_expandedKeys[t] = !0, this.$emit("node-expand", e)), this.d_expandedKeys = C_({}, this.d_expandedKeys), this.$emit("update:expandedKeys", this.d_expandedKeys); }, onNodeClick: function(e) { if (this.selectionMode != null && e.node.selectable !== !1) { @@ -13601,11 +13656,11 @@ var x_ = { }, handleSelectionWithMetaKey: function(e) { var t = e.originalEvent, n = e.node, r = t.metaKey || t.ctrlKey, i = this.isNodeSelected(n), a; - return i && r ? (this.isSingleSelectionMode() ? a = {} : (a = __({}, this.selectionKeys), delete a[n.key]), this.$emit("node-unselect", n)) : (this.isSingleSelectionMode() ? a = {} : this.isMultipleSelectionMode() && (a = r && this.selectionKeys ? __({}, this.selectionKeys) : {}), a[n.key] = !0, this.$emit("node-select", n)), a; + return i && r ? (this.isSingleSelectionMode() ? a = {} : (a = C_({}, this.selectionKeys), delete a[n.key]), this.$emit("node-unselect", n)) : (this.isSingleSelectionMode() ? a = {} : this.isMultipleSelectionMode() && (a = r && this.selectionKeys ? C_({}, this.selectionKeys) : {}), a[n.key] = !0, this.$emit("node-select", n)), a; }, handleSelectionWithoutMetaKey: function(e) { var t = e.node, n = this.isNodeSelected(t), r; - return this.isSingleSelectionMode() ? n ? (r = {}, this.$emit("node-unselect", t)) : (r = {}, r[t.key] = !0, this.$emit("node-select", t)) : n ? (r = __({}, this.selectionKeys), delete r[t.key], this.$emit("node-unselect", t)) : (r = this.selectionKeys ? __({}, this.selectionKeys) : {}, r[t.key] = !0, this.$emit("node-select", t)), r; + return this.isSingleSelectionMode() ? n ? (r = {}, this.$emit("node-unselect", t)) : (r = {}, r[t.key] = !0, this.$emit("node-select", t)) : n ? (r = C_({}, this.selectionKeys), delete r[t.key], this.$emit("node-unselect", t)) : (r = this.selectionKeys ? C_({}, this.selectionKeys) : {}, r[t.key] = !0, this.$emit("node-select", t)), r; }, isSingleSelectionMode: function() { return this.selectionMode === "single"; @@ -13633,12 +13688,12 @@ var x_ = { if (e) { var n = !1; if (e.children) { - var r = u_(e.children); + var r = g_(e.children); e.children = []; - var i = l_(r), a; + var i = h_(r), a; try { for (i.s(); !(a = i.n()).done;) { - var o = a.value, s = __({}, o); + var o = a.value, s = C_({}, o); this.isFilterMatched(s, t) && (n = !0, e.children.push(s)); } } catch (e) { @@ -13651,11 +13706,11 @@ var x_ = { } }, isFilterMatched: function(e, t) { - var n = t.searchFields, r = t.filterText, i = t.strict, a = !1, o = l_(n), s; + var n = t.searchFields, r = t.filterText, i = t.strict, a = !1, o = h_(n), s; try { for (o.s(); !(s = o.n()).done;) { var c = s.value; - String(oc(e, c)).toLocaleLowerCase(this.filterLocale).indexOf(r) > -1 && (a = !0); + String(fc(e, c)).toLocaleLowerCase(this.filterLocale).indexOf(r) > -1 && (a = !0); } } catch (e) { o.e(e); @@ -13682,7 +13737,7 @@ var x_ = { }, isDescendantOf: function(e, t) { if (!e || !e.children) return !1; - var n = l_(e.children), r; + var n = h_(e.children), r; try { for (n.s(); !(r = n.n()).done;) { var i = r.value; @@ -13710,7 +13765,7 @@ var x_ = { } else if (Array.isArray(t)) { if (typeof e == "string") return t.indexOf(e) !== -1; if (Array.isArray(e)) { - var n = l_(e), r; + var n = h_(e), r; try { for (n.s(); !(r = n.n()).done;) { var i = r.value; @@ -13756,7 +13811,7 @@ var x_ = { }, processTreeDrop: function(e, t) { this.dragNodeSubNodes.splice(t, 1); - var n = [].concat(u_(this.value || []), [e]); + var n = [].concat(g_(this.value || []), [e]); this.$emit("update:value", n), this.dragDropService.stopDrag({ node: e }); }, onDrop: function(e) { @@ -13792,10 +13847,10 @@ var x_ = { }, computed: { filteredValue: function() { - var e = [], t = ac(this.filterBy) ? [this.filterBy] : this.filterBy.split(","), n = this.filterValue.trim().toLocaleLowerCase(this.filterLocale), r = this.filterMode === "strict", i = l_(this.value), a; + var e = [], t = dc(this.filterBy) ? [this.filterBy] : this.filterBy.split(","), n = this.filterValue.trim().toLocaleLowerCase(this.filterLocale), r = this.filterMode === "strict", i = h_(this.value), a; try { for (i.s(); !(a = i.n()).done;) { - var o = a.value, s = __({}, o), c = { + var o = a.value, s = C_({}, o), c = { searchFields: t, filterText: n, strict: r @@ -13830,23 +13885,23 @@ var x_ = { } }, components: { - TreeNode: r_, - InputText: ap, - InputIcon: im, - IconField: nm, - SearchIcon: Bp, - SpinnerIcon: gd + TreeNode: l_, + InputText: dp, + InputIcon: um, + IconField: cm, + SearchIcon: Kp, + SpinnerIcon: Sd } }; -function S_(e) { +function O_(e) { "@babel/helpers - typeof"; - return S_ = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { + return O_ = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) { return typeof e; } : function(e) { return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e; - }, S_(e); + }, O_(e); } -function C_(e, t) { +function k_(e, t) { var n = Object.keys(e); if (Object.getOwnPropertySymbols) { var r = Object.getOwnPropertySymbols(e); @@ -13856,43 +13911,43 @@ function C_(e, t) { } return n; } -function w_(e) { +function A_(e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t] == null ? {} : arguments[t]; - t % 2 ? C_(Object(n), !0).forEach(function(t) { - T_(e, t, n[t]); - }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : C_(Object(n)).forEach(function(t) { + t % 2 ? k_(Object(n), !0).forEach(function(t) { + j_(e, t, n[t]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : k_(Object(n)).forEach(function(t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t)); }); } return e; } -function T_(e, t, n) { - return (t = E_(t)) in e ? Object.defineProperty(e, t, { +function j_(e, t, n) { + return (t = M_(t)) in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e; } -function E_(e) { - var t = D_(e, "string"); - return S_(t) == "symbol" ? t : t + ""; +function M_(e) { + var t = N_(e, "string"); + return O_(t) == "symbol" ? t : t + ""; } -function D_(e, t) { - if (S_(e) != "object" || !e) return e; +function N_(e, t) { + if (O_(e) != "object" || !e) return e; var n = e[Symbol.toPrimitive]; if (n !== void 0) { var r = n.call(e, t); - if (S_(r) != "object") return r; + if (O_(r) != "object") return r; throw TypeError("@@toPrimitive must return a primitive value."); } return (t === "string" ? String : Number)(e); } -var O_ = ["data-p"], k_ = ["data-p"], A_ = ["aria-labelledby", "aria-label"]; -function j_(e, t, n, r, i, a) { +var P_ = ["data-p"], F_ = ["data-p"], I_ = ["aria-labelledby", "aria-label"]; +function L_(e, t, n, r, i, a) { var o = F("SpinnerIcon"), s = F("InputText"), c = F("SearchIcon"), l = F("InputIcon"), u = F("IconField"), d = F("TreeNode"); - return R(), z("div", W({ + return z(), B("div", G({ class: e.cx("root"), onDragover: t[1] ||= function() { return a.onDragOver && a.onDragOver.apply(a, arguments); @@ -13908,42 +13963,42 @@ function j_(e, t, n, r, i, a) { }, "data-p": a.containerDataP }, e.ptmi("root")), [ - H(Fo, { name: "p-overlay-mask" }, { + U(Vo, { name: "p-overlay-mask" }, { default: P(function() { - return [e.loading && e.loadingMode === "mask" ? (R(), z("div", W({ + return [e.loading && e.loadingMode === "mask" ? (z(), B("div", G({ key: 0, class: e.cx("mask") - }, e.ptm("mask")), [I(e.$slots, "loadingicon", { class: D(e.cx("loadingIcon")) }, function() { - return [e.loadingIcon ? (R(), z("i", W({ + }, e.ptm("mask")), [I(e.$slots, "loadingicon", { class: O(e.cx("loadingIcon")) }, function() { + return [e.loadingIcon ? (z(), B("i", G({ key: 0, class: [ e.cx("loadingIcon"), "pi-spin", e.loadingIcon ] - }, e.ptm("loadingIcon")), null, 16)) : (R(), B(o, W({ + }, e.ptm("loadingIcon")), null, 16)) : (z(), V(o, G({ key: 1, spin: "", class: e.cx("loadingIcon") }, e.ptm("loadingIcon")), null, 16, ["class"]))]; - })], 16)) : U("", !0)]; + })], 16)) : W("", !0)]; }), _: 3 }), - e.filter ? (R(), B(u, { + e.filter ? (z(), V(u, { key: 0, unstyled: e.unstyled, - pt: w_(w_({}, e.ptm("pcFilter")), e.ptm("pcFilterContainer")), - class: D(e.cx("pcFilterContainer")) + pt: A_(A_({}, e.ptm("pcFilter")), e.ptm("pcFilterContainer")), + class: O(e.cx("pcFilterContainer")) }, { default: P(function() { - return [H(s, { + return [U(s, { modelValue: i.filterValue, "onUpdate:modelValue": t[0] ||= function(e) { return i.filterValue = e; }, autocomplete: "off", - class: D(e.cx("pcFilterInput")), + class: O(e.cx("pcFilterInput")), placeholder: e.filterPlaceholder, unstyled: e.unstyled, onKeyup: a.onFilterKeyup, @@ -13955,13 +14010,13 @@ function j_(e, t, n, r, i, a) { "unstyled", "onKeyup", "pt" - ]), H(l, { + ]), U(l, { unstyled: e.unstyled, pt: e.ptm("pcFilterIconContainer") }, { default: P(function() { - return [I(e.$slots, e.$slots.filtericon ? "filtericon" : "searchicon", { class: D(e.cx("filterIcon")) }, function() { - return [H(c, W({ class: e.cx("filterIcon") }, e.ptm("filterIcon")), null, 16, ["class"])]; + return [I(e.$slots, e.$slots.filtericon ? "filtericon" : "searchicon", { class: O(e.cx("filterIcon")) }, function() { + return [U(c, G({ class: e.cx("filterIcon") }, e.ptm("filterIcon")), null, 16, ["class"])]; })]; }), _: 3 @@ -13972,8 +14027,8 @@ function j_(e, t, n, r, i, a) { "unstyled", "pt", "class" - ])) : U("", !0), - V("div", W({ + ])) : W("", !0), + H("div", G({ class: e.cx("wrapper"), style: { maxHeight: e.scrollHeight }, "data-p": a.wrapperDataP @@ -13983,19 +14038,19 @@ function j_(e, t, n, r, i, a) { expandedKeys: e.expandedKeys, selectionKeys: e.selectionKeys }), - a.empty ? a.empty && !a.$pcTreeSelect ? (R(), z("div", W({ + a.empty ? a.empty && !a.$pcTreeSelect ? (z(), B("div", G({ key: 1, class: e.cx("emptyMessage") }, e.ptm("emptyMessage")), [I(e.$slots, "empty", {}, function() { - return [qa(O(a.emptyMessageText), 1)]; - })], 16)) : U("", !0) : (R(), z("ul", W({ + return [Za(k(a.emptyMessageText), 1)]; + })], 16)) : W("", !0) : (z(), B("ul", G({ key: 0, class: e.cx("rootChildren"), role: "tree", "aria-labelledby": e.ariaLabelledby, "aria-label": e.ariaLabel - }, e.ptm("rootChildren")), [(R(!0), z(L, null, mi(a.valueToRender, function(t, n) { - return R(), B(d, { + }, e.ptm("rootChildren")), [(z(!0), B(L, null, _i(a.valueToRender, function(t, n) { + return z(), V(d, { key: t.key, node: t, rootNodes: a.valueToRender, @@ -14043,14 +14098,14 @@ function j_(e, t, n, r, i, a) { "unstyled", "pt" ]); - }), 128))], 16, A_)), + }), 128))], 16, I_)), I(e.$slots, "footer", { value: e.value, expandedKeys: e.expandedKeys, selectionKeys: e.selectionKeys }) - ], 16, k_) - ], 16, O_); + ], 16, F_) + ], 16, P_); } -x_.render = j_; -export { Jt as $, qa as A, Qr as B, L as C, B as D, V as E, bo as F, I as G, R as H, Yn as I, Qn as J, F as K, Jn as L, Hr as M, Mr as N, U as O, no as P, Me as Q, Mn as R, Vs as S, yo as T, qn as U, ni as V, mi as W, Gn as X, P as Y, je as Z, qs as _, ah as a, Gt as at, $o as b, _m as c, un as ct, Yf as d, D as dt, M as et, hf as f, pe as ft, Ru as g, Vu as h, Ih as i, tn as it, H as j, z as k, mp as l, on as lt, Wu as m, Sg as n, Ne as nt, Ym as o, nn as ot, Ad as p, O as pt, $n as q, lg as r, Wt as rt, Pm as s, j as st, x_ as t, Qt as tt, ap as u, sn as ut, Fs as v, mr as w, Us as x, Ps as y, ti as z }; +D_.render = L_; +export { qn as $, Qa as A, Nn as B, L as C, V as D, H as E, co as F, Yn as G, ti as H, Eo as I, F as J, _i as K, Zn as L, U as M, Gr as N, W as O, Fr as P, P as Q, Xn as R, qs as S, To as T, ai as U, ii as V, z as W, nr as X, Gi as Y, er as Z, $s as _, dh as a, Me as at, as as b, Cm as c, Wt as ct, tp as d, dn as dt, Ae as et, xf as f, an as ft, Wu as g, k as gt, qu as h, fe as ht, Hh as i, Zt as it, Za as j, B as k, bp as l, tn as lt, Xu as m, O as mt, Og as n, qt as nt, th as o, Ut as ot, Id as p, on as pt, I as q, hg as r, N as rt, Bm as s, en as st, D_ as t, je as tt, dp as u, M as ut, Vs as v, _r as w, Ys as x, Bs as y, Ti as z }; diff --git a/dist/chunks/mjr-vue-vendor-B23qUCEw.js b/dist/chunks/mjr-vue-vendor-CEDOnn2t.js similarity index 74% rename from dist/chunks/mjr-vue-vendor-B23qUCEw.js rename to dist/chunks/mjr-vue-vendor-CEDOnn2t.js index 389c01a2..4cbe46f1 100644 --- a/dist/chunks/mjr-vue-vendor-B23qUCEw.js +++ b/dist/chunks/mjr-vue-vendor-CEDOnn2t.js @@ -1,4 +1,4 @@ -import { $ as e, I as t, L as n, Q as r, R as i, T as a, Z as o, ct as s, et as c, it as l, nt as u, q as d, rt as f, st as p, tt as m } from "./mjr-primevue-3mpaVb1C.js"; +import { B as e, L as t, R as n, T as r, X as i, at as a, dt as o, et as s, it as c, nt as l, ot as u, rt as d, st as f, tt as p, ut as m } from "./mjr-primevue-C07IsEdU.js"; // node_modules/pinia/dist/pinia.js var h = typeof window < "u", g, _ = (e) => g = e, v = () => t() && n(y) || g, y = Symbol(); function b(e) { @@ -86,7 +86,7 @@ function j(e, t, n, r) { } var { assign: M } = Object; function N() { - let e = o(!0), t = e.run(() => l({})), n = [], r = [], i = m({ + let e = s(!0), t = e.run(() => f({})), n = [], r = [], i = c({ install(e) { _(i), i._a = e, e.provide(y, i), e.config.globalProperties.$pinia = i, r.forEach((e) => n.push(e)), r = []; }, @@ -102,12 +102,12 @@ function N() { return i; } var P = () => {}; -function F(e, t, n, i = P) { +function F(e, t, n, r = P) { e.add(t); - let a = () => { - e.delete(t) && i(); + let i = () => { + e.delete(t) && r(); }; - return !n && r() && u(a), a; + return !n && p() && a(i), i; } function I(e, ...t) { e.forEach((e) => { @@ -115,14 +115,14 @@ function I(e, ...t) { }); } var L = (e) => e(), R = Symbol(), z = Symbol(); -function B(t, n) { - t instanceof Map && n instanceof Map ? n.forEach((e, n) => t.set(n, e)) : t instanceof Set && n instanceof Set && n.forEach(t.add, t); - for (let r in n) { - if (!Object.hasOwn(n, r)) continue; - let i = n[r], a = t[r]; - t[r] = b(a) && b(i) && Object.hasOwn(t, r) && !c(i) && !e(i) ? B(a, i) : i; +function B(e, t) { + e instanceof Map && t instanceof Map ? t.forEach((t, n) => e.set(n, t)) : e instanceof Set && t instanceof Set && t.forEach(e.add, e); + for (let n in t) { + if (!Object.hasOwn(t, n)) continue; + let r = t[n], i = e[n]; + e[n] = b(i) && b(r) && Object.hasOwn(e, n) && !d(r) && !l(r) ? B(i, r) : r; } - return t; + return e; } var V = Symbol(); function H(e) { @@ -130,52 +130,52 @@ function H(e) { } var { assign: U } = Object; function W(e) { - return !!(c(e) && e.effect); + return !!(d(e) && e.effect); } -function G(e, t, n, r) { - let { state: i, actions: o, getters: c } = t, l = n.state.value[e], u; - function d() { - return l || +function G(e, t, n, i) { + let { state: a, actions: s, getters: l } = t, u = n.state.value[e], d; + function f() { + return u || /* istanbul ignore if */ - (n.state.value[e] = i ? i() : {}), U(s(n.state.value[e]), o, Object.keys(c || {}).reduce((t, r) => (t[r] = m(a(() => { + (n.state.value[e] = a ? a() : {}), U(o(n.state.value[e]), s, Object.keys(l || {}).reduce((t, i) => (t[i] = c(r(() => { _(n); let t = n._s.get(e); - return c[r].call(t, t); + return l[i].call(t, t); })), t), {})); } - return u = K(e, d, t, n, r, !0), u; + return d = K(e, f, t, n, i, !0), d; } -function K(t, n, r = {}, a, s, l) { - let u, m = U({ actions: {} }, r), h = { deep: !0 }, g, v, y = /* @__PURE__ */ new Set(), b = /* @__PURE__ */ new Set(), x, S = a.state.value[t]; - !l && !S && +function K(t, n, r = {}, a, o, c) { + let f, p = U({ actions: {} }, r), h = { deep: !0 }, g, v, y = /* @__PURE__ */ new Set(), b = /* @__PURE__ */ new Set(), x, S = a.state.value[t]; + !c && !S && /* istanbul ignore if */ (a.state.value[t] = {}); let C; - function w(e) { - let n; - g = v = !1, typeof e == "function" ? (e(a.state.value[t]), n = { + function w(n) { + let r; + g = v = !1, typeof n == "function" ? (n(a.state.value[t]), r = { type: "patch function", storeId: t, events: x - }) : (B(a.state.value[t], e), n = { + }) : (B(a.state.value[t], n), r = { type: "patch object", - payload: e, + payload: n, storeId: t, events: x }); - let r = C = Symbol(); - i().then(() => { - C === r && (g = !0); - }), v = !0, I(y, n, a.state.value[t]); + let i = C = Symbol(); + e().then(() => { + C === i && (g = !0); + }), v = !0, I(y, r, a.state.value[t]); } - let T = l ? function() { + let T = c ? function() { let { state: e } = r, t = e ? e() : {}; this.$patch((e) => { U(e, t); }); } : P; function E() { - u.stop(), y.clear(), b.clear(), a._s.delete(t); + f.stop(), y.clear(), b.clear(), a._s.delete(t); } let D = (e, n = "") => { if (R in e) return e[z] = n, e; @@ -212,7 +212,7 @@ function K(t, n, r = {}, a, s, l) { $reset: T, $subscribe(e, n = {}) { if (y.has(e)) return P; - let r = F(y, e, n.detached, () => i()), i = u.run(() => d(() => a.state.value[t], (r) => { + let r = F(y, e, n.detached, () => o()), o = f.run(() => i(() => a.state.value[t], (r) => { (n.flush === "sync" ? v : g) && e({ storeId: t, type: "direct", @@ -222,14 +222,14 @@ function K(t, n, r = {}, a, s, l) { return r; }, $dispose: E - }, k = f(O); + }, k = u(O); a._s.set(t, k); - let A = (a._a && a._a.runWithContext || L)(() => a._e.run(() => (u = o()).run(() => n({ action: D })))); - for (let n in A) { - let r = A[n]; - c(r) && !W(r) || e(r) ? l || (S && H(r) && (c(r) ? r.value = S[n] : ((r instanceof Set || r instanceof Map) && r.clear(), B(r, S[n]))), a.state.value[t][n] = r) : typeof r == "function" && (A[n] = D(r, n), m.actions[n] = r); + let A = (a._a && a._a.runWithContext || L)(() => a._e.run(() => (f = s()).run(() => n({ action: D })))); + for (let e in A) { + let n = A[e]; + d(n) && !W(n) || l(n) ? c || (S && H(n) && (d(n) ? n.value = S[e] : ((n instanceof Set || n instanceof Map) && n.clear(), B(n, S[e]))), a.state.value[t][e] = n) : typeof n == "function" && (A[e] = D(n, e), p.actions[e] = n); } - return U(k, A), U(p(k), A), Object.defineProperty(k, "$state", { + return U(k, A), U(m(k), A), Object.defineProperty(k, "$state", { get: () => a.state.value[t], set: (e) => { w((t) => { @@ -237,14 +237,14 @@ function K(t, n, r = {}, a, s, l) { }); } }), a._p.forEach((e) => { - let t = u.run(() => e({ + let t = f.run(() => e({ store: k, app: a._a, pinia: a, - options: m + options: p })); U(k, t); - }), S && l && r.hydrate && r.hydrate(k.$state, S), g = !0, v = !0, k; + }), S && c && r.hydrate && r.hydrate(k.$state, S), g = !0, v = !0, k; } function q(e, r, i) { let a, o = typeof r == "function"; diff --git a/dist/chunks/model3dRenderer-B-J9oQzQ.js b/dist/chunks/model3dRenderer-CIUrxTBK.js similarity index 99% rename from dist/chunks/model3dRenderer-B-J9oQzQ.js rename to dist/chunks/model3dRenderer-CIUrxTBK.js index d57df638..0a7ea24a 100644 --- a/dist/chunks/model3dRenderer-B-J9oQzQ.js +++ b/dist/chunks/model3dRenderer-CIUrxTBK.js @@ -1,5 +1,5 @@ import { t as e } from "./rolldown-runtime-CGnMp29N.js"; -import { gt as t, m as n, o as r, r as i } from "./events-cBMXVULQ.js"; +import { gt as t, m as n, o as r, r as i } from "./events-CttACGx4.js"; import { n as a } from "./state-D0Gu1AgG.js"; // ui/features/viewer/model3dCore.ts function o(e, t) { diff --git a/dist/chunks/openMajoorSettings-B9ZJ7bmZ.js b/dist/chunks/openMajoorSettings-Do4UDwGh.js similarity index 99% rename from dist/chunks/openMajoorSettings-B9ZJ7bmZ.js rename to dist/chunks/openMajoorSettings-Do4UDwGh.js index 310b65c0..7b363b8f 100644 --- a/dist/chunks/openMajoorSettings-B9ZJ7bmZ.js +++ b/dist/chunks/openMajoorSettings-Do4UDwGh.js @@ -1,6 +1,6 @@ -import { A as e, E as t, S as n, Z as r, b as i, j as a, m as o, z as s } from "./events-cBMXVULQ.js"; +import { A as e, E as t, S as n, Z as r, b as i, j as a, m as o, z as s } from "./events-CttACGx4.js"; import { a as c, n as l } from "./graphTraversal-DTdQWkn5.js"; -import { S as u, Y as d, b as f, x as p, y as m } from "./SidebarWorkflowSection-F3hoMYG1.js"; +import { S as u, Y as d, b as f, x as p, y as m } from "./SidebarWorkflowSection-DrSf3i6L.js"; // ui/features/viewer/floatingViewerProgress.ts var h = "progress-update", g = "__MJR_MFV_PROGRESS_SERVICE__"; function ee() { diff --git a/dist/chunks/sideBySide-BLNTzu0A.js b/dist/chunks/sideBySide-FiIpKO3N.js similarity index 99% rename from dist/chunks/sideBySide-BLNTzu0A.js rename to dist/chunks/sideBySide-FiIpKO3N.js index 19a2196e..14758ed4 100644 --- a/dist/chunks/sideBySide-BLNTzu0A.js +++ b/dist/chunks/sideBySide-FiIpKO3N.js @@ -1,4 +1,4 @@ -import { i as e } from "./model3dRenderer-B-J9oQzQ.js"; +import { i as e } from "./model3dRenderer-CIUrxTBK.js"; import { i as t, o as n } from "./geninfoParser-CgHp-y-n.js"; // ui/features/viewer/sideBySide.ts function r(e) { diff --git a/dist/chunks/viewerOpenRequest-_DqD1rXA.js b/dist/chunks/viewerOpenRequest-CZXk8yvU.js similarity index 99% rename from dist/chunks/viewerOpenRequest-_DqD1rXA.js rename to dist/chunks/viewerOpenRequest-CZXk8yvU.js index 7cb1bf80..5d1a165d 100644 --- a/dist/chunks/viewerOpenRequest-_DqD1rXA.js +++ b/dist/chunks/viewerOpenRequest-CZXk8yvU.js @@ -1,10 +1,10 @@ import { t as e } from "./rolldown-runtime-CGnMp29N.js"; -import { $t as t, H as n, P as r, _ as i, c as a, d as o, g as s, gt as c, n as l, o as u, r as d, s as f, vt as p, x as m, y as h } from "./viewerRuntimeHosts-CW2DfHq_.js"; -import { D as g, Tt as _, a as v, at as y, h as b, ht as x, i as S, j as C, k as w, m as T, n as E, o as D, r as O, t as k, ut as A } from "./events-cBMXVULQ.js"; -import { T as j, it as M, rt as N } from "./mjr-primevue-3mpaVb1C.js"; -import { n as ee, r as P } from "./mjr-vue-vendor-B23qUCEw.js"; +import { $t as t, H as n, P as r, _ as i, c as a, d as o, g as s, gt as c, n as l, o as u, r as d, s as f, vt as p, x as m, y as h } from "./viewerRuntimeHosts-XPTU8ZhU.js"; +import { D as g, Tt as _, a as v, at as y, h as b, ht as x, i as S, j as C, k as w, m as T, n as E, o as D, r as O, t as k, ut as A } from "./events-CttACGx4.js"; +import { T as j, ot as M, st as N } from "./mjr-primevue-C07IsEdU.js"; +import { n as ee, r as P } from "./mjr-vue-vendor-CEDOnn2t.js"; import { n as F, r as te, t as ne } from "./state-D0Gu1AgG.js"; -import { a as re, c as ie, i as ae, o as oe, r as se, s as ce } from "./model3dRenderer-B-J9oQzQ.js"; +import { a as re, c as ie, i as ae, o as oe, r as se, s as ce } from "./model3dRenderer-CIUrxTBK.js"; // ui/utils/events.ts function le(e, t, { target: n = null, warnPrefix: r = "[Majoor]" } = {}) { let i = n || (typeof window < "u" ? window : null); @@ -486,7 +486,7 @@ function J(e, t = {}) { } // ui/stores/useRuntimeStore.ts var ye = ee("mjr-runtime", () => { - let e = M(null), t = M(null), n = M(!1), r = M(0), i = M(null), a = M(null), o = M(null), s = M(null), c = M(null), l = M([]), u = j(() => !!i.value), d = j(() => { + let e = N(null), t = N(null), n = N(!1), r = N(0), i = N(null), a = N(null), o = N(null), s = N(null), c = N(null), l = N([]), u = j(() => !!i.value), d = j(() => { let e = s.value, t = c.value; return !t || t <= 0 || e == null ? 0 : Math.round(e / t * 100); }); @@ -1241,7 +1241,7 @@ async function dt(e, t) { return !D.DELETE_CONFIRMATION || !!await L(e > 1 ? T("dialog.deleteSelectedFiles", "Delete {count} selected files?", { count: e }) : T("dialog.deleteSingleFile", "Delete \"{label}\"?", { label: String(t || T("label.thisFile", "this file")) }), T("dialog.confirmDeleteTitle", "Majoor: Confirm delete")); } // ui/features/collections/contextmenu/addToCollectionMenuState.ts -var ft = N({ +var ft = M({ open: !1, x: 0, y: 0, @@ -2919,7 +2919,7 @@ function Xt() { title: "" }; } -var Q = N({ +var Q = M({ portalOwnerId: "", mountedPortalIds: [], main: Xt(), @@ -9547,13 +9547,13 @@ var Vr = null, Hr = null, Ur = null, Wr = null, Gr = null, Kr = null; function qr() { Vr || import("./abCompare-BUrGm4-x.js").then((e) => { Vr = e; - }), Hr || import("./sideBySide-BLNTzu0A.js").then((e) => { + }), Hr || import("./sideBySide-FiIpKO3N.js").then((e) => { Hr = e; - }), Ur || import("./model3dRenderer-B-J9oQzQ.js").then((e) => e.t).then((e) => { + }), Ur || import("./model3dRenderer-CIUrxTBK.js").then((e) => e.t).then((e) => { Ur = e; }), Wr || import("./scopes-bvTRS68K.js").then((e) => { Wr = e; - }), Gr || import("./genInfo-B3LeL9TU.js").then((e) => e.n).then((e) => { + }), Gr || import("./genInfo-B9wv7JDq.js").then((e) => e.n).then((e) => { Gr = e; }), Kr || import("./frameExport-CnNO7oN6.js").then((e) => { Kr = e; diff --git a/dist/chunks/viewerRuntimeHosts-CW2DfHq_.js b/dist/chunks/viewerRuntimeHosts-XPTU8ZhU.js similarity index 99% rename from dist/chunks/viewerRuntimeHosts-CW2DfHq_.js rename to dist/chunks/viewerRuntimeHosts-XPTU8ZhU.js index 18072300..54e3ff2b 100644 --- a/dist/chunks/viewerRuntimeHosts-CW2DfHq_.js +++ b/dist/chunks/viewerRuntimeHosts-XPTU8ZhU.js @@ -1,4 +1,4 @@ -import { Ct as e, Tt as t, _t as n, bt as r, it as i, k as a, m as o, o as s, rt as c, vt as l, wt as u, yt as d } from "./events-cBMXVULQ.js"; +import { Ct as e, Tt as t, _t as n, bt as r, it as i, k as a, m as o, o as s, rt as c, vt as l, wt as u, yt as d } from "./events-CttACGx4.js"; // ui/app/settingsStore.ts var f = "mjrSettings", p = "mjrMinimapSettings", m = /* @__PURE__ */ new Set([ "POST", diff --git a/dist/entry.js b/dist/entry.js index 603a4bcd..d8640037 100644 --- a/dist/entry.js +++ b/dist/entry.js @@ -1,13 +1,13 @@ -import { $t as e, A as t, B as n, Bt as r, C as i, D as a, E as o, Et as s, G as c, H as l, J as u, Jt as d, L as f, Lt as p, M as m, N as h, O as g, P as _, Rt as v, S as y, U as b, Ut as x, V as S, Vt as C, W as w, Wt as T, Xt as E, Yt as D, _ as O, _t as k, an as A, b as j, bt as M, c as N, d as P, en as ee, f as te, ft as F, g as I, gt as ne, h as re, ht as ie, in as ae, j as oe, jt as se, k as L, l as ce, m as le, mt as ue, nn as de, o as fe, on as pe, pt as me, q as he, qt as ge, rn as _e, s as ve, sn as ye, st as be, tn as xe, u as Se, ut as Ce, vt as we, w as Te, xt as Ee, y as De, yt as Oe, z as ke, zt as Ae } from "./chunks/viewerRuntimeHosts-CW2DfHq_.js"; -import { $ as je, A as Me, Ct as Ne, F as Pe, J as Fe, K as Ie, L as Le, Q as Re, St as ze, Tt as Be, U as Ve, W as He, Y as Ue, _ as We, at as Ge, ct as Ke, dt as qe, et as Je, ft as Ye, g as Xe, ht as Ze, j as Qe, lt as $e, m as R, mt as et, n as z, nt as tt, o as B, ot as nt, pt as rt, q as it, r as V, rt as at, st as ot, t as st, tt as ct, ut as lt, xt as ut } from "./chunks/events-cBMXVULQ.js"; +import { $t as e, A as t, B as n, Bt as r, C as i, D as a, E as o, Et as s, G as c, H as l, J as u, Jt as d, L as f, Lt as p, M as m, N as h, O as g, P as _, Rt as v, S as y, U as b, Ut as x, V as S, Vt as C, W as w, Wt as T, Xt as E, Yt as D, _ as O, _t as k, an as A, b as j, bt as M, c as N, d as P, en as ee, f as te, ft as F, g as I, gt as ne, h as re, ht as ie, in as ae, j as oe, jt as se, k as L, l as ce, m as le, mt as ue, nn as de, o as fe, on as pe, pt as me, q as he, qt as ge, rn as _e, s as ve, sn as ye, st as be, tn as xe, u as Se, ut as Ce, vt as we, w as Te, xt as Ee, y as De, yt as Oe, z as ke, zt as Ae } from "./chunks/viewerRuntimeHosts-XPTU8ZhU.js"; +import { $ as je, A as Me, Ct as Ne, F as Pe, J as Fe, K as Ie, L as Le, Q as Re, St as ze, Tt as Be, U as Ve, W as He, Y as Ue, _ as We, at as Ge, ct as Ke, dt as qe, et as Je, ft as Ye, g as Xe, ht as Ze, j as Qe, lt as $e, m as R, mt as et, n as z, nt as tt, o as B, ot as nt, pt as rt, q as it, r as V, rt as at, st as ot, t as st, tt as ct, ut as lt, xt as ut } from "./chunks/events-CttACGx4.js"; import { a as dt, i as ft, n as pt, t as mt } from "./chunks/graphTraversal-DTdQWkn5.js"; -import { A as ht, B as gt, C as _t, E as vt, F as yt, G as bt, H as xt, I as St, K as Ct, L as wt, M as Tt, N as Et, O as Dt, P as Ot, R as kt, S as At, T as jt, U as Mt, V as Nt, W as Pt, X as Ft, Y as It, Z as Lt, b as Rt, j as zt, k as Bt, p as Vt, q as Ht, w as Ut, x as Wt, y as Gt, z as Kt } from "./chunks/viewerOpenRequest-_DqD1rXA.js"; -import { $ as qt, A as Jt, B as Yt, C as Xt, D as Zt, E as Qt, F as $t, G as en, H as tn, I as nn, J as rn, K as an, L as on, M as sn, N as cn, O as ln, P as un, Q as dn, R as fn, T as pn, U as mn, V as hn, W as gn, X as _n, Y as vn, Z as yn, _ as bn, a as xn, c as Sn, d as Cn, et as wn, f as Tn, g as En, h as Dn, i as On, j as kn, k as An, l as jn, m as Mn, n as Nn, nt as Pn, o as Fn, p as In, q as Ln, s as Rn, t as zn, tt as Bn, u as Vn, w as Hn, z as Un } from "./chunks/SidebarWorkflowSection-F3hoMYG1.js"; -import { _ as Wn, i as Gn, n as Kn, p as qn, t as Jn } from "./chunks/openMajoorSettings-B9ZJ7bmZ.js"; -import { a as Yn, c as Xn, l as Zn, o as Qn, s as $n, u as er } from "./chunks/floatingViewerManager-CKeu6wKp.js"; -import { A as tr, B as nr, C as H, D as rr, E as U, G as ir, H as W, J as ar, K as or, L as sr, M as cr, N as lr, O as G, P as ur, R as dr, S as fr, T as K, U as pr, V as mr, W as hr, X as gr, Y as q, at as _r, b as vr, dt as yr, ft as br, it as J, j as Y, k as X, lt as xr, nt as Sr, ot as Cr, pt as Z, q as wr, rt as Tr, st as Er, ut as Q, v as Dr, w as Or, x as kr, y as Ar, z as jr } from "./chunks/mjr-primevue-3mpaVb1C.js"; -import { n as Mr, r as Nr } from "./chunks/mjr-vue-vendor-B23qUCEw.js"; -import { n as Pr, t as Fr } from "./chunks/TagsEditor-qDIeaA8P.js"; +import { A as ht, B as gt, C as _t, E as vt, F as yt, G as bt, H as xt, I as St, K as Ct, L as wt, M as Tt, N as Et, O as Dt, P as Ot, R as kt, S as At, T as jt, U as Mt, V as Nt, W as Pt, X as Ft, Y as It, Z as Lt, b as Rt, j as zt, k as Bt, p as Vt, q as Ht, w as Ut, x as Wt, y as Gt, z as Kt } from "./chunks/viewerOpenRequest-CZXk8yvU.js"; +import { $ as qt, A as Jt, B as Yt, C as Xt, D as Zt, E as Qt, F as $t, G as en, H as tn, I as nn, J as rn, K as an, L as on, M as sn, N as cn, O as ln, P as un, Q as dn, R as fn, T as pn, U as mn, V as hn, W as gn, X as _n, Y as vn, Z as yn, _ as bn, a as xn, c as Sn, d as Cn, et as wn, f as Tn, g as En, h as Dn, i as On, j as kn, k as An, l as jn, m as Mn, n as Nn, nt as Pn, o as Fn, p as In, q as Ln, s as Rn, t as zn, tt as Bn, u as Vn, w as Hn, z as Un } from "./chunks/SidebarWorkflowSection-DrSf3i6L.js"; +import { _ as Wn, i as Gn, n as Kn, p as qn, t as Jn } from "./chunks/openMajoorSettings-Do4UDwGh.js"; +import { a as Yn, c as Xn, l as Zn, o as Qn, s as $n, u as er } from "./chunks/floatingViewerManager-CLgIT9uN.js"; +import { $ as tr, B as nr, C as H, D as rr, E as U, F as ir, G as ar, H as or, J as sr, K as cr, M as W, N as lr, O as G, P as ur, Q as K, R as dr, S as fr, T as q, U as pr, V as mr, W as J, X as hr, Z as gr, at as _r, b as vr, ct as yr, ft as br, gt as Y, ht as xr, j as Sr, k as X, lt as Cr, mt as wr, ot as Tr, pt as Z, q as Er, st as Q, ut as Dr, v as Or, w as kr, x as Ar, y as jr } from "./chunks/mjr-primevue-C07IsEdU.js"; +import { n as Mr, r as Nr } from "./chunks/mjr-vue-vendor-CEDOnn2t.js"; +import { n as Pr, t as Fr } from "./chunks/TagsEditor-CZP7xeZ3.js"; import { app as Ir } from "../../scripts/app.js"; function Lr(e = null) { return null; @@ -286,7 +286,7 @@ function fi({ enabled: e = !0 } = {}) { let t = "mjr-theme-comfy-css"; if (document.getElementById(t)) di(); else try { - let e = new URL("data:text/css;base64,LyoqCiAqIE1ham9vciBBc3NldHMgTWFuYWdlciAtIENvbWZ5LWxpa2UgdGhlbWUgbGF5ZXIKICoKICogUlVMRVM6CiAqIC0gRG8gTk9UIGhhcmRjb2RlIGEgY3VzdG9tIHBhbGV0dGU7IHVzZSBleGlzdGluZyBDb21meVVJIENTUyB2YXJpYWJsZXMgdmlhIHZhciguLi4pLgogKiAtIEtlZXAgZXZlcnl0aGluZyBzY29wZWQgdW5kZXIgYC5tanItYXNzZXRzLW1hbmFnZXJgIHRvIGF2b2lkIGxlYWtpbmcgc3R5bGVzIHRvIENvbWZ5VUkgKGV4Y2VwdCBgLm1qci1wb3BvdmVyKmAgd2hpY2ggY2FuIGJlIHBvcnRhbGVkIHRvIGBkb2N1bWVudC5ib2R5YCkuCiAqLwoKLm1qci1hc3NldHMtbWFuYWdlciB7CiAgICAvKiBUeXBvZ3JhcGh5ICovCiAgICBmb250LWZhbWlseTogdmFyKAogICAgICAgIC0tY29tZnktZm9udCwKICAgICAgICB2YXIoCiAgICAgICAgICAgIC0tZm9udC1pbnRlciwKICAgICAgICAgICAgdWktc2Fucy1zZXJpZiwKICAgICAgICAgICAgc3lzdGVtLXVpLAogICAgICAgICAgICAtYXBwbGUtc3lzdGVtLAogICAgICAgICAgICAiU2Vnb2UgVUkiLAogICAgICAgICAgICBSb2JvdG8sCiAgICAgICAgICAgIEFyaWFsLAogICAgICAgICAgICBzYW5zLXNlcmlmCiAgICAgICAgKQogICAgKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yLCB2YXIoLS1jb250ZW50LWZnLCB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKSkpOwoKICAgIC8qCiAgICAgKiBTdXJmYWNlcyAtIHByaW9yaXR5OiBDb21meVVJIHYxLjQyIGRlc2lnbi1zeXN0ZW0gdG9rZW4gLT4gbGVnYWN5IHRva2VuIC0+IGhhcmQgZmFsbGJhY2sKICAgICAqIE5ldyB0b2tlbnM6IC0taW50ZXJmYWNlLXBhbmVsLXN1cmZhY2UsIC0taW50ZXJmYWNlLW1lbnUtc3VyZmFjZSwgLS1pbnRlcmZhY2UtcGFuZWwtaG92ZXItc3VyZmFjZSwKICAgICAqICAgICAgICAgICAgIC0tbW9kYWwtY2FyZC1iYWNrZ3JvdW5kLCAtLWJ1dHRvbi1zdXJmYWNlLCAtLWJ1dHRvbi1ob3Zlci1zdXJmYWNlLAogICAgICogICAgICAgICAgICAgLS1pbnRlcmZhY2UtcGFuZWwtc2VsZWN0ZWQtc3VyZmFjZSwgLS1wcmltYXJ5LWJhY2tncm91bmQsIC0tbXV0ZWQtZm9yZWdyb3VuZCwKICAgICAqICAgICAgICAgICAgIC0tYm9yZGVyLWRlZmF1bHQsIC0tc3VjY2Vzcy1iYWNrZ3JvdW5kLCAtLXdhcm5pbmctYmFja2dyb3VuZCwgLS1kZXN0cnVjdGl2ZS1iYWNrZ3JvdW5kCiAgICAgKi8KICAgIC0tbWpyLXN1cmZhY2UtMDogdmFyKC0taW50ZXJmYWNlLXBhbmVsLXN1cmZhY2UsIHZhcigtLWNvbnRlbnQtYmcsICMxZTFlMWUpKTsKICAgIC0tbWpyLXN1cmZhY2UtMTogdmFyKC0taW50ZXJmYWNlLW1lbnUtc3VyZmFjZSwgdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSkpOwogICAgLS1tanItc3VyZmFjZS0yOiB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtaG92ZXItc3VyZmFjZSwgdmFyKC0tY29tZnktbWVudS1zZWNvbmRhcnktYmcsICMzMzMpKTsKICAgIC0tbWpyLXN1cmZhY2UtMzogdmFyKC0tbW9kYWwtY2FyZC1iYWNrZ3JvdW5kLCB2YXIoLS1jb21meS1tZW51LWJnLCAjMjIyKSk7CiAgICAtLW1qci1ib3JkZXI6IHZhcigtLWJvcmRlci1kZWZhdWx0LCB2YXIoLS1ib3JkZXItY29sb3IsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpKTsKICAgIC0tbWpyLW11dGVkOiB2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kLCB2YXIoLS1kZXNjcmlwLXRleHQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42NSkpKTsKICAgIC0tbWpyLWFjY2VudDogdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKTsKICAgIC0tbWpyLWFjY2VudC1ob3ZlcjogdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWhvdmVyLCB2YXIoLS1jb21meS1hY2NlbnQsICM3ZWM4ZmYpKTsKICAgIC0tbWpyLWJ0bi1zdXJmYWNlOiB2YXIoLS1idXR0b24tc3VyZmFjZSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgLS1tanItYnRuLWhvdmVyOiB2YXIoLS1idXR0b24taG92ZXItc3VyZmFjZSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgLS1tanItc2VsZWN0ZWQtc3VyZmFjZTogdmFyKC0taW50ZXJmYWNlLXBhbmVsLXNlbGVjdGVkLXN1cmZhY2UsIHJnYmEoOTUsIDE3OSwgMjU1LCAwLjE1KSk7CgogICAgLyogUmFkaWkgLSB1c2UgQ29tZnlVSSBkZXNpZ24tc3lzdGVtIHJhZGl1cyB0b2tlbnMgd2hlbiBhdmFpbGFibGUgKi8KICAgIC0tbWpyLXItc206IHZhcigtLXJhZGl1cy1zbSwgOHB4KTsKICAgIC0tbWpyLXItbWQ6IHZhcigtLXJhZGl1cy1tZCwgMTBweCk7CiAgICAtLW1qci1yLWxnOiB2YXIoLS1yYWRpdXMtbGcsIDEycHgpOwoKICAgIC8qIFNwYWNpbmcgKi8KICAgIC0tbWpyLXBhZC1zbTogOHB4OwogICAgLS1tanItcGFkLW1kOiAxMnB4OwogICAgLS1tanItcGFkLWxnOiAxNnB4OwoKICAgIC8qIFNlbWFudGljIFN0YXR1cyBDb2xvcnMgLSBwcmVmZXIgQ29tZnlVSSB2MS40MiBzZW1hbnRpYyB0b2tlbnMgKi8KICAgIC0tbWpyLXN0YXR1cy1zdWNjZXNzOiB2YXIoLS1zdWNjZXNzLWJhY2tncm91bmQsIHZhcigtLWNvbWZ5LXN0YXR1cy1zdWNjZXNzLCAjNGNhZjUwKSk7CiAgICAtLW1qci1zdGF0dXMtd2FybmluZzogdmFyKC0td2FybmluZy1iYWNrZ3JvdW5kLCB2YXIoLS1jb21meS1zdGF0dXMtd2FybmluZywgI2ZmYTcyNikpOwogICAgLS1tanItc3RhdHVzLWVycm9yOiB2YXIoLS1kZXN0cnVjdGl2ZS1iYWNrZ3JvdW5kLCB2YXIoLS1jb21meS1zdGF0dXMtZXJyb3IsICNmNDQzMzYpKTsKICAgIC0tbWpyLXN0YXR1cy1pbmZvOiB2YXIoLS1jb21meS1zdGF0dXMtaW5mbywgIzIxOTZmMyk7CiAgICAtLW1qci1zdGF0dXMtbmV1dHJhbDogdmFyKC0tY29tZnktc3RhdHVzLW5ldXRyYWwsICM5ZTllOWUpOwogICAgLS1tanItc3Rhci1hY3RpdmU6ICNmZmQ0NWE7CgogICAgLyogQmFkZ2UgY29sb3JzIChvdmVycmlkZGVuIGJ5IHNldHRpbmdzKSAqLwogICAgLS1tanItYmFkZ2UtaW1hZ2U6ICMyMTk2ZjM7CiAgICAtLW1qci1iYWRnZS12aWRlbzogIzljMjdiMDsKICAgIC0tbWpyLWJhZGdlLWF1ZGlvOiAjZmY5ODAwOwogICAgLS1tanItYmFkZ2UtbW9kZWwzZDogIzRjYWY1MDsKICAgIC0tbWpyLWNhcmQtaG92ZXItY29sb3I6IHZhcigtLWludGVyZmFjZS1wYW5lbC1ob3Zlci1zdXJmYWNlLCAjM2QzZDNkKTsKICAgIC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yOiB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtc2VsZWN0ZWQtc3VyZmFjZSwgIzRhOTBlMik7CiAgICAtLW1qci1yYXRpbmctY29sb3I6ICNmZjk1MDA7CiAgICAtLW1qci10YWctY29sb3I6ICM0YTkwZTI7Cn0KCi8qIE1ha2UgdGhlIHRoZW1lIHZpc2libHkgYXBwbHkgZXZlbiB3aXRoIGlubGluZSBzdHlsZXMgKi8KLm1qci1hc3NldHMtbWFuYWdlciAqIHsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIubWpyLWFtLWNvbnRhaW5lciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGhlaWdodDogMTAwJTsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1oZWFkZXIgewogICAgcGFkZGluZzogMTRweCAxNnB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSk7CiAgICBmbGV4OiAwIDAgYXV0bzsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDI7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1oZWFkZXItcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgbWluLWhlaWdodDogMjhweDsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGZsZXgtd3JhcDogd3JhcDsKICAgIHJvdy1nYXA6IDEwcHg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1oZWFkZXItbGVmdCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1oZWFkZXItYWN0aW9ucyB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBmbGV4OiAwIDAgYXV0bzsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGZsZXgtd3JhcDogd3JhcDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWhlYWRlci10b29scyB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGdhcDogOHB4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRhYnMgewogICAgLyogUXVldWUtbGlrZSB0YWJzIChhY3RpdmUgcGlsbCwgb3RoZXJzIGFzIHRleHQpICovCiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGJvcmRlcjogbm9uZTsKICAgIHBhZGRpbmc6IDA7CiAgICBnYXA6IDEwcHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBmbGV4OiAxIDEgYXV0bzsKICAgIG1pbi13aWR0aDogMDsKICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci10YWJzOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICB3aWR0aDogMDsKICAgIGhlaWdodDogMDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRhYiB7CiAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2RkZCkgNjUlLCB0cmFuc3BhcmVudCk7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIHRyYW5zZm9ybSAxMjBtcyBlYXNlLAogICAgICAgIGJhY2tncm91bmQtY29sb3IgMTIwbXMgZWFzZSwKICAgICAgICBjb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGFiOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHRyYW5zcGFyZW50KTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDcwJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGFiLmlzLWFjdGl2ZSB7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2ZmZik7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLCB0cmFuc3BhcmVudCk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4NSUsIHRyYW5zcGFyZW50KTsKICAgIGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjE4KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWljb24tYnRuIHsKICAgIHdpZHRoOiAyOHB4OwogICAgaGVpZ2h0OiAyOHB4OwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcsIDAuNXJlbSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTIpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgcGFkZGluZzogMDsKICAgIHRyYW5zaXRpb246CiAgICAgICAgdHJhbnNmb3JtIDEyMG1zIGVhc2UsCiAgICAgICAgYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaWNvbi1idG46aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNDUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLCB2YXIoLS1tanItYWNjZW50KSA4JSk7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pY29uLWJ0bi5tanItY29udGV4dC1hY3RpdmUsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pY29uLWJ0bi5tanItcG9wb3Zlci1vcGVuIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDg1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDU1JSwgdmFyKC0tbWpyLWFjY2VudCkgMTIlKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMzUlLCB0cmFuc3BhcmVudCk7Cn0KCi8qIEZsb2F0aW5nIFZpZXdlciBidXR0b24gLSB0ZWFsIGdsb3cgd2hlbiB2aWV3ZXIgaXMgb3BlbiAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaWNvbi1idG4ubWpyLW1mdi1idG4tYWN0aXZlIHsKICAgIGNvbG9yOiAjNGRkOWMwOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDc3LCAyMTcsIDE5MiwgMC41NSk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDc3LCAyMTcsIDE5MiwgMC4xKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCByZ2JhKDc3LCAyMTcsIDE5MiwgMC4yNSk7Cn0KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWljb24tYnRuLm1qci1tZnYtYnRuLWFjdGl2ZSAucGkgewogICAgb3BhY2l0eTogMTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWljb24tYnRuLm1qci1tZXNzYWdlLWJ0biB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogdmlzaWJsZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWljb24tYnRuLm1qci1tZXNzYWdlLWhhcy11bnJlYWQgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNzUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNzIlLCB2YXIoLS1tanItYWNjZW50KSAxMSUpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWVzc2FnZS1iYWRnZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IC01cHg7CiAgICByaWdodDogLTZweDsKICAgIG1pbi13aWR0aDogMTZweDsKICAgIGhlaWdodDogMTZweDsKICAgIHBhZGRpbmc6IDAgNHB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgNTUlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMykpOwogICAgYmFja2dyb3VuZDogI2VmNTM1MDsKICAgIGNvbG9yOiAjZmZmOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMzUpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaWNvbi1idG4gLnBpIHsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgb3BhY2l0eTogMC45Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaWNvbi1idG46ZGlzYWJsZWQsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1haS1jb250cm9sOmRpc2FibGVkIHsKICAgIG9wYWNpdHk6IDAuNTsKICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICBmaWx0ZXI6IGdyYXlzY2FsZSgwLjQ1KTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDg4JSwgdHJhbnNwYXJlbnQpICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgOTIlLCB0cmFuc3BhcmVudCkgIWltcG9ydGFudDsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KSkgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFpLWRpc2FibGVkIC5tanItYWktY29udHJvbDpob3ZlciB7CiAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFpLWRpc2FibGVkLWJsb2NrIHsKICAgIG9wYWNpdHk6IDAuNTg7CiAgICBmaWx0ZXI6IGdyYXlzY2FsZSgwLjQ1KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFpLWRpc2FibGVkLWJsb2NrIC5tanItYWktY29udHJvbCwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFpLWRpc2FibGVkLWJsb2NrIGJ1dHRvbiB7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLyogUG9wb3ZlcnMgY2FuIGJlIG1vdmVkIHRvIGBkb2N1bWVudC5ib2R5YCAocG9ydGFsKSB0byBhdm9pZCBiZWluZyBjbGlwcGVkLiAqLwoubWpyLXBvcG92ZXIgewogICAgZm9udC1mYW1pbHk6IHZhcigKICAgICAgICAtLWNvbWZ5LWZvbnQsCiAgICAgICAgdmFyKAogICAgICAgICAgICAtLWZvbnQtaW50ZXIsCiAgICAgICAgICAgIHVpLXNhbnMtc2VyaWYsCiAgICAgICAgICAgIHN5c3RlbS11aSwKICAgICAgICAgICAgLWFwcGxlLXN5c3RlbSwKICAgICAgICAgICAgIlNlZ29lIFVJIiwKICAgICAgICAgICAgUm9ib3RvLAogICAgICAgICAgICBBcmlhbCwKICAgICAgICAgICAgc2Fucy1zZXJpZgogICAgICAgICkKICAgICk7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBsaW5lLWhlaWdodDogMS4zNTsKICAgIGNvbG9yOiB2YXIoLS1mZy1jb2xvciwgdmFyKC0tY29udGVudC1mZywgdmFyKC0taW5wdXQtdGV4dCwgI2RkZCkpKTsKCiAgICAvKiBQcm92aWRlIGZhbGxiYWNrcyB3aGVuIG91dHNpZGUgYC5tanItYXNzZXRzLW1hbmFnZXJgIHNjb3BlICovCiAgICAtLW1qci1zdXJmYWNlLTE6IHZhcigtLWludGVyZmFjZS1tZW51LXN1cmZhY2UsIHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpKTsKICAgIC0tbWpyLWJvcmRlcjogdmFyKC0tYm9yZGVyLWRlZmF1bHQsIHZhcigtLWJvcmRlci1jb2xvciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSkpOwogICAgLS1tanItbXV0ZWQ6IHZhcigtLW11dGVkLWZvcmVncm91bmQsIHZhcigtLWRlc2NyaXAtdGV4dCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSkpOwogICAgLS1tanItYWNjZW50OiB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpOwogICAgLS1tanItcG9wb3Zlci16LWluZGV4OiAyMTQ3NDgzNjQ3OwoKICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgIHRvcDogMDsKICAgIGxlZnQ6IDA7CiAgICBtaW4td2lkdGg6IDA7CiAgICB3aWR0aDogbWluKDI4MHB4LCBjYWxjKDEwMHZ3IC0gMjRweCkpOwogICAgbWF4LXdpZHRoOiBtaW4oMzYwcHgsIGNhbGMoMTAwdncgLSAyNHB4KSk7CiAgICBwYWRkaW5nOiAxMHB4OwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnLCAwLjVyZW0pOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSwgdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSkpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgdmFyKC0tYm9yZGVyLWNvbG9yLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKSk7CiAgICBib3gtc2hhZG93OiAwIDEycHggMjhweCByZ2JhKDAsIDAsIDAsIDAuMzUpOwogICAgei1pbmRleDogdmFyKC0tbWpyLXBvcG92ZXItei1pbmRleCk7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICB0b3VjaC1hY3Rpb246IHBhbi15OwogICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluOwp9CgoubWpyLXBvcG92ZXItLWhpZGRlbiB7CiAgICBkaXNwbGF5OiBub25lOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIHsKICAgIG1pbi13aWR0aDogMzQwcHg7CiAgICB3aWR0aDogbWluKDM2MHB4LCBjYWxjKDEwMHZ3IC0gMjRweCkpOwogICAgcGFkZGluZzogMTJweDsKfQoKLm1qci1zb3J0LXBvcG92ZXIgewogICAgbWluLXdpZHRoOiAyMjBweDsKICAgIHdpZHRoOiBtaW4oMjYwcHgsIGNhbGMoMTAwdncgLSAyNHB4KSk7CiAgICBwYWRkaW5nOiAxMHB4Owp9CgoubWpyLWNvbGxlY3Rpb25zLXBvcG92ZXIgewogICAgbWluLXdpZHRoOiAyODBweDsKICAgIHdpZHRoOiBtaW4oMzIwcHgsIGNhbGMoMTAwdncgLSAyNHB4KSk7CiAgICBwYWRkaW5nOiAxMHB4Owp9CgoubWpyLXBpbm5lZC1mb2xkZXJzLXBvcG92ZXIgewogICAgbWluLXdpZHRoOiAyODBweDsKICAgIHdpZHRoOiBtaW4oMzQwcHgsIGNhbGMoMTAwdncgLSAyNHB4KSk7CiAgICBwYWRkaW5nOiAxMHB4Owp9CgoubWpyLXBpbm5lZC1mb2xkZXJzLXBvcG92ZXIgLm1qci1waW5uZWQtZm9sZGVycy1tZW51IHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDZweDsKfQoKLm1qci1waW5uZWQtZm9sZGVycy1wb3BvdmVyIC5tanItcGlubmVkLWZvbGRlcnMtZW1wdHkgewogICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgb3BhY2l0eTogMC43NTsKfQoKLm1qci1waW5uZWQtZm9sZGVycy1wb3BvdmVyIC5tanItcGlubmVkLWZvbGRlci1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoOwogICAgd2lkdGg6IDEwMCU7Cn0KCi5tanItcGlubmVkLWZvbGRlcnMtcG9wb3ZlciAubWpyLXBpbm5lZC1mb2xkZXItb3BlbiB7CiAgICBmbGV4OiAxOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICB3aWR0aDogMTAwJTsKICAgIGdhcDogMTBweDsKICAgIHBhZGRpbmc6IDlweCAxMHB4OwogICAgYm9yZGVyLXJhZGl1czogOXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxMjAsIDE5MCwgMjU1LCAwLjE4KTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMyksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMSkpOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBib3JkZXItY29sb3IgMTIwbXMgZWFzZSwKICAgICAgICBiYWNrZ3JvdW5kIDEyMG1zIGVhc2U7Cn0KCi5tanItcGlubmVkLWZvbGRlcnMtcG9wb3ZlciAubWpyLXBpbm5lZC1mb2xkZXItb3Blbjpob3ZlciwKLm1qci1waW5uZWQtZm9sZGVycy1wb3BvdmVyIC5tanItcGlubmVkLWZvbGRlci1vcGVuOmZvY3VzLXZpc2libGUgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE0NSwgMjA1LCAyNTUsIDAuNCk7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDgwLCAxNDAsIDI1NSwgMC4xOCksIHJnYmEoMzIsIDEwMCwgMjAwLCAwLjE0KSk7Cn0KCi5tanItcGlubmVkLWZvbGRlcnMtcG9wb3ZlciAubWpyLXBpbm5lZC1mb2xkZXItbGFiZWwgewogICAgbWluLXdpZHRoOiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBjb2xvcjogdmFyKC0tZmctY29sb3IsICNlNmVkZjcpOwp9CgoubWpyLXBpbm5lZC1mb2xkZXJzLXBvcG92ZXIgLm1qci1waW5uZWQtZm9sZGVyLXBhdGggewogICAgZmxleDogMCAxIGF1dG87CiAgICBtaW4td2lkdGg6IDA7CiAgICBtYXgtd2lkdGg6IDIyMHB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG9wYWNpdHk6IDAuNjg7CiAgICBmb250LXNpemU6IDExcHg7Cn0KCi5tanItcGlubmVkLWZvbGRlcnMtcG9wb3ZlciAubWpyLXBpbm5lZC1mb2xkZXItdW5waW4gewogICAgd2lkdGg6IDQycHg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDA7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgOTUsIDk1LCAwLjM1KTsKICAgIGJvcmRlci1yYWRpdXM6IDlweDsKICAgIG1hcmdpbi1sZWZ0OiA2cHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDI1NSwgNzAsIDcwLCAwLjE2KSwgcmdiYSgxNjAsIDIwLCAyMCwgMC4xMikpOwp9CgoubWpyLXBpbm5lZC1mb2xkZXJzLXBvcG92ZXIgLm1qci1waW5uZWQtZm9sZGVyLXVucGluIC5waSB7CiAgICBvcGFjaXR5OiAwLjg4OwogICAgY29sb3I6IHJnYmEoMjU1LCAxMzAsIDEzMCwgMC45Nik7Cn0KCi5tanItbWVzc2FnZXMtcG9wb3ZlciB7CiAgICBtaW4td2lkdGg6IDMyMHB4OwogICAgd2lkdGg6IG1pbig0NjBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIHBhZGRpbmc6IDEwcHg7Cn0KCi5tanItaW5saW5lLWRpYWxvZy1tYXNrIHsKICAgIHBvc2l0aW9uOiBzdGF0aWMgIWltcG9ydGFudDsKICAgIGluc2V0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICB3aWR0aDogYXV0byAhaW1wb3J0YW50OwogICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogICAgcG9pbnRlci1ldmVudHM6IGF1dG8gIWltcG9ydGFudDsKfQoKLm1qci1pbmxpbmUtZGlhbG9nLXJvb3QgewogICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKICAgIHdpZHRoOiAxMDAlOwogICAgcG9pbnRlci1ldmVudHM6IGF1dG87Cn0KCi5tanItaW5saW5lLWRpYWxvZy1jb250ZW50IHsKICAgIHBhZGRpbmc6IDA7Cn0KCi5tanItbWVzc2FnZXMtaGVhZCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogOHB4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAgbWFyZ2luLWJvdHRvbTogOHB4Owp9CgoubWpyLW1lc3NhZ2VzLXRhYnMgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICBwYWRkaW5nOiAzcHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4OCUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA3NCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1tZXNzYWdlcy10YWIgewogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIGJvcmRlcjogMDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZjFmMWYxKSA3NiUsIHRyYW5zcGFyZW50KTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yIDAuMTRzIGVhc2UsCiAgICAgICAgY29sb3IgMC4xNHMgZWFzZSwKICAgICAgICB0cmFuc2Zvcm0gMC4xNHMgZWFzZTsKfQoKLm1qci1tZXNzYWdlcy10YWI6aG92ZXIsCi5tanItbWVzc2FnZXMtdGFiOmZvY3VzLXZpc2libGUgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDE0JSwgdHJhbnNwYXJlbnQpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNmMWYxZjEpOwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci1tZXNzYWdlcy10YWIuaXMtYWN0aXZlIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAyMiUsIHZhcigtLW1qci1zdXJmYWNlLTIpKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZmZmKTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMzQlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWVzc2FnZXMtcGFuZWxzIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDhweDsKICAgIG1heC1oZWlnaHQ6IG1pbig1MnZoLCA0MjBweCk7Cn0KCi5tanItbWVzc2FnZXMtbGlzdCwKLm1qci1tZXNzYWdlcy1zaG9ydGN1dHMtcGFuZWwgewogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47Cn0KCi5tanItdGFiLWNvdW50LWJhZGdlIHsKICAgIG1pbi13aWR0aDogMTZweDsKICAgIGhlaWdodDogMTZweDsKICAgIHBhZGRpbmc6IDAgNXB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGZvbnQtc2l6ZTogOXB4OwogICAgZm9udC13ZWlnaHQ6IDgwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAyZW07CiAgICBsaW5lLWhlaWdodDogMTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAyOCUsIHZhcigtLW1qci1zdXJmYWNlLTIpKTsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2ZmZikgOTIlLCB0cmFuc3BhcmVudCk7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDQ4JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1lc3NhZ2VzLXRpdGxlIHsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgbWluLXdpZHRoOiAwOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAzZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSA4MiUsIHZhcigtLW1qci1tdXRlZCkpOwp9CgoubWpyLW1lc3NhZ2VzLWFjdGlvbnMgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgIGdhcDogNnB4OwogICAgZmxleC13cmFwOiB3cmFwOwp9CgoubWpyLW1lc3NhZ2VzLW1hcmstcmVhZC1idG4gewogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7Cn0KCi5tanItbWVzc2FnZXMtc3Rhci1saW5rIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2YxZjFmMSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjZjNjODRiIDQyJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsICNmM2M4NGIgMTIlLCB2YXIoLS1tanItc3VyZmFjZS0yKSk7Cn0KCi5tanItbWVzc2FnZXMtc3Rhci1saW5rOmhvdmVyLAoubWpyLW1lc3NhZ2VzLXN0YXItbGluazpmb2N1cy12aXNpYmxlIHsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQoKLm1qci1tZXNzYWdlcy1zdGFyLWljb24gewogICAgY29sb3I6ICNmM2M4NGI7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLm1qci1tZXNzYWdlcy1zdGFyLWxhYmVsIHsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItbWVzc2FnZXMtbGlzdCB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA4cHg7Cn0KCi5tanItbWVzc2FnZXMtZW1wdHkgewogICAgcGFkZGluZzogOHB4IDZweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIG9wYWNpdHk6IDAuNzI7Cn0KCi5tanItbWVzc2FnZS1pdGVtIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDVweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODYlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTglLCB0cmFuc3BhcmVudCk7CiAgICBwYWRkaW5nOiA4cHg7Cn0KCi5tanItbWVzc2FnZS1pdGVtLS11bnJlYWQgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTglLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDI2JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1lc3NhZ2UtaXRlbS0td2FybmluZyB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjZjBiODVhIDYyJSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLW1lc3NhZ2UtaXRlbS0tZXJyb3IgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgI2YzNmI2YiA2MiUsIHZhcigtLW1qci1ib3JkZXIpKTsKfQoKLm1qci1tZXNzYWdlLWl0ZW0tLXN1Y2Nlc3MgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgIzU4YzA3ZCA2MiUsIHZhcigtLW1qci1ib3JkZXIpKTsKfQoKLm1qci1tZXNzYWdlLWl0ZW0taGVhZCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogOHB4Owp9CgoubWpyLW1lc3NhZ2UtaXRlbS10aXRsZS13cmFwIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgbWluLXdpZHRoOiAwOwogICAgZmxleDogMSAxIGF1dG87Cn0KCi5tanItbWVzc2FnZS1pdGVtLWVtb2ppIHsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgZm9udC1zaXplOiAxNnB4OwogICAgbGluZS1oZWlnaHQ6IDE7Cn0KCi5tanItbWVzc2FnZS1pdGVtLXRpdGxlIHsKICAgIG1pbi13aWR0aDogMDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2YxZjFmMSk7Cn0KCi5tanItbWVzc2FnZS1pdGVtLWNhdGVnb3J5IHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDFweCA2cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wM2VtOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDIwJSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZmZmKSA4NiUsIHRyYW5zcGFyZW50KTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItbWVzc2FnZS1pdGVtLW1ldGEgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgb3BhY2l0eTogMC43MjsKfQoKLm1qci1tZXNzYWdlLWl0ZW0tYm9keSB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBvcGFjaXR5OiAwLjkyOwogICAgbGluZS1oZWlnaHQ6IDEuNDU7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwp9CgoubWpyLW1lc3NhZ2UtaXRlbS1hY3Rpb24gewogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKTsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgIHdpZHRoOiBmaXQtY29udGVudDsKfQoKLm1qci1tZXNzYWdlLWl0ZW0tYWN0aW9uOmhvdmVyIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9CgovKiBUb2FzdCBIaXN0b3J5IHRhYiAtIHVucmVhZCBpbmRpY2F0b3IgZG90ICovCi5tanItdGFiLXVucmVhZC1kb3QgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgd2lkdGg6IDZweDsKICAgIGhlaWdodDogNnB4OwogICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7CiAgICBtYXJnaW4tbGVmdDogNXB4OwogICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgIGZsZXgtc2hyaW5rOiAwOwp9CgovKiBIaXN0b3J5IHBhbmVsICovCi5tanItbWVzc2FnZXMtaGlzdG9yeS1wYW5lbCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIG1pbi1oZWlnaHQ6IDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgoubWpyLWhpc3RvcnktaGVhZCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIHBhZGRpbmc6IDRweCAwIDZweDsKICAgIGZsZXgtc2hyaW5rOiAwOwp9CgoubWpyLWhpc3RvcnktaGVhZC1sYWJlbCB7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgb3BhY2l0eTogMC42MjsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtOwp9CgoubWpyLWhpc3RvcnktY2xlYXItYnRuIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIHBhZGRpbmc6IDJweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwogICAgY29sb3I6IGluaGVyaXQ7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBvcGFjaXR5OiAwLjcyOwp9CgoubWpyLWhpc3RvcnktY2xlYXItYnRuOmhvdmVyIHsKICAgIG9wYWNpdHk6IDE7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMTIlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItaGlzdG9yeS1saXN0IHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDRweDsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwp9CgoubWpyLWhpc3RvcnktaXRlbSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICBnYXA6IDhweDsKICAgIHBhZGRpbmc6IDZweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCkpOwogICAgZm9udC1zaXplOiAxMnB4Owp9CgoubWpyLWhpc3RvcnktaXRlbS0tZXJyb3IgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgI2YzNmI2YiA1MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tLXdhcm5pbmcgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgI2YwYjg1YSA1MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tLXN1Y2Nlc3MgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgIzU4YzA3ZCA1MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKfQoKLm1qci1oaXN0b3J5LWl0ZW0taWNvbiB7CiAgICBmbGV4LXNocmluazogMDsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ7Cn0KCi5tanItaGlzdG9yeS1pdGVtLWNvbnRlbnQgewogICAgbWluLXdpZHRoOiAwOwogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogNHB4Owp9CgoubWpyLWhpc3RvcnktaXRlbS1tc2cgewogICAgb3BhY2l0eTogMC45MjsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlOwogICAgd29yZC1icmVhazogYnJlYWstd29yZDsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tdGl0bGUgewogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICBvcGFjaXR5OiAwLjk2OwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7Cn0KCi5tanItaGlzdG9yeS1pdGVtLWRldGFpbCB7CiAgICBvcGFjaXR5OiAwLjg0OwogICAgbGluZS1oZWlnaHQ6IDEuNDU7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTsKICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7Cn0KCi5tanItaGlzdG9yeS1pdGVtLW1ldGEgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDZweDsKICAgIGZsZXgtd3JhcDogd3JhcDsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tdGltZSB7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBvcGFjaXR5OiAwLjUyOwp9CgoubWpyLWhpc3RvcnktaXRlbS1jaGlwIHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgcGFkZGluZzogMnB4IDZweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDgyJSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTMsIHZhcigtLW1qci1zdXJmYWNlLTIpKSA3OCUsIHRyYW5zcGFyZW50KTsKICAgIG9wYWNpdHk6IDAuNzY7Cn0KCi5tanItaGlzdG9yeS1pdGVtLWFjdGlvbiB7CiAgICBmb250LXNpemU6IDExcHg7CiAgICB3aWR0aDogZml0LWNvbnRlbnQ7CiAgICBjb2xvcjogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCi5tanItaGlzdG9yeS1pdGVtLWFjdGlvbjpob3ZlciB7CiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tcHJvZ3Jlc3MgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogNHB4Owp9CgoubWpyLWhpc3RvcnktaXRlbS1wcm9ncmVzcy1zdW1tYXJ5IHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIG9wYWNpdHk6IDAuNzQ7CiAgICBsaW5lLWhlaWdodDogMS4zNTsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlOwp9CgoubWpyLWhpc3RvcnktaXRlbS1wcm9ncmVzcy1iYXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDZweDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3NSUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tcHJvZ3Jlc3MtZmlsbCB7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDkwZGVnLAogICAgICAgIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCAjNThjMDdkIDcyJSwgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZikpCiAgICApOwp9CgoubWpyLXNob3J0Y3V0LWd1aWRlIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDhweDsKfQoKLm1qci1zaG9ydGN1dC1ndWlkZS1pbnRybyB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsaW5lLWhlaWdodDogMS40NTsKICAgIG9wYWNpdHk6IDAuODQ7Cn0KCi5tanItc2hvcnRjdXQtc2VjdGlvbiB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA2cHg7CiAgICBwYWRkaW5nOiA4cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDg0JSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTMsIHZhcigtLW1qci1zdXJmYWNlLTIpKSA3MiUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1zaG9ydGN1dC1zZWN0aW9uLXRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wNGVtOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2YxZjFmMSkgODglLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItc2hvcnRjdXQtbGlzdCB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA2cHg7Cn0KCi5tanItc2hvcnRjdXQtcm93IHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgxMzJweCwgMTYwcHgpIG1pbm1heCgwLCAxZnIpOwogICAgZ2FwOiA4cHg7CiAgICBhbGlnbi1pdGVtczogc3RhcnQ7Cn0KCi5tanItc2hvcnRjdXQta2V5IHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgbWluLWhlaWdodDogMjRweDsKICAgIHBhZGRpbmc6IDNweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAzOCUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAxMiUsIHZhcigtLW1qci1zdXJmYWNlLTIpKTsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2ZmZikgOTAlLCB0cmFuc3BhcmVudCk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGluZS1oZWlnaHQ6IDEuMjU7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwp9CgoubWpyLXNob3J0Y3V0LWRlc2MgewogICAgbWluLXdpZHRoOiAwOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgIG9wYWNpdHk6IDAuOTI7Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiA1NjBweCkgewogICAgLm1qci1zaG9ydGN1dC1yb3cgewogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgfQoKICAgIC5tanItc2hvcnRjdXQta2V5IHsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICB9Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItaGVhZCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBnYXA6IDEwcHg7CiAgICBtYXJnaW46IDAgMCAxMHB4OwogICAgcGFkZGluZzogNHB4IDJweCAxMHB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4NSUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1oZWFkLWxlZnQgewogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLWtpY2tlciB7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogODAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDllbTsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpIDY1JSwgdmFyKC0tY29udGVudC1mZywgI2RkZCkpOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLXN1YnRpdGxlIHsKICAgIG1hcmdpbi10b3A6IDJweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2RkZCkgNjIlLCB2YXIoLS1tanItbXV0ZWQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42NSkpKTsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1oZWFkLWFjdGlvbnMgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICBmbGV4OiAwIDAgYXV0bzsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1zdGFjayB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogOHB4Owp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLWFjdGl2ZS1jb3VudCB7CiAgICBtaW4td2lkdGg6IDIycHg7CiAgICBoZWlnaHQ6IDIycHg7CiAgICBwYWRkaW5nOiAwIDZweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpIDU1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpIDE4JSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2ZmZik7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItY2xlYXItYWxsIHsKICAgIGhlaWdodDogMjRweDsKICAgIHBhZGRpbmc6IDAgOHB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNzUlLCB0cmFuc3BhcmVudCk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNzAwOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItcG9wb3Zlci1yb3cgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgZ2FwOiA4cHg7CiAgICBhbGlnbi1pdGVtczogc3RhcnQ7CiAgICBtYXJnaW4tYm90dG9tOiAxMHB4Owp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItcG9wb3Zlci1yb3ctLTNjb2wgewogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKSBtaW5tYXgoMCwgMWZyKTsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLXBvcG92ZXItcm93LS0zY29sIC5tanItcG9wb3Zlci1sYWJlbCB7CiAgICBncmlkLWNvbHVtbjogMSAvIC0xOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItcG9wb3Zlci1sYWJlbCB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSA3MCUsIHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSkpOwogICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLXBvcG92ZXItdG9nZ2xlIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogdmFyKC0tZmctY29sb3IsICNlNmVkZjcpOwogICAgcGFkZGluZzogNnB4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4MCUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA2NiUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLXBvcG92ZXItdG9nZ2xlIGlucHV0W3R5cGU9ImNoZWNrYm94Il0gewogICAgYWNjZW50LWNvbG9yOiB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKTsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1ncm91cCB7CiAgICAtLW1qci1maWx0ZXItZ3JvdXAtYWNjZW50OiB2YXIoLS1tanItYWNjZW50LCAjN2FhMmZmKTsKICAgIHBhZGRpbmc6IDEwcHggMCA4cHg7CiAgICBtYXJnaW4tYm90dG9tOiA0cHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItZ3JvdXA6bGFzdC1jaGlsZCB7CiAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKICAgIHBhZGRpbmctYm90dG9tOiAycHg7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItZ3JvdXAtLWNvcmUgewogICAgLS1tanItZmlsdGVyLWdyb3VwLWFjY2VudDogIzU2YThmZjsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1ncm91cC0tbWVkaWEgewogICAgLS1tanItZmlsdGVyLWdyb3VwLWFjY2VudDogIzM1ZDA4YjsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1ncm91cC0tdGltZSB7CiAgICAtLW1qci1maWx0ZXItZ3JvdXAtYWNjZW50OiAjZjBiODRmOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLWdyb3VwLXRvZ2dsZSB7CiAgICB3aWR0aDogMTAwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZ2FwOiAxMHB4OwogICAgbWFyZ2luOiAwIDAgMTBweDsKICAgIGJvcmRlcjogMDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY29sb3I6IGluaGVyaXQ7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgcGFkZGluZzogMnB4IDRweDsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1ncm91cC10aXRsZSB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDZweDsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWZpbHRlci1ncm91cC1hY2NlbnQpIDYyJSwgdmFyKC0tY29udGVudC1mZywgI2RkZCkpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLWdyb3VwLXRpdGxlOjpiZWZvcmUgewogICAgY29udGVudDogIiI7CiAgICB3aWR0aDogNnB4OwogICAgaGVpZ2h0OiA2cHg7CiAgICBmbGV4OiAwIDAgNnB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItZmlsdGVyLWdyb3VwLWFjY2VudCk7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItZ3JvdXAtY2hldnJvbiB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWZpbHRlci1ncm91cC1hY2NlbnQpIDc4JSwgdmFyKC0tbWpyLW11dGVkLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKSk7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItZ3JvdXAtYm9keSB7CiAgICBwYWRkaW5nLXRvcDogNHB4Owp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLWNhcmQgewogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDg4JSwgdHJhbnNwYXJlbnQpOwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIHBhZGRpbmc6IDEwcHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4NiUsIHRyYW5zcGFyZW50KSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgODglLCB0cmFuc3BhcmVudCkKICAgICk7CiAgICBtYXJnaW4tYm90dG9tOiA4cHg7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItY2FyZDpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1ib3R0b206IDA7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItY2FyZC0tYWdlbmRhIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsICNmMGI4NGYgOSUsIHZhcigtLW1qci1zdXJmYWNlLTIpKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgOTIlLCB0cmFuc3BhcmVudCkKICAgICk7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItZ3JvdXA6bm90KC5pcy1vcGVuKSB7CiAgICBwYWRkaW5nLWJvdHRvbTogOHB4Owp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLWdyb3VwOm5vdCguaXMtb3BlbikgLm1qci1maWx0ZXItZ3JvdXAtdG9nZ2xlIHsKICAgIG1hcmdpbi1ib3R0b206IDA7Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiA0NDBweCkgewogICAgLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1oZWFkIHsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoOwogICAgfQoKICAgIC5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItaGVhZC1hY3Rpb25zIHsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICB9Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1oZWFkZXItaWNvbiB7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgb3BhY2l0eTogMC45Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0taGVhZGVyLXRpdGxlIHsKICAgIG1hcmdpbjogMDsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMWVtOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tY29udGVudCB7CiAgICBmbGV4OiAxOwogICAgcGFkZGluZzogMTZweDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIG1pbi1oZWlnaHQ6IDA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1mb2xkZXItYnJlYWRjcnVtYiB7CiAgICAtLW1qci1icmVhZGNydW1iLWFjY2VudDogIzU2YThmZjsKICAgIC0tbWpyLWJyZWFkY3J1bWItY3VycmVudDogIzM1ZDA4YjsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBwYWRkaW5nOiAzcHggNnB4OwogICAgbWFyZ2luOiAxcHggMCAzcHg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBvcGFjaXR5OiAwLjc4OwogICAgb3ZlcmZsb3c6IGF1dG87CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1icmVhZGNydW1iLWFjY2VudCkgMjIlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJyZWFkY3J1bWItYWNjZW50KSA5JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZm9sZGVyLWJyZWFkY3J1bWIuaXMtdmlzaWJsZSB7CiAgICBkaXNwbGF5OiBmbGV4Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZm9sZGVyLWJyZWFkY3J1bWItYWN0aW9uIHsKICAgIHBhZGRpbmc6IDJweCA4cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJyZWFkY3J1bWItYWNjZW50KSA0MiUsIHRyYW5zcGFyZW50KTsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYnJlYWRjcnVtYi1hY2NlbnQpIDE2JSwgdHJhbnNwYXJlbnQpOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYnJlYWRjcnVtYi1hY2NlbnQpIDc4JSwgI2ZmZmZmZik7CiAgICBmb250OiBpbmhlcml0OwogICAgY3Vyc29yOiBwb2ludGVyOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZm9sZGVyLWJyZWFkY3J1bWItYWN0aW9uOmRpc2FibGVkIHsKICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIG9wYWNpdHk6IDAuNTg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1mb2xkZXItYnJlYWRjcnVtYi1hY3Rpb246bm90KDpkaXNhYmxlZCk6aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJyZWFkY3J1bWItYWNjZW50KSA2MiUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYnJlYWRjcnVtYi1hY2NlbnQpIDI0JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZm9sZGVyLWJyZWFkY3J1bWItc2VnbWVudCB7CiAgICBtYXgtd2lkdGg6IDIyMHB4OwogICAgbWluLXdpZHRoOiAwOwogICAgcGFkZGluZzogMXB4IDVweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1icmVhZGNydW1iLWFjY2VudCkgOCUsIHRyYW5zcGFyZW50KTsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJyZWFkY3J1bWItYWNjZW50KSA3NiUsICNmZmZmZmYpOwogICAgZm9udDogaW5oZXJpdDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWZvbGRlci1icmVhZGNydW1iLXNlZ21lbnQ6bm90KDpkaXNhYmxlZCk6aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJyZWFkY3J1bWItYWNjZW50KSAzOCUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYnJlYWRjcnVtYi1hY2NlbnQpIDE2JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZm9sZGVyLWJyZWFkY3J1bWItc2VnbWVudC5pcy1jdXJyZW50LAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZm9sZGVyLWJyZWFkY3J1bWItc2VnbWVudDpkaXNhYmxlZCB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYnJlYWRjcnVtYi1jdXJyZW50KSAzOCUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYnJlYWRjcnVtYi1jdXJyZW50KSAxNCUsIHRyYW5zcGFyZW50KTsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJyZWFkY3J1bWItY3VycmVudCkgNzQlLCAjZmZmZmZmKTsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWZvbGRlci1icmVhZGNydW1iLXNlcGFyYXRvciB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1icmVhZGNydW1iLWFjY2VudCkgNTglLCB2YXIoLS1tanItbXV0ZWQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42MikpKTsKICAgIG9wYWNpdHk6IDAuOTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lZGlhLXNob3J0Y3V0cyB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDRweDsKICAgIGZsZXgtd3JhcDogd3JhcDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lZGlhLXNob3J0Y3V0LWJ0biB7CiAgICB3aWR0aDogMjRweDsKICAgIGhlaWdodDogMjRweDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lZGlhLXNob3J0Y3V0LWJ0biAucGkgewogICAgZm9udC1zaXplOiAxMXB4Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tZHVwLWFsZXJ0IHsKICAgIHBhZGRpbmc6IDJweCA4cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IsICM1NTUpOwogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktbWVudS1iZywgIzIyMik7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2VlZSk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWJyb3dzZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICBmbGV4OiAxOwogICAgbWluLWhlaWdodDogMDsKICAgIG1pbi13aWR0aDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc1JSwgdHJhbnNwYXJlbnQpOwogICAgcGFkZGluZy10b3A6IDRweDsKfQoKLyogU2Nyb2xsYmFycyAobWF0Y2ggQ29tZnlVSSBmZWVsKSAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tZ3JpZC1zY3JvbGwgewogICAgZmxleDogMSAxIGF1dG87CiAgICBtaW4td2lkdGg6IDA7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgaGVpZ2h0OiAxMDAlOwogICAgb3ZlcmZsb3c6IGF1dG87CiAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgdG91Y2gtYWN0aW9uOiBwYW4teTsKICAgIHNjcm9sbGJhci13aWR0aDogdGhpbjsKICAgIHNjcm9sbGJhci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDg1JSwgdmFyKC0tY29udGVudC1mZywgI2RkZCkpIHRyYW5zcGFyZW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tZ3JpZC1zY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIHdpZHRoOiAxMHB4OwogICAgaGVpZ2h0OiAxMHB4Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tZ3JpZC1zY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tZ3JpZC1zY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHZhcigtLWNvbnRlbnQtZmcsICNkZGQpKTsKICAgIGJvcmRlcjogMnB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tZ3JpZC1zY3JvbGw6aG92ZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA3MCUsIHZhcigtLWNvbnRlbnQtZmcsICNkZGQpKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWdyaWQtc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXIgewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1jdXN0b20tY29udHJvbHMgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiAwOwogICAgZ2FwOiA4cHg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXNlYXJjaCB7CiAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXNlYXJjaCB7CiAgICBwYWRkaW5nLWJvdHRvbTogNnB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgbWFyZ2luLWJvdHRvbTogNnB4Owp9CgovKiBDYXJkIE1ldGFkYXRhIENvbG9ycyAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWV0YS1kdXJhdGlvbiB7CiAgICBjb2xvcjogI2ZmYTcyNjsgLyogT3JhbmdlIGZvciBkdXJhdGlvbiAqLwogICAgZm9udC13ZWlnaHQ6IDUwMDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1ldGEtcmVzIHsKICAgIGNvbG9yOiAjNGZjM2Y3OyAvKiBMaWdodCBCbHVlIGZvciByZXNvbHV0aW9uICovCiAgICBmb250LXdlaWdodDogNTAwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWV0YS1kYXRlIHsKICAgIGNvbG9yOiAjYjlmNmNhOyAvKiBQYWxlIEdyZWVuIGZvciBkYXRlICovCiAgICBmb250LXNpemU6IDAuOWVtOwogICAgZm9udC13ZWlnaHQ6IDUwMDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1ldGEtdGltZSB7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKTsKICAgIGZvbnQtc2l6ZTogMC45ZW07Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zdW1tYXJ5IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZ2FwOiAxMHB4OwogICAgbWFyZ2luOiAwIDAgNnB4IDA7CiAgICBwYWRkaW5nOiAwIDAgNHB4IDA7CiAgICBtaW4taGVpZ2h0OiAxNnB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSk7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDY1JSwgdHJhbnNwYXJlbnQpOwogICAgZmxleDogMCAwIGF1dG87Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zdW1tYXJ5LXRleHQgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXN1bW1hcnktcmlnaHQgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmbGV4LXdyYXA6IHdyYXA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1jb250ZXh0LXBpbGxzIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNXB4OwogICAgcm93LWdhcDogNHB4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNvbnRleHQtcGlsbCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDZweDsKICAgIHBhZGRpbmc6IDNweCA3cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1NSUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHZhcigtLW1qci1hY2NlbnQpIDEwJSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDE4JSwgdHJhbnNwYXJlbnQpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgZm9udC1zaXplOiAxMC41cHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIG1pbi1oZWlnaHQ6IDIycHg7CiAgICBtYXgtd2lkdGg6IDIyMHB4Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY29udGV4dC1waWxsOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDc1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDUwJSwgdmFyKC0tbWpyLWFjY2VudCkgMTQlKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNvbnRleHQtcGlsbC10ZXh0IHsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvcGFjaXR5OiAwLjkyOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY29udGV4dC1waWxsLXggewogICAgd2lkdGg6IDIwcHg7CiAgICBoZWlnaHQ6IDIwcHg7CiAgICBwYWRkaW5nOiAwOwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc1JSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42NSkpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yIDEyMG1zIGVhc2UsCiAgICAgICAgYm9yZGVyLWNvbG9yIDEyMG1zIGVhc2U7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jb250ZXh0LXBpbGwteDpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1NSUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA3MCUsIHZhcigtLW1qci1hY2NlbnQpIDEwJSk7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2ZmZik7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zZWFyY2gtcGlsbCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIGhlaWdodDogMS43NXJlbTsKICAgIHBhZGRpbmc6IDAgMTBweDsKICAgIHdpZHRoOiAxMDAlOwogICAgbWF4LXdpZHRoOiBub25lOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnLCAwLjVyZW0pOwogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktaW5wdXQtYmcsIHJnYmEoMCwgMCwgMCwgMC4yNSkpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBmbGV4OiAxIDEgYXV0bzsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXNlYXJjaC10b29scyB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIGZsZXg6IDAgMCBhdXRvOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItcG9wb3Zlci1hbmNob3IgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwp9CgoubWpyLWFnZW5kYS1pbnB1dCB7CiAgICBkaXNwbGF5OiBub25lOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1pbnB1dC1iZywgcmdiYSgwLCAwLCAwLCAwLjI1KSk7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2RkZCk7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIGJhY2tncm91bmQtY29sb3IgMC4ycyBlYXNlLAogICAgICAgIGNvbG9yIDAuMnMgZWFzZSwKICAgICAgICBib3JkZXItY29sb3IgMC4ycyBlYXNlOwp9Ci5tanItYWdlbmRhLWlucHV0Lm1qci1hZ2VuZGEtZmlsbGVkIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peCgKICAgICAgICBpbiBzcmdiLAogICAgICAgIHZhcigtLW1qci1hY2NlbnQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpIDQwJSwKICAgICAgICB2YXIoLS1tanItc3VyZmFjZS0yKSA2MCUKICAgICk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peCgKICAgICAgICBpbiBzcmdiLAogICAgICAgIHZhcigtLW1qci1hY2NlbnQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpIDgwJSwKICAgICAgICB2YXIoLS1tanItYm9yZGVyKQogICAgKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZmZmKTsKfQoubWpyLWFnZW5kYS1pbnB1dC5tanItYWdlbmRhLWVtcHR5IHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4NSUsIHRyYW5zcGFyZW50IDE1JSk7CiAgICBib3JkZXItY29sb3I6IHZhcigtLW1qci1ib3JkZXIpOwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSk7Cn0KCi5tanItYWdlbmRhLWNvbnRhaW5lciB7CiAgICB3aWR0aDogMTAwJTsKfQoKLm1qci1hZ2VuZGEtY2FsZW5kYXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDhweDsKICAgIHdpZHRoOiAxMDAlOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWFnZW5kYS1oZWFkZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKfQoKLm1qci1hZ2VuZGEtbW9udGggewogICAgZmxleDogMTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLm1qci1hZ2VuZGEtbmF2IHsKICAgIHdpZHRoOiAzMnB4OwogICAgaGVpZ2h0OiAyOHB4OwogICAgcGFkZGluZzogMDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7Cn0KCi5tanItYWdlbmRhLWdyaWQgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDcsIG1pbm1heCgwLCAxZnIpKTsKICAgIGdhcDogNnB4OwogICAgd2lkdGg6IDEwMCU7Cn0KCi5tanItYWdlbmRhLXdlZWtkYXkgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSk7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLm1qci1hZ2VuZGEtZGF5IHsKICAgIGhlaWdodDogMzBweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHRyYW5zcGFyZW50KTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgcGFkZGluZzogMDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yIDEyMG1zIGVhc2UsCiAgICAgICAgYm9yZGVyLWNvbG9yIDEyMG1zIGVhc2UsCiAgICAgICAgdHJhbnNmb3JtIDgwbXMgZWFzZTsKfQoKLm1qci1hZ2VuZGEtZGF5LWJhZGdlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogLTVweDsKICAgIHJpZ2h0OiAtNXB4OwogICAgbWluLXdpZHRoOiAxNnB4OwogICAgaGVpZ2h0OiAxNnB4OwogICAgcGFkZGluZzogMCA0cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6ICNlNTM5MzU7CiAgICBjb2xvcjogI2ZmZjsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCAjZTUzOTM1IDY1JSwgI2ZmZmZmZiAzNSUpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxpbmUtaGVpZ2h0OiAxNHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Owp9CgoubWpyLWFnZW5kYS1kYXk6aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoCiAgICAgICAgaW4gc3JnYiwKICAgICAgICB2YXIoLS1tanItYm9yZGVyKSA1NSUsCiAgICAgICAgdmFyKC0tbWpyLWFjY2VudCwgdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKSkgNDUlCiAgICApOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KAogICAgICAgIGluIHNyZ2IsCiAgICAgICAgdmFyKC0tbWpyLXN1cmZhY2UtMikgNDUlLAogICAgICAgIHZhcigtLW1qci1hY2NlbnQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpIDEwJQogICAgKTsKfQoKLm1qci1hZ2VuZGEtZGF5OmFjdGl2ZSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTsKfQoKLm1qci1hZ2VuZGEtZGF5LS1ibGFuayB7CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLm1qci1hZ2VuZGEtZGF5LS1oYXMtYXNzZXRzIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KAogICAgICAgIGluIHNyZ2IsCiAgICAgICAgdmFyKC0tbWpyLWFjY2VudCwgdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKSkgODAlLAogICAgICAgIHZhcigtLW1qci1ib3JkZXIpCiAgICApOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KAogICAgICAgIGluIHNyZ2IsCiAgICAgICAgdmFyKC0tbWpyLWFjY2VudCwgdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKSkgMTglLAogICAgICAgIHZhcigtLW1qci1zdXJmYWNlLTIpIDgyJQogICAgKTsKfQoKLm1qci1hZ2VuZGEtZGF5LS1zZWxlY3RlZCB7CiAgICBib3JkZXItY29sb3I6IHZhcigtLW1qci1hY2NlbnQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4CiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpIDU1JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWFnZW5kYS1mb290ZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGdhcDogOHB4OwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwp9CgoubWpyLWFnZW5kYS1jbGVhciwKLm1qci1hZ2VuZGEtcmVmcmVzaCB7CiAgICBmbGV4OiAxOwp9CgoubWpyLW1lbnUsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1tZW51IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiA0cHg7Cn0KCi5tanItcHJpbWUtbWVudS1saXN0LAoubWpyLXNvcnQtbWVudSBbZGF0YS1wYy1zZWN0aW9uPSJsaXN0Il0gewogICAgbGlzdC1zdHlsZTogbm9uZTsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA2cHg7Cn0KCi5tanItcHJpbWUtbWVudSBbZGF0YS1wYy1zZWN0aW9uPSJpdGVtIl0sCi5tanItcHJpbWUtbWVudS1saXN0IFtkYXRhLXBjLXNlY3Rpb249Iml0ZW0iXSB7CiAgICBsaXN0LXN0eWxlOiBub25lOwp9CgoubWpyLXByaW1lLW1lbnUgW2RhdGEtcGMtc2VjdGlvbj0iaXRlbWNvbnRlbnQiXSB7CiAgICB3aWR0aDogMTAwJTsKfQoKLm1qci1tZW51LWl0ZW0sCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1tZW51LWl0ZW0gewogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZ2FwOiAxMHB4OwogICAgd2lkdGg6IDEwMCU7CiAgICBwYWRkaW5nOiA4cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yIDEyMG1zIGVhc2UsCiAgICAgICAgYm9yZGVyLWNvbG9yIDEyMG1zIGVhc2UsCiAgICAgICAgdHJhbnNmb3JtIDgwbXMgZWFzZTsKfQoKLm1qci1tZW51LWl0ZW06aG92ZXIsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1tZW51LWl0ZW06aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODAlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTUlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWVudS1pdGVtOmFjdGl2ZSwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lbnUtaXRlbTphY3RpdmUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDFweCk7Cn0KCi5tanItbWVudS1pdGVtLWxhYmVsLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWVudS1pdGVtLWxhYmVsIHsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1tZW51LWl0ZW0tY2hlY2ssCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1tZW51LWl0ZW0tY2hlY2sgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgd2lkdGg6IDE2cHg7CiAgICBmbGV4OiAwIDAgMTZweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG9wYWNpdHk6IDA7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDcyJSwgdmFyKC0tY29udGVudC1mZykpOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBvcGFjaXR5IDEyMG1zIGVhc2UsCiAgICAgICAgY29sb3IgMTIwbXMgZWFzZTsKfQoKLm1qci1tZW51LWl0ZW0gLnBpLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWVudS1pdGVtIC5waSB7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBvcGFjaXR5OiAwLjk7Cn0KCi5tanItY29sbGVjdGlvbnMtbWVudSB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA2cHg7Cn0KCi5tanItbWVudS1pdGVtLWxhYmVsLS1pY29uIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgZmxleDogMSAxIGF1dG87CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItbWVudS1pdGVtLWxhYmVsLS1pY29uIC5waSB7CiAgICB3aWR0aDogMTZweDsKICAgIGZsZXg6IDAgMCAxNnB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgoubWpyLW1lbnUtaXRlbS1yaWdodCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBmbGV4OiAwIDAgYXV0bzsKICAgIG1pbi13aWR0aDogMTZweDsKICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKfQoKLm1qci1tZW51LWl0ZW0taGludCB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcpIDYyJSwgdmFyKC0tbWpyLW11dGVkKSk7CiAgICBvcGFjaXR5OiAwLjcyOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci1tZW51LWl0ZW0tY2hlY2stLXZpc2libGUsCi5tanItbWVudS1pdGVtLmlzLWFjdGl2ZSAubWpyLW1lbnUtaXRlbS1jaGVjayB7CiAgICBvcGFjaXR5OiAxOwp9CgoubWpyLW1lbnUtZGl2aWRlciB7CiAgICBoZWlnaHQ6IDFweDsKICAgIG1hcmdpbjogNHB4IDA7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODAlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbXV0ZWQgewogICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgb3BhY2l0eTogMC43NTsKfQoKLm1qci1zdGF0ZS1ibG9jayB7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBsaW5lLWhlaWdodDogMS4zNTsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQpOwogICAgYm9yZGVyOiAxcHggZGFzaGVkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4NSUsIHRyYW5zcGFyZW50KTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLXNtKTsKICAgIHBhZGRpbmc6IDhweCAxMHB4OwogICAgbWFyZ2luOiA0cHggMDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA3MCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1zdGF0ZS1ibG9jay5pcy1lcnJvciwKLm1qci1jb250ZXh0LW1lbnUtbm90ZS5pcy1lcnJvciB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtZXJyb3IpIDgyJSwgdmFyKC0tY29udGVudC1mZykpOwogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy1lcnJvcikgNDUlLCB2YXIoLS1tanItYm9yZGVyKSk7Cn0KCi5tanItY29sbGVjdGlvbi1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoOwogICAgd2lkdGg6IDEwMCU7CiAgICBtaW4taGVpZ2h0OiA0OHB4Owp9CgoubWpyLWNvbGxlY3Rpb25zLXZpcnR1YWwtbGlzdCB7CiAgICB3aWR0aDogMTAwJTsKICAgIG92ZXJmbG93OiBhdXRvOwogICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluOwp9CgoubWpyLWRlbGV0ZS1idG4gewogICAgd2lkdGg6IDQycHg7CiAgICBmbGV4OiAwIDAgNDJweDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgcGFkZGluZzogMDsKICAgIG1hcmdpbi1sZWZ0OiA2cHg7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA2NSUsIHZhcigtLW1qci1zdGF0dXMtZXJyb3IpIDQ1JSk7Cn0KCi5tanItZGVsZXRlLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA0MCUsIHZhcigtLW1qci1zdGF0dXMtZXJyb3IpIDY1JSk7Cn0KCi5tanItZGVsZXRlLWJ0biAucGkgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLWVycm9yKSA3OCUsIHZhcigtLWNvbnRlbnQtZmcpKTsKfQoKLm1qci1zZWN0aW9uLXRpdGxlIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBwYWRkaW5nOiA2cHggMTBweCAycHg7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuNnB4OwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIG9wYWNpdHk6IDAuODg7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcpIDcyJSwgdmFyKC0tbWpyLW11dGVkKSk7Cn0KCi5tanItc2VjdGlvbi10aXRsZS0tY3lhbiB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsICM2ZmQ0ZmYgNzglLCB2YXIoLS1jb250ZW50LWZnKSk7Cn0KCi5tanItc2VjdGlvbi10aXRsZS0tdmlvbGV0IHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgI2M0OGRmZiA3OCUsIHZhcigtLWNvbnRlbnQtZmcpKTsKfQoKLm1qci1zZWN0aW9uLWhpbnQgewogICAgcGFkZGluZzogMCAxMHB4IDRweDsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcpIDU1JSwgdmFyKC0tbWpyLW11dGVkKSk7Cn0KCi5tanItbWVudS1pdGVtLS1zbWFydCwKLm1qci1tZW51LWl0ZW0tLWNsdXN0ZXIgewogICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9CgoubWpyLW1lbnUtaXRlbS0tY2x1c3RlciB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnKTsKfQoKLm1qci1tZW51LWl0ZW0tLXNtYXJ0IC5waSB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsICM2ZmQ0ZmYgNzQlLCB2YXIoLS1jb250ZW50LWZnKSk7Cn0KCi5tanItbWVudS1pdGVtLS1jbHVzdGVyIC5waSB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsICNjNDhkZmYgNzQlLCB2YXIoLS1jb250ZW50LWZnKSk7Cn0KCi5tanItbWVudS1pdGVtLS1zbWFydDpob3Zlcjpub3QoOmRpc2FibGVkKSwKLm1qci1tZW51LWl0ZW0tLWNsdXN0ZXI6aG92ZXI6bm90KDpkaXNhYmxlZCkgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODAlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTUlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItY2x1c3Rlci1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgIHBhZGRpbmc6IDZweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1zbSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA3MCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1jbHVzdGVyLXRodW1icyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiAzcHg7CiAgICBmbGV4LXNocmluazogMDsKfQoKLm1qci1jbHVzdGVyLXRodW1iIHsKICAgIHdpZHRoOiAyOHB4OwogICAgaGVpZ2h0OiAyOHB4OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICBvcGFjaXR5OiAwLjg1OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDYwJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWNsdXN0ZXItaW5mbyB7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWNsdXN0ZXItbmFtZSB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnKTsKfQoKLm1qci1jbHVzdGVyLWNvdW50IHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZykgNTglLCB2YXIoLS1tanItbXV0ZWQpKTsKfQoKLm1qci1jbHVzdGVyLWNyZWF0ZS1idG4gewogICAgZmxleC1zaHJpbms6IDA7CiAgICBwYWRkaW5nOiAzcHggOHB4OwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTUlLCB0cmFuc3BhcmVudCk7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZyk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBib3JkZXItY29sb3IgMTIwbXMgZWFzZSwKICAgICAgICBiYWNrZ3JvdW5kIDEyMG1zIGVhc2UsCiAgICAgICAgb3BhY2l0eSAxMjBtcyBlYXNlOwp9CgoubWpyLWNsdXN0ZXItY3JlYXRlLWJ0bjpkaXNhYmxlZCB7CiAgICBvcGFjaXR5OiAwLjYyOwogICAgY3Vyc29yOiBkZWZhdWx0Owp9CgoubWpyLWNsdXN0ZXItY3JlYXRlLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4MCUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA2MiUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXNlYXJjaC1pY29uIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zZWFyY2gtaWNvbiAucGkgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgbGluZS1oZWlnaHQ6IDE7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zZWFyY2gtcGlsbCAubWpyLWlucHV0IHsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKICAgIGZvbnQtc2l6ZTogMTJweCAhaW1wb3J0YW50OwogICAgbGluZS1oZWlnaHQ6IDEuMiAhaW1wb3J0YW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc2VhcmNoLXBpbGw6Zm9jdXMtd2l0aGluIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDY1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAxOCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWJyb3dzZSB7CiAgICBtYXJnaW4tdG9wOiAwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tZ3JpZC1zY3JvbGwgewogICAgcGFkZGluZy1yaWdodDogNHB4OwogICAgc2Nyb2xsYmFyLWd1dHRlcjogc3RhYmxlOwp9CgovKiBHcmlkIGxheW91dCAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZ3JpZCB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgLyogQXZvaWQgb3ZlcmZsb3cgd2hlbiB0aGUgcGFuZWwgYmVjb21lcyBuYXJyb3dlciB0aGFuIHRoZSBtaW4gY2FyZCBzaXplICovCiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgKICAgICAgICBhdXRvLWZpbGwsCiAgICAgICAgbWlubWF4KG1pbigxMDAlLCB2YXIoLS1tanItZ3JpZC1taW4tc2l6ZSwgMTgwcHgpKSwgMWZyKQogICAgKTsKICAgIGdhcDogdmFyKC0tbWpyLWdyaWQtZ2FwLCAxMHB4KTsKICAgIG1hcmdpbi10b3A6IDZweDsKICAgIG1pbi1oZWlnaHQ6IDA7Cn0KCi8qIENhcmQgc2VsZWN0aW9uICsgZm9jdXMgKGtlZXBzIGEgdmlzaWJsZSBpbmRpY2F0b3Igd2hlbiBzaWRlYmFyIGlzIG9wZW4pICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIHsKICAgIG91dGxpbmU6IG5vbmU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkLmlzLXNlbGVjdGVkIHsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgMCAwIDAgM3B4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItY2FyZC1zZWxlY3Rpb24tY29sb3IpIDgwJSwgdmFyKC0tY29udGVudC1mZykpLAogICAgICAgIDAgMCAwIDZweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKSAzMCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAwIDAgMjBweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKSA0MCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAwIDEwcHggMjhweCByZ2JhKDAsIDAsIDAsIDAuMjgpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbGcpOwogICAgLyogc2NhbGUoMC45NykgaW5zdGVhZCBvZiAwLjkyOiBzdWJ0bGUgaW5zZXQgZmVlbCB3aXRob3V0IHRoZSBhZ2dyZXNzaXZlCiAgICAgICBzaHJpbmsgdGhhdCBjYXVzZWQgYSB2aXNpYmxlIGJsaW5rIG9uIHJhcGlkIHNlbGVjdGlvbiBjaGFuZ2VzLiAqLwogICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk3KSAhaW1wb3J0YW50OwogICAgei1pbmRleDogMTA7CiAgICBvdXRsaW5lOiAycHggc29saWQgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQ6Zm9jdXMtdmlzaWJsZSB7CiAgICBib3gtc2hhZG93OgogICAgICAgIDAgMCAwIDNweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgODAlLCB2YXIoLS1jb250ZW50LWZnKSksCiAgICAgICAgMCAwIDAgNnB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAzMCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAwIDAgMjBweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNDAlLCB0cmFuc3BhcmVudCksCiAgICAgICAgMCAxMHB4IDI4cHggcmdiYSgwLCAwLCAwLCAwLjI4KTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLWxnKTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NykgIWltcG9ydGFudDsKICAgIHotaW5kZXg6IDEwOwp9CgpAa2V5ZnJhbWVzIG1qci1saXZlLXBsYWNlaG9sZGVyLXNoZWVuIHsKICAgIDAlIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTU4JSk7CiAgICAgICAgb3BhY2l0eTogMC4xODsKICAgIH0KICAgIDUwJSB7CiAgICAgICAgb3BhY2l0eTogMC4zNDsKICAgIH0KICAgIDEwMCUgewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg1OCUpOwogICAgICAgIG9wYWNpdHk6IDAuMTg7CiAgICB9Cn0KCkBrZXlmcmFtZXMgbWpyLWxpdmUtcGxhY2Vob2xkZXItcHVsc2UgewogICAgMCUsCiAgICAxMDAlIHsKICAgICAgICBib3gtc2hhZG93OgogICAgICAgICAgICAwIDAgMCAxcHggcmdiYSgxMTgsIDIxNCwgMjU1LCAwLjM0KSwKICAgICAgICAgICAgMCAxMHB4IDI0cHggcmdiYSgwLCAwLCAwLCAwLjI0KTsKICAgIH0KICAgIDUwJSB7CiAgICAgICAgYm94LXNoYWRvdzoKICAgICAgICAgICAgMCAwIDAgMXB4IHJnYmEoMTE4LCAyMTQsIDI1NSwgMC41MiksCiAgICAgICAgICAgIDAgMCAwIDRweCByZ2JhKDExOCwgMjE0LCAyNTUsIDAuMTIpLAogICAgICAgICAgICAwIDEycHggMzBweCByZ2JhKDAsIDAsIDAsIDAuMjgpOwogICAgfQp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1saXZlLXBsYWNlaG9sZGVyPSJ0cnVlIl0gewogICAgYW5pbWF0aW9uOiBtanItbGl2ZS1wbGFjZWhvbGRlci1wdWxzZSAxLjlzIGVhc2UtaW4tb3V0IGluZmluaXRlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1saXZlLXBsYWNlaG9sZGVyPSJ0cnVlIl0gLm1qci10aHVtYiB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbGl2ZS1wbGFjZWhvbGRlci13YXNoIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAtOCU7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDE7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTE1ZGVnLAogICAgICAgIHJnYmEoOTgsIDE5OSwgMjU1LCAwKSAwJSwKICAgICAgICByZ2JhKDk4LCAxOTksIDI1NSwgMC4wOCkgMzAlLAogICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNCkgNTAlLAogICAgICAgIHJnYmEoOTgsIDE5OSwgMjU1LCAwLjEyKSA3MCUsCiAgICAgICAgcmdiYSg5OCwgMTk5LCAyNTUsIDApIDEwMCUKICAgICk7CiAgICBhbmltYXRpb246IG1qci1saXZlLXBsYWNlaG9sZGVyLXNoZWVuIDIuMnMgbGluZWFyIGluZmluaXRlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbGl2ZS1waWxsIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNnB4OwogICAgcmlnaHQ6IDZweDsKICAgIHotaW5kZXg6IDEyOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBtaW4taGVpZ2h0OiAyNHB4OwogICAgcGFkZGluZzogMCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTAsIDE0LCAyMCwgMC43OCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDExOCwgMjE0LCAyNTUsIDAuMzQpOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45Nik7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDFlbTsKICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMjQpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWxpdmUtcGlsbC1kb3QgewogICAgd2lkdGg6IDdweDsKICAgIGhlaWdodDogN3B4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiAjNzZkNmZmOwogICAgYm94LXNoYWRvdzogMCAwIDAgNHB4IHJnYmEoMTE4LCAyMTQsIDI1NSwgMC4xNik7CiAgICBmbGV4OiAwIDAgYXV0bzsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItbGl2ZS1wbGFjZWhvbGRlcj0idHJ1ZSJdIC5tanItYXNzZXQtc3RhdHVzLWRvdCB7CiAgICBhbmltYXRpb246IG1qci1saXZlLXBsYWNlaG9sZGVyLXB1bHNlIDEuOXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7Cn0KCi8qIEdyaWQgbG9hZGluZyBvdmVybGF5ICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkLWxvYWRpbmctb3ZlcmxheSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgIzAwMCAzNSUsIHRyYW5zcGFyZW50KTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZmZmKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjNweDsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLWxnKTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDJweCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkLXNrZWxldG9uLWxheW91dCB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTMycHgsIDFmcikpOwogICAgZ2FwOiAxMnB4Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZ3JpZC1za2VsZXRvbi1jYXJkIHsKICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjIpOwogICAgYmFja2dyb3VuZDogcmdiYSgxOTIsIDE5OCwgMjA2LCAwLjIpOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIC8qIG1pbi1oZWlnaHQgcmVtb3ZlZDogVnVlIHNrZWxldG9uQ2FyZFN0eWxlIHNldHMgYW4gZXhwbGljaXQgaGVpZ2h0IGRlcml2ZWQKICAgICAgIGZyb20gZXN0aW1hdGVSb3dIZWlnaHQuIEEgY29uZmxpY3RpbmcgbWluLWhlaWdodCBjYXVzZWQgc2tlbGV0b24gY2FyZHMgdG8KICAgICAgIGJlIHRhbGxlciB0aGFuIHRoZSBhY3R1YWwgY2FyZHMgdGhleSByZXBsYWNlLCBjYXVzaW5nIGEgbGF5b3V0IGp1bXAgd2hlbgogICAgICAgYXNzZXRzIGZpcnN0IGxvYWQuICovCiAgICBib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4yNCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkLXNrZWxldG9uLXRodW1iIHsKICAgIGFzcGVjdC1yYXRpbzogMSAvIDE7CiAgICB3aWR0aDogMTAwJTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICA5MGRlZywKICAgICAgICByZ2JhKDE1NiwgMTYyLCAxNzEsIDAuNTIpIDAlLAogICAgICAgIHJnYmEoMjIwLCAyMjUsIDIzMiwgMC43MikgNDUlLAogICAgICAgIHJnYmEoMTU2LCAxNjIsIDE3MSwgMC41MikgMTAwJQogICAgKTsKICAgIGJhY2tncm91bmQtc2l6ZTogMjQwJSAxMDAlOwogICAgYW5pbWF0aW9uOiBtanItZ3JpZC1za2VsZXRvbi1zaGltbWVyIDEuMnMgbGluZWFyIGluZmluaXRlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZ3JpZC1za2VsZXRvbi1saW5lIHsKICAgIGhlaWdodDogMTBweDsKICAgIG1hcmdpbjogOHB4IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgOTBkZWcsCiAgICAgICAgcmdiYSgxNjQsIDE3MCwgMTc5LCAwLjQ4KSAwJSwKICAgICAgICByZ2JhKDIxNCwgMjE5LCAyMjYsIDAuNykgNDUlLAogICAgICAgIHJnYmEoMTY0LCAxNzAsIDE3OSwgMC40OCkgMTAwJQogICAgKTsKICAgIGJhY2tncm91bmQtc2l6ZTogMjQwJSAxMDAlOwogICAgYW5pbWF0aW9uOiBtanItZ3JpZC1za2VsZXRvbi1zaGltbWVyIDEuMnMgbGluZWFyIGluZmluaXRlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZ3JpZC1za2VsZXRvbi1saW5lLS10aXRsZSB7CiAgICB3aWR0aDogNzIlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZ3JpZC1za2VsZXRvbi1saW5lLS1tZXRhIHsKICAgIHdpZHRoOiA0OCU7CiAgICBtYXJnaW4tdG9wOiAycHg7CiAgICBtYXJnaW4tYm90dG9tOiAxMHB4Owp9CgpAa2V5ZnJhbWVzIG1qci1za2VsZXRvbi1zaGltbWVyIHsKICAgIDAlIHsKICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAxMjAlIDA7CiAgICB9CiAgICAxMDAlIHsKICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTIwJSAwOwogICAgfQp9CgpAa2V5ZnJhbWVzIG1qci1ncmlkLXNrZWxldG9uLXNoaW1tZXIgewogICAgMCUgewogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDEwMCUgMDsKICAgIH0KICAgIDEwMCUgewogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xMDAlIDA7CiAgICB9Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkLXNrZWxldG9uLXNoaW1tZXIgewogICAgd2lsbC1jaGFuZ2U6IGJhY2tncm91bmQtcG9zaXRpb247Cn0KCi8qIEdlbmVyaWMgaGVhZGluZ3MgaW5zaWRlIHBhbmVsICovCi5tanItYXNzZXRzLW1hbmFnZXIgaDMsCi5tanItYXNzZXRzLW1hbmFnZXIgaDQgewogICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMWVtOwp9CgovKiBQYW5lbHMgKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXBhbmVsIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1sZyk7CiAgICBib3gtc2hhZG93OiB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtYm94LXNoYWRvdywgMCA4cHggMjRweCByZ2JhKDAsIDAsIDAsIDAuMjUpKTsKfQoKLyogVG9vbGJhciAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdG9vbGJhciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIHBhZGRpbmc6IHZhcigtLW1qci1wYWQtbWQpOwp9CgovKiBCdXR0b25zICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1idG4gewogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMik7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1tZCk7CiAgICBwYWRkaW5nOiA3cHggMTBweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIGJhY2tncm91bmQgMTIwbXMgZWFzZSwKICAgICAgICBib3JkZXItY29sb3IgMTIwbXMgZWFzZSwKICAgICAgICB0cmFuc2Zvcm0gODBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYnRuOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDcwJSwgdmFyKC0tbWpyLWFjY2VudCkgMTAlKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWJ0bjphY3RpdmUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDFweCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1idG46ZGlzYWJsZWQgewogICAgb3BhY2l0eTogMC41NTsKICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1idG4ubWpyLXByaW1hcnkgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNjAlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMTQlLCB2YXIoLS1tanItc3VyZmFjZS0yKSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1idG4gewogICAgLyogT3ZlcnJpZGUgaW5saW5lIHN0eWxlcyBpZiBwcmVzZW50ICovCiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTIpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbWQpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYnRuOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDcwJSwgdmFyKC0tbWpyLWFjY2VudCkgMTAlKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWJ0bi5tanItc3RhdHVzLXNjYW4gewogICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICBwYWRkaW5nOiA0cHggMTBweDsKICAgIGNvbG9yOiB2YXIoLS1tanItc3RhdHVzLWNvbG9yLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLWNvbG9yKSA2MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLWNvbG9yKSAxNCUsIHZhcigtLW1qci1zdXJmYWNlLTIpKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWJ0bi5tanItc3RhdHVzLXNjYW46aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1tanItc3RhdHVzLWNvbG9yKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLWNvbG9yKSAyNCUsIHZhcigtLW1qci1zdXJmYWNlLTIpKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWJ0bi5tanItc3RhdHVzLXNjYW46Zm9jdXMtdmlzaWJsZSB7CiAgICBvdXRsaW5lOiAycHggc29saWQgdmFyKC0tbWpyLXN0YXR1cy1jb2xvcik7CiAgICBvdXRsaW5lLW9mZnNldDogMnB4Owp9CgovKiBJbnB1dHMgLyBzZWxlY3RzICh1c2VkIGluc2lkZSBwb3J0YWxlZCBwb3BvdmVycyB0b28pICovCi5tanItaW5wdXQsCi5tanItc2VsZWN0LAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaW5wdXQsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1zZWxlY3QgewogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktaW5wdXQtYmcsIHJnYmEoMCwgMCwgMCwgMC4yNSkpOwogICAgY29sb3I6IHZhcigtLWlucHV0LXRleHQsICNkZGQpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbWQpOwogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBvdXRsaW5lOiBub25lOwogICAgd2lkdGg6IDEwMCU7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pbnB1dDo6cGxhY2Vob2xkZXIgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItbXV0ZWQpIDgwJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWlucHV0OmZvY3VzLAoubWpyLXNlbGVjdDpmb2N1cywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWlucHV0OmZvY3VzLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItc2VsZWN0OmZvY3VzIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDY1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAyMCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1pbnB1dCwKLm1qci1zZWxlY3QsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pbnB1dCwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXNlbGVjdCB7CiAgICAvKiBPdmVycmlkZSBpbmxpbmUgc3R5bGVzIGlmIHByZXNlbnQgKi8KICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktaW5wdXQtYmcsIHJnYmEoMCwgMCwgMCwgMC4yNSkpOwogICAgY29sb3I6IHZhcigtLWlucHV0LXRleHQsICNkZGQpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbWQpOwogICAgcGFkZGluZzogOHB4IDEwcHg7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItc2VsZWN0IHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogOHB4OwogICAgbWluLWhlaWdodDogMzRweDsKICAgIHBhZGRpbmc6IDAgOXB4OwogICAgbGluZS1oZWlnaHQ6IDEuMjsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1zZWxlY3RbZGF0YS1wLWRpc2FibGVkPSJ0cnVlIl0gewogICAgb3BhY2l0eTogMC41NTsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1zZWxlY3QgW2RhdGEtcGMtc2VjdGlvbj0ibGFiZWwiXSB7CiAgICBmbGV4OiAxIDEgYXV0bzsKICAgIG1pbi13aWR0aDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItc2VsZWN0IFtkYXRhLXBjLXNlY3Rpb249ImRyb3Bkb3duIl0gewogICAgZmxleDogMCAwIGF1dG87CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIHdpZHRoOiAxOHB4OwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgdmFyKC0tZGVzY3JpcC10ZXh0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKSk7Cn0KCi5tanItZmlsdGVyLXNlbGVjdC1wYW5lbCB7CiAgICBtaW4td2lkdGg6IHZhcigtLXAtc2VsZWN0LW92ZXJsYXktd2lkdGgsIDEycmVtKTsKICAgIG1heC13aWR0aDogbWluKDMyMHB4LCBjYWxjKDEwMHZ3IC0gMzJweCkpOwogICAgbWF4LWhlaWdodDogbWluKDMyMHB4LCBjYWxjKDEwMHZoIC0gMzJweCkpOwogICAgb3ZlcmZsb3c6IGF1dG87CiAgICBwYWRkaW5nOiA0cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLW1kKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEsIHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKSk7CiAgICBib3gtc2hhZG93OiAwIDEycHggMjhweCByZ2JhKDAsIDAsIDAsIDAuMzgpOwogICAgei1pbmRleDogY2FsYyh2YXIoLS1tanItcG9wb3Zlci16LWluZGV4LCAyMTQ3NDgzNjQ3KSArIDEpOwp9CgoubWpyLWZpbHRlci1zZWxlY3QtcGFuZWwgW2RhdGEtcGMtc2VjdGlvbj0ibGlzdCJdIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAycHg7CiAgICBwYWRkaW5nOiAwOwogICAgbWFyZ2luOiAwOwogICAgbGlzdC1zdHlsZTogbm9uZTsKfQoKLm1qci1maWx0ZXItc2VsZWN0LXBhbmVsIFtkYXRhLXBjLXNlY3Rpb249Im9wdGlvbiJdIHsKICAgIG1pbi1oZWlnaHQ6IDI4cHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDZweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiBjYWxjKHZhcigtLW1qci1yLW1kKSAtIDJweCk7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsaW5lLWhlaWdodDogMS4yNTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKSk7Cn0KCi5tanItZmlsdGVyLXNlbGVjdC1wYW5lbCBbZGF0YS1wYy1zZWN0aW9uPSJvcHRpb24iXTpob3ZlciwKLm1qci1maWx0ZXItc2VsZWN0LXBhbmVsIFtkYXRhLXAtaGlnaGxpZ2h0PSJ0cnVlIl0gewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDE4JSwgdHJhbnNwYXJlbnQpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNmZmYpOwp9CgovKiBUYWJzOiBvdmVycmlkZGVuIGFib3ZlIHdpdGggcXVldWUtbGlrZSBzdHlsZSAqLwoKLyogUmVtb3ZlZCByZWR1bmRhbnQgdGFiIGRlY2xhcmF0aW9ucyB0aGF0IHdlcmUgdXNpbmcgIWltcG9ydGFudCAqLwoKLyogTXV0ZWQgdGV4dCBoZWxwZXIgKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW11dGVkIHsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQpOwp9CgovKiBHcmlkICsgY2FyZHMgKG92ZXJyaWRlIGlubGluZSBzdHlsZXMgZnJvbSBDYXJkLmpzKSAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyICNtanItYXNzZXRzLWdyaWQgewogICAgZ2FwOiAxMHB4ICFpbXBvcnRhbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xKSAhaW1wb3J0YW50OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcikgIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLWxnKSAhaW1wb3J0YW50OwogICAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50OwogICAgbWluLXdpZHRoOiAwOwogICAgdHJhbnNpdGlvbjoKICAgICAgICB0cmFuc2Zvcm0gMTIwbXMgZWFzZSwKICAgICAgICBib3JkZXItY29sb3IgMTIwbXMgZWFzZSwKICAgICAgICBib3gtc2hhZG93IDEyMG1zIGVhc2UgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQ6aG92ZXIsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoCiAgICAgICAgaW4gc3JnYiwKICAgICAgICB2YXIoLS1tanItY2FyZC1zZWxlY3Rpb24tY29sb3IpIDU1JSwKICAgICAgICB2YXIoLS1tanItYm9yZGVyKQogICAgKSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWpyLWNhcmQtaG92ZXItY29sb3IpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiAwIDhweCAyMnB4IHJnYmEoMCwgMCwgMCwgMC4yNSkgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgaW1nLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCB2aWRlbywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRodW1iLW1lZGlhIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50OwogICAgb2JqZWN0LWZpdDogY292ZXIgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRodW1iIHsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgd2lkdGg6IDEwMCU7CiAgICBhc3BlY3QtcmF0aW86IDEgLyAxOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDgwJSwgdHJhbnNwYXJlbnQpOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWF1ZGlvLXRodW1iLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXVkaW8tdGh1bWIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogMTBweDsKICAgIHBhZGRpbmc6IDE0cHggMTJweCAxMnB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NCk7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAxOCUgMjAlLCByZ2JhKDc4LCAxODQsIDI1NSwgMC4zMiksIHRyYW5zcGFyZW50IDM4JSksCiAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4OCUgNzIlLCByZ2JhKDgyLCAyMjAsIDE1NiwgMC4yNCksIHRyYW5zcGFyZW50IDQyJSksCiAgICAgICAgbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgxOCwgMjYsIDM2LCAwLjk4KSwgcmdiYSg4LCAxMiwgMTgsIDAuOTgpKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWF1ZGlvLXRodW1iLmhhcy1wb3N0ZXIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hdWRpby10aHVtYi5oYXMtcG9zdGVyIHsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSg0LCA2LCAxMCwgMC4yOCksIHJnYmEoNCwgNiwgMTAsIDAuODYpKSwKICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDUwJSA0MiUsIHJnYmEoNzgsIDE4NCwgMjU1LCAwLjIpLCB0cmFuc3BhcmVudCA1NCUpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBzYXR1cmF0ZSgxLjEpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IHNhdHVyYXRlKDEuMSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hdWRpby10aHVtYi1oZWFkLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXVkaW8tdGh1bWItaGVhZCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogOHB4OwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXVkaW8tdGh1bWItaWNvbiwKLm1qci1ib3R0b20tZmVlZCAubWpyLWF1ZGlvLXRodW1iLWljb24gewogICAgd2lkdGg6IDI4cHg7CiAgICBoZWlnaHQ6IDI4cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xOCk7CiAgICBib3gtc2hhZG93OiAwIDhweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4yMik7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hdWRpby10aHVtYi1raW5kLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXVkaW8tdGh1bWIta2luZCB7CiAgICBtYXgtd2lkdGg6IDYycHg7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgcGFkZGluZzogM3B4IDdweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjI4KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMyk7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogODAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hdWRpby10aHVtYi13YXZlZm9ybSwKLm1qci1ib3R0b20tZmVlZCAubWpyLWF1ZGlvLXRodW1iLXdhdmVmb3JtIHsKICAgIGZsZXg6IDE7CiAgICBtaW4taGVpZ2h0OiA0MnB4OwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogY2xhbXAoMnB4LCAyLjIlLCA1cHgpOwogICAgcGFkZGluZzogNHB4IDA7CiAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgNHB4IDE0cHggcmdiYSgwLCAwLCAwLCAwLjM0KSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hdWRpby10aHVtYi13YXZlZm9ybSBzcGFuLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXVkaW8tdGh1bWItd2F2ZWZvcm0gc3BhbiB7CiAgICB3aWR0aDogM3B4OwogICAgbWluLXdpZHRoOiAycHg7CiAgICBtYXgtd2lkdGg6IDVweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk4KSwgcmdiYSgxNjAsIDIyNCwgMjU1LCAwLjcyKSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hdWRpby10aHVtYi1tZXRhLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXVkaW8tdGh1bWItbWV0YSB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMnB4OwogICAgdGV4dC1zaGFkb3c6IDAgMnB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjYyKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWF1ZGlvLXRodW1iLXRpdGxlLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXVkaW8tdGh1bWItdGl0bGUgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtd2VpZ2h0OiA4MDA7CiAgICBsaW5lLWhlaWdodDogMS4yOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXVkaW8tdGh1bWItc3VidGl0bGUsCi5tanItYm90dG9tLWZlZWQgLm1qci1hdWRpby10aHVtYi1zdWJ0aXRsZSB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA2NTA7CiAgICBsaW5lLWhlaWdodDogMS4yOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXdvcmtmbG93LXRodW1iLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLXdvcmtmbG93LXRodW1iIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDdweDsKICAgIHBhZGRpbmc6IDE0cHggMTJweDsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSg0NywgNTgsIDc2LCAwLjk0KSwgcmdiYSgxOCwgMjMsIDMyLCAwLjk4KSksCiAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAzMCUgMjUlLCByZ2JhKDc4LCAxODQsIDI1NSwgMC4yMiksIHRyYW5zcGFyZW50IDQyJSk7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgdGV4dC1zaGFkb3c6IDAgMXB4IDhweCByZ2JhKDAsIDAsIDAsIDAuNzIpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXRodW1iLm1qci10aHVtYi13b3JrZmxvdywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQgLm1qci10aHVtYi5tanItdGh1bWItd29ya2Zsb3cgewogICAgYXNwZWN0LXJhdGlvOiAxLjA4IC8gMTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci13b3JrZmxvdy1jYXJkLWFjdGlvbnMsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItd29ya2Zsb3ctY2FyZC1hY3Rpb25zIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogN3B4OwogICAgcmlnaHQ6IDdweDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgZ2FwOiA0cHg7CiAgICB6LWluZGV4OiAxMjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci13b3JrZmxvdy1hY3Rpb24tYnRuLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLXdvcmtmbG93LWFjdGlvbi1idG4gewogICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIHdpZHRoOiAyNHB4OwogICAgaGVpZ2h0OiAyNHB4OwogICAgbWluLXdpZHRoOiAyNHB4OwogICAgbWluLWhlaWdodDogMjRweDsKICAgIHBhZGRpbmc6IDA7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzQpOwogICAgYm9yZGVyLXJhZGl1czogN3B4OwogICAgYmFja2dyb3VuZDogcmdiYSg4LCAxMiwgMTgsIDAuNTgpOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45Mik7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDNweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cigzcHgpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXdvcmtmbG93LWFjdGlvbi1idG46aG92ZXIsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItd29ya2Zsb3ctYWN0aW9uLWJ0bjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI5LCA0MCwgNTgsIDAuNzgpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXdvcmtmbG93LWFjdGlvbi1idG4uaXMtYWN0aXZlLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLXdvcmtmbG93LWFjdGlvbi1idG4uaXMtYWN0aXZlIHsKICAgIGNvbG9yOiAjZmZkNDVhOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjEyLCA5MCwgMC43KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci13b3JrZmxvdy10aHVtYiAucGksCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItd29ya2Zsb3ctdGh1bWIgLnBpIHsKICAgIGZvbnQtc2l6ZTogMS43NXJlbTsKICAgIG9wYWNpdHk6IDAuNzI7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIC5tanItd29ya2Zsb3ctdGh1bWIuaGFzLXRodW1ibmFpbCwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQgLm1qci13b3JrZmxvdy10aHVtYi5oYXMtdGh1bWJuYWlsIHsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHRyYW5zcGFyZW50IDI0JSwgcmdiYSgwLCAwLCAwLCAwLjI4KSA1OCUsIHJnYmEoMCwgMCwgMCwgMC43OCkpLAogICAgICAgIGxpbmVhci1ncmFkaWVudCg5MGRlZywgcmdiYSgwLCAwLCAwLCAwLjM0KSwgdHJhbnNwYXJlbnQgMzQlLCB0cmFuc3BhcmVudCA2NiUsIHJnYmEoMCwgMCwgMCwgMC4zNCkpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXRodW1iLW1lZGlhLm1qci13b3JrZmxvdy1ncmFwaC1tYXAtcHJldmlldywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQgLm1qci10aHVtYi1tZWRpYS5tanItd29ya2Zsb3ctZ3JhcGgtbWFwLXByZXZpZXcgewogICAgb2JqZWN0LWZpdDogY292ZXIgIWltcG9ydGFudDsKICAgIG9wYWNpdHk6IDAuNDY7CiAgICBmaWx0ZXI6IHNhdHVyYXRlKDAuNzUpIGNvbnRyYXN0KDAuODIpIGJyaWdodG5lc3MoMC43KTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wNik7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIC5tanItd29ya2Zsb3ctdGh1bWIuaGFzLWdyYXBoLW1hcCwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQgLm1qci13b3JrZmxvdy10aHVtYi5oYXMtZ3JhcGgtbWFwIHsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDgsIDEwLCAxNCwgMC4zKSwgcmdiYSg4LCAxMCwgMTQsIDAuODIpKSwKICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDUwJSA0MiUsIHJnYmEoMCwgMCwgMCwgMC4xOCksIHJnYmEoMCwgMCwgMCwgMC42OCkgNzIlKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci13b3JrZmxvdy10aHVtYi5oYXMtZ3JhcGgtbWFwIC5tanItd29ya2Zsb3ctdGh1bWItdGl0bGUsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItd29ya2Zsb3ctdGh1bWIuaGFzLWdyYXBoLW1hcCAubWpyLXdvcmtmbG93LXRodW1iLXRpdGxlIHsKICAgIHBhZGRpbmc6IDJweCA3cHg7CiAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMzYpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXdvcmtmbG93LXRodW1iLmhhcy10aHVtYm5haWwgLnBpLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLXdvcmtmbG93LXRodW1iLmhhcy10aHVtYm5haWwgLnBpIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIC5tanItd29ya2Zsb3ctdGh1bWIuaGFzLWdyYXBoLW1hcCAucGksCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItd29ya2Zsb3ctdGh1bWIuaGFzLWdyYXBoLW1hcCAucGkgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBtYXJnaW4tYm90dG9tOiAycHg7CiAgICBmb250LXNpemU6IDEuMTVyZW07CiAgICBvcGFjaXR5OiAwLjU1Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXdvcmtmbG93LXRodW1iLXRpdGxlLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLXdvcmtmbG93LXRodW1iLXRpdGxlIHsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXNpemU6IDAuODRyZW07CiAgICBmb250LXdlaWdodDogODAwOwogICAgbGluZS1oZWlnaHQ6IDEuMTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci13b3JrZmxvdy10aHVtYi1tZXRhLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLXdvcmtmbG93LXRodW1iLW1ldGEgewogICAgZGlzcGxheTogZmxleDsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIGZsZXgtd3JhcDogd3JhcDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBmb250LXNpemU6IDAuNjhyZW07Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIC5tanItd29ya2Zsb3ctdGh1bWItbWV0YSBzcGFuLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLXdvcmtmbG93LXRodW1iLW1ldGEgc3BhbiwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci1tZXRhLXdvcmtmbG93LXRhc2ssCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItbWV0YS13b3JrZmxvdy10YXNrLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLW1ldGEtd29ya2Zsb3ctc3ViZ3JhcGhzLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLW1ldGEtd29ya2Zsb3ctc3ViZ3JhcGhzIHsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7CiAgICBwYWRkaW5nOiAycHggNXB4OwogICAgbWF4LXdpZHRoOiAxMDAlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci13b3JrZmxvdy10aHVtYi1tZXRhIHNwYW46bnRoLWNoaWxkKG4gKyA0KSwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQgLm1qci13b3JrZmxvdy10aHVtYi1tZXRhIHNwYW46bnRoLWNoaWxkKG4gKyA0KSB7CiAgICBkaXNwbGF5OiBub25lOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLWNhcmQtbWV0YVtkYXRhLW1qci1raW5kPSJ3b3JrZmxvdyJdLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLWNhcmQtbWV0YVtkYXRhLW1qci1raW5kPSJ3b3JrZmxvdyJdIHsKICAgIHBhZGRpbmc6IDdweCA5cHggIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci1jYXJkLW1ldGFbZGF0YS1tanIta2luZD0id29ya2Zsb3ciXSAubWpyLWNhcmQtZmlsZW5hbWUsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItY2FyZC1tZXRhW2RhdGEtbWpyLWtpbmQ9IndvcmtmbG93Il0gLm1qci1jYXJkLWZpbGVuYW1lIHsKICAgIG1hcmdpbi1ib3R0b206IDNweCAhaW1wb3J0YW50OwogICAgZm9udC1zaXplOiAwLjc4cmVtICFpbXBvcnRhbnQ7CiAgICBsaW5lLWhlaWdodDogMS4xNSAhaW1wb3J0YW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLWNhcmQtbWV0YVtkYXRhLW1qci1raW5kPSJ3b3JrZmxvdyJdIC5tanItY2FyZC1tZXRhLXJvdywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQgLm1qci1jYXJkLW1ldGFbZGF0YS1tanIta2luZD0id29ya2Zsb3ciXSAubWpyLWNhcmQtbWV0YS1yb3cgewogICAgZm9udC1zaXplOiAwLjcycmVtICFpbXBvcnRhbnQ7CiAgICBvcGFjaXR5OiAwLjc0ICFpbXBvcnRhbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIC5tanItY2FyZC1tZXRhW2RhdGEtbWpyLWtpbmQ9IndvcmtmbG93Il0gLm1qci1jYXJkLW1ldGEtcm93IC5tanItbWV0YS13b3JrZmxvdy10YXNrLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLWNhcmQtbWV0YVtkYXRhLW1qci1raW5kPSJ3b3JrZmxvdyJdIC5tanItY2FyZC1tZXRhLXJvdyAubWpyLW1ldGEtd29ya2Zsb3ctdGFzayB7CiAgICBkaXNwbGF5OiBub25lOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXdvcmtmbG93LW1pc3NpbmctY2hpcCwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQgLm1qci13b3JrZmxvdy1taXNzaW5nLWNoaXAsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIC5tanItbWV0YS13b3JrZmxvdy1taXNzaW5nLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLW1ldGEtd29ya2Zsb3ctbWlzc2luZyB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMTkwLCA2NiwgMC4yOCk7CiAgICBjb2xvcjogcmdiYSgyNTUsIDIzNiwgMTgwLCAwLjk4KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyMDYsIDEwMSwgMC40NSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkIC5tanItZ3JpZC1ncm91cC1zZXBhcmF0b3IgewogICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgd2lkdGg6IDEwMCU7CiAgICBtaW4taGVpZ2h0OiAzMHB4OwogICAgbWFyZ2luOiAwIDAgOHB4OwogICAgcGFkZGluZzogNXB4IDlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEodmFyKC0tbWpyLXdvcmtmbG93LWdyb3VwLWFjY2VudC1yZ2IsIDk1LCAxNzksIDI1NSksIDAuNDIpOwogICAgYm9yZGVyLXJhZGl1czogN3B4OwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAgIDEzNWRlZywKICAgICAgICAgICAgcmdiYSh2YXIoLS1tanItd29ya2Zsb3ctZ3JvdXAtYWNjZW50LXJnYiwgOTUsIDE3OSwgMjU1KSwgMC4yMiksCiAgICAgICAgICAgIHJnYmEodmFyKC0tbWpyLXdvcmtmbG93LWdyb3VwLWFjY2VudC1yZ2IsIDk1LCAxNzksIDI1NSksIDAuMDgpCiAgICAgICAgKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNzglLCB0cmFuc3BhcmVudCk7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcsICNmZmYpIDkyJSwgdHJhbnNwYXJlbnQpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZm9udDogaW5oZXJpdDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQgLm1qci1ncmlkLWdyb3VwLXNlcGFyYXRvcjpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IHJnYmEodmFyKC0tbWpyLXdvcmtmbG93LWdyb3VwLWFjY2VudC1yZ2IsIDk1LCAxNzksIDI1NSksIDAuNjYpOwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAgIDEzNWRlZywKICAgICAgICAgICAgcmdiYSh2YXIoLS1tanItd29ya2Zsb3ctZ3JvdXAtYWNjZW50LXJnYiwgOTUsIDE3OSwgMjU1KSwgMC4zKSwKICAgICAgICAgICAgcmdiYSh2YXIoLS1tanItd29ya2Zsb3ctZ3JvdXAtYWNjZW50LXJnYiwgOTUsIDE3OSwgMjU1KSwgMC4xMikKICAgICAgICApLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4NCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQgLm1qci1ncmlkLWdyb3VwLXNlcGFyYXRvcjpmb2N1cy12aXNpYmxlIHsKICAgIG91dGxpbmU6IDJweCBzb2xpZCByZ2JhKHZhcigtLW1qci13b3JrZmxvdy1ncm91cC1hY2NlbnQtcmdiLCA5NSwgMTc5LCAyNTUpLCAwLjU1KTsKICAgIG91dGxpbmUtb2Zmc2V0OiAycHg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkIC5tanItZ3JpZC1ncm91cC1zZXBhcmF0b3ItLWFjY2VudC0wIHsKICAgIC0tbWpyLXdvcmtmbG93LWdyb3VwLWFjY2VudC1yZ2I6IDk1LCAxNzksIDI1NTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQgLm1qci1ncmlkLWdyb3VwLXNlcGFyYXRvci0tYWNjZW50LTEgewogICAgLS1tanItd29ya2Zsb3ctZ3JvdXAtYWNjZW50LXJnYjogNTUsIDIxMSwgMTU2Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZ3JpZCAubWpyLWdyaWQtZ3JvdXAtc2VwYXJhdG9yLS1hY2NlbnQtMiB7CiAgICAtLW1qci13b3JrZmxvdy1ncm91cC1hY2NlbnQtcmdiOiAyNDYsIDE3NywgNzU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkIC5tanItZ3JpZC1ncm91cC1zZXBhcmF0b3ItLWFjY2VudC0zIHsKICAgIC0tbWpyLXdvcmtmbG93LWdyb3VwLWFjY2VudC1yZ2I6IDIzOCwgMTA0LCAxMzY7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkIC5tanItZ3JpZC1ncm91cC1zZXBhcmF0b3ItLWFjY2VudC00IHsKICAgIC0tbWpyLXdvcmtmbG93LWdyb3VwLWFjY2VudC1yZ2I6IDE1NywgMTMyLCAyMzg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkIC5tanItZ3JpZC1ncm91cC1zZXBhcmF0b3ItLWFjY2VudC01IHsKICAgIC0tbWpyLXdvcmtmbG93LWdyb3VwLWFjY2VudC1yZ2I6IDcxLCAxOTcsIDIyMjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQgLm1qci1ncmlkLWdyb3VwLXNlcGFyYXRvci0tYWNjZW50LTYgewogICAgLS1tanItd29ya2Zsb3ctZ3JvdXAtYWNjZW50LXJnYjogMTQ5LCAyMDcsIDgxOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZ3JpZCAubWpyLWdyaWQtZ3JvdXAtc2VwYXJhdG9yLS1hY2NlbnQtNyB7CiAgICAtLW1qci13b3JrZmxvdy1ncm91cC1hY2NlbnQtcmdiOiAyNDIsIDEzMCwgNzg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkIC5tanItZ3JpZC1ncm91cC1zZXBhcmF0b3ItY2hldnJvbiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgd2lkdGg6IDE4cHg7CiAgICBoZWlnaHQ6IDE4cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGNvbG9yOiByZ2IodmFyKC0tbWpyLXdvcmtmbG93LWdyb3VwLWFjY2VudC1yZ2IsIDk1LCAxNzksIDI1NSkpOwogICAgYmFja2dyb3VuZDogcmdiYSh2YXIoLS1tanItd29ya2Zsb3ctZ3JvdXAtYWNjZW50LXJnYiwgOTUsIDE3OSwgMjU1KSwgMC4xNCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkIC5tanItZ3JpZC1ncm91cC1zZXBhcmF0b3ItY2hldnJvbiA+IC5waSB7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQgLm1qci1ncmlkLWdyb3VwLXNlcGFyYXRvci10aXRsZSB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDgwMDsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItYmFja2Ryb3AgewogICAgcG9zaXRpb246IGZpeGVkOwogICAgaW5zZXQ6IDA7CiAgICB6LWluZGV4OiA5OTk5OTk7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgcGFkZGluZzogMjRweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC41OCk7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Owp9CgoubWpyLXdvcmtmbG93LXBpY2tlci1kaWFsb2cgewogICAgd2lkdGg6IG1pbig5MjBweCwgOTZ2dyk7CiAgICBtYXgtaGVpZ2h0OiBtaW4oNzYwcHgsIDkydmgpOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCwgIzExMTQxOCkgOTYlLCAjMDAwKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZjVmNWY1KTsKICAgIGJveC1zaGFkb3c6IDAgMThweCA2MHB4IHJnYmEoMCwgMCwgMCwgMC40OCk7Cn0KCi5tanItd29ya2Zsb3ctaW5mby1kaWFsb2cgewogICAgd2lkdGg6IG1pbig1NjBweCwgOTZ2dyk7Cn0KCi5tanItd29ya2Zsb3ctaW5mby1mb3JtIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCBtaW5tYXgoMCwgMWZyKSk7CiAgICBnYXA6IDEycHg7CiAgICBwYWRkaW5nOiAxNHB4IDE4cHggNHB4Owp9CgoubWpyLXdvcmtmbG93LWluZm8tZm9ybSBsYWJlbCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogNnB4OwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXdvcmtmbG93LWluZm8tZm9ybSBsYWJlbC5pcy13aWRlIHsKICAgIGdyaWQtY29sdW1uOiAxIC8gLTE7Cn0KCi5tanItd29ya2Zsb3ctaW5mby1mb3JtIHNwYW4gewogICAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC42NCk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNzUwOwogICAgbGV0dGVyLXNwYWNpbmc6IC4wNGVtOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKLm1qci13b3JrZmxvdy1pbmZvLWZvcm0gaW5wdXQsCi5tanItd29ya2Zsb3ctaW5mby1mb3JtIHNlbGVjdCwKLm1qci13b3JrZmxvdy1pbmZvLWZvcm0gdGV4dGFyZWEgewogICAgd2lkdGg6IDEwMCU7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpOwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjI2KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuOTIpOwogICAgZm9udDogaW5oZXJpdDsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIHBhZGRpbmc6IDlweCAxMHB4OwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci13b3JrZmxvdy1pbmZvLWZvcm0gdGV4dGFyZWEgewogICAgcmVzaXplOiB2ZXJ0aWNhbDsKICAgIG1pbi1oZWlnaHQ6IDk2cHg7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWhlYWRlciwKLm1qci13b3JrZmxvdy1waWNrZXItZm9vdGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZ2FwOiAxMnB4OwogICAgcGFkZGluZzogMTJweCAxNHB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItZm9vdGVyIHsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgYm9yZGVyLWJvdHRvbTogMDsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItdGl0bGUgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA5cHg7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmb250LXNpemU6IDE1cHg7CiAgICBmb250LXdlaWdodDogODAwOwp9CgoubWpyLXdvcmtmbG93LXBpY2tlci1pY29uLWJ0biwKLm1qci13b3JrZmxvdy1waWNrZXItYnRuIHsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpOwogICAgYm9yZGVyLXJhZGl1czogN3B4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIsICMyNTI4MmQpIDg4JSwgdHJhbnNwYXJlbnQpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNmNWY1ZjUpOwogICAgY3Vyc29yOiBwb2ludGVyOwp9CgoubWpyLXdvcmtmbG93LXBpY2tlci1pY29uLWJ0biB7CiAgICB3aWR0aDogMzJweDsKICAgIGhlaWdodDogMzJweDsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItYnRuIHsKICAgIG1pbi1oZWlnaHQ6IDMycHg7CiAgICBwYWRkaW5nOiAwIDEycHg7CiAgICBmb250LXdlaWdodDogNzAwOwp9CgoubWpyLXdvcmtmbG93LXBpY2tlci1idG4uaXMtcHJpbWFyeSB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoNzcsIDE3MSwgMjQ3LCAwLjcpOwogICAgYmFja2dyb3VuZDogcmdiYSg3NywgMTcxLCAyNDcsIDAuMjIpOwp9CgoubWpyLXdvcmtmbG93LXBpY2tlci1idG46ZGlzYWJsZWQgewogICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgIG9wYWNpdHk6IDAuNDU7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLXNvdXJjZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nOiA4cHggMTRweDsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsICNhZWIzYmQpOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLXNvdXJjZSBzdHJvbmcgewogICAgbWluLXdpZHRoOiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZjVmNWY1KTsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItdG9vbGJhciB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMTgwcHgsIDFmcikgcmVwZWF0KDMsIG1pbm1heCgxMTBweCwgMTUwcHgpKTsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZzogMTJweCAxNHB4Owp9CgoubWpyLXdvcmtmbG93LXBpY2tlci1kaWFsb2cuaXMtYXNzZXQtbW9kZSAubWpyLXdvcmtmbG93LXBpY2tlci10b29sYmFyIHsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDE4MHB4LCAxZnIpOwp9CgoubWpyLXdvcmtmbG93LXBpY2tlci1zZWFyY2gsCi5tanItd29ya2Zsb3ctcGlja2VyLXRvb2xiYXIgc2VsZWN0IHsKICAgIG1pbi1oZWlnaHQ6IDM0cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpOwogICAgYm9yZGVyLXJhZGl1czogN3B4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEsICMxNzFhMWYpIDkyJSwgIzAwMCk7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2Y1ZjVmNSk7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLXNlYXJjaCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZzogMCAxMHB4Owp9CgoubWpyLXdvcmtmbG93LXBpY2tlci1zZWFyY2ggaW5wdXQgewogICAgd2lkdGg6IDEwMCU7CiAgICBtaW4td2lkdGg6IDA7CiAgICBib3JkZXI6IDA7CiAgICBvdXRsaW5lOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjb2xvcjogaW5oZXJpdDsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItdG9vbGJhciBzZWxlY3QgewogICAgcGFkZGluZzogMCA4cHg7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWJvZHkgewogICAgZmxleDogMSAxIGF1dG87CiAgICBtaW4taGVpZ2h0OiAyNjBweDsKICAgIG92ZXJmbG93OiBhdXRvOwogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDE4MHB4LCAxZnIpKTsKICAgIGFsaWduLWNvbnRlbnQ6IHN0YXJ0OwogICAgZ2FwOiAxMHB4OwogICAgcGFkZGluZzogMCAxNHB4IDE0cHg7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWNhcmQgewogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDY4cHggbWlubWF4KDAsIDFmcik7CiAgICBnYXA6IDEwcHg7CiAgICBtaW4taGVpZ2h0OiA4NHB4OwogICAgcGFkZGluZzogOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xLCAjMTcxYTFmKSA5MiUsIHRyYW5zcGFyZW50KTsKICAgIGNvbG9yOiBpbmhlcml0OwogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIGN1cnNvcjogcG9pbnRlcjsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItZGlhbG9nLmlzLWFzc2V0LW1vZGUgLm1qci13b3JrZmxvdy1waWNrZXItY2FyZCB7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDc2cHggbWlubWF4KDAsIDFmcik7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWNhcmQ6aG92ZXIsCi5tanItd29ya2Zsb3ctcGlja2VyLWNhcmQuaXMtc2VsZWN0ZWQgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDc3LCAxNzEsIDI0NywgMC43Mik7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDc3LCAxNzEsIDI0NywgMC4xMik7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLXRodW1iIHsKICAgIHdpZHRoOiA2OHB4OwogICAgYXNwZWN0LXJhdGlvOiAxIC8gMTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItdGh1bWIgaW1nIHsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgb2JqZWN0LWZpdDogY292ZXI7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWNhcmQtaW5mbyB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA0cHg7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWNhcmQtaW5mbyBzdHJvbmcsCi5tanItd29ya2Zsb3ctcGlja2VyLWNhcmQtaW5mbyBzcGFuLAoubWpyLXdvcmtmbG93LXBpY2tlci1jYXJkLWluZm8gc21hbGwgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItY2FyZC1pbmZvIHN0cm9uZyB7CiAgICBmb250LXNpemU6IDEzcHg7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWNhcmQtaW5mbyBzcGFuLAoubWpyLXdvcmtmbG93LXBpY2tlci1jYXJkLWluZm8gc21hbGwgewogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgI2FlYjNiZCk7CiAgICBmb250LXNpemU6IDExcHg7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWVtcHR5IHsKICAgIGdyaWQtY29sdW1uOiAxIC8gLTE7CiAgICBwYWRkaW5nOiAzMnB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgI2FlYjNiZCk7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWVtcHR5LmlzLWVycm9yIHsKICAgIGNvbG9yOiAjZmZiNGI0Owp9CgpAbWVkaWEgKG1heC13aWR0aDogNzIwcHgpIHsKICAgIC5tanItd29ya2Zsb3ctcGlja2VyLWJhY2tkcm9wIHsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgfQoKICAgIC5tanItd29ya2Zsb3ctcGlja2VyLXRvb2xiYXIgewogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsKICAgIH0KCiAgICAubWpyLXdvcmtmbG93LXBpY2tlci1zZWFyY2ggewogICAgICAgIGdyaWQtY29sdW1uOiAxIC8gLTE7CiAgICB9Cn0KCi8qIEtlZXAgZ2VuZXJhdGlvbi10aW1lIGJhZGdlIHBpbm5lZCB0byB0aGUgdGh1bWJuYWlsIGNvcm5lciBhY3Jvc3MgZ3JpZC9mZWVkIHZhcmlhbnRzLiAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGh1bWIgPiAubWpyLWdlbnRpbWUtYmFkZ2UsCi5tanItYm90dG9tLWZlZWQgLm1qci10aHVtYiA+IC5tanItZ2VudGltZS1iYWRnZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsKICAgIHJpZ2h0OiA2cHggIWltcG9ydGFudDsKICAgIGJvdHRvbTogNnB4ICFpbXBvcnRhbnQ7CiAgICBsZWZ0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICB0b3A6IGF1dG8gIWltcG9ydGFudDsKICAgIHotaW5kZXg6IDEwICFpbXBvcnRhbnQ7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBwYWRkaW5nOiAycHggNnB4ICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmFkaXVzOiA0cHggIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC41NSkgIWltcG9ydGFudDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikgIWltcG9ydGFudDsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA4MDAgIWltcG9ydGFudDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAxNWVtOwogICAgbGluZS1oZWlnaHQ6IDEuMTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgYm94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgIHRleHQtc2hhZG93OgogICAgICAgIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuOSksCiAgICAgICAgMCAwIDEwcHggY29sb3ItbWl4KGluIHNyZ2IsIGN1cnJlbnRDb2xvciAzNSUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigycHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoMnB4KTsKfQoKLyogS2VlcCByYXRpbmcvdGFncyBiYWRnZXMgYW5jaG9yZWQuIERvIG5vdCBmb3JjZSBkaXNwbGF5IGhlcmUgc28gZ3JpZCB2aXNpYmlsaXR5IHRvZ2dsZXMgc3RpbGwgY29udHJvbCBzaG93L2hpZGUuICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci10aHVtYiA+IC5tanItcmF0aW5nLWJhZGdlLAoubWpyLWJvdHRvbS1mZWVkIC5tanItdGh1bWIgPiAubWpyLXJhdGluZy1iYWRnZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsKICAgIHRvcDogNnB4ICFpbXBvcnRhbnQ7CiAgICByaWdodDogNnB4ICFpbXBvcnRhbnQ7CiAgICBsZWZ0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICBib3R0b206IGF1dG8gIWltcG9ydGFudDsKICAgIHotaW5kZXg6IDEwICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNTUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBsZXR0ZXItc3BhY2luZzogMXB4OwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjI1KTsKICAgIHRleHQtc2hhZG93OiAwIDJweCA2cHggcmdiYSgwLCAwLCAwLCAwLjYpOwogICAgYW5pbWF0aW9uOiBtanItZmFkZS1pbiAwLjJzIGVhc2Utb3V0Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGh1bWIgPiAubWpyLXRhZ3MtYmFkZ2UsCi5tanItYm90dG9tLWZlZWQgLm1qci10aHVtYiA+IC5tanItdGFncy1iYWRnZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsKICAgIGxlZnQ6IDZweCAhaW1wb3J0YW50OwogICAgYm90dG9tOiA2cHggIWltcG9ydGFudDsKICAgIHJpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICB0b3A6IGF1dG8gIWltcG9ydGFudDsKICAgIHotaW5kZXg6IDEwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAzcHggNnB4OwogICAgZm9udC1zaXplOiA5cHg7CiAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDU2cHgpOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpOwogICAgYm94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgIGFuaW1hdGlvbjogbWpyLWZhZGUtaW4gMC4ycyBlYXNlLW91dDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRodW1iLXBsYXkgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBkaXNwbGF5OiBncmlkOwogICAgcGxhY2UtaXRlbXM6IGNlbnRlcjsKICAgIGZvbnQtc2l6ZTogMjhweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CiAgICB0ZXh0LXNoYWRvdzogMCAwIDEwcHggcmdiYSgwLCAwLCAwLCAwLjcpOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDEyMG1zIGVhc2U7Cn0KCi8qIC0tLSBIb3ZlciBpbmZvIG92ZXJsYXkgKHBvc2l0aXZlIHByb21wdCArIGdlbiB0aW1lKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBTbGlkZXMgdXAgZnJvbSB0aGUgYm90dG9tIG9mIC5tanItdGh1bWIgb24gY2FyZCBob3Zlci4KICAgcG9pbnRlci1ldmVudHM6IG5vbmUgIC0+IG5ldmVyIGJsb2NrcyB2aWRlbyBtb3VzZWVudGVyIC8gcGxheS1vbi1ob3Zlci4KICAgei1pbmRleDogMiAgICAgICAgICAgLT4gc2l0cyBhYm92ZSB0aGUgdGh1bWJuYWlsIGltYWdlLCBiZWxvdyB0aGUgcGxheSBpY29uLgogICBDb250cm9sbGVkIGJ5IHRoZSAubWpyLXNob3ctaG92ZXItaW5mbyBjbGFzcyBvbiB0aGUgZ3JpZCBjb250YWluZXIsIHdoaWNoCiAgIGlzIHRvZ2dsZWQgdmlhIHRoZSAiU2hvdyBwcm9tcHQgb24gaG92ZXIiIHNldHRpbmcuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZC1ob3Zlci1pbmZvIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGJvdHRvbTogMDsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIHBhZGRpbmc6IDIycHggOHB4IDdweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHRyYW5zcGFyZW50IDAlLCByZ2JhKDAsIDAsIDAsIDAuNzgpIDEwMCUpOwogICAgY29sb3I6ICNmZmY7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBsaW5lLWhlaWdodDogMS40OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBvcGFjaXR5OiAwOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDVweCk7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIG9wYWNpdHkgMTUwbXMgZWFzZSwKICAgICAgICB0cmFuc2Zvcm0gMTUwbXMgZWFzZTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAzcHg7CiAgICB6LWluZGV4OiAyOwp9Ci8qIE9ubHkgcmV2ZWFsIG9uIGhvdmVyIHdoZW4gdGhlIHNldHRpbmcgaXMgZW5hYmxlZCAoY2xhc3Mgb24gZ3JpZCBjb250YWluZXIpICovCi5tanItZ3JpZC5tanItc2hvdy1ob3Zlci1pbmZvIC5tanItY2FyZDpob3ZlciAubWpyLWNhcmQtaG92ZXItaW5mbyB7CiAgICBvcGFjaXR5OiAxOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwp9Ci5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkLWhvdmVyLWluZm8gLm1qci1ob3Zlci1wcm9tcHQgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OwogICAgLXdlYmtpdC1saW5lLWNsYW1wOiAyOwogICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDsKICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7CiAgICBvcGFjaXR5OiAwLjk7CiAgICBmb250LXNpemU6IDkuNXB4Owp9Ci5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkLWhvdmVyLWluZm8gLm1qci1ob3Zlci1nZW50aW1lIHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjEwLCAxMjAsIDAuOTUpOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGZvbnQtc2l6ZTogOXB4OwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTsKfQpAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkgewogICAgLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQtaG92ZXItaW5mbyB7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwbXM7CiAgICAgICAgdHJhbnNmb3JtOiBub25lOwogICAgfQp9CgovKiAtLS0gQ2FyZCBkZXRhaWxzIHBhbmVsIHNob3cvaGlkZSB2aWEgZ3JpZCBjb250YWluZXIgY2xhc3MgLS0tLS0tLS0tLS0tLS0tLQogICAubWpyLXNob3ctZGV0YWlscyBpcyB0b2dnbGVkIGJ5IGFwcGx5R3JpZFNldHRpbmdzQ2xhc3NlcygpIHdoZW4gdGhlCiAgICJTaG93IG1ldGFkYXRhIHBhbmVsIiBzZXR0aW5nIGNoYW5nZXMuICBEZWZhdWx0ID0gT0ZGIOKGkiBwYW5lbCBoaWRkZW4uCiAgIEhpZGluZyBoZXJlIGtlZXBzIGFjdHVhbCByb3cgaGVpZ2h0ID0gZXN0aW1hdGVSb3dIZWlnaHQobWV0YUhlaWdodD0wKSwKICAgcHJldmVudGluZyB0aGUgdmlydHVhbGl6ZXIgZnJvbSByZXBvc2l0aW9uaW5nIGFsbCByb3dzIG9uIG1lYXN1cmUKICAgKHdoaWNoIHdhcyB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgInJlbG9hZCBpbXByZXNzaW9uIiBibGluaykuCiAgIE1hdGNoIHRoZSBib3R0b20tZmVlZCBwYXR0ZXJuIGF0IC5tanItYm90dG9tLWZlZWQgLm1qci1jYXJkLWluZm8uCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZ3JpZCAubWpyLWNhcmQtaW5mbyB7CiAgICBkaXNwbGF5OiBub25lOwp9Ci5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkLm1qci1zaG93LWRldGFpbHMgLm1qci1jYXJkLWluZm8gewogICAgZGlzcGxheTogYmxvY2s7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkLW1ldGEgewogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBmb250LXNpemU6IDExcHg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkLWZpbGVuYW1lIHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIG1pbi13aWR0aDogMDsKICAgIG1hcmdpbi1ib3R0b206IDJweDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQtZGV0YWlscyB7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICBvcGFjaXR5OiAwLjg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkLWZpbGVuYW1lLXRleHQgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG1pbi13aWR0aDogMDsKfQoKLyogUmF0aW5nICYgVGFncyBFZGl0b3JzICovCkBrZXlmcmFtZXMgZmFkZUluIHsKICAgIGZyb20gewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00cHgpOwogICAgfQogICAgdG8gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgfQp9Ci8qKgogKiBBcmNoaXZlZCBDU1MgU3R5bGVzIC0gUmF0aW5nIGFuZCBUYWdzCiAqIFRoZXNlIHN0eWxlcyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGVtZS1jb21meS5jc3MKICovCgovKiBBbmltYXRpb25zICovCkBrZXlmcmFtZXMgc2xpZGVJblJpZ2h0IHsKICAgIGZyb20gewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgfQogICAgdG8gewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgfQp9CgovKiBQb3BvdmVycyAqLwoubWpyLXJhdGluZy1wb3BvdmVyLAoubWpyLXRhZ3MtcG9wb3ZlciB7CiAgICBhbmltYXRpb246IGZhZGVJbiAwLjJzIGVhc2U7Cn0KCi5tanItcmF0aW5nLXBvcG92ZXIsCi5tanItdGFncy1wb3BvdmVyIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZywgMC41cmVtKTsKICAgIGJveC1zaGFkb3c6IDAgMTJweCAyOHB4IHJnYmEoMCwgMCwgMCwgMC4zNSk7CiAgICBwYWRkaW5nOiA4cHg7Cn0KCi8qIFJhdGluZyBFZGl0b3IgKi8KLm1qci1yYXRpbmctZWRpdG9yIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNHB4OwogICAgcGFkZGluZzogMnB4Owp9CgoubWpyLXJhdGluZy1zdGFyIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBmb250LXNpemU6IDIwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBwYWRkaW5nOiA0cHggNnB4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2RkZCk7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIHRyYW5zZm9ybSAxMjBtcyBlYXNlLAogICAgICAgIGJhY2tncm91bmQtY29sb3IgMTIwbXMgZWFzZSwKICAgICAgICBib3JkZXItY29sb3IgMTIwbXMgZWFzZSwKICAgICAgICBjb2xvciAxMjBtcyBlYXNlOwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci1yYXRpbmctc3Rhcjpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpIDM1JSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbWZ5LW1lbnUtc2Vjb25kYXJ5LWJnLCAjMzMzKSA2NSUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1yYXRpbmctZWRpdG9yIC5tanItcmF0aW5nLXN0YXI6aG92ZXIgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpICFpbXBvcnRhbnQ7Cn0KCi5tanItcmF0aW5nLWVkaXRvciAubWpyLXJhdGluZy1zdGFyOmZvY3VzLXZpc2libGUgewogICAgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLWZvY3VzLW91dGxpbmUtY29sb3IsICM0ZGFiZjcpOwogICAgb3V0bGluZS1vZmZzZXQ6IDJweDsKICAgIGJvcmRlci1yYWRpdXM6IDJweDsKfQoKLm1qci1yYXRpbmctZWRpdG9yIC5tanItcmF0aW5nLXN0YXI6YWN0aXZlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NSkgIWltcG9ydGFudDsKfQoKLyogVGFncyBFZGl0b3IgKi8KLm1qci10YWdzLWVkaXRvciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZzogMTJweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEsIHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItc20pOwogICAgYm94LXNoYWRvdzogMCAxMnB4IDI4cHggcmdiYSgwLCAwLCAwLCAwLjQ1KTsKICAgIG1pbi13aWR0aDogMjUwcHg7CiAgICBtYXgtd2lkdGg6IG1pbigzNTBweCwgY2FsYygxMDB2dyAtIDIwcHgpKTsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0Owp9CgoubWpyLXRhZ3MtZWRpdG9yLmlzLWRpc2FibGVkIHsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgb3BhY2l0eTogMC43Owp9CgoubWpyLXRhZ3MtZGlzcGxheSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAgZ2FwOiA2cHg7CiAgICBtaW4taGVpZ2h0OiAzMnB4Owp9CgoubWpyLXRhZ3MtZW1wdHkgewogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCk7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7Cn0KCi5tanItdGFnLWNoaXAgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDI0JSwgdHJhbnNwYXJlbnQpOwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDQwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGNvbG9yOiB2YXIoLS1tanItdGFnLWNvbG9yKTsKICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7Cn0KCi5tanItdGFnLWNoaXAtcmVtb3ZlIHsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgYm9yZGVyOiAwOwogICAgYm9yZGVyLXJhZGl1czogMDsKICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICBjb2xvcjogaW5oZXJpdDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIG9wYWNpdHk6IDAuNzsKfQoKLm1qci10YWctY2hpcC1yZW1vdmU6ZGlzYWJsZWQgewogICAgY3Vyc29yOiBkZWZhdWx0Owp9CgoubWpyLXRhZ3MtaW5wdXQtd3JhcCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5tanItdGFnLWlucHV0IHsKICAgIHdpZHRoOiAxMDAlOwogICAgcGFkZGluZzogNnB4IDhweDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA3NSUsIHRyYW5zcGFyZW50KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcpOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci10YWctaW5wdXQ6Zm9jdXMgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDg4JSwgdHJhbnNwYXJlbnQpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHZhcigtLW1qci1hY2NlbnQpICFpbXBvcnRhbnQ7Cn0KCi5tanItdGFnLWNoaXA6aG92ZXIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDM0JSwgdHJhbnNwYXJlbnQpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItdGFnLWNvbG9yKSA2MCUsIHZhcigtLW1qci1ib3JkZXIpKSAhaW1wb3J0YW50Owp9CgoubWpyLXRhZ3MtZHJvcGRvd24gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAxMDAlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgbWFyZ2luLXRvcDogNHB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSwgdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSkpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBtYXgtaGVpZ2h0OiAxNTBweDsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICB6LWluZGV4OiAxMDAwOwp9CgoubWpyLXRhZ3MtZHJvcGRvd24gW2RhdGEtcGMtc2VjdGlvbj0ibGlzdCJdIHsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOiAwOwp9CgoubWpyLXRhZ3MtZHJvcGRvd24gW2RhdGEtcGMtc2VjdGlvbj0ib3B0aW9uIl0gewogICAgbGlzdC1zdHlsZTogbm9uZTsKfQoKLm1qci10YWctc3VnZ2VzdGlvbiB7CiAgICBwYWRkaW5nOiA2cHggOHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjb2xvcjogdmFyKC0tbWpyLXRhZy1jb2xvcik7CiAgICBmb250LXNpemU6IDEycHg7Cn0KCi5tanItdGFnLXN1Z2dlc3Rpb24uaXMtYWN0aXZlLAoubWpyLXRhZy1zdWdnZXN0aW9uOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItdGFnLWNvbG9yKSAyOCUsIHRyYW5zcGFyZW50KSAhaW1wb3J0YW50Owp9CgovKiBCYWRnZXMgSW50ZXJhY3RpdmUgKi8KLm1qci1yYXRpbmctYmFkZ2UsCi5tanItdGFncy1iYWRnZSB7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwp9CgoubWpyLXJhdGluZy1iYWRnZSB7CiAgICBjb2xvcjogdmFyKC0tbWpyLXJhdGluZy1jb2xvcikgIWltcG9ydGFudDsKfQoKLm1qci10YWdzLWJhZGdlIHsKICAgIGNvbG9yOiB2YXIoLS1tanItdGFnLWNvbG9yKSAhaW1wb3J0YW50Owp9CgoubWpyLXJhdGluZy1iYWRnZTpob3ZlciwKLm1qci10YWdzLWJhZGdlOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7CiAgICBib3gtc2hhZG93OiAwIDRweCA4cHggcmdiYSgwLCAwLCAwLCAwLjUpOwp9CgovKiBTY3JvbGxiYXIgZm9yIHRhZ3MgZHJvcGRvd24gKi8KLm1qci10YWdzLWRyb3Bkb3duOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICB3aWR0aDogNnB4Owp9CgoubWpyLXRhZ3MtZHJvcGRvd246Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA2NSUsIHRyYW5zcGFyZW50KTsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKfQoKLm1qci10YWdzLWRyb3Bkb3duOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXRhZy1jb2xvcikgNDglLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7Cn0KCi5tanItdGFncy1kcm9wZG93bjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDY1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgovKiBTaWRlYmFyIChjYW4gYmUgbGVmdCBvciByaWdodCkgKi8KLm1qci1zaWRlYmFyIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDM7CiAgICBmbGV4OiAwIDAgYXV0bzsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7Cn0KCi5tanItd29ya2Zsb3ctdHJlZS13cmFwIHsKICAgIG1hcmdpbjogMCAwIDEycHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODIlLCB0cmFuc3BhcmVudCk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1tZCwgOHB4KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA3MiUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci13b3JrZmxvdy10cmVlIHsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZWFlYWVhKTsKICAgIGZvbnQtc2l6ZTogMTJweDsKfQoKLm1qci13b3JrZmxvdy10cmVlLXNjcm9sbCB7CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIHBhZGRpbmc6IDJweCA0cHggNnB4Owp9CgoubWpyLXdvcmtmbG93LXRyZWUtbGlzdCB7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMDsKfQoKLm1qci13b3JrZmxvdy10cmVlLW5vZGUtY29udGVudCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgbWluLWhlaWdodDogMjhweDsKICAgIHBhZGRpbmc6IDRweCA2cHg7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1zbSwgNnB4KTsKfQoKLm1qci13b3JrZmxvdy10cmVlLW5vZGUtY29udGVudDpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTglLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItd29ya2Zsb3ctdHJlZS10b2dnbGUgewogICAgd2lkdGg6IDE0cHg7CiAgICBoZWlnaHQ6IDIwcHg7CiAgICBwYWRkaW5nOiAwOwogICAgYm9yZGVyOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjQpKTsKfQoKLm1qci13b3JrZmxvdy10cmVlLXRvZ2dsZVtkYXRhLXAtbGVhZj0idHJ1ZSJdIHsKICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKfQoKLm1qci13b3JrZmxvdy10cmVlLWljb24gewogICAgd2lkdGg6IDhweDsKICAgIGZsZXg6IDAgMCA4cHg7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDcwJSwgdmFyKC0tY29udGVudC1mZykpOwogICAgZm9udC1zaXplOiA3cHg7Cn0KCi5tanItd29ya2Zsb3ctdHJlZS1sYWJlbCB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmbGV4OiAxIDEgYXV0bzsKfQoKLm1qci13b3JrZmxvdy10cmVlLW5vZGUgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci13b3JrZmxvdy10cmVlLW5vZGUtbmFtZSB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoubWpyLXdvcmtmbG93LXRyZWUtbm9kZS10eXBlIHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLW11dGVkKSA3NSUsIHZhcigtLWNvbnRlbnQtZmcpKTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItc2lkZWJhci5pcy1vcGVuIHsKICAgIC8qIEJvcmRlciBpcyBzZXQgZHluYW1pY2FsbHkgYmFzZWQgb24gcG9zaXRpb24gKi8KfQoKLm1qci1zaWRlYmFyIC5tanItc2lkZWJhci1oZWFkZXIgewogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMiwgIzMzMyk7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7Cn0KCi5tanItc2lkZWJhciAubWpyLXNpZGViYXItY29udGVudCB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xLCAjMmEyYTJhKTsKfQoKLm1qci1zaWRlYmFyIC5tanItc2lkZWJhci1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhciB7CiAgICB3aWR0aDogOHB4Owp9CgoubWpyLXNpZGViYXIgLm1qci1zaWRlYmFyLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4zKTsKfQoKLm1qci1zaWRlYmFyIC5tanItc2lkZWJhci1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7Cn0KCi5tanItc2lkZWJhciAubWpyLXNpZGViYXItY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpOwp9CgovKiBDdXN0b20gUm9vdHMgUG9wb3ZlciBTdHlsaW5nICovCi5tanItY3VzdG9tLXBvcG92ZXIgewogICAgbWluLXdpZHRoOiAzMDBweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEsIHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHZhcigtLWJvcmRlci1jb2xvciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSkpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnLCAwLjVyZW0pOwogICAgYm94LXNoYWRvdzogMCAxMnB4IDI4cHggcmdiYSgwLCAwLCAwLCAwLjM1KTsKICAgIHotaW5kZXg6IHZhcigtLW1qci1wb3BvdmVyLXotaW5kZXgpOwogICAgcGFkZGluZzogMTJweDsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLXBvcG92ZXItcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgIGZsZXgtd3JhcDogd3JhcDsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLXBvcG92ZXItcm93Omxhc3QtY2hpbGQgewogICAgbWFyZ2luLWJvdHRvbTogMDsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLXBvcG92ZXItbGFiZWwgewogICAgd2lkdGg6IDYwcHg7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkLCB2YXIoLS1kZXNjcmlwLXRleHQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42NSkpKTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtd2VpZ2h0OiA1MDA7Cn0KCi5tanItY3VzdG9tLXBvcG92ZXIgLm1qci1zZWxlY3QgewogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLWJ0biB7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiAwOwogICAgbWFyZ2luLXJpZ2h0OiA1cHg7Cn0KCi5tanItY3VzdG9tLXBvcG92ZXIgLm1qci1idG46bGFzdC1jaGlsZCB7CiAgICBtYXJnaW4tcmlnaHQ6IDA7Cn0KCi5tanItY3VzdG9tLXBvcG92ZXIgLm1qci1idG4ubWpyLXByaW1hcnkgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDE4JSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNjAlLCB2YXIoLS1tanItYm9yZGVyKSk7Cn0KCi5tanItY3VzdG9tLXBvcG92ZXIgLm1qci1idG4ubWpyLXByaW1hcnk6aG92ZXIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDI1JSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgODAlLCB2YXIoLS1tanItYm9yZGVyKSk7Cn0KCi5tanItc2lkZWJhciAubWpyLXNpZGViYXItc2VjdGlvbiB7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwp9CgoubWpyLXNpZGViYXIgLm1qci1zaWRlYmFyLXNlY3Rpb246aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjMpICFpbXBvcnRhbnQ7Cn0KCi8qIElubGluZSBTaWRlYmFyICh3aWR0aC1iYXNlZCB0cmFuc2l0aW9ucyBsaWtlIGFyY2hpdmVkIHZlcnNpb24pICovCi5tanItaW5saW5lLXNpZGViYXIgewogICAgd2lkdGg6IDA7CiAgICBtaW4td2lkdGg6IDA7CiAgICBtYXgtd2lkdGg6IDQ4MHB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEsICMyYTJhMmEpOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICB0cmFuc2l0aW9uOgogICAgICAgIHdpZHRoIDAuM3MgZWFzZSwKICAgICAgICBtaW4td2lkdGggMC4zcyBlYXNlOwp9CgoubWpyLWlubGluZS1zaWRlYmFyLmlzLW9wZW4gewogICAgd2lkdGg6IDQwMHB4OwogICAgbWluLXdpZHRoOiAyNjBweDsKfQoKLyogU3BhY2UgYmV0d2VlbiBzaWRlYmFyIGFuZCBncmlkICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1icm93c2UgewogICAgZ2FwOiAwOwp9CgovKiBCb3JkZXIgYmFzZWQgb24gcG9zaXRpb24gKi8KLm1qci1pbmxpbmUtc2lkZWJhcltkYXRhLXBvc2l0aW9uPSJsZWZ0Il0gewogICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7Cn0KCi5tanItaW5saW5lLXNpZGViYXJbZGF0YS1wb3NpdGlvbj0icmlnaHQiXSB7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwp9CgovKiBTaWRlYmFyIHBsYWNlaG9sZGVyICovCi5tanItc2lkZWJhci1wbGFjZWhvbGRlciB7CiAgICBwYWRkaW5nOiAyMHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSk7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgovKiA9PT09PT09PT09IFZpZXdlciBDb21wb25lbnQgPT09PT09PT09PSAqLwoubWpyLXZpZXdlci1vdmVybGF5IHsKICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgIHRvcDogMDsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIGJvdHRvbTogMDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC45NSk7CiAgICAvKiBTaXQgYWJvdmUgTUZWICgxMDAwMCkgc28gdGhlIGZ1bGwgdmlld2VyIGFsd2F5cyBjb3ZlcnMgdGhlIGZsb2F0aW5nIHBhbmVsICovCiAgICB6LWluZGV4OiAxMDAwMTsKICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgZGlzcGxheTogbm9uZTsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47Cn0KLyogRmFkZS1pbjogYW5pbWF0aW9uIHJlLXRyaWdnZXJzIGVhY2ggdGltZSBKUyBzd2l0Y2hlcyBkaXNwbGF5IGJhY2sgdG8gZmxleCAqLwoubWpyLXZpZXdlci1vdmVybGF5W3N0eWxlKj0iZmxleCJdIHsKICAgIGFuaW1hdGlvbjogbWpyLWZhZGUtaW4gMC4xOHMgZWFzZS1vdXQ7Cn0KCkBrZXlmcmFtZXMgbWpyLWZhZGUtaW4gewogICAgZnJvbSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTk1KTsKICAgIH0KICAgIHRvIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICB9Cn0KCi5tanItdmlld2VyLWhlYWRlciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDEycHggMjBweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxNzBkZWcsIHJnYmEoMjQsIDI3LCAzMywgMC45NiksIHJnYmEoMTcsIDE5LCAyNSwgMC45NykpOwogICAgYm9yZGVyLWJvdHRvbTogMC44cHggc29saWQgcmdiYSgxOTYsIDIwMiwgMjEwLCAwLjIpOwogICAgY29sb3I6IHdoaXRlOwp9CgoubWpyLXZpZXdlci1maWxlbmFtZSB7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBmb250LXdlaWdodDogNTAwOwogICAgbWF4LXdpZHRoOiA0MDBweDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItdmlld2VyLW1vZGUtYnV0dG9ucyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiA2cHg7Cn0KCi5tanItdmlld2VyLW1vZGUtYnV0dG9ucyBidXR0b24gewogICAgcGFkZGluZzogNHB4IDEycHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIwNiwgMjExLCAyMTgsIDAuMSksIHJnYmEoMjA2LCAyMTEsIDIxOCwgMC4wMykpOwogICAgYm9yZGVyOiAwLjhweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMyk7CiAgICBjb2xvcjogcmdiYSgyMzAsIDIzMywgMjM4LCAwLjk1KTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIHRyYW5zaXRpb246IGFsbCAwLjE2czsKfQoKLm1qci12aWV3ZXItbW9kZS1idXR0b25zIGJ1dHRvbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIxMCwgMjE0LCAyMjAsIDAuMTQpLCByZ2JhKDIxMCwgMjE0LCAyMjAsIDAuMDYpKTsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMTQsIDIxOCwgMjI0LCAwLjQyKTsKfQoKLyogVmlld2VyIGNsb3NlIGJ1dHRvbiBwaW5uZWQgdG8gb3ZlcmxheSBjb3JuZXIgKi8KLm1qci12aWV3ZXItY2xvc2UsCi5tanItdmlld2VyLWZzIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgxOTYsIDIwMiwgMjEwLCAwLjI2KSAhaW1wb3J0YW50OwogICAgYm9yZGVyLXdpZHRoOiAwLjhweCAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIwNiwgMjExLCAyMTgsIDAuMDgpLCByZ2JhKDIwNiwgMjExLCAyMTgsIDAuMDIpKSwKICAgICAgICByZ2JhKDIwLCAyMywgMjksIDAuOTQpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItY2xvc2UgewogICAgY29sb3I6ICNmZmY0ZjQgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMDUsIDgyLCA4MiwgMC41KSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIwNSwgODIsIDgyLCAwLjMpLCByZ2JhKDIwNSwgODIsIDgyLCAwLjEyKSksCiAgICAgICAgcmdiYSg1OCwgMTgsIDE4LCAwLjk0KSAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyMTksIDIxOSwgMC4xNiksCiAgICAgICAgMCAwIDAgMXB4IHJnYmEoMjA1LCA4MiwgODIsIDAuMDgpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLWNsb3NlOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyMzUsIDExMCwgMTEwLCAwLjM4KSwgcmdiYSgyMzUsIDExMCwgMTEwLCAwLjE2KSksCiAgICAgICAgcmdiYSg3MCwgMTgsIDE4LCAwLjk3KSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIzNSwgMTM4LCAxMzgsIDAuNjQpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLWZzOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyMTAsIDIxNCwgMjIwLCAwLjE0KSwgcmdiYSgyMTAsIDIxNCwgMjIwLCAwLjA2KSksCiAgICAgICAgcmdiYSgyMywgMjYsIDMyLCAwLjk1KSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIxNCwgMjE4LCAyMjQsIDAuMzgpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLWNsb3NlIC5waSB7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLm1qci12aWV3ZXItY29udGVudCB7CiAgICBmbGV4OiAxOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Cn0KCi5tanItdmlld2VyLXNpbmdsZSwKLm1qci12aWV3ZXItYWIsCi5tanItdmlld2VyLXNpZGVieXNpZGUgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7Cn0KCi5tanItdmlld2VyLXNpbmdsZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwp9CgoubWpyLXZpZXdlci1zaW5nbGUgaW1nLAoubWpyLXZpZXdlci1zaW5nbGUgdmlkZW8gewogICAgbWF4LXdpZHRoOiAxMDAlOwogICAgbWF4LWhlaWdodDogMTAwJTsKICAgIG9iamVjdC1maXQ6IGNvbnRhaW47CiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yczsKfQoKLm1qci12aWV3ZXItYXVkaW8tc2hlbGwgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMTRweDsKICAgIHBhZGRpbmc6IDE4cHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgYmFja2dyb3VuZDoKICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDE4JSAyMiUsIHJnYmEoNzgsIDE4NCwgMjU1LCAwLjIpLCB0cmFuc3BhcmVudCAzMiUpLAogICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgODIlIDc0JSwgcmdiYSg4MiwgMjIwLCAxNTYsIDAuMTUpLCB0cmFuc3BhcmVudCAzNiUpLAogICAgICAgIGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHJnYmEoMTIsIDE4LCAyNiwgMC45OCksIHJnYmEoNCwgNywgMTEsIDAuOTkpKTsKfQoKLm1qci12aWV3ZXItYXVkaW8taGVhZGVyIHsKICAgIHdpZHRoOiBtaW4oMTA4MHB4LCA4OCUpOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogMTFweDsKICAgIG1pbi13aWR0aDogMDsKICAgIHBhZGRpbmc6IDAgOHB4Owp9CgoubWpyLXZpZXdlci1hdWRpby1pY29uIHsKICAgIHdpZHRoOiAzNHB4OwogICAgaGVpZ2h0OiAzNHB4OwogICAgZmxleDogMCAwIGF1dG87CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KTsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDIycHggcmdiYSgwLCAwLCAwLCAwLjI2KTsKfQoKLm1qci12aWV3ZXItYXVkaW8tdGl0bGUtd3JhcCB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMnB4Owp9CgoubWpyLXZpZXdlci1hdWRpby10aXRsZSB7CiAgICBtYXgtd2lkdGg6IG1pbig3NjBweCwgNzJ2dyk7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgZm9udC13ZWlnaHQ6IDgwMDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI1Owp9CgoubWpyLXZpZXdlci1hdWRpby1tZXRhIHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTgpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDgwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwOwp9CgoubWpyLXZpZXdlci1hdWRpby12aXogewogICAgd2lkdGg6IG1pbigxOTIwcHgsIDk2JSk7CiAgICBhc3BlY3QtcmF0aW86IDE2IC8gOTsKICAgIGhlaWdodDogYXV0bzsKICAgIG1heC1oZWlnaHQ6IG1pbigxMDgwcHgsIDY4dmgpOwogICAgbWluLWhlaWdodDogMjYwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDkpOwogICAgYm9yZGVyLXJhZGl1czogMTZweDsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAxKSksCiAgICAgICAgcmdiYSgyLCA1LCA5LCAwLjIyKTsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpLAogICAgICAgIDAgMThweCA3MHB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKfQoKLm1qci12aWV3ZXItYXVkaW8tc3JjIHsKICAgIHdpZHRoOiBtaW4oNjgwcHgsIDkwJSk7Cn0KCi5tanItdmlld2VyLWFiIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5tanItdmlld2VyLXNpZGVieXNpZGUgewogICAgZGlzcGxheTogbm9uZTsKICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICBnYXA6IDJweDsKfQoKLm1qci12aWV3ZXItc2lkZWJ5c2lkZSA+IGRpdiB7CiAgICBmbGV4OiAxOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7Cn0KCi5tanItdmlld2VyLXNpZGVieXNpZGUgaW1nLAoubWpyLXZpZXdlci1zaWRlYnlzaWRlIHZpZGVvIHsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIG1heC1oZWlnaHQ6IDEwMCU7CiAgICBvYmplY3QtZml0OiBjb250YWluOwp9CgoubWpyLXZpZXdlci1mb290ZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDEycHggMjBweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC44KTsKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICBjb2xvcjogd2hpdGU7CiAgICBnYXA6IDIwcHg7Cn0KCi5tanItdmlld2VyLWZvb3RlciBidXR0b24gewogICAgcGFkZGluZzogNnB4IDEycHg7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKTsKICAgIGNvbG9yOiB3aGl0ZTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOwp9CgoubWpyLXZpZXdlci1mb290ZXIgYnV0dG9uOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKfQoKLm1qci12aWV3ZXItbmF2IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxNHB4Owp9CgoubWpyLXZpZXdlci1uYXYtYnRuIHsKICAgIHdpZHRoOiA0MHB4ICFpbXBvcnRhbnQ7CiAgICBoZWlnaHQ6IDQwcHggIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHggIWltcG9ydGFudDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTk2LCAyMDIsIDIxMCwgMC40MikgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgxOTQsIDIwMCwgMjA4LCAwLjE4KSwgcmdiYSgxOTQsIDIwMCwgMjA4LCAwLjA3KSksCiAgICAgICAgcmdiYSgzNCwgMzgsIDQ0LCAwLjkyKSAhaW1wb3J0YW50OwogICAgY29sb3I6IHJnYmEoMjM0LCAyMzYsIDI0MCwgMC45NikgIWltcG9ydGFudDsKICAgIGZvbnQtc2l6ZTogMjBweCAhaW1wb3J0YW50OwogICAgZm9udC13ZWlnaHQ6IDcwMCAhaW1wb3J0YW50OwogICAgbGluZS1oZWlnaHQ6IDEgIWltcG9ydGFudDsKICAgIHRleHQtc2hhZG93OiBub25lOwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpOwogICAgdHJhbnNpdGlvbjoKICAgICAgICB0cmFuc2Zvcm0gMC4xNHMgZWFzZSwKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yIDAuMTRzIGVhc2UsCiAgICAgICAgYm9yZGVyLWNvbG9yIDAuMTRzIGVhc2UgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItbmF2LWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjE0LCAyMTgsIDIyNCwgMC41NikgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyMDcsIDIxMiwgMjE5LCAwLjIpLCByZ2JhKDIwNywgMjEyLCAyMTksIDAuMSkpLAogICAgICAgIHJnYmEoMzksIDQzLCA0OSwgMC45NCkgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwp9CgoubWpyLXZpZXdlci1uYXYtYnRuOmFjdGl2ZTpub3QoOmRpc2FibGVkKSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgc2NhbGUoMC45OCk7CiAgICBmaWx0ZXI6IG5vbmU7Cn0KCi5tanItdmlld2VyLW5hdi1idG46ZGlzYWJsZWQgewogICAgb3BhY2l0eTogMC4zNCAhaW1wb3J0YW50OwogICAgZmlsdGVyOiBncmF5c2NhbGUoMC4yNSk7CiAgICBib3gtc2hhZG93OiBub25lOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLWluZGV4IHsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIG1pbi13aWR0aDogNzRweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wNGVtOwogICAgY29sb3I6IHJnYmEoMjI2LCAyMjgsIDIzMywgMC45NCk7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDE5NywgMjAzLCAyMTEsIDAuMTUpLCByZ2JhKDE5NywgMjAzLCAyMTEsIDAuMDYpKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTk3LCAyMDMsIDIxMSwgMC4zNCk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIHBhZGRpbmc6IDVweCAxMXB4OwogICAgdGV4dC1zaGFkb3c6IG5vbmU7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xOCk7Cn0KCi5tanItdmlld2VyLXBsYXllcmJhciB7CiAgICBib3JkZXItcmFkaXVzOiAxOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxOTQsIDIwMCwgMjA4LCAwLjE2KTsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCB0b3AgbGVmdCwgcmdiYSg5MCwgMTUwLCAyNTUsIDAuMDgpLCB0cmFuc3BhcmVudCAzNiUpLAogICAgICAgIGxpbmVhci1ncmFkaWVudCgxNjBkZWcsIHJnYmEoMjAsIDI0LCAzMCwgMC45NCksIHJnYmEoMTIsIDE1LCAyMSwgMC45OCkpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSksCiAgICAgICAgMCAxNnB4IDM2cHggcmdiYSgwLCAwLCAwLCAwLjIyKTsKICAgIC8qIG92ZXJmbG93IG11c3Qgc3RheSB2aXNpYmxlIHNvIHRoZSBzZWVrIHJ1bGVyIHRpY2tzL2xhYmVscyAodG9wOi0xNnB4IC8gdG9wOi0zNHB4KQogICAgICAgdGhhdCBhcmUgYWJzb2x1dGVseSBwb3NpdGlvbmVkIGFib3ZlIHRoZSBzZWVrIGJhciBhcmUgbm90IGNsaXBwZWQuICovCiAgICBvdmVyZmxvdzogdmlzaWJsZTsKfQoKLm1qci12aWV3ZXItdG9vbHMgewogICAgYWxpZ24taXRlbXM6IHN0YXJ0OwogICAganVzdGlmeS1jb250ZW50OiBzdHJldGNoOwogICAgZ2FwOiA4cHg7Cn0KCi5tanItdmlld2VyLWhlYWRlciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5tanItdmlld2VyLWhlYWRlcjo6YWZ0ZXIgewogICAgY29udGVudDogIiI7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAxOHB4OwogICAgcmlnaHQ6IDE4cHg7CiAgICB0b3A6IDQ0cHg7CiAgICBoZWlnaHQ6IDFweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgdHJhbnNwYXJlbnQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCksIHRyYW5zcGFyZW50KTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgb3BhY2l0eTogMC43Owp9CgoubWpyLXZpZXdlci1oZWFkZXItbWV0YSB7CiAgICBtaW4taGVpZ2h0OiAzMHB4OwogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDM1KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7Cn0KCi5tanItdmlld2VyLWhlYWRlci10b3AgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHBhZGRpbmctcmlnaHQ6IDg0cHg7CiAgICBwYWRkaW5nLWxlZnQ6IDEycHg7Cn0KCi5tanItdmlld2VyLWhlYWRlci1hcmVhLS1sZWZ0IHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBmbGV4OiAxIDEgMDsKICAgIG1pbi13aWR0aDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5tanItdmlld2VyLWhlYWRlci1hcmVhLS1jZW50ZXIgewogICAgbWluLXdpZHRoOiAwOwogICAgZmxleDogMSAxIGF1dG87Cn0KCi5tanItdmlld2VyLWhlYWRlci1hcmVhLS1yaWdodCB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgZmxleDogMSAxIDA7CiAgICBtaW4td2lkdGg6IDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgoubWpyLXZpZXdlci10aXRsZS13cmFwIHsKICAgIHdpZHRoOiBhdXRvOwogICAgbWluLXdpZHRoOiAwOwogICAgbWF4LXdpZHRoOiBtaW4oMTAwJSwgY2FsYygxMDB2dyAtIDIyMHB4KSk7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiAxMnB4Owp9CgoubWpyLXZpZXdlci10aXRsZS1saW5lIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDZweDsKICAgIG1pbi13aWR0aDogMDsKICAgIGZsZXgtd3JhcDogbm93cmFwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm1qci12aWV3ZXItZmlsZW5hbWUgewogICAgZm9udC1zaXplOiAxM3B4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAxZW07CiAgICBkaXNwbGF5OiBibG9jazsKICAgIG1hcmdpbjogMCBhdXRvOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgoubWpyLXZpZXdlci1iYWRnZXMgewogICAgZ2FwOiA0cHg7Cn0KCi5tanItdmlld2VyLXRpdGxlLWxpbmUgLm1qci12aWV3ZXItYmFkZ2VzIHsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZmxleC13cmFwOiBub3dyYXA7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItdmlld2VyLWhlYWRlci1tZXRhLS1sZWZ0IHsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgIHdpZHRoOiBmaXQtY29udGVudDsKICAgIG1heC13aWR0aDogMTAwJTsKfQoKLm1qci12aWV3ZXItaGVhZGVyLW1ldGEtLWxlZnQ6ZW1wdHkgewogICAgZGlzcGxheTogbm9uZTsKfQoKLm1qci12aWV3ZXItaGVhZGVyLW1ldGEtLXJpZ2h0IHsKICAgIGp1c3RpZnktc2VsZjogZW5kOwogICAgd2lkdGg6IGZpdC1jb250ZW50OwogICAgbWF4LXdpZHRoOiAxMDAlOwp9CgoubWpyLXZpZXdlci1tb2RlLWJ1dHRvbnMgewogICAgZmxleDogMCAwIGF1dG87CiAgICBwYWRkaW5nOiAzcHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpOwp9CgoubWpyLXZpZXdlci10b29scy1kZWNrIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgIGdhcDogOHB4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIG1pbi13aWR0aDogMDsKICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47Cn0KCi5tanItdmlld2VyLXRvb2xzLXBhbmVsIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1pbi13aWR0aDogYXV0bzsKICAgIG1pbi1oZWlnaHQ6IDA7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAyKSksCiAgICAgICAgcmdiYSgxMCwgMTIsIDE2LCAwLjI0KTsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpLAogICAgICAgIDAgNnB4IDE2cHggcmdiYSgwLCAwLCAwLCAwLjEyKTsKICAgIHBhZGRpbmc6IDVweCA2cHg7CiAgICBmbGV4OiAwIDAgYXV0bzsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWw6OmJlZm9yZSB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwIDAgYXV0byAwOwogICAgaGVpZ2h0OiAxcHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHRyYW5zcGFyZW50LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpLCB0cmFuc3BhcmVudCk7CiAgICBvcGFjaXR5OiAwLjc7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtaGVhZCB7CiAgICBkaXNwbGF5OiBub25lOwp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbC1oZWFkaW5nIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAxcHg7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItdmlld2VyLXRvb2xzLXBhbmVsLWV5ZWJyb3cgewogICAgZm9udC1zaXplOiA5cHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMTRlbTsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQ2KTsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtdGl0bGUgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAxZW07CiAgICBjb2xvcjogcmdiYSgyNDgsIDI1MCwgMjUyLCAwLjk2KTsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtYm9keSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGZsZXgtd3JhcDogbm93cmFwOwogICAgZ2FwOiA2cHg7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItdmlld2VyLXRvb2xzLXBhbmVsW2RhdGEtcGFuZWw9ImdyYWRlIl0gLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtYm9keSB7CiAgICBkaXNwbGF5OiBmbGV4Owp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbFtkYXRhLXBhbmVsPSJvdmVybGF5Il0gLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtYm9keSB7CiAgICBkaXNwbGF5OiBmbGV4Owp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbFtkYXRhLXBhbmVsPSJpbnNwZWN0Il0gLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtYm9keSwKLm1qci12aWV3ZXItdG9vbHMtcGFuZWxbZGF0YS1wYW5lbD0iYWN0aW9ucyJdIC5tanItdmlld2VyLXRvb2xzLXBhbmVsLWJvZHksCi5tanItdmlld2VyLXRvb2xzLXBhbmVsW2RhdGEtcGFuZWw9ImluZm8iXSAubWpyLXZpZXdlci10b29scy1wYW5lbC1ib2R5IHsKICAgIGRpc3BsYXk6IGZsZXg7Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwIHsKICAgIHdpZHRoOiBhdXRvOwogICAgbWluLWhlaWdodDogMzBweDsKICAgIHBhZGRpbmc6IDVweCA3cHg7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICBnYXA6IDZweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTk2LCAyMDIsIDIxMCwgMC4xMik7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDM1KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAyKSksCiAgICAgICAgcmdiYSgxMCwgMTIsIDE2LCAwLjE4KTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzKTsKICAgIG1pbi13aWR0aDogZml0LWNvbnRlbnQ7Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwLWxhYmVsIHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzUpOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMTVweDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGZvbnQtc2l6ZTogMTBweDsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbc3R5bGUqPSItLW1qci1ncm91cC1hY2NlbnQiXSAubWpyLXZpZXdlci10b29scy1ncm91cC1sYWJlbCB7CiAgICBjb2xvcjogcmdiYSh2YXIoLS1tanItZ3JvdXAtYWNjZW50KSwgMC45KTsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbc3R5bGUqPSItLW1qci1ncm91cC1hY2NlbnQiXSB7CiAgICBib3JkZXItY29sb3I6IHJnYmEodmFyKC0tbWpyLWdyb3VwLWFjY2VudCksIDAuMzUpOwp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJjaGFubmVsIl0gLm1qci12aWV3ZXItdG9vbHMtZ3JvdXAtbGFiZWwsCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9ImFuYWx5c2lzIl0gLm1qci12aWV3ZXItdG9vbHMtZ3JvdXAtbGFiZWwsCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9Im92ZXJsYXktZ3VpZGVzIl0gLm1qci12aWV3ZXItdG9vbHMtZ3JvdXAtbGFiZWwsCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9Im92ZXJsYXktaW5zcGVjdCJdIC5tanItdmlld2VyLXRvb2xzLWdyb3VwLWxhYmVsIHsKICAgIG1pbi13aWR0aDogNDJweDsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWxbZGF0YS1wYW5lbD0ib3ZlcmxheSJdIC5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9Im92ZXJsYXktZ3VpZGVzIl0gewogICAgZmxleDogMCAwIGF1dG87Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9Im92ZXJsYXktZ3VpZGVzIl0sCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9Im92ZXJsYXktaW5zcGVjdCJdIHsKICAgIGZsZXgtd3JhcDogd3JhcDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9ImNoYW5uZWwiXSwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iZXhwb3N1cmUiXSwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iZ2FtbWEiXSwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iYW5hbHlzaXMiXSwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iY29tcGFyZSJdLAoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJhdWRpby12aXoiXSB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47Cn0KCi5tanItdmlld2VyLXRvb2xzLWFjdGlvbnMsCi5tanItdmlld2VyLXRvb2xzLW1ldGEgewogICAgd2lkdGg6IGF1dG87CiAgICBtaW4taGVpZ2h0OiAzMHB4OwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIHBhZGRpbmc6IDVweCA3cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMyk7Cn0KCi5tanItdmlld2VyLXRvb2xzLWFjdGlvbnMgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICBnYXA6IDZweDsKICAgIGZsZXgtd3JhcDogd3JhcDsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci12aWV3ZXItdG9vbHMtbWV0YSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogNnB4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXZpZXdlci10b29scy1hY3Rpb24tLXByaW1hcnkgewogICAgbWFyZ2luLWxlZnQ6IDA7Cn0KCi5tanItdmlld2VyLXRvb2xzLWFjdGlvbiArIC5tanItdmlld2VyLXRvb2xzLWFjdGlvbiB7CiAgICBtYXJnaW4tbGVmdDogNHB4Owp9CgoubWpyLXZpZXdlci10b29scy1zZWxlY3QgewogICAgbWluLWhlaWdodDogMjRweDsKfQoKLm1qci12aWV3ZXItdG9vbHMtcmFuZ2UtaW5wdXQgewogICAgd2lkdGg6IDkycHggIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtcmFuZ2Ugc3BhbiB7CiAgICBmb250LXNpemU6IDExcHg7Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiAxNDgwcHgpIHsKICAgIC5tanItdmlld2VyLXRvb2xzLWRlY2sgewogICAgICAgIGdhcDogNnB4OwogICAgfQp9CgpAbWVkaWEgKG1heC13aWR0aDogMTIyMHB4KSB7CiAgICAubWpyLXZpZXdlci1oZWFkZXItdG9wIHsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZy1yaWdodDogODRweDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7CiAgICB9CgogICAgLm1qci12aWV3ZXItaGVhZGVyLWFyZWEtLWNlbnRlciwKICAgIC5tanItdmlld2VyLWhlYWRlci1hcmVhLS1yaWdodCB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICB9CgogICAgLm1qci12aWV3ZXItaGVhZGVyLWFyZWEtLWNlbnRlciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZmxleDogMSAxIDEwMCU7CiAgICB9CgogICAgLm1qci12aWV3ZXItaGVhZGVyLWFyZWEtLXJpZ2h0IHsKICAgICAgICBwb3NpdGlvbjogc3RhdGljOwogICAgICAgIHRyYW5zZm9ybTogbm9uZTsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZmxleDogMSAxIDEwMCU7CiAgICB9CgogICAgLm1qci12aWV3ZXItaGVhZGVyLW1ldGEtLXJpZ2h0IHsKICAgICAgICBqdXN0aWZ5LXNlbGY6IGNlbnRlcjsKICAgIH0KCiAgICAubWpyLXZpZXdlci10b29scy1kZWNrIHsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgb3ZlcmZsb3cteDogdmlzaWJsZTsKICAgIH0KCiAgICAubWpyLXZpZXdlci10b29scy1wYW5lbCwKICAgIC5tanItdmlld2VyLXRvb2xzLWFjdGlvbnMsCiAgICAubWpyLXZpZXdlci10b29scy1tZXRhLAogICAgLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtYm9keSB7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgfQoKICAgIC5tanItdmlld2VyLXRvb2xzLW1ldGEgewogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgIH0KfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iY29tcGFyZSJdW2RhdGEtYWN0aXZlPSIxIl0gewogICAgYmFja2dyb3VuZDogcmdiYSh2YXIoLS1tanItZ3JvdXAtYWNjZW50KSwgMC4xKTsKICAgIGJvcmRlci1sZWZ0LWNvbG9yOiByZ2JhKHZhcigtLW1qci1ncm91cC1hY2NlbnQpLCAwLjYpOwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IHJnYmEodmFyKC0tbWpyLWdyb3VwLWFjY2VudCksIDAuMjIpOwp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJjb21wYXJlIl1bZGF0YS1hY3RpdmU9IjEiXSAubWpyLXZpZXdlci10b29scy1zZWxlY3QgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKHZhcigtLW1qci1ncm91cC1hY2NlbnQpLCAwLjYpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHJnYmEodmFyKC0tbWpyLWdyb3VwLWFjY2VudCksIDAuMTgpOwp9CgoubWpyLXZpZXdlci10b29scy1zZWxlY3Q6Zm9jdXMgewogICAgb3V0bGluZTogbm9uZTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCByZ2JhKDY0LCAxNjAsIDI1NSwgMC4yMik7Cn0KCi8qIE5hdGl2ZSBkcm9wZG93bnM6IGhpbnQgZGFyayBVSSBhbmQgc3R5bGUgb3B0aW9ucyB3aGVuIHRoZSBicm93c2VyIGFsbG93cyBpdC4gKi8KLm1qci12aWV3ZXItaGVhZGVyIHsKICAgIGNvbG9yLXNjaGVtZTogZGFyazsKfQoKLm1qci12aWV3ZXItdG9vbHMtc2VsZWN0IHsKICAgIG1pbi1oZWlnaHQ6IDI0cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNDYpICFpbXBvcnRhbnQ7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkyKSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmFkaXVzOiA4cHggIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtc2VsZWN0IG9wdGlvbiB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1tZW51LWJnLCAjMmEyYTJhKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKSk7Cn0KCi5tanItdmlld2VyLXRvb2xzLXJhbmdlLWlucHV0OmZvY3VzIHsKICAgIG91dGxpbmU6IG5vbmU7Cn0KCi5tanItdmlld2VyLXRvb2wtYnRuLS1yZXNldCB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yMikgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbC1idG4gewogICAgbWluLWhlaWdodDogMjRweCAhaW1wb3J0YW50OwogICAgYm9yZGVyLXJhZGl1czogOHB4ICFpbXBvcnRhbnQ7CiAgICBib3JkZXItd2lkdGg6IDFweCAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDE4MGRlZywKICAgICAgICByZ2JhKDIxMCwgMjE0LCAyMjAsIDAuMDc1KSwKICAgICAgICByZ2JhKDIxMCwgMjE0LCAyMjAsIDAuMDI1KQogICAgKSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMTYpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7CiAgICBmb250LXNpemU6IDExcHggIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDAgOHB4ICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLXRvb2wtYnRuOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMjAsIDIyNCwgMjMwLCAwLjI0KSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDE4MGRlZywKICAgICAgICByZ2JhKDIyMCwgMjI0LCAyMzAsIDAuMSksCiAgICAgICAgcmdiYSgyMjAsIDIyNCwgMjMwLCAwLjAzNSkKICAgICkgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iYW5hbHlzaXMiXSAubWpyLXZpZXdlci10b29sLWJ0bltkYXRhLWFjdGl2ZT0iMSJdIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgcmdiYSgyNTUsIDE2NiwgOTIsIDAuMjIpLAogICAgICAgIHJnYmEoMjU1LCAxMTYsIDY0LCAwLjA4KQogICAgKSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMTYwLCA5MiwgMC4zNCkgIWltcG9ydGFudDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjM2LCAyMjQsIDAuOTYpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9ImFuYWx5c2lzIl0gLm1qci12aWV3ZXItdG9vbC1idG5bZGF0YS1hY3RpdmU9IjEiXTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIHJnYmEoMjU1LCAxODAsIDEwOCwgMC4yOCksCiAgICAgICAgcmdiYSgyNTUsIDEyOCwgNzIsIDAuMTQpCiAgICApICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAxODQsIDExNiwgMC40NikgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1ndWlkZXMiXSAubWpyLXZpZXdlci10b29sLWJ0bltkYXRhLWFjdGl2ZT0iMSJdIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgcmdiYSg5MiwgMjE5LCAxODYsIDAuMjIpLAogICAgICAgIHJnYmEoNDQsIDE3MCwgMTQ0LCAwLjA4KQogICAgKSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDkyLCAyMTksIDE4NiwgMC4zNCkgIWltcG9ydGFudDsKICAgIGNvbG9yOiByZ2JhKDIyNCwgMjU1LCAyNDgsIDAuOTYpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9Im92ZXJsYXktZ3VpZGVzIl0gLm1qci12aWV3ZXItdG9vbC1idG5bZGF0YS1hY3RpdmU9IjEiXTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIHJnYmEoMTAyLCAyMzAsIDE5NiwgMC4yOCksCiAgICAgICAgcmdiYSg1MiwgMTgyLCAxNTYsIDAuMTQpCiAgICApICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMTEwLCAyMzYsIDIwMiwgMC40NikgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1pbnNwZWN0Il0gLm1qci12aWV3ZXItdG9vbC1idG5bZGF0YS1hY3RpdmU9IjEiXSB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIHJnYmEoMTI0LCAxNjYsIDI1NSwgMC4yMiksCiAgICAgICAgcmdiYSgxMDksIDg4LCAyMjIsIDAuMDgpCiAgICApICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMTMyLCAxNzAsIDI1NSwgMC4zNikgIWltcG9ydGFudDsKICAgIGNvbG9yOiByZ2JhKDIzNiwgMjQyLCAyNTUsIDAuOTcpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9Im92ZXJsYXktaW5zcGVjdCJdIC5tanItdmlld2VyLXRvb2wtYnRuW2RhdGEtYWN0aXZlPSIxIl06aG92ZXIgewogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDE4MGRlZywKICAgICAgICByZ2JhKDEzOCwgMTgwLCAyNTUsIDAuMyksCiAgICAgICAgcmdiYSgxMjQsIDEwMCwgMjMyLCAwLjE0KQogICAgKSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE0OCwgMTg4LCAyNTUsIDAuNDgpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLXRvb2wtYnRuW2RhdGEtYWN0aXZlPSIxIl0gewogICAgZmlsdGVyOiBzYXR1cmF0ZSgxLjEyKSBicmlnaHRuZXNzKDEuMDQpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSwKICAgICAgICAwIDAgMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KSwKICAgICAgICAwIDhweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xNikgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItaGVscCB7CiAgICBib3JkZXItcmFkaXVzOiAxNHB4ICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDEzLCAxNywgMjIsIDAuOTYpLCByZ2JhKDgsIDExLCAxNiwgMC45OCkpICFpbXBvcnRhbnQ7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiAwIDE4cHggMzRweCByZ2JhKDAsIDAsIDAsIDAuMzQpICFpbXBvcnRhbnQ7Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiAxMjIwcHgpIHsKICAgIC5tanItdmlld2VyLXRvb2xzIHsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgIH0KCiAgICAubWpyLXZpZXdlci10b29scy1hY3Rpb25zIHsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICB9CgogICAgLm1qci12aWV3ZXItaGVhZGVyLXRvcCB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICAgICAganVzdGlmeS1pdGVtczogY2VudGVyOwogICAgfQoKICAgIC5tanItdmlld2VyLWhlYWRlci1hcmVhLS1sZWZ0LAogICAgLm1qci12aWV3ZXItaGVhZGVyLWFyZWEtLWNlbnRlciwKICAgIC5tanItdmlld2VyLWhlYWRlci1hcmVhLS1yaWdodCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICB9CgogICAgLm1qci12aWV3ZXItaGVhZGVyLW1ldGEtLWxlZnQsCiAgICAubWpyLXZpZXdlci1oZWFkZXItbWV0YS0tcmlnaHQgewogICAgICAgIGp1c3RpZnktc2VsZjogY2VudGVyOwogICAgfQoKICAgIC5tanItdmlld2VyLXRvb2xzLWJvZHkgewogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjIwcHgsIDFmcikpOwogICAgfQp9CgovKiA9PT09PT09PT09IEN1c3RvbSBWaWRlbyBDb250cm9scyAobm8gbmF0aXZlIGJhcikgPT09PT09PT09PSAqLwoubWpyLXZpZGVvLWhvc3QgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDEycHg7CiAgICByaWdodDogMTJweDsKICAgIGJvdHRvbTogMTJweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nOiA4cHggMTBweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC42KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCk7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpOwogICAgb3BhY2l0eTogMDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBlYXNlOwogICAgei1pbmRleDogNTsKfQoKLm1qci12aWRlby1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItdmlkZW8tcm93LS10b3AgewogICAgZ2FwOiAxMnB4OwogICAgZGlzcGxheTogZ3JpZDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gYXV0byAxZnIgYXV0byBhdXRvOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1yb3ctLXRvcCB7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gYXV0byAxZnIgYXV0byBhdXRvOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS1wcmV2aWV3IC5tanItdmlkZW8tcm93LS10b3AgewogICAgZGlzcGxheTogZmxleDsKfQoKLm1qci12aWRlby1yb3ctLWJvdHRvbSB7CiAgICBnYXA6IDhweDsKfQoKLm1qci12aWRlby1ncm91cCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDZweDsKICAgIG1pbi13aWR0aDogMDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODUpOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItdmlkZW8tbnVtIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSk7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBwYWRkaW5nOiA1cHggOHB4OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBvdXRsaW5lOiBub25lOwp9CgoubWpyLXZpZGVvLW51bTpmb2N1cyB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zOCk7Cn0KCi5tanItdmlkZW8tbnVtLS1mcHMuaXMtb3ZlcnJpZGRlbiB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjQ1LCAxNTgsIDExLCAwLjgyKTsKICAgIGNvbG9yOiAjZmJiZjI0OwogICAgYmFja2dyb3VuZDogcmdiYSgyNDUsIDE1OCwgMTEsIDAuMTQpOwp9CgoubWpyLXZpZGVvLW51bS0tZnBzLmlzLW92ZXJyaWRkZW46Zm9jdXMgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1MSwgMTkxLCAzNiwgMC45Nik7Cn0KCi5tanItdmlkZW8tbnVtLS1zcGVlZCB7CiAgICBjb2xvci1zY2hlbWU6IGRhcms7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNjIpOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSk7Cn0KCi5tanItdmlkZW8tbnVtLS1zcGVlZCBvcHRpb24gewogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSk7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7Cn0KCi5tanItdmlkZW8tZnJhbWUgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKICAgIG1pbi13aWR0aDogNTJweDsKICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItdmlkZW8tZnJhbWUuaXMtc3RlcCB7CiAgICBjb2xvcjogI2ZmZDI0ZDsKfQoKLm1qci12aWRlby1ib3R0b20gewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIG1pbi13aWR0aDogMDsKICAgIGZsZXg6IDE7Cn0KCi5tanItdmlkZW8tYm90dG9tLS1sZWZ0IHsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKfQoKLm1qci12aWRlby1ib3R0b20tLXJpZ2h0IHsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7Cn0KCi5tanItdmlkZW8tdHJhbnNwb3J0IHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICBmbGV4OiAwIDAgYXV0bzsKfQoKLyogU2hvdyBjb250cm9scyBvbiBob3Zlci9mb2N1cyAodmlld2VyKS4gKi8KLm1qci12aWRlby1ob3N0OmhvdmVyIC5tanItdmlkZW8tY29udHJvbHMsCi5tanItdmlkZW8tY29udHJvbHM6Zm9jdXMtd2l0aGluIHsKICAgIG9wYWNpdHk6IDE7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKfQoKLyogUHJldmlldzoga2VlcCBjb250cm9scyB2aXNpYmxlIGJlY2F1c2UgdGhlIGFyZWEgaXMgc21hbGwuICovCi5tanItdmlkZW8tY29udHJvbHMtLXByZXZpZXcgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogYXV0bzsKICAgIHJpZ2h0OiAxMHB4OwogICAgdG9wOiBhdXRvOwogICAgYm90dG9tOiAxMHB4OwogICAgb3BhY2l0eTogMTsKICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXI6IG5vbmU7CiAgICBwYWRkaW5nOiAwOwogICAgZGlzcGxheTogYmxvY2s7CiAgICB3aWR0aDogYXV0bzsKICAgIGhlaWdodDogYXV0bzsKICAgIGJhY2tkcm9wLWZpbHRlcjogbm9uZTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBub25lOwp9CgoubWpyLXZpZGVvLXByZXZpZXctYnRuIHsKICAgIHdpZHRoOiAzOHB4OwogICAgaGVpZ2h0OiAzOHB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjIpOwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjQyKTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTIpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Cn0KCi5tanItdmlkZW8tcHJldmlldy1idG46aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjUpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjgpOwp9CgoubWpyLXZpZGVvLXByZXZpZXctYnRuIC5waSB7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLm1qci12aWRlby1idG4gewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xOCk7CiAgICBjb2xvcjogI2ZmZjsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgbGluZS1oZWlnaHQ6IDE7Cn0KCi5tanItdmlkZW8tYnRuOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCk7Cn0KCi5tanItdmlkZW8tYnRuLmlzLW9uIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoNjQsIDE2MCwgMjU1LCAwLjI1KTsKICAgIGJvcmRlci1jb2xvcjogcmdiYSg2NCwgMTYwLCAyNTUsIDAuNTUpOwp9CgoubWpyLXZpZGVvLWJ0bi0taW4gewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDcwLCAyNTUsIDEyMCwgMC41NSk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDcwLCAyNTUsIDEyMCwgMC4xMik7Cn0KCi5tanItdmlkZW8tYnRuLS1pbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDcwLCAyNTUsIDEyMCwgMC4xOCk7Cn0KCi5tanItdmlkZW8tYnRuLS1vdXQgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgNzAsIDcwLCAwLjU1KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCA3MCwgNzAsIDAuMSk7Cn0KCi5tanItdmlkZW8tYnRuLS1vdXQ6aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDcwLCA3MCwgMC4xNik7Cn0KCi5tanItdmlkZW8tdGltZSB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgbWluLXdpZHRoOiA5MnB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItdmlkZW8tdGltZWdyb3VwIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICBnYXA6IDEwcHg7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItdmlkZW8tcmFuZ2UtY291bnQgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6IHJnYmEoNjQsIDE5MCwgMjU1LCAwLjkyKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoNjQsIDE5MCwgMjU1LCAwLjEpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSg2NCwgMTkwLCAyNTUsIDAuMjUpOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBwYWRkaW5nOiAxcHggOHB4OwogICAgbGluZS1oZWlnaHQ6IDE2cHg7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItdmlkZW8tcmFuZ2UgewogICAgYWNjZW50LWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7Cn0KCi5tanItdmlkZW8tcmFuZ2UtLXNlZWsgewogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogODBweDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDE7CiAgICAvKiBXZSBkcmF3IG91ciBvd24gcGxheWhlYWQvbWFya2VyczsgaGlkZSB0aGUgbmF0aXZlIHRodW1iICJkb3QiLiAqLwogICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgYXBwZWFyYW5jZTogbm9uZTsKfQoKLm1qci12aWRlby1yYW5nZS0tc2Vlazo6LXdlYmtpdC1zbGlkZXItdGh1bWIgewogICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIHdpZHRoOiAwOwogICAgaGVpZ2h0OiAwOwogICAgYm9yZGVyOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3gtc2hhZG93OiBub25lOwp9CgoubWpyLXZpZGVvLXJhbmdlLS1zZWVrOjotbW96LXJhbmdlLXRodW1iIHsKICAgIHdpZHRoOiAwOwogICAgaGVpZ2h0OiAwOwogICAgYm9yZGVyOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3gtc2hhZG93OiBub25lOwp9CgoubWpyLXZpZGVvLXNlZWstd3JhcCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtaW4td2lkdGg6IDgwcHg7CiAgICBmbGV4OiAxOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7Cn0KCi5tanItdmlkZW8tc2Vlay16b25lcyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICB0b3A6IDUwJTsKICAgIGhlaWdodDogMTBweDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgei1pbmRleDogMjsKfQoKLm1qci12aWRlby1zZWVrLXpvbmUgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAwOwogICAgYm90dG9tOiAwOwp9CgovKiAwLi5JbjogdHJpbW1lZC1vdXQgcmFuZ2UuICovCi5tanItdmlkZW8tc2Vlay16b25lLS1sZWZ0VHJpbSB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgNzAsIDcwLCAwLjE4KTsKfQoKLyogSW4uLk91dDogc2VsZWN0ZWQgcGxheWJhY2sgcmFuZ2UgaGlnaGxpZ2h0LiAqLwoubWpyLXZpZGVvLXNlZWstem9uZS0tc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogcmdiYSg2NCwgMTkwLCAyNTUsIDAuNTUpOwp9CgoubWpyLXZpZGVvLXNlZWstem9uZXMuaXMtZnVsbHJhbmdlIC5tanItdmlkZW8tc2Vlay16b25lLS1zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOwp9CgovKiBPdXQuLkVuZDogc2hvdyBvdXQtb2YtcmFuZ2UgZnJhbWVzIGFzIGEgZGlmZmVyZW50IGNvbG9yLiAqLwoubWpyLXZpZGVvLXNlZWstem9uZS0tcmlnaHRUcmltIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCA3MCwgNzAsIDAuMik7Cn0KCi5tanItdmlkZW8tc2Vlay1vdmVybGF5IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIHRvcDogNTAlOwogICAgaGVpZ2h0OiAwOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAzOwp9CgoubWpyLXZpZGVvLXNlZWstaGFuZGxlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNTAlOwogICAgd2lkdGg6IDE2cHg7CiAgICBoZWlnaHQ6IDMycHg7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICAgIGN1cnNvcjogZXctcmVzaXplOwogICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICB0b3VjaC1hY3Rpb246IG5vbmU7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIHotaW5kZXg6IDQ7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKICAgIGJveC1zaGFkb3c6IDAgNHB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjM1KTsKfQoKLm1qci12aWRlby1zZWVrLWhhbmRsZTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNCk7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLWluOjphZnRlciwKLm1qci12aWRlby1zZWVrLWhhbmRsZS0tb3V0OjphZnRlciB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDUwJTsKICAgIHRvcDogNTAlOwogICAgd2lkdGg6IDJweDsKICAgIGhlaWdodDogMThweDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDcwLCA3MCwgMC45NSk7CiAgICBib3JkZXItcmFkaXVzOiAycHg7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLWluOjphZnRlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDcwLCAyNTUsIDEyMCwgMC45NSk7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLWluOjpiZWZvcmUsCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLW91dDo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogNTAlOwogICAgd2lkdGg6IDA7CiAgICBoZWlnaHQ6IDA7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLWluOjpiZWZvcmUgewogICAgdG9wOiA0cHg7CiAgICBib3JkZXItbGVmdDogNXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYm9yZGVyLXJpZ2h0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItYm90dG9tOiA2cHggc29saWQgcmdiYSg3MCwgMjU1LCAxMjAsIDAuOTUpOwp9CgoubWpyLXZpZGVvLXNlZWstaGFuZGxlLS1vdXQ6OmJlZm9yZSB7CiAgICBib3R0b206IDRweDsKICAgIGJvcmRlci1sZWZ0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItcmlnaHQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJvcmRlci10b3A6IDZweCBzb2xpZCByZ2JhKDI1NSwgNzAsIDcwLCAwLjk1KTsKfQoKLm1qci12aWRlby1zZWVrLXRpY2tzIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIHRvcDogLTE2cHg7CiAgICBoZWlnaHQ6IDEycHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgb3BhY2l0eTogMC45Owp9CgoubWpyLXZpZGVvLXNlZWstbGFiZWxzIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIHRvcDogLTM0cHg7CiAgICBoZWlnaHQ6IDE0cHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGxpbmUtaGVpZ2h0OiAxNHB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43Mik7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjU1KTsKfQoKLm1qci12aWRlby1zZWVrLWxhYmVsIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItdmlkZW8tc2Vlay1wbGF5aGVhZC1sYWJlbCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDEycHg7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICBwYWRkaW5nOiAxcHggNnB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNTUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTIpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgbGluZS1oZWlnaHQ6IDE0cHg7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5tanItdmlkZW8tc2Vlay1tYXJrIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogLTEwcHg7CiAgICB3aWR0aDogMTRweDsKICAgIGhlaWdodDogMjBweDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgY3Vyc29yOiBldy1yZXNpemU7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIHRvdWNoLWFjdGlvbjogbm9uZTsKICAgIHotaW5kZXg6IDQ7CiAgICAtLW1qci1tYXJrLWNvbG9yOiByZ2JhKDI1NSwgNzAsIDcwLCAwLjk1KTsKfQoKLm1qci12aWRlby1zZWVrLW1hcmstLWluIHsKICAgIC0tbWpyLW1hcmstY29sb3I6IHJnYmEoNzAsIDI1NSwgMTIwLCAwLjk1KTsKfQoKLm1qci12aWRlby1zZWVrLW1hcms6OmJlZm9yZSB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDUwJTsKICAgIHRvcDogMDsKICAgIGJvdHRvbTogMDsKICAgIHdpZHRoOiAycHg7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItbWFyay1jb2xvcik7CiAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgwLCAwLCAwLCAwLjM1KTsKfQoKLm1qci12aWRlby1zZWVrLW1hcms6OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAtNXB4OwogICAgbGVmdDogNTAlOwogICAgd2lkdGg6IDA7CiAgICBoZWlnaHQ6IDA7CiAgICBib3JkZXItbGVmdDogNXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYm9yZGVyLXJpZ2h0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItYm90dG9tOiA2cHggc29saWQgdmFyKC0tbWpyLW1hcmstY29sb3IpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwp9CgoubWpyLXZpZGVvLXNlZWstbWFyay0taW46OmFmdGVyIHsKICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHZhcigtLW1qci1tYXJrLWNvbG9yKTsKfQoKLm1qci12aWRlby1zZWVrLW1hcmstLW91dDo6YWZ0ZXIgewogICAgdG9wOiBhdXRvOwogICAgYm90dG9tOiAtNXB4OwogICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKICAgIGJvcmRlci10b3A6IDZweCBzb2xpZCB2YXIoLS1tanItbWFyay1jb2xvcik7Cn0KCi5tanItdmlkZW8tc2Vlay1wbGF5aGVhZCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IC0xMnB4OwogICAgd2lkdGg6IDJweDsKICAgIGhlaWdodDogMjRweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyMDAsIDcwLCAwLjk1KTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCByZ2JhKDAsIDAsIDAsIDAuMzUpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xcHgpOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgewogICAgcG9zaXRpb246IHN0YXRpYzsKICAgIGxlZnQ6IGF1dG87CiAgICByaWdodDogYXV0bzsKICAgIGJvdHRvbTogYXV0bzsKICAgIG9wYWNpdHk6IDE7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIHdpZHRoOiAxMDAlOwogICAgbWF4LXdpZHRoOiBub25lOwogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMTRweDsKICAgIGJvcmRlci1yYWRpdXM6IDE4cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMTIpOwogICAgYmFja2dyb3VuZDoKICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IHRvcCBsZWZ0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDMpLCB0cmFuc3BhcmVudCAzNCUpLAogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMTk4LCAyMDMsIDIxMCwgMC4wMjUpLCByZ2JhKDE5OCwgMjAzLCAyMTAsIDAuMDA4KSksCiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE2NWRlZywgcmdiYSgxOCwgMjIsIDI4LCAwLjgyKSwgcmdiYSgxMiwgMTUsIDIxLCAwLjkpKTsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpLAogICAgICAgIDAgMTBweCAzMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCk7CiAgICBiYWNrZHJvcC1maWx0ZXI6IG5vbmU7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogbm9uZTsKICAgIGdhcDogMTJweDsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYnRuIHsKICAgIG1pbi1oZWlnaHQ6IDM4cHg7CiAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIxMCwgMjE0LCAyMjAsIDAuMDcpLCByZ2JhKDIxMCwgMjE0LCAyMjAsIDAuMDIpKTsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgxOTQsIDIwMSwgMjA4LCAwLjE4KTsKICAgIGJvcmRlci13aWR0aDogMXB4OwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwogICAgdHJhbnNpdGlvbjoKICAgICAgICB0cmFuc2Zvcm0gMC4xMnMgZWFzZSwKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yIDAuMTJzIGVhc2UsCiAgICAgICAgYm9yZGVyLWNvbG9yIDAuMTJzIGVhc2UsCiAgICAgICAgYm94LXNoYWRvdyAwLjEycyBlYXNlOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1idG46aG92ZXIgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIyMCwgMjI0LCAyMzAsIDAuMjYpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCksCiAgICAgICAgMCA4cHggMThweCByZ2JhKDAsIDAsIDAsIDAuMTQpOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1idG4uaXMtb24gewogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgxMDAsIDE3MCwgMjU1LCAwLjIpLCByZ2JhKDEwMCwgMTcwLCAyNTUsIDAuMDgpKTsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgxMjAsIDE4NiwgMjU1LCAwLjQyKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCByZ2JhKDEyMCwgMTg2LCAyNTUsIDAuMTIpIGluc2V0Owp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1idG4gLnBpIHsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1iYXItaGVhZCwKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLWFjdGlvbnMgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDFmcikgYXV0byBtaW5tYXgoMCwgMWZyKTsKICAgIGdhcDogMTJweDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1zdGF0dXMsCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1zaWRlIHsKICAgIG1pbi13aWR0aDogMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgZmxleC13cmFwOiB3cmFwOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1iYXItY2VudGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1oZWFkIHsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDFmcik7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1zaWRlLS1yaWdodCB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1iYXItdGltZWxpbmUgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byBtaW5tYXgoMCwgMWZyKSBhdXRvOwogICAgZ2FwOiAxMnB4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyLm1qci12aWRlby1jb250cm9scy0tYXVkaW8gLm1qci12aWRlby1iYXItdGltZWxpbmUgewogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKSBhdXRvIGF1dG87Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhci5tanItdmlkZW8tY29udHJvbHMtLWF1ZGlvIC5tanItdmlkZW8tc2Vlay13cmFwIHsKICAgIGdyaWQtY29sdW1uOiAxIC8gLTE7CiAgICBncmlkLXJvdzogMTsKICAgIHdpZHRoOiAxMDAlOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIubWpyLXZpZGVvLWNvbnRyb2xzLS1hdWRpbyAubWpyLXZpZGVvLWdyb3VwLS1pbiwKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyLm1qci12aWRlby1jb250cm9scy0tYXVkaW8gLm1qci12aWRlby1ncm91cC0tb3V0IHsKICAgIGdyaWQtcm93OiAyOwogICAgd2lkdGg6IG1heC1jb250ZW50OwogICAgbWF4LXdpZHRoOiAxMDAlOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1tZWRpYS1iYWRnZSB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIG1pbi1oZWlnaHQ6IDI4cHg7CiAgICBwYWRkaW5nOiAwIDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzgsIDIyNCwgMTk2LCAwLjEyKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNzgsIDIyNCwgMTk2LCAwLjIyKTsKICAgIGNvbG9yOiByZ2JhKDIyMCwgMjQ3LCAyNDEsIDAuOTYpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby10aW1lZ3JvdXAgewogICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nOiA1cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0NSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby10aW1lLAoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1mcmFtZSB7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgY29sb3I6IHJnYmEoMjI4LCAyMzAsIDIzNCwgMC45Mik7CiAgICB0ZXh0LXNoYWRvdzogbm9uZTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tZnJhbWUgewogICAgbWluLXdpZHRoOiA5NHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgcGFkZGluZzogNXB4IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNDUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tdGltZSB7CiAgICBtaW4td2lkdGg6IGF1dG87CiAgICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1yYW5nZS0tc2VlayB7CiAgICBoZWlnaHQ6IDIycHg7CiAgICBhY2NlbnQtY29sb3I6IHJnYmEoMjE0LCAyMTgsIDIyNCwgMC45Mik7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXJhbmdlLWNvdW50IHsKICAgIGNvbG9yOiByZ2JhKDIyMiwgMjI1LCAyMzAsIDAuOTUpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE5NCwgMjAxLCAyMDksIDAuMjYpOwogICAgYm9yZGVyLXdpZHRoOiAwLjhweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTk0LCAyMDEsIDIwOSwgMC4wOCk7CiAgICB0ZXh0LXNoYWRvdzogbm9uZTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tZ3JvdXAgewogICAgbWluLWhlaWdodDogMzZweDsKICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzNSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1ncm91cC0tYWRqdXN0LWxlZnQsCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWdyb3VwLS1hZGp1c3QtcmlnaHQsCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWdyb3VwLS1zcGVlZCB7CiAgICBnYXA6IDhweDsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tbnVtIHsKICAgIG1pbi1oZWlnaHQ6IDM0cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYmFja2dyb3VuZDogcmdiYSg5LCAxMiwgMTYsIDAuNTUpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXRyYW5zcG9ydCB7CiAgICBnYXA6IDEwcHg7CiAgICBwYWRkaW5nOiA2cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNDUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYnRuLS1wbGF5IHsKICAgIG1pbi13aWR0aDogODhweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXNlZWstd3JhcCB7CiAgICBtaW4taGVpZ2h0OiA0NHB4Owp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1zZWVrLXpvbmVzIHsKICAgIGhlaWdodDogMTJweDsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tc2Vlay1oYW5kbGUgewogICAgd2lkdGg6IDE4cHg7CiAgICBoZWlnaHQ6IDM0cHg7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXZvbHVtZS13cmFwIHsKICAgIHBhZGRpbmc6IDAgNHB4Owp9CgoubWpyLXZpZGVvLXJhbmdlLS12b2x1bWUgewogICAgd2lkdGg6IDkwcHg7Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiA5ODBweCkgewogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLWhlYWQsCiAgICAubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1iYXItYWN0aW9ucywKICAgIC5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci10aW1lbGluZSB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICB9CgogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLWNlbnRlciwKICAgIC5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1zaWRlLS1yaWdodCB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICB9CgogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLXRpbWVsaW5lIHsKICAgICAgICBnYXA6IDEwcHg7CiAgICB9CgogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tdHJhbnNwb3J0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTZweDsKICAgIH0KfQoKLyogPT09PT09PT09PSBDb250ZXh0IE1lbnUgQ29tcG9uZW50ID09PT09PT09PT0gKi8KLm1qci1jb250ZXh0LW1lbnUgewogICAgcG9zaXRpb246IGZpeGVkOwogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktbWVudS1iZyk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpOwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICBtaW4td2lkdGg6IDIwMHB4OwogICAgLyogQWJvdmUgdmlld2VyIG92ZXJsYXkgKDEwMDAxKSBhbmQgTUZWIGRpYWxvZyAoMTAwMDApICovCiAgICB6LWluZGV4OiAxMDAwMjsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBwYWRkaW5nOiA0cHggMDsKICAgIGFuaW1hdGlvbjogbWpyLWNvbnRleHQtbWVudS1pbiAwLjE1cyBlYXNlLW91dDsKfQoKLm1qci1jb250ZXh0LW1lbnUsCi5tanItY29udGV4dC1tZW51ICogewogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKQGtleWZyYW1lcyBtanItY29udGV4dC1tZW51LWluIHsKICAgIGZyb20gewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01cHgpOwogICAgfQogICAgdG8gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgfQp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtIHsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICBwYWRkaW5nOiA4cHggMTRweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgd2lkdGg6IDEwMCU7CiAgICBib3JkZXI6IDA7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3gtc2hhZG93OiBub25lOwogICAgbWFyZ2luOiAwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgIGxldHRlci1zcGFjaW5nOiBub3JtYWw7CiAgICBsaW5lLWhlaWdodDogMS4zNTsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXM7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbTo6LW1vei1mb2N1cy1pbm5lciB7CiAgICBib3JkZXI6IDA7CiAgICBwYWRkaW5nOiAwOwp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtOmhvdmVyLAoubWpyLWNvbnRleHQtbWVudS1pdGVtOmZvY3VzLXZpc2libGUgewogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktaW5wdXQtYmcpOwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLWdyYXBoLW1hcCB7CiAgICBjb2xvcjogI2Y1YzU0MjsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLXJlbmFtZSB7CiAgICBjb2xvcjogIzVkYTlmZjsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLWRlbGV0ZSB7CiAgICBjb2xvcjogI2ZmNWY1ZjsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLWZsb2F0aW5nLXZpZXdlciB7CiAgICBjb2xvcjogIzVmZDM4ZDsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLWdyYXBoLW1hcDpob3ZlciwKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLWdyYXBoLW1hcDpmb2N1cy12aXNpYmxlIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjQ1LCAxOTcsIDY2LCAwLjE0KTsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLXJlbmFtZTpob3ZlciwKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLXJlbmFtZTpmb2N1cy12aXNpYmxlIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoOTMsIDE2OSwgMjU1LCAwLjE0KTsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLWRlbGV0ZTpob3ZlciwKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLWRlbGV0ZTpmb2N1cy12aXNpYmxlIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCA5NSwgOTUsIDAuMTQpOwp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtLmlzLXRvbmUtZmxvYXRpbmctdmlld2VyOmhvdmVyLAoubWpyLWNvbnRleHQtbWVudS1pdGVtLmlzLXRvbmUtZmxvYXRpbmctdmlld2VyOmZvY3VzLXZpc2libGUgewogICAgYmFja2dyb3VuZDogcmdiYSg5NSwgMjExLCAxNDEsIDAuMTQpOwp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtLmlzLWRpc2FibGVkIHsKICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIG9wYWNpdHk6IDAuNDU7Cn0KCi5tanItY29udGV4dC1tZW51LWl0ZW0uaXMtZGlzYWJsZWQ6aG92ZXIsCi5tanItY29udGV4dC1tZW51LWl0ZW0uaXMtZGlzYWJsZWQ6Zm9jdXMtdmlzaWJsZSB7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKfQoKLm1qci1jb250ZXh0LW1lbnUtc2VwYXJhdG9yIHsKICAgIGhlaWdodDogMXB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tYm9yZGVyLWNvbG9yKTsKICAgIG1hcmdpbjogNHB4IDA7Cn0KCi5tanItY29udGV4dC1tZW51LWl0ZW0tbGVmdCwKLm1qci1jb250ZXh0LW1lbnUtaXRlbS1yaWdodCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7Cn0KCi5tanItY29udGV4dC1tZW51LWl0ZW0tbGVmdCB7CiAgICBmbGV4OiAxIDEgYXV0bzsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS1yaWdodCB7CiAgICBmbGV4OiAwIDAgYXV0bzsKICAgIG1hcmdpbi1sZWZ0OiAxNnB4Owp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtLWxlZnQgaSB7CiAgICB3aWR0aDogMTZweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG9wYWNpdHk6IDAuODI7Cn0KCi5tanItY29udGV4dC1tZW51LWhpbnQgewogICAgb3BhY2l0eTogMC41ODsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItY29udGV4dC1tZW51LXN1Ym1lbnUtYXJyb3cgewogICAgb3BhY2l0eTogMC43MjsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgoubWpyLWFkZC10by1jb2xsZWN0aW9uLW1lbnUgewogICAgbWluLXdpZHRoOiAyNjBweDsKICAgIG1heC13aWR0aDogbWluKDM2MHB4LCBjYWxjKDEwMHZ3IC0gMTZweCkpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEycHgpOwp9CgoubWpyLWNvbnRleHQtbWVudS10aXRsZSB7CiAgICBwYWRkaW5nOiA4cHggMTRweCAxMHB4OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGNvbG9yOiB2YXIoLS1mZy1jb2xvcik7CiAgICBvcGFjaXR5OiAwLjkyOwp9CgoubWpyLWNvbnRleHQtbWVudS1ub3RlIHsKICAgIHBhZGRpbmc6IDEwcHggMTRweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZykgNzIlLCB2YXIoLS1tanItbXV0ZWQpKTsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ1Owp9CgoubWpyLWdyaWQtcG9wb3ZlciwKLm1qci12aWV3ZXItcG9wb3ZlciB7CiAgICBtaW4td2lkdGg6IDI1MHB4OwogICAgbWF4LXdpZHRoOiBtaW4oMzYwcHgsIGNhbGMoMTAwdncgLSAxNnB4KSk7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItc20pOwogICAgYm94LXNoYWRvdzogMCAxMnB4IDI4cHggcmdiYSgwLCAwLCAwLCAwLjM1KTsKfQoKQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHsKICAgIC5tanItdmlld2VyLW92ZXJsYXkgKiwKICAgIC5tanItdmlkZW8tY29udHJvbHMsCiAgICAubWpyLWNvbnRleHQtbWVudSB7CiAgICAgICAgYW5pbWF0aW9uOiBub25lICFpbXBvcnRhbnQ7CiAgICAgICAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50OwogICAgICAgIHNjcm9sbC1iZWhhdmlvcjogYXV0byAhaW1wb3J0YW50OwogICAgfQp9CgovKiBIaWRlIGhlYWRlciAodG9vbGJhcikgd2hlbiB2aWV3ZXIgb3ZlcmxheSBpcyBpbiBmdWxsc2NyZWVuICovCi5tanItdmlld2VyLW92ZXJsYXk6ZnVsbHNjcmVlbiAubWpyLXZpZXdlci1oZWFkZXIgewogICAgZGlzcGxheTogbm9uZTsKfQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgTWFqb29yIEZsb2F0aW5nIFZpZXdlciAoTUZWKSAtIHBvcnRhbGVkIHRvIGRvY3VtZW50LmJvZHkKICAgUmVkZWNsYXJlcyBDU1MgdmFyaWFibGVzIHNvIHRoZSBwYW5lbCB3b3JrcyBvdXRzaWRlIC5tanItYXNzZXRzLW1hbmFnZXIKICAgKHNhbWUgcGF0dGVybiBhcyAubWpyLXBvcG92ZXIpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgoubWpyLW1mdiB7CiAgICAtLW1qci1zdXJmYWNlLTA6IHZhcigtLWNvbnRlbnQtYmcsICMxZTFlMWUpOwogICAgLS1tanItc3VyZmFjZS0xOiB2YXIoLS1jb21meS1tZW51LWJnLCAjMmEyYTJhKTsKICAgIC0tbWpyLXN1cmZhY2UtMjogdmFyKC0tY29tZnktbWVudS1zZWNvbmRhcnktYmcsICMzMzMpOwogICAgLS1tanItYm9yZGVyOiB2YXIoLS1ib3JkZXItY29sb3IsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwogICAgLS1tanItbXV0ZWQ6IHZhcigtLWRlc2NyaXAtdGV4dCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSk7CiAgICAtLW1qci1hY2NlbnQ6IHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZik7CiAgICAtLW1qci1zdGF0dXMtc3VjY2VzczogdmFyKC0tY29tZnktc3RhdHVzLXN1Y2Nlc3MsICM0Y2FmNTApOwoKICAgIGZvbnQtZmFtaWx5OiB2YXIoCiAgICAgICAgLS1jb21meS1mb250LAogICAgICAgIHVpLXNhbnMtc2VyaWYsCiAgICAgICAgc3lzdGVtLXVpLAogICAgICAgIC1hcHBsZS1zeXN0ZW0sCiAgICAgICAgIlNlZ29lIFVJIiwKICAgICAgICBSb2JvdG8sCiAgICAgICAgQXJpYWwsCiAgICAgICAgc2Fucy1zZXJpZgogICAgKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsIHZhcigtLWlucHV0LXRleHQsICNkZGQpKTsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CgogICAgLyogVmlzdWFsIGNocm9tZSAqLwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgMCA4cHggMzJweCByZ2JhKDAsIDAsIDAsIDAuNTUpLAogICAgICAgIDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMyk7Cn0KCi5tanItbWZ2ICogewogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKaHRtbC5tanItbWZ2LXBvcG91dC1kb2N1bWVudCB7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIHJhZGlhbC1ncmFkaWVudCgKICAgICAgICAgICAgMTIwMHB4IDQyMHB4IGF0IDUwJSAwJSwKICAgICAgICAgICAgY29sb3ItbWl4KAogICAgICAgICAgICAgICAgaW4gc3JnYiwKICAgICAgICAgICAgICAgIHZhcigtLXByaW1hcnktYmFja2dyb3VuZCwgdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKSkgMTAlLAogICAgICAgICAgICAgICAgdHJhbnNwYXJlbnQKICAgICAgICAgICAgKSwKICAgICAgICAgICAgdHJhbnNwYXJlbnQgNjIlCiAgICAgICAgKSwKICAgICAgICBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAgIDE4MGRlZywKICAgICAgICAgICAgY29sb3ItbWl4KAogICAgICAgICAgICAgICAgaW4gc3JnYiwKICAgICAgICAgICAgICAgIHZhcigtLWludGVyZmFjZS1wYW5lbC1zdXJmYWNlLCB2YXIoLS1jb250ZW50LWJnLCAjMTYxOTFmKSkgODIlLAogICAgICAgICAgICAgICAgIzAwMCAxOCUKICAgICAgICAgICAgKSwKICAgICAgICAgICAgY29sb3ItbWl4KAogICAgICAgICAgICAgICAgaW4gc3JnYiwKICAgICAgICAgICAgICAgIHZhcigtLWludGVyZmFjZS1tZW51LXN1cmZhY2UsIHZhcigtLWNvbWZ5LW1lbnUtYmcsICMxZjIyMjcpKSA4NCUsCiAgICAgICAgICAgICAgICAjMDAwIDE2JQogICAgICAgICAgICApCiAgICAgICAgKTsKfQoKYm9keS5tanItbWZ2LXBvcG91dC1ib2R5IHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9CgojbWpyLW1mdi1wb3BvdXQtcm9vdCwKLm1qci1tZnYtcG9wb3V0LXJvb3QgewogICAgaXNvbGF0aW9uOiBpc29sYXRlOwp9CgovKiAtLSBIZWFkZXIgKGRyYWcgaGFuZGxlKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoubWpyLW1mdi1oZWFkZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEpOwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgY3Vyc29yOiBtb3ZlOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICBmbGV4LXNocmluazogMDsKICAgIGdhcDogNnB4OwogICAgbWluLWhlaWdodDogMzRweDsKfQoKLm1qci1tZnYtaGVhZGVyLXRpdGxlIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBvcGFjaXR5OiAwLjc4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgZmxleDogMTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjI4cHg7Cn0KCi8qIC0tIFRvb2xiYXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLm1qci1tZnYtdG9vbGJhciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNHB4OwogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA1MCUsIHZhcigtLW1qci1zdXJmYWNlLTEpIDUwJSk7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBmbGV4LXNocmluazogMDsKICAgIG1pbi1oZWlnaHQ6IDM2cHg7CiAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7Cn0KLm1qci1tZnYtdG9vbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgZGlzcGxheTogbm9uZTsKfQoKLm1qci1tZnYtdG9vbGJhci1zZXAgewogICAgd2lkdGg6IDFweDsKICAgIGhlaWdodDogMThweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1ib3JkZXIpOwogICAgbWFyZ2luOiAwIDNweDsKICAgIGZsZXgtc2hyaW5rOiAwOwp9CgoubWpyLW1mdi1wcm9ncmVzcyB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgaGVpZ2h0OiAyMnB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDcyJSwgIzAwMCAyOCUpOwogICAgZmxleC1zaHJpbms6IDA7CiAgICBjdXJzb3I6IGRlZmF1bHQ7Cn0KCi5tanItbWZ2LXByb2dyZXNzLmlzLWNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi5tanItbWZ2LXByb2dyZXNzLmlzLWNsaWNrYWJsZTpob3ZlciB7CiAgICBmaWx0ZXI6IGJyaWdodG5lc3MoMS4wMyk7Cn0KCi5tanItbWZ2LXByb2dyZXNzLWJhciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAwOwogICAgd2lkdGg6IDAlOwogICAgdHJhbnNpdGlvbjogd2lkdGggNzBtcyBlYXNlLWluLW91dDsKfQoKLm1qci1tZnYtcHJvZ3Jlc3MtYmFyLS1ub2RlcyB7CiAgICB0b3A6IDA7CiAgICBoZWlnaHQ6IDUwJTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MpIDY4JSwgIzBiMzUxMyAzMiUpOwp9CgoubWpyLW1mdi1wcm9ncmVzcy1iYXItLXN0ZXBzIHsKICAgIHRvcDogNTAlOwogICAgaGVpZ2h0OiA1MCU7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNjQlLCAjMGIyMzQwIDM2JSk7Cn0KCi5tanItbWZ2LXByb2dyZXNzLmlzLWVycm9yIC5tanItbWZ2LXByb2dyZXNzLWJhci0tbm9kZXMsCi5tanItbWZ2LXByb2dyZXNzLmlzLWVycm9yIC5tanItbWZ2LXByb2dyZXNzLWJhci0tc3RlcHMgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsICNkOTUzNGYgNzglLCAjNGExNDE0IDIyJSk7Cn0KCi5tanItbWZ2LXByb2dyZXNzLW92ZXJsYXkgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpLCByZ2JhKDAsIDAsIDAsIDAuMTgpKTsKICAgIG1peC1ibGVuZC1tb2RlOiBzY3JlZW47CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLm1qci1tZnYtcHJvZ3Jlc3MtdGV4dCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAyOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBwYWRkaW5nOiAwIDhweDsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICB0ZXh0LXNoYWRvdzogMCAwIDJweCByZ2JhKDAsIDAsIDAsIDAuOSk7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwp9CgoubWpyLW1mdi1waW4tZ3JvdXAgewogICAgZGlzcGxheTogZmxleDsKICAgIGdhcDogMnB4OwogICAgZmxleC1zaHJpbms6IDA7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwp9Ci5tanItbWZ2LXBpbi1idG4gewogICAgd2lkdGg6IDI2cHg7CiAgICBoZWlnaHQ6IDI2cHg7CiAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTIpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHBhZGRpbmc6IDA7CiAgICBsaW5lLWhlaWdodDogMjRweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHRyYW5zaXRpb246CiAgICAgICAgYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGNvbG9yIDEyMG1zIGVhc2UsCiAgICAgICAgYm94LXNoYWRvdyAxMjBtcyBlYXNlOwp9Ci5tanItbWZ2LXBpbi1idG46aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNDUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLCB2YXIoLS1tanItYWNjZW50KSA4JSk7Cn0KLm1qci1tZnYtcGluLWJ0bi5pcy1waW5uZWQgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTglLCAjZmZmZmZmIDEyJSk7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNDIlLCB2YXIoLS1tanItYWNjZW50KSA1OCUpOwogICAgY29sb3I6ICNlZWY3ZmY7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDI0JSwgdHJhbnNwYXJlbnQpOwp9CgovKiAtLSBQaW4gZ3JvdXA6IG5vdyBhIGRyb3Bkb3duIG1lbnUgKGRpc3BsYXk6bm9uZSBieSBkZWZhdWx0LCBmbGV4IHdoZW4gLmlzLW9wZW4pIC0tICovCi5tanItbWZ2LXBpbi1ncm91cCB7CiAgICBkaXNwbGF5OiBub25lOwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMnB4OwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiBjYWxjKDEwMCUgKyA0cHgpOwogICAgbGVmdDogMDsKICAgIHotaW5kZXg6IDEwMDEwOwogICAgbWluLXdpZHRoOiA3MHB4OwogICAgcGFkZGluZzogNHB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDI0cHggcmdiYSgwLCAwLCAwLCAwLjU1KTsKfQoubWpyLW1mdi1waW4tZ3JvdXAuaXMtb3BlbiB7CiAgICBkaXNwbGF5OiBmbGV4Owp9Ci5tanItbWZ2LXBpbi1idG4gewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAzMHB4OwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHBhZGRpbmc6IDAgMTBweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHRyYW5zaXRpb246CiAgICAgICAgYmFja2dyb3VuZCAxMjBtcyBlYXNlLAogICAgICAgIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGNvbG9yIDEyMG1zIGVhc2U7Cn0KLm1qci1tZnYtcGluLWJ0bjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMzUlLCB0cmFuc3BhcmVudCk7Cn0KLm1qci1tZnYtcGluLWJ0bi5pcy1waW5uZWQgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTglLCAjZmZmZmZmIDEyJSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMiwgIzMzMykgNDIlLCB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKSA1OCUpOwogICAgY29sb3I6ICNlZWY3ZmY7Cn0KCi8qIC0tIEljb24gRHJvcGRvd24gY29tcG9uZW50ICgubWpyLW1mdi1pZHJvcCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5tanItbWZ2LWlkcm9wIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGZsZXgtc2hyaW5rOiAwOwp9CgoubWpyLW1mdi1pZHJvcC1tZW51IHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAycHg7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB6LWluZGV4OiAxMDAxMDsKICAgIG1pbi13aWR0aDogMTEwcHg7CiAgICBwYWRkaW5nOiA0cHg7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1tZW51LWJnLCAjMmEyYTJhKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgYm94LXNoYWRvdzogMCA4cHggMjRweCByZ2JhKDAsIDAsIDAsIDAuNTUpOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoubWpyLW1mdi1pZHJvcC1tZW51LmlzLW9wZW4gewogICAgZGlzcGxheTogZmxleDsKfQoKLm1qci1tZnYtaWRyb3AtaXRlbSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgd2lkdGg6IDEwMCU7CiAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICBib3JkZXI6IG5vbmU7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2RkZCk7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzIGVhc2U7Cn0KLm1qci1tZnYtaWRyb3AtaXRlbTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwp9Ci5tanItbWZ2LWlkcm9wLWl0ZW0uaXMtc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogcmdiYSg5NSwgMTc5LCAyNTUsIDAuMTYpOwogICAgY29sb3I6ICNhOGQ4ZmY7Cn0KLm1qci1tZnYtaWRyb3AtdHJpZ2dlclthcmlhLWV4cGFuZGVkPSJ0cnVlIl0gewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSAhaW1wb3J0YW50Owp9Ci8qIENoYW5uZWwgdHJpZ2dlcjogc2xpZ2h0bHkgd2lkZXIgdG8gZml0ICJSR0IiICovCi5tanItbWZ2LWNoLWxhYmVsIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA0ZW07CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLyogVG9vbGJhciBpY29uLWJ1dHRvbiBwb3BvdmVycyAoY2hhbm5lbCwgZ3VpZGVzLCBwaW4sIGZvcm1hdCAtIHNvcnQtc3R5bGUgY29udGV4dCBtZW51cykgKi8KLm1qci1tZnYtY2gtcG9wb3ZlciwKLm1qci1tZnYtZ3VpZGVzLXBvcG92ZXIsCi5tanItbWZ2LXBpbi1wb3BvdmVyLAoubWpyLW1mdi1mb3JtYXQtcG9wb3ZlciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBtaW4td2lkdGg6IDEyMHB4OwogICAgcGFkZGluZzogNnB4OwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnLCAwLjVyZW0pOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSwgdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSkpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7CiAgICBib3gtc2hhZG93OiAwIDhweCAyNHB4IHJnYmEoMCwgMCwgMCwgMC41NSk7CiAgICB6LWluZGV4OiAxMDAxMDsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KLm1qci1tZnYtY2gtcG9wb3Zlci5pcy1vcGVuLAoubWpyLW1mdi1ndWlkZXMtcG9wb3Zlci5pcy1vcGVuLAoubWpyLW1mdi1waW4tcG9wb3Zlci5pcy1vcGVuLAoubWpyLW1mdi1mb3JtYXQtcG9wb3Zlci5pcy1vcGVuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwp9Ci8qIFRvb2xiYXIgaWNvbiBpbWFnZXMgLSBjaCBpY29uIGlzIGJsYWNrIChpbnZlcnRlZCksIGd1aWRlcyBpY29uIGlzIG5hdGl2ZSB3aGl0ZSAqLwoubWpyLW1mdi1jaC1pY29uIHsKICAgIHdpZHRoOiAxOHB4OwogICAgaGVpZ2h0OiAxOHB4OwogICAgZmlsdGVyOiBpbnZlcnQoMSk7CiAgICBvcGFjaXR5OiAwLjg1OwogICAgZGlzcGxheTogYmxvY2s7Cn0KLm1qci1tZnYtZ3VpZGVzLWljb24gewogICAgd2lkdGg6IDE4cHg7CiAgICBoZWlnaHQ6IDE4cHg7CiAgICBvcGFjaXR5OiAwLjg1OwogICAgZGlzcGxheTogYmxvY2s7Cn0KLm1qci1tZnYtY2gtdHJpZ2dlclthcmlhLWV4cGFuZGVkPSJ0cnVlIl0sCi5tanItbWZ2LWd1aWRlcy10cmlnZ2VyW2FyaWEtZXhwYW5kZWQ9InRydWUiXSwKLm1qci1tZnYtcGluLXRyaWdnZXJbYXJpYS1leHBhbmRlZD0idHJ1ZSJdLAoubWpyLW1mdi1mb3JtYXQtdHJpZ2dlclthcmlhLWV4cGFuZGVkPSJ0cnVlIl0gewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSAhaW1wb3J0YW50Owp9Ci8qIFBpbiBzbG90IGFjdGl2ZSBzdGF0ZSAqLwoubWpyLW1mdi1waW4tcG9wb3ZlciAubWpyLW1lbnUtaXRlbS5pcy1waW5uZWQgewogICAgYmFja2dyb3VuZDogcmdiYSg5NSwgMTc5LCAyNTUsIDAuMTYpOwogICAgY29sb3I6ICNhOGQ4ZmY7Cn0KLm1qci1tZnYtcGluLXBvcG92ZXIgLm1qci1tZW51LWl0ZW0uaXMtcGlubmVkIC5tanItbWVudS1pdGVtLWNoZWNrIHsKICAgIG9wYWNpdHk6IDEgIWltcG9ydGFudDsKfQovKiBGb3JtYXQgcG9wb3Zlcjogc2VwYXJhdG9yICsgb3BhY2l0eSBzbGlkZXIgcm93ICovCi5tanItbWZ2LWZvcm1hdC1zZXAgewogICAgaGVpZ2h0OiAxcHg7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkpOwogICAgbWFyZ2luOiA0cHggMnB4Owp9Ci5tanItbWZ2LWZvcm1hdC1zbGlkZXItcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBwYWRkaW5nOiA0cHggOHB4IDJweDsKfQoubWpyLW1mdi1mb3JtYXQtc2xpZGVyLWxhYmVsIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGNvbG9yOiB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKTsKICAgIG9wYWNpdHk6IDAuNjU7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZmxleC1zaHJpbms6IDA7Cn0KLm1qci1tZnYtZm9ybWF0LXBvcG92ZXIgaW5wdXRbdHlwZT0icmFuZ2UiXSB7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiA3MHB4OwogICAgYWNjZW50LWNvbG9yOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKfQoubWpyLW1mdi1mb3JtYXQtcG9wb3ZlciAubWpyLW1mdi10b29sYmFyLXJhbmdlLW91dCB7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2RkZCk7CiAgICBvcGFjaXR5OiAwLjY1OwogICAgbWluLXdpZHRoOiAzMHB4OwogICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICBmbGV4LXNocmluazogMDsKfQoKLm1qci1tZnYgLm1qci1pY29uLWJ0biB7CiAgICB3aWR0aDogMzBweDsKICAgIGhlaWdodDogMzBweDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYm9yZGVyLXJhZGl1czogN3B4OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0yKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHBhZGRpbmc6IDA7CiAgICBmbGV4LXNocmluazogMDsKICAgIHRyYW5zaXRpb246CiAgICAgICAgdHJhbnNmb3JtIDEyMG1zIGVhc2UsCiAgICAgICAgYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGNvbG9yIDEyMG1zIGVhc2UsCiAgICAgICAgYm94LXNoYWRvdyAxMjBtcyBlYXNlOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDQ1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDgwJSwgdmFyKC0tbWpyLWFjY2VudCkgOCUpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuOmZvY3VzLXZpc2libGUgewogICAgb3V0bGluZTogbm9uZTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU4JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAyNCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1tZnYgLm1qci1pY29uLWJ0biAucGkgewogICAgZm9udC1zaXplOiAxM3B4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBvcGFjaXR5OiAwLjk7Cn0KCi8qIFVuaXZlcnNhbCBhY3RpdmUgaGlnaGxpZ2h0IC0gYW55IGFyaWEtcHJlc3NlZD0idHJ1ZSIgYnV0dG9uIGdldHMgYWNjZW50IGdsb3cuCiAgIFBsYWNlZCBiZWZvcmUgdGhlIGNvbG9yZWQgYWN0aXZlIGNsYXNzZXMgc28gdGhleSBjYW4gb3ZlcnJpZGUgd2l0aCB0aGVpciBvd24gY29sb3IuICovCi5tanItbWZ2IC5tanItaWNvbi1idG5bYXJpYS1wcmVzc2VkPSJ0cnVlIl0gewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDk1LCAxNzksIDI1NSwgMC41NSk7CiAgICBjb2xvcjogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMiwgIzMzMykgODAlLCB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKSAxNSUpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKSAyNSUsIHRyYW5zcGFyZW50KTsKfQoubWpyLW1mdiAubWpyLWljb24tYnRuW2FyaWEtcHJlc3NlZD0idHJ1ZSJdIC5waSB7CiAgICBvcGFjaXR5OiAxOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuLm1qci1saXZlLWFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MpIDYwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgY29sb3I6IHZhcigtLW1qci1zdGF0dXMtc3VjY2Vzcyk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLCB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MpIDEyJSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcykgMjUlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWZ2IC5tanItaWNvbi1idG4ubWpyLWxpdmUtYWN0aXZlIC5waSB7CiAgICBvcGFjaXR5OiAxOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuLm1qci1wcmV2aWV3LWFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA2MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4MCUsIHZhcigtLW1qci1hY2NlbnQpIDEyJSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDI1JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuLm1qci1wcmV2aWV3LWFjdGl2ZSAucGkgewogICAgb3BhY2l0eTogMTsKfQoKLm1qci1tZnYgLm1qci1pY29uLWJ0bi5tanItbm9kZXN0cmVhbS1hY3RpdmUgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCAjZmY5ODAwKSA2MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGNvbG9yOiB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZjk4MDApOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KAogICAgICAgIGluIHNyZ2IsCiAgICAgICAgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLAogICAgICAgIHZhcigtLW1qci1zdGF0dXMtd2FybmluZywgI2ZmOTgwMCkgMTIlCiAgICApOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZjk4MDApIDI1JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuLm1qci1ub2Rlc3RyZWFtLWFjdGl2ZSAucGkgewogICAgb3BhY2l0eTogMTsKfQoKLyogUG9wLWluIG1vZGUgKHZpZXdlciBwb3BwZWQgb3V0KTogcmFpc2UgYnV0dG9uIGNvbnRyYXN0L2JyaWdodG5lc3MgKi8KLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDkyJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSksCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDkyJSwgcmdiYSgwLCAwLCAwLCAwLjE4KSkKICAgICk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3NCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xOCkpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSksCiAgICAgICAgMCAyNHB4IDU2cHggcmdiYSgwLCAwLCAwLCAwLjQyKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItbWZ2LWhlYWRlciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4OCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA5MCUsIHJnYmEoMCwgMCwgMCwgMC4yNCkpCiAgICApOwogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc4JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KSk7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1oZWFkZXItdGl0bGUgewogICAgb3BhY2l0eTogMC45ODsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2VlZjRmZikgOTQlLCAjZmZmZmZmIDYlKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItbWZ2LXRvb2xiYXIgewogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDE4MGRlZywKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgODglLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgOTAlLCByZ2JhKDAsIDAsIDAsIDAuMjQpKQogICAgKTsKICAgIGJvcmRlci1ib3R0b20tY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3OCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCkpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1tZnYtdG9vbGJhci1zZXAgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc4JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1wcm9ncmVzcyB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA4MiUsICMwYTExMTggMTglKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgOTIlLCAjMDAwIDglKQogICAgKTsKICAgIGJvcmRlci1ib3R0b20tY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3OCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCkpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1tZnYtcHJvZ3Jlc3MtdGV4dCB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcsICNlZWY0ZmYpIDk0JSwgI2ZmZmZmZiA2JSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1jb250ZW50IHsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgcmFkaWFsLWdyYWRpZW50KAogICAgICAgICAgICBjaXJjbGUgYXQgdG9wLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMTAlLCB0cmFuc3BhcmVudCkgMCUsCiAgICAgICAgICAgIHRyYW5zcGFyZW50IDQyJQogICAgICAgICksCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDgyJSwgIzAwMCAxOCUpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1pY29uLWJ0biB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3NiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNikpOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDE4MGRlZywKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODYlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgOTIlLCByZ2JhKDAsIDAsIDAsIDAuMTgpKQogICAgKTsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2RkZCkgOTIlLCAjZmZmZmZmIDglKSAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSksCiAgICAgICAgMCA4cHggMThweCByZ2JhKDAsIDAsIDAsIDAuMTgpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1pY29uLWJ0bjpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1MiUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDU4JSwgdmFyKC0tbWpyLWFjY2VudCkgNDIlKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgNjIlLCB2YXIoLS1tanItYWNjZW50KSAzOCUpCiAgICApOwogICAgY29sb3I6ICNmNGY4ZmYgIWltcG9ydGFudDsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItaWNvbi1idG4gLnBpIHsKICAgIG9wYWNpdHk6IDE7CiAgICBjb2xvcjogaW5oZXJpdCAhaW1wb3J0YW50Owp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1pY29uLWJ0bi5tanItbGl2ZS1hY3RpdmUgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy1zdWNjZXNzKSA2MCUsICNmZmZmZmYgNDAlKTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcykgNjIlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy1zdWNjZXNzKSAzNiUsIHZhcigtLW1qci1zdXJmYWNlLTEpIDY0JSkKICAgICk7CiAgICBjb2xvcjogI2ZmZmZmZiAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiksCiAgICAgICAgMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MpIDI0JSwgdHJhbnNwYXJlbnQpLAogICAgICAgIDAgMCAxOHB4IHJnYmEoNzYsIDE3NSwgODAsIDAuMTgpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1pY29uLWJ0bi5tanItcHJldmlldy1hY3RpdmUgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTglLCAjZmZmZmZmIDQyJSk7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA2MiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAzNiUsIHZhcigtLW1qci1zdXJmYWNlLTEpIDY0JSkKICAgICk7CiAgICBjb2xvcjogI2ZmZmZmZiAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiksCiAgICAgICAgMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAyNCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAwIDAgMThweCByZ2JhKDk1LCAxNzksIDI1NSwgMC4xOCk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLWljb24tYnRuLm1qci1ub2Rlc3RyZWFtLWFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZjk4MDApIDU4JSwgI2ZmZmZmZiA0MiUpOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDE4MGRlZywKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCAjZmY5ODAwKSA2MiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZjk4MDApIDM2JSwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgNjQlKQogICAgKTsKICAgIGNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSwKICAgICAgICAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtd2FybmluZywgI2ZmOTgwMCkgMjQlLCB0cmFuc3BhcmVudCksCiAgICAgICAgMCAwIDE4cHggcmdiYSgyNTUsIDE1MiwgMCwgMC4xOCk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1waW4tYnRuIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc2JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KSk7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4NCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA5MiUsIHJnYmEoMCwgMCwgMCwgMC4xOCkpCiAgICApOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSA5MiUsICNmZmZmZmYgOCUpOwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1tZnYtcGluLWJ0bjpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1MiUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDU2JSwgdmFyKC0tbWpyLWFjY2VudCkgNDQlKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgNjQlLCB2YXIoLS1tanItYWNjZW50KSAzNiUpCiAgICApOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1tZnYtcGluLWJ0bi5pcy1waW5uZWQgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTglLCAjZmZmZmZmIDQyJSk7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA2MiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAzNiUsIHZhcigtLW1qci1zdXJmYWNlLTEpIDY0JSkKICAgICk7CiAgICBjb2xvcjogI2ZmZmZmZjsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItd3Mtc2lkZWJhciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA5NCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCkpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA5NCUsIHJnYmEoMCwgMCwgMCwgMC4xOCkpCiAgICApOwogICAgYm9yZGVyLWxlZnQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3OCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNikpOwogICAgYm94LXNoYWRvdzogaW5zZXQgMXB4IDAgMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDMpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImxlZnQiXSAubWpyLXdzLXNpZGViYXIgewogICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNzglLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItd3Mtc2lkZWJhci1oZWFkZXIgewogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDE4MGRlZywKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODQlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgOTIlLCByZ2JhKDAsIDAsIDAsIDAuMTgpKQogICAgKTsKICAgIGJvcmRlci1ib3R0b20tY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3NiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCkpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy1zaWRlYmFyLXRpdGxlIHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2VlZjRmZikgODIlLCB2YXIoLS1tanItbXV0ZWQpIDE4JSk7CiAgICBvcGFjaXR5OiAwLjg4Owp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy1ub2RlIHsKICAgIGJvcmRlci1ib3R0b20tY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3MiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy1ub2RlLWhlYWRlciB7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMCkpLAogICAgICAgIGxpbmVhci1ncmFkaWVudCgKICAgICAgICAgICAgMTgwZGVnLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgODYlLCB2YXIoLS1tanItYWNjZW50KSAxNCUpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgODYlLCByZ2JhKDAsIDAsIDAsIDAuMTQpKQogICAgICAgICk7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLW5vZGUtdGl0bGUgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZWVmNGZmKSA5NCUsICNmZmZmZmYgNiUpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy13aWRnZXQtbGFiZWwsCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLXNpZGViYXItZW1wdHksCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLW5vZGUtZW1wdHkgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItbXV0ZWQpIDg0JSwgI2ZmZmZmZiAxNiUpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy1pbnB1dCB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgNzQlLCAjMDUwNzBhIDI2JSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3NCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xOCkpOwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy1pbnB1dDpmb2N1cyB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1OCUsICNmZmZmZmYgMTAlKTsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpLAogICAgICAgIDAgMCAwIDJweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMTglLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWZ2IC5tanItaWNvbi1idG4ubWpyLXBvcGluLWFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1OCUsICNmZmZmZmYgNDIlKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA0NSUsIHZhcigtLW1qci1hY2NlbnQpIDU1JSk7CiAgICBjb2xvcjogI2VlZjdmZjsKfQoKLyogLS0gQ29udGVudCB3cmFwcGVyIChob3Jpem9udGFsIGZsZXg6IGNvbnRlbnQgKyBzaWRlYmFyKSAtLS0tLS0tLS0tLS0tLSAqLwoubWpyLW1mdi1jb250ZW50LXdyYXBwZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXg6IDE7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGNvbnRhaW5lci10eXBlOiBpbmxpbmUtc2l6ZTsKfQoKLyogLS0gU2lkZWJhciBwb3NpdGlvbiB2YXJpYW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJsZWZ0Il0gewogICAgZmxleC1kaXJlY3Rpb246IHJvdzsKfQoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0ibGVmdCJdIC5tanItd3Mtc2lkZWJhciB7CiAgICBib3JkZXItbGVmdDogbm9uZTsKICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwp9Ci5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSB7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwp9Ci5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLXdzLXNpZGViYXIgewogICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMDsKICAgIHRyYW5zaXRpb246CiAgICAgICAgaGVpZ2h0IDAuMnMgZWFzZSwKICAgICAgICB3aWR0aCAwczsKfQoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci13cy1zaWRlYmFyLm9wZW4gewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDIyMHB4OwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIG1pbi1oZWlnaHQ6IDEyMHB4OwogICAgbWF4LWhlaWdodDogNjUlOwp9CgovKiAtLSBDb250ZW50IGFyZWEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5tanItbWZ2LWNvbnRlbnQgewogICAgZmxleDogMTsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBiYWNrZ3JvdW5kOiAjMGQwZDBkOwogICAgbWluLWhlaWdodDogMDsKfQoKLm1qci1tZnYtZ2VuLXNpZGViYXIgewogICAgZGlzcGxheTogbm9uZTsKICAgIGZsZXg6IDAgMCAzMjBweDsKICAgIHdpZHRoOiAzMjBweDsKICAgIG1pbi13aWR0aDogMjEwcHg7CiAgICBtYXgtd2lkdGg6IG1pbig0MiUsIDQyMHB4KTsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICBwYWRkaW5nOiAxMHB4OwogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTgsIDE4LCAyMCwgMC45Nik7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg4KTsKfQoKLm1qci1tZnYtZ2VuLXNpZGViYXIub3BlbiB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMTBweDsKfQoKLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImxlZnQiXSAubWpyLW1mdi1nZW4tc2lkZWJhciB7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwogICAgYm9yZGVyLXJpZ2h0OiBub25lOwp9CgoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci1tZnYtZ2VuLXNpZGViYXIgewogICAgZmxleDogMCAwIGNsYW1wKDE5MHB4LCAzMiUsIDI4MHB4KTsKICAgIHdpZHRoOiAxMDAlOwogICAgbWF4LXdpZHRoOiBub25lOwogICAgbWluLXdpZHRoOiAwOwogICAgbWF4LWhlaWdodDogNDYlOwogICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7Cn0KCi5tanItbWZ2LWdlbi1zaWRlYmFyLXRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTQpOwp9CgoubWpyLW1mdi1nZW4tc2lkZWJhci1zZWN0aW9uIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiA2cHg7CiAgICBwYWRkaW5nLXRvcDogOHB4OwogICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKfQoKLm1qci1tZnYtZ2VuLXNpZGViYXItc2VjdGlvbjpmaXJzdC1vZi10eXBlIHsKICAgIHBhZGRpbmctdG9wOiAwOwogICAgYm9yZGVyLXRvcDogbm9uZTsKfQoKLm1qci1tZnYtZ2VuLXNpZGViYXItaGVhZGluZyB7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43Mik7Cn0KCi5tanItbWZ2LWdlbi1zaWRlYmFyLWJvZHkgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDEwcHg7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsaW5lLWhlaWdodDogMS40NTsKICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7Cn0KCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLW1mdi1nZW4tc2lkZWJhci5vcGVuIHsKICAgIGdhcDogNnB4Owp9CgoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci1tZnYtZ2VuLXNpZGViYXItdGl0bGUgewogICAgZmxleDogMCAwIGF1dG87Cn0KCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLW1mdi1nZW4tc2lkZWJhci1zZWN0aW9uIHsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgbWluLWhlaWdodDogYXV0bzsKICAgIHBhZGRpbmctdG9wOiA0cHg7Cn0KCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLW1mdi1nZW4tc2lkZWJhci1oZWFkaW5nIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLW1mdi1nZW4tc2lkZWJhci1ib2R5IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgY29sdW1uczogMyAxNzBweDsKICAgIGNvbHVtbi1nYXA6IDEwcHg7CiAgICBjb2x1bW4tZmlsbDogYmFsYW5jZTsKICAgIG1pbi1oZWlnaHQ6IGF1dG87CiAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICBvdmVyZmxvdy15OiB2aXNpYmxlOwogICAgcGFkZGluZy1yaWdodDogMnB4OwogICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluOwp9CgoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci1tZnYtZ2VuLXNpZGViYXItYm9keSA+ICogewogICAgZGlzcGxheTogZmxleDsKICAgIGJyZWFrLWluc2lkZTogYXZvaWQ7CiAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7CiAgICBtaW4td2lkdGg6IDA7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgbWFyZ2luLWJsb2NrOiAwIDEwcHg7Cn0KCi5tanItbWZ2LWdlbi10aW1lLWJhZGdlIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZ2FwOiAxMnB4OwogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDIyNCwgMjU1LCAxMjIsIDAuNDIpOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDIyNCwgMjU1LCAxMjIsIDAuMTYpLCByZ2JhKDc2LCAxNzUsIDgwLCAwLjEpKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCByZ2JhKDIyNCwgMjU1LCAxMjIsIDAuMTIpIGluc2V0OwogICAgY3Vyc29yOiBjb3B5OwogICAgdHJhbnNpdGlvbjoKICAgICAgICBiYWNrZ3JvdW5kIDAuMTZzIGVhc2UsCiAgICAgICAgYm9yZGVyLWNvbG9yIDAuMTZzIGVhc2UsCiAgICAgICAgYm94LXNoYWRvdyAwLjE2cyBlYXNlOwp9CgoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci1tZnYtZ2VuLXRpbWUtYmFkZ2UgewogICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgYm9yZGVyLXJhZGl1czogNnB4Owp9CgoubWpyLW1mdi1nZW4tdGltZS1sYWJlbCB7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcyKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4Owp9CgoubWpyLW1mdi1nZW4tdGltZS12YWx1ZSB7CiAgICBjb2xvcjogI2UwZmY3YTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGZvbnQtd2VpZ2h0OiA4MDA7CiAgICBmb250LWZhbWlseTogQ29uc29sYXMsIE1vbmFjbywgbW9ub3NwYWNlOwp9CgoubWpyLW1mdi1nZW4tY2FyZCB7CiAgICAtLW1qci1tZnYtZ2VuLWFjY2VudDogIzIxOTZmMzsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nOiAxMnB4OwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1tZnYtZ2VuLWFjY2VudCkgNDUlLCB0cmFuc3BhcmVudCk7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTM1ZGVnLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItbWZ2LWdlbi1hY2NlbnQpIDE2JSwgdHJhbnNwYXJlbnQpIDAlLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItbWZ2LWdlbi1hY2NlbnQpIDglLCB0cmFuc3BhcmVudCkgMTAwJQogICAgKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLW1mdi1nZW4tYWNjZW50KSAxNCUsIHRyYW5zcGFyZW50KSBpbnNldDsKICAgIGN1cnNvcjogY29weTsKICAgIHRyYW5zaXRpb246CiAgICAgICAgYmFja2dyb3VuZCAwLjE2cyBlYXNlLAogICAgICAgIGJvcmRlci1jb2xvciAwLjE2cyBlYXNlLAogICAgICAgIGJveC1zaGFkb3cgMC4xNnMgZWFzZTsKfQoKLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImJvdHRvbSJdIC5tanItbWZ2LWdlbi1jYXJkIHsKICAgIG1pbi1oZWlnaHQ6IDA7CiAgICBwYWRkaW5nOiAxMHB4Owp9CgoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci1tZnYtZ2VuLWNhcmQtLXBvc2l0aXZlLXByb21wdCwKLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImJvdHRvbSJdIC5tanItbWZ2LWdlbi1jYXJkLS1uZWdhdGl2ZS1wcm9tcHQsCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLW1mdi1nZW4tY2FyZC0tcHJvbXB0IHsKICAgIG1pbi1oZWlnaHQ6IDExMHB4Owp9CgoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci1tZnYtZ2VuLWNhcmQtLXdvcmtmbG93IHsKICAgIG1pbi1oZWlnaHQ6IDU4cHg7Cn0KCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLW1mdi1nZW4tY2FyZC0tbW9kZWwtYW5kLWxvcmEsCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLW1mdi1nZW4tY2FyZC0tbW9kZWxzLAoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci1tZnYtZ2VuLWNhcmQtLXNhbXBsaW5nLAoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci1tZnYtZ2VuLWNhcmQtLWdlbmVyYXRpb24tcGlwZWxpbmUsCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLW1mdi1nZW4tY2FyZC0tdGV4dC10by1pbWFnZSwKLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImJvdHRvbSJdIC5tanItbWZ2LWdlbi1jYXJkLS1pbWFnZS10by1pbWFnZSwKLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImJvdHRvbSJdIC5tanItbWZ2LWdlbi1jYXJkLS1pbnBhaW50LAoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci1tZnYtZ2VuLWNhcmQtLXVwc2NhbGUsCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLW1mdi1nZW4tY2FyZC0tcmVmaW5lIHsKICAgIG1pbi1oZWlnaHQ6IDg2cHg7Cn0KCi5tanItbWZ2LWdlbi1jYXJkLS1zZWVkIHsKICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgYm9yZGVyLXdpZHRoOiAycHg7Cn0KCi5tanItbWZ2LWdlbi1jYXJkLS1jb21wYWN0IHsKICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZ2FwOiAxMnB4Owp9CgoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci1tZnYtZ2VuLWNhcmQtLWNvbXBhY3QgewogICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwp9CgoubWpyLW1mdi1nZW4tY2FyZC0tY29tcGFjdCAubWpyLW1mdi1nZW4tY2FyZC10aXRsZSwKLm1qci1tZnYtZ2VuLWNhcmQtLWNvbXBhY3QgLm1qci1tZnYtZ2VuLWNhcmQtdmFsdWUgewogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci1tZnYtZ2VuLWNhcmQ6aG92ZXIsCi5tanItbWZ2LWdlbi10aW1lLWJhZGdlOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1tZnYtZ2VuLWFjY2VudCwgI2UwZmY3YSkgNzAlLCB0cmFuc3BhcmVudCk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1tZnYtZ2VuLWFjY2VudCwgI2UwZmY3YSkgMjQlLCB0cmFuc3BhcmVudCkKICAgICAgICBpbnNldDsKfQoKLm1qci1tZnYtZ2VuLWNvcHktZmxhc2ggewogICAgYmFja2dyb3VuZDogcmdiYSg3NiwgMTc1LCA4MCwgMC4yOCkgIWltcG9ydGFudDsKfQoKLm1qci1tZnYtZ2VuLWNhcmQtdGl0bGUgewogICAgY29sb3I6IHZhcigtLW1qci1tZnYtZ2VuLWFjY2VudCk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjVweDsKfQoKLm1qci1tZnYtZ2VuLWNhcmQtdmFsdWUgewogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTIpKTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIG1pbi13aWR0aDogMDsKICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7Cn0KCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLW1mdi1nZW4tY2FyZC12YWx1ZSB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgZGlzcGxheTogLXdlYmtpdC1ib3g7CiAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDU7CiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsOwp9CgoubWpyLW1mdi1nZW4tY2FyZC12YWx1ZS5pcy1jb21wYWN0IHsKICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKfQoKLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImJvdHRvbSJdIC5tanItbWZ2LWdlbi1jYXJkLXZhbHVlLmlzLWNvbXBhY3QgewogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKLm1qci1tZnYtZ2VuLWNhcmQtdmFsdWUuaXMtbXVsdGlsaW5lIHsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKfQoKLm1qci1tZnYtZ2VuLWNhcmQtLXNlZWQgLm1qci1tZnYtZ2VuLWNhcmQtdmFsdWUgewogICAgZm9udC1zaXplOiAxOHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGZvbnQtZmFtaWx5OiBDb25zb2xhcywgTW9uYWNvLCBtb25vc3BhY2U7CiAgICBsZXR0ZXItc3BhY2luZzogMXB4OwogICAgY29sb3I6ICNmZmY7Cn0KCi5tanItbWZ2LWdlbi1jYXJkLXZhbHVlLmlzLWZpZWxkcyB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICBnYXA6IDhweDsKfQoKLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImJvdHRvbSJdIC5tanItbWZ2LWdlbi1jYXJkLXZhbHVlLmlzLWZpZWxkcyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogN3B4OwogICAgLXdlYmtpdC1saW5lLWNsYW1wOiB1bnNldDsKfQoKLm1qci1tZnYtZ2VuLWNhcmQtdmFsdWUuaXMtYnJhbmNoLWdyb3VwcyB7CiAgICBnYXA6IDEwcHg7Cn0KCi5tanItbWZ2LWdlbi1icmFuY2gtZ3JvdXAgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDdweDsKICAgIG1pbi13aWR0aDogMDsKICAgIHBhZGRpbmc6IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNDUpOwp9CgoubWpyLW1mdi1nZW4tYnJhbmNoLXRpdGxlIHsKICAgIGNvbG9yOiB2YXIoLS1tanItbWZ2LWdlbi1hY2NlbnQpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDgwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjZweDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KCi5tanItbWZ2LWdlbi1maWVsZCB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoNzhweCwgYXV0bykgMWZyOwogICAgZ2FwOiAxMHB4OwogICAgYWxpZ24taXRlbXM6IHN0YXJ0OwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci1tZnYtZ2VuLWZpZWxkIHsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDU0cHgsIGF1dG8pIG1pbm1heCgwLCAxZnIpOwp9CgoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci1tZnYtZ2VuLWZpZWxkLXZhbHVlIHsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItbWZ2LWdlbi1maWVsZC1sYWJlbCB7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkLCByZ2JhKDE4MCwgMTgwLCAxODAsIDAuNzIpKTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCi5tanItbWZ2LWdlbi1maWVsZC12YWx1ZSB7CiAgICBjb2xvcjogdmFyKC0tZmctY29sb3IsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSkpOwogICAgbWluLXdpZHRoOiAwOwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgd29yZC1icmVhazogYnJlYWstd29yZDsKfQoKLm1qci1tZnYtZ2VuLXNpZGViYXItYm9keSBzdHJvbmcgewogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIG1hcmdpbi1yaWdodDogNHB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSk7Cn0KCi5tanItbWZ2LWdlbi1zaWRlYmFyLWJvZHkgW2RhdGEtZmllbGQ9InByb21wdCJdIHN0cm9uZyB7CiAgICBjb2xvcjogIzdlYzhmZjsKfQoubWpyLW1mdi1nZW4tc2lkZWJhci1ib2R5IFtkYXRhLWZpZWxkPSJzZWVkIl0gc3Ryb25nIHsKICAgIGNvbG9yOiAjZmZkNDdhOwp9Ci5tanItbWZ2LWdlbi1zaWRlYmFyLWJvZHkgW2RhdGEtZmllbGQ9Im1vZGVsIl0gc3Ryb25nIHsKICAgIGNvbG9yOiAjN2RkYThhOwp9Ci5tanItbWZ2LWdlbi1zaWRlYmFyLWJvZHkgW2RhdGEtZmllbGQ9ImxvcmEiXSBzdHJvbmcgewogICAgY29sb3I6ICNkNDhjZmY7Cn0KLm1qci1tZnYtZ2VuLXNpZGViYXItYm9keSBbZGF0YS1maWVsZD0ic2FtcGxlciJdIHN0cm9uZyB7CiAgICBjb2xvcjogI2ZmOWY3YTsKfQoubWpyLW1mdi1nZW4tc2lkZWJhci1ib2R5IFtkYXRhLWZpZWxkPSJzY2hlZHVsZXIiXSBzdHJvbmcgewogICAgY29sb3I6ICNmZjdhOWY7Cn0KLm1qci1tZnYtZ2VuLXNpZGViYXItYm9keSBbZGF0YS1maWVsZD0iY2ZnIl0gc3Ryb25nIHsKICAgIGNvbG9yOiAjN2E5ZmZmOwp9Ci5tanItbWZ2LWdlbi1zaWRlYmFyLWJvZHkgW2RhdGEtZmllbGQ9InN0ZXAiXSBzdHJvbmcgewogICAgY29sb3I6ICM3YWZmZDQ7Cn0KLm1qci1tZnYtZ2VuLXNpZGViYXItYm9keSBbZGF0YS1maWVsZD0iZ2VuVGltZSJdIHN0cm9uZyB7CiAgICBjb2xvcjogI2UwZmY3YTsKfQoKLm1qci1tZnYtZ2VuLXNpZGViYXItYm9keSBkaXYgewogICAgbWFyZ2luLWJvdHRvbTogNXB4Owp9CgoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci1tZnYtZ2VuLXNpZGViYXItYm9keSBkaXYgewogICAgbWFyZ2luLWJvdHRvbTogMDsKfQoKLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImJvdHRvbSJdIC5tanItbWZ2LWdlbi1zaWRlYmFyLWJvZHkgPiBkaXYsCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLW1mdi1nZW4tc2lkZWJhci1ib2R5ID4gc2VjdGlvbiB7CiAgICBtYXJnaW4tYmxvY2s6IDAgMTBweDsKfQoKLm1qci1tZnYtZ2VuLXNpZGViYXItYm9keSBkaXY6bGFzdC1jaGlsZCB7CiAgICBtYXJnaW4tYm90dG9tOiAwOwp9CgpAY29udGFpbmVyIChtYXgtd2lkdGg6IDc2MHB4KSB7CiAgICAubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci1tZnYtZ2VuLXNpZGViYXItYm9keSB7CiAgICAgICAgY29sdW1uczogYXV0bzsKICAgICAgICBjb2x1bW4tY291bnQ6IDE7CiAgICAgICAgY29sdW1uLXdpZHRoOiBhdXRvOwogICAgfQoKICAgIC5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLW1mdi1nZW4tc2lkZWJhci1ib2R5ID4gKiB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICB9Cn0KCi5tanItbWZ2LW92ZXJsYXktY2FudmFzIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDEyOwp9CgoubWpyLW1mdi10b29sYmFyLXNlbGVjdCB7CiAgICBoZWlnaHQ6IDI0cHg7CiAgICBwYWRkaW5nOiAwIDZweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJvcmRlcjogMC44cHggc29saWQgcmdiYSgxOTYsIDIwMiwgMjEwLCAwLjI0KTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjEwLCAyMTQsIDIyMCwgMC4wNiksIHJnYmEoMjEwLCAyMTQsIDIyMCwgMC4wMikpOwogICAgY29sb3I6IHJnYmEoMjMwLCAyMzMsIDIzOCwgMC45Mik7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBvdXRsaW5lOiBub25lOwp9CgoubWpyLW1mdi10b29sYmFyLXJhbmdlIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4Owp9CgoubWpyLW1mdi10b29sYmFyLXJhbmdlIGlucHV0W3R5cGU9InJhbmdlIl0gewogICAgd2lkdGg6IDcycHg7CiAgICBhY2NlbnQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44NSk7Cn0KCi5tanItbWZ2LXRvb2xiYXItcmFuZ2Utb3V0IHsKICAgIG1pbi13aWR0aDogMzBweDsKICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKfQoKLyogRVYgc2xpZGVyIGFjdGl2ZSBzdGF0ZSAodmFsdWUgIT0gMCkgKi8KLm1qci1tZnYtdG9vbGJhci1yYW5nZS5pcy1hY3RpdmUgaW5wdXRbdHlwZT0icmFuZ2UiXSB7CiAgICBhY2NlbnQtY29sb3I6ICNmNWM4NDI7Cn0KLm1qci1tZnYtdG9vbGJhci1yYW5nZS5pcy1hY3RpdmUgLm1qci1tZnYtdG9vbGJhci1yYW5nZS1vdXQgewogICAgY29sb3I6ICNmNWM4NDI7CiAgICBmb250LXdlaWdodDogNjAwOwp9CgoubWpyLW1mdi1tZWRpYS1wcm9ncmVzcyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDEwcHg7CiAgICBsZWZ0OiAxMHB4OwogICAgei1pbmRleDogNjsKICAgIG1heC13aWR0aDogY2FsYygxMDAlIC0gMjBweCk7CiAgICBwYWRkaW5nOiA1cHggOXB4OwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm9yZGVyOiAxcHggc29saWQKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KSkgODglLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgcmdiYSg1LCA4LCAxNCwgMC44NikgODYlLCB2YXIoLS1tanItc3VyZmFjZS0wLCAjMTExKSAxNCUpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNmNWY3ZmEpOwogICAgYm94LXNoYWRvdzogMCAycHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMjgpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBvcGFjaXR5OiAwOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00cHgpOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBvcGFjaXR5IDAuMTZzIGVhc2UsCiAgICAgICAgdHJhbnNmb3JtIDAuMTZzIGVhc2U7Cn0KCi5tanItbWZ2LW1lZGlhLXByb2dyZXNzLmlzLXZpc2libGUgewogICAgb3BhY2l0eTogMTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKfQoKLm1qci1tZnYtbWVkaWEtcHJvZ3Jlc3MuaXMtZXJyb3IgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy1lcnJvciwgI2ZmNWM3YSkgNzIlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgcmdiYSg2MCwgMTAsIDE4LCAwLjkpIDgyJSwgdmFyKC0tbWpyLXN1cmZhY2UtMCwgIzExMSkgMTglKTsKfQoKLm1qci1tZnYtbWVkaWEtcHJvZ3Jlc3MtdGV4dCB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGluZS1oZWlnaHQ6IDEuMjsKfQoKLyogLS0gV29ya2Zsb3cgU2lkZWJhciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoubWpyLXdzLXNpZGViYXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICB3aWR0aDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xLCAjMmEyYTJhKTsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7CiAgICB0cmFuc2l0aW9uOiB3aWR0aCAwLjJzIGVhc2U7CiAgICBmbGV4LXNocmluazogMDsKfQoKLm1qci13cy1zaWRlYmFyLm9wZW4gewogICAgd2lkdGg6IDI2MHB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIG1pbi13aWR0aDogMTgwcHg7CiAgICBtYXgtd2lkdGg6IDY1JTsKICAgIHRyYW5zaXRpb246IG5vbmU7Cn0KCi5tanItd3Mtc2lkZWJhci1oZWFkZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgbWluLWhlaWdodDogMzRweDsKfQoubWpyLXdzLXNpZGViYXItdGl0bGUgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7CiAgICBvcGFjaXR5OiAwLjY1Owp9Ci5tanItd3Mtc2lkZWJhci1ib2R5IHsKICAgIGZsZXg6IDE7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIHBhZGRpbmc6IDA7Cn0KLm1qci13cy1zaWRlYmFyLWVtcHR5IHsKICAgIHBhZGRpbmc6IDI0cHggMTZweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgbGluZS1oZWlnaHQ6IDEuNTsKfQoKLyogLS0gVGFiIGJhciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLm1qci13cy10YWItYmFyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LXNocmluazogMDsKICAgIGdhcDogMnB4OwogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4xOCk7Cn0KCi5tanItd3MtdGFiIHsKICAgIGZsZXg6IDE7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA1cHg7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgYm9yZGVyOiBub25lOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQ1KTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIGJhY2tncm91bmQgMC4xNXMsCiAgICAgICAgY29sb3IgMC4xNXM7Cn0KCi5tanItd3MtdGFiOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNyk7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1KTsKfQoKLm1qci13cy10YWIuaXMtYWN0aXZlIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoOTksIDE1NSwgMjU1LCAwLjE1KTsKICAgIGNvbG9yOiAjNjM5YmZmOwp9CgovKiAtLSBOb2RlcyB0YWIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoubWpyLXdzLW5vZGVzLXRhYiB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGZsZXg6IDE7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLyogR3JhcGggTWFwIHRhYiAqLwoubWpyLXdnbSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIG1pbi1oZWlnaHQ6IDEwMCU7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgyKTsKfQoKLm1qci13Z20tbWFwLXdyYXAgewogICAgaGVpZ2h0OiAxOTBweDsKICAgIG1pbi1oZWlnaHQ6IDE1MHB4OwogICAgbWFyZ2luOiA4cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yMik7Cn0KCi5tanItd2dtLXByZXZpZXcgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjMyKTsKfQoKLm1qci13Z20tcHJldmlldyAubWpyLW1mdi1tZWRpYSwKLm1qci13Z20tcHJldmlldyAubWpyLW1mdi1wbGF5ZXItaG9zdCwKLm1qci13Z20tcHJldmlldyAubWpyLW1vZGVsM2QtaG9zdCwKLm1qci13Z20tcHJldmlldy1tZWRpYSB7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBtYXgtaGVpZ2h0OiAxMDAlOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBvYmplY3QtZml0OiBjb250YWluOwp9CgoubWpyLXdnbS1wcmV2aWV3LWVtcHR5IHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzQpOwogICAgZm9udC1zaXplOiAxMXB4Owp9CgoubWpyLXdnbS1jYW52YXMgewogICAgZGlzcGxheTogYmxvY2s7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGN1cnNvcjogZ3JhYjsKICAgIHRvdWNoLWFjdGlvbjogbm9uZTsKfQoKLm1qci13Z20tY2FudmFzOmFjdGl2ZSB7CiAgICBjdXJzb3I6IGdyYWJiaW5nOwp9CgoubWpyLXdnbS0tbGFyZ2UgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjE4KTsKfQoKLm1qci13Z20tLWxhcmdlIC5tanItd2dtLW1hcC13cmFwIHsKICAgIGZsZXg6IDE7CiAgICBoZWlnaHQ6IGF1dG87CiAgICBtaW4taGVpZ2h0OiAwOwogICAgbWFyZ2luOiAwOwogICAgYm9yZGVyOiBub25lOwogICAgYm9yZGVyLXJhZGl1czogMDsKfQoKLm1qci13Z20tLWxhcmdlIC5tanItd2dtLXN0YXR1cyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAxMHB4OwogICAgdG9wOiAxMHB4OwogICAgei1pbmRleDogMjsKICAgIG1heC13aWR0aDogbWluKDQyMHB4LCBjYWxjKDEwMCUgLSAyMHB4KSk7CiAgICBwYWRkaW5nOiA1cHggOHB4OwogICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC41Mik7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc0KTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig4cHgpOwp9CgoubWpyLXdnbS10b29sYmFyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDEwcHg7CiAgICB0b3A6IDQ2cHg7CiAgICB6LWluZGV4OiAyOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBnYXA6IDZweDsKICAgIG1heC13aWR0aDogbWluKDQyMHB4LCBjYWxjKDEwMCUgLSAyMHB4KSk7Cn0KCi5tanItd2dtLW1vZGUgewogICAgbWluLWhlaWdodDogMjZweDsKICAgIHBhZGRpbmc6IDNweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNSk7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcyKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKfQoKLm1qci13Z20tbW9kZTpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMTQ5LCAxODMsIDI1NSwgMC40NSk7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwp9CgoubWpyLXdnbS1tb2RlLmlzLWFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMTI0LCAxODYsIDI1NSwgMC42Mik7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDc5LCAxMjMsIDIxNCwgMC4yNik7CiAgICBjb2xvcjogcmdiYSgyMzUsIDI0NSwgMjU1LCAwLjk2KTsKfQoKLm1qci13Z20tLWxhcmdlIC5tanItd2dtLWRldGFpbHMgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgcmlnaHQ6IDEwcHg7CiAgICB0b3A6IDEwcHg7CiAgICBib3R0b206IDEwcHg7CiAgICB6LWluZGV4OiAyOwogICAgd2lkdGg6IG1pbigzMjBweCwgMzglKTsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICBwYWRkaW5nOiAxMHB4OwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTgsIDIwLCAyNiwgMC44NCk7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7Cn0KCi5tanItd2dtLS1sYXJnZSAubWpyLXdnbS1hY3Rpb24gewogICAgbWluLWhlaWdodDogMzBweDsKfQoKLm1qci13Z20tLWxhcmdlIC5tanItd2dtLXBhcmFtIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKfQoKLm1qci13Z20tc3RhdHVzIHsKICAgIHBhZGRpbmc6IDAgMTBweCA4cHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQyKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1Owp9CgoubWpyLXdnbS1kZXRhaWxzIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiA2cHg7CiAgICBwYWRkaW5nOiAwIDhweCAxMHB4Owp9CgoubWpyLXdnbS1ub2RlLXRpdGxlIHsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKfQoKLm1qci13Z20tbm9kZS1tZXRhIHsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBtYXJnaW4tdG9wOiAtNHB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40Mik7CiAgICBmb250LXNpemU6IDEwcHg7Cn0KCi5tanItd2dtLWJyZWFkY3J1bWIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDVweDsKICAgIG1pbi13aWR0aDogMDsKICAgIG1hcmdpbjogLTJweCAwIDJweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTgpOwogICAgZm9udC1zaXplOiAxMXB4Owp9CgoubWpyLXdnbS1icmVhZGNydW1iLWl0ZW0gewogICAgbWluLXdpZHRoOiAwOwogICAgbWF4LXdpZHRoOiAxNDBweDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItd2dtLWJyZWFkY3J1bWItc2VwIHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzIpOwp9CgoubWpyLXdnbS1hY3Rpb25zIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgIGdhcDogNHB4Owp9CgoubWpyLXdnbS1hY3Rpb24gewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDdweDsKICAgIG1pbi1oZWlnaHQ6IDI4cHg7CiAgICBwYWRkaW5nOiA1cHggOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc2KTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKfQoKLm1qci13Z20tYWN0aW9uOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSg5OSwgMTU1LCAyNTUsIDAuNDUpOwogICAgYmFja2dyb3VuZDogcmdiYSg5OSwgMTU1LCAyNTUsIDAuMTIpOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45Mik7Cn0KCi5tanItd2dtLWFjdGlvbi5pcy1vayB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoNzYsIDE3NSwgODAsIDAuNTUpOwogICAgY29sb3I6IHJnYmEoMTkwLCAyNTUsIDE5NiwgMC45Nik7Cn0KCi5tanItd2dtLXBhcmFtcyB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA0cHg7CiAgICBtYXJnaW4tdG9wOiAycHg7Cn0KCi5tanItd2dtLXBhcmFtIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCg2NHB4LCAwLjQyZnIpIG1pbm1heCgwLCAxZnIpOwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nOiA1cHggN3B4OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjE4KTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIGJhY2tncm91bmQgMTIwbXMgZWFzZSwKICAgICAgICBib3JkZXItY29sb3IgMTIwbXMgZWFzZTsKfQoKLm1qci13Z20tcGFyYW06aG92ZXIsCi5tanItd2dtLXBhcmFtOmZvY3VzLXZpc2libGUgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KTsKICAgIG91dGxpbmU6IG5vbmU7Cn0KCi5tanItd2dtLXBhcmFtLmlzLW9rIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSg3OSwgMjEwLCAxMjUsIDAuNyk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDc5LCAyMTAsIDEyNSwgMC4xNik7Cn0KCi5tanItd2dtLXBhcmFtLmlzLWVycm9yIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDkwLCA5MCwgMC43KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCA5MCwgOTAsIDAuMTYpOwp9CgoubWpyLXdnbS1wYXJhbS1rZXkgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNDgpOwp9CgoubWpyLXdnbS1wYXJhbS12YWx1ZSB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44Mik7Cn0KCi5tanItd2dtLW5vZGUtdmlzdWFsIHsKICAgIC0tbWpyLXdnbS1ub2RlLWFjY2VudDogcmdiYSgxMTUsIDE1NSwgMjU1LCAwLjg4KTsKICAgIC0tbWpyLXdnbS1ub2RlLWFjY2VudC1zb2Z0OiByZ2JhKDExNSwgMTU1LCAyNTUsIDAuMjIpOwogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogOHB4OwogICAgbWFyZ2luLXRvcDogMnB4OwogICAgcGFkZGluZzogOHB4OwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci13Z20tbm9kZS1hY2NlbnQpIDM0JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpKTsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpLAogICAgICAgIDAgMTBweCAyNHB4IHJnYmEoMCwgMCwgMCwgMC4yNCk7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItd2dtLW5vZGUtYWNjZW50LXNvZnQpIDEwMCUsIHRyYW5zcGFyZW50KSwgcmdiYSg0NCwgNTYsIDg4LCAwLjIpKSwKICAgICAgICByZ2JhKDEzLCAxNiwgMjQsIDAuODUpOwp9CgoubWpyLXdnbS1ub2RlLXZpc3VhbDo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgZGlzcGxheTogYmxvY2s7CiAgICBoZWlnaHQ6IDJweDsKICAgIG1hcmdpbjogLThweCAtOHB4IDZweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweCA2cHggMCAwOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCB2YXIoLS1tanItd2dtLW5vZGUtYWNjZW50KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7Cn0KCi5tanItd2dtLW5vZGUtdmlzdWFsLmlzLW1vZGVsIHsKICAgIC0tbWpyLXdnbS1ub2RlLWFjY2VudDogcmdiYSgxMjQsIDE4NiwgMjU1LCAwLjkpOwogICAgLS1tanItd2dtLW5vZGUtYWNjZW50LXNvZnQ6IHJnYmEoNzAsIDEyMywgMTgxLCAwLjM0KTsKfQoKLm1qci13Z20tbm9kZS12aXN1YWwuaXMtc2FtcGxlciB7CiAgICAtLW1qci13Z20tbm9kZS1hY2NlbnQ6IHJnYmEoMTQzLCAyMjgsIDE2NywgMC45KTsKICAgIC0tbWpyLXdnbS1ub2RlLWFjY2VudC1zb2Z0OiByZ2JhKDY0LCAxMzMsIDg4LCAwLjM0KTsKfQoKLm1qci13Z20tbm9kZS12aXN1YWwuaXMtdGV4dCB7CiAgICAtLW1qci13Z20tbm9kZS1hY2NlbnQ6IHJnYmEoMjU1LCAxOTIsIDExNCwgMC45KTsKICAgIC0tbWpyLXdnbS1ub2RlLWFjY2VudC1zb2Z0OiByZ2JhKDE1NCwgMTAyLCA0OSwgMC4zNCk7Cn0KCi5tanItd2dtLW5vZGUtdmlzdWFsLmlzLW1lZGlhIHsKICAgIC0tbWpyLXdnbS1ub2RlLWFjY2VudDogcmdiYSgxNTQsIDE3MCwgMjU1LCAwLjkpOwogICAgLS1tanItd2dtLW5vZGUtYWNjZW50LXNvZnQ6IHJnYmEoODMsIDkzLCAxNjUsIDAuMzQpOwp9CgoubWpyLXdnbS1ub2RlLXZpc3VhbC5pcy1jb250cm9sIHsKICAgIC0tbWpyLXdnbS1ub2RlLWFjY2VudDogcmdiYSgyNTUsIDEzOSwgMTY5LCAwLjkpOwogICAgLS1tanItd2dtLW5vZGUtYWNjZW50LXNvZnQ6IHJnYmEoMTQ1LCA3MCwgOTUsIDAuMzQpOwp9CgoubWpyLXdnbS1ub2RlLXZpc3VhbC5pcy1sb2dpYyB7CiAgICAtLW1qci13Z20tbm9kZS1hY2NlbnQ6IHJnYmEoMTg4LCAxNjgsIDI1NSwgMC45KTsKICAgIC0tbWpyLXdnbS1ub2RlLWFjY2VudC1zb2Z0OiByZ2JhKDEwNSwgODYsIDE1MywgMC4zNCk7Cn0KCi5tanItd2dtLW5vZGUtdmlzdWFsLWhlYWRlciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZy1ib3R0b206IDZweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXdnbS1ub2RlLWFjY2VudCkgMjUlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpKTsKfQoKLm1qci13Z20tbm9kZS12aXN1YWwtdHlwZSB7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgY29sb3I6IHJnYmEoMjM2LCAyNDQsIDI1NSwgMC45NCk7CiAgICB0ZXh0LXNoYWRvdzogMCAxcHggMCByZ2JhKDAsIDAsIDAsIDAuMzUpOwp9CgoubWpyLXdnbS1ub2RlLXZpc3VhbC1pZCB7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBjb2xvcjogcmdiYSgxOTQsIDIxMywgMjU1LCAwLjc4KTsKfQoKLm1qci13Z20tbm9kZS1wb3J0cyB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOwogICAgZ2FwOiA4cHg7Cn0KCi5tanItd2dtLW5vZGUtcG9ydHMtY29sIHsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci13Z20tbm9kZS1wb3J0cy10aXRsZSB7CiAgICBtYXJnaW4tYm90dG9tOiA0cHg7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMmVtOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNDUpOwp9CgoubWpyLXdnbS1ub2RlLXBvcnRzLWxpc3QgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogM3B4Owp9CgoubWpyLXdnbS1ub2RlLXBvcnQsCi5tanItd2dtLW5vZGUtcG9ydC1lbXB0eSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgbWluLWhlaWdodDogMThweDsKICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjI0KTsKfQoKLm1qci13Z20tbm9kZS1wb3J0LWVtcHR5IHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjYpOwp9CgoubWpyLXdnbS1ub2RlLXBvcnQtZG90IHsKICAgIHdpZHRoOiA4cHg7CiAgICBoZWlnaHQ6IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgZmxleDogMCAwIGF1dG87CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KSBpbnNldDsKfQoKLm1qci13Z20tbm9kZS1wb3J0LWRvdC5pcy1pbiB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDEzNSwgMTk2LCAyNTUsIDAuOSk7Cn0KCi5tanItd2dtLW5vZGUtcG9ydC1kb3QuaXMtb3V0IHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTQ0LCAyMzgsIDE3NCwgMC45KTsKfQoKLm1qci13Z20tbm9kZS1wb3J0LW5hbWUgewogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc4KTsKfQoKLm1qci13Z20tbm9kZS1wb3J0LXR5cGUgewogICAgZmxleDogMCAwIGF1dG87CiAgICBtYXgtd2lkdGg6IDQ1JTsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXNpemU6IDlweDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAyZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgcGFkZGluZzogMXB4IDVweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7CiAgICBjb2xvcjogcmdiYSgyMjQsIDIzNiwgMjU1LCAwLjkpOwp9CgoubWpyLXdnbS1ub2RlLXdpZGdldHMgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogNHB4Owp9CgoubWpyLXdnbS1ub2RlLXdpZGdldHMtdGl0bGUgewogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgZm9udC1zaXplOiAxMHB4OwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQ1KTsKfQoKLm1qci13Z20tbm9kZS13aWRnZXQsCi5tanItd2dtLW5vZGUtd2lkZ2V0LWVtcHR5IHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCg3MHB4LCAwLjQyZnIpIG1pbm1heCgwLCAxZnIpOwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nOiA0cHggNnB4OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsKfQoKLm1qci13Z20tbm9kZS13aWRnZXQgewogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBiYWNrZ3JvdW5kIDEyMG1zIGVhc2UsCiAgICAgICAgYm9yZGVyLWNvbG9yIDEyMG1zIGVhc2U7Cn0KCi5tanItd2dtLW5vZGUtd2lkZ2V0OmhvdmVyLAoubWpyLXdnbS1ub2RlLXdpZGdldDpmb2N1cy12aXNpYmxlIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOSk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICAgIG91dGxpbmU6IG5vbmU7Cn0KCi5tanItd2dtLW5vZGUtd2lkZ2V0LmlzLW9rIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSg3OSwgMjEwLCAxMjUsIDAuNyk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDc5LCAyMTAsIDEyNSwgMC4xNik7Cn0KCi5tanItd2dtLW5vZGUtd2lkZ2V0LmlzLWVycm9yIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDkwLCA5MCwgMC43KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCA5MCwgOTAsIDAuMTYpOwp9CgoubWpyLXdnbS1ub2RlLXdpZGdldC1lbXB0eSB7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzQpOwp9CgoubWpyLXdnbS1ub2RlLXdpZGdldC1rZXkgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTIpOwp9CgoubWpyLXdnbS1ub2RlLXdpZGdldC12YWx1ZSB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44OCk7Cn0KCi5tanItd2dtLW5vZGUtd2lkZ2V0LmlzLW11bHRpbGluZSB7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgIGFsaWduLWl0ZW1zOiBzdGFydDsKICAgIGdhcDogNHB4Owp9CgoubWpyLXdnbS1ub2RlLXdpZGdldC5pcy1tdWx0aWxpbmUgLm1qci13Z20tbm9kZS13aWRnZXQta2V5IHsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItd2dtLW5vZGUtd2lkZ2V0LmlzLW11bHRpbGluZSAubWpyLXdnbS1ub2RlLXdpZGdldC12YWx1ZSB7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwogICAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7CiAgICBsaW5lLWhlaWdodDogMS4zNTsKICAgIG1heC1oZWlnaHQ6IDkuMmVtOwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIHBhZGRpbmctcmlnaHQ6IDJweDsKfQoKLm1qci13Z20tbm9kZS13aWRnZXQuaXMtbXVsdGlsaW5lLmlzLXRleHQtZmllbGQgLm1qci13Z20tbm9kZS13aWRnZXQtdmFsdWUgewogICAgbWF4LWhlaWdodDogMTZlbTsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ7Cn0KCi5tanItd2dtLW5vZGUtd2lkZ2V0LW1vcmUgewogICAgZm9udC1zaXplOiAxMHB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40Nik7CiAgICB0ZXh0LWFsaWduOiByaWdodDsKfQoKQG1lZGlhIChtYXgtd2lkdGg6IDgyMHB4KSB7CiAgICAubWpyLXdnbS0tbGFyZ2UgLm1qci13Z20tZGV0YWlscyB7CiAgICAgICAgd2lkdGg6IG1pbigzODBweCwgY2FsYygxMDAlIC0gMjBweCkpOwogICAgfQoKICAgIC5tanItd2dtLW5vZGUtcG9ydHMgewogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgfQp9CgoubWpyLXdzLXNlYXJjaC13cmFwIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZmxleC1zaHJpbms6IDA7CiAgICBwYWRkaW5nOiA2cHggOHB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwp9CgoubWpyLXdzLXNlYXJjaC1pY29uIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDE2cHg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5tanItd3Mtc2VhcmNoIHsKICAgIGZsZXg6IDE7CiAgICBwYWRkaW5nOiA0cHggMjhweCA0cHggMjZweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4zNSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44NSk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBvdXRsaW5lOiBub25lOwp9CgoubWpyLXdzLXNlYXJjaDo6cGxhY2Vob2xkZXIgewogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yOCk7Cn0KCi5tanItd3Mtc2VhcmNoOmZvY3VzIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSg5OSwgMTU1LCAyNTUsIDAuNSk7Cn0KCi5tanItd3Mtc2VhcmNoLWNsZWFyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHJpZ2h0OiAxNHB4OwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIHdpZHRoOiAxOHB4OwogICAgaGVpZ2h0OiAxOHB4OwogICAgcGFkZGluZzogMDsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKfQoKLm1qci13cy1zZWFyY2gtY2xlYXI6aG92ZXIgewogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7Cn0KCi5tanItd3Mtbm9kZXMtbGlzdCB7CiAgICBmbGV4OiAxOwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIHBhZGRpbmc6IDRweCAwOwp9CgoubWpyLXdzLW5vZGUtcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBwYWRkaW5nOiA1cHggMTBweCA1cHggMTJweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgbWluLWhlaWdodDogMzJweDsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xczsKfQoKLm1qci13cy1ub2RlLXJvdzpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwp9CgoubWpyLXdzLW5vZGUtcm93LXR5cGUgewogICAgZmxleDogMTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzgpOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKfQoKLm1qci13cy1ub2RlLXJvdy10aXRsZSB7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQpOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIG1heC13aWR0aDogODBweDsKICAgIGZsZXgtc2hyaW5rOiAwOwp9CgoubWpyLXdzLW5vZGUtbG9jYXRlIHsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgd2lkdGg6IDIycHg7CiAgICBoZWlnaHQ6IDIycHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgcGFkZGluZzogMDsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIG9wYWNpdHk6IDA7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIG9wYWNpdHkgMC4xcywKICAgICAgICBjb2xvciAwLjFzLAogICAgICAgIGJhY2tncm91bmQgMC4xczsKfQoKLm1qci13cy1ub2RlLXJvdzpob3ZlciAubWpyLXdzLW5vZGUtbG9jYXRlIHsKICAgIG9wYWNpdHk6IDE7Cn0KCi5tanItd3Mtbm9kZS1sb2NhdGU6aG92ZXIgewogICAgY29sb3I6ICM2MzliZmY7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDk5LCAxNTUsIDI1NSwgMC4xNSk7Cn0KCi8qIC0tIE5vZGUgc2VjdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5tanItd3MtdHJlZS1pdGVtIHsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKfQoubWpyLXdzLXRyZWUtaXRlbSA+IC5tanItd3Mtbm9kZSB7CiAgICBib3JkZXItYm90dG9tOiBub25lOwp9Ci5tanItd3MtdHJlZS1pdGVtLS1zdWJncmFwaCB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCwgIzViOGFmMCkgNCUsIHRyYW5zcGFyZW50IDk2JSk7Cn0KLm1qci13cy1ub2RlIHsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKfQovKiBTdWJ0bGUgaGlnaGxpZ2h0IHdoZW4gdGhpcyBub2RlIG1hdGNoZXMgdGhlIGN1cnJlbnQgZ3JhcGggc2VsZWN0aW9uLiAqLwoubWpyLXdzLW5vZGUuaXMtc2VsZWN0ZWQtZnJvbS1ncmFwaCB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjEwLCA5MCwgMC4wOCk7CiAgICBib3gtc2hhZG93OiBpbnNldCAycHggMCAwIDAgcmdiYSgyNTUsIDIxMCwgOTAsIDAuNzUpOwp9Ci5tanItd3Mtbm9kZS5pcy1zZWxlY3RlZC1mcm9tLWdyYXBoIC5tanItd3Mtbm9kZS1oZWFkZXIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsICNmZmQ0NWEgMTglLCB2YXIoLS1tanItc3VyZmFjZS0xLCAjMmEyYTJhKSA4MiUpOwp9Ci5tanItd3Mtbm9kZS5pcy1zZWxlY3RlZC1mcm9tLWdyYXBoIC5tanItd3Mtbm9kZS10eXBlIHsKICAgIGNvbG9yOiAjZmZkNDVhOwp9Ci5tanItd3Mtbm9kZS5pcy1zZWxlY3RlZC1mcm9tLWdyYXBoIC5tanItd3Mtbm9kZS10aXRsZSB7CiAgICBjb2xvcjogcmdiYSgyNTUsIDIyNCwgMTMwLCAwLjg4KTsKfQoubWpyLXdzLW5vZGUuaXMtc2VsZWN0ZWQtZnJvbS1ncmFwaCAubWpyLXdzLW5vZGUtdG9nZ2xlLAoubWpyLXdzLW5vZGUuaXMtc2VsZWN0ZWQtZnJvbS1ncmFwaCAubWpyLXdzLWxvY2F0ZSwKLm1qci13cy1ub2RlLmlzLXNlbGVjdGVkLWZyb20tZ3JhcGggLm1qci13cy1ub2RlLWtpbmQgewogICAgY29sb3I6ICNmZmQ0NWE7Cn0KLm1qci13cy1zaWRlYmFyLXJlc2l6ZXIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAwOwogICAgYm90dG9tOiAwOwogICAgd2lkdGg6IDE0cHg7CiAgICB6LWluZGV4OiAyOwogICAgY3Vyc29yOiBldy1yZXNpemU7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKfQoKLm1qci13cy1zaWRlYmFyLXJlc2l6ZXI6OmJlZm9yZSB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNTAlOwogICAgbGVmdDogNTAlOwogICAgd2lkdGg6IDRweDsKICAgIGhlaWdodDogNTZweDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7CiAgICBvcGFjaXR5OiAwOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBvcGFjaXR5IDAuMTVzIGVhc2UsCiAgICAgICAgYmFja2dyb3VuZCAwLjE1cyBlYXNlOwp9CgoubWpyLXdzLXNpZGViYXIub3Blbjpob3ZlciAubWpyLXdzLXNpZGViYXItcmVzaXplcjo6YmVmb3JlLAoubWpyLXdzLXNpZGViYXIuaXMtcmVzaXppbmcgLm1qci13cy1zaWRlYmFyLXJlc2l6ZXI6OmJlZm9yZSwKLm1qci13cy1zaWRlYmFyLXJlc2l6ZXIuaXMtZHJhZ2dpbmc6OmJlZm9yZSB7CiAgICBvcGFjaXR5OiAxOwp9CgoubWpyLXdzLXNpZGViYXIuaXMtcmVzaXppbmcgLm1qci13cy1zaWRlYmFyLXJlc2l6ZXI6OmJlZm9yZSwKLm1qci13cy1zaWRlYmFyLXJlc2l6ZXI6aG92ZXI6OmJlZm9yZSwKLm1qci13cy1zaWRlYmFyLXJlc2l6ZXIuaXMtZHJhZ2dpbmc6OmJlZm9yZSB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzQpOwp9CgoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0icmlnaHQiXSAubWpyLXdzLXNpZGViYXItcmVzaXplciB7CiAgICByaWdodDogMDsKfQoKLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImxlZnQiXSAubWpyLXdzLXNpZGViYXItcmVzaXplciB7CiAgICBsZWZ0OiAwOwp9CgoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci13cy1zaWRlYmFyLXJlc2l6ZXIgewogICAgZGlzcGxheTogbm9uZTsKfQoubWpyLXdzLW5vZGUtaGVhZGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peCgKICAgICAgICBpbiBzcmdiLAogICAgICAgIHZhcigtLW1qci1zdXJmYWNlLTAsICMxZTFlMWUpIDQwJSwKICAgICAgICB2YXIoLS1tanItc3VyZmFjZS0xLCAjMmEyYTJhKSA2MCUKICAgICk7CiAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xMnMgZWFzZTsKfQoubWpyLXdzLW5vZGUuaXMtY29sbGFwc2libGUgLm1qci13cy1ub2RlLWhlYWRlciB7CiAgICBjdXJzb3I6IHBvaW50ZXI7Cn0KLm1qci13cy1ub2RlLmlzLWNvbGxhcHNpYmxlIC5tanItd3Mtbm9kZS1oZWFkZXI6aG92ZXIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KAogICAgICAgIGluIHNyZ2IsCiAgICAgICAgdmFyKC0tbWpyLXN1cmZhY2UtMCwgIzFlMWUxZSkgMjglLAogICAgICAgIHZhcigtLW1qci1zdXJmYWNlLTEsICMyYTJhMmEpIDcyJQogICAgKTsKfQoubWpyLXdzLW5vZGUuaXMtY29sbGFwc2libGUuaXMtY29sbGFwc2VkIC5tanItd3Mtbm9kZS1oZWFkZXI6aG92ZXIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KAogICAgICAgIGluIHNyZ2IsCiAgICAgICAgdmFyKC0tbWpyLWFjY2VudCwgIzViOGFmMCkgOCUsCiAgICAgICAgdmFyKC0tbWpyLXN1cmZhY2UtMSwgIzJhMmEyYSkgOTIlCiAgICApOwp9Ci5tanItd3Mtbm9kZS10b2dnbGUgewogICAgZmxleDogMCAwIGF1dG87Cn0KLm1qci13cy1ub2RlLXRpdGxlLXdyYXAgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAxcHg7Cn0KLm1qci13cy1ub2RlLXR5cGUgewogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cn0KLm1qci13cy1ub2RlLXRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNDgpOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKfQoubWpyLXdzLW5vZGUta2luZCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDRweDsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgbWF4LXdpZHRoOiAxMTBweDsKICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCwgIzViOGFmMCkgMzglLCB0cmFuc3BhcmVudCA2MiUpOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCwgIzViOGFmMCkgMTIlLCB0cmFuc3BhcmVudCA4OCUpOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCAjNWI4YWYwKSA3OCUsICNmZmZmZmYgMjIlKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMS4yOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoubWpyLXdzLW5vZGUta2luZCAucGkgewogICAgZm9udC1zaXplOiAxMHB4Owp9Ci5tanItd3Mtbm9kZS1raW5kLWNvdW50IHsKICAgIG1pbi13aWR0aDogMTRweDsKICAgIHBhZGRpbmc6IDAgM3B4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44Mik7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KLm1qci13cy1ub2RlLmlzLWNvbGxhcHNlZCAubWpyLXdzLW5vZGUtYm9keSB7CiAgICBkaXNwbGF5OiBub25lOwp9Ci5tanItd3Mtbm9kZS1ib2R5IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiA0cHg7CiAgICBwYWRkaW5nOiA2cHggMTBweDsKfQoubWpyLXdzLW5vZGUtZW1wdHkgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKTsKICAgIHBhZGRpbmc6IDRweCAwOwp9CgovKiAtLSBOZXN0ZWQgbm9kZXMgKGluc2lkZSBzdWJncmFwaHMpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5tanItd3Mtbm9kZS0tbmVzdGVkIHsKICAgIGJvcmRlci1sZWZ0OiAycHggc29saWQgcmdiYSg5MSwgMTM4LCAyNDAsIDAuMzUpOwp9Ci5tanItd3Mtbm9kZS0tbmVzdGVkIC5tanItd3Mtbm9kZS1oZWFkZXIgewogICAgcGFkZGluZy1sZWZ0OiAxNnB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KAogICAgICAgIGluIHNyZ2IsCiAgICAgICAgdmFyKC0tbWpyLWFjY2VudCwgIzViOGFmMCkgNSUsCiAgICAgICAgdmFyKC0tbWpyLXN1cmZhY2UtMSwgIzJhMmEyYSkgOTUlCiAgICApOwp9Ci5tanItd3Mtbm9kZS0tbmVzdGVkLmlzLWNvbGxhcHNpYmxlIC5tanItd3Mtbm9kZS1oZWFkZXI6aG92ZXIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KAogICAgICAgIGluIHNyZ2IsCiAgICAgICAgdmFyKC0tbWpyLWFjY2VudCwgIzViOGFmMCkgMTAlLAogICAgICAgIHZhcigtLW1qci1zdXJmYWNlLTEsICMyYTJhMmEpIDkwJQogICAgKTsKfQoKLyogLS0gU3ViZ3JhcGggY2hpbGRyZW4gZ3JvdXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLm1qci13cy1jaGlsZHJlbi10b2dnbGUgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDZweDsKICAgIHdpZHRoOiAxMDAlOwogICAgcGFkZGluZzogNXB4IDEwcHggNXB4IDIwcHg7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoCiAgICAgICAgaW4gc3JnYiwKICAgICAgICB2YXIoLS1tanItYWNjZW50LCAjNWI4YWYwKSA2JSwKICAgICAgICB2YXIoLS1tanItc3VyZmFjZS0wLCAjMWUxZTFlKSA5NCUKICAgICk7CiAgICBib3JkZXI6IG5vbmU7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7CiAgICBjb2xvcjogdmFyKC0tbWpyLWFjY2VudCwgIzViOGFmMCk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgb3BhY2l0eTogMC44OwogICAgdHJhbnNpdGlvbjoKICAgICAgICBvcGFjaXR5IDAuMXMgZWFzZSwKICAgICAgICBiYWNrZ3JvdW5kIDAuMXMgZWFzZTsKfQoubWpyLXdzLWNoaWxkcmVuLXRvZ2dsZS0tbmVzdGVkIHsKICAgIHBhZGRpbmctbGVmdDogMjhweDsKfQoubWpyLXdzLWNoaWxkcmVuLXRvZ2dsZTpob3ZlciB7CiAgICBvcGFjaXR5OiAxOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KAogICAgICAgIGluIHNyZ2IsCiAgICAgICAgdmFyKC0tbWpyLWFjY2VudCwgIzViOGFmMCkgMTIlLAogICAgICAgIHZhcigtLW1qci1zdXJmYWNlLTAsICMxZTFlMWUpIDg4JQogICAgKTsKfQoubWpyLXdzLWNoaWxkcmVuLXRvZ2dsZVthcmlhLWV4cGFuZGVkPSJ0cnVlIl0gewogICAgb3BhY2l0eTogMTsKfQoubWpyLXdzLWNoaWxkcmVuIHsKICAgIGJvcmRlci1sZWZ0OiAycHggc29saWQgcmdiYSg5MSwgMTM4LCAyNDAsIDAuMjUpOwogICAgbWFyZ2luLWxlZnQ6IDZweDsKICAgIHBhZGRpbmctbGVmdDogNnB4Owp9CgoubWpyLXdzLXdpZGdldC1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgZ2FwOiA4cHg7Cn0KLm1qci13cy13aWRnZXQtcm93LS1ibG9jayB7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAycHg7Cn0KLm1qci13cy13aWRnZXQtcm93LS1ibG9jayAubWpyLXdzLXdpZGdldC1sYWJlbCB7CiAgICBmbGV4OiBub25lOwogICAgcGFkZGluZy10b3A6IDA7Cn0KLm1qci13cy13aWRnZXQtcm93LS1ibG9jayAubWpyLXdzLXdpZGdldC1pbnB1dCB7CiAgICB3aWR0aDogMTAwJTsKfQoubWpyLXdzLXdpZGdldC1sYWJlbCB7CiAgICBmbGV4OiAwIDAgODBweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGNvbG9yOiB2YXIoLS1kZXNjcmlwLXRleHQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NSkpOwogICAgcGFkZGluZy10b3A6IDVweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cn0KLm1qci13cy13aWRnZXQtaW5wdXQgewogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMDsKfQoubWpyLXdzLWlucHV0IHsKICAgIHdpZHRoOiAxMDAlOwogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktaW5wdXQtYmcsICMyMjIpOwogICAgY29sb3I6IHZhcigtLWlucHV0LXRleHQsICNkZGQpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBwYWRkaW5nOiA0cHggNnB4OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICBvdXRsaW5lOiBub25lOwogICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDEyMG1zIGVhc2U7Cn0KLm1qci13cy1pbnB1dDpmb2N1cyB7CiAgICBib3JkZXItY29sb3I6IHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpOwp9Ci5tanItd3MtdGV4dGFyZWEgewogICAgcmVzaXplOiBub25lOwogICAgbWluLWhlaWdodDogMjhweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICBvdmVyZmxvdy15OiBoaWRkZW47Cn0KLm1qci13cy10ZXh0LXdyYXBwZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDJweDsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDA7Cn0KLm1qci13cy10ZXh0LXdyYXBwZXIgLm1qci13cy10ZXh0YXJlYSB7CiAgICB3aWR0aDogMTAwJTsKfQoubWpyLXdzLWV4cGFuZC1idG4gewogICAgYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgYm9yZGVyOiBub25lOwogICAgY29sb3I6IHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgcGFkZGluZzogMCA0cHg7CiAgICBvcGFjaXR5OiAwLjg7Cn0KLm1qci13cy1leHBhbmQtYnRuOmhvdmVyIHsKICAgIG9wYWNpdHk6IDE7CiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKfQoubWpyLXdzLXJlYWRvbmx5IHsKICAgIG9wYWNpdHk6IDAuNTsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoubWpyLXdzLWNoZWNrYm94IHsKICAgIGFjY2VudC1jb2xvcjogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7CiAgICB3aWR0aDogMTZweDsKICAgIGhlaWdodDogMTZweDsKICAgIG1hcmdpbi10b3A6IDRweDsKfQoubWpyLXdzLXRvZ2dsZS1sYWJlbCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKfQoKLyogLS0gTG9jYXRlIGJ1dHRvbiBpbnNpZGUgbm9kZSBoZWFkZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLm1qci13cy1sb2NhdGUgewogICAgd2lkdGg6IDI0cHggIWltcG9ydGFudDsKICAgIGhlaWdodDogMjRweCAhaW1wb3J0YW50OwogICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgb3BhY2l0eTogMC41Owp9Ci5tanItd3MtbG9jYXRlOmhvdmVyIHsKICAgIG9wYWNpdHk6IDE7Cn0KCi8qIC0tIFJ1biBidXR0b24gc3RhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5tanItbWZ2LXJ1bi1jb250cm9scyB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDRweDsKfQoubWpyLW1mdi1ydW4tYnRuIC5waSB7CiAgICBjb2xvcjogdmFyKC0tbWpyLXN0YXR1cy1zdWNjZXNzLCAjNGNhZjUwKTsKfQoubWpyLW1mdi1ydW4tYnRuLnJ1bm5pbmcgLnBpIHsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42NSkpOwp9Ci5tanItbWZ2LXJ1bi1idG4uc3RvcHBpbmcgLnBpIHsKICAgIGNvbG9yOiB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZmE3MjYpOwp9Ci5tanItbWZ2LXJ1bi1idG4uZXJyb3IgLnBpIHsKICAgIGNvbG9yOiAjZjQ0MzM2Owp9CgoubWpyLW1mdi1zdG9wLWJ0biAucGkgewogICAgY29sb3I6ICNlZjUzNTA7Cn0KLm1qci1tZnYtc3RvcC1idG4uYWN0aXZlIC5waSB7CiAgICBjb2xvcjogI2ZmOGE2NTsKfQoubWpyLW1mdi1zdG9wLWJ0bi5zdG9wcGluZyAucGkgewogICAgY29sb3I6IHZhcigtLW1qci1zdGF0dXMtd2FybmluZywgI2ZmYTcyNik7Cn0KCi8qIC0tIEZsb2F0aW5nIFZpZXdlciBzaW1wbGUgdmlkZW8gcGxheWVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLm1qci1tZnYtc2ltcGxlLXBsYXllciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLmlzLWF1ZGlvIHsKICAgIGJhY2tncm91bmQ6IHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgMjAlIDIwJSwgcmdiYSg5NSwgMTc5LCAyNTUsIDAuMiksIHJnYmEoMTgsIDIwLCAyOCwgMC45NSkpOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLWF1ZGlvLWJhY2tkcm9wIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMnB4OwogICAgdGV4dC1zaGFkb3c6IDAgMnB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjQ1KTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgcGFkZGluZzogMThweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci1jb250cm9scyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAxMnB4OwogICAgcmlnaHQ6IDEycHg7CiAgICBib3R0b206IDEycHg7CiAgICB6LWluZGV4OiAzMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nOiA5cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDE0cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHRvcCwgcmdiYSgxMCwgMTAsIDE0LCAwLjc2KSwgcmdiYSgxNiwgMTYsIDI0LCAwLjU1KSk7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTsKICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLXJvdyB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci1zZWVrIHsKICAgIC0tbWpyLXNlZWstcGN0OiAwJTsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogNnB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBvdXRsaW5lOiBub25lOwogICAgYm9yZGVyOiBub25lOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIHRvIHJpZ2h0LAogICAgICAgICNmZjJmNTIgMCUsCiAgICAgICAgI2ZmMmY1MiB2YXIoLS1tanItc2Vlay1wY3QpLAogICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNCkgdmFyKC0tbWpyLXNlZWstcGN0KSwKICAgICAgICByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjQpIDEwMCUKICAgICk7CiAgICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItc2Vlazo6LXdlYmtpdC1zbGlkZXItdGh1bWIgewogICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgd2lkdGg6IDEycHg7CiAgICBoZWlnaHQ6IDEycHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zNSk7CiAgICBiYWNrZ3JvdW5kOiAjZmYyZjUyOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLXNlZWs6Oi1tb3otcmFuZ2UtdGh1bWIgewogICAgd2lkdGg6IDEycHg7CiAgICBoZWlnaHQ6IDEycHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zNSk7CiAgICBiYWNrZ3JvdW5kOiAjZmYyZjUyOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLWJ0biB7CiAgICB3aWR0aDogMzBweDsKICAgIGhlaWdodDogMzBweDsKICAgIG1pbi13aWR0aDogMzBweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIyKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7Cn0KCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItYnRuIC5waSB7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk1KTsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci1idG4uaXMtZGlzYWJsZWQsCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItc2Vlay5pcy1kaXNhYmxlZCB7CiAgICBvcGFjaXR5OiAwLjQ1OwogICAgY3Vyc29yOiBkZWZhdWx0Owp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLXRpbWUgewogICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkyKTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7Cn0KCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItZnJhbWUgewogICAgbWFyZ2luLXJpZ2h0OiAycHg7CiAgICBwYWRkaW5nOiAzcHggOHB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgY29udGFpbmVyLXR5cGU6IGlubGluZS1zaXplOwp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdC0tYXVkaW8gewogICAgYmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAyMCUgMjAlLCByZ2JhKDk1LCAxNzksIDI1NSwgMC4yKSwgcmdiYSgxOCwgMjAsIDI4LCAwLjk1KSk7Cn0KCi5tanItbWZ2LXBsYXllci1hdWRpby1iYWNrZHJvcCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjJweDsKICAgIHRleHQtc2hhZG93OiAwIDJweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC40NSk7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHBhZGRpbmc6IDE4cHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9scyB7CiAgICB6LWluZGV4OiAzMDsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXSwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSB7CiAgICBsZWZ0OiA4cHg7CiAgICByaWdodDogOHB4OwogICAgYm90dG9tOiA4cHg7CiAgICBwYWRkaW5nOiA4cHg7CiAgICBnYXA6IDZweDsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXSAubWpyLXZpZGVvLXJvdy0tdG9wLAoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0ic3RhY2tlZCJdIC5tanItdmlkZW8tcm93LS10b3AgewogICAgZ2FwOiA4cHg7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0gLm1qci12aWRlby10aW1lZ3JvdXAsCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0gLm1qci12aWRlby10aW1lZ3JvdXAgewogICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgZ2FwOiA2cHg7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0gLm1qci12aWRlby1yb3ctLWJvdHRvbSwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLXJvdy0tYm90dG9tIHsKICAgIGZsZXgtd3JhcDogbm93cmFwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGdhcDogNnB4Owp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0iY29tcGFjdCJdIC5tanItdmlkZW8tYm90dG9tLAoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0ic3RhY2tlZCJdIC5tanItdmlkZW8tYm90dG9tIHsKICAgIGZsZXgtc2hyaW5rOiAxOwogICAgZmxleC13cmFwOiBub3dyYXA7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0gLm1qci12aWRlby10cmFuc3BvcnQsCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0gLm1qci12aWRlby10cmFuc3BvcnQgewogICAgZmxleC13cmFwOiBub3dyYXA7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0gLm1qci12aWRlby1ncm91cCwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLWdyb3VwIHsKICAgIGZsZXgtd3JhcDogbm93cmFwOwp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0iY29tcGFjdCJdIC5tanItdmlkZW8tc2Vlay13cmFwLAoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0ic3RhY2tlZCJdIC5tanItdmlkZW8tc2Vlay13cmFwIHsKICAgIG1pbi13aWR0aDogMDsKfQoKLyogVGhlIE1GViB1c2VzIHRoZSAiLS12aWV3ZXIiIGNvbnRyb2wgdmFyaWFudCwgd2hpY2ggKHVubGlrZSAiLS12aWV3ZXJiYXIiKQogICBkb2VzIG5vdCBzaXplIHRoZSBuYXRpdmUgc2VlayBpbnB1dCBhbmQgcGFja3MgZnJhbWUvaW4vc2Vlay9vdXQvdGltZSBpbnRvIGEKICAgc2luZ2xlIHJvdy4gSW4gdGhlIG5hcnJvdyBNRlYgdGhlIHNlZWsgd3JhcCB0aGVuIGNvbGxhcHNlcyB0byB+MHB4IHdpZGUgYW5kCiAgIHRoZSBuYXRpdmUgaW5wdXQgdG8gMHB4IHRhbGwsIGxlYXZpbmcgYWxtb3N0IG5vIGNsaWNrIC8gZHJhZyB0YXJnZXQgZm9yCiAgIHNjcnViYmluZy4gR2l2ZSB0aGUgc2VlayBpdHMgb3duIGZ1bGwtd2lkdGggcm93IHdpdGggYSB1c2FibGUgaGl0IGFyZWEuICovCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlciAubWpyLXZpZGVvLXJvdy0tdG9wIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgcm93LWdhcDogNDJweDsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyIC5tanItdmlkZW8tcm93LS10b3AgLm1qci12aWRlby1zZWVrLXdyYXAgewogICAgb3JkZXI6IDEwOwogICAgZmxleDogMSAxIDEwMCU7CiAgICB3aWR0aDogMTAwJTsKICAgIG1pbi13aWR0aDogMDsKICAgIG1pbi1oZWlnaHQ6IDQycHg7CiAgICBwYWRkaW5nLXRvcDogNnB4Owp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXIgLm1qci12aWRlby1yYW5nZS0tc2VlayB7CiAgICBoZWlnaHQ6IDIwcHg7CiAgICBhY2NlbnQtY29sb3I6IHJnYmEoMjE0LCAyMTgsIDIyNCwgMC45Mik7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlciAubWpyLXZpZGVvLXNlZWstem9uZXMgewogICAgaGVpZ2h0OiAxMHB4Owp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXIgLm1qci12aWRlby1zZWVrLWhhbmRsZSB7CiAgICB3aWR0aDogMTZweDsKICAgIGhlaWdodDogMjhweDsKICAgIHRvcDogMjBweDsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXSAubWpyLXZpZGVvLWJhci10aW1lbGluZSwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLWJhci10aW1lbGluZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QKICAgIC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0KICAgIC5tanItdmlkZW8tYmFyLXRpbWVsaW5lCiAgICAubWpyLXZpZGVvLXNlZWstd3JhcCwKLm1qci1tZnYtcGxheWVyLWhvc3QKICAgIC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0KICAgIC5tanItdmlkZW8tYmFyLXRpbWVsaW5lCiAgICAubWpyLXZpZGVvLXNlZWstd3JhcCB7CiAgICBvcmRlcjogLTE7CiAgICBmbGV4OiAxIDEgMTAwJTsKICAgIHdpZHRoOiAxMDAlOwp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdAogICAgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXQogICAgLm1qci12aWRlby1iYXItdGltZWxpbmUKICAgIC5tanItdmlkZW8tZ3JvdXAtLWluLAoubWpyLW1mdi1wbGF5ZXItaG9zdAogICAgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXQogICAgLm1qci12aWRlby1iYXItdGltZWxpbmUKICAgIC5tanItdmlkZW8tZ3JvdXAtLW91dCwKLm1qci1tZnYtcGxheWVyLWhvc3QKICAgIC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0KICAgIC5tanItdmlkZW8tYmFyLXRpbWVsaW5lCiAgICAubWpyLXZpZGVvLWdyb3VwLS1pbiwKLm1qci1tZnYtcGxheWVyLWhvc3QKICAgIC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0KICAgIC5tanItdmlkZW8tYmFyLXRpbWVsaW5lCiAgICAubWpyLXZpZGVvLWdyb3VwLS1vdXQgewogICAgZmxleDogMCAxIGF1dG87Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0gLm1qci12aWRlby1yYW5nZS1jb3VudCwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXSAubWpyLXZpZGVvLWZyYW1lIHsKICAgIG1pbi13aWR0aDogYXV0bzsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLXJhbmdlLWNvdW50IHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLWZyYW1lIHsKICAgIG1pbi13aWR0aDogYXV0bzsKICAgIHBhZGRpbmc6IDNweCA2cHg7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0gLm1qci12aWRlby1idG4tLWluLAoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0ic3RhY2tlZCJdIC5tanItdmlkZW8tYnRuLS1vdXQsCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0gLm1qci12aWRlby1idG4tLW1hcmsgewogICAgbWluLXdpZHRoOiAzMnB4Owp9CgpAY29udGFpbmVyIChtYXgtd2lkdGg6IDkwMHB4KSB7CiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzIHsKICAgICAgICBsZWZ0OiA4cHg7CiAgICAgICAgcmlnaHQ6IDhweDsKICAgICAgICBib3R0b206IDhweDsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgZ2FwOiA2cHg7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1yb3ctLXRvcCB7CiAgICAgICAgZ2FwOiA4cHg7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby10aW1lZ3JvdXAgewogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgICBnYXA6IDZweDsKICAgIH0KCiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLXJvdy0tYm90dG9tIHsKICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGdhcDogNnB4OwogICAgfQoKICAgIC5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tYm90dG9tIHsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgIH0KCiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLXRyYW5zcG9ydCB7CiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1ncm91cCB7CiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1zZWVrLXdyYXAgewogICAgICAgIG1pbi13aWR0aDogMDsKICAgIH0KCiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1iYXItdGltZWxpbmUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QKICAgICAgICAubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIKICAgICAgICAubWpyLXZpZGVvLWJhci10aW1lbGluZQogICAgICAgIC5tanItdmlkZW8tc2Vlay13cmFwIHsKICAgICAgICBvcmRlcjogLTE7CiAgICAgICAgZmxleDogMSAxIDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICB9Cn0KCkBjb250YWluZXIgKG1heC13aWR0aDogNjgwcHgpIHsKICAgIC5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHMgewogICAgICAgIHBhZGRpbmc6IDZweDsKICAgIH0KCiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWJ0biB7CiAgICAgICAgcGFkZGluZzogNXB4IDhweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1udW0gewogICAgICAgIHBhZGRpbmc6IDRweCA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgfQoKICAgIC5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tdGltZSwKICAgIC5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tZnJhbWUsCiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLXJhbmdlLWNvdW50IHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICB9Cn0KCi8qIC0tIFNldHRpbmdzIGJ1dHRvbiBhY3RpdmUgc3RhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5tanItbWZ2LXNldHRpbmdzLWJ0bi5hY3RpdmUgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoCiAgICAgICAgaW4gc3JnYiwKICAgICAgICB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKSA1NSUsCiAgICAgICAgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSkKICAgICk7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvci1taXgoCiAgICAgICAgaW4gc3JnYiwKICAgICAgICB2YXIoLS1tanItc3VyZmFjZS0yLCAjMzMzKSA3MCUsCiAgICAgICAgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZikgMTglCiAgICApOwp9Ci5tanItbWZ2LXNldHRpbmdzLWJ0bi5hY3RpdmUgLnBpIHsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKfQoKLyogLS0gQ2xvc2UgYnV0dG9uIChyZWQpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoubWpyLW1mdiAubWpyLW1mdi1jbG9zZS1idG4gewogICAgY29sb3I6ICNlODUwNTA7Cn0KLm1qci1tZnYgLm1qci1tZnYtY2xvc2UtYnRuOmhvdmVyIHsKICAgIGNvbG9yOiAjZmY2YjZiOwogICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyMzIsIDgwLCA4MCwgMC4xNSk7Cn0KCi8qIC0tIEVtcHR5IHN0YXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLm1qci1tZnYtZW1wdHkgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHBhZGRpbmc6IDEycHg7Cn0KCi8qIC0tIENvbXBhcmUgbGFiZWxzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLm1qci1tZnYtbGFiZWwgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiA4cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNTgpOwogICAgY29sb3I6ICNmZmY7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgcGFkZGluZzogMnB4IDdweDsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgei1pbmRleDogMjA7CiAgICBsZXR0ZXItc3BhY2luZzogMC40cHg7Cn0KCi5tanItbWZ2LWxhYmVsLmxhYmVsLWxlZnQgewogICAgbGVmdDogOHB4Owp9Ci5tanItbWZ2LWxhYmVsLmxhYmVsLXJpZ2h0IHsKICAgIHJpZ2h0OiA4cHg7Cn0KCi8qIC0tIEFCIGRpdmlkZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLm1qci1tZnYtYWItZGl2aWRlciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDA7CiAgICBib3R0b206IDA7CiAgICB3aWR0aDogMC41cHg7CiAgICBjdXJzb3I6IGNvbC1yZXNpemU7CiAgICB6LWluZGV4OiAxMDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44OCk7CiAgICBib3gtc2hhZG93OgogICAgICAgIDAgMCAwIDAuNXB4IHJnYmEoMCwgMCwgMCwgMC40KSwKICAgICAgICAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAxMDBtcyBlYXNlOwp9CgoubWpyLW1mdi1hYi1kaXZpZGVyOjpiZWZvcmUgewogICAgY29udGVudDogIiI7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDA7CiAgICBib3R0b206IDA7CiAgICBsZWZ0OiA1MCU7CiAgICB3aWR0aDogMTJweDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKfQoKLm1qci1tZnYtYWItZGl2aWRlcjpob3ZlciwKLm1qci1tZnYtYWItZGl2aWRlcjphY3RpdmUgewogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIE1GViBHZW9tZXRyeSAmIExheW91dCBDbGFzc2VzIChyZXBsYWNlcyBpbmxpbmUgc3R5bGVzIGluIEZsb2F0aW5nVmlld2VyLmpzKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKLyogTWFpbiBNRlYgY29udGFpbmVyIGdlb21ldHJ5ICovCi5tanItbWZ2IHsKICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgIHRvcDogdmFyKC0tbWpyLW1mdi10b3Atb2Zmc2V0LCA2MHB4KTsKICAgIHJpZ2h0OiAyMHB4OwogICAgd2lkdGg6IDY0MHB4OwogICAgaGVpZ2h0OiAzNjBweDsKICAgIG1pbi13aWR0aDogMjIwcHg7CiAgICBtaW4taGVpZ2h0OiAxNjBweDsKICAgIC8qIEFsd2F5cyBmbGV4OyB2aXNpYmlsaXR5ICsgb3BhY2l0eSBjb250cm9sIHNob3cvaGlkZSBzbyBDU1MgdHJhbnNpdGlvbnMgd29yay4KICAgICAgIHBvaW50ZXItZXZlbnRzOm5vbmUgd2hpbGUgaGlkZGVuIHByZXZlbnRzIGFjY2lkZW50YWwgaW50ZXJhY3Rpb24uICovCiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIHJlc2l6ZTogYm90aDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB6LWluZGV4OiAxMDAwMDsKICAgIC8qIEhpZGRlbiBzdGF0ZSAqLwogICAgb3BhY2l0eTogMDsKICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC02cHgpIHNjYWxlKDAuOTgpOwogICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIHJpZ2h0OwogICAgdHJhbnNpdGlvbjoKICAgICAgICBvcGFjaXR5IDAuMThzIGVhc2Utb3V0LAogICAgICAgIHRyYW5zZm9ybSAwLjE4cyBlYXNlLW91dCwKICAgICAgICB2aXNpYmlsaXR5IDBzIGxpbmVhciAwLjE4czsKfQoKLm1qci1tZnYubWpyLW1mdi0tcmVzaXppbmcgewogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItbWZ2LmlzLXZpc2libGUgewogICAgb3BhY2l0eTogMTsKICAgIHZpc2liaWxpdHk6IHZpc2libGU7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKSBzY2FsZSgxKTsKICAgIHRyYW5zaXRpb246CiAgICAgICAgb3BhY2l0eSAwLjE4cyBlYXNlLW91dCwKICAgICAgICB0cmFuc2Zvcm0gMC4xOHMgZWFzZS1vdXQsCiAgICAgICAgdmlzaWJpbGl0eSAwcyBsaW5lYXIgMHM7Cn0KCi8qIE1lZGlhIGVsZW1lbnRzIChpbWcvdmlkZW8pIHNpemluZyB2YXJpYW50cyAqLwoubWpyLW1mdi1tZWRpYSB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgbWF4LXdpZHRoOiAxMDAlOwogICAgbWF4LWhlaWdodDogMTAwJTsKICAgIG9iamVjdC1maXQ6IGNvbnRhaW47CiAgICBvYmplY3QtcG9zaXRpb246IGNlbnRlcjsKfQoKLm1qci1tZnYtbWVkaWEtLWZpdC1oZWlnaHQgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBtYXgtaGVpZ2h0OiAxMDAlOwogICAgb2JqZWN0LWZpdDogY29udGFpbjsKICAgIG9iamVjdC1wb3NpdGlvbjogY2VudGVyOwp9CgoubWpyLW1mdi1tZWRpYS0tZmlsbCB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIG1heC1oZWlnaHQ6IDEwMCU7CiAgICBvYmplY3QtZml0OiBjb250YWluOwogICAgb2JqZWN0LXBvc2l0aW9uOiBjZW50ZXI7CiAgICBkaXNwbGF5OiBibG9jazsKfQoKLyogQXVkaW8gY2FyZCBpbnNpZGUgTUZWICovCi5tanItbWZ2LWF1ZGlvLWNhcmQgewogICAgd2lkdGg6IG1pbig5MiUsIDU2MHB4KTsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAxMHB4OwogICAgcGFkZGluZzogMTJweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE2MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAyKSk7CiAgICBib3gtc2hhZG93OiAwIDZweCAxNnB4IHJnYmEoMCwgMCwgMCwgMC4zNSk7Cn0KCi5tanItbWZ2LWF1ZGlvLWhlYWQgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1tZnYtYXVkaW8taWNvbiB7CiAgICBjb2xvcjogdmFyKC0tbWpyLWJhZGdlLWF1ZGlvLCAjZmY5ODAwKTsKICAgIG9wYWNpdHk6IDAuOTU7Cn0KCi5tanItbWZ2LWF1ZGlvLXRpdGxlIHsKICAgIG1pbi13aWR0aDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwp9CgoubWpyLW1mdi1hdWRpby1wbGF5ZXIgewogICAgd2lkdGg6IDEwMCU7Cn0KCi5tanItbWZ2LXNpZGUtcGFuZWwgLm1qci1tZnYtYXVkaW8tY2FyZCwKLm1qci1tZnYtYWItbGF5ZXIgLm1qci1tZnYtYXVkaW8tY2FyZCwKLm1qci1tZnYtZ3JpZC1jZWxsIC5tanItbWZ2LWF1ZGlvLWNhcmQgewogICAgd2lkdGg6IGNhbGMoMTAwJSAtIDIwcHgpOwp9CgovKiBWaWRlbyBlbGVtZW50IHNwZWNpZmljIHN0eWxlcyAqLwoubWpyLW1mdi1tZWRpYS12aWRlbyB7CiAgICAvKiBJbmhlcml0cyBmcm9tIC5tanItbWZ2LW1lZGlhIG9yIC5tanItbWZ2LW1lZGlhLS1maWxsICovCn0KCi8qIE5vZGUgU3RyZWFtIC0gY3VycmVudGx5LXN0cmVhbWVkIG5vZGUgYmFkZ2UgKHRvcC1sZWZ0IG9mIGNvbnRlbnQgYXJlYSwKICAgZm9sbG93aW5nIHRoZSBzYW1lIG92ZXJsYXkgcGF0dGVybiBhcyAubWpyLW1mdi1nZW5pbmZvKS4gKi8KLm1qci1tZnYtbm9kZS1vdmVybGF5IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogOHB4OwogICAgbGVmdDogOHB4OwogICAgei1pbmRleDogMTI7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGluZS1oZWlnaHQ6IDEuMzsKICAgIGNvbG9yOiAjZTZmM2ZmOwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjY1KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTIwLCAxNzAsIDI0MCwgMC40NSk7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAxNnB4KTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cn0KLyogR2VuIGluZm8gb3ZlcmxheSAtIGFsbCBtb2RlcyBzaGFyZSBiYXNlIGxheW91dCAqLwoubWpyLW1mdi1nZW5pbmZvLAoubWpyLW1mdi1nZW5pbmZvLWEsCi5tanItbWZ2LWdlbmluZm8tYiB7CiAgICBkaXNwbGF5OiBub25lOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogOHB4OwogICAgcmlnaHQ6IDhweDsKICAgIGJvdHRvbTogOHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjY1KTsKICAgIGNvbG9yOiAjZmZmOwogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBtYXgtaGVpZ2h0OiA0MCU7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgb3ZlcnNjcm9sbC1iZWhhdmlvci15OiBjb250YWluOwogICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgdG91Y2gtYWN0aW9uOiBwYW4teTsKICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOwogICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC40KTsKfQoKLyogS2VlcCBHZW4gSW5mbyBhYm92ZSBjdXN0b20gc2ltcGxlLXBsYXllciBjb250cm9scyB3aGVuIHByZXNlbnQuICovCi5tanItbWZ2LWdlbmluZm8ubWpyLW1mdi1nZW5pbmZvLS1hYm92ZS1wbGF5ZXIsCi5tanItbWZ2LWdlbmluZm8tYS5tanItbWZ2LWdlbmluZm8tLWFib3ZlLXBsYXllciwKLm1qci1tZnYtZ2VuaW5mby1iLm1qci1tZnYtZ2VuaW5mby0tYWJvdmUtcGxheWVyIHsKICAgIHRvcDogOHB4OwogICAgYm90dG9tOiBhdXRvOwogICAgbWF4LWhlaWdodDogbWluKDQ1JSwgY2FsYygxMDAlIC0gMTI0cHgpKTsKfQoKLyogRmFsbGJhY2s6IHdoZW4gc2ltcGxlLXBsYXllciBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIGdlbmluZm8gb3ZlcmxheSwKICAgbW92ZSBpdCB1cCBldmVuIGlmIHRoZSBtb2RpZmllciBjbGFzcyB3YXMgbm90IGF0dGFjaGVkLiAqLwoubWpyLW1mdi1zaW1wbGUtcGxheWVyICsgLm1qci1tZnYtZ2VuaW5mbywKLm1qci1tZnYtc2ltcGxlLXBsYXllciArIC5tanItbWZ2LWdlbmluZm8tYSwKLm1qci1tZnYtc2ltcGxlLXBsYXllciArIC5tanItbWZ2LWdlbmluZm8tYiB7CiAgICB0b3A6IDhweDsKICAgIGJvdHRvbTogYXV0bzsKICAgIG1heC1oZWlnaHQ6IG1pbig0NSUsIGNhbGMoMTAwJSAtIDEyNHB4KSk7Cn0KCi8qIEFCIG1vZGUgb3ZlcmxheXMgYXJlIGF0dGFjaGVkIGF0IGNvbnRhaW5lciBsZXZlbDsgc2hpZnQgdGhlbSB3aGVuIEFCIGxheWVycyB1c2Ugc2ltcGxlLXBsYXllci4gKi8KLm1qci1tZnYtYWItY29udGFpbmVyOmhhcygubWpyLW1mdi1hYi1sYXllciAubWpyLW1mdi1zaW1wbGUtcGxheWVyKSAubWpyLW1mdi1nZW5pbmZvLWEsCi5tanItbWZ2LWFiLWNvbnRhaW5lcjpoYXMoLm1qci1tZnYtYWItbGF5ZXIgLm1qci1tZnYtc2ltcGxlLXBsYXllcikgLm1qci1tZnYtZ2VuaW5mby1iIHsKICAgIHRvcDogOHB4OwogICAgYm90dG9tOiBhdXRvOwogICAgbWF4LWhlaWdodDogbWluKDQ1JSwgY2FsYygxMDAlIC0gMTI0cHgpKTsKfQoKLyogU2hhcmVkIHN0eWxlIGZvciBhbGwgZ2VuIGluZm8gb3ZlcmxheSB2YXJpYW50cyAqLwoubWpyLW1mdi1nZW5pbmZvIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1hIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1iIHN0cm9uZyB7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbWFyZ2luLXJpZ2h0OiA0cHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk1KTsgLyogZGVmYXVsdCAtIG92ZXJyaWRkZW4gcGVyIGZpZWxkIGJlbG93ICovCn0KCi8qIFBlci1maWVsZCBsYWJlbCBjb2xvcnMgKi8KLm1qci1tZnYtZ2VuaW5mbyBbZGF0YS1maWVsZD0icHJvbXB0Il0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWEgW2RhdGEtZmllbGQ9InByb21wdCJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1iIFtkYXRhLWZpZWxkPSJwcm9tcHQiXSBzdHJvbmcgewogICAgY29sb3I6ICM3ZWM4ZmY7Cn0gLyogYmx1ZSAgIC0gUHJvbXB0ICovCgoubWpyLW1mdi1nZW5pbmZvIFtkYXRhLWZpZWxkPSJzZWVkIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWEgW2RhdGEtZmllbGQ9InNlZWQiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYiBbZGF0YS1maWVsZD0ic2VlZCJdIHN0cm9uZyB7CiAgICBjb2xvcjogI2ZmZDQ3YTsKfSAvKiBhbWJlciAgLSBTZWVkICAgKi8KCi5tanItbWZ2LWdlbmluZm8gW2RhdGEtZmllbGQ9Im1vZGVsIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWEgW2RhdGEtZmllbGQ9Im1vZGVsIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgW2RhdGEtZmllbGQ9Im1vZGVsIl0gc3Ryb25nIHsKICAgIGNvbG9yOiAjN2RkYThhOwp9IC8qIGdyZWVuICAtIE1vZGVsICAqLwoKLm1qci1tZnYtZ2VuaW5mbyBbZGF0YS1maWVsZD0ibG9yYSJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1hIFtkYXRhLWZpZWxkPSJsb3JhIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgW2RhdGEtZmllbGQ9ImxvcmEiXSBzdHJvbmcgewogICAgY29sb3I6ICNkNDhjZmY7Cn0gLyogdmlvbGV0IC0gTG9SQSAgICovCgoubWpyLW1mdi1nZW5pbmZvIFtkYXRhLWZpZWxkPSJzYW1wbGVyIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWEgW2RhdGEtZmllbGQ9InNhbXBsZXIiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYiBbZGF0YS1maWVsZD0ic2FtcGxlciJdIHN0cm9uZyB7CiAgICBjb2xvcjogI2ZmOWY3YTsKfSAvKiBvcmFuZ2UgLSBTYW1wbGVyICovCgoubWpyLW1mdi1nZW5pbmZvIFtkYXRhLWZpZWxkPSJzY2hlZHVsZXIiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYSBbZGF0YS1maWVsZD0ic2NoZWR1bGVyIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgW2RhdGEtZmllbGQ9InNjaGVkdWxlciJdIHN0cm9uZyB7CiAgICBjb2xvcjogI2ZmN2E5ZjsKfSAvKiBwaW5rICAgLSBTY2hlZHVsZXIgKi8KCi5tanItbWZ2LWdlbmluZm8gW2RhdGEtZmllbGQ9ImNmZyJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1hIFtkYXRhLWZpZWxkPSJjZmciXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYiBbZGF0YS1maWVsZD0iY2ZnIl0gc3Ryb25nIHsKICAgIGNvbG9yOiAjN2E5ZmZmOwp9IC8qIGluZGlnbyAtIENGRyAqLwoKLm1qci1tZnYtZ2VuaW5mbyBbZGF0YS1maWVsZD0ic3RlcCJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1hIFtkYXRhLWZpZWxkPSJzdGVwIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgW2RhdGEtZmllbGQ9InN0ZXAiXSBzdHJvbmcgewogICAgY29sb3I6ICM3YWZmZDQ7Cn0gLyogdGVhbCAgIC0gU3RlcCAqLwoKLm1qci1tZnYtZ2VuaW5mbyBbZGF0YS1maWVsZD0iZ2VuVGltZSJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1hIFtkYXRhLWZpZWxkPSJnZW5UaW1lIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgW2RhdGEtZmllbGQ9ImdlblRpbWUiXSBzdHJvbmcgewogICAgY29sb3I6ICNlMGZmN2E7Cn0gLyogbGltZSAgIC0gR2VuIFRpbWUgKi8KCi5tanItbWZ2LWdlbmluZm8gZGl2LAoubWpyLW1mdi1nZW5pbmZvLWEgZGl2LAoubWpyLW1mdi1nZW5pbmZvLWIgZGl2IHsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgbWFyZ2luLWJvdHRvbTogM3B4Owp9CgoubWpyLW1mdi1nZW5pbmZvIGRpdjpsYXN0LWNoaWxkLAoubWpyLW1mdi1nZW5pbmZvLWEgZGl2Omxhc3QtY2hpbGQsCi5tanItbWZ2LWdlbmluZm8tYiBkaXY6bGFzdC1jaGlsZCB7CiAgICBtYXJnaW4tYm90dG9tOiAwOwp9CgovKiBTaW1wbGUgbW9kZSBjb250YWluZXIgKi8KLm1qci1tZnYtc2ltcGxlLWNvbnRhaW5lciB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgovKiBBQiBtb2RlIGNvbnRhaW5lciAqLwoubWpyLW1mdi1hYi1jb250YWluZXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYmFja2dyb3VuZDogIzAwMDsKfQoKLyogQUIgbW9kZSBsYXllcnMgKi8KLm1qci1tZnYtYWItbGF5ZXIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwp9CgoubWpyLW1mdi1hYi1sYXllci0tYiB7CiAgICAvKiBjbGlwLXBhdGggYXBwbGllZCBpbmxpbmUgZm9yIGR5bmFtaWMgZGl2aWRlciBwb3NpdGlvbiAqLwp9CgovKiBTaWRlLWJ5LXNpZGUgbW9kZSBjb250YWluZXIgKi8KLm1qci1tZnYtc2lkZS1jb250YWluZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgZ2FwOiAycHg7CiAgICBiYWNrZ3JvdW5kOiAjMTExOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLyogU2lkZS1ieS1zaWRlIGhhbGYgcGFuZWxzICovCi5tanItbWZ2LXNpZGUtcGFuZWwgewogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgYmFja2dyb3VuZDogIzBkMGQwZDsKfQoKLyogR3JpZCBjb21wYXJlICgyLTIpIGNvbnRhaW5lciAqLwoubWpyLW1mdi1ncmlkLWNvbnRhaW5lciB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOwogICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAxZnIgMWZyOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBnYXA6IDJweDsKICAgIGJhY2tncm91bmQ6ICMxMTE7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgovKiBHcmlkIGNlbGxzICovCi5tanItbWZ2LWdyaWQtY2VsbCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJhY2tncm91bmQ6ICMwZDBkMGQ7CiAgICBtaW4td2lkdGg6IDA7CiAgICBtaW4taGVpZ2h0OiAwOwp9CgovKiBHZW4gaW5mbyBvdmVybGF5cyBmb3IgZ3JpZCBjZWxscyBDIGFuZCBEICovCi5tanItbWZ2LWdlbmluZm8tYywKLm1qci1tZnYtZ2VuaW5mby1kIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiA4cHg7CiAgICByaWdodDogOHB4OwogICAgYm90dG9tOiA4cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNjUpOwogICAgY29sb3I6ICNmZmY7CiAgICBwYWRkaW5nOiA4cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIG1heC1oZWlnaHQ6IDQwJTsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yLXk6IGNvbnRhaW47CiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICB0b3VjaC1hY3Rpb246IHBhbi15OwogICAgd29yZC1icmVhazogYnJlYWstd29yZDsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjQpOwp9CgoubWpyLW1mdi1nZW5pbmZvLWMgc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgc3Ryb25nIHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBtYXJnaW4tcmlnaHQ6IDRweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpOwp9CgovKiBQZXItZmllbGQgbGFiZWwgY29sb3JzIGZvciBDL0QgZ2VuIGluZm8gb3ZlcmxheXMgKi8KLm1qci1tZnYtZ2VuaW5mby1jIFtkYXRhLWZpZWxkPSJwcm9tcHQiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tZCBbZGF0YS1maWVsZD0icHJvbXB0Il0gc3Ryb25nIHsKICAgIGNvbG9yOiAjN2VjOGZmOwp9Ci5tanItbWZ2LWdlbmluZm8tYyBbZGF0YS1maWVsZD0ic2VlZCJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1kIFtkYXRhLWZpZWxkPSJzZWVkIl0gc3Ryb25nIHsKICAgIGNvbG9yOiAjZmZkNDdhOwp9Ci5tanItbWZ2LWdlbmluZm8tYyBbZGF0YS1maWVsZD0ibW9kZWwiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tZCBbZGF0YS1maWVsZD0ibW9kZWwiXSBzdHJvbmcgewogICAgY29sb3I6ICM3ZGRhOGE7Cn0KLm1qci1tZnYtZ2VuaW5mby1jIFtkYXRhLWZpZWxkPSJsb3JhIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgW2RhdGEtZmllbGQ9ImxvcmEiXSBzdHJvbmcgewogICAgY29sb3I6ICNkNDhjZmY7Cn0KLm1qci1tZnYtZ2VuaW5mby1jIFtkYXRhLWZpZWxkPSJzYW1wbGVyIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgW2RhdGEtZmllbGQ9InNhbXBsZXIiXSBzdHJvbmcgewogICAgY29sb3I6ICNmZjlmN2E7Cn0KLm1qci1tZnYtZ2VuaW5mby1jIFtkYXRhLWZpZWxkPSJzY2hlZHVsZXIiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tZCBbZGF0YS1maWVsZD0ic2NoZWR1bGVyIl0gc3Ryb25nIHsKICAgIGNvbG9yOiAjZmY3YTlmOwp9Ci5tanItbWZ2LWdlbmluZm8tYyBbZGF0YS1maWVsZD0iY2ZnIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgW2RhdGEtZmllbGQ9ImNmZyJdIHN0cm9uZyB7CiAgICBjb2xvcjogIzdhOWZmZjsKfQoubWpyLW1mdi1nZW5pbmZvLWMgW2RhdGEtZmllbGQ9InN0ZXAiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tZCBbZGF0YS1maWVsZD0ic3RlcCJdIHN0cm9uZyB7CiAgICBjb2xvcjogIzdhZmZkNDsKfQoKLyogR2VuIGluZm8gYWN0aXZlIHN0YXRlIC0gYnV0dG9uIGdsb3dzIHdoZW4gYXQgbGVhc3Qgb25lIGZpZWxkIGlzIHNlbGVjdGVkICovCi5tanItbWZ2IC5tanItaWNvbi1idG4uaXMtb24gewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKHZhcigtLW1qci1ncm91cC1hY2NlbnQsIDk1LCAxNzksIDI1NSksIDAuNTUpOwogICAgY29sb3I6IHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIsICMzMzMpIDgwJSwgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZikgMTUlKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZikgMjUlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWZ2IC5tanItaWNvbi1idG4uaXMtb3BlbiB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKSA2MiUsICNmZmZmZmYgMTIlKTsKICAgIGNvbG9yOiAjZWVmN2ZmOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSg5NSwgMTc5LCAyNTUsIDAuMjgpLCByZ2JhKDk1LCAxNzksIDI1NSwgMC4xNCkpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDAgMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSwKICAgICAgICAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpIDI2JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1pY29uLWJ0bi5pcy1vcGVuIHsKICAgIGNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7Cn0KCi8qIEdlbiBpbmZvIGRyb3Bkb3duIHBhbmVsICovCi5tanItbWZ2LWdlbi1kcm9wZG93biB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB6LWluZGV4OiAxMDAwMTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xLCAjMmEyYTJhKSA5NiUsIHRyYW5zcGFyZW50KTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIHBhZGRpbmc6IDZweCA0cHg7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMTgpOwogICAgYm94LXNoYWRvdzoKICAgICAgICAwIDhweCAyNHB4IHJnYmEoMCwgMCwgMCwgMC41NSksCiAgICAgICAgMCAycHggNnB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBtaW4td2lkdGg6IDE1MHB4OwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDhweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig4cHgpOwp9CgoubWpyLW1mdi1nZW4tZHJvcGRvd246OmJlZm9yZSB7CiAgICBjb250ZW50OiAiR0VOIElORk8iOwogICAgZGlzcGxheTogYmxvY2s7CiAgICBmb250LXNpemU6IDlweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC44cHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjM1KTsKICAgIHBhZGRpbmc6IDJweCAxMHB4IDZweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMSk7CiAgICBtYXJnaW4tYm90dG9tOiA0cHg7Cn0KCi5tanItbWZ2LWdlbi1kcm9wZG93bi5pcy12aXNpYmxlIHsKICAgIGRpc3BsYXk6IGJsb2NrOwp9CgoubWpyLW1mdi1nZW4tZHJvcGRvd24tcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBwYWRkaW5nOiA1cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMTAwbXMgZWFzZTsKICAgIHVzZXItc2VsZWN0OiBub25lOwp9CgoubWpyLW1mdi1nZW4tZHJvcGRvd24tcm93OmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNyk7Cn0KCi5tanItbWZ2LWdlbi1kcm9wZG93bi1yb3cgaW5wdXRbdHlwZT0iY2hlY2tib3giXSB7CiAgICB3aWR0aDogMTNweDsKICAgIGhlaWdodDogMTNweDsKICAgIGFjY2VudC1jb2xvcjogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmbGV4LXNocmluazogMDsKfQoKLyogVHJhbnNmb3JtIGZvciBwYW4vem9vbSAtIGFwcGxpZWQgaW5saW5lIGZvciBkeW5hbWljIHZhbHVlcyAqLwoubWpyLW1mdi1tZWRpYS0tdHJhbnNmb3JtIHsKICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjsKfQoKLyogQ3Vyc29yIGZlZWRiYWNrIGZvciBwYW4vem9vbSBpbnRlcmFjdGlvbnMgKi8KLm1qci1tZnYtY29udGVudC0tZ3JhYiB7CiAgICBjdXJzb3I6IGdyYWI7Cn0KCi5tanItbWZ2LWNvbnRlbnQtLWdyYWJiaW5nIHsKICAgIGN1cnNvcjogZ3JhYmJpbmc7Cn0KCi8qIFNpZGViYXIgdGFiIGJ1dHRvbjogYWxsb3cgMi1saW5lIGxhYmVsIHZpYSBcbiBpbiBsYWJlbCBzdHJpbmcgKi8KLm1ham9vci1hc3NldHMtdGFiLWJ1dHRvbiAuc2lkZS1iYXItYnV0dG9uLWxhYmVsIHsKICAgIHdoaXRlLXNwYWNlOiBwcmUtbGluZTsKfQoKLyogQm90dG9tLXBhbmVsIGdlbmVyYXRlZCBmZWVkOiBjb21wYWN0IGNhcmRzIHdpdGggb25seSB0aGUgZ2VuZXJhdGlvbi10aW1lIHBpbGwgKi8KLm1qci1ib3R0b20tZmVlZCB7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWFtLWdyaWQtc2Nyb2xsIHsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgbWluLWhlaWdodDogMDsKICAgIGhlaWdodDogMTAwJTsKICAgIG92ZXJmbG93OiBhdXRvOwogICAgc2Nyb2xsYmFyLWd1dHRlcjogc3RhYmxlOwogICAgb3ZlcnNjcm9sbC1iZWhhdmlvci15OiBjb250YWluOwogICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgdG91Y2gtYWN0aW9uOiBwYW4teTsKICAgIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoOwogICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluOwogICAgc2Nyb2xsYmFyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMiwgIzJmMzU0MCkgNzAlLCAjN2Y4ZWEzIDMwJSkKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCwgIzE2MTkxZikgODglLCAjMDAwIDEyJSk7Cn0KCi5tanItYm90dG9tLWZlZWQgLm1qci1hbS1ncmlkLXNjcm9sbDo6LXdlYmtpdC1zY3JvbGxiYXIsCi5tanItZmVlZC1ncm91cC1wb3BvdmVyLWdyaWQ6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIHdpZHRoOiAxMHB4OwogICAgaGVpZ2h0OiAxMHB4Owp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItYW0tZ3JpZC1zY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iLAoubWpyLWZlZWQtZ3JvdXAtcG9wb3Zlci1ncmlkOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMiwgIzJmMzU0MCkgNzAlLCAjN2Y4ZWEzIDMwJSk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMnB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWFtLWdyaWQtc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhci10cmFjaywKLm1qci1mZWVkLWdyb3VwLXBvcG92ZXItZ3JpZDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTAsICMxNjE5MWYpIDg4JSwgIzAwMCAxMiUpOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7Cn0KCi5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkIHsKICAgIGdhcDogNnB4ICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heChtaW4oMTAwJSwgMTMycHgpLCAxZnIpKSAhaW1wb3J0YW50OwogICAgbWluLWhlaWdodDogMDsKICAgIGhlaWdodDogYXV0bzsKICAgIGFsaWduLWNvbnRlbnQ6IHN0YXJ0Owp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZCwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmQgewogICAgYm9yZGVyLXJhZGl1czogMTJweCAhaW1wb3J0YW50OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA5MiUsICMwMDAgOCUpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4yMikgIWltcG9ydGFudDsKICAgIHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50Owp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZDpob3ZlciwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmQ6aG92ZXIgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiAwIDEwcHggMjRweCByZ2JhKDAsIDAsIDAsIDAuMjgpICFpbXBvcnRhbnQ7CgogICAgLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmQuaXMtc2VsZWN0ZWQgewogICAgICAgIGJveC1zaGFkb3c6CiAgICAgICAgICAgIDAgMCAwIDNweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKSA4MCUsIHZhcigtLWNvbnRlbnQtZmcpKSwKICAgICAgICAgICAgMCAwIDAgNnB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItY2FyZC1zZWxlY3Rpb24tY29sb3IpIDMwJSwgdHJhbnNwYXJlbnQpLAogICAgICAgICAgICAwIDAgMjBweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKSA0MCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAgICAgMCAxMHB4IDI4cHggcmdiYSgwLCAwLCAwLCAwLjI4KSAhaW1wb3J0YW50OwogICAgICAgIG91dGxpbmU6IDJweCBzb2xpZCB2YXIoLS1tanItY2FyZC1zZWxlY3Rpb24tY29sb3IpICFpbXBvcnRhbnQ7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDsKICAgIH0KfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gewogICAgb3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIC5tanItdGh1bWIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iIHsKICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7CiAgICBpc29sYXRpb246IGlzb2xhdGU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iOjpiZWZvcmUsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iOjphZnRlciwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIC5tanItdGh1bWI6OmJlZm9yZSwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIC5tanItdGh1bWI6OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAtMTsKICAgIHRyYW5zaXRpb246CiAgICAgICAgdHJhbnNmb3JtIDE0MG1zIGVhc2UsCiAgICAgICAgb3BhY2l0eSAxNDBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci10aHVtYjo6YmVmb3JlLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci10aHVtYjo6YmVmb3JlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDVweCwgNXB4KSBzY2FsZSgwLjk4NSk7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzKSksCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEsICMyMDI0MmIpIDg0JSwgIzAwMCAxNiUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjE2KTsKICAgIG9wYWNpdHk6IDAuOTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIC5tanItdGh1bWI6OmFmdGVyLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci10aHVtYjo6YWZ0ZXIgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTBweCwgMTBweCkgc2NhbGUoMC45Nyk7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNiksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMikpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wLCAjMTYxOTFmKSA4MiUsICMwMDAgMTglKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7CiAgICBib3gtc2hhZG93OiAwIDEycHggMjJweCByZ2JhKDAsIDAsIDAsIDAuMTQpOwogICAgb3BhY2l0eTogMC43NTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOmhvdmVyIC5tanItdGh1bWI6OmJlZm9yZSwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOmhvdmVyIC5tanItdGh1bWI6OmJlZm9yZSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg2cHgsIDZweCkgc2NhbGUoMC45ODUpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl06aG92ZXIgLm1qci10aHVtYjo6YWZ0ZXIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTpob3ZlciAubWpyLXRodW1iOjphZnRlciB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMnB4LCAxMnB4KSBzY2FsZSgwLjk3KTsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLXRodW1iIHsKICAgIGFzcGVjdC1yYXRpbzogMC45NSAvIDEgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA3MiUsICMwMDAgMjglKSAhaW1wb3J0YW50Owp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItdGh1bWItcGxheSB7CiAgICBiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoCiAgICAgICAgY2lyY2xlIGF0IGNlbnRlciwKICAgICAgICByZ2JhKDAsIDAsIDAsIDAuMTgpLAogICAgICAgIHJnYmEoMCwgMCwgMCwgMC4wNCkgMzglLAogICAgICAgIHRyYW5zcGFyZW50IDcwJQogICAgKTsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWJhZGdlLWV4dCwKLm1qci1ib3R0b20tZmVlZCAubWpyLWJhZGdlLXJhdGluZywKLm1qci1ib3R0b20tZmVlZCAubWpyLWJhZGdlLXRhZ3MgewogICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkyKTsKICAgIHRyYW5zZm9ybS1vcmlnaW46IHRvcCBsZWZ0Owp9CgovKiAtLSBGZWVkIGNhcmQgaW5mbzogZGVmYXVsdCBoaWRkZW4sIHRvZ2dsZWQgdmlhIG1qci1mZWVkLXNob3ctKiBjbGFzc2VzIG9uIC5tanItZ3JpZCAtLSAqLwoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZC1pbmZvIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDRweCA2cHggIWltcG9ydGFudDsKICAgIG1pbi13aWR0aDogMDsKfQoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZC5tanItZmVlZC1zaG93LWluZm8gLm1qci1jYXJkLWluZm8gewogICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKfQoKLyogRmVlZCBmaWxlbmFtZSAqLwoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZC1maWxlbmFtZSB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1maWxlbmFtZSAubWpyLWNhcmQtZmlsZW5hbWUgewogICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKfQoKLyogRmVlZCBkaW1lbnNpb25zIC8gZHVyYXRpb24gKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLW1ldGEtcmVzLAoubWpyLWJvdHRvbS1mZWVkIC5tanItbWV0YS1kdXJhdGlvbiB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1kaW1lbnNpb25zIC5tanItbWV0YS1yZXMsCi5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctZGltZW5zaW9ucyAubWpyLW1ldGEtZHVyYXRpb24gewogICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7Cn0KCi8qIEZlZWQgZGF0ZS90aW1lICovCi5tanItYm90dG9tLWZlZWQgLm1qci1tZXRhLWRhdGUsCi5tanItYm90dG9tLWZlZWQgLm1qci1tZXRhLXRpbWUtdmFsIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZC5tanItZmVlZC1zaG93LWRhdGUgLm1qci1tZXRhLWRhdGUsCi5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctZGF0ZSAubWpyLW1ldGEtdGltZS12YWwgewogICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7Cn0KCi8qIEZlZWQgZ2VuZXJhdGlvbiB0aW1lIGJhZGdlICovCi5tanItYm90dG9tLWZlZWQgLm1qci1tZXRhLWdlbnRpbWUgewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9Ci5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctZ2VudGltZSAubWpyLW1ldGEtZ2VudGltZSB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleCAhaW1wb3J0YW50Owp9CgovKiBGZWVkIHdvcmtmbG93IGRvdCAqLwoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZC1kb3Qtd3JhcHBlciB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1kb3QgLm1qci1jYXJkLWRvdC13cmFwcGVyIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7Cn0KCi8qIEZlZWQgYmFkZ2VzICovCi5tanItYm90dG9tLWZlZWQgLm1qci1iYWRnZS1leHQgewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9Ci5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctYmFkZ2VzLWV4dCAubWpyLWJhZGdlLWV4dCB7CiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7Cn0KCi5tanItYm90dG9tLWZlZWQgLm1qci1iYWRnZS1yYXRpbmcgewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9Ci5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctYmFkZ2VzLXJhdGluZyAubWpyLWJhZGdlLXJhdGluZyB7CiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7Cn0KCi5tanItYm90dG9tLWZlZWQgLm1qci1iYWRnZS10YWdzIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZC5tanItZmVlZC1zaG93LWJhZGdlcy10YWdzIC5tanItYmFkZ2UtdGFncyB7CiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7Cn0KCi8qIEZlZWQgbWV0YSByb3cgc3R5bGluZyAtIGZsZXggbGF5b3V0IHNvIHZpc2libGUgaXRlbXMgc3RheSBzZXBhcmF0ZWQgKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLWNhcmQtbWV0YS1yb3cgewogICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50OwogICAgZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDsKICAgIGdhcDogNXB4ICFpbXBvcnRhbnQ7CiAgICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICBtaW4td2lkdGg6IDAgIWltcG9ydGFudDsKICAgIHBhZGRpbmctcmlnaHQ6IDAgIWltcG9ydGFudDsKICAgIGxpbmUtaGVpZ2h0OiAxLjMgIWltcG9ydGFudDsKICAgIG9wYWNpdHk6IDAuNzggIWltcG9ydGFudDsKICAgIGZvbnQtc2l6ZTogMC44ZW0gIWltcG9ydGFudDsKICAgIC8qIHRleHQtb3ZlcmZsb3cgZWxsaXBzaXMgZG9lc24ndCBhcHBseSBvbiBhIGZsZXggY29udGFpbmVyIGl0c2VsZiAqLwp9Ci8qIEVhY2ggbWV0YSBzcGFuIHRydW5jYXRlcyBpbmRpdmlkdWFsbHkgaWYgdG9vIGxvbmcgKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLWNhcmQtbWV0YS1yb3cgPiBzcGFuIHsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmbGV4LXNocmluazogMTsKfQovKiBHZW50aW1lIGJhZGdlIGFuZCB0aW1lIHZhbHVlIHNob3VsZCBzdGF5IHZpc2libGUgKGRvbid0IHNocmluayBhd2F5KSAqLwoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZC1tZXRhLXJvdyA+IC5tanItbWV0YS1nZW50aW1lLAoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZC1tZXRhLXJvdyA+IC5tanItbWV0YS10aW1lLXZhbCB7CiAgICBmbGV4LXNocmluazogMDsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1nZW50aW1lIC5tanItbWV0YS1nZW50aW1lIHsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDNweDsKICAgIHBhZGRpbmc6IDNweCA3cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTAsIDE0LCAyMCwgMC43NCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOwogICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4yMik7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogODAwICFpbXBvcnRhbnQ7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMTVlbTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTgpOwogICAgdGV4dC1zaGFkb3c6CiAgICAgICAgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC45KSwKICAgICAgICAwIDAgMTBweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwp9CgovKiAtLSBBdWRpbyAvIDNEIHBsYWNlaG9sZGVyIHRodW1ibmFpbHMgaW4gdGhlIGZlZWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKLyogQXVkaW8gY2FyZHMgc2hvdyB0aGUgd2F2ZWZvcm0gc3ByaXRlOyBnaXZlIGl0IGEgZGlzdGluY3QgYmFja2dyb3VuZCBzbyBpdAogICBkb2Vzbid0IGxvb2sgbGlrZSBhIGJyb2tlbiBpbWFnZSBwbGFjZWhvbGRlciBpbiB0aGUgZmVlZC4gKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanIta2luZD0iYXVkaW8iXSAubWpyLXRodW1iLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1leHQ9Im1wMyJdIC5tanItdGh1bWIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWV4dD0id2F2Il0gLm1qci10aHVtYiwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZXh0PSJvZ2ciXSAubWpyLXRodW1iLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1leHQ9ImZsYWMiXSAubWpyLXRodW1iIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA2MCUsICMxYTFmMmIgNDAlKSAhaW1wb3J0YW50Owp9CgovKiAzRCBtb2RlbCBjYXJkcyB1c2UgYW4gaWNvbiBwbGFjZWhvbGRlciAtIGFkZCBhIHN1YnRsZSBncmFkaWVudCBzbyB0aGV5IHJlYWQKICAgYXMgaW50ZW50aW9uYWwgcmF0aGVyIHRoYW4gbWlzc2luZy4gKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanIta2luZD0ibW9kZWwzZCJdIC5tanItdGh1bWIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWV4dD0iZ2xiIl0gLm1qci10aHVtYiwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZXh0PSJnbHRmIl0gLm1qci10aHVtYiwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZXh0PSJvYmoiXSAubWpyLXRodW1iLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1leHQ9ImZieCJdIC5tanItdGh1bWIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDUwJSwgIzBkMTExNyA1MCUpICFpbXBvcnRhbnQ7Cn0KCi8qIC0tIEZlZWQgZ3JvdXAgYnV0dG9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKLm1qci1ib3R0b20tZmVlZCAubWpyLWZlZWQtZ3JvdXAtYnV0dG9uIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMzRweDsKICAgIHJpZ2h0OiA2cHg7CiAgICB6LWluZGV4OiAxMTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBtaW4td2lkdGg6IDI4cHg7CiAgICBtaW4taGVpZ2h0OiAyOHB4OwogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTAsIDE0LCAyMCwgMC43NCk7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk2KTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMjQpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247CiAgICB0cmFuc2l0aW9uOgogICAgICAgIGJhY2tncm91bmQgMTIwbXMgZWFzZSwKICAgICAgICB0cmFuc2Zvcm0gODBtcyBlYXNlOwp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItZmVlZC1ncm91cC1idXR0b246aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgxOCwgMjQsIDM0LCAwLjkpOwp9CgoubWpyLWZlZWQtZ3JvdXAtYnV0dG9uLWljb24gewogICAgZm9udC1zaXplOiAxMXB4OwogICAgb3BhY2l0eTogMC45Owp9CgoubWpyLWZlZWQtZ3JvdXAtYnV0dG9uLWNvdW50IHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLyogLS0gRmVlZCBncm91cCBwb3BvdmVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgoubWpyLWZlZWQtZ3JvdXAtcG9wb3ZlciB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1tZW51LWJnLCAjMjIyKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvciwgIzNhM2EzYSk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1sZywgOHB4KTsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDI4cHggcmdiYSgwLCAwLCAwLCAwLjQ1KTsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5tanItZmVlZC1ncm91cC1wb3BvdmVyLXRpdGxlIHsKICAgIHBhZGRpbmc6IDhweCAxMHB4IDRweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwogICAgbWFyZ2luLWJvdHRvbTogOHB4Owp9CgoubWpyLWZlZWQtZ3JvdXAtcG9wb3Zlci1ncmlkIHsKICAgIHBhZGRpbmc6IDRweCA4cHggMTBweDsKICAgIG1heC1oZWlnaHQ6IDM2MHB4OwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICBzY3JvbGxiYXItZ3V0dGVyOiBzdGFibGU7CiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47CiAgICBzY3JvbGxiYXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yLCAjMmYzNTQwKSA3MCUsICM3ZjhlYTMgMzAlKQogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wLCAjMTYxOTFmKSA4OCUsICMwMDAgMTIlKTsKfQoKLm1qci1mZWVkLWdyb3VwLWJ1dHRvbi1pY29uLAoubWpyLWZlZWQtZ3JvdXAtYnV0dG9uLWNvdW50IHsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoubWpyLWZlZWQtZ3JvdXAtbWVtYmVyLWNhcmQgewogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWZlZWQtZ3JvdXAtbWVtYmVyLWNhcmQgLm1qci10aHVtYiB7CiAgICBhc3BlY3QtcmF0aW86IDEgLyAxICFpbXBvcnRhbnQ7Cn0KCi5tanItZmVlZC1ncm91cC1tZW1iZXItY2FyZCAubWpyLWNhcmQtaW5mbyB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1zdGFjay1ncm91cC1idXR0b24gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAzNHB4OwogICAgcmlnaHQ6IDZweDsKICAgIHotaW5kZXg6IDExOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDRweDsKICAgIG1pbi13aWR0aDogMjhweDsKICAgIG1pbi1oZWlnaHQ6IDI4cHg7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgxMCwgMTQsIDIwLCAwLjc0KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTYpOwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjI0KTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBiYWNrZ3JvdW5kIDEyMG1zIGVhc2UsCiAgICAgICAgdHJhbnNmb3JtIDgwbXMgZWFzZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXN0YWNrLWdyb3VwLWJ1dHRvbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDE4LCAyNCwgMzQsIDAuOSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1zdGFjay1ncm91cC1idXR0b24gPiAqIHsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoubWpyLWZpbG1zdHJpcDo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgd2lkdGg6IDRweDsKICAgIGhlaWdodDogNHB4Owp9CgoubWpyLWZpbG1zdHJpcDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCi5tanItZmlsbXN0cmlwOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCk7Cn0KCi5tanItZmlsbXN0cmlwOmhvdmVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjIpOwp9CgoubWpyLWZpbG1zdHJpcC1hdWRpby10aHVtYiB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA1cHg7CiAgICBwYWRkaW5nOiA3cHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgyKTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgYmFja2dyb3VuZDoKICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDI0JSAyNCUsIHJnYmEoNzgsIDE4NCwgMjU1LCAwLjI4KSwgdHJhbnNwYXJlbnQgNDIlKSwKICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDg0JSA3MCUsIHJnYmEoODIsIDIyMCwgMTU2LCAwLjE4KSwgdHJhbnNwYXJlbnQgNDAlKSwKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDE4LCAyNSwgMzUsIDAuOTYpLCByZ2JhKDcsIDEwLCAxNSwgMC45OCkpOwp9CgoubWpyLWZpbG1zdHJpcC1hdWRpby13YXZlZm9ybSB7CiAgICB3aWR0aDogNzYlOwogICAgaGVpZ2h0OiAyNHB4OwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogMnB4Owp9CgoubWpyLWZpbG1zdHJpcC1hdWRpby13YXZlZm9ybSBzcGFuIHsKICAgIHdpZHRoOiAycHg7CiAgICBtaW4taGVpZ2h0OiA0cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NCksIHJnYmEoMTQ4LCAyMTgsIDI1NSwgMC42OCkpOwp9CgoubWpyLWZpbG1zdHJpcC1hdWRpby1sYWJlbCB7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgcGFkZGluZzogMnB4IDVweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjI4KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgIGZvbnQtc2l6ZTogN3B4OwogICAgZm9udC13ZWlnaHQ6IDgwMDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItc3RhY2stZ3JvdXAtYnV0dG9uLWNvdW50IHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLyogLS0gRHVwbGljYXRlIHN0YWNrIGJ1dHRvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogU2hvd3Mgb24gdGhlIHByaW1hcnkgY2FyZCB3aGVuIHNhbWUtZmlsZW5hbWUgZHVwbGljYXRlcyBleGlzdC4gICAgICAgICAgICAgKi8KLyogUG9zaXRpb25lZCBhdCBib3R0b20tcmlnaHQgdG8gbm90IG92ZXJsYXAgdGhlIHN0YWNrLWdyb3VwIGJ1dHRvbiAodG9wLXJpZ2h0KS4gKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWR1cC1zdGFjay1idXR0b24gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgYm90dG9tOiAzMHB4OwogICAgcmlnaHQ6IDZweDsKICAgIHotaW5kZXg6IDExOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDRweDsKICAgIG1pbi13aWR0aDogMjhweDsKICAgIG1pbi1oZWlnaHQ6IDI4cHg7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDE4MCwgMCwgMC4zOCk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMzAsIDE4LCAwLCAwLjgyKTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjAwLCA2MCwgMC45Nik7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjMyKTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIGJhY2tncm91bmQgMC4xNXMsCiAgICAgICAgdHJhbnNmb3JtIDgwbXMgZWFzZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWR1cC1zdGFjay1idXR0b246aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSg1MCwgMzAsIDAsIDAuOTQpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMTgwLCAwLCAwLjYpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZHVwLXN0YWNrLWJ1dHRvbiA+ICogewogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1kdXAtc3RhY2stY291bnQgewogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1kdXAtc3RhY2tlZD0idHJ1ZSJdIC5tanItZHVwLXN0YWNrLWJ1dHRvbiB7CiAgICBib3gtc2hhZG93OgogICAgICAgIDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMzIpLAogICAgICAgIDAgMCAwIDFweCByZ2JhKDI1NSwgMTgwLCAwLCAwLjIpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci1zdGFjay1ncm91cC1idXR0b24sCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLWZlZWQtZ3JvdXAtYnV0dG9uIHsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4yNCksCiAgICAgICAgMCAwIDAgMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTpob3ZlciwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZHVwLXN0YWNrZWQ9InRydWUiXTpob3ZlciB7CiAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDsKfQoKLyogLS0gVmlzdWFsIHN0YWNraW5nIGVmZmVjdCAtIGxheWVyZWQgY2FyZHMgYmVoaW5kIHRoZSBtYWluIGNhcmQgLS0tLS0tLS0tLS0tICovCi8qIENyZWF0ZXMgcHNldWRvLWVsZW1lbnQgImNhcmRzIiBvZmZzZXQgYmVoaW5kIHRoZSBwcmltYXJ5IGNhcmQgdG8gdmlzdWFsbHkgICAgKi8KLyogY29tbXVuaWNhdGUgdGhhdCB0aGlzIGNhcmQgcmVwcmVzZW50cyBhIGdyb3VwIG9mIG11bHRpcGxlIGltYWdlcy4gICAgICAgICAgICAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgei1pbmRleDogMTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOjpiZWZvcmUsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTo6YWZ0ZXIgewogICAgY29udGVudDogIiI7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1tZW51LWJnLCAjMWExYTJlKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IC0xOwogICAgdHJhbnNpdGlvbjoKICAgICAgICB0cmFuc2Zvcm0gMTgwbXMgZWFzZSwKICAgICAgICBvcGFjaXR5IDE4MG1zIGVhc2U7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTo6YmVmb3JlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDNweCwgM3B4KSByb3RhdGUoMWRlZyk7CiAgICBvcGFjaXR5OiAwLjQ1Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl06OmFmdGVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDZweCwgNnB4KSByb3RhdGUoMi4yZGVnKTsKICAgIG9wYWNpdHk6IDAuMjU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTpob3Zlcjo6YmVmb3JlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDRweCwgNHB4KSByb3RhdGUoMS41ZGVnKTsKICAgIG9wYWNpdHk6IDAuNTU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTpob3Zlcjo6YWZ0ZXIgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoOHB4LCA4cHgpIHJvdGF0ZSgzZGVnKTsKICAgIG9wYWNpdHk6IDAuMzU7Cn0KCi5tanItc3RhY2stZ3JvdXAtcG9wb3ZlciB7CiAgICB3aWR0aDogbWluKDQ0MHB4LCA5MnZ3KTsKfQoKLm1qci1zdGFjay1ncm91cC1tZW1iZXItY2FyZCB7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItc3RhY2stZ3JvdXAtbWVtYmVyLWNhcmQgLm1qci10aHVtYiB7CiAgICBhc3BlY3QtcmF0aW86IDEgLyAxICFpbXBvcnRhbnQ7Cn0KCi5tanItc3RhY2stZ3JvdXAtbWVtYmVyLWNhcmQgLm1qci1jYXJkLWluZm8gewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogTGlnaHQgbW9kZSBvdmVycmlkZXMgKENvbWZ5VUkgdjEuNDIrIGltcHJvdmVkIGxpZ2h0IHRoZW1lKQogKiBVc2VzIENvbWZ5VUkgZGF0YS10aGVtZSBhdHRyaWJ1dGUgd2hlbiBzZXQsIHdpdGgKICogcHJlZmVycy1jb2xvci1zY2hlbWUgYXMgYSBmYWxsYmFjayBmb3Igb2xkZXIgdmVyc2lvbnMuCiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKLyogQ29tZnlVSSBzZXRzIGRhdGEtdGhlbWU9ImxpZ2h0IiBvbiA8aHRtbD4gb3IgPGJvZHk+ICovCjppcyhbZGF0YS10aGVtZT0ibGlnaHQiXSwgW2RhdGEtY29sb3Itc2NoZW1lPSJsaWdodCJdKSAubWpyLWFzc2V0cy1tYW5hZ2VyLAo6aXMoW2RhdGEtdGhlbWU9ImxpZ2h0Il0sIFtkYXRhLWNvbG9yLXNjaGVtZT0ibGlnaHQiXSkgLm1qci1wb3BvdmVyIHsKICAgIC0tbWpyLXN1cmZhY2UtMDogdmFyKC0taW50ZXJmYWNlLXBhbmVsLXN1cmZhY2UsICNmMGYwZjApOwogICAgLS1tanItc3VyZmFjZS0xOiB2YXIoLS1pbnRlcmZhY2UtbWVudS1zdXJmYWNlLCAjZmFmYWZhKTsKICAgIC0tbWpyLXN1cmZhY2UtMjogdmFyKC0taW50ZXJmYWNlLXBhbmVsLWhvdmVyLXN1cmZhY2UsICNlOGU4ZTgpOwogICAgLS1tanItc3VyZmFjZS0zOiB2YXIoLS1tb2RhbC1jYXJkLWJhY2tncm91bmQsICNmZmZmZmYpOwogICAgLS1tanItYm9yZGVyOiB2YXIoLS1ib3JkZXItZGVmYXVsdCwgcmdiYSgwLCAwLCAwLCAwLjE0KSk7CiAgICAtLW1qci1tdXRlZDogdmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjU1KSk7CiAgICAtLW1qci1jYXJkLWhvdmVyLWNvbG9yOiB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtaG92ZXItc3VyZmFjZSwgI2UwZTBlMCk7Cn0KCkBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSB7CiAgICAvKiBGYWxsYmFjazogb25seSBhcHBseSBpZiBDb21meVVJIGhhc24ndCBzZXQgYW4gZXhwbGljaXQgZGF0YS10aGVtZSAqLwogICAgLm1qci1hc3NldHMtbWFuYWdlcjpub3QoW2RhdGEtdGhlbWUtYXBwbGllZF0pLAogICAgLm1qci1wb3BvdmVyOm5vdChbZGF0YS10aGVtZS1hcHBsaWVkXSkgewogICAgICAgIC0tbWpyLXN1cmZhY2UtMDogdmFyKC0taW50ZXJmYWNlLXBhbmVsLXN1cmZhY2UsICNmMGYwZjApOwogICAgICAgIC0tbWpyLXN1cmZhY2UtMTogdmFyKC0taW50ZXJmYWNlLW1lbnUtc3VyZmFjZSwgI2ZhZmFmYSk7CiAgICAgICAgLS1tanItc3VyZmFjZS0yOiB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtaG92ZXItc3VyZmFjZSwgI2U4ZThlOCk7CiAgICAgICAgLS1tanItc3VyZmFjZS0zOiB2YXIoLS1tb2RhbC1jYXJkLWJhY2tncm91bmQsICNmZmZmZmYpOwogICAgICAgIC0tbWpyLWJvcmRlcjogdmFyKC0tYm9yZGVyLWRlZmF1bHQsIHJnYmEoMCwgMCwgMCwgMC4xNCkpOwogICAgICAgIC0tbWpyLW11dGVkOiB2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuNTUpKTsKICAgICAgICAtLW1qci1jYXJkLWhvdmVyLWNvbG9yOiB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtaG92ZXItc3VyZmFjZSwgI2UwZTBlMCk7CiAgICB9Cn0KCi8qIC0tLSBTa2VsZXRvbiBsb2FkZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgoubWpyLWNhcmQtc2tlbGV0b24gewogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSwgIzJhMmEyYSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCAjM2EzYTNhKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLWxnLCA4cHgpOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIC8qIE1hdGNoIC5tanItdGh1bWIgYXNwZWN0IHJhdGlvIHNvIHNrZWxldG9ucyBoYXZlIHRoZSBzYW1lIGZvb3RwcmludCBhcyByZWFsIGNhcmRzLiAqLwogICAgYXNwZWN0LXJhdGlvOiAxIC8gMTsKfQoKLyogU2hpbW1lciBzd2VlcCAqLwoubWpyLWNhcmQtc2tlbGV0b246OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgOTBkZWcsCiAgICAgICAgdHJhbnNwYXJlbnQgMCUsCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIsICMzYTNhM2EpIDgwJSwgdHJhbnNwYXJlbnQpIDUwJSwKICAgICAgICB0cmFuc3BhcmVudCAxMDAlCiAgICApOwogICAgYW5pbWF0aW9uOiBtanItc2hpbW1lciAxLjRzIGVhc2UtaW4tb3V0IGluZmluaXRlOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTsKfQoKQGtleWZyYW1lcyBtanItc2hpbW1lciB7CiAgICBmcm9tIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpOwogICAgfQogICAgdG8gewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTsKICAgIH0KfQoKQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHsKICAgIC5tanItY2FyZC1za2VsZXRvbjo6YWZ0ZXIgewogICAgICAgIGFuaW1hdGlvbjogbm9uZTsKICAgIH0KfQoKLyogLS0tIFJlc3BvbnNpdmUgc3VtbWFyeSBiYXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCi8qCiAqIEVuYWJsZSBjb250YWluZXIgcXVlcmllcyBvbiB0aGUgc3VtbWFyeSBiYXIgc28gY2hpbGRyZW4gY2FuIHJlc3BvbmQgdG8gaXRzCiAqIGFjdHVhbCByZW5kZXJlZCB3aWR0aCAoZS5nLiB3aGVuIHRoZSBwYW5lbCBpcyBkb2NrZWQgaW4gYSBuYXJyb3cgc2lkZWJhcikuCiAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc3VtbWFyeSB7CiAgICBjb250YWluZXItdHlwZTogaW5saW5lLXNpemU7CiAgICBjb250YWluZXItbmFtZTogbWpyLXN1bW1hcnktYmFyOwp9CgovKiBCZWxvdyB+MzgwIHB4OiBoaWRlIHRoZSBwaWxscy9yaWdodCBzZWN0aW9uIHRvIHByZXZlbnQgb3ZlcmZsb3cuICovCkBjb250YWluZXIgbWpyLXN1bW1hcnktYmFyIChtYXgtd2lkdGg6IDM4MHB4KSB7CiAgICAubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc3VtbWFyeS1yaWdodCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KICAgIC5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zdW1tYXJ5LXRleHQgewogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgIH0KfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogU3R1ZGlvIHZpZXdlciAobWFpbiB2aWV3ZXIpIC0gLm1qci1zdHVkaW8KICogTmV1dHJhbCBkYXJrIHN0YWdlIHNvIGdlbmVyYXRlZCBjb2xvdXJzIGFyZSBqdWRnZWQgYWNjdXJhdGVseTsgY2hyb21lIHVzZXMKICogQ29tZnlVSSB0b2tlbnMgdGhyb3VnaCB0aGUgLS1tanItKiBhbGlhc2VzLgogKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLm1qci1zdHVkaW8gewogICAgcG9zaXRpb246IGZpeGVkOwogICAgaW5zZXQ6IDA7CiAgICB6LWluZGV4OiAxMDAwMDsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG8gbWlubWF4KDAsIDFmcikgYXV0bzsKICAgIGJhY2tncm91bmQ6ICMwZDBkMGY7CiAgICBjb2xvcjogdmFyKC0tZmctY29sb3IsICNlNmU2ZTYpOwogICAgb3V0bGluZTogbm9uZTsKICAgIC0tbWpyLXN0dWRpby1jaHJvbWU6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xLCAjMjMyMzI3KSA4OCUsIHRyYW5zcGFyZW50KTsKICAgIC0tbWpyLXN0dWRpby1saW5lOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlciwgI2ZmZjIpIDcwJSwgdHJhbnNwYXJlbnQpOwp9Ci5tanItc3R1ZGlvX19oZWFkZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEycHg7CiAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdHVkaW8tY2hyb21lKTsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItc3R1ZGlvLWxpbmUpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpOwogICAgbWluLXdpZHRoOiAwOwp9Ci5tanItc3R1ZGlvX19uYXYsCi5tanItc3R1ZGlvX19hY3Rpb25zIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBmbGV4OiAwIDAgYXV0bzsKfQoubWpyLXN0dWRpb19fY291bnRlciB7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCk7CiAgICBtaW4td2lkdGg6IDU0cHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KLm1qci1zdHVkaW9fX3RpdGxlIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgbWluLXdpZHRoOiAwOwogICAgZmxleDogMSAxIGF1dG87Cn0KLm1qci1zdHVkaW9fX2ZpbGVuYW1lIHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBmb250LXNpemU6IDEzLjVweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cn0KLm1qci1zdHVkaW9fX3N1bW1hcnkgewogICAgZm9udC1zaXplOiAxMS41cHg7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkKTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cn0KLm1qci1zdHVkaW8tYnRuIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBtaW4td2lkdGg6IDMwcHg7CiAgICBoZWlnaHQ6IDMwcHg7CiAgICBwYWRkaW5nOiAwIDdweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjb2xvcjogaW5oZXJpdDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZvbnQ6IGluaGVyaXQ7CiAgICBmb250LXNpemU6IDEycHg7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTJzLCBib3JkZXItY29sb3IgMC4xMnMsIGNvbG9yIDAuMTJzOwp9Ci5tanItc3R1ZGlvLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKSB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZmctY29sb3IsICNmZmYpIDEwJSwgdHJhbnNwYXJlbnQpOwp9Ci5tanItc3R1ZGlvLWJ0bjpmb2N1cy12aXNpYmxlIHsKICAgIG91dGxpbmU6IDJweCBzb2xpZCB2YXIoLS1tanItYWNjZW50KTsKICAgIG91dGxpbmUtb2Zmc2V0OiAxcHg7Cn0KLm1qci1zdHVkaW8tYnRuOmRpc2FibGVkIHsKICAgIG9wYWNpdHk6IDAuMzU7CiAgICBjdXJzb3I6IGRlZmF1bHQ7Cn0KLm1qci1zdHVkaW8tYnRuLmlzLW9uIHsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAxNiUsIHRyYW5zcGFyZW50KTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDQwJSwgdHJhbnNwYXJlbnQpOwp9Ci5tanItc3R1ZGlvLWJ0bi5pcy10ZXh0IHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMmVtOwp9Ci5tanItc3R1ZGlvLWJ0bi5pcy1jbG9zZTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy1lcnJvciwgI2U1NDg0ZCkgMjglLCB0cmFuc3BhcmVudCk7Cn0KLm1qci1zdHVkaW8tY2hpcCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBoZWlnaHQ6IDIycHg7CiAgICBwYWRkaW5nOiAwIDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1mZy1jb2xvciwgI2ZmZikgOCUsIHRyYW5zcGFyZW50KTsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQpOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoubWpyLXN0dWRpby1zZWxlY3QgewogICAgaGVpZ2h0OiAyNnB4OwogICAgYm9yZGVyLXJhZGl1czogN3B4OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLXN0dWRpby1saW5lKTsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY29sb3I6IGluaGVyaXQ7CiAgICBmb250OiBpbmhlcml0OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgcGFkZGluZzogMCA0cHg7Cn0KLm1qci1zdHVkaW9fX2JvZHkgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDFmcikgbWlubWF4KDMwMHB4LCAzODBweCk7CiAgICBtaW4taGVpZ2h0OiAwOwp9Ci5tanItc3R1ZGlvLmlzLWluc3BlY3Rvci1jbG9zZWQgLm1qci1zdHVkaW9fX2JvZHkgewogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKTsKfQoubWpyLXN0dWRpb19fc3RhZ2UgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWluLXdpZHRoOiAwOwogICAgbWluLWhlaWdodDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KLm1qci1zdHVkaW9fX3Vuc3VwcG9ydGVkIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkKTsKfQoubWpyLXN0dWRpb19fdW5zdXBwb3J0ZWQgLnBpIHsKICAgIGZvbnQtc2l6ZTogNDBweDsKfQoubWpyLXN0dWRpb19faW5zcGVjdG9yIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgbWluLWhlaWdodDogMDsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTAsICMxYjFiMWUpOwogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1tanItc3R1ZGlvLWxpbmUpOwp9Ci5tanItc3R1ZGlvX19yZXZpZXcgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDhweDsKICAgIHBhZGRpbmc6IDEycHggMTRweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItc3R1ZGlvLWxpbmUpOwp9Ci5tanItc3R1ZGlvX19yZXZpZXctcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4Owp9Ci5tanItc3R1ZGlvX19sYWJlbCB7CiAgICBmb250LXNpemU6IDExcHg7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDZlbTsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQpOwp9Ci5tanItc3R1ZGlvX190YWJzIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBnYXA6IDJweDsKICAgIHBhZGRpbmc6IDZweCAxMHB4IDA7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLXN0dWRpby1saW5lKTsKfQoubWpyLXN0dWRpb19fdGFicyBidXR0b24gewogICAgYm9yZGVyOiBub25lOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkKTsKICAgIGZvbnQ6IGluaGVyaXQ7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBwYWRkaW5nOiA3cHggMTBweDsKICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGN1cnNvcjogcG9pbnRlcjsKfQoubWpyLXN0dWRpb19fdGFicyBidXR0b24uaXMtYWN0aXZlIHsKICAgIGNvbG9yOiB2YXIoLS1mZy1jb2xvciwgI2ZmZik7CiAgICBib3JkZXItYm90dG9tLWNvbG9yOiB2YXIoLS1tanItYWNjZW50KTsKfQoubWpyLXN0dWRpb19fdGFiLWJvZHkgewogICAgZmxleDogMSAxIGF1dG87CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIHBhZGRpbmc6IDEycHggMTRweCAxOHB4OwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDE0cHg7Cn0KLm1qci1zdHVkaW9fX2ZpbG1zdHJpcCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiA2cHg7CiAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3R1ZGlvLWNocm9tZSk7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tbWpyLXN0dWRpby1saW5lKTsKICAgIHNjcm9sbGJhci13aWR0aDogdGhpbjsKfQoubWpyLXN0dWRpb19fdGh1bWIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZmxleDogMCAwIGF1dG87CiAgICB3aWR0aDogNjRweDsKICAgIGhlaWdodDogNjRweDsKICAgIHBhZGRpbmc6IDA7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJhY2tncm91bmQ6ICMwMDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgb3BhY2l0eTogMC42OwogICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjEycywgYm9yZGVyLWNvbG9yIDAuMTJzLCB0cmFuc2Zvcm0gMC4xMnM7Cn0KLm1qci1zdHVkaW9fX3RodW1iOmhvdmVyIHsKICAgIG9wYWNpdHk6IDAuOTsKfQoubWpyLXN0dWRpb19fdGh1bWIuaXMtY3VycmVudCB7CiAgICBvcGFjaXR5OiAxOwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1tanItYWNjZW50KTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKfQoubWpyLXN0dWRpb19fdGh1bWIgaW1nIHsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICBkaXNwbGF5OiBibG9jazsKfQoubWpyLXN0dWRpb19fdGh1bWItYmFkZ2UgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgcmlnaHQ6IDRweDsKICAgIGJvdHRvbTogNHB4OwogICAgZm9udC1zaXplOiA5cHg7CiAgICBwYWRkaW5nOiAzcHg7CiAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNjUpOwogICAgY29sb3I6ICNmZmY7Cn0KCi8qIEltYWdlIHN0YWdlICovCi5tanItc3R1ZGlvLXN0YWdlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGN1cnNvcjogZ3JhYjsKICAgIHRvdWNoLWFjdGlvbjogbm9uZTsKfQoubWpyLXN0dWRpby1zdGFnZS5pcy1kcmFnZ2luZyB7CiAgICBjdXJzb3I6IGdyYWJiaW5nOwp9Ci5tanItc3R1ZGlvLXN0YWdlLmlzLWNoZWNrZXIgewogICAgYmFja2dyb3VuZC1jb2xvcjogIzJhMmEyYTsKICAgIGJhY2tncm91bmQtaW1hZ2U6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCAjM2EzYTNhIDI1JSwgdHJhbnNwYXJlbnQgMjUlKSwKICAgICAgICBsaW5lYXItZ3JhZGllbnQoLTQ1ZGVnLCAjM2EzYTNhIDI1JSwgdHJhbnNwYXJlbnQgMjUlKSwKICAgICAgICBsaW5lYXItZ3JhZGllbnQoNDVkZWcsIHRyYW5zcGFyZW50IDc1JSwgIzNhM2EzYSA3NSUpLAogICAgICAgIGxpbmVhci1ncmFkaWVudCgtNDVkZWcsIHRyYW5zcGFyZW50IDc1JSwgIzNhM2EzYSA3NSUpOwogICAgYmFja2dyb3VuZC1zaXplOiAyMHB4IDIwcHg7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDAsIDAgMTBweCwgMTBweCAtMTBweCwgLTEwcHggMDsKfQoubWpyLXN0dWRpby1zdGFnZV9faW1nIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDUwJTsKICAgIHRvcDogNTAlOwogICAgbWF4LXdpZHRoOiBub25lOwogICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgLXdlYmtpdC11c2VyLWRyYWc6IG5vbmU7CiAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwp9Ci5tanItc3R1ZGlvLXN0YWdlX19lcnJvciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkKTsKfQoKLyogUGxheWVyICovCi5tanItc3R1ZGlvLXBsYXllciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBiYWNrZ3JvdW5kOiAjMDAwOwp9Ci5tanItc3R1ZGlvLXBsYXllci5jb250cm9scy1oaWRkZW4gewogICAgY3Vyc29yOiBub25lOwp9Ci5tanItc3R1ZGlvLXBsYXllcl9fbWVkaWEgewogICAgbWF4LXdpZHRoOiAxMDAlOwogICAgbWF4LWhlaWdodDogMTAwJTsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgb2JqZWN0LWZpdDogY29udGFpbjsKICAgIGRpc3BsYXk6IGJsb2NrOwp9Ci5tanItc3R1ZGlvLXBsYXllcl9fYXVkaW8tYXJ0IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTJweDsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQpOwogICAgY3Vyc29yOiBwb2ludGVyOwp9Ci5tanItc3R1ZGlvLXBsYXllcl9fYXVkaW8tYXJ0IC5waSB7CiAgICBmb250LXNpemU6IDY0cHg7CiAgICBjb2xvcjogdmFyKC0tbWpyLWFjY2VudCk7Cn0KLm1qci1zdHVkaW8tcGxheWVyX19iaWctcGxheSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiA1MCU7CiAgICB0b3A6IDUwJTsKICAgIHdpZHRoOiA3MnB4OwogICAgaGVpZ2h0OiA3MnB4OwogICAgbWFyZ2luOiAtMzZweCAwIDAgLTM2cHg7CiAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpOwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjQ1KTsKICAgIGNvbG9yOiAjZmZmOwogICAgZm9udC1zaXplOiAyNnB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4xMnMsIGJhY2tncm91bmQgMC4xMnM7Cn0KLm1qci1zdHVkaW8tcGxheWVyX19iaWctcGxheTpob3ZlciB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDYpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU1JSwgcmdiYSgwLCAwLCAwLCAwLjQpKTsKfQoubWpyLXN0dWRpby1wbGF5ZXIuaXMtYXVkaW8gLm1qci1zdHVkaW8tcGxheWVyX19iaWctcGxheSB7CiAgICBkaXNwbGF5OiBub25lOwp9Ci5tanItc3R1ZGlvLXBsYXllcl9fZXJyb3IgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgY29sb3I6IHZhcigtLW1qci1zdGF0dXMtZXJyb3IsICNmZjhhOGEpOwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjYpOwogICAgcGFkZGluZzogMTBweCAxNHB4OwogICAgYm9yZGVyLXJhZGl1czogOHB4Owp9Ci5tanItc3R1ZGlvLXBsYXllcl9fY29udHJvbHMgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMTJweDsKICAgIHJpZ2h0OiAxMnB4OwogICAgYm90dG9tOiAxMnB4OwogICAgcGFkZGluZzogNnB4IDEwcHggOHB4OwogICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTIsIDEyLCAxNCwgMC43Mik7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEycHgpOwogICAgY29sb3I6ICNlZWU7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMsIHRyYW5zZm9ybSAwLjJzOwp9Ci5tanItc3R1ZGlvLXBsYXllci5jb250cm9scy1oaWRkZW4gLm1qci1zdHVkaW8tcGxheWVyX19jb250cm9scyB7CiAgICBvcGFjaXR5OiAwOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDZweCk7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoubWpyLXN0dWRpby1wbGF5ZXJfX3RyYWNrIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGhlaWdodDogMThweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRvdWNoLWFjdGlvbjogbm9uZTsKfQoubWpyLXN0dWRpby1wbGF5ZXJfX3RyYWNrOjpiZWZvcmUsCi5tanItc3R1ZGlvLXBsYXllcl9fYnVmZmVyZWQsCi5tanItc3R1ZGlvLXBsYXllcl9fcHJvZ3Jlc3MsCi5tanItc3R1ZGlvLXBsYXllcl9fbG9vcCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAwOwogICAgdG9wOiA3cHg7CiAgICBoZWlnaHQ6IDRweDsKICAgIGJvcmRlci1yYWRpdXM6IDJweDsKfQoubWpyLXN0dWRpby1wbGF5ZXJfX3RyYWNrOjpiZWZvcmUgewogICAgY29udGVudDogIiI7CiAgICByaWdodDogMDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCk7Cn0KLm1qci1zdHVkaW8tcGxheWVyX190cmFjazpob3Zlcjo6YmVmb3JlLAoubWpyLXN0dWRpby1wbGF5ZXJfX3RyYWNrOmhvdmVyIC5tanItc3R1ZGlvLXBsYXllcl9fYnVmZmVyZWQsCi5tanItc3R1ZGlvLXBsYXllcl9fdHJhY2s6aG92ZXIgLm1qci1zdHVkaW8tcGxheWVyX19wcm9ncmVzcywKLm1qci1zdHVkaW8tcGxheWVyX190cmFjazpob3ZlciAubWpyLXN0dWRpby1wbGF5ZXJfX2xvb3AgewogICAgdG9wOiA2cHg7CiAgICBoZWlnaHQ6IDZweDsKfQoubWpyLXN0dWRpby1wbGF5ZXJfX2J1ZmZlcmVkIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNCk7Cn0KLm1qci1zdHVkaW8tcGxheWVyX19sb29wIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmNWE1MjQpIDU1JSwgdHJhbnNwYXJlbnQpOwp9Ci5tanItc3R1ZGlvLXBsYXllcl9fcHJvZ3Jlc3MgewogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLWFjY2VudCk7Cn0KLm1qci1zdHVkaW8tcGxheWVyX190aHVtYiB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDNweDsKICAgIHdpZHRoOiAxMnB4OwogICAgaGVpZ2h0OiAxMnB4OwogICAgbWFyZ2luLWxlZnQ6IC02cHg7CiAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICBiYWNrZ3JvdW5kOiAjZmZmOwogICAgYm94LXNoYWRvdzogMCAwIDAgM3B4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA0NSUsIHRyYW5zcGFyZW50KTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9Ci5tanItc3R1ZGlvLXBsYXllcl9faG92ZXIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgYm90dG9tOiAyMnB4OwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgcGFkZGluZzogM3B4IDdweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC44NSk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9Ci5tanItc3R1ZGlvLXBsYXllcl9fcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBmbGV4LXdyYXA6IHdyYXA7Cn0KLm1qci1zdHVkaW8tcGxheWVyX190aW1lIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7CiAgICBtYXJnaW46IDAgNnB4Owp9Ci5tanItc3R1ZGlvLXBsYXllcl9fdGltZSAuaXMtZGltIHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTUpOwp9Ci5tanItc3R1ZGlvLXBsYXllcl9fc3BhY2VyIHsKICAgIGZsZXg6IDEgMSBhdXRvOwp9Ci5tanItc3R1ZGlvLXBsYXllcl9fZ3JvdXAgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAycHg7Cn0KLm1qci1zdHVkaW8tcGxheWVyX192b2x1bWUgewogICAgd2lkdGg6IDgwcHg7CiAgICBhY2NlbnQtY29sb3I6IHZhcigtLW1qci1hY2NlbnQpOwp9CkBtZWRpYSAobWF4LXdpZHRoOiA5MDBweCkgewogICAgLm1qci1zdHVkaW9fX2JvZHkgewogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDFmcik7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBtaW5tYXgoMCwgMWZyKSBtaW5tYXgoMCwgNDAlKTsKICAgIH0KICAgIC5tanItc3R1ZGlvX19pbnNwZWN0b3IgewogICAgICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1tanItc3R1ZGlvLWxpbmUpOwogICAgfQp9Ci5tanItc3R1ZGlvLXBsYXllcl9fdm9sdW1lIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiA4MHB4OwogICAgaGVpZ2h0OiAxNnB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdG91Y2gtYWN0aW9uOiBub25lOwp9Ci5tanItc3R1ZGlvLXBsYXllcl9fdm9sdW1lOjpiZWZvcmUsCi5tanItc3R1ZGlvLXBsYXllcl9fdm9sdW1lLWZpbGwgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHRvcDogNnB4OwogICAgaGVpZ2h0OiA0cHg7CiAgICBib3JkZXItcmFkaXVzOiAycHg7Cn0KLm1qci1zdHVkaW8tcGxheWVyX192b2x1bWU6OmJlZm9yZSB7CiAgICBjb250ZW50OiAiIjsKICAgIHJpZ2h0OiAwOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KTsKfQoubWpyLXN0dWRpby1wbGF5ZXJfX3ZvbHVtZS1maWxsIHsKICAgIGJhY2tncm91bmQ6ICNmZmY7Cn0KCi8qIFN0dWRpbyBwbGF5ZXIgaW5zaWRlIHRoZSBmbG9hdGluZyB2aWV3ZXIgKGNvbXBhY3QsIHdpZHRoLWF3YXJlKS4gKi8KLm1qci1tZnYtcGxheWVyLWhvc3QtLXN0dWRpbyB7CiAgICBiYWNrZ3JvdW5kOiAjMDAwOwp9Ci5tanItc3R1ZGlvLXBsYXllci5pcy1jb21wYWN0IC5tanItc3R1ZGlvLXBsYXllcl9fY29udHJvbHMgewogICAgbGVmdDogNnB4OwogICAgcmlnaHQ6IDZweDsKICAgIGJvdHRvbTogNnB4OwogICAgcGFkZGluZzogNHB4IDZweCA2cHg7CiAgICBib3JkZXItcmFkaXVzOiA5cHg7Cn0KLm1qci1zdHVkaW8tcGxheWVyLmlzLWNvbXBhY3QgLm1qci1zdHVkaW8tYnRuIHsKICAgIG1pbi13aWR0aDogMjZweDsKICAgIGhlaWdodDogMjZweDsKICAgIHBhZGRpbmc6IDAgNXB4OwogICAgYm9yZGVyLXJhZGl1czogN3B4Owp9Ci5tanItc3R1ZGlvLXBsYXllci5pcy1jb21wYWN0IC5tanItc3R1ZGlvLXBsYXllcl9fdGltZSB7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBtYXJnaW46IDAgNHB4Owp9Ci5tanItc3R1ZGlvLXBsYXllci5pcy1jb21wYWN0IC5tanItc3R1ZGlvLXBsYXllcl9fYmlnLXBsYXkgewogICAgd2lkdGg6IDUycHg7CiAgICBoZWlnaHQ6IDUycHg7CiAgICBtYXJnaW46IC0yNnB4IDAgMCAtMjZweDsKICAgIGZvbnQtc2l6ZTogMThweDsKfQoubWpyLXN0dWRpby1wbGF5ZXIuaXMtY29tcGFjdCAubWpyLXN0dWRpby1wbGF5ZXJfX3ZvbHVtZSB7CiAgICB3aWR0aDogNTZweDsKfQoubWpyLXN0dWRpby1wbGF5ZXIuaXMtY29tcGFjdCAubWpyLXN0dWRpby1wbGF5ZXJfX2F1ZGlvLWFydCAucGkgewogICAgZm9udC1zaXplOiA0MHB4Owp9CkBjb250YWluZXIgKG1heC13aWR0aDogNTIwcHgpIHsKICAgIC5tanItc3R1ZGlvLXBsYXllci5pcy1jb21wYWN0IC5tanItc3R1ZGlvLXBsYXllcl9fdm9sdW1lLAogICAgLm1qci1zdHVkaW8tcGxheWVyLmlzLWNvbXBhY3QgLm1qci1zdHVkaW8tY2hpcCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KfQpAY29udGFpbmVyIChtYXgtd2lkdGg6IDM4MHB4KSB7CiAgICAubWpyLXN0dWRpby1wbGF5ZXIuaXMtY29tcGFjdCAubWpyLXN0dWRpby1wbGF5ZXJfX2dyb3VwLAogICAgLm1qci1zdHVkaW8tcGxheWVyLmlzLWNvbXBhY3QgLm1qci1zdHVkaW8tcGxheWVyX190aW1lIC5pcy1kaW0gewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIEZsb2F0aW5nIHZpZXdlciByZWZyZXNoIC0gYWxpZ25lZCB3aXRoIHRoZSBTdHVkaW8gdmlld2VyLgogKiBQdXJlIHZpc3VhbCBsYXllciAoYXBwZW5kZWQgbGFzdCk6IGZsYXQgYnV0dG9ucyB0aGF0IGxpZ2h0IHVwIG9uIGhvdmVyIC8KICogd2hlbiBhY3RpdmUsIHNvZnRlciB3aW5kb3cgY2hyb21lLCBuZXV0cmFsIHN0YWdlLiBTdGF0ZSBjb2xvdXJzIChsaXZlLAogKiBwcmV2aWV3LCBub2RlIHN0cmVhbSkga2VlcCB0aGVpciBkZWRpY2F0ZWQgcnVsZXMgYWJvdmUuCiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoubWpyLW1mdiB7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDgwJSwgdHJhbnNwYXJlbnQpOwogICAgYm94LXNoYWRvdzoKICAgICAgICAwIDE4cHggNDhweCByZ2JhKDAsIDAsIDAsIDAuNDUpLAogICAgICAgIDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMyk7Cn0KLm1qci1tZnYtaGVhZGVyIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA5MiUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTsKfQoubWpyLW1mdi10b29sYmFyIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA3MCUsIHZhcigtLW1qci1zdXJmYWNlLTApIDMwJSk7CiAgICBnYXA6IDJweDsKfQoubWpyLW1mdiAubWpyLWljb24tYnRuIHsKICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKfQoubWpyLW1mdiAubWpyLWljb24tYnRuOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2ZmZikgMTAlLCB0cmFuc3BhcmVudCk7CiAgICB0cmFuc2Zvcm06IG5vbmU7Cn0KLm1qci1tZnYgLm1qci1pY29uLWJ0blthcmlhLXByZXNzZWQ9InRydWUiXSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA0MCUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAxNiUsIHRyYW5zcGFyZW50KTsKICAgIGJveC1zaGFkb3c6IG5vbmU7Cn0KLm1qci1tZnYgLm1qci1pY29uLWJ0bi5tanItbGl2ZS1hY3RpdmUgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcykgMTYlLCB0cmFuc3BhcmVudCk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MpIDQ1JSwgdHJhbnNwYXJlbnQpOwogICAgYm94LXNoYWRvdzogbm9uZTsKfQoubWpyLW1mdiAubWpyLWljb24tYnRuLm1qci1wcmV2aWV3LWFjdGl2ZSB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMTYlLCB0cmFuc3BhcmVudCk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA0NSUsIHRyYW5zcGFyZW50KTsKICAgIGJveC1zaGFkb3c6IG5vbmU7Cn0KLm1qci1tZnYgLm1qci1tZnYtc2ltcGxlLWNvbnRhaW5lciwKLm1qci1tZnYgLm1qci1tZnYtcGxheWVyLWhvc3QgewogICAgYmFja2dyb3VuZDogIzBkMGQwZjsKfQoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQsCi5tanItbWZ2Lm1qci1tZnYtLWRlc2t0b3AtZXhwYW5kZWQgewogICAgYm9yZGVyLXJhZGl1czogMDsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJveC1zaGFkb3c6IG5vbmU7Cn0K", "" + import.meta.url).toString(), n = document.createElement("link"); + let e = new URL("data:text/css;base64,LyoqCiAqIE1ham9vciBBc3NldHMgTWFuYWdlciAtIENvbWZ5LWxpa2UgdGhlbWUgbGF5ZXIKICoKICogUlVMRVM6CiAqIC0gRG8gTk9UIGhhcmRjb2RlIGEgY3VzdG9tIHBhbGV0dGU7IHVzZSBleGlzdGluZyBDb21meVVJIENTUyB2YXJpYWJsZXMgdmlhIHZhciguLi4pLgogKiAtIEtlZXAgZXZlcnl0aGluZyBzY29wZWQgdW5kZXIgYC5tanItYXNzZXRzLW1hbmFnZXJgIHRvIGF2b2lkIGxlYWtpbmcgc3R5bGVzIHRvIENvbWZ5VUkgKGV4Y2VwdCBgLm1qci1wb3BvdmVyKmAgd2hpY2ggY2FuIGJlIHBvcnRhbGVkIHRvIGBkb2N1bWVudC5ib2R5YCkuCiAqLwoKLm1qci1hc3NldHMtbWFuYWdlciB7CiAgICAvKiBUeXBvZ3JhcGh5ICovCiAgICBmb250LWZhbWlseTogdmFyKAogICAgICAgIC0tY29tZnktZm9udCwKICAgICAgICB2YXIoCiAgICAgICAgICAgIC0tZm9udC1pbnRlciwKICAgICAgICAgICAgdWktc2Fucy1zZXJpZiwKICAgICAgICAgICAgc3lzdGVtLXVpLAogICAgICAgICAgICAtYXBwbGUtc3lzdGVtLAogICAgICAgICAgICAiU2Vnb2UgVUkiLAogICAgICAgICAgICBSb2JvdG8sCiAgICAgICAgICAgIEFyaWFsLAogICAgICAgICAgICBzYW5zLXNlcmlmCiAgICAgICAgKQogICAgKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yLCB2YXIoLS1jb250ZW50LWZnLCB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKSkpOwoKICAgIC8qCiAgICAgKiBTdXJmYWNlcyAtIHByaW9yaXR5OiBDb21meVVJIHYxLjQyIGRlc2lnbi1zeXN0ZW0gdG9rZW4gLT4gbGVnYWN5IHRva2VuIC0+IGhhcmQgZmFsbGJhY2sKICAgICAqIE5ldyB0b2tlbnM6IC0taW50ZXJmYWNlLXBhbmVsLXN1cmZhY2UsIC0taW50ZXJmYWNlLW1lbnUtc3VyZmFjZSwgLS1pbnRlcmZhY2UtcGFuZWwtaG92ZXItc3VyZmFjZSwKICAgICAqICAgICAgICAgICAgIC0tbW9kYWwtY2FyZC1iYWNrZ3JvdW5kLCAtLWJ1dHRvbi1zdXJmYWNlLCAtLWJ1dHRvbi1ob3Zlci1zdXJmYWNlLAogICAgICogICAgICAgICAgICAgLS1pbnRlcmZhY2UtcGFuZWwtc2VsZWN0ZWQtc3VyZmFjZSwgLS1wcmltYXJ5LWJhY2tncm91bmQsIC0tbXV0ZWQtZm9yZWdyb3VuZCwKICAgICAqICAgICAgICAgICAgIC0tYm9yZGVyLWRlZmF1bHQsIC0tc3VjY2Vzcy1iYWNrZ3JvdW5kLCAtLXdhcm5pbmctYmFja2dyb3VuZCwgLS1kZXN0cnVjdGl2ZS1iYWNrZ3JvdW5kCiAgICAgKi8KICAgIC0tbWpyLXN1cmZhY2UtMDogdmFyKC0taW50ZXJmYWNlLXBhbmVsLXN1cmZhY2UsIHZhcigtLWNvbnRlbnQtYmcsICMxZTFlMWUpKTsKICAgIC0tbWpyLXN1cmZhY2UtMTogdmFyKC0taW50ZXJmYWNlLW1lbnUtc3VyZmFjZSwgdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSkpOwogICAgLS1tanItc3VyZmFjZS0yOiB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtaG92ZXItc3VyZmFjZSwgdmFyKC0tY29tZnktbWVudS1zZWNvbmRhcnktYmcsICMzMzMpKTsKICAgIC0tbWpyLXN1cmZhY2UtMzogdmFyKC0tbW9kYWwtY2FyZC1iYWNrZ3JvdW5kLCB2YXIoLS1jb21meS1tZW51LWJnLCAjMjIyKSk7CiAgICAtLW1qci1ib3JkZXI6IHZhcigtLWJvcmRlci1kZWZhdWx0LCB2YXIoLS1ib3JkZXItY29sb3IsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpKTsKICAgIC0tbWpyLW11dGVkOiB2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kLCB2YXIoLS1kZXNjcmlwLXRleHQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42NSkpKTsKICAgIC0tbWpyLWFjY2VudDogdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKTsKICAgIC0tbWpyLWFjY2VudC1ob3ZlcjogdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWhvdmVyLCB2YXIoLS1jb21meS1hY2NlbnQsICM3ZWM4ZmYpKTsKICAgIC0tbWpyLWJ0bi1zdXJmYWNlOiB2YXIoLS1idXR0b24tc3VyZmFjZSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgLS1tanItYnRuLWhvdmVyOiB2YXIoLS1idXR0b24taG92ZXItc3VyZmFjZSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgLS1tanItc2VsZWN0ZWQtc3VyZmFjZTogdmFyKC0taW50ZXJmYWNlLXBhbmVsLXNlbGVjdGVkLXN1cmZhY2UsIHJnYmEoOTUsIDE3OSwgMjU1LCAwLjE1KSk7CgogICAgLyogUmFkaWkgLSB1c2UgQ29tZnlVSSBkZXNpZ24tc3lzdGVtIHJhZGl1cyB0b2tlbnMgd2hlbiBhdmFpbGFibGUgKi8KICAgIC0tbWpyLXItc206IHZhcigtLXJhZGl1cy1zbSwgOHB4KTsKICAgIC0tbWpyLXItbWQ6IHZhcigtLXJhZGl1cy1tZCwgMTBweCk7CiAgICAtLW1qci1yLWxnOiB2YXIoLS1yYWRpdXMtbGcsIDEycHgpOwoKICAgIC8qIFNwYWNpbmcgKi8KICAgIC0tbWpyLXBhZC1zbTogOHB4OwogICAgLS1tanItcGFkLW1kOiAxMnB4OwogICAgLS1tanItcGFkLWxnOiAxNnB4OwoKICAgIC8qIFNlbWFudGljIFN0YXR1cyBDb2xvcnMgLSBwcmVmZXIgQ29tZnlVSSB2MS40MiBzZW1hbnRpYyB0b2tlbnMgKi8KICAgIC0tbWpyLXN0YXR1cy1zdWNjZXNzOiB2YXIoLS1zdWNjZXNzLWJhY2tncm91bmQsIHZhcigtLWNvbWZ5LXN0YXR1cy1zdWNjZXNzLCAjNGNhZjUwKSk7CiAgICAtLW1qci1zdGF0dXMtd2FybmluZzogdmFyKC0td2FybmluZy1iYWNrZ3JvdW5kLCB2YXIoLS1jb21meS1zdGF0dXMtd2FybmluZywgI2ZmYTcyNikpOwogICAgLS1tanItc3RhdHVzLWVycm9yOiB2YXIoLS1kZXN0cnVjdGl2ZS1iYWNrZ3JvdW5kLCB2YXIoLS1jb21meS1zdGF0dXMtZXJyb3IsICNmNDQzMzYpKTsKICAgIC0tbWpyLXN0YXR1cy1pbmZvOiB2YXIoLS1jb21meS1zdGF0dXMtaW5mbywgIzIxOTZmMyk7CiAgICAtLW1qci1zdGF0dXMtbmV1dHJhbDogdmFyKC0tY29tZnktc3RhdHVzLW5ldXRyYWwsICM5ZTllOWUpOwogICAgLS1tanItc3Rhci1hY3RpdmU6ICNmZmQ0NWE7CgogICAgLyogQmFkZ2UgY29sb3JzIChvdmVycmlkZGVuIGJ5IHNldHRpbmdzKSAqLwogICAgLS1tanItYmFkZ2UtaW1hZ2U6ICMyMTk2ZjM7CiAgICAtLW1qci1iYWRnZS12aWRlbzogIzljMjdiMDsKICAgIC0tbWpyLWJhZGdlLWF1ZGlvOiAjZmY5ODAwOwogICAgLS1tanItYmFkZ2UtbW9kZWwzZDogIzRjYWY1MDsKICAgIC0tbWpyLWNhcmQtaG92ZXItY29sb3I6IHZhcigtLWludGVyZmFjZS1wYW5lbC1ob3Zlci1zdXJmYWNlLCAjM2QzZDNkKTsKICAgIC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yOiB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtc2VsZWN0ZWQtc3VyZmFjZSwgIzRhOTBlMik7CiAgICAtLW1qci1yYXRpbmctY29sb3I6ICNmZjk1MDA7CiAgICAtLW1qci10YWctY29sb3I6ICM0YTkwZTI7Cn0KCi8qIE1ha2UgdGhlIHRoZW1lIHZpc2libHkgYXBwbHkgZXZlbiB3aXRoIGlubGluZSBzdHlsZXMgKi8KLm1qci1hc3NldHMtbWFuYWdlciAqIHsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIubWpyLWFtLWNvbnRhaW5lciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGhlaWdodDogMTAwJTsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1oZWFkZXIgewogICAgcGFkZGluZzogMTRweCAxNnB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSk7CiAgICBmbGV4OiAwIDAgYXV0bzsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDI7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1oZWFkZXItcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgbWluLWhlaWdodDogMjhweDsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGZsZXgtd3JhcDogd3JhcDsKICAgIHJvdy1nYXA6IDEwcHg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1oZWFkZXItbGVmdCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1oZWFkZXItYWN0aW9ucyB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBmbGV4OiAwIDAgYXV0bzsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGZsZXgtd3JhcDogd3JhcDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWhlYWRlci10b29scyB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGdhcDogOHB4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRhYnMgewogICAgLyogUXVldWUtbGlrZSB0YWJzIChhY3RpdmUgcGlsbCwgb3RoZXJzIGFzIHRleHQpICovCiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGJvcmRlcjogbm9uZTsKICAgIHBhZGRpbmc6IDA7CiAgICBnYXA6IDEwcHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBmbGV4OiAxIDEgYXV0bzsKICAgIG1pbi13aWR0aDogMDsKICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci10YWJzOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICB3aWR0aDogMDsKICAgIGhlaWdodDogMDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRhYiB7CiAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2RkZCkgNjUlLCB0cmFuc3BhcmVudCk7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIHRyYW5zZm9ybSAxMjBtcyBlYXNlLAogICAgICAgIGJhY2tncm91bmQtY29sb3IgMTIwbXMgZWFzZSwKICAgICAgICBjb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGFiOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHRyYW5zcGFyZW50KTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDcwJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGFiLmlzLWFjdGl2ZSB7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2ZmZik7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLCB0cmFuc3BhcmVudCk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4NSUsIHRyYW5zcGFyZW50KTsKICAgIGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjE4KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWljb24tYnRuIHsKICAgIHdpZHRoOiAyOHB4OwogICAgaGVpZ2h0OiAyOHB4OwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcsIDAuNXJlbSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTIpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgcGFkZGluZzogMDsKICAgIHRyYW5zaXRpb246CiAgICAgICAgdHJhbnNmb3JtIDEyMG1zIGVhc2UsCiAgICAgICAgYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaWNvbi1idG46aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNDUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLCB2YXIoLS1tanItYWNjZW50KSA4JSk7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pY29uLWJ0bi5tanItY29udGV4dC1hY3RpdmUsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pY29uLWJ0bi5tanItcG9wb3Zlci1vcGVuIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDg1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDU1JSwgdmFyKC0tbWpyLWFjY2VudCkgMTIlKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMzUlLCB0cmFuc3BhcmVudCk7Cn0KCi8qIEZsb2F0aW5nIFZpZXdlciBidXR0b24gLSB0ZWFsIGdsb3cgd2hlbiB2aWV3ZXIgaXMgb3BlbiAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaWNvbi1idG4ubWpyLW1mdi1idG4tYWN0aXZlIHsKICAgIGNvbG9yOiAjNGRkOWMwOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDc3LCAyMTcsIDE5MiwgMC41NSk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDc3LCAyMTcsIDE5MiwgMC4xKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCByZ2JhKDc3LCAyMTcsIDE5MiwgMC4yNSk7Cn0KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWljb24tYnRuLm1qci1tZnYtYnRuLWFjdGl2ZSAucGkgewogICAgb3BhY2l0eTogMTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWljb24tYnRuLm1qci1tZXNzYWdlLWJ0biB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogdmlzaWJsZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWljb24tYnRuLm1qci1tZXNzYWdlLWhhcy11bnJlYWQgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNzUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNzIlLCB2YXIoLS1tanItYWNjZW50KSAxMSUpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWVzc2FnZS1iYWRnZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IC01cHg7CiAgICByaWdodDogLTZweDsKICAgIG1pbi13aWR0aDogMTZweDsKICAgIGhlaWdodDogMTZweDsKICAgIHBhZGRpbmc6IDAgNHB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgNTUlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMykpOwogICAgYmFja2dyb3VuZDogI2VmNTM1MDsKICAgIGNvbG9yOiAjZmZmOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMzUpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaWNvbi1idG4gLnBpIHsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgb3BhY2l0eTogMC45Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaWNvbi1idG46ZGlzYWJsZWQsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1haS1jb250cm9sOmRpc2FibGVkIHsKICAgIG9wYWNpdHk6IDAuNTsKICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICBmaWx0ZXI6IGdyYXlzY2FsZSgwLjQ1KTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDg4JSwgdHJhbnNwYXJlbnQpICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgOTIlLCB0cmFuc3BhcmVudCkgIWltcG9ydGFudDsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KSkgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFpLWRpc2FibGVkIC5tanItYWktY29udHJvbDpob3ZlciB7CiAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFpLWRpc2FibGVkLWJsb2NrIHsKICAgIG9wYWNpdHk6IDAuNTg7CiAgICBmaWx0ZXI6IGdyYXlzY2FsZSgwLjQ1KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFpLWRpc2FibGVkLWJsb2NrIC5tanItYWktY29udHJvbCwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFpLWRpc2FibGVkLWJsb2NrIGJ1dHRvbiB7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLyogUG9wb3ZlcnMgY2FuIGJlIG1vdmVkIHRvIGBkb2N1bWVudC5ib2R5YCAocG9ydGFsKSB0byBhdm9pZCBiZWluZyBjbGlwcGVkLiAqLwoubWpyLXBvcG92ZXIgewogICAgZm9udC1mYW1pbHk6IHZhcigKICAgICAgICAtLWNvbWZ5LWZvbnQsCiAgICAgICAgdmFyKAogICAgICAgICAgICAtLWZvbnQtaW50ZXIsCiAgICAgICAgICAgIHVpLXNhbnMtc2VyaWYsCiAgICAgICAgICAgIHN5c3RlbS11aSwKICAgICAgICAgICAgLWFwcGxlLXN5c3RlbSwKICAgICAgICAgICAgIlNlZ29lIFVJIiwKICAgICAgICAgICAgUm9ib3RvLAogICAgICAgICAgICBBcmlhbCwKICAgICAgICAgICAgc2Fucy1zZXJpZgogICAgICAgICkKICAgICk7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBsaW5lLWhlaWdodDogMS4zNTsKICAgIGNvbG9yOiB2YXIoLS1mZy1jb2xvciwgdmFyKC0tY29udGVudC1mZywgdmFyKC0taW5wdXQtdGV4dCwgI2RkZCkpKTsKCiAgICAvKiBQcm92aWRlIGZhbGxiYWNrcyB3aGVuIG91dHNpZGUgYC5tanItYXNzZXRzLW1hbmFnZXJgIHNjb3BlICovCiAgICAtLW1qci1zdXJmYWNlLTE6IHZhcigtLWludGVyZmFjZS1tZW51LXN1cmZhY2UsIHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpKTsKICAgIC0tbWpyLWJvcmRlcjogdmFyKC0tYm9yZGVyLWRlZmF1bHQsIHZhcigtLWJvcmRlci1jb2xvciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSkpOwogICAgLS1tanItbXV0ZWQ6IHZhcigtLW11dGVkLWZvcmVncm91bmQsIHZhcigtLWRlc2NyaXAtdGV4dCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSkpOwogICAgLS1tanItYWNjZW50OiB2YXIoLS1wcmltYXJ5LWJhY2tncm91bmQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpOwogICAgLS1tanItcG9wb3Zlci16LWluZGV4OiAyMTQ3NDgzNjQ3OwoKICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgIHRvcDogMDsKICAgIGxlZnQ6IDA7CiAgICBtaW4td2lkdGg6IDA7CiAgICB3aWR0aDogbWluKDI4MHB4LCBjYWxjKDEwMHZ3IC0gMjRweCkpOwogICAgbWF4LXdpZHRoOiBtaW4oMzYwcHgsIGNhbGMoMTAwdncgLSAyNHB4KSk7CiAgICBwYWRkaW5nOiAxMHB4OwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnLCAwLjVyZW0pOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSwgdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSkpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgdmFyKC0tYm9yZGVyLWNvbG9yLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKSk7CiAgICBib3gtc2hhZG93OiAwIDEycHggMjhweCByZ2JhKDAsIDAsIDAsIDAuMzUpOwogICAgei1pbmRleDogdmFyKC0tbWpyLXBvcG92ZXItei1pbmRleCk7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICB0b3VjaC1hY3Rpb246IHBhbi15OwogICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluOwp9CgoubWpyLXBvcG92ZXItLWhpZGRlbiB7CiAgICBkaXNwbGF5OiBub25lOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIHsKICAgIG1pbi13aWR0aDogMzQwcHg7CiAgICB3aWR0aDogbWluKDM2MHB4LCBjYWxjKDEwMHZ3IC0gMjRweCkpOwogICAgcGFkZGluZzogMTJweDsKfQoKLm1qci1zb3J0LXBvcG92ZXIgewogICAgbWluLXdpZHRoOiAyMjBweDsKICAgIHdpZHRoOiBtaW4oMjYwcHgsIGNhbGMoMTAwdncgLSAyNHB4KSk7CiAgICBwYWRkaW5nOiAxMHB4Owp9CgoubWpyLWNvbGxlY3Rpb25zLXBvcG92ZXIgewogICAgbWluLXdpZHRoOiAyODBweDsKICAgIHdpZHRoOiBtaW4oMzIwcHgsIGNhbGMoMTAwdncgLSAyNHB4KSk7CiAgICBwYWRkaW5nOiAxMHB4Owp9CgoubWpyLXBpbm5lZC1mb2xkZXJzLXBvcG92ZXIgewogICAgbWluLXdpZHRoOiAyODBweDsKICAgIHdpZHRoOiBtaW4oMzQwcHgsIGNhbGMoMTAwdncgLSAyNHB4KSk7CiAgICBwYWRkaW5nOiAxMHB4Owp9CgoubWpyLXBpbm5lZC1mb2xkZXJzLXBvcG92ZXIgLm1qci1waW5uZWQtZm9sZGVycy1tZW51IHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDZweDsKfQoKLm1qci1waW5uZWQtZm9sZGVycy1wb3BvdmVyIC5tanItcGlubmVkLWZvbGRlcnMtZW1wdHkgewogICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgb3BhY2l0eTogMC43NTsKfQoKLm1qci1waW5uZWQtZm9sZGVycy1wb3BvdmVyIC5tanItcGlubmVkLWZvbGRlci1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoOwogICAgd2lkdGg6IDEwMCU7Cn0KCi5tanItcGlubmVkLWZvbGRlcnMtcG9wb3ZlciAubWpyLXBpbm5lZC1mb2xkZXItb3BlbiB7CiAgICBmbGV4OiAxOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICB3aWR0aDogMTAwJTsKICAgIGdhcDogMTBweDsKICAgIHBhZGRpbmc6IDlweCAxMHB4OwogICAgYm9yZGVyLXJhZGl1czogOXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxMjAsIDE5MCwgMjU1LCAwLjE4KTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMyksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMSkpOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBib3JkZXItY29sb3IgMTIwbXMgZWFzZSwKICAgICAgICBiYWNrZ3JvdW5kIDEyMG1zIGVhc2U7Cn0KCi5tanItcGlubmVkLWZvbGRlcnMtcG9wb3ZlciAubWpyLXBpbm5lZC1mb2xkZXItb3Blbjpob3ZlciwKLm1qci1waW5uZWQtZm9sZGVycy1wb3BvdmVyIC5tanItcGlubmVkLWZvbGRlci1vcGVuOmZvY3VzLXZpc2libGUgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE0NSwgMjA1LCAyNTUsIDAuNCk7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDgwLCAxNDAsIDI1NSwgMC4xOCksIHJnYmEoMzIsIDEwMCwgMjAwLCAwLjE0KSk7Cn0KCi5tanItcGlubmVkLWZvbGRlcnMtcG9wb3ZlciAubWpyLXBpbm5lZC1mb2xkZXItbGFiZWwgewogICAgbWluLXdpZHRoOiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBjb2xvcjogdmFyKC0tZmctY29sb3IsICNlNmVkZjcpOwp9CgoubWpyLXBpbm5lZC1mb2xkZXJzLXBvcG92ZXIgLm1qci1waW5uZWQtZm9sZGVyLXBhdGggewogICAgZmxleDogMCAxIGF1dG87CiAgICBtaW4td2lkdGg6IDA7CiAgICBtYXgtd2lkdGg6IDIyMHB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG9wYWNpdHk6IDAuNjg7CiAgICBmb250LXNpemU6IDExcHg7Cn0KCi5tanItcGlubmVkLWZvbGRlcnMtcG9wb3ZlciAubWpyLXBpbm5lZC1mb2xkZXItdW5waW4gewogICAgd2lkdGg6IDQycHg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDA7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgOTUsIDk1LCAwLjM1KTsKICAgIGJvcmRlci1yYWRpdXM6IDlweDsKICAgIG1hcmdpbi1sZWZ0OiA2cHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDI1NSwgNzAsIDcwLCAwLjE2KSwgcmdiYSgxNjAsIDIwLCAyMCwgMC4xMikpOwp9CgoubWpyLXBpbm5lZC1mb2xkZXJzLXBvcG92ZXIgLm1qci1waW5uZWQtZm9sZGVyLXVucGluIC5waSB7CiAgICBvcGFjaXR5OiAwLjg4OwogICAgY29sb3I6IHJnYmEoMjU1LCAxMzAsIDEzMCwgMC45Nik7Cn0KCi5tanItbWVzc2FnZXMtcG9wb3ZlciB7CiAgICBtaW4td2lkdGg6IDMyMHB4OwogICAgd2lkdGg6IG1pbig0NjBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIHBhZGRpbmc6IDEwcHg7Cn0KCi5tanItaW5saW5lLWRpYWxvZy1tYXNrIHsKICAgIHBvc2l0aW9uOiBzdGF0aWMgIWltcG9ydGFudDsKICAgIGluc2V0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICB3aWR0aDogYXV0byAhaW1wb3J0YW50OwogICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogICAgcG9pbnRlci1ldmVudHM6IGF1dG8gIWltcG9ydGFudDsKfQoKLm1qci1pbmxpbmUtZGlhbG9nLXJvb3QgewogICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKICAgIHdpZHRoOiAxMDAlOwogICAgcG9pbnRlci1ldmVudHM6IGF1dG87Cn0KCi5tanItaW5saW5lLWRpYWxvZy1jb250ZW50IHsKICAgIHBhZGRpbmc6IDA7Cn0KCi5tanItbWVzc2FnZXMtaGVhZCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogOHB4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAgbWFyZ2luLWJvdHRvbTogOHB4Owp9CgoubWpyLW1lc3NhZ2VzLXRhYnMgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICBwYWRkaW5nOiAzcHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4OCUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA3NCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1tZXNzYWdlcy10YWIgewogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIGJvcmRlcjogMDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZjFmMWYxKSA3NiUsIHRyYW5zcGFyZW50KTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yIDAuMTRzIGVhc2UsCiAgICAgICAgY29sb3IgMC4xNHMgZWFzZSwKICAgICAgICB0cmFuc2Zvcm0gMC4xNHMgZWFzZTsKfQoKLm1qci1tZXNzYWdlcy10YWI6aG92ZXIsCi5tanItbWVzc2FnZXMtdGFiOmZvY3VzLXZpc2libGUgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDE0JSwgdHJhbnNwYXJlbnQpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNmMWYxZjEpOwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci1tZXNzYWdlcy10YWIuaXMtYWN0aXZlIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAyMiUsIHZhcigtLW1qci1zdXJmYWNlLTIpKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZmZmKTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMzQlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWVzc2FnZXMtcGFuZWxzIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDhweDsKICAgIG1heC1oZWlnaHQ6IG1pbig1MnZoLCA0MjBweCk7Cn0KCi5tanItbWVzc2FnZXMtbGlzdCwKLm1qci1tZXNzYWdlcy1zaG9ydGN1dHMtcGFuZWwgewogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47Cn0KCi5tanItdGFiLWNvdW50LWJhZGdlIHsKICAgIG1pbi13aWR0aDogMTZweDsKICAgIGhlaWdodDogMTZweDsKICAgIHBhZGRpbmc6IDAgNXB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGZvbnQtc2l6ZTogOXB4OwogICAgZm9udC13ZWlnaHQ6IDgwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAyZW07CiAgICBsaW5lLWhlaWdodDogMTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAyOCUsIHZhcigtLW1qci1zdXJmYWNlLTIpKTsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2ZmZikgOTIlLCB0cmFuc3BhcmVudCk7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDQ4JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1lc3NhZ2VzLXRpdGxlIHsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgbWluLXdpZHRoOiAwOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAzZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSA4MiUsIHZhcigtLW1qci1tdXRlZCkpOwp9CgoubWpyLW1lc3NhZ2VzLWFjdGlvbnMgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgIGdhcDogNnB4OwogICAgZmxleC13cmFwOiB3cmFwOwp9CgoubWpyLW1lc3NhZ2VzLW1hcmstcmVhZC1idG4gewogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7Cn0KCi5tanItbWVzc2FnZXMtc3Rhci1saW5rIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2YxZjFmMSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjZjNjODRiIDQyJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsICNmM2M4NGIgMTIlLCB2YXIoLS1tanItc3VyZmFjZS0yKSk7Cn0KCi5tanItbWVzc2FnZXMtc3Rhci1saW5rOmhvdmVyLAoubWpyLW1lc3NhZ2VzLXN0YXItbGluazpmb2N1cy12aXNpYmxlIHsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQoKLm1qci1tZXNzYWdlcy1zdGFyLWljb24gewogICAgY29sb3I6ICNmM2M4NGI7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLm1qci1tZXNzYWdlcy1zdGFyLWxhYmVsIHsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItbWVzc2FnZXMtbGlzdCB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA4cHg7Cn0KCi5tanItbWVzc2FnZXMtZW1wdHkgewogICAgcGFkZGluZzogOHB4IDZweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIG9wYWNpdHk6IDAuNzI7Cn0KCi5tanItbWVzc2FnZS1pdGVtIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDVweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODYlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTglLCB0cmFuc3BhcmVudCk7CiAgICBwYWRkaW5nOiA4cHg7Cn0KCi5tanItbWVzc2FnZS1pdGVtLS11bnJlYWQgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTglLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDI2JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1lc3NhZ2UtaXRlbS0td2FybmluZyB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjZjBiODVhIDYyJSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLW1lc3NhZ2UtaXRlbS0tZXJyb3IgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgI2YzNmI2YiA2MiUsIHZhcigtLW1qci1ib3JkZXIpKTsKfQoKLm1qci1tZXNzYWdlLWl0ZW0tLXN1Y2Nlc3MgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgIzU4YzA3ZCA2MiUsIHZhcigtLW1qci1ib3JkZXIpKTsKfQoKLm1qci1tZXNzYWdlLWl0ZW0taGVhZCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogOHB4Owp9CgoubWpyLW1lc3NhZ2UtaXRlbS10aXRsZS13cmFwIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgbWluLXdpZHRoOiAwOwogICAgZmxleDogMSAxIGF1dG87Cn0KCi5tanItbWVzc2FnZS1pdGVtLWVtb2ppIHsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgZm9udC1zaXplOiAxNnB4OwogICAgbGluZS1oZWlnaHQ6IDE7Cn0KCi5tanItbWVzc2FnZS1pdGVtLXRpdGxlIHsKICAgIG1pbi13aWR0aDogMDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2YxZjFmMSk7Cn0KCi5tanItbWVzc2FnZS1pdGVtLWNhdGVnb3J5IHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDFweCA2cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wM2VtOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDIwJSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZmZmKSA4NiUsIHRyYW5zcGFyZW50KTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItbWVzc2FnZS1pdGVtLW1ldGEgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgb3BhY2l0eTogMC43MjsKfQoKLm1qci1tZXNzYWdlLWl0ZW0tYm9keSB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBvcGFjaXR5OiAwLjkyOwogICAgbGluZS1oZWlnaHQ6IDEuNDU7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwp9CgoubWpyLW1lc3NhZ2UtaXRlbS1hY3Rpb24gewogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKTsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgIHdpZHRoOiBmaXQtY29udGVudDsKfQoKLm1qci1tZXNzYWdlLWl0ZW0tYWN0aW9uOmhvdmVyIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9CgovKiBUb2FzdCBIaXN0b3J5IHRhYiAtIHVucmVhZCBpbmRpY2F0b3IgZG90ICovCi5tanItdGFiLXVucmVhZC1kb3QgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgd2lkdGg6IDZweDsKICAgIGhlaWdodDogNnB4OwogICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7CiAgICBtYXJnaW4tbGVmdDogNXB4OwogICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgIGZsZXgtc2hyaW5rOiAwOwp9CgovKiBIaXN0b3J5IHBhbmVsICovCi5tanItbWVzc2FnZXMtaGlzdG9yeS1wYW5lbCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIG1pbi1oZWlnaHQ6IDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgoubWpyLWhpc3RvcnktaGVhZCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIHBhZGRpbmc6IDRweCAwIDZweDsKICAgIGZsZXgtc2hyaW5rOiAwOwp9CgoubWpyLWhpc3RvcnktaGVhZC1sYWJlbCB7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgb3BhY2l0eTogMC42MjsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtOwp9CgoubWpyLWhpc3RvcnktY2xlYXItYnRuIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIHBhZGRpbmc6IDJweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwogICAgY29sb3I6IGluaGVyaXQ7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBvcGFjaXR5OiAwLjcyOwp9CgoubWpyLWhpc3RvcnktY2xlYXItYnRuOmhvdmVyIHsKICAgIG9wYWNpdHk6IDE7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMTIlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItaGlzdG9yeS1saXN0IHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDRweDsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwp9CgoubWpyLWhpc3RvcnktaXRlbSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICBnYXA6IDhweDsKICAgIHBhZGRpbmc6IDZweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCkpOwogICAgZm9udC1zaXplOiAxMnB4Owp9CgoubWpyLWhpc3RvcnktaXRlbS0tZXJyb3IgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgI2YzNmI2YiA1MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tLXdhcm5pbmcgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgI2YwYjg1YSA1MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tLXN1Y2Nlc3MgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgIzU4YzA3ZCA1MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKfQoKLm1qci1oaXN0b3J5LWl0ZW0taWNvbiB7CiAgICBmbGV4LXNocmluazogMDsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ7Cn0KCi5tanItaGlzdG9yeS1pdGVtLWNvbnRlbnQgewogICAgbWluLXdpZHRoOiAwOwogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogNHB4Owp9CgoubWpyLWhpc3RvcnktaXRlbS1tc2cgewogICAgb3BhY2l0eTogMC45MjsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlOwogICAgd29yZC1icmVhazogYnJlYWstd29yZDsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tdGl0bGUgewogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICBvcGFjaXR5OiAwLjk2OwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7Cn0KCi5tanItaGlzdG9yeS1pdGVtLWRldGFpbCB7CiAgICBvcGFjaXR5OiAwLjg0OwogICAgbGluZS1oZWlnaHQ6IDEuNDU7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTsKICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7Cn0KCi5tanItaGlzdG9yeS1pdGVtLW1ldGEgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDZweDsKICAgIGZsZXgtd3JhcDogd3JhcDsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tdGltZSB7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBvcGFjaXR5OiAwLjUyOwp9CgoubWpyLWhpc3RvcnktaXRlbS1jaGlwIHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgcGFkZGluZzogMnB4IDZweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDgyJSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTMsIHZhcigtLW1qci1zdXJmYWNlLTIpKSA3OCUsIHRyYW5zcGFyZW50KTsKICAgIG9wYWNpdHk6IDAuNzY7Cn0KCi5tanItaGlzdG9yeS1pdGVtLWFjdGlvbiB7CiAgICBmb250LXNpemU6IDExcHg7CiAgICB3aWR0aDogZml0LWNvbnRlbnQ7CiAgICBjb2xvcjogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCi5tanItaGlzdG9yeS1pdGVtLWFjdGlvbjpob3ZlciB7CiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tcHJvZ3Jlc3MgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogNHB4Owp9CgoubWpyLWhpc3RvcnktaXRlbS1wcm9ncmVzcy1zdW1tYXJ5IHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIG9wYWNpdHk6IDAuNzQ7CiAgICBsaW5lLWhlaWdodDogMS4zNTsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlOwp9CgoubWpyLWhpc3RvcnktaXRlbS1wcm9ncmVzcy1iYXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDZweDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3NSUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tcHJvZ3Jlc3MtZmlsbCB7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDkwZGVnLAogICAgICAgIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCAjNThjMDdkIDcyJSwgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZikpCiAgICApOwp9CgoubWpyLXNob3J0Y3V0LWd1aWRlIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDhweDsKfQoKLm1qci1zaG9ydGN1dC1ndWlkZS1pbnRybyB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsaW5lLWhlaWdodDogMS40NTsKICAgIG9wYWNpdHk6IDAuODQ7Cn0KCi5tanItc2hvcnRjdXQtc2VjdGlvbiB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA2cHg7CiAgICBwYWRkaW5nOiA4cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDg0JSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTMsIHZhcigtLW1qci1zdXJmYWNlLTIpKSA3MiUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1zaG9ydGN1dC1zZWN0aW9uLXRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wNGVtOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2YxZjFmMSkgODglLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItc2hvcnRjdXQtbGlzdCB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA2cHg7Cn0KCi5tanItc2hvcnRjdXQtcm93IHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgxMzJweCwgMTYwcHgpIG1pbm1heCgwLCAxZnIpOwogICAgZ2FwOiA4cHg7CiAgICBhbGlnbi1pdGVtczogc3RhcnQ7Cn0KCi5tanItc2hvcnRjdXQta2V5IHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgbWluLWhlaWdodDogMjRweDsKICAgIHBhZGRpbmc6IDNweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAzOCUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAxMiUsIHZhcigtLW1qci1zdXJmYWNlLTIpKTsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2ZmZikgOTAlLCB0cmFuc3BhcmVudCk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGluZS1oZWlnaHQ6IDEuMjU7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwp9CgoubWpyLXNob3J0Y3V0LWRlc2MgewogICAgbWluLXdpZHRoOiAwOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgIG9wYWNpdHk6IDAuOTI7Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiA1NjBweCkgewogICAgLm1qci1zaG9ydGN1dC1yb3cgewogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgfQoKICAgIC5tanItc2hvcnRjdXQta2V5IHsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICB9Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItaGVhZCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBnYXA6IDEwcHg7CiAgICBtYXJnaW46IDAgMCAxMHB4OwogICAgcGFkZGluZzogNHB4IDJweCAxMHB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4NSUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1oZWFkLWxlZnQgewogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLWtpY2tlciB7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogODAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDllbTsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpIDY1JSwgdmFyKC0tY29udGVudC1mZywgI2RkZCkpOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLXN1YnRpdGxlIHsKICAgIG1hcmdpbi10b3A6IDJweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2RkZCkgNjIlLCB2YXIoLS1tanItbXV0ZWQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42NSkpKTsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1oZWFkLWFjdGlvbnMgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICBmbGV4OiAwIDAgYXV0bzsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1zdGFjayB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogOHB4Owp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLWFjdGl2ZS1jb3VudCB7CiAgICBtaW4td2lkdGg6IDIycHg7CiAgICBoZWlnaHQ6IDIycHg7CiAgICBwYWRkaW5nOiAwIDZweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpIDU1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpIDE4JSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2ZmZik7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItY2xlYXItYWxsIHsKICAgIGhlaWdodDogMjRweDsKICAgIHBhZGRpbmc6IDAgOHB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNzUlLCB0cmFuc3BhcmVudCk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNzAwOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItcG9wb3Zlci1yb3cgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgZ2FwOiA4cHg7CiAgICBhbGlnbi1pdGVtczogc3RhcnQ7CiAgICBtYXJnaW4tYm90dG9tOiAxMHB4Owp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItcG9wb3Zlci1yb3ctLTNjb2wgewogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKSBtaW5tYXgoMCwgMWZyKTsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLXBvcG92ZXItcm93LS0zY29sIC5tanItcG9wb3Zlci1sYWJlbCB7CiAgICBncmlkLWNvbHVtbjogMSAvIC0xOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItcG9wb3Zlci1sYWJlbCB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSA3MCUsIHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSkpOwogICAgd2hpdGUtc3BhY2U6IG5vcm1hbDsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLXBvcG92ZXItdG9nZ2xlIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogdmFyKC0tZmctY29sb3IsICNlNmVkZjcpOwogICAgcGFkZGluZzogNnB4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4MCUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA2NiUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLXBvcG92ZXItdG9nZ2xlIGlucHV0W3R5cGU9ImNoZWNrYm94Il0gewogICAgYWNjZW50LWNvbG9yOiB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKTsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1ncm91cCB7CiAgICAtLW1qci1maWx0ZXItZ3JvdXAtYWNjZW50OiB2YXIoLS1tanItYWNjZW50LCAjN2FhMmZmKTsKICAgIHBhZGRpbmc6IDEwcHggMCA4cHg7CiAgICBtYXJnaW4tYm90dG9tOiA0cHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItZ3JvdXA6bGFzdC1jaGlsZCB7CiAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKICAgIHBhZGRpbmctYm90dG9tOiAycHg7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItZ3JvdXAtLWNvcmUgewogICAgLS1tanItZmlsdGVyLWdyb3VwLWFjY2VudDogIzU2YThmZjsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1ncm91cC0tbWVkaWEgewogICAgLS1tanItZmlsdGVyLWdyb3VwLWFjY2VudDogIzM1ZDA4YjsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1ncm91cC0tdGltZSB7CiAgICAtLW1qci1maWx0ZXItZ3JvdXAtYWNjZW50OiAjZjBiODRmOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLWdyb3VwLXRvZ2dsZSB7CiAgICB3aWR0aDogMTAwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZ2FwOiAxMHB4OwogICAgbWFyZ2luOiAwIDAgMTBweDsKICAgIGJvcmRlcjogMDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY29sb3I6IGluaGVyaXQ7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgcGFkZGluZzogMnB4IDRweDsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1ncm91cC10aXRsZSB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDZweDsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWZpbHRlci1ncm91cC1hY2NlbnQpIDYyJSwgdmFyKC0tY29udGVudC1mZywgI2RkZCkpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLWdyb3VwLXRpdGxlOjpiZWZvcmUgewogICAgY29udGVudDogIiI7CiAgICB3aWR0aDogNnB4OwogICAgaGVpZ2h0OiA2cHg7CiAgICBmbGV4OiAwIDAgNnB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItZmlsdGVyLWdyb3VwLWFjY2VudCk7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItZ3JvdXAtY2hldnJvbiB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWZpbHRlci1ncm91cC1hY2NlbnQpIDc4JSwgdmFyKC0tbWpyLW11dGVkLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKSk7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItZ3JvdXAtYm9keSB7CiAgICBwYWRkaW5nLXRvcDogNHB4Owp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLWNhcmQgewogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDg4JSwgdHJhbnNwYXJlbnQpOwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIHBhZGRpbmc6IDEwcHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4NiUsIHRyYW5zcGFyZW50KSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgODglLCB0cmFuc3BhcmVudCkKICAgICk7CiAgICBtYXJnaW4tYm90dG9tOiA4cHg7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItY2FyZDpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1ib3R0b206IDA7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItY2FyZC0tYWdlbmRhIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsICNmMGI4NGYgOSUsIHZhcigtLW1qci1zdXJmYWNlLTIpKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgOTIlLCB0cmFuc3BhcmVudCkKICAgICk7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItZ3JvdXA6bm90KC5pcy1vcGVuKSB7CiAgICBwYWRkaW5nLWJvdHRvbTogOHB4Owp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLWdyb3VwOm5vdCguaXMtb3BlbikgLm1qci1maWx0ZXItZ3JvdXAtdG9nZ2xlIHsKICAgIG1hcmdpbi1ib3R0b206IDA7Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiA0NDBweCkgewogICAgLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1oZWFkIHsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoOwogICAgfQoKICAgIC5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItaGVhZC1hY3Rpb25zIHsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICB9Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1oZWFkZXItaWNvbiB7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgb3BhY2l0eTogMC45Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0taGVhZGVyLXRpdGxlIHsKICAgIG1hcmdpbjogMDsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMWVtOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tY29udGVudCB7CiAgICBmbGV4OiAxOwogICAgcGFkZGluZzogMTZweDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIG1pbi1oZWlnaHQ6IDA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1mb2xkZXItYnJlYWRjcnVtYiB7CiAgICAtLW1qci1icmVhZGNydW1iLWFjY2VudDogIzU2YThmZjsKICAgIC0tbWpyLWJyZWFkY3J1bWItY3VycmVudDogIzM1ZDA4YjsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBwYWRkaW5nOiAzcHggNnB4OwogICAgbWFyZ2luOiAxcHggMCAzcHg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBvcGFjaXR5OiAwLjc4OwogICAgb3ZlcmZsb3c6IGF1dG87CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1icmVhZGNydW1iLWFjY2VudCkgMjIlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJyZWFkY3J1bWItYWNjZW50KSA5JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZm9sZGVyLWJyZWFkY3J1bWIuaXMtdmlzaWJsZSB7CiAgICBkaXNwbGF5OiBmbGV4Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZm9sZGVyLWJyZWFkY3J1bWItYWN0aW9uIHsKICAgIHBhZGRpbmc6IDJweCA4cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJyZWFkY3J1bWItYWNjZW50KSA0MiUsIHRyYW5zcGFyZW50KTsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYnJlYWRjcnVtYi1hY2NlbnQpIDE2JSwgdHJhbnNwYXJlbnQpOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYnJlYWRjcnVtYi1hY2NlbnQpIDc4JSwgI2ZmZmZmZik7CiAgICBmb250OiBpbmhlcml0OwogICAgY3Vyc29yOiBwb2ludGVyOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZm9sZGVyLWJyZWFkY3J1bWItYWN0aW9uOmRpc2FibGVkIHsKICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIG9wYWNpdHk6IDAuNTg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1mb2xkZXItYnJlYWRjcnVtYi1hY3Rpb246bm90KDpkaXNhYmxlZCk6aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJyZWFkY3J1bWItYWNjZW50KSA2MiUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYnJlYWRjcnVtYi1hY2NlbnQpIDI0JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZm9sZGVyLWJyZWFkY3J1bWItc2VnbWVudCB7CiAgICBtYXgtd2lkdGg6IDIyMHB4OwogICAgbWluLXdpZHRoOiAwOwogICAgcGFkZGluZzogMXB4IDVweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1icmVhZGNydW1iLWFjY2VudCkgOCUsIHRyYW5zcGFyZW50KTsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJyZWFkY3J1bWItYWNjZW50KSA3NiUsICNmZmZmZmYpOwogICAgZm9udDogaW5oZXJpdDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWZvbGRlci1icmVhZGNydW1iLXNlZ21lbnQ6bm90KDpkaXNhYmxlZCk6aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJyZWFkY3J1bWItYWNjZW50KSAzOCUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYnJlYWRjcnVtYi1hY2NlbnQpIDE2JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZm9sZGVyLWJyZWFkY3J1bWItc2VnbWVudC5pcy1jdXJyZW50LAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZm9sZGVyLWJyZWFkY3J1bWItc2VnbWVudDpkaXNhYmxlZCB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYnJlYWRjcnVtYi1jdXJyZW50KSAzOCUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYnJlYWRjcnVtYi1jdXJyZW50KSAxNCUsIHRyYW5zcGFyZW50KTsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJyZWFkY3J1bWItY3VycmVudCkgNzQlLCAjZmZmZmZmKTsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWZvbGRlci1icmVhZGNydW1iLXNlcGFyYXRvciB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1icmVhZGNydW1iLWFjY2VudCkgNTglLCB2YXIoLS1tanItbXV0ZWQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42MikpKTsKICAgIG9wYWNpdHk6IDAuOTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lZGlhLXNob3J0Y3V0cyB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDRweDsKICAgIGZsZXgtd3JhcDogd3JhcDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lZGlhLXNob3J0Y3V0LWJ0biB7CiAgICB3aWR0aDogMjRweDsKICAgIGhlaWdodDogMjRweDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lZGlhLXNob3J0Y3V0LWJ0biAucGkgewogICAgZm9udC1zaXplOiAxMXB4Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tZHVwLWFsZXJ0IHsKICAgIHBhZGRpbmc6IDJweCA4cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IsICM1NTUpOwogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktbWVudS1iZywgIzIyMik7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2VlZSk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWJyb3dzZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICBmbGV4OiAxOwogICAgbWluLWhlaWdodDogMDsKICAgIG1pbi13aWR0aDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc1JSwgdHJhbnNwYXJlbnQpOwogICAgcGFkZGluZy10b3A6IDRweDsKfQoKLyogU2Nyb2xsYmFycyAobWF0Y2ggQ29tZnlVSSBmZWVsKSAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tZ3JpZC1zY3JvbGwgewogICAgZmxleDogMSAxIGF1dG87CiAgICBtaW4td2lkdGg6IDA7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgaGVpZ2h0OiAxMDAlOwogICAgb3ZlcmZsb3c6IGF1dG87CiAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgdG91Y2gtYWN0aW9uOiBwYW4teTsKICAgIHNjcm9sbGJhci13aWR0aDogdGhpbjsKICAgIHNjcm9sbGJhci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDg1JSwgdmFyKC0tY29udGVudC1mZywgI2RkZCkpIHRyYW5zcGFyZW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tZ3JpZC1zY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIHdpZHRoOiAxMHB4OwogICAgaGVpZ2h0OiAxMHB4Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tZ3JpZC1zY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tZ3JpZC1zY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHZhcigtLWNvbnRlbnQtZmcsICNkZGQpKTsKICAgIGJvcmRlcjogMnB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tZ3JpZC1zY3JvbGw6aG92ZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA3MCUsIHZhcigtLWNvbnRlbnQtZmcsICNkZGQpKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWdyaWQtc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXIgewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1jdXN0b20tY29udHJvbHMgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiAwOwogICAgZ2FwOiA4cHg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXNlYXJjaCB7CiAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXNlYXJjaCB7CiAgICBwYWRkaW5nLWJvdHRvbTogNnB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgbWFyZ2luLWJvdHRvbTogNnB4Owp9CgovKiBDYXJkIE1ldGFkYXRhIENvbG9ycyAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWV0YS1kdXJhdGlvbiB7CiAgICBjb2xvcjogI2ZmYTcyNjsgLyogT3JhbmdlIGZvciBkdXJhdGlvbiAqLwogICAgZm9udC13ZWlnaHQ6IDUwMDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1ldGEtcmVzIHsKICAgIGNvbG9yOiAjNGZjM2Y3OyAvKiBMaWdodCBCbHVlIGZvciByZXNvbHV0aW9uICovCiAgICBmb250LXdlaWdodDogNTAwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWV0YS1kYXRlIHsKICAgIGNvbG9yOiAjYjlmNmNhOyAvKiBQYWxlIEdyZWVuIGZvciBkYXRlICovCiAgICBmb250LXNpemU6IDAuOWVtOwogICAgZm9udC13ZWlnaHQ6IDUwMDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1ldGEtdGltZSB7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKTsKICAgIGZvbnQtc2l6ZTogMC45ZW07Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zdW1tYXJ5IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZ2FwOiAxMHB4OwogICAgbWFyZ2luOiAwIDAgNnB4IDA7CiAgICBwYWRkaW5nOiAwIDAgNHB4IDA7CiAgICBtaW4taGVpZ2h0OiAxNnB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSk7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDY1JSwgdHJhbnNwYXJlbnQpOwogICAgZmxleDogMCAwIGF1dG87Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zdW1tYXJ5LXRleHQgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXN1bW1hcnktcmlnaHQgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmbGV4LXdyYXA6IHdyYXA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1jb250ZXh0LXBpbGxzIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNXB4OwogICAgcm93LWdhcDogNHB4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNvbnRleHQtcGlsbCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDZweDsKICAgIHBhZGRpbmc6IDNweCA3cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1NSUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHZhcigtLW1qci1hY2NlbnQpIDEwJSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDE4JSwgdHJhbnNwYXJlbnQpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgZm9udC1zaXplOiAxMC41cHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIG1pbi1oZWlnaHQ6IDIycHg7CiAgICBtYXgtd2lkdGg6IDIyMHB4Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY29udGV4dC1waWxsOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDc1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDUwJSwgdmFyKC0tbWpyLWFjY2VudCkgMTQlKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNvbnRleHQtcGlsbC10ZXh0IHsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvcGFjaXR5OiAwLjkyOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY29udGV4dC1waWxsLXggewogICAgd2lkdGg6IDIwcHg7CiAgICBoZWlnaHQ6IDIwcHg7CiAgICBwYWRkaW5nOiAwOwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc1JSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42NSkpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yIDEyMG1zIGVhc2UsCiAgICAgICAgYm9yZGVyLWNvbG9yIDEyMG1zIGVhc2U7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jb250ZXh0LXBpbGwteDpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1NSUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA3MCUsIHZhcigtLW1qci1hY2NlbnQpIDEwJSk7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2ZmZik7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zZWFyY2gtcGlsbCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIGhlaWdodDogMS43NXJlbTsKICAgIHBhZGRpbmc6IDAgMTBweDsKICAgIHdpZHRoOiAxMDAlOwogICAgbWF4LXdpZHRoOiBub25lOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnLCAwLjVyZW0pOwogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktaW5wdXQtYmcsIHJnYmEoMCwgMCwgMCwgMC4yNSkpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBmbGV4OiAxIDEgYXV0bzsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXNlYXJjaC10b29scyB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIGZsZXg6IDAgMCBhdXRvOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItcG9wb3Zlci1hbmNob3IgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwp9CgoubWpyLWFnZW5kYS1pbnB1dCB7CiAgICBkaXNwbGF5OiBub25lOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1pbnB1dC1iZywgcmdiYSgwLCAwLCAwLCAwLjI1KSk7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2RkZCk7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIGJhY2tncm91bmQtY29sb3IgMC4ycyBlYXNlLAogICAgICAgIGNvbG9yIDAuMnMgZWFzZSwKICAgICAgICBib3JkZXItY29sb3IgMC4ycyBlYXNlOwp9Ci5tanItYWdlbmRhLWlucHV0Lm1qci1hZ2VuZGEtZmlsbGVkIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peCgKICAgICAgICBpbiBzcmdiLAogICAgICAgIHZhcigtLW1qci1hY2NlbnQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpIDQwJSwKICAgICAgICB2YXIoLS1tanItc3VyZmFjZS0yKSA2MCUKICAgICk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peCgKICAgICAgICBpbiBzcmdiLAogICAgICAgIHZhcigtLW1qci1hY2NlbnQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpIDgwJSwKICAgICAgICB2YXIoLS1tanItYm9yZGVyKQogICAgKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZmZmKTsKfQoubWpyLWFnZW5kYS1pbnB1dC5tanItYWdlbmRhLWVtcHR5IHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4NSUsIHRyYW5zcGFyZW50IDE1JSk7CiAgICBib3JkZXItY29sb3I6IHZhcigtLW1qci1ib3JkZXIpOwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSk7Cn0KCi5tanItYWdlbmRhLWNvbnRhaW5lciB7CiAgICB3aWR0aDogMTAwJTsKfQoKLm1qci1hZ2VuZGEtY2FsZW5kYXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDhweDsKICAgIHdpZHRoOiAxMDAlOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWFnZW5kYS1oZWFkZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKfQoKLm1qci1hZ2VuZGEtbW9udGggewogICAgZmxleDogMTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLm1qci1hZ2VuZGEtbmF2IHsKICAgIHdpZHRoOiAzMnB4OwogICAgaGVpZ2h0OiAyOHB4OwogICAgcGFkZGluZzogMDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7Cn0KCi5tanItYWdlbmRhLWdyaWQgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDcsIG1pbm1heCgwLCAxZnIpKTsKICAgIGdhcDogNnB4OwogICAgd2lkdGg6IDEwMCU7Cn0KCi5tanItYWdlbmRhLXdlZWtkYXkgewogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSk7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLm1qci1hZ2VuZGEtZGF5IHsKICAgIGhlaWdodDogMzBweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHRyYW5zcGFyZW50KTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgcGFkZGluZzogMDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yIDEyMG1zIGVhc2UsCiAgICAgICAgYm9yZGVyLWNvbG9yIDEyMG1zIGVhc2UsCiAgICAgICAgdHJhbnNmb3JtIDgwbXMgZWFzZTsKfQoKLm1qci1hZ2VuZGEtZGF5LWJhZGdlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogLTVweDsKICAgIHJpZ2h0OiAtNXB4OwogICAgbWluLXdpZHRoOiAxNnB4OwogICAgaGVpZ2h0OiAxNnB4OwogICAgcGFkZGluZzogMCA0cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6ICNlNTM5MzU7CiAgICBjb2xvcjogI2ZmZjsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCAjZTUzOTM1IDY1JSwgI2ZmZmZmZiAzNSUpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxpbmUtaGVpZ2h0OiAxNHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Owp9CgoubWpyLWFnZW5kYS1kYXk6aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoCiAgICAgICAgaW4gc3JnYiwKICAgICAgICB2YXIoLS1tanItYm9yZGVyKSA1NSUsCiAgICAgICAgdmFyKC0tbWpyLWFjY2VudCwgdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKSkgNDUlCiAgICApOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KAogICAgICAgIGluIHNyZ2IsCiAgICAgICAgdmFyKC0tbWpyLXN1cmZhY2UtMikgNDUlLAogICAgICAgIHZhcigtLW1qci1hY2NlbnQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpIDEwJQogICAgKTsKfQoKLm1qci1hZ2VuZGEtZGF5OmFjdGl2ZSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTsKfQoKLm1qci1hZ2VuZGEtZGF5LS1ibGFuayB7CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLm1qci1hZ2VuZGEtZGF5LS1oYXMtYXNzZXRzIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KAogICAgICAgIGluIHNyZ2IsCiAgICAgICAgdmFyKC0tbWpyLWFjY2VudCwgdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKSkgODAlLAogICAgICAgIHZhcigtLW1qci1ib3JkZXIpCiAgICApOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KAogICAgICAgIGluIHNyZ2IsCiAgICAgICAgdmFyKC0tbWpyLWFjY2VudCwgdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKSkgMTglLAogICAgICAgIHZhcigtLW1qci1zdXJmYWNlLTIpIDgyJQogICAgKTsKfQoKLm1qci1hZ2VuZGEtZGF5LS1zZWxlY3RlZCB7CiAgICBib3JkZXItY29sb3I6IHZhcigtLW1qci1hY2NlbnQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4CiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpIDU1JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWFnZW5kYS1mb290ZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGdhcDogOHB4OwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwp9CgoubWpyLWFnZW5kYS1jbGVhciwKLm1qci1hZ2VuZGEtcmVmcmVzaCB7CiAgICBmbGV4OiAxOwp9CgoubWpyLW1lbnUsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1tZW51IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiA0cHg7Cn0KCi5tanItcHJpbWUtbWVudS1saXN0LAoubWpyLXNvcnQtbWVudSBbZGF0YS1wYy1zZWN0aW9uPSJsaXN0Il0gewogICAgbGlzdC1zdHlsZTogbm9uZTsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA2cHg7Cn0KCi5tanItcHJpbWUtbWVudSBbZGF0YS1wYy1zZWN0aW9uPSJpdGVtIl0sCi5tanItcHJpbWUtbWVudS1saXN0IFtkYXRhLXBjLXNlY3Rpb249Iml0ZW0iXSB7CiAgICBsaXN0LXN0eWxlOiBub25lOwp9CgoubWpyLXByaW1lLW1lbnUgW2RhdGEtcGMtc2VjdGlvbj0iaXRlbWNvbnRlbnQiXSB7CiAgICB3aWR0aDogMTAwJTsKfQoKLm1qci1tZW51LWl0ZW0sCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1tZW51LWl0ZW0gewogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZ2FwOiAxMHB4OwogICAgd2lkdGg6IDEwMCU7CiAgICBwYWRkaW5nOiA4cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yIDEyMG1zIGVhc2UsCiAgICAgICAgYm9yZGVyLWNvbG9yIDEyMG1zIGVhc2UsCiAgICAgICAgdHJhbnNmb3JtIDgwbXMgZWFzZTsKfQoKLm1qci1tZW51LWl0ZW06aG92ZXIsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1tZW51LWl0ZW06aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODAlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTUlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWVudS1pdGVtOmFjdGl2ZSwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lbnUtaXRlbTphY3RpdmUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDFweCk7Cn0KCi5tanItbWVudS1pdGVtLWxhYmVsLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWVudS1pdGVtLWxhYmVsIHsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1tZW51LWl0ZW0tY2hlY2ssCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1tZW51LWl0ZW0tY2hlY2sgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgd2lkdGg6IDE2cHg7CiAgICBmbGV4OiAwIDAgMTZweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG9wYWNpdHk6IDA7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDcyJSwgdmFyKC0tY29udGVudC1mZykpOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBvcGFjaXR5IDEyMG1zIGVhc2UsCiAgICAgICAgY29sb3IgMTIwbXMgZWFzZTsKfQoKLm1qci1tZW51LWl0ZW0gLnBpLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWVudS1pdGVtIC5waSB7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBvcGFjaXR5OiAwLjk7Cn0KCi5tanItY29sbGVjdGlvbnMtbWVudSB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA2cHg7Cn0KCi5tanItbWVudS1pdGVtLWxhYmVsLS1pY29uIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgZmxleDogMSAxIGF1dG87CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItbWVudS1pdGVtLWxhYmVsLS1pY29uIC5waSB7CiAgICB3aWR0aDogMTZweDsKICAgIGZsZXg6IDAgMCAxNnB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgoubWpyLW1lbnUtaXRlbS1yaWdodCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBmbGV4OiAwIDAgYXV0bzsKICAgIG1pbi13aWR0aDogMTZweDsKICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKfQoKLm1qci1tZW51LWl0ZW0taGludCB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcpIDYyJSwgdmFyKC0tbWpyLW11dGVkKSk7CiAgICBvcGFjaXR5OiAwLjcyOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci1tZW51LWl0ZW0tY2hlY2stLXZpc2libGUsCi5tanItbWVudS1pdGVtLmlzLWFjdGl2ZSAubWpyLW1lbnUtaXRlbS1jaGVjayB7CiAgICBvcGFjaXR5OiAxOwp9CgoubWpyLW1lbnUtZGl2aWRlciB7CiAgICBoZWlnaHQ6IDFweDsKICAgIG1hcmdpbjogNHB4IDA7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODAlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbXV0ZWQgewogICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgb3BhY2l0eTogMC43NTsKfQoKLm1qci1zdGF0ZS1ibG9jayB7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBsaW5lLWhlaWdodDogMS4zNTsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQpOwogICAgYm9yZGVyOiAxcHggZGFzaGVkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4NSUsIHRyYW5zcGFyZW50KTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLXNtKTsKICAgIHBhZGRpbmc6IDhweCAxMHB4OwogICAgbWFyZ2luOiA0cHggMDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA3MCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1zdGF0ZS1ibG9jay5pcy1lcnJvciwKLm1qci1jb250ZXh0LW1lbnUtbm90ZS5pcy1lcnJvciB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtZXJyb3IpIDgyJSwgdmFyKC0tY29udGVudC1mZykpOwogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy1lcnJvcikgNDUlLCB2YXIoLS1tanItYm9yZGVyKSk7Cn0KCi5tanItY29sbGVjdGlvbi1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoOwogICAgd2lkdGg6IDEwMCU7CiAgICBtaW4taGVpZ2h0OiA0OHB4Owp9CgoubWpyLWNvbGxlY3Rpb25zLXZpcnR1YWwtbGlzdCB7CiAgICB3aWR0aDogMTAwJTsKICAgIG92ZXJmbG93OiBhdXRvOwogICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluOwp9CgoubWpyLWRlbGV0ZS1idG4gewogICAgd2lkdGg6IDQycHg7CiAgICBmbGV4OiAwIDAgNDJweDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgcGFkZGluZzogMDsKICAgIG1hcmdpbi1sZWZ0OiA2cHg7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA2NSUsIHZhcigtLW1qci1zdGF0dXMtZXJyb3IpIDQ1JSk7Cn0KCi5tanItZGVsZXRlLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA0MCUsIHZhcigtLW1qci1zdGF0dXMtZXJyb3IpIDY1JSk7Cn0KCi5tanItZGVsZXRlLWJ0biAucGkgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLWVycm9yKSA3OCUsIHZhcigtLWNvbnRlbnQtZmcpKTsKfQoKLm1qci1zZWN0aW9uLXRpdGxlIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBwYWRkaW5nOiA2cHggMTBweCAycHg7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuNnB4OwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIG9wYWNpdHk6IDAuODg7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcpIDcyJSwgdmFyKC0tbWpyLW11dGVkKSk7Cn0KCi5tanItc2VjdGlvbi10aXRsZS0tY3lhbiB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsICM2ZmQ0ZmYgNzglLCB2YXIoLS1jb250ZW50LWZnKSk7Cn0KCi5tanItc2VjdGlvbi10aXRsZS0tdmlvbGV0IHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgI2M0OGRmZiA3OCUsIHZhcigtLWNvbnRlbnQtZmcpKTsKfQoKLm1qci1zZWN0aW9uLWhpbnQgewogICAgcGFkZGluZzogMCAxMHB4IDRweDsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcpIDU1JSwgdmFyKC0tbWpyLW11dGVkKSk7Cn0KCi5tanItbWVudS1pdGVtLS1zbWFydCwKLm1qci1tZW51LWl0ZW0tLWNsdXN0ZXIgewogICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9CgoubWpyLW1lbnUtaXRlbS0tY2x1c3RlciB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnKTsKfQoKLm1qci1tZW51LWl0ZW0tLXNtYXJ0IC5waSB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsICM2ZmQ0ZmYgNzQlLCB2YXIoLS1jb250ZW50LWZnKSk7Cn0KCi5tanItbWVudS1pdGVtLS1jbHVzdGVyIC5waSB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsICNjNDhkZmYgNzQlLCB2YXIoLS1jb250ZW50LWZnKSk7Cn0KCi5tanItbWVudS1pdGVtLS1zbWFydDpob3Zlcjpub3QoOmRpc2FibGVkKSwKLm1qci1tZW51LWl0ZW0tLWNsdXN0ZXI6aG92ZXI6bm90KDpkaXNhYmxlZCkgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODAlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTUlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItY2x1c3Rlci1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgIHBhZGRpbmc6IDZweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1zbSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA3MCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1jbHVzdGVyLXRodW1icyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiAzcHg7CiAgICBmbGV4LXNocmluazogMDsKfQoKLm1qci1jbHVzdGVyLXRodW1iIHsKICAgIHdpZHRoOiAyOHB4OwogICAgaGVpZ2h0OiAyOHB4OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICBvcGFjaXR5OiAwLjg1OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDYwJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWNsdXN0ZXItaW5mbyB7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWNsdXN0ZXItbmFtZSB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnKTsKfQoKLm1qci1jbHVzdGVyLWNvdW50IHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZykgNTglLCB2YXIoLS1tanItbXV0ZWQpKTsKfQoKLm1qci1jbHVzdGVyLWNyZWF0ZS1idG4gewogICAgZmxleC1zaHJpbms6IDA7CiAgICBwYWRkaW5nOiAzcHggOHB4OwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTUlLCB0cmFuc3BhcmVudCk7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZyk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBib3JkZXItY29sb3IgMTIwbXMgZWFzZSwKICAgICAgICBiYWNrZ3JvdW5kIDEyMG1zIGVhc2UsCiAgICAgICAgb3BhY2l0eSAxMjBtcyBlYXNlOwp9CgoubWpyLWNsdXN0ZXItY3JlYXRlLWJ0bjpkaXNhYmxlZCB7CiAgICBvcGFjaXR5OiAwLjYyOwogICAgY3Vyc29yOiBkZWZhdWx0Owp9CgoubWpyLWNsdXN0ZXItY3JlYXRlLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4MCUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA2MiUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXNlYXJjaC1pY29uIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zZWFyY2gtaWNvbiAucGkgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgbGluZS1oZWlnaHQ6IDE7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zZWFyY2gtcGlsbCAubWpyLWlucHV0IHsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsKICAgIGZvbnQtc2l6ZTogMTJweCAhaW1wb3J0YW50OwogICAgbGluZS1oZWlnaHQ6IDEuMiAhaW1wb3J0YW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc2VhcmNoLXBpbGw6Zm9jdXMtd2l0aGluIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDY1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAxOCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWJyb3dzZSB7CiAgICBtYXJnaW4tdG9wOiAwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tZ3JpZC1zY3JvbGwgewogICAgcGFkZGluZy1yaWdodDogNHB4OwogICAgc2Nyb2xsYmFyLWd1dHRlcjogc3RhYmxlOwp9CgovKiBHcmlkIGxheW91dCAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZ3JpZCB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgLyogQXZvaWQgb3ZlcmZsb3cgd2hlbiB0aGUgcGFuZWwgYmVjb21lcyBuYXJyb3dlciB0aGFuIHRoZSBtaW4gY2FyZCBzaXplICovCiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgKICAgICAgICBhdXRvLWZpbGwsCiAgICAgICAgbWlubWF4KG1pbigxMDAlLCB2YXIoLS1tanItZ3JpZC1taW4tc2l6ZSwgMTgwcHgpKSwgMWZyKQogICAgKTsKICAgIGdhcDogdmFyKC0tbWpyLWdyaWQtZ2FwLCAxMHB4KTsKICAgIG1hcmdpbi10b3A6IDZweDsKICAgIG1pbi1oZWlnaHQ6IDA7Cn0KCi8qIENhcmQgc2VsZWN0aW9uICsgZm9jdXMgKGtlZXBzIGEgdmlzaWJsZSBpbmRpY2F0b3Igd2hlbiBzaWRlYmFyIGlzIG9wZW4pICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIHsKICAgIG91dGxpbmU6IG5vbmU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkLmlzLXNlbGVjdGVkIHsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgMCAwIDAgM3B4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItY2FyZC1zZWxlY3Rpb24tY29sb3IpIDgwJSwgdmFyKC0tY29udGVudC1mZykpLAogICAgICAgIDAgMCAwIDZweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKSAzMCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAwIDAgMjBweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKSA0MCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAwIDEwcHggMjhweCByZ2JhKDAsIDAsIDAsIDAuMjgpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbGcpOwogICAgLyogc2NhbGUoMC45NykgaW5zdGVhZCBvZiAwLjkyOiBzdWJ0bGUgaW5zZXQgZmVlbCB3aXRob3V0IHRoZSBhZ2dyZXNzaXZlCiAgICAgICBzaHJpbmsgdGhhdCBjYXVzZWQgYSB2aXNpYmxlIGJsaW5rIG9uIHJhcGlkIHNlbGVjdGlvbiBjaGFuZ2VzLiAqLwogICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk3KSAhaW1wb3J0YW50OwogICAgei1pbmRleDogMTA7CiAgICBvdXRsaW5lOiAycHggc29saWQgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQ6Zm9jdXMtdmlzaWJsZSB7CiAgICBib3gtc2hhZG93OgogICAgICAgIDAgMCAwIDNweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgODAlLCB2YXIoLS1jb250ZW50LWZnKSksCiAgICAgICAgMCAwIDAgNnB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAzMCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAwIDAgMjBweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNDAlLCB0cmFuc3BhcmVudCksCiAgICAgICAgMCAxMHB4IDI4cHggcmdiYSgwLCAwLCAwLCAwLjI4KTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLWxnKTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NykgIWltcG9ydGFudDsKICAgIHotaW5kZXg6IDEwOwp9CgpAa2V5ZnJhbWVzIG1qci1saXZlLXBsYWNlaG9sZGVyLXNoZWVuIHsKICAgIDAlIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTU4JSk7CiAgICAgICAgb3BhY2l0eTogMC4xODsKICAgIH0KICAgIDUwJSB7CiAgICAgICAgb3BhY2l0eTogMC4zNDsKICAgIH0KICAgIDEwMCUgewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg1OCUpOwogICAgICAgIG9wYWNpdHk6IDAuMTg7CiAgICB9Cn0KCkBrZXlmcmFtZXMgbWpyLWxpdmUtcGxhY2Vob2xkZXItcHVsc2UgewogICAgMCUsCiAgICAxMDAlIHsKICAgICAgICBib3gtc2hhZG93OgogICAgICAgICAgICAwIDAgMCAxcHggcmdiYSgxMTgsIDIxNCwgMjU1LCAwLjM0KSwKICAgICAgICAgICAgMCAxMHB4IDI0cHggcmdiYSgwLCAwLCAwLCAwLjI0KTsKICAgIH0KICAgIDUwJSB7CiAgICAgICAgYm94LXNoYWRvdzoKICAgICAgICAgICAgMCAwIDAgMXB4IHJnYmEoMTE4LCAyMTQsIDI1NSwgMC41MiksCiAgICAgICAgICAgIDAgMCAwIDRweCByZ2JhKDExOCwgMjE0LCAyNTUsIDAuMTIpLAogICAgICAgICAgICAwIDEycHggMzBweCByZ2JhKDAsIDAsIDAsIDAuMjgpOwogICAgfQp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1saXZlLXBsYWNlaG9sZGVyPSJ0cnVlIl0gewogICAgYW5pbWF0aW9uOiBtanItbGl2ZS1wbGFjZWhvbGRlci1wdWxzZSAxLjlzIGVhc2UtaW4tb3V0IGluZmluaXRlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1saXZlLXBsYWNlaG9sZGVyPSJ0cnVlIl0gLm1qci10aHVtYiB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbGl2ZS1wbGFjZWhvbGRlci13YXNoIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAtOCU7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDE7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTE1ZGVnLAogICAgICAgIHJnYmEoOTgsIDE5OSwgMjU1LCAwKSAwJSwKICAgICAgICByZ2JhKDk4LCAxOTksIDI1NSwgMC4wOCkgMzAlLAogICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNCkgNTAlLAogICAgICAgIHJnYmEoOTgsIDE5OSwgMjU1LCAwLjEyKSA3MCUsCiAgICAgICAgcmdiYSg5OCwgMTk5LCAyNTUsIDApIDEwMCUKICAgICk7CiAgICBhbmltYXRpb246IG1qci1saXZlLXBsYWNlaG9sZGVyLXNoZWVuIDIuMnMgbGluZWFyIGluZmluaXRlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbGl2ZS1waWxsIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNnB4OwogICAgcmlnaHQ6IDZweDsKICAgIHotaW5kZXg6IDEyOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBtaW4taGVpZ2h0OiAyNHB4OwogICAgcGFkZGluZzogMCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTAsIDE0LCAyMCwgMC43OCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDExOCwgMjE0LCAyNTUsIDAuMzQpOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45Nik7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDFlbTsKICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMjQpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWxpdmUtcGlsbC1kb3QgewogICAgd2lkdGg6IDdweDsKICAgIGhlaWdodDogN3B4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiAjNzZkNmZmOwogICAgYm94LXNoYWRvdzogMCAwIDAgNHB4IHJnYmEoMTE4LCAyMTQsIDI1NSwgMC4xNik7CiAgICBmbGV4OiAwIDAgYXV0bzsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItbGl2ZS1wbGFjZWhvbGRlcj0idHJ1ZSJdIC5tanItYXNzZXQtc3RhdHVzLWRvdCB7CiAgICBhbmltYXRpb246IG1qci1saXZlLXBsYWNlaG9sZGVyLXB1bHNlIDEuOXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7Cn0KCi8qIEdyaWQgbG9hZGluZyBvdmVybGF5ICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkLWxvYWRpbmctb3ZlcmxheSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgIzAwMCAzNSUsIHRyYW5zcGFyZW50KTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZmZmKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjNweDsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLWxnKTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDJweCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkLXNrZWxldG9uLWxheW91dCB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTMycHgsIDFmcikpOwogICAgZ2FwOiAxMnB4Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZ3JpZC1za2VsZXRvbi1jYXJkIHsKICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjIpOwogICAgYmFja2dyb3VuZDogcmdiYSgxOTIsIDE5OCwgMjA2LCAwLjIpOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIC8qIG1pbi1oZWlnaHQgcmVtb3ZlZDogVnVlIHNrZWxldG9uQ2FyZFN0eWxlIHNldHMgYW4gZXhwbGljaXQgaGVpZ2h0IGRlcml2ZWQKICAgICAgIGZyb20gZXN0aW1hdGVSb3dIZWlnaHQuIEEgY29uZmxpY3RpbmcgbWluLWhlaWdodCBjYXVzZWQgc2tlbGV0b24gY2FyZHMgdG8KICAgICAgIGJlIHRhbGxlciB0aGFuIHRoZSBhY3R1YWwgY2FyZHMgdGhleSByZXBsYWNlLCBjYXVzaW5nIGEgbGF5b3V0IGp1bXAgd2hlbgogICAgICAgYXNzZXRzIGZpcnN0IGxvYWQuICovCiAgICBib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4yNCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkLXNrZWxldG9uLXRodW1iIHsKICAgIGFzcGVjdC1yYXRpbzogMSAvIDE7CiAgICB3aWR0aDogMTAwJTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICA5MGRlZywKICAgICAgICByZ2JhKDE1NiwgMTYyLCAxNzEsIDAuNTIpIDAlLAogICAgICAgIHJnYmEoMjIwLCAyMjUsIDIzMiwgMC43MikgNDUlLAogICAgICAgIHJnYmEoMTU2LCAxNjIsIDE3MSwgMC41MikgMTAwJQogICAgKTsKICAgIGJhY2tncm91bmQtc2l6ZTogMjQwJSAxMDAlOwogICAgYW5pbWF0aW9uOiBtanItZ3JpZC1za2VsZXRvbi1zaGltbWVyIDEuMnMgbGluZWFyIGluZmluaXRlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZ3JpZC1za2VsZXRvbi1saW5lIHsKICAgIGhlaWdodDogMTBweDsKICAgIG1hcmdpbjogOHB4IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgOTBkZWcsCiAgICAgICAgcmdiYSgxNjQsIDE3MCwgMTc5LCAwLjQ4KSAwJSwKICAgICAgICByZ2JhKDIxNCwgMjE5LCAyMjYsIDAuNykgNDUlLAogICAgICAgIHJnYmEoMTY0LCAxNzAsIDE3OSwgMC40OCkgMTAwJQogICAgKTsKICAgIGJhY2tncm91bmQtc2l6ZTogMjQwJSAxMDAlOwogICAgYW5pbWF0aW9uOiBtanItZ3JpZC1za2VsZXRvbi1zaGltbWVyIDEuMnMgbGluZWFyIGluZmluaXRlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZ3JpZC1za2VsZXRvbi1saW5lLS10aXRsZSB7CiAgICB3aWR0aDogNzIlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZ3JpZC1za2VsZXRvbi1saW5lLS1tZXRhIHsKICAgIHdpZHRoOiA0OCU7CiAgICBtYXJnaW4tdG9wOiAycHg7CiAgICBtYXJnaW4tYm90dG9tOiAxMHB4Owp9CgpAa2V5ZnJhbWVzIG1qci1za2VsZXRvbi1zaGltbWVyIHsKICAgIDAlIHsKICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAxMjAlIDA7CiAgICB9CiAgICAxMDAlIHsKICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTIwJSAwOwogICAgfQp9CgpAa2V5ZnJhbWVzIG1qci1ncmlkLXNrZWxldG9uLXNoaW1tZXIgewogICAgMCUgewogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDEwMCUgMDsKICAgIH0KICAgIDEwMCUgewogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xMDAlIDA7CiAgICB9Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkLXNrZWxldG9uLXNoaW1tZXIgewogICAgd2lsbC1jaGFuZ2U6IGJhY2tncm91bmQtcG9zaXRpb247Cn0KCi8qIEdlbmVyaWMgaGVhZGluZ3MgaW5zaWRlIHBhbmVsICovCi5tanItYXNzZXRzLW1hbmFnZXIgaDMsCi5tanItYXNzZXRzLW1hbmFnZXIgaDQgewogICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMWVtOwp9CgovKiBQYW5lbHMgKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXBhbmVsIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1sZyk7CiAgICBib3gtc2hhZG93OiB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtYm94LXNoYWRvdywgMCA4cHggMjRweCByZ2JhKDAsIDAsIDAsIDAuMjUpKTsKfQoKLyogVG9vbGJhciAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdG9vbGJhciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIHBhZGRpbmc6IHZhcigtLW1qci1wYWQtbWQpOwp9CgovKiBCdXR0b25zICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1idG4gewogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMik7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1tZCk7CiAgICBwYWRkaW5nOiA3cHggMTBweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIGJhY2tncm91bmQgMTIwbXMgZWFzZSwKICAgICAgICBib3JkZXItY29sb3IgMTIwbXMgZWFzZSwKICAgICAgICB0cmFuc2Zvcm0gODBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYnRuOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDcwJSwgdmFyKC0tbWpyLWFjY2VudCkgMTAlKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWJ0bjphY3RpdmUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDFweCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1idG46ZGlzYWJsZWQgewogICAgb3BhY2l0eTogMC41NTsKICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1idG4ubWpyLXByaW1hcnkgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNjAlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMTQlLCB2YXIoLS1tanItc3VyZmFjZS0yKSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1idG4gewogICAgLyogT3ZlcnJpZGUgaW5saW5lIHN0eWxlcyBpZiBwcmVzZW50ICovCiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTIpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbWQpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYnRuOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDcwJSwgdmFyKC0tbWpyLWFjY2VudCkgMTAlKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWJ0bi5tanItc3RhdHVzLXNjYW4gewogICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICBwYWRkaW5nOiA0cHggMTBweDsKICAgIGNvbG9yOiB2YXIoLS1tanItc3RhdHVzLWNvbG9yLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLWNvbG9yKSA2MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLWNvbG9yKSAxNCUsIHZhcigtLW1qci1zdXJmYWNlLTIpKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWJ0bi5tanItc3RhdHVzLXNjYW46aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1tanItc3RhdHVzLWNvbG9yKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLWNvbG9yKSAyNCUsIHZhcigtLW1qci1zdXJmYWNlLTIpKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWJ0bi5tanItc3RhdHVzLXNjYW46Zm9jdXMtdmlzaWJsZSB7CiAgICBvdXRsaW5lOiAycHggc29saWQgdmFyKC0tbWpyLXN0YXR1cy1jb2xvcik7CiAgICBvdXRsaW5lLW9mZnNldDogMnB4Owp9CgovKiBJbnB1dHMgLyBzZWxlY3RzICh1c2VkIGluc2lkZSBwb3J0YWxlZCBwb3BvdmVycyB0b28pICovCi5tanItaW5wdXQsCi5tanItc2VsZWN0LAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaW5wdXQsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1zZWxlY3QgewogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktaW5wdXQtYmcsIHJnYmEoMCwgMCwgMCwgMC4yNSkpOwogICAgY29sb3I6IHZhcigtLWlucHV0LXRleHQsICNkZGQpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbWQpOwogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBvdXRsaW5lOiBub25lOwogICAgd2lkdGg6IDEwMCU7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pbnB1dDo6cGxhY2Vob2xkZXIgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItbXV0ZWQpIDgwJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWlucHV0OmZvY3VzLAoubWpyLXNlbGVjdDpmb2N1cywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWlucHV0OmZvY3VzLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItc2VsZWN0OmZvY3VzIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDY1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAyMCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1pbnB1dCwKLm1qci1zZWxlY3QsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pbnB1dCwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXNlbGVjdCB7CiAgICAvKiBPdmVycmlkZSBpbmxpbmUgc3R5bGVzIGlmIHByZXNlbnQgKi8KICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktaW5wdXQtYmcsIHJnYmEoMCwgMCwgMCwgMC4yNSkpOwogICAgY29sb3I6IHZhcigtLWlucHV0LXRleHQsICNkZGQpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbWQpOwogICAgcGFkZGluZzogOHB4IDEwcHg7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItc2VsZWN0IHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogOHB4OwogICAgbWluLWhlaWdodDogMzRweDsKICAgIHBhZGRpbmc6IDAgOXB4OwogICAgbGluZS1oZWlnaHQ6IDEuMjsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1zZWxlY3RbZGF0YS1wLWRpc2FibGVkPSJ0cnVlIl0gewogICAgb3BhY2l0eTogMC41NTsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1zZWxlY3QgW2RhdGEtcGMtc2VjdGlvbj0ibGFiZWwiXSB7CiAgICBmbGV4OiAxIDEgYXV0bzsKICAgIG1pbi13aWR0aDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItc2VsZWN0IFtkYXRhLXBjLXNlY3Rpb249ImRyb3Bkb3duIl0gewogICAgZmxleDogMCAwIGF1dG87CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIHdpZHRoOiAxOHB4OwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgdmFyKC0tZGVzY3JpcC10ZXh0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKSk7Cn0KCi5tanItZmlsdGVyLXNlbGVjdC1wYW5lbCB7CiAgICBtaW4td2lkdGg6IHZhcigtLXAtc2VsZWN0LW92ZXJsYXktd2lkdGgsIDEycmVtKTsKICAgIG1heC13aWR0aDogbWluKDMyMHB4LCBjYWxjKDEwMHZ3IC0gMzJweCkpOwogICAgbWF4LWhlaWdodDogbWluKDMyMHB4LCBjYWxjKDEwMHZoIC0gMzJweCkpOwogICAgb3ZlcmZsb3c6IGF1dG87CiAgICBwYWRkaW5nOiA0cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLW1kKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEsIHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKSk7CiAgICBib3gtc2hhZG93OiAwIDEycHggMjhweCByZ2JhKDAsIDAsIDAsIDAuMzgpOwogICAgei1pbmRleDogY2FsYyh2YXIoLS1tanItcG9wb3Zlci16LWluZGV4LCAyMTQ3NDgzNjQ3KSArIDEpOwp9CgoubWpyLWZpbHRlci1zZWxlY3QtcGFuZWwgW2RhdGEtcGMtc2VjdGlvbj0ibGlzdCJdIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAycHg7CiAgICBwYWRkaW5nOiAwOwogICAgbWFyZ2luOiAwOwogICAgbGlzdC1zdHlsZTogbm9uZTsKfQoKLm1qci1maWx0ZXItc2VsZWN0LXBhbmVsIFtkYXRhLXBjLXNlY3Rpb249Im9wdGlvbiJdIHsKICAgIG1pbi1oZWlnaHQ6IDI4cHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDZweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiBjYWxjKHZhcigtLW1qci1yLW1kKSAtIDJweCk7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsaW5lLWhlaWdodDogMS4yNTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKSk7Cn0KCi5tanItZmlsdGVyLXNlbGVjdC1wYW5lbCBbZGF0YS1wYy1zZWN0aW9uPSJvcHRpb24iXTpob3ZlciwKLm1qci1maWx0ZXItc2VsZWN0LXBhbmVsIFtkYXRhLXAtaGlnaGxpZ2h0PSJ0cnVlIl0gewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDE4JSwgdHJhbnNwYXJlbnQpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNmZmYpOwp9CgovKiBUYWJzOiBvdmVycmlkZGVuIGFib3ZlIHdpdGggcXVldWUtbGlrZSBzdHlsZSAqLwoKLyogUmVtb3ZlZCByZWR1bmRhbnQgdGFiIGRlY2xhcmF0aW9ucyB0aGF0IHdlcmUgdXNpbmcgIWltcG9ydGFudCAqLwoKLyogTXV0ZWQgdGV4dCBoZWxwZXIgKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW11dGVkIHsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQpOwp9CgovKiBHcmlkICsgY2FyZHMgKG92ZXJyaWRlIGlubGluZSBzdHlsZXMgZnJvbSBDYXJkLmpzKSAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyICNtanItYXNzZXRzLWdyaWQgewogICAgZ2FwOiAxMHB4ICFpbXBvcnRhbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xKSAhaW1wb3J0YW50OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcikgIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLWxnKSAhaW1wb3J0YW50OwogICAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50OwogICAgbWluLXdpZHRoOiAwOwogICAgdHJhbnNpdGlvbjoKICAgICAgICB0cmFuc2Zvcm0gMTIwbXMgZWFzZSwKICAgICAgICBib3JkZXItY29sb3IgMTIwbXMgZWFzZSwKICAgICAgICBib3gtc2hhZG93IDEyMG1zIGVhc2UgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQ6aG92ZXIsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoCiAgICAgICAgaW4gc3JnYiwKICAgICAgICB2YXIoLS1tanItY2FyZC1zZWxlY3Rpb24tY29sb3IpIDU1JSwKICAgICAgICB2YXIoLS1tanItYm9yZGVyKQogICAgKSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWpyLWNhcmQtaG92ZXItY29sb3IpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiAwIDhweCAyMnB4IHJnYmEoMCwgMCwgMCwgMC4yNSkgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgaW1nLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCB2aWRlbywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRodW1iLW1lZGlhIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50OwogICAgb2JqZWN0LWZpdDogY292ZXIgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRodW1iIHsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgd2lkdGg6IDEwMCU7CiAgICBhc3BlY3QtcmF0aW86IDEgLyAxOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDgwJSwgdHJhbnNwYXJlbnQpOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWF1ZGlvLXRodW1iLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXVkaW8tdGh1bWIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogMTBweDsKICAgIHBhZGRpbmc6IDE0cHggMTJweCAxMnB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NCk7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAxOCUgMjAlLCByZ2JhKDc4LCAxODQsIDI1NSwgMC4zMiksIHRyYW5zcGFyZW50IDM4JSksCiAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4OCUgNzIlLCByZ2JhKDgyLCAyMjAsIDE1NiwgMC4yNCksIHRyYW5zcGFyZW50IDQyJSksCiAgICAgICAgbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgxOCwgMjYsIDM2LCAwLjk4KSwgcmdiYSg4LCAxMiwgMTgsIDAuOTgpKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWF1ZGlvLXRodW1iLmhhcy1wb3N0ZXIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hdWRpby10aHVtYi5oYXMtcG9zdGVyIHsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSg0LCA2LCAxMCwgMC4yOCksIHJnYmEoNCwgNiwgMTAsIDAuODYpKSwKICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDUwJSA0MiUsIHJnYmEoNzgsIDE4NCwgMjU1LCAwLjIpLCB0cmFuc3BhcmVudCA1NCUpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBzYXR1cmF0ZSgxLjEpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IHNhdHVyYXRlKDEuMSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hdWRpby10aHVtYi1oZWFkLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXVkaW8tdGh1bWItaGVhZCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogOHB4OwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXVkaW8tdGh1bWItaWNvbiwKLm1qci1ib3R0b20tZmVlZCAubWpyLWF1ZGlvLXRodW1iLWljb24gewogICAgd2lkdGg6IDI4cHg7CiAgICBoZWlnaHQ6IDI4cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xOCk7CiAgICBib3gtc2hhZG93OiAwIDhweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4yMik7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hdWRpby10aHVtYi1raW5kLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXVkaW8tdGh1bWIta2luZCB7CiAgICBtYXgtd2lkdGg6IDYycHg7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgcGFkZGluZzogM3B4IDdweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjI4KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMyk7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogODAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hdWRpby10aHVtYi13YXZlZm9ybSwKLm1qci1ib3R0b20tZmVlZCAubWpyLWF1ZGlvLXRodW1iLXdhdmVmb3JtIHsKICAgIGZsZXg6IDE7CiAgICBtaW4taGVpZ2h0OiA0MnB4OwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogY2xhbXAoMnB4LCAyLjIlLCA1cHgpOwogICAgcGFkZGluZzogNHB4IDA7CiAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgNHB4IDE0cHggcmdiYSgwLCAwLCAwLCAwLjM0KSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hdWRpby10aHVtYi13YXZlZm9ybSBzcGFuLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXVkaW8tdGh1bWItd2F2ZWZvcm0gc3BhbiB7CiAgICB3aWR0aDogM3B4OwogICAgbWluLXdpZHRoOiAycHg7CiAgICBtYXgtd2lkdGg6IDVweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk4KSwgcmdiYSgxNjAsIDIyNCwgMjU1LCAwLjcyKSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hdWRpby10aHVtYi1tZXRhLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXVkaW8tdGh1bWItbWV0YSB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMnB4OwogICAgdGV4dC1zaGFkb3c6IDAgMnB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjYyKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWF1ZGlvLXRodW1iLXRpdGxlLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXVkaW8tdGh1bWItdGl0bGUgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtd2VpZ2h0OiA4MDA7CiAgICBsaW5lLWhlaWdodDogMS4yOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXVkaW8tdGh1bWItc3VidGl0bGUsCi5tanItYm90dG9tLWZlZWQgLm1qci1hdWRpby10aHVtYi1zdWJ0aXRsZSB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA2NTA7CiAgICBsaW5lLWhlaWdodDogMS4yOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXdvcmtmbG93LXRodW1iLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLXdvcmtmbG93LXRodW1iIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDdweDsKICAgIHBhZGRpbmc6IDE0cHggMTJweDsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSg0NywgNTgsIDc2LCAwLjk0KSwgcmdiYSgxOCwgMjMsIDMyLCAwLjk4KSksCiAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAzMCUgMjUlLCByZ2JhKDc4LCAxODQsIDI1NSwgMC4yMiksIHRyYW5zcGFyZW50IDQyJSk7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgdGV4dC1zaGFkb3c6IDAgMXB4IDhweCByZ2JhKDAsIDAsIDAsIDAuNzIpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXRodW1iLm1qci10aHVtYi13b3JrZmxvdywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQgLm1qci10aHVtYi5tanItdGh1bWItd29ya2Zsb3cgewogICAgYXNwZWN0LXJhdGlvOiAxLjA4IC8gMTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci13b3JrZmxvdy1jYXJkLWFjdGlvbnMsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItd29ya2Zsb3ctY2FyZC1hY3Rpb25zIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogN3B4OwogICAgcmlnaHQ6IDdweDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgZ2FwOiA0cHg7CiAgICB6LWluZGV4OiAxMjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci13b3JrZmxvdy1hY3Rpb24tYnRuLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLXdvcmtmbG93LWFjdGlvbi1idG4gewogICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIHdpZHRoOiAyNHB4OwogICAgaGVpZ2h0OiAyNHB4OwogICAgbWluLXdpZHRoOiAyNHB4OwogICAgbWluLWhlaWdodDogMjRweDsKICAgIHBhZGRpbmc6IDA7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzQpOwogICAgYm9yZGVyLXJhZGl1czogN3B4OwogICAgYmFja2dyb3VuZDogcmdiYSg4LCAxMiwgMTgsIDAuNTgpOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45Mik7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDNweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cigzcHgpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXdvcmtmbG93LWFjdGlvbi1idG46aG92ZXIsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItd29ya2Zsb3ctYWN0aW9uLWJ0bjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI5LCA0MCwgNTgsIDAuNzgpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXdvcmtmbG93LWFjdGlvbi1idG4uaXMtYWN0aXZlLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLXdvcmtmbG93LWFjdGlvbi1idG4uaXMtYWN0aXZlIHsKICAgIGNvbG9yOiAjZmZkNDVhOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjEyLCA5MCwgMC43KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci13b3JrZmxvdy10aHVtYiAucGksCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItd29ya2Zsb3ctdGh1bWIgLnBpIHsKICAgIGZvbnQtc2l6ZTogMS43NXJlbTsKICAgIG9wYWNpdHk6IDAuNzI7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIC5tanItd29ya2Zsb3ctdGh1bWIuaGFzLXRodW1ibmFpbCwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQgLm1qci13b3JrZmxvdy10aHVtYi5oYXMtdGh1bWJuYWlsIHsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHRyYW5zcGFyZW50IDI0JSwgcmdiYSgwLCAwLCAwLCAwLjI4KSA1OCUsIHJnYmEoMCwgMCwgMCwgMC43OCkpLAogICAgICAgIGxpbmVhci1ncmFkaWVudCg5MGRlZywgcmdiYSgwLCAwLCAwLCAwLjM0KSwgdHJhbnNwYXJlbnQgMzQlLCB0cmFuc3BhcmVudCA2NiUsIHJnYmEoMCwgMCwgMCwgMC4zNCkpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXRodW1iLW1lZGlhLm1qci13b3JrZmxvdy1ncmFwaC1tYXAtcHJldmlldywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQgLm1qci10aHVtYi1tZWRpYS5tanItd29ya2Zsb3ctZ3JhcGgtbWFwLXByZXZpZXcgewogICAgb2JqZWN0LWZpdDogY292ZXIgIWltcG9ydGFudDsKICAgIG9wYWNpdHk6IDAuNDY7CiAgICBmaWx0ZXI6IHNhdHVyYXRlKDAuNzUpIGNvbnRyYXN0KDAuODIpIGJyaWdodG5lc3MoMC43KTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wNik7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIC5tanItd29ya2Zsb3ctdGh1bWIuaGFzLWdyYXBoLW1hcCwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQgLm1qci13b3JrZmxvdy10aHVtYi5oYXMtZ3JhcGgtbWFwIHsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDgsIDEwLCAxNCwgMC4zKSwgcmdiYSg4LCAxMCwgMTQsIDAuODIpKSwKICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDUwJSA0MiUsIHJnYmEoMCwgMCwgMCwgMC4xOCksIHJnYmEoMCwgMCwgMCwgMC42OCkgNzIlKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci13b3JrZmxvdy10aHVtYi5oYXMtZ3JhcGgtbWFwIC5tanItd29ya2Zsb3ctdGh1bWItdGl0bGUsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItd29ya2Zsb3ctdGh1bWIuaGFzLWdyYXBoLW1hcCAubWpyLXdvcmtmbG93LXRodW1iLXRpdGxlIHsKICAgIHBhZGRpbmc6IDJweCA3cHg7CiAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMzYpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXdvcmtmbG93LXRodW1iLmhhcy10aHVtYm5haWwgLnBpLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLXdvcmtmbG93LXRodW1iLmhhcy10aHVtYm5haWwgLnBpIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIC5tanItd29ya2Zsb3ctdGh1bWIuaGFzLWdyYXBoLW1hcCAucGksCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItd29ya2Zsb3ctdGh1bWIuaGFzLWdyYXBoLW1hcCAucGkgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBtYXJnaW4tYm90dG9tOiAycHg7CiAgICBmb250LXNpemU6IDEuMTVyZW07CiAgICBvcGFjaXR5OiAwLjU1Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXdvcmtmbG93LXRodW1iLXRpdGxlLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLXdvcmtmbG93LXRodW1iLXRpdGxlIHsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXNpemU6IDAuODRyZW07CiAgICBmb250LXdlaWdodDogODAwOwogICAgbGluZS1oZWlnaHQ6IDEuMTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci13b3JrZmxvdy10aHVtYi1tZXRhLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLXdvcmtmbG93LXRodW1iLW1ldGEgewogICAgZGlzcGxheTogZmxleDsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIGZsZXgtd3JhcDogd3JhcDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBmb250LXNpemU6IDAuNjhyZW07Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIC5tanItd29ya2Zsb3ctdGh1bWItbWV0YSBzcGFuLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLXdvcmtmbG93LXRodW1iLW1ldGEgc3BhbiwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci1tZXRhLXdvcmtmbG93LXRhc2ssCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItbWV0YS13b3JrZmxvdy10YXNrLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLW1ldGEtd29ya2Zsb3ctc3ViZ3JhcGhzLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLW1ldGEtd29ya2Zsb3ctc3ViZ3JhcGhzIHsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7CiAgICBwYWRkaW5nOiAycHggNXB4OwogICAgbWF4LXdpZHRoOiAxMDAlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci13b3JrZmxvdy10aHVtYi1tZXRhIHNwYW46bnRoLWNoaWxkKG4gKyA0KSwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQgLm1qci13b3JrZmxvdy10aHVtYi1tZXRhIHNwYW46bnRoLWNoaWxkKG4gKyA0KSB7CiAgICBkaXNwbGF5OiBub25lOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLWNhcmQtbWV0YVtkYXRhLW1qci1raW5kPSJ3b3JrZmxvdyJdLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLWNhcmQtbWV0YVtkYXRhLW1qci1raW5kPSJ3b3JrZmxvdyJdIHsKICAgIHBhZGRpbmc6IDdweCA5cHggIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci1jYXJkLW1ldGFbZGF0YS1tanIta2luZD0id29ya2Zsb3ciXSAubWpyLWNhcmQtZmlsZW5hbWUsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItY2FyZC1tZXRhW2RhdGEtbWpyLWtpbmQ9IndvcmtmbG93Il0gLm1qci1jYXJkLWZpbGVuYW1lIHsKICAgIG1hcmdpbi1ib3R0b206IDNweCAhaW1wb3J0YW50OwogICAgZm9udC1zaXplOiAwLjc4cmVtICFpbXBvcnRhbnQ7CiAgICBsaW5lLWhlaWdodDogMS4xNSAhaW1wb3J0YW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLWNhcmQtbWV0YVtkYXRhLW1qci1raW5kPSJ3b3JrZmxvdyJdIC5tanItY2FyZC1tZXRhLXJvdywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQgLm1qci1jYXJkLW1ldGFbZGF0YS1tanIta2luZD0id29ya2Zsb3ciXSAubWpyLWNhcmQtbWV0YS1yb3cgewogICAgZm9udC1zaXplOiAwLjcycmVtICFpbXBvcnRhbnQ7CiAgICBvcGFjaXR5OiAwLjc0ICFpbXBvcnRhbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIC5tanItY2FyZC1tZXRhW2RhdGEtbWpyLWtpbmQ9IndvcmtmbG93Il0gLm1qci1jYXJkLW1ldGEtcm93IC5tanItbWV0YS13b3JrZmxvdy10YXNrLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLWNhcmQtbWV0YVtkYXRhLW1qci1raW5kPSJ3b3JrZmxvdyJdIC5tanItY2FyZC1tZXRhLXJvdyAubWpyLW1ldGEtd29ya2Zsb3ctdGFzayB7CiAgICBkaXNwbGF5OiBub25lOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXdvcmtmbG93LW1pc3NpbmctY2hpcCwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQgLm1qci13b3JrZmxvdy1taXNzaW5nLWNoaXAsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIC5tanItbWV0YS13b3JrZmxvdy1taXNzaW5nLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLW1ldGEtd29ya2Zsb3ctbWlzc2luZyB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMTkwLCA2NiwgMC4yOCk7CiAgICBjb2xvcjogcmdiYSgyNTUsIDIzNiwgMTgwLCAwLjk4KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyMDYsIDEwMSwgMC40NSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkIC5tanItZ3JpZC1ncm91cC1zZXBhcmF0b3IgewogICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgd2lkdGg6IDEwMCU7CiAgICBtaW4taGVpZ2h0OiAzMHB4OwogICAgbWFyZ2luOiAwIDAgOHB4OwogICAgcGFkZGluZzogNXB4IDlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEodmFyKC0tbWpyLXdvcmtmbG93LWdyb3VwLWFjY2VudC1yZ2IsIDk1LCAxNzksIDI1NSksIDAuNDIpOwogICAgYm9yZGVyLXJhZGl1czogN3B4OwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAgIDEzNWRlZywKICAgICAgICAgICAgcmdiYSh2YXIoLS1tanItd29ya2Zsb3ctZ3JvdXAtYWNjZW50LXJnYiwgOTUsIDE3OSwgMjU1KSwgMC4yMiksCiAgICAgICAgICAgIHJnYmEodmFyKC0tbWpyLXdvcmtmbG93LWdyb3VwLWFjY2VudC1yZ2IsIDk1LCAxNzksIDI1NSksIDAuMDgpCiAgICAgICAgKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNzglLCB0cmFuc3BhcmVudCk7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcsICNmZmYpIDkyJSwgdHJhbnNwYXJlbnQpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZm9udDogaW5oZXJpdDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQgLm1qci1ncmlkLWdyb3VwLXNlcGFyYXRvcjpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IHJnYmEodmFyKC0tbWpyLXdvcmtmbG93LWdyb3VwLWFjY2VudC1yZ2IsIDk1LCAxNzksIDI1NSksIDAuNjYpOwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAgIDEzNWRlZywKICAgICAgICAgICAgcmdiYSh2YXIoLS1tanItd29ya2Zsb3ctZ3JvdXAtYWNjZW50LXJnYiwgOTUsIDE3OSwgMjU1KSwgMC4zKSwKICAgICAgICAgICAgcmdiYSh2YXIoLS1tanItd29ya2Zsb3ctZ3JvdXAtYWNjZW50LXJnYiwgOTUsIDE3OSwgMjU1KSwgMC4xMikKICAgICAgICApLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4NCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQgLm1qci1ncmlkLWdyb3VwLXNlcGFyYXRvcjpmb2N1cy12aXNpYmxlIHsKICAgIG91dGxpbmU6IDJweCBzb2xpZCByZ2JhKHZhcigtLW1qci13b3JrZmxvdy1ncm91cC1hY2NlbnQtcmdiLCA5NSwgMTc5LCAyNTUpLCAwLjU1KTsKICAgIG91dGxpbmUtb2Zmc2V0OiAycHg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkIC5tanItZ3JpZC1ncm91cC1zZXBhcmF0b3ItLWFjY2VudC0wIHsKICAgIC0tbWpyLXdvcmtmbG93LWdyb3VwLWFjY2VudC1yZ2I6IDk1LCAxNzksIDI1NTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQgLm1qci1ncmlkLWdyb3VwLXNlcGFyYXRvci0tYWNjZW50LTEgewogICAgLS1tanItd29ya2Zsb3ctZ3JvdXAtYWNjZW50LXJnYjogNTUsIDIxMSwgMTU2Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZ3JpZCAubWpyLWdyaWQtZ3JvdXAtc2VwYXJhdG9yLS1hY2NlbnQtMiB7CiAgICAtLW1qci13b3JrZmxvdy1ncm91cC1hY2NlbnQtcmdiOiAyNDYsIDE3NywgNzU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkIC5tanItZ3JpZC1ncm91cC1zZXBhcmF0b3ItLWFjY2VudC0zIHsKICAgIC0tbWpyLXdvcmtmbG93LWdyb3VwLWFjY2VudC1yZ2I6IDIzOCwgMTA0LCAxMzY7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkIC5tanItZ3JpZC1ncm91cC1zZXBhcmF0b3ItLWFjY2VudC00IHsKICAgIC0tbWpyLXdvcmtmbG93LWdyb3VwLWFjY2VudC1yZ2I6IDE1NywgMTMyLCAyMzg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkIC5tanItZ3JpZC1ncm91cC1zZXBhcmF0b3ItLWFjY2VudC01IHsKICAgIC0tbWpyLXdvcmtmbG93LWdyb3VwLWFjY2VudC1yZ2I6IDcxLCAxOTcsIDIyMjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQgLm1qci1ncmlkLWdyb3VwLXNlcGFyYXRvci0tYWNjZW50LTYgewogICAgLS1tanItd29ya2Zsb3ctZ3JvdXAtYWNjZW50LXJnYjogMTQ5LCAyMDcsIDgxOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZ3JpZCAubWpyLWdyaWQtZ3JvdXAtc2VwYXJhdG9yLS1hY2NlbnQtNyB7CiAgICAtLW1qci13b3JrZmxvdy1ncm91cC1hY2NlbnQtcmdiOiAyNDIsIDEzMCwgNzg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkIC5tanItZ3JpZC1ncm91cC1zZXBhcmF0b3ItY2hldnJvbiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgd2lkdGg6IDE4cHg7CiAgICBoZWlnaHQ6IDE4cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGNvbG9yOiByZ2IodmFyKC0tbWpyLXdvcmtmbG93LWdyb3VwLWFjY2VudC1yZ2IsIDk1LCAxNzksIDI1NSkpOwogICAgYmFja2dyb3VuZDogcmdiYSh2YXIoLS1tanItd29ya2Zsb3ctZ3JvdXAtYWNjZW50LXJnYiwgOTUsIDE3OSwgMjU1KSwgMC4xNCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkIC5tanItZ3JpZC1ncm91cC1zZXBhcmF0b3ItY2hldnJvbiA+IC5waSB7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQgLm1qci1ncmlkLWdyb3VwLXNlcGFyYXRvci10aXRsZSB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDgwMDsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItYmFja2Ryb3AgewogICAgcG9zaXRpb246IGZpeGVkOwogICAgaW5zZXQ6IDA7CiAgICB6LWluZGV4OiA5OTk5OTk7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgcGFkZGluZzogMjRweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC41OCk7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Owp9CgoubWpyLXdvcmtmbG93LXBpY2tlci1kaWFsb2cgewogICAgd2lkdGg6IG1pbig5MjBweCwgOTZ2dyk7CiAgICBtYXgtaGVpZ2h0OiBtaW4oNzYwcHgsIDkydmgpOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCwgIzExMTQxOCkgOTYlLCAjMDAwKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZjVmNWY1KTsKICAgIGJveC1zaGFkb3c6IDAgMThweCA2MHB4IHJnYmEoMCwgMCwgMCwgMC40OCk7Cn0KCi5tanItd29ya2Zsb3ctaW5mby1kaWFsb2cgewogICAgd2lkdGg6IG1pbig1NjBweCwgOTZ2dyk7Cn0KCi5tanItd29ya2Zsb3ctaW5mby1mb3JtIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCBtaW5tYXgoMCwgMWZyKSk7CiAgICBnYXA6IDEycHg7CiAgICBwYWRkaW5nOiAxNHB4IDE4cHggNHB4Owp9CgoubWpyLXdvcmtmbG93LWluZm8tZm9ybSBsYWJlbCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogNnB4OwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXdvcmtmbG93LWluZm8tZm9ybSBsYWJlbC5pcy13aWRlIHsKICAgIGdyaWQtY29sdW1uOiAxIC8gLTE7Cn0KCi5tanItd29ya2Zsb3ctaW5mby1mb3JtIHNwYW4gewogICAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC42NCk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNzUwOwogICAgbGV0dGVyLXNwYWNpbmc6IC4wNGVtOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKLm1qci13b3JrZmxvdy1pbmZvLWZvcm0gaW5wdXQsCi5tanItd29ya2Zsb3ctaW5mby1mb3JtIHNlbGVjdCwKLm1qci13b3JrZmxvdy1pbmZvLWZvcm0gdGV4dGFyZWEgewogICAgd2lkdGg6IDEwMCU7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpOwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjI2KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuOTIpOwogICAgZm9udDogaW5oZXJpdDsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIHBhZGRpbmc6IDlweCAxMHB4OwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci13b3JrZmxvdy1pbmZvLWZvcm0gdGV4dGFyZWEgewogICAgcmVzaXplOiB2ZXJ0aWNhbDsKICAgIG1pbi1oZWlnaHQ6IDk2cHg7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWhlYWRlciwKLm1qci13b3JrZmxvdy1waWNrZXItZm9vdGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZ2FwOiAxMnB4OwogICAgcGFkZGluZzogMTJweCAxNHB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItZm9vdGVyIHsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgYm9yZGVyLWJvdHRvbTogMDsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItdGl0bGUgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA5cHg7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmb250LXNpemU6IDE1cHg7CiAgICBmb250LXdlaWdodDogODAwOwp9CgoubWpyLXdvcmtmbG93LXBpY2tlci1pY29uLWJ0biwKLm1qci13b3JrZmxvdy1waWNrZXItYnRuIHsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpOwogICAgYm9yZGVyLXJhZGl1czogN3B4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIsICMyNTI4MmQpIDg4JSwgdHJhbnNwYXJlbnQpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNmNWY1ZjUpOwogICAgY3Vyc29yOiBwb2ludGVyOwp9CgoubWpyLXdvcmtmbG93LXBpY2tlci1pY29uLWJ0biB7CiAgICB3aWR0aDogMzJweDsKICAgIGhlaWdodDogMzJweDsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItYnRuIHsKICAgIG1pbi1oZWlnaHQ6IDMycHg7CiAgICBwYWRkaW5nOiAwIDEycHg7CiAgICBmb250LXdlaWdodDogNzAwOwp9CgoubWpyLXdvcmtmbG93LXBpY2tlci1idG4uaXMtcHJpbWFyeSB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoNzcsIDE3MSwgMjQ3LCAwLjcpOwogICAgYmFja2dyb3VuZDogcmdiYSg3NywgMTcxLCAyNDcsIDAuMjIpOwp9CgoubWpyLXdvcmtmbG93LXBpY2tlci1idG46ZGlzYWJsZWQgewogICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgIG9wYWNpdHk6IDAuNDU7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLXNvdXJjZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nOiA4cHggMTRweDsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsICNhZWIzYmQpOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLXNvdXJjZSBzdHJvbmcgewogICAgbWluLXdpZHRoOiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZjVmNWY1KTsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItdG9vbGJhciB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMTgwcHgsIDFmcikgcmVwZWF0KDMsIG1pbm1heCgxMTBweCwgMTUwcHgpKTsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZzogMTJweCAxNHB4Owp9CgoubWpyLXdvcmtmbG93LXBpY2tlci1kaWFsb2cuaXMtYXNzZXQtbW9kZSAubWpyLXdvcmtmbG93LXBpY2tlci10b29sYmFyIHsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDE4MHB4LCAxZnIpOwp9CgoubWpyLXdvcmtmbG93LXBpY2tlci1zZWFyY2gsCi5tanItd29ya2Zsb3ctcGlja2VyLXRvb2xiYXIgc2VsZWN0IHsKICAgIG1pbi1oZWlnaHQ6IDM0cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpOwogICAgYm9yZGVyLXJhZGl1czogN3B4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEsICMxNzFhMWYpIDkyJSwgIzAwMCk7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2Y1ZjVmNSk7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLXNlYXJjaCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZzogMCAxMHB4Owp9CgoubWpyLXdvcmtmbG93LXBpY2tlci1zZWFyY2ggaW5wdXQgewogICAgd2lkdGg6IDEwMCU7CiAgICBtaW4td2lkdGg6IDA7CiAgICBib3JkZXI6IDA7CiAgICBvdXRsaW5lOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjb2xvcjogaW5oZXJpdDsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItdG9vbGJhciBzZWxlY3QgewogICAgcGFkZGluZzogMCA4cHg7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWJvZHkgewogICAgZmxleDogMSAxIGF1dG87CiAgICBtaW4taGVpZ2h0OiAyNjBweDsKICAgIG92ZXJmbG93OiBhdXRvOwogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDE4MHB4LCAxZnIpKTsKICAgIGFsaWduLWNvbnRlbnQ6IHN0YXJ0OwogICAgZ2FwOiAxMHB4OwogICAgcGFkZGluZzogMCAxNHB4IDE0cHg7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWNhcmQgewogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDY4cHggbWlubWF4KDAsIDFmcik7CiAgICBnYXA6IDEwcHg7CiAgICBtaW4taGVpZ2h0OiA4NHB4OwogICAgcGFkZGluZzogOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xLCAjMTcxYTFmKSA5MiUsIHRyYW5zcGFyZW50KTsKICAgIGNvbG9yOiBpbmhlcml0OwogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIGN1cnNvcjogcG9pbnRlcjsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItZGlhbG9nLmlzLWFzc2V0LW1vZGUgLm1qci13b3JrZmxvdy1waWNrZXItY2FyZCB7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDc2cHggbWlubWF4KDAsIDFmcik7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWNhcmQ6aG92ZXIsCi5tanItd29ya2Zsb3ctcGlja2VyLWNhcmQuaXMtc2VsZWN0ZWQgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDc3LCAxNzEsIDI0NywgMC43Mik7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDc3LCAxNzEsIDI0NywgMC4xMik7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLXRodW1iIHsKICAgIHdpZHRoOiA2OHB4OwogICAgYXNwZWN0LXJhdGlvOiAxIC8gMTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItdGh1bWIgaW1nIHsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgb2JqZWN0LWZpdDogY292ZXI7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWNhcmQtaW5mbyB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA0cHg7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWNhcmQtaW5mbyBzdHJvbmcsCi5tanItd29ya2Zsb3ctcGlja2VyLWNhcmQtaW5mbyBzcGFuLAoubWpyLXdvcmtmbG93LXBpY2tlci1jYXJkLWluZm8gc21hbGwgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItY2FyZC1pbmZvIHN0cm9uZyB7CiAgICBmb250LXNpemU6IDEzcHg7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWNhcmQtaW5mbyBzcGFuLAoubWpyLXdvcmtmbG93LXBpY2tlci1jYXJkLWluZm8gc21hbGwgewogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgI2FlYjNiZCk7CiAgICBmb250LXNpemU6IDExcHg7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWVtcHR5IHsKICAgIGdyaWQtY29sdW1uOiAxIC8gLTE7CiAgICBwYWRkaW5nOiAzMnB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgI2FlYjNiZCk7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWVtcHR5LmlzLWVycm9yIHsKICAgIGNvbG9yOiAjZmZiNGI0Owp9CgpAbWVkaWEgKG1heC13aWR0aDogNzIwcHgpIHsKICAgIC5tanItd29ya2Zsb3ctcGlja2VyLWJhY2tkcm9wIHsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgfQoKICAgIC5tanItd29ya2Zsb3ctcGlja2VyLXRvb2xiYXIgewogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsKICAgIH0KCiAgICAubWpyLXdvcmtmbG93LXBpY2tlci1zZWFyY2ggewogICAgICAgIGdyaWQtY29sdW1uOiAxIC8gLTE7CiAgICB9Cn0KCi8qIEtlZXAgZ2VuZXJhdGlvbi10aW1lIGJhZGdlIHBpbm5lZCB0byB0aGUgdGh1bWJuYWlsIGNvcm5lciBhY3Jvc3MgZ3JpZC9mZWVkIHZhcmlhbnRzLiAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGh1bWIgPiAubWpyLWdlbnRpbWUtYmFkZ2UsCi5tanItYm90dG9tLWZlZWQgLm1qci10aHVtYiA+IC5tanItZ2VudGltZS1iYWRnZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsKICAgIHJpZ2h0OiA2cHggIWltcG9ydGFudDsKICAgIGJvdHRvbTogNnB4ICFpbXBvcnRhbnQ7CiAgICBsZWZ0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICB0b3A6IGF1dG8gIWltcG9ydGFudDsKICAgIHotaW5kZXg6IDEwICFpbXBvcnRhbnQ7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBwYWRkaW5nOiAycHggNnB4ICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmFkaXVzOiA0cHggIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC41NSkgIWltcG9ydGFudDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikgIWltcG9ydGFudDsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA4MDAgIWltcG9ydGFudDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAxNWVtOwogICAgbGluZS1oZWlnaHQ6IDEuMTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgYm94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgIHRleHQtc2hhZG93OgogICAgICAgIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuOSksCiAgICAgICAgMCAwIDEwcHggY29sb3ItbWl4KGluIHNyZ2IsIGN1cnJlbnRDb2xvciAzNSUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigycHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoMnB4KTsKfQoKLyogS2VlcCByYXRpbmcvdGFncyBiYWRnZXMgYW5jaG9yZWQuIERvIG5vdCBmb3JjZSBkaXNwbGF5IGhlcmUgc28gZ3JpZCB2aXNpYmlsaXR5IHRvZ2dsZXMgc3RpbGwgY29udHJvbCBzaG93L2hpZGUuICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci10aHVtYiA+IC5tanItcmF0aW5nLWJhZGdlLAoubWpyLWJvdHRvbS1mZWVkIC5tanItdGh1bWIgPiAubWpyLXJhdGluZy1iYWRnZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsKICAgIHRvcDogNnB4ICFpbXBvcnRhbnQ7CiAgICByaWdodDogNnB4ICFpbXBvcnRhbnQ7CiAgICBsZWZ0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICBib3R0b206IGF1dG8gIWltcG9ydGFudDsKICAgIHotaW5kZXg6IDEwICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNTUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBsZXR0ZXItc3BhY2luZzogMXB4OwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjI1KTsKICAgIHRleHQtc2hhZG93OiAwIDJweCA2cHggcmdiYSgwLCAwLCAwLCAwLjYpOwogICAgYW5pbWF0aW9uOiBtanItZmFkZS1pbiAwLjJzIGVhc2Utb3V0Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGh1bWIgPiAubWpyLXRhZ3MtYmFkZ2UsCi5tanItYm90dG9tLWZlZWQgLm1qci10aHVtYiA+IC5tanItdGFncy1iYWRnZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsKICAgIGxlZnQ6IDZweCAhaW1wb3J0YW50OwogICAgYm90dG9tOiA2cHggIWltcG9ydGFudDsKICAgIHJpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICB0b3A6IGF1dG8gIWltcG9ydGFudDsKICAgIHotaW5kZXg6IDEwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAzcHggNnB4OwogICAgZm9udC1zaXplOiA5cHg7CiAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDU2cHgpOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpOwogICAgYm94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgIGFuaW1hdGlvbjogbWpyLWZhZGUtaW4gMC4ycyBlYXNlLW91dDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRodW1iLXBsYXkgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBkaXNwbGF5OiBncmlkOwogICAgcGxhY2UtaXRlbXM6IGNlbnRlcjsKICAgIGZvbnQtc2l6ZTogMjhweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CiAgICB0ZXh0LXNoYWRvdzogMCAwIDEwcHggcmdiYSgwLCAwLCAwLCAwLjcpOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDEyMG1zIGVhc2U7Cn0KCi8qIC0tLSBIb3ZlciBpbmZvIG92ZXJsYXkgKHBvc2l0aXZlIHByb21wdCArIGdlbiB0aW1lKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBTbGlkZXMgdXAgZnJvbSB0aGUgYm90dG9tIG9mIC5tanItdGh1bWIgb24gY2FyZCBob3Zlci4KICAgcG9pbnRlci1ldmVudHM6IG5vbmUgIC0+IG5ldmVyIGJsb2NrcyB2aWRlbyBtb3VzZWVudGVyIC8gcGxheS1vbi1ob3Zlci4KICAgei1pbmRleDogMiAgICAgICAgICAgLT4gc2l0cyBhYm92ZSB0aGUgdGh1bWJuYWlsIGltYWdlLCBiZWxvdyB0aGUgcGxheSBpY29uLgogICBDb250cm9sbGVkIGJ5IHRoZSAubWpyLXNob3ctaG92ZXItaW5mbyBjbGFzcyBvbiB0aGUgZ3JpZCBjb250YWluZXIsIHdoaWNoCiAgIGlzIHRvZ2dsZWQgdmlhIHRoZSAiU2hvdyBwcm9tcHQgb24gaG92ZXIiIHNldHRpbmcuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZC1ob3Zlci1pbmZvIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGJvdHRvbTogMDsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIHBhZGRpbmc6IDIycHggOHB4IDdweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHRyYW5zcGFyZW50IDAlLCByZ2JhKDAsIDAsIDAsIDAuNzgpIDEwMCUpOwogICAgY29sb3I6ICNmZmY7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBsaW5lLWhlaWdodDogMS40OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBvcGFjaXR5OiAwOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDVweCk7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIG9wYWNpdHkgMTUwbXMgZWFzZSwKICAgICAgICB0cmFuc2Zvcm0gMTUwbXMgZWFzZTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAzcHg7CiAgICB6LWluZGV4OiAyOwp9Ci8qIE9ubHkgcmV2ZWFsIG9uIGhvdmVyIHdoZW4gdGhlIHNldHRpbmcgaXMgZW5hYmxlZCAoY2xhc3Mgb24gZ3JpZCBjb250YWluZXIpICovCi5tanItZ3JpZC5tanItc2hvdy1ob3Zlci1pbmZvIC5tanItY2FyZDpob3ZlciAubWpyLWNhcmQtaG92ZXItaW5mbyB7CiAgICBvcGFjaXR5OiAxOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwp9Ci5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkLWhvdmVyLWluZm8gLm1qci1ob3Zlci1wcm9tcHQgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OwogICAgLXdlYmtpdC1saW5lLWNsYW1wOiAyOwogICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDsKICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7CiAgICBvcGFjaXR5OiAwLjk7CiAgICBmb250LXNpemU6IDkuNXB4Owp9Ci5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkLWhvdmVyLWluZm8gLm1qci1ob3Zlci1nZW50aW1lIHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjEwLCAxMjAsIDAuOTUpOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGZvbnQtc2l6ZTogOXB4OwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTsKfQpAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkgewogICAgLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQtaG92ZXItaW5mbyB7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwbXM7CiAgICAgICAgdHJhbnNmb3JtOiBub25lOwogICAgfQp9CgovKiAtLS0gQ2FyZCBkZXRhaWxzIHBhbmVsIHNob3cvaGlkZSB2aWEgZ3JpZCBjb250YWluZXIgY2xhc3MgLS0tLS0tLS0tLS0tLS0tLQogICAubWpyLXNob3ctZGV0YWlscyBpcyB0b2dnbGVkIGJ5IGFwcGx5R3JpZFNldHRpbmdzQ2xhc3NlcygpIHdoZW4gdGhlCiAgICJTaG93IG1ldGFkYXRhIHBhbmVsIiBzZXR0aW5nIGNoYW5nZXMuICBEZWZhdWx0ID0gT0ZGIOKGkiBwYW5lbCBoaWRkZW4uCiAgIEhpZGluZyBoZXJlIGtlZXBzIGFjdHVhbCByb3cgaGVpZ2h0ID0gZXN0aW1hdGVSb3dIZWlnaHQobWV0YUhlaWdodD0wKSwKICAgcHJldmVudGluZyB0aGUgdmlydHVhbGl6ZXIgZnJvbSByZXBvc2l0aW9uaW5nIGFsbCByb3dzIG9uIG1lYXN1cmUKICAgKHdoaWNoIHdhcyB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgInJlbG9hZCBpbXByZXNzaW9uIiBibGluaykuCiAgIE1hdGNoIHRoZSBib3R0b20tZmVlZCBwYXR0ZXJuIGF0IC5tanItYm90dG9tLWZlZWQgLm1qci1jYXJkLWluZm8uCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZ3JpZCAubWpyLWNhcmQtaW5mbyB7CiAgICBkaXNwbGF5OiBub25lOwp9Ci5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkLm1qci1zaG93LWRldGFpbHMgLm1qci1jYXJkLWluZm8gewogICAgZGlzcGxheTogYmxvY2s7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkLW1ldGEgewogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBmb250LXNpemU6IDExcHg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkLWZpbGVuYW1lIHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIG1pbi13aWR0aDogMDsKICAgIG1hcmdpbi1ib3R0b206IDJweDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQtZGV0YWlscyB7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICBvcGFjaXR5OiAwLjg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkLWZpbGVuYW1lLXRleHQgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG1pbi13aWR0aDogMDsKfQoKLyogUmF0aW5nICYgVGFncyBFZGl0b3JzICovCkBrZXlmcmFtZXMgZmFkZUluIHsKICAgIGZyb20gewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00cHgpOwogICAgfQogICAgdG8gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgfQp9Ci8qKgogKiBBcmNoaXZlZCBDU1MgU3R5bGVzIC0gUmF0aW5nIGFuZCBUYWdzCiAqIFRoZXNlIHN0eWxlcyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGVtZS1jb21meS5jc3MKICovCgovKiBBbmltYXRpb25zICovCkBrZXlmcmFtZXMgc2xpZGVJblJpZ2h0IHsKICAgIGZyb20gewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgfQogICAgdG8gewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgfQp9CgovKiBQb3BvdmVycyAqLwoubWpyLXJhdGluZy1wb3BvdmVyLAoubWpyLXRhZ3MtcG9wb3ZlciB7CiAgICBhbmltYXRpb246IGZhZGVJbiAwLjJzIGVhc2U7Cn0KCi5tanItcmF0aW5nLXBvcG92ZXIsCi5tanItdGFncy1wb3BvdmVyIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZywgMC41cmVtKTsKICAgIGJveC1zaGFkb3c6IDAgMTJweCAyOHB4IHJnYmEoMCwgMCwgMCwgMC4zNSk7CiAgICBwYWRkaW5nOiA4cHg7Cn0KCi8qIFJhdGluZyBFZGl0b3IgKi8KLm1qci1yYXRpbmctZWRpdG9yIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNHB4OwogICAgcGFkZGluZzogMnB4Owp9CgoubWpyLXJhdGluZy1zdGFyIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBmb250LXNpemU6IDIwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBwYWRkaW5nOiA0cHggNnB4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2RkZCk7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIHRyYW5zZm9ybSAxMjBtcyBlYXNlLAogICAgICAgIGJhY2tncm91bmQtY29sb3IgMTIwbXMgZWFzZSwKICAgICAgICBib3JkZXItY29sb3IgMTIwbXMgZWFzZSwKICAgICAgICBjb2xvciAxMjBtcyBlYXNlOwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci1yYXRpbmctc3Rhcjpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpIDM1JSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbWZ5LW1lbnUtc2Vjb25kYXJ5LWJnLCAjMzMzKSA2NSUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1yYXRpbmctZWRpdG9yIC5tanItcmF0aW5nLXN0YXI6aG92ZXIgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpICFpbXBvcnRhbnQ7Cn0KCi5tanItcmF0aW5nLWVkaXRvciAubWpyLXJhdGluZy1zdGFyOmZvY3VzLXZpc2libGUgewogICAgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLWZvY3VzLW91dGxpbmUtY29sb3IsICM0ZGFiZjcpOwogICAgb3V0bGluZS1vZmZzZXQ6IDJweDsKICAgIGJvcmRlci1yYWRpdXM6IDJweDsKfQoKLm1qci1yYXRpbmctZWRpdG9yIC5tanItcmF0aW5nLXN0YXI6YWN0aXZlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NSkgIWltcG9ydGFudDsKfQoKLyogVGFncyBFZGl0b3IgKi8KLm1qci10YWdzLWVkaXRvciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZzogMTJweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEsIHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItc20pOwogICAgYm94LXNoYWRvdzogMCAxMnB4IDI4cHggcmdiYSgwLCAwLCAwLCAwLjQ1KTsKICAgIG1pbi13aWR0aDogMjUwcHg7CiAgICBtYXgtd2lkdGg6IG1pbigzNTBweCwgY2FsYygxMDB2dyAtIDIwcHgpKTsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0Owp9CgoubWpyLXRhZ3MtZWRpdG9yLmlzLWRpc2FibGVkIHsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgb3BhY2l0eTogMC43Owp9CgoubWpyLXRhZ3MtZGlzcGxheSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAgZ2FwOiA2cHg7CiAgICBtaW4taGVpZ2h0OiAzMnB4Owp9CgoubWpyLXRhZ3MtZW1wdHkgewogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCk7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7Cn0KCi5tanItdGFnLWNoaXAgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDI0JSwgdHJhbnNwYXJlbnQpOwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDQwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGNvbG9yOiB2YXIoLS1tanItdGFnLWNvbG9yKTsKICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7Cn0KCi5tanItdGFnLWNoaXAtcmVtb3ZlIHsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgYm9yZGVyOiAwOwogICAgYm9yZGVyLXJhZGl1czogMDsKICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICBjb2xvcjogaW5oZXJpdDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIG9wYWNpdHk6IDAuNzsKfQoKLm1qci10YWctY2hpcC1yZW1vdmU6ZGlzYWJsZWQgewogICAgY3Vyc29yOiBkZWZhdWx0Owp9CgoubWpyLXRhZ3MtaW5wdXQtd3JhcCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5tanItdGFnLWlucHV0IHsKICAgIHdpZHRoOiAxMDAlOwogICAgcGFkZGluZzogNnB4IDhweDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA3NSUsIHRyYW5zcGFyZW50KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcpOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci10YWctaW5wdXQ6Zm9jdXMgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDg4JSwgdHJhbnNwYXJlbnQpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHZhcigtLW1qci1hY2NlbnQpICFpbXBvcnRhbnQ7Cn0KCi5tanItdGFnLWNoaXA6aG92ZXIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDM0JSwgdHJhbnNwYXJlbnQpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItdGFnLWNvbG9yKSA2MCUsIHZhcigtLW1qci1ib3JkZXIpKSAhaW1wb3J0YW50Owp9CgoubWpyLXRhZ3MtZHJvcGRvd24gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAxMDAlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgbWFyZ2luLXRvcDogNHB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSwgdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSkpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBtYXgtaGVpZ2h0OiAxNTBweDsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICB6LWluZGV4OiAxMDAwOwp9CgoubWpyLXRhZ3MtZHJvcGRvd24gW2RhdGEtcGMtc2VjdGlvbj0ibGlzdCJdIHsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOiAwOwp9CgoubWpyLXRhZ3MtZHJvcGRvd24gW2RhdGEtcGMtc2VjdGlvbj0ib3B0aW9uIl0gewogICAgbGlzdC1zdHlsZTogbm9uZTsKfQoKLm1qci10YWctc3VnZ2VzdGlvbiB7CiAgICBwYWRkaW5nOiA2cHggOHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjb2xvcjogdmFyKC0tbWpyLXRhZy1jb2xvcik7CiAgICBmb250LXNpemU6IDEycHg7Cn0KCi5tanItdGFnLXN1Z2dlc3Rpb24uaXMtYWN0aXZlLAoubWpyLXRhZy1zdWdnZXN0aW9uOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItdGFnLWNvbG9yKSAyOCUsIHRyYW5zcGFyZW50KSAhaW1wb3J0YW50Owp9CgovKiBCYWRnZXMgSW50ZXJhY3RpdmUgKi8KLm1qci1yYXRpbmctYmFkZ2UsCi5tanItdGFncy1iYWRnZSB7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwp9CgoubWpyLXJhdGluZy1iYWRnZSB7CiAgICBjb2xvcjogdmFyKC0tbWpyLXJhdGluZy1jb2xvcikgIWltcG9ydGFudDsKfQoKLm1qci10YWdzLWJhZGdlIHsKICAgIGNvbG9yOiB2YXIoLS1tanItdGFnLWNvbG9yKSAhaW1wb3J0YW50Owp9CgoubWpyLXJhdGluZy1iYWRnZTpob3ZlciwKLm1qci10YWdzLWJhZGdlOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7CiAgICBib3gtc2hhZG93OiAwIDRweCA4cHggcmdiYSgwLCAwLCAwLCAwLjUpOwp9CgovKiBTY3JvbGxiYXIgZm9yIHRhZ3MgZHJvcGRvd24gKi8KLm1qci10YWdzLWRyb3Bkb3duOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICB3aWR0aDogNnB4Owp9CgoubWpyLXRhZ3MtZHJvcGRvd246Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA2NSUsIHRyYW5zcGFyZW50KTsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKfQoKLm1qci10YWdzLWRyb3Bkb3duOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXRhZy1jb2xvcikgNDglLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7Cn0KCi5tanItdGFncy1kcm9wZG93bjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDY1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgovKiBTaWRlYmFyIChjYW4gYmUgbGVmdCBvciByaWdodCkgKi8KLm1qci1zaWRlYmFyIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDM7CiAgICBmbGV4OiAwIDAgYXV0bzsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7Cn0KCi5tanItd29ya2Zsb3ctdHJlZS13cmFwIHsKICAgIG1hcmdpbjogMCAwIDEycHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODIlLCB0cmFuc3BhcmVudCk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1tZCwgOHB4KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA3MiUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci13b3JrZmxvdy10cmVlIHsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZWFlYWVhKTsKICAgIGZvbnQtc2l6ZTogMTJweDsKfQoKLm1qci13b3JrZmxvdy10cmVlLXNjcm9sbCB7CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIHBhZGRpbmc6IDJweCA0cHggNnB4Owp9CgoubWpyLXdvcmtmbG93LXRyZWUtbGlzdCB7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMDsKfQoKLm1qci13b3JrZmxvdy10cmVlLW5vZGUtY29udGVudCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgbWluLWhlaWdodDogMjhweDsKICAgIHBhZGRpbmc6IDRweCA2cHg7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1zbSwgNnB4KTsKfQoKLm1qci13b3JrZmxvdy10cmVlLW5vZGUtY29udGVudDpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTglLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItd29ya2Zsb3ctdHJlZS10b2dnbGUgewogICAgd2lkdGg6IDE0cHg7CiAgICBoZWlnaHQ6IDIwcHg7CiAgICBwYWRkaW5nOiAwOwogICAgYm9yZGVyOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjQpKTsKfQoKLm1qci13b3JrZmxvdy10cmVlLXRvZ2dsZVtkYXRhLXAtbGVhZj0idHJ1ZSJdIHsKICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKfQoKLm1qci13b3JrZmxvdy10cmVlLWljb24gewogICAgd2lkdGg6IDhweDsKICAgIGZsZXg6IDAgMCA4cHg7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDcwJSwgdmFyKC0tY29udGVudC1mZykpOwogICAgZm9udC1zaXplOiA3cHg7Cn0KCi5tanItd29ya2Zsb3ctdHJlZS1sYWJlbCB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmbGV4OiAxIDEgYXV0bzsKfQoKLm1qci13b3JrZmxvdy10cmVlLW5vZGUgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci13b3JrZmxvdy10cmVlLW5vZGUtbmFtZSB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoubWpyLXdvcmtmbG93LXRyZWUtbm9kZS10eXBlIHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLW11dGVkKSA3NSUsIHZhcigtLWNvbnRlbnQtZmcpKTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItc2lkZWJhci5pcy1vcGVuIHsKICAgIC8qIEJvcmRlciBpcyBzZXQgZHluYW1pY2FsbHkgYmFzZWQgb24gcG9zaXRpb24gKi8KfQoKLm1qci1zaWRlYmFyIC5tanItc2lkZWJhci1oZWFkZXIgewogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMiwgIzMzMyk7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7Cn0KCi5tanItc2lkZWJhciAubWpyLXNpZGViYXItY29udGVudCB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xLCAjMmEyYTJhKTsKfQoKLm1qci1zaWRlYmFyIC5tanItc2lkZWJhci1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhciB7CiAgICB3aWR0aDogOHB4Owp9CgoubWpyLXNpZGViYXIgLm1qci1zaWRlYmFyLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4zKTsKfQoKLm1qci1zaWRlYmFyIC5tanItc2lkZWJhci1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7Cn0KCi5tanItc2lkZWJhciAubWpyLXNpZGViYXItY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpOwp9CgovKiBDdXN0b20gUm9vdHMgUG9wb3ZlciBTdHlsaW5nICovCi5tanItY3VzdG9tLXBvcG92ZXIgewogICAgbWluLXdpZHRoOiAzMDBweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEsIHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHZhcigtLWJvcmRlci1jb2xvciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSkpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnLCAwLjVyZW0pOwogICAgYm94LXNoYWRvdzogMCAxMnB4IDI4cHggcmdiYSgwLCAwLCAwLCAwLjM1KTsKICAgIHotaW5kZXg6IHZhcigtLW1qci1wb3BvdmVyLXotaW5kZXgpOwogICAgcGFkZGluZzogMTJweDsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLXBvcG92ZXItcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgIGZsZXgtd3JhcDogd3JhcDsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLXBvcG92ZXItcm93Omxhc3QtY2hpbGQgewogICAgbWFyZ2luLWJvdHRvbTogMDsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLXBvcG92ZXItbGFiZWwgewogICAgd2lkdGg6IDYwcHg7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkLCB2YXIoLS1kZXNjcmlwLXRleHQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42NSkpKTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtd2VpZ2h0OiA1MDA7Cn0KCi5tanItY3VzdG9tLXBvcG92ZXIgLm1qci1zZWxlY3QgewogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLWJ0biB7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiAwOwogICAgbWFyZ2luLXJpZ2h0OiA1cHg7Cn0KCi5tanItY3VzdG9tLXBvcG92ZXIgLm1qci1idG46bGFzdC1jaGlsZCB7CiAgICBtYXJnaW4tcmlnaHQ6IDA7Cn0KCi5tanItY3VzdG9tLXBvcG92ZXIgLm1qci1idG4ubWpyLXByaW1hcnkgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDE4JSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNjAlLCB2YXIoLS1tanItYm9yZGVyKSk7Cn0KCi5tanItY3VzdG9tLXBvcG92ZXIgLm1qci1idG4ubWpyLXByaW1hcnk6aG92ZXIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDI1JSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgODAlLCB2YXIoLS1tanItYm9yZGVyKSk7Cn0KCi5tanItc2lkZWJhciAubWpyLXNpZGViYXItc2VjdGlvbiB7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwp9CgoubWpyLXNpZGViYXIgLm1qci1zaWRlYmFyLXNlY3Rpb246aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjMpICFpbXBvcnRhbnQ7Cn0KCi8qIElubGluZSBTaWRlYmFyICh3aWR0aC1iYXNlZCB0cmFuc2l0aW9ucyBsaWtlIGFyY2hpdmVkIHZlcnNpb24pICovCi5tanItaW5saW5lLXNpZGViYXIgewogICAgd2lkdGg6IDA7CiAgICBtaW4td2lkdGg6IDA7CiAgICBtYXgtd2lkdGg6IDQ4MHB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEsICMyYTJhMmEpOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICB0cmFuc2l0aW9uOgogICAgICAgIHdpZHRoIDAuM3MgZWFzZSwKICAgICAgICBtaW4td2lkdGggMC4zcyBlYXNlOwp9CgoubWpyLWlubGluZS1zaWRlYmFyLmlzLW9wZW4gewogICAgd2lkdGg6IDQwMHB4OwogICAgbWluLXdpZHRoOiAyNjBweDsKfQoKLyogU3BhY2UgYmV0d2VlbiBzaWRlYmFyIGFuZCBncmlkICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1icm93c2UgewogICAgZ2FwOiAwOwp9CgovKiBCb3JkZXIgYmFzZWQgb24gcG9zaXRpb24gKi8KLm1qci1pbmxpbmUtc2lkZWJhcltkYXRhLXBvc2l0aW9uPSJsZWZ0Il0gewogICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7Cn0KCi5tanItaW5saW5lLXNpZGViYXJbZGF0YS1wb3NpdGlvbj0icmlnaHQiXSB7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwp9CgovKiBTaWRlYmFyIHBsYWNlaG9sZGVyICovCi5tanItc2lkZWJhci1wbGFjZWhvbGRlciB7CiAgICBwYWRkaW5nOiAyMHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSk7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgovKiA9PT09PT09PT09IFZpZXdlciBDb21wb25lbnQgPT09PT09PT09PSAqLwoubWpyLXZpZXdlci1vdmVybGF5IHsKICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgIHRvcDogMDsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIGJvdHRvbTogMDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC45NSk7CiAgICAvKiBTaXQgYWJvdmUgTUZWICgxMDAwMCkgc28gdGhlIGZ1bGwgdmlld2VyIGFsd2F5cyBjb3ZlcnMgdGhlIGZsb2F0aW5nIHBhbmVsICovCiAgICB6LWluZGV4OiAxMDAwMTsKICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgZGlzcGxheTogbm9uZTsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47Cn0KLyogRmFkZS1pbjogYW5pbWF0aW9uIHJlLXRyaWdnZXJzIGVhY2ggdGltZSBKUyBzd2l0Y2hlcyBkaXNwbGF5IGJhY2sgdG8gZmxleCAqLwoubWpyLXZpZXdlci1vdmVybGF5W3N0eWxlKj0iZmxleCJdIHsKICAgIGFuaW1hdGlvbjogbWpyLWZhZGUtaW4gMC4xOHMgZWFzZS1vdXQ7Cn0KCkBrZXlmcmFtZXMgbWpyLWZhZGUtaW4gewogICAgZnJvbSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTk1KTsKICAgIH0KICAgIHRvIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICB9Cn0KCi5tanItdmlld2VyLWhlYWRlciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDEycHggMjBweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxNzBkZWcsIHJnYmEoMjQsIDI3LCAzMywgMC45NiksIHJnYmEoMTcsIDE5LCAyNSwgMC45NykpOwogICAgYm9yZGVyLWJvdHRvbTogMC44cHggc29saWQgcmdiYSgxOTYsIDIwMiwgMjEwLCAwLjIpOwogICAgY29sb3I6IHdoaXRlOwp9CgoubWpyLXZpZXdlci1maWxlbmFtZSB7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBmb250LXdlaWdodDogNTAwOwogICAgbWF4LXdpZHRoOiA0MDBweDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItdmlld2VyLW1vZGUtYnV0dG9ucyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiA2cHg7Cn0KCi5tanItdmlld2VyLW1vZGUtYnV0dG9ucyBidXR0b24gewogICAgcGFkZGluZzogNHB4IDEycHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIwNiwgMjExLCAyMTgsIDAuMSksIHJnYmEoMjA2LCAyMTEsIDIxOCwgMC4wMykpOwogICAgYm9yZGVyOiAwLjhweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMyk7CiAgICBjb2xvcjogcmdiYSgyMzAsIDIzMywgMjM4LCAwLjk1KTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIHRyYW5zaXRpb246IGFsbCAwLjE2czsKfQoKLm1qci12aWV3ZXItbW9kZS1idXR0b25zIGJ1dHRvbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIxMCwgMjE0LCAyMjAsIDAuMTQpLCByZ2JhKDIxMCwgMjE0LCAyMjAsIDAuMDYpKTsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMTQsIDIxOCwgMjI0LCAwLjQyKTsKfQoKLyogVmlld2VyIGNsb3NlIGJ1dHRvbiBwaW5uZWQgdG8gb3ZlcmxheSBjb3JuZXIgKi8KLm1qci12aWV3ZXItY2xvc2UsCi5tanItdmlld2VyLWZzIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgxOTYsIDIwMiwgMjEwLCAwLjI2KSAhaW1wb3J0YW50OwogICAgYm9yZGVyLXdpZHRoOiAwLjhweCAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIwNiwgMjExLCAyMTgsIDAuMDgpLCByZ2JhKDIwNiwgMjExLCAyMTgsIDAuMDIpKSwKICAgICAgICByZ2JhKDIwLCAyMywgMjksIDAuOTQpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItY2xvc2UgewogICAgY29sb3I6ICNmZmY0ZjQgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMDUsIDgyLCA4MiwgMC41KSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIwNSwgODIsIDgyLCAwLjMpLCByZ2JhKDIwNSwgODIsIDgyLCAwLjEyKSksCiAgICAgICAgcmdiYSg1OCwgMTgsIDE4LCAwLjk0KSAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyMTksIDIxOSwgMC4xNiksCiAgICAgICAgMCAwIDAgMXB4IHJnYmEoMjA1LCA4MiwgODIsIDAuMDgpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLWNsb3NlOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyMzUsIDExMCwgMTEwLCAwLjM4KSwgcmdiYSgyMzUsIDExMCwgMTEwLCAwLjE2KSksCiAgICAgICAgcmdiYSg3MCwgMTgsIDE4LCAwLjk3KSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIzNSwgMTM4LCAxMzgsIDAuNjQpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLWZzOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyMTAsIDIxNCwgMjIwLCAwLjE0KSwgcmdiYSgyMTAsIDIxNCwgMjIwLCAwLjA2KSksCiAgICAgICAgcmdiYSgyMywgMjYsIDMyLCAwLjk1KSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIxNCwgMjE4LCAyMjQsIDAuMzgpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLWNsb3NlIC5waSB7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLm1qci12aWV3ZXItY29udGVudCB7CiAgICBmbGV4OiAxOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Cn0KCi5tanItdmlld2VyLXNpbmdsZSwKLm1qci12aWV3ZXItYWIsCi5tanItdmlld2VyLXNpZGVieXNpZGUgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7Cn0KCi5tanItdmlld2VyLXNpbmdsZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwp9CgoubWpyLXZpZXdlci1zaW5nbGUgaW1nLAoubWpyLXZpZXdlci1zaW5nbGUgdmlkZW8gewogICAgbWF4LXdpZHRoOiAxMDAlOwogICAgbWF4LWhlaWdodDogMTAwJTsKICAgIG9iamVjdC1maXQ6IGNvbnRhaW47CiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yczsKfQoKLm1qci12aWV3ZXItYXVkaW8tc2hlbGwgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMTRweDsKICAgIHBhZGRpbmc6IDE4cHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgYmFja2dyb3VuZDoKICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDE4JSAyMiUsIHJnYmEoNzgsIDE4NCwgMjU1LCAwLjIpLCB0cmFuc3BhcmVudCAzMiUpLAogICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgODIlIDc0JSwgcmdiYSg4MiwgMjIwLCAxNTYsIDAuMTUpLCB0cmFuc3BhcmVudCAzNiUpLAogICAgICAgIGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHJnYmEoMTIsIDE4LCAyNiwgMC45OCksIHJnYmEoNCwgNywgMTEsIDAuOTkpKTsKfQoKLm1qci12aWV3ZXItYXVkaW8taGVhZGVyIHsKICAgIHdpZHRoOiBtaW4oMTA4MHB4LCA4OCUpOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogMTFweDsKICAgIG1pbi13aWR0aDogMDsKICAgIHBhZGRpbmc6IDAgOHB4Owp9CgoubWpyLXZpZXdlci1hdWRpby1pY29uIHsKICAgIHdpZHRoOiAzNHB4OwogICAgaGVpZ2h0OiAzNHB4OwogICAgZmxleDogMCAwIGF1dG87CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KTsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDIycHggcmdiYSgwLCAwLCAwLCAwLjI2KTsKfQoKLm1qci12aWV3ZXItYXVkaW8tdGl0bGUtd3JhcCB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMnB4Owp9CgoubWpyLXZpZXdlci1hdWRpby10aXRsZSB7CiAgICBtYXgtd2lkdGg6IG1pbig3NjBweCwgNzJ2dyk7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgZm9udC13ZWlnaHQ6IDgwMDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI1Owp9CgoubWpyLXZpZXdlci1hdWRpby1tZXRhIHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTgpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDgwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwOwp9CgoubWpyLXZpZXdlci1hdWRpby12aXogewogICAgd2lkdGg6IG1pbigxOTIwcHgsIDk2JSk7CiAgICBhc3BlY3QtcmF0aW86IDE2IC8gOTsKICAgIGhlaWdodDogYXV0bzsKICAgIG1heC1oZWlnaHQ6IG1pbigxMDgwcHgsIDY4dmgpOwogICAgbWluLWhlaWdodDogMjYwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDkpOwogICAgYm9yZGVyLXJhZGl1czogMTZweDsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAxKSksCiAgICAgICAgcmdiYSgyLCA1LCA5LCAwLjIyKTsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpLAogICAgICAgIDAgMThweCA3MHB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKfQoKLm1qci12aWV3ZXItYXVkaW8tc3JjIHsKICAgIHdpZHRoOiBtaW4oNjgwcHgsIDkwJSk7Cn0KCi5tanItdmlld2VyLWFiIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5tanItdmlld2VyLXNpZGVieXNpZGUgewogICAgZGlzcGxheTogbm9uZTsKICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICBnYXA6IDJweDsKfQoKLm1qci12aWV3ZXItc2lkZWJ5c2lkZSA+IGRpdiB7CiAgICBmbGV4OiAxOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7Cn0KCi5tanItdmlld2VyLXNpZGVieXNpZGUgaW1nLAoubWpyLXZpZXdlci1zaWRlYnlzaWRlIHZpZGVvIHsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIG1heC1oZWlnaHQ6IDEwMCU7CiAgICBvYmplY3QtZml0OiBjb250YWluOwp9CgoubWpyLXZpZXdlci1mb290ZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDEycHggMjBweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC44KTsKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICBjb2xvcjogd2hpdGU7CiAgICBnYXA6IDIwcHg7Cn0KCi5tanItdmlld2VyLWZvb3RlciBidXR0b24gewogICAgcGFkZGluZzogNnB4IDEycHg7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKTsKICAgIGNvbG9yOiB3aGl0ZTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOwp9CgoubWpyLXZpZXdlci1mb290ZXIgYnV0dG9uOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKfQoKLm1qci12aWV3ZXItbmF2IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxNHB4Owp9CgoubWpyLXZpZXdlci1uYXYtYnRuIHsKICAgIHdpZHRoOiA0MHB4ICFpbXBvcnRhbnQ7CiAgICBoZWlnaHQ6IDQwcHggIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHggIWltcG9ydGFudDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTk2LCAyMDIsIDIxMCwgMC40MikgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgxOTQsIDIwMCwgMjA4LCAwLjE4KSwgcmdiYSgxOTQsIDIwMCwgMjA4LCAwLjA3KSksCiAgICAgICAgcmdiYSgzNCwgMzgsIDQ0LCAwLjkyKSAhaW1wb3J0YW50OwogICAgY29sb3I6IHJnYmEoMjM0LCAyMzYsIDI0MCwgMC45NikgIWltcG9ydGFudDsKICAgIGZvbnQtc2l6ZTogMjBweCAhaW1wb3J0YW50OwogICAgZm9udC13ZWlnaHQ6IDcwMCAhaW1wb3J0YW50OwogICAgbGluZS1oZWlnaHQ6IDEgIWltcG9ydGFudDsKICAgIHRleHQtc2hhZG93OiBub25lOwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpOwogICAgdHJhbnNpdGlvbjoKICAgICAgICB0cmFuc2Zvcm0gMC4xNHMgZWFzZSwKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yIDAuMTRzIGVhc2UsCiAgICAgICAgYm9yZGVyLWNvbG9yIDAuMTRzIGVhc2UgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItbmF2LWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjE0LCAyMTgsIDIyNCwgMC41NikgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyMDcsIDIxMiwgMjE5LCAwLjIpLCByZ2JhKDIwNywgMjEyLCAyMTksIDAuMSkpLAogICAgICAgIHJnYmEoMzksIDQzLCA0OSwgMC45NCkgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwp9CgoubWpyLXZpZXdlci1uYXYtYnRuOmFjdGl2ZTpub3QoOmRpc2FibGVkKSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgc2NhbGUoMC45OCk7CiAgICBmaWx0ZXI6IG5vbmU7Cn0KCi5tanItdmlld2VyLW5hdi1idG46ZGlzYWJsZWQgewogICAgb3BhY2l0eTogMC4zNCAhaW1wb3J0YW50OwogICAgZmlsdGVyOiBncmF5c2NhbGUoMC4yNSk7CiAgICBib3gtc2hhZG93OiBub25lOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLWluZGV4IHsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIG1pbi13aWR0aDogNzRweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wNGVtOwogICAgY29sb3I6IHJnYmEoMjI2LCAyMjgsIDIzMywgMC45NCk7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDE5NywgMjAzLCAyMTEsIDAuMTUpLCByZ2JhKDE5NywgMjAzLCAyMTEsIDAuMDYpKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTk3LCAyMDMsIDIxMSwgMC4zNCk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIHBhZGRpbmc6IDVweCAxMXB4OwogICAgdGV4dC1zaGFkb3c6IG5vbmU7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xOCk7Cn0KCi5tanItdmlld2VyLXBsYXllcmJhciB7CiAgICBib3JkZXItcmFkaXVzOiAxOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxOTQsIDIwMCwgMjA4LCAwLjE2KTsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCB0b3AgbGVmdCwgcmdiYSg5MCwgMTUwLCAyNTUsIDAuMDgpLCB0cmFuc3BhcmVudCAzNiUpLAogICAgICAgIGxpbmVhci1ncmFkaWVudCgxNjBkZWcsIHJnYmEoMjAsIDI0LCAzMCwgMC45NCksIHJnYmEoMTIsIDE1LCAyMSwgMC45OCkpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSksCiAgICAgICAgMCAxNnB4IDM2cHggcmdiYSgwLCAwLCAwLCAwLjIyKTsKICAgIC8qIG92ZXJmbG93IG11c3Qgc3RheSB2aXNpYmxlIHNvIHRoZSBzZWVrIHJ1bGVyIHRpY2tzL2xhYmVscyAodG9wOi0xNnB4IC8gdG9wOi0zNHB4KQogICAgICAgdGhhdCBhcmUgYWJzb2x1dGVseSBwb3NpdGlvbmVkIGFib3ZlIHRoZSBzZWVrIGJhciBhcmUgbm90IGNsaXBwZWQuICovCiAgICBvdmVyZmxvdzogdmlzaWJsZTsKfQoKLm1qci12aWV3ZXItdG9vbHMgewogICAgYWxpZ24taXRlbXM6IHN0YXJ0OwogICAganVzdGlmeS1jb250ZW50OiBzdHJldGNoOwogICAgZ2FwOiA4cHg7Cn0KCi5tanItdmlld2VyLWhlYWRlciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5tanItdmlld2VyLWhlYWRlcjo6YWZ0ZXIgewogICAgY29udGVudDogIiI7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAxOHB4OwogICAgcmlnaHQ6IDE4cHg7CiAgICB0b3A6IDQ0cHg7CiAgICBoZWlnaHQ6IDFweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgdHJhbnNwYXJlbnQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCksIHRyYW5zcGFyZW50KTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgb3BhY2l0eTogMC43Owp9CgoubWpyLXZpZXdlci1oZWFkZXItbWV0YSB7CiAgICBtaW4taGVpZ2h0OiAzMHB4OwogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDM1KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7Cn0KCi5tanItdmlld2VyLWhlYWRlci10b3AgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHBhZGRpbmctcmlnaHQ6IDg0cHg7CiAgICBwYWRkaW5nLWxlZnQ6IDEycHg7Cn0KCi5tanItdmlld2VyLWhlYWRlci1hcmVhLS1sZWZ0IHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBmbGV4OiAxIDEgMDsKICAgIG1pbi13aWR0aDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5tanItdmlld2VyLWhlYWRlci1hcmVhLS1jZW50ZXIgewogICAgbWluLXdpZHRoOiAwOwogICAgZmxleDogMSAxIGF1dG87Cn0KCi5tanItdmlld2VyLWhlYWRlci1hcmVhLS1yaWdodCB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgZmxleDogMSAxIDA7CiAgICBtaW4td2lkdGg6IDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgoubWpyLXZpZXdlci10aXRsZS13cmFwIHsKICAgIHdpZHRoOiBhdXRvOwogICAgbWluLXdpZHRoOiAwOwogICAgbWF4LXdpZHRoOiBtaW4oMTAwJSwgY2FsYygxMDB2dyAtIDIyMHB4KSk7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiAxMnB4Owp9CgoubWpyLXZpZXdlci10aXRsZS1saW5lIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDZweDsKICAgIG1pbi13aWR0aDogMDsKICAgIGZsZXgtd3JhcDogbm93cmFwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm1qci12aWV3ZXItZmlsZW5hbWUgewogICAgZm9udC1zaXplOiAxM3B4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAxZW07CiAgICBkaXNwbGF5OiBibG9jazsKICAgIG1hcmdpbjogMCBhdXRvOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgoubWpyLXZpZXdlci1iYWRnZXMgewogICAgZ2FwOiA0cHg7Cn0KCi5tanItdmlld2VyLXRpdGxlLWxpbmUgLm1qci12aWV3ZXItYmFkZ2VzIHsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZmxleC13cmFwOiBub3dyYXA7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItdmlld2VyLWhlYWRlci1tZXRhLS1sZWZ0IHsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgIHdpZHRoOiBmaXQtY29udGVudDsKICAgIG1heC13aWR0aDogMTAwJTsKfQoKLm1qci12aWV3ZXItaGVhZGVyLW1ldGEtLWxlZnQ6ZW1wdHkgewogICAgZGlzcGxheTogbm9uZTsKfQoKLm1qci12aWV3ZXItaGVhZGVyLW1ldGEtLXJpZ2h0IHsKICAgIGp1c3RpZnktc2VsZjogZW5kOwogICAgd2lkdGg6IGZpdC1jb250ZW50OwogICAgbWF4LXdpZHRoOiAxMDAlOwp9CgoubWpyLXZpZXdlci1tb2RlLWJ1dHRvbnMgewogICAgZmxleDogMCAwIGF1dG87CiAgICBwYWRkaW5nOiAzcHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpOwp9CgoubWpyLXZpZXdlci10b29scy1kZWNrIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgIGdhcDogOHB4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIG1pbi13aWR0aDogMDsKICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47Cn0KCi5tanItdmlld2VyLXRvb2xzLXBhbmVsIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1pbi13aWR0aDogYXV0bzsKICAgIG1pbi1oZWlnaHQ6IDA7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAyKSksCiAgICAgICAgcmdiYSgxMCwgMTIsIDE2LCAwLjI0KTsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpLAogICAgICAgIDAgNnB4IDE2cHggcmdiYSgwLCAwLCAwLCAwLjEyKTsKICAgIHBhZGRpbmc6IDVweCA2cHg7CiAgICBmbGV4OiAwIDAgYXV0bzsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWw6OmJlZm9yZSB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwIDAgYXV0byAwOwogICAgaGVpZ2h0OiAxcHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHRyYW5zcGFyZW50LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpLCB0cmFuc3BhcmVudCk7CiAgICBvcGFjaXR5OiAwLjc7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtaGVhZCB7CiAgICBkaXNwbGF5OiBub25lOwp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbC1oZWFkaW5nIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAxcHg7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItdmlld2VyLXRvb2xzLXBhbmVsLWV5ZWJyb3cgewogICAgZm9udC1zaXplOiA5cHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMTRlbTsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQ2KTsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtdGl0bGUgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAxZW07CiAgICBjb2xvcjogcmdiYSgyNDgsIDI1MCwgMjUyLCAwLjk2KTsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtYm9keSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGZsZXgtd3JhcDogbm93cmFwOwogICAgZ2FwOiA2cHg7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItdmlld2VyLXRvb2xzLXBhbmVsW2RhdGEtcGFuZWw9ImdyYWRlIl0gLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtYm9keSB7CiAgICBkaXNwbGF5OiBmbGV4Owp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbFtkYXRhLXBhbmVsPSJvdmVybGF5Il0gLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtYm9keSB7CiAgICBkaXNwbGF5OiBmbGV4Owp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbFtkYXRhLXBhbmVsPSJpbnNwZWN0Il0gLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtYm9keSwKLm1qci12aWV3ZXItdG9vbHMtcGFuZWxbZGF0YS1wYW5lbD0iYWN0aW9ucyJdIC5tanItdmlld2VyLXRvb2xzLXBhbmVsLWJvZHksCi5tanItdmlld2VyLXRvb2xzLXBhbmVsW2RhdGEtcGFuZWw9ImluZm8iXSAubWpyLXZpZXdlci10b29scy1wYW5lbC1ib2R5IHsKICAgIGRpc3BsYXk6IGZsZXg7Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwIHsKICAgIHdpZHRoOiBhdXRvOwogICAgbWluLWhlaWdodDogMzBweDsKICAgIHBhZGRpbmc6IDVweCA3cHg7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICBnYXA6IDZweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTk2LCAyMDIsIDIxMCwgMC4xMik7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDM1KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAyKSksCiAgICAgICAgcmdiYSgxMCwgMTIsIDE2LCAwLjE4KTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzKTsKICAgIG1pbi13aWR0aDogZml0LWNvbnRlbnQ7Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwLWxhYmVsIHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzUpOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMTVweDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGZvbnQtc2l6ZTogMTBweDsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbc3R5bGUqPSItLW1qci1ncm91cC1hY2NlbnQiXSAubWpyLXZpZXdlci10b29scy1ncm91cC1sYWJlbCB7CiAgICBjb2xvcjogcmdiYSh2YXIoLS1tanItZ3JvdXAtYWNjZW50KSwgMC45KTsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbc3R5bGUqPSItLW1qci1ncm91cC1hY2NlbnQiXSB7CiAgICBib3JkZXItY29sb3I6IHJnYmEodmFyKC0tbWpyLWdyb3VwLWFjY2VudCksIDAuMzUpOwp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJjaGFubmVsIl0gLm1qci12aWV3ZXItdG9vbHMtZ3JvdXAtbGFiZWwsCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9ImFuYWx5c2lzIl0gLm1qci12aWV3ZXItdG9vbHMtZ3JvdXAtbGFiZWwsCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9Im92ZXJsYXktZ3VpZGVzIl0gLm1qci12aWV3ZXItdG9vbHMtZ3JvdXAtbGFiZWwsCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9Im92ZXJsYXktaW5zcGVjdCJdIC5tanItdmlld2VyLXRvb2xzLWdyb3VwLWxhYmVsIHsKICAgIG1pbi13aWR0aDogNDJweDsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWxbZGF0YS1wYW5lbD0ib3ZlcmxheSJdIC5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9Im92ZXJsYXktZ3VpZGVzIl0gewogICAgZmxleDogMCAwIGF1dG87Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9Im92ZXJsYXktZ3VpZGVzIl0sCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9Im92ZXJsYXktaW5zcGVjdCJdIHsKICAgIGZsZXgtd3JhcDogd3JhcDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9ImNoYW5uZWwiXSwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iZXhwb3N1cmUiXSwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iZ2FtbWEiXSwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iYW5hbHlzaXMiXSwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iY29tcGFyZSJdLAoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJhdWRpby12aXoiXSB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47Cn0KCi5tanItdmlld2VyLXRvb2xzLWFjdGlvbnMsCi5tanItdmlld2VyLXRvb2xzLW1ldGEgewogICAgd2lkdGg6IGF1dG87CiAgICBtaW4taGVpZ2h0OiAzMHB4OwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIHBhZGRpbmc6IDVweCA3cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMyk7Cn0KCi5tanItdmlld2VyLXRvb2xzLWFjdGlvbnMgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICBnYXA6IDZweDsKICAgIGZsZXgtd3JhcDogd3JhcDsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci12aWV3ZXItdG9vbHMtbWV0YSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogNnB4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXZpZXdlci10b29scy1hY3Rpb24tLXByaW1hcnkgewogICAgbWFyZ2luLWxlZnQ6IDA7Cn0KCi5tanItdmlld2VyLXRvb2xzLWFjdGlvbiArIC5tanItdmlld2VyLXRvb2xzLWFjdGlvbiB7CiAgICBtYXJnaW4tbGVmdDogNHB4Owp9CgoubWpyLXZpZXdlci10b29scy1zZWxlY3QgewogICAgbWluLWhlaWdodDogMjRweDsKfQoKLm1qci12aWV3ZXItdG9vbHMtcmFuZ2UtaW5wdXQgewogICAgd2lkdGg6IDkycHggIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtcmFuZ2Ugc3BhbiB7CiAgICBmb250LXNpemU6IDExcHg7Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiAxNDgwcHgpIHsKICAgIC5tanItdmlld2VyLXRvb2xzLWRlY2sgewogICAgICAgIGdhcDogNnB4OwogICAgfQp9CgpAbWVkaWEgKG1heC13aWR0aDogMTIyMHB4KSB7CiAgICAubWpyLXZpZXdlci1oZWFkZXItdG9wIHsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZy1yaWdodDogODRweDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7CiAgICB9CgogICAgLm1qci12aWV3ZXItaGVhZGVyLWFyZWEtLWNlbnRlciwKICAgIC5tanItdmlld2VyLWhlYWRlci1hcmVhLS1yaWdodCB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICB9CgogICAgLm1qci12aWV3ZXItaGVhZGVyLWFyZWEtLWNlbnRlciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZmxleDogMSAxIDEwMCU7CiAgICB9CgogICAgLm1qci12aWV3ZXItaGVhZGVyLWFyZWEtLXJpZ2h0IHsKICAgICAgICBwb3NpdGlvbjogc3RhdGljOwogICAgICAgIHRyYW5zZm9ybTogbm9uZTsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZmxleDogMSAxIDEwMCU7CiAgICB9CgogICAgLm1qci12aWV3ZXItaGVhZGVyLW1ldGEtLXJpZ2h0IHsKICAgICAgICBqdXN0aWZ5LXNlbGY6IGNlbnRlcjsKICAgIH0KCiAgICAubWpyLXZpZXdlci10b29scy1kZWNrIHsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgb3ZlcmZsb3cteDogdmlzaWJsZTsKICAgIH0KCiAgICAubWpyLXZpZXdlci10b29scy1wYW5lbCwKICAgIC5tanItdmlld2VyLXRvb2xzLWFjdGlvbnMsCiAgICAubWpyLXZpZXdlci10b29scy1tZXRhLAogICAgLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtYm9keSB7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgfQoKICAgIC5tanItdmlld2VyLXRvb2xzLW1ldGEgewogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgIH0KfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iY29tcGFyZSJdW2RhdGEtYWN0aXZlPSIxIl0gewogICAgYmFja2dyb3VuZDogcmdiYSh2YXIoLS1tanItZ3JvdXAtYWNjZW50KSwgMC4xKTsKICAgIGJvcmRlci1sZWZ0LWNvbG9yOiByZ2JhKHZhcigtLW1qci1ncm91cC1hY2NlbnQpLCAwLjYpOwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IHJnYmEodmFyKC0tbWpyLWdyb3VwLWFjY2VudCksIDAuMjIpOwp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJjb21wYXJlIl1bZGF0YS1hY3RpdmU9IjEiXSAubWpyLXZpZXdlci10b29scy1zZWxlY3QgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKHZhcigtLW1qci1ncm91cC1hY2NlbnQpLCAwLjYpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHJnYmEodmFyKC0tbWpyLWdyb3VwLWFjY2VudCksIDAuMTgpOwp9CgoubWpyLXZpZXdlci10b29scy1zZWxlY3Q6Zm9jdXMgewogICAgb3V0bGluZTogbm9uZTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCByZ2JhKDY0LCAxNjAsIDI1NSwgMC4yMik7Cn0KCi8qIE5hdGl2ZSBkcm9wZG93bnM6IGhpbnQgZGFyayBVSSBhbmQgc3R5bGUgb3B0aW9ucyB3aGVuIHRoZSBicm93c2VyIGFsbG93cyBpdC4gKi8KLm1qci12aWV3ZXItaGVhZGVyIHsKICAgIGNvbG9yLXNjaGVtZTogZGFyazsKfQoKLm1qci12aWV3ZXItdG9vbHMtc2VsZWN0IHsKICAgIG1pbi1oZWlnaHQ6IDI0cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNDYpICFpbXBvcnRhbnQ7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkyKSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmFkaXVzOiA4cHggIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtc2VsZWN0IG9wdGlvbiB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1tZW51LWJnLCAjMmEyYTJhKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKSk7Cn0KCi5tanItdmlld2VyLXRvb2xzLXJhbmdlLWlucHV0OmZvY3VzIHsKICAgIG91dGxpbmU6IG5vbmU7Cn0KCi5tanItdmlld2VyLXRvb2wtYnRuLS1yZXNldCB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yMikgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbC1idG4gewogICAgbWluLWhlaWdodDogMjRweCAhaW1wb3J0YW50OwogICAgYm9yZGVyLXJhZGl1czogOHB4ICFpbXBvcnRhbnQ7CiAgICBib3JkZXItd2lkdGg6IDFweCAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDE4MGRlZywKICAgICAgICByZ2JhKDIxMCwgMjE0LCAyMjAsIDAuMDc1KSwKICAgICAgICByZ2JhKDIxMCwgMjE0LCAyMjAsIDAuMDI1KQogICAgKSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMTYpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7CiAgICBmb250LXNpemU6IDExcHggIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDAgOHB4ICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLXRvb2wtYnRuOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMjAsIDIyNCwgMjMwLCAwLjI0KSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDE4MGRlZywKICAgICAgICByZ2JhKDIyMCwgMjI0LCAyMzAsIDAuMSksCiAgICAgICAgcmdiYSgyMjAsIDIyNCwgMjMwLCAwLjAzNSkKICAgICkgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iYW5hbHlzaXMiXSAubWpyLXZpZXdlci10b29sLWJ0bltkYXRhLWFjdGl2ZT0iMSJdIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgcmdiYSgyNTUsIDE2NiwgOTIsIDAuMjIpLAogICAgICAgIHJnYmEoMjU1LCAxMTYsIDY0LCAwLjA4KQogICAgKSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMTYwLCA5MiwgMC4zNCkgIWltcG9ydGFudDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjM2LCAyMjQsIDAuOTYpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9ImFuYWx5c2lzIl0gLm1qci12aWV3ZXItdG9vbC1idG5bZGF0YS1hY3RpdmU9IjEiXTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIHJnYmEoMjU1LCAxODAsIDEwOCwgMC4yOCksCiAgICAgICAgcmdiYSgyNTUsIDEyOCwgNzIsIDAuMTQpCiAgICApICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAxODQsIDExNiwgMC40NikgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1ndWlkZXMiXSAubWpyLXZpZXdlci10b29sLWJ0bltkYXRhLWFjdGl2ZT0iMSJdIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgcmdiYSg5MiwgMjE5LCAxODYsIDAuMjIpLAogICAgICAgIHJnYmEoNDQsIDE3MCwgMTQ0LCAwLjA4KQogICAgKSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDkyLCAyMTksIDE4NiwgMC4zNCkgIWltcG9ydGFudDsKICAgIGNvbG9yOiByZ2JhKDIyNCwgMjU1LCAyNDgsIDAuOTYpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9Im92ZXJsYXktZ3VpZGVzIl0gLm1qci12aWV3ZXItdG9vbC1idG5bZGF0YS1hY3RpdmU9IjEiXTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIHJnYmEoMTAyLCAyMzAsIDE5NiwgMC4yOCksCiAgICAgICAgcmdiYSg1MiwgMTgyLCAxNTYsIDAuMTQpCiAgICApICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMTEwLCAyMzYsIDIwMiwgMC40NikgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1pbnNwZWN0Il0gLm1qci12aWV3ZXItdG9vbC1idG5bZGF0YS1hY3RpdmU9IjEiXSB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIHJnYmEoMTI0LCAxNjYsIDI1NSwgMC4yMiksCiAgICAgICAgcmdiYSgxMDksIDg4LCAyMjIsIDAuMDgpCiAgICApICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMTMyLCAxNzAsIDI1NSwgMC4zNikgIWltcG9ydGFudDsKICAgIGNvbG9yOiByZ2JhKDIzNiwgMjQyLCAyNTUsIDAuOTcpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9Im92ZXJsYXktaW5zcGVjdCJdIC5tanItdmlld2VyLXRvb2wtYnRuW2RhdGEtYWN0aXZlPSIxIl06aG92ZXIgewogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDE4MGRlZywKICAgICAgICByZ2JhKDEzOCwgMTgwLCAyNTUsIDAuMyksCiAgICAgICAgcmdiYSgxMjQsIDEwMCwgMjMyLCAwLjE0KQogICAgKSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE0OCwgMTg4LCAyNTUsIDAuNDgpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLXRvb2wtYnRuW2RhdGEtYWN0aXZlPSIxIl0gewogICAgZmlsdGVyOiBzYXR1cmF0ZSgxLjEyKSBicmlnaHRuZXNzKDEuMDQpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSwKICAgICAgICAwIDAgMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KSwKICAgICAgICAwIDhweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xNikgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItaGVscCB7CiAgICBib3JkZXItcmFkaXVzOiAxNHB4ICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDEzLCAxNywgMjIsIDAuOTYpLCByZ2JhKDgsIDExLCAxNiwgMC45OCkpICFpbXBvcnRhbnQ7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiAwIDE4cHggMzRweCByZ2JhKDAsIDAsIDAsIDAuMzQpICFpbXBvcnRhbnQ7Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiAxMjIwcHgpIHsKICAgIC5tanItdmlld2VyLXRvb2xzIHsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgIH0KCiAgICAubWpyLXZpZXdlci10b29scy1hY3Rpb25zIHsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICB9CgogICAgLm1qci12aWV3ZXItaGVhZGVyLXRvcCB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICAgICAganVzdGlmeS1pdGVtczogY2VudGVyOwogICAgfQoKICAgIC5tanItdmlld2VyLWhlYWRlci1hcmVhLS1sZWZ0LAogICAgLm1qci12aWV3ZXItaGVhZGVyLWFyZWEtLWNlbnRlciwKICAgIC5tanItdmlld2VyLWhlYWRlci1hcmVhLS1yaWdodCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICB9CgogICAgLm1qci12aWV3ZXItaGVhZGVyLW1ldGEtLWxlZnQsCiAgICAubWpyLXZpZXdlci1oZWFkZXItbWV0YS0tcmlnaHQgewogICAgICAgIGp1c3RpZnktc2VsZjogY2VudGVyOwogICAgfQoKICAgIC5tanItdmlld2VyLXRvb2xzLWJvZHkgewogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjIwcHgsIDFmcikpOwogICAgfQp9CgovKiA9PT09PT09PT09IEN1c3RvbSBWaWRlbyBDb250cm9scyAobm8gbmF0aXZlIGJhcikgPT09PT09PT09PSAqLwoubWpyLXZpZGVvLWhvc3QgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDEycHg7CiAgICByaWdodDogMTJweDsKICAgIGJvdHRvbTogMTJweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nOiA4cHggMTBweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC42KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCk7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpOwogICAgb3BhY2l0eTogMDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBlYXNlOwogICAgei1pbmRleDogNTsKfQoKLm1qci12aWRlby1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItdmlkZW8tcm93LS10b3AgewogICAgZ2FwOiAxMnB4OwogICAgZGlzcGxheTogZ3JpZDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gYXV0byAxZnIgYXV0byBhdXRvOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1yb3ctLXRvcCB7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gYXV0byAxZnIgYXV0byBhdXRvOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS1wcmV2aWV3IC5tanItdmlkZW8tcm93LS10b3AgewogICAgZGlzcGxheTogZmxleDsKfQoKLm1qci12aWRlby1yb3ctLWJvdHRvbSB7CiAgICBnYXA6IDhweDsKfQoKLm1qci12aWRlby1ncm91cCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDZweDsKICAgIG1pbi13aWR0aDogMDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODUpOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItdmlkZW8tbnVtIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSk7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBwYWRkaW5nOiA1cHggOHB4OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBvdXRsaW5lOiBub25lOwp9CgoubWpyLXZpZGVvLW51bTpmb2N1cyB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zOCk7Cn0KCi5tanItdmlkZW8tbnVtLS1mcHMuaXMtb3ZlcnJpZGRlbiB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjQ1LCAxNTgsIDExLCAwLjgyKTsKICAgIGNvbG9yOiAjZmJiZjI0OwogICAgYmFja2dyb3VuZDogcmdiYSgyNDUsIDE1OCwgMTEsIDAuMTQpOwp9CgoubWpyLXZpZGVvLW51bS0tZnBzLmlzLW92ZXJyaWRkZW46Zm9jdXMgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1MSwgMTkxLCAzNiwgMC45Nik7Cn0KCi5tanItdmlkZW8tbnVtLS1zcGVlZCB7CiAgICBjb2xvci1zY2hlbWU6IGRhcms7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNjIpOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSk7Cn0KCi5tanItdmlkZW8tbnVtLS1zcGVlZCBvcHRpb24gewogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSk7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7Cn0KCi5tanItdmlkZW8tZnJhbWUgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKICAgIG1pbi13aWR0aDogNTJweDsKICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItdmlkZW8tZnJhbWUuaXMtc3RlcCB7CiAgICBjb2xvcjogI2ZmZDI0ZDsKfQoKLm1qci12aWRlby1ib3R0b20gewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIG1pbi13aWR0aDogMDsKICAgIGZsZXg6IDE7Cn0KCi5tanItdmlkZW8tYm90dG9tLS1sZWZ0IHsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKfQoKLm1qci12aWRlby1ib3R0b20tLXJpZ2h0IHsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7Cn0KCi5tanItdmlkZW8tdHJhbnNwb3J0IHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICBmbGV4OiAwIDAgYXV0bzsKfQoKLyogU2hvdyBjb250cm9scyBvbiBob3Zlci9mb2N1cyAodmlld2VyKS4gKi8KLm1qci12aWRlby1ob3N0OmhvdmVyIC5tanItdmlkZW8tY29udHJvbHMsCi5tanItdmlkZW8tY29udHJvbHM6Zm9jdXMtd2l0aGluIHsKICAgIG9wYWNpdHk6IDE7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKfQoKLyogUHJldmlldzoga2VlcCBjb250cm9scyB2aXNpYmxlIGJlY2F1c2UgdGhlIGFyZWEgaXMgc21hbGwuICovCi5tanItdmlkZW8tY29udHJvbHMtLXByZXZpZXcgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogYXV0bzsKICAgIHJpZ2h0OiAxMHB4OwogICAgdG9wOiBhdXRvOwogICAgYm90dG9tOiAxMHB4OwogICAgb3BhY2l0eTogMTsKICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXI6IG5vbmU7CiAgICBwYWRkaW5nOiAwOwogICAgZGlzcGxheTogYmxvY2s7CiAgICB3aWR0aDogYXV0bzsKICAgIGhlaWdodDogYXV0bzsKICAgIGJhY2tkcm9wLWZpbHRlcjogbm9uZTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBub25lOwp9CgoubWpyLXZpZGVvLXByZXZpZXctYnRuIHsKICAgIHdpZHRoOiAzOHB4OwogICAgaGVpZ2h0OiAzOHB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjIpOwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjQyKTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTIpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Cn0KCi5tanItdmlkZW8tcHJldmlldy1idG46aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjUpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjgpOwp9CgoubWpyLXZpZGVvLXByZXZpZXctYnRuIC5waSB7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLm1qci12aWRlby1idG4gewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xOCk7CiAgICBjb2xvcjogI2ZmZjsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgbGluZS1oZWlnaHQ6IDE7Cn0KCi5tanItdmlkZW8tYnRuOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCk7Cn0KCi5tanItdmlkZW8tYnRuLmlzLW9uIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoNjQsIDE2MCwgMjU1LCAwLjI1KTsKICAgIGJvcmRlci1jb2xvcjogcmdiYSg2NCwgMTYwLCAyNTUsIDAuNTUpOwp9CgoubWpyLXZpZGVvLWJ0bi0taW4gewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDcwLCAyNTUsIDEyMCwgMC41NSk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDcwLCAyNTUsIDEyMCwgMC4xMik7Cn0KCi5tanItdmlkZW8tYnRuLS1pbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDcwLCAyNTUsIDEyMCwgMC4xOCk7Cn0KCi5tanItdmlkZW8tYnRuLS1vdXQgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgNzAsIDcwLCAwLjU1KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCA3MCwgNzAsIDAuMSk7Cn0KCi5tanItdmlkZW8tYnRuLS1vdXQ6aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDcwLCA3MCwgMC4xNik7Cn0KCi5tanItdmlkZW8tdGltZSB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgbWluLXdpZHRoOiA5MnB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItdmlkZW8tdGltZWdyb3VwIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICBnYXA6IDEwcHg7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItdmlkZW8tcmFuZ2UtY291bnQgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6IHJnYmEoNjQsIDE5MCwgMjU1LCAwLjkyKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoNjQsIDE5MCwgMjU1LCAwLjEpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSg2NCwgMTkwLCAyNTUsIDAuMjUpOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBwYWRkaW5nOiAxcHggOHB4OwogICAgbGluZS1oZWlnaHQ6IDE2cHg7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItdmlkZW8tcmFuZ2UgewogICAgYWNjZW50LWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7Cn0KCi5tanItdmlkZW8tcmFuZ2UtLXNlZWsgewogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogODBweDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDE7CiAgICAvKiBXZSBkcmF3IG91ciBvd24gcGxheWhlYWQvbWFya2VyczsgaGlkZSB0aGUgbmF0aXZlIHRodW1iICJkb3QiLiAqLwogICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgYXBwZWFyYW5jZTogbm9uZTsKfQoKLm1qci12aWRlby1yYW5nZS0tc2Vlazo6LXdlYmtpdC1zbGlkZXItdGh1bWIgewogICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIHdpZHRoOiAwOwogICAgaGVpZ2h0OiAwOwogICAgYm9yZGVyOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3gtc2hhZG93OiBub25lOwp9CgoubWpyLXZpZGVvLXJhbmdlLS1zZWVrOjotbW96LXJhbmdlLXRodW1iIHsKICAgIHdpZHRoOiAwOwogICAgaGVpZ2h0OiAwOwogICAgYm9yZGVyOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3gtc2hhZG93OiBub25lOwp9CgoubWpyLXZpZGVvLXNlZWstd3JhcCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtaW4td2lkdGg6IDgwcHg7CiAgICBmbGV4OiAxOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7Cn0KCi5tanItdmlkZW8tc2Vlay16b25lcyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICB0b3A6IDUwJTsKICAgIGhlaWdodDogMTBweDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgei1pbmRleDogMjsKfQoKLm1qci12aWRlby1zZWVrLXpvbmUgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAwOwogICAgYm90dG9tOiAwOwp9CgovKiAwLi5JbjogdHJpbW1lZC1vdXQgcmFuZ2UuICovCi5tanItdmlkZW8tc2Vlay16b25lLS1sZWZ0VHJpbSB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgNzAsIDcwLCAwLjE4KTsKfQoKLyogSW4uLk91dDogc2VsZWN0ZWQgcGxheWJhY2sgcmFuZ2UgaGlnaGxpZ2h0LiAqLwoubWpyLXZpZGVvLXNlZWstem9uZS0tc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogcmdiYSg2NCwgMTkwLCAyNTUsIDAuNTUpOwp9CgoubWpyLXZpZGVvLXNlZWstem9uZXMuaXMtZnVsbHJhbmdlIC5tanItdmlkZW8tc2Vlay16b25lLS1zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOwp9CgovKiBPdXQuLkVuZDogc2hvdyBvdXQtb2YtcmFuZ2UgZnJhbWVzIGFzIGEgZGlmZmVyZW50IGNvbG9yLiAqLwoubWpyLXZpZGVvLXNlZWstem9uZS0tcmlnaHRUcmltIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCA3MCwgNzAsIDAuMik7Cn0KCi5tanItdmlkZW8tc2Vlay1vdmVybGF5IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIHRvcDogNTAlOwogICAgaGVpZ2h0OiAwOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAzOwp9CgoubWpyLXZpZGVvLXNlZWstaGFuZGxlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNTAlOwogICAgd2lkdGg6IDE2cHg7CiAgICBoZWlnaHQ6IDMycHg7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICAgIGN1cnNvcjogZXctcmVzaXplOwogICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICB0b3VjaC1hY3Rpb246IG5vbmU7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIHotaW5kZXg6IDQ7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKICAgIGJveC1zaGFkb3c6IDAgNHB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjM1KTsKfQoKLm1qci12aWRlby1zZWVrLWhhbmRsZTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNCk7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLWluOjphZnRlciwKLm1qci12aWRlby1zZWVrLWhhbmRsZS0tb3V0OjphZnRlciB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDUwJTsKICAgIHRvcDogNTAlOwogICAgd2lkdGg6IDJweDsKICAgIGhlaWdodDogMThweDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDcwLCA3MCwgMC45NSk7CiAgICBib3JkZXItcmFkaXVzOiAycHg7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLWluOjphZnRlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDcwLCAyNTUsIDEyMCwgMC45NSk7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLWluOjpiZWZvcmUsCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLW91dDo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogNTAlOwogICAgd2lkdGg6IDA7CiAgICBoZWlnaHQ6IDA7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLWluOjpiZWZvcmUgewogICAgdG9wOiA0cHg7CiAgICBib3JkZXItbGVmdDogNXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYm9yZGVyLXJpZ2h0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItYm90dG9tOiA2cHggc29saWQgcmdiYSg3MCwgMjU1LCAxMjAsIDAuOTUpOwp9CgoubWpyLXZpZGVvLXNlZWstaGFuZGxlLS1vdXQ6OmJlZm9yZSB7CiAgICBib3R0b206IDRweDsKICAgIGJvcmRlci1sZWZ0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItcmlnaHQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJvcmRlci10b3A6IDZweCBzb2xpZCByZ2JhKDI1NSwgNzAsIDcwLCAwLjk1KTsKfQoKLm1qci12aWRlby1zZWVrLXRpY2tzIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIHRvcDogLTE2cHg7CiAgICBoZWlnaHQ6IDEycHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgb3BhY2l0eTogMC45Owp9CgoubWpyLXZpZGVvLXNlZWstbGFiZWxzIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIHRvcDogLTM0cHg7CiAgICBoZWlnaHQ6IDE0cHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGxpbmUtaGVpZ2h0OiAxNHB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43Mik7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjU1KTsKfQoKLm1qci12aWRlby1zZWVrLWxhYmVsIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItdmlkZW8tc2Vlay1wbGF5aGVhZC1sYWJlbCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDEycHg7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICBwYWRkaW5nOiAxcHggNnB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNTUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTIpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgbGluZS1oZWlnaHQ6IDE0cHg7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5tanItdmlkZW8tc2Vlay1tYXJrIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogLTEwcHg7CiAgICB3aWR0aDogMTRweDsKICAgIGhlaWdodDogMjBweDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgY3Vyc29yOiBldy1yZXNpemU7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIHRvdWNoLWFjdGlvbjogbm9uZTsKICAgIHotaW5kZXg6IDQ7CiAgICAtLW1qci1tYXJrLWNvbG9yOiByZ2JhKDI1NSwgNzAsIDcwLCAwLjk1KTsKfQoKLm1qci12aWRlby1zZWVrLW1hcmstLWluIHsKICAgIC0tbWpyLW1hcmstY29sb3I6IHJnYmEoNzAsIDI1NSwgMTIwLCAwLjk1KTsKfQoKLm1qci12aWRlby1zZWVrLW1hcms6OmJlZm9yZSB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDUwJTsKICAgIHRvcDogMDsKICAgIGJvdHRvbTogMDsKICAgIHdpZHRoOiAycHg7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItbWFyay1jb2xvcik7CiAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgwLCAwLCAwLCAwLjM1KTsKfQoKLm1qci12aWRlby1zZWVrLW1hcms6OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAtNXB4OwogICAgbGVmdDogNTAlOwogICAgd2lkdGg6IDA7CiAgICBoZWlnaHQ6IDA7CiAgICBib3JkZXItbGVmdDogNXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYm9yZGVyLXJpZ2h0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItYm90dG9tOiA2cHggc29saWQgdmFyKC0tbWpyLW1hcmstY29sb3IpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwp9CgoubWpyLXZpZGVvLXNlZWstbWFyay0taW46OmFmdGVyIHsKICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHZhcigtLW1qci1tYXJrLWNvbG9yKTsKfQoKLm1qci12aWRlby1zZWVrLW1hcmstLW91dDo6YWZ0ZXIgewogICAgdG9wOiBhdXRvOwogICAgYm90dG9tOiAtNXB4OwogICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKICAgIGJvcmRlci10b3A6IDZweCBzb2xpZCB2YXIoLS1tanItbWFyay1jb2xvcik7Cn0KCi5tanItdmlkZW8tc2Vlay1wbGF5aGVhZCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IC0xMnB4OwogICAgd2lkdGg6IDJweDsKICAgIGhlaWdodDogMjRweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyMDAsIDcwLCAwLjk1KTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCByZ2JhKDAsIDAsIDAsIDAuMzUpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xcHgpOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgewogICAgcG9zaXRpb246IHN0YXRpYzsKICAgIGxlZnQ6IGF1dG87CiAgICByaWdodDogYXV0bzsKICAgIGJvdHRvbTogYXV0bzsKICAgIG9wYWNpdHk6IDE7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIHdpZHRoOiAxMDAlOwogICAgbWF4LXdpZHRoOiBub25lOwogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMTRweDsKICAgIGJvcmRlci1yYWRpdXM6IDE4cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMTIpOwogICAgYmFja2dyb3VuZDoKICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IHRvcCBsZWZ0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDMpLCB0cmFuc3BhcmVudCAzNCUpLAogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMTk4LCAyMDMsIDIxMCwgMC4wMjUpLCByZ2JhKDE5OCwgMjAzLCAyMTAsIDAuMDA4KSksCiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE2NWRlZywgcmdiYSgxOCwgMjIsIDI4LCAwLjgyKSwgcmdiYSgxMiwgMTUsIDIxLCAwLjkpKTsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpLAogICAgICAgIDAgMTBweCAzMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCk7CiAgICBiYWNrZHJvcC1maWx0ZXI6IG5vbmU7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogbm9uZTsKICAgIGdhcDogMTJweDsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYnRuIHsKICAgIG1pbi1oZWlnaHQ6IDM4cHg7CiAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIxMCwgMjE0LCAyMjAsIDAuMDcpLCByZ2JhKDIxMCwgMjE0LCAyMjAsIDAuMDIpKTsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgxOTQsIDIwMSwgMjA4LCAwLjE4KTsKICAgIGJvcmRlci13aWR0aDogMXB4OwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwogICAgdHJhbnNpdGlvbjoKICAgICAgICB0cmFuc2Zvcm0gMC4xMnMgZWFzZSwKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yIDAuMTJzIGVhc2UsCiAgICAgICAgYm9yZGVyLWNvbG9yIDAuMTJzIGVhc2UsCiAgICAgICAgYm94LXNoYWRvdyAwLjEycyBlYXNlOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1idG46aG92ZXIgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIyMCwgMjI0LCAyMzAsIDAuMjYpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCksCiAgICAgICAgMCA4cHggMThweCByZ2JhKDAsIDAsIDAsIDAuMTQpOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1idG4uaXMtb24gewogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgxMDAsIDE3MCwgMjU1LCAwLjIpLCByZ2JhKDEwMCwgMTcwLCAyNTUsIDAuMDgpKTsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgxMjAsIDE4NiwgMjU1LCAwLjQyKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCByZ2JhKDEyMCwgMTg2LCAyNTUsIDAuMTIpIGluc2V0Owp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1idG4gLnBpIHsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1iYXItaGVhZCwKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLWFjdGlvbnMgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDFmcikgYXV0byBtaW5tYXgoMCwgMWZyKTsKICAgIGdhcDogMTJweDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1zdGF0dXMsCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1zaWRlIHsKICAgIG1pbi13aWR0aDogMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgZmxleC13cmFwOiB3cmFwOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1iYXItY2VudGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1oZWFkIHsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDFmcik7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1zaWRlLS1yaWdodCB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1iYXItdGltZWxpbmUgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byBtaW5tYXgoMCwgMWZyKSBhdXRvOwogICAgZ2FwOiAxMnB4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyLm1qci12aWRlby1jb250cm9scy0tYXVkaW8gLm1qci12aWRlby1iYXItdGltZWxpbmUgewogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKSBhdXRvIGF1dG87Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhci5tanItdmlkZW8tY29udHJvbHMtLWF1ZGlvIC5tanItdmlkZW8tc2Vlay13cmFwIHsKICAgIGdyaWQtY29sdW1uOiAxIC8gLTE7CiAgICBncmlkLXJvdzogMTsKICAgIHdpZHRoOiAxMDAlOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIubWpyLXZpZGVvLWNvbnRyb2xzLS1hdWRpbyAubWpyLXZpZGVvLWdyb3VwLS1pbiwKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyLm1qci12aWRlby1jb250cm9scy0tYXVkaW8gLm1qci12aWRlby1ncm91cC0tb3V0IHsKICAgIGdyaWQtcm93OiAyOwogICAgd2lkdGg6IG1heC1jb250ZW50OwogICAgbWF4LXdpZHRoOiAxMDAlOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1tZWRpYS1iYWRnZSB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIG1pbi1oZWlnaHQ6IDI4cHg7CiAgICBwYWRkaW5nOiAwIDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzgsIDIyNCwgMTk2LCAwLjEyKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNzgsIDIyNCwgMTk2LCAwLjIyKTsKICAgIGNvbG9yOiByZ2JhKDIyMCwgMjQ3LCAyNDEsIDAuOTYpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby10aW1lZ3JvdXAgewogICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nOiA1cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0NSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby10aW1lLAoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1mcmFtZSB7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgY29sb3I6IHJnYmEoMjI4LCAyMzAsIDIzNCwgMC45Mik7CiAgICB0ZXh0LXNoYWRvdzogbm9uZTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tZnJhbWUgewogICAgbWluLXdpZHRoOiA5NHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgcGFkZGluZzogNXB4IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNDUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tdGltZSB7CiAgICBtaW4td2lkdGg6IGF1dG87CiAgICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1yYW5nZS0tc2VlayB7CiAgICBoZWlnaHQ6IDIycHg7CiAgICBhY2NlbnQtY29sb3I6IHJnYmEoMjE0LCAyMTgsIDIyNCwgMC45Mik7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXJhbmdlLWNvdW50IHsKICAgIGNvbG9yOiByZ2JhKDIyMiwgMjI1LCAyMzAsIDAuOTUpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE5NCwgMjAxLCAyMDksIDAuMjYpOwogICAgYm9yZGVyLXdpZHRoOiAwLjhweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTk0LCAyMDEsIDIwOSwgMC4wOCk7CiAgICB0ZXh0LXNoYWRvdzogbm9uZTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tZ3JvdXAgewogICAgbWluLWhlaWdodDogMzZweDsKICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzNSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1ncm91cC0tYWRqdXN0LWxlZnQsCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWdyb3VwLS1hZGp1c3QtcmlnaHQsCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWdyb3VwLS1zcGVlZCB7CiAgICBnYXA6IDhweDsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tbnVtIHsKICAgIG1pbi1oZWlnaHQ6IDM0cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYmFja2dyb3VuZDogcmdiYSg5LCAxMiwgMTYsIDAuNTUpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXRyYW5zcG9ydCB7CiAgICBnYXA6IDEwcHg7CiAgICBwYWRkaW5nOiA2cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNDUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYnRuLS1wbGF5IHsKICAgIG1pbi13aWR0aDogODhweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXNlZWstd3JhcCB7CiAgICBtaW4taGVpZ2h0OiA0NHB4Owp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1zZWVrLXpvbmVzIHsKICAgIGhlaWdodDogMTJweDsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tc2Vlay1oYW5kbGUgewogICAgd2lkdGg6IDE4cHg7CiAgICBoZWlnaHQ6IDM0cHg7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXZvbHVtZS13cmFwIHsKICAgIHBhZGRpbmc6IDAgNHB4Owp9CgoubWpyLXZpZGVvLXJhbmdlLS12b2x1bWUgewogICAgd2lkdGg6IDkwcHg7Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiA5ODBweCkgewogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLWhlYWQsCiAgICAubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1iYXItYWN0aW9ucywKICAgIC5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci10aW1lbGluZSB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICB9CgogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLWNlbnRlciwKICAgIC5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1zaWRlLS1yaWdodCB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICB9CgogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLXRpbWVsaW5lIHsKICAgICAgICBnYXA6IDEwcHg7CiAgICB9CgogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tdHJhbnNwb3J0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTZweDsKICAgIH0KfQoKLyogPT09PT09PT09PSBDb250ZXh0IE1lbnUgQ29tcG9uZW50ID09PT09PT09PT0gKi8KLm1qci1jb250ZXh0LW1lbnUgewogICAgcG9zaXRpb246IGZpeGVkOwogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktbWVudS1iZyk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpOwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICBtaW4td2lkdGg6IDIwMHB4OwogICAgLyogQWJvdmUgdmlld2VyIG92ZXJsYXkgKDEwMDAxKSBhbmQgTUZWIGRpYWxvZyAoMTAwMDApICovCiAgICB6LWluZGV4OiAxMDAwMjsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBwYWRkaW5nOiA0cHggMDsKICAgIGFuaW1hdGlvbjogbWpyLWNvbnRleHQtbWVudS1pbiAwLjE1cyBlYXNlLW91dDsKfQoKLm1qci1jb250ZXh0LW1lbnUsCi5tanItY29udGV4dC1tZW51ICogewogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKQGtleWZyYW1lcyBtanItY29udGV4dC1tZW51LWluIHsKICAgIGZyb20gewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01cHgpOwogICAgfQogICAgdG8gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgfQp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtIHsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICBwYWRkaW5nOiA4cHggMTRweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgd2lkdGg6IDEwMCU7CiAgICBib3JkZXI6IDA7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3gtc2hhZG93OiBub25lOwogICAgbWFyZ2luOiAwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgIGxldHRlci1zcGFjaW5nOiBub3JtYWw7CiAgICBsaW5lLWhlaWdodDogMS4zNTsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXM7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbTo6LW1vei1mb2N1cy1pbm5lciB7CiAgICBib3JkZXI6IDA7CiAgICBwYWRkaW5nOiAwOwp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtOmhvdmVyLAoubWpyLWNvbnRleHQtbWVudS1pdGVtOmZvY3VzLXZpc2libGUgewogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktaW5wdXQtYmcpOwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLWdyYXBoLW1hcCB7CiAgICBjb2xvcjogI2Y1YzU0MjsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLXJlbmFtZSB7CiAgICBjb2xvcjogIzVkYTlmZjsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLWRlbGV0ZSB7CiAgICBjb2xvcjogI2ZmNWY1ZjsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLWZsb2F0aW5nLXZpZXdlciB7CiAgICBjb2xvcjogIzVmZDM4ZDsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLWdyYXBoLW1hcDpob3ZlciwKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLWdyYXBoLW1hcDpmb2N1cy12aXNpYmxlIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjQ1LCAxOTcsIDY2LCAwLjE0KTsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLXJlbmFtZTpob3ZlciwKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLXJlbmFtZTpmb2N1cy12aXNpYmxlIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoOTMsIDE2OSwgMjU1LCAwLjE0KTsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLWRlbGV0ZTpob3ZlciwKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLWRlbGV0ZTpmb2N1cy12aXNpYmxlIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCA5NSwgOTUsIDAuMTQpOwp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtLmlzLXRvbmUtZmxvYXRpbmctdmlld2VyOmhvdmVyLAoubWpyLWNvbnRleHQtbWVudS1pdGVtLmlzLXRvbmUtZmxvYXRpbmctdmlld2VyOmZvY3VzLXZpc2libGUgewogICAgYmFja2dyb3VuZDogcmdiYSg5NSwgMjExLCAxNDEsIDAuMTQpOwp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtLmlzLWRpc2FibGVkIHsKICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIG9wYWNpdHk6IDAuNDU7Cn0KCi5tanItY29udGV4dC1tZW51LWl0ZW0uaXMtZGlzYWJsZWQ6aG92ZXIsCi5tanItY29udGV4dC1tZW51LWl0ZW0uaXMtZGlzYWJsZWQ6Zm9jdXMtdmlzaWJsZSB7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKfQoKLm1qci1jb250ZXh0LW1lbnUtc2VwYXJhdG9yIHsKICAgIGhlaWdodDogMXB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tYm9yZGVyLWNvbG9yKTsKICAgIG1hcmdpbjogNHB4IDA7Cn0KCi5tanItY29udGV4dC1tZW51LWl0ZW0tbGVmdCwKLm1qci1jb250ZXh0LW1lbnUtaXRlbS1yaWdodCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7Cn0KCi5tanItY29udGV4dC1tZW51LWl0ZW0tbGVmdCB7CiAgICBmbGV4OiAxIDEgYXV0bzsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS1yaWdodCB7CiAgICBmbGV4OiAwIDAgYXV0bzsKICAgIG1hcmdpbi1sZWZ0OiAxNnB4Owp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtLWxlZnQgaSB7CiAgICB3aWR0aDogMTZweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG9wYWNpdHk6IDAuODI7Cn0KCi5tanItY29udGV4dC1tZW51LWhpbnQgewogICAgb3BhY2l0eTogMC41ODsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItY29udGV4dC1tZW51LXN1Ym1lbnUtYXJyb3cgewogICAgb3BhY2l0eTogMC43MjsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgoubWpyLWFkZC10by1jb2xsZWN0aW9uLW1lbnUgewogICAgbWluLXdpZHRoOiAyNjBweDsKICAgIG1heC13aWR0aDogbWluKDM2MHB4LCBjYWxjKDEwMHZ3IC0gMTZweCkpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEycHgpOwp9CgoubWpyLWNvbnRleHQtbWVudS10aXRsZSB7CiAgICBwYWRkaW5nOiA4cHggMTRweCAxMHB4OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGNvbG9yOiB2YXIoLS1mZy1jb2xvcik7CiAgICBvcGFjaXR5OiAwLjkyOwp9CgoubWpyLWNvbnRleHQtbWVudS1ub3RlIHsKICAgIHBhZGRpbmc6IDEwcHggMTRweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZykgNzIlLCB2YXIoLS1tanItbXV0ZWQpKTsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ1Owp9CgoubWpyLWdyaWQtcG9wb3ZlciwKLm1qci12aWV3ZXItcG9wb3ZlciB7CiAgICBtaW4td2lkdGg6IDI1MHB4OwogICAgbWF4LXdpZHRoOiBtaW4oMzYwcHgsIGNhbGMoMTAwdncgLSAxNnB4KSk7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItc20pOwogICAgYm94LXNoYWRvdzogMCAxMnB4IDI4cHggcmdiYSgwLCAwLCAwLCAwLjM1KTsKfQoKQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHsKICAgIC5tanItdmlld2VyLW92ZXJsYXkgKiwKICAgIC5tanItdmlkZW8tY29udHJvbHMsCiAgICAubWpyLWNvbnRleHQtbWVudSB7CiAgICAgICAgYW5pbWF0aW9uOiBub25lICFpbXBvcnRhbnQ7CiAgICAgICAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50OwogICAgICAgIHNjcm9sbC1iZWhhdmlvcjogYXV0byAhaW1wb3J0YW50OwogICAgfQp9CgovKiBIaWRlIGhlYWRlciAodG9vbGJhcikgd2hlbiB2aWV3ZXIgb3ZlcmxheSBpcyBpbiBmdWxsc2NyZWVuICovCi5tanItdmlld2VyLW92ZXJsYXk6ZnVsbHNjcmVlbiAubWpyLXZpZXdlci1oZWFkZXIgewogICAgZGlzcGxheTogbm9uZTsKfQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgTWFqb29yIEZsb2F0aW5nIFZpZXdlciAoTUZWKSAtIHBvcnRhbGVkIHRvIGRvY3VtZW50LmJvZHkKICAgUmVkZWNsYXJlcyBDU1MgdmFyaWFibGVzIHNvIHRoZSBwYW5lbCB3b3JrcyBvdXRzaWRlIC5tanItYXNzZXRzLW1hbmFnZXIKICAgKHNhbWUgcGF0dGVybiBhcyAubWpyLXBvcG92ZXIpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgoubWpyLW1mdiB7CiAgICAtLW1qci1zdXJmYWNlLTA6IHZhcigtLWNvbnRlbnQtYmcsICMxZTFlMWUpOwogICAgLS1tanItc3VyZmFjZS0xOiB2YXIoLS1jb21meS1tZW51LWJnLCAjMmEyYTJhKTsKICAgIC0tbWpyLXN1cmZhY2UtMjogdmFyKC0tY29tZnktbWVudS1zZWNvbmRhcnktYmcsICMzMzMpOwogICAgLS1tanItYm9yZGVyOiB2YXIoLS1ib3JkZXItY29sb3IsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwogICAgLS1tanItbXV0ZWQ6IHZhcigtLWRlc2NyaXAtdGV4dCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSk7CiAgICAtLW1qci1hY2NlbnQ6IHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZik7CiAgICAtLW1qci1zdGF0dXMtc3VjY2VzczogdmFyKC0tY29tZnktc3RhdHVzLXN1Y2Nlc3MsICM0Y2FmNTApOwoKICAgIGZvbnQtZmFtaWx5OiB2YXIoCiAgICAgICAgLS1jb21meS1mb250LAogICAgICAgIHVpLXNhbnMtc2VyaWYsCiAgICAgICAgc3lzdGVtLXVpLAogICAgICAgIC1hcHBsZS1zeXN0ZW0sCiAgICAgICAgIlNlZ29lIFVJIiwKICAgICAgICBSb2JvdG8sCiAgICAgICAgQXJpYWwsCiAgICAgICAgc2Fucy1zZXJpZgogICAgKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsIHZhcigtLWlucHV0LXRleHQsICNkZGQpKTsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CgogICAgLyogVmlzdWFsIGNocm9tZSAqLwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgMCA4cHggMzJweCByZ2JhKDAsIDAsIDAsIDAuNTUpLAogICAgICAgIDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMyk7Cn0KCi5tanItbWZ2ICogewogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKaHRtbC5tanItbWZ2LXBvcG91dC1kb2N1bWVudCB7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIHJhZGlhbC1ncmFkaWVudCgKICAgICAgICAgICAgMTIwMHB4IDQyMHB4IGF0IDUwJSAwJSwKICAgICAgICAgICAgY29sb3ItbWl4KAogICAgICAgICAgICAgICAgaW4gc3JnYiwKICAgICAgICAgICAgICAgIHZhcigtLXByaW1hcnktYmFja2dyb3VuZCwgdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKSkgMTAlLAogICAgICAgICAgICAgICAgdHJhbnNwYXJlbnQKICAgICAgICAgICAgKSwKICAgICAgICAgICAgdHJhbnNwYXJlbnQgNjIlCiAgICAgICAgKSwKICAgICAgICBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAgIDE4MGRlZywKICAgICAgICAgICAgY29sb3ItbWl4KAogICAgICAgICAgICAgICAgaW4gc3JnYiwKICAgICAgICAgICAgICAgIHZhcigtLWludGVyZmFjZS1wYW5lbC1zdXJmYWNlLCB2YXIoLS1jb250ZW50LWJnLCAjMTYxOTFmKSkgODIlLAogICAgICAgICAgICAgICAgIzAwMCAxOCUKICAgICAgICAgICAgKSwKICAgICAgICAgICAgY29sb3ItbWl4KAogICAgICAgICAgICAgICAgaW4gc3JnYiwKICAgICAgICAgICAgICAgIHZhcigtLWludGVyZmFjZS1tZW51LXN1cmZhY2UsIHZhcigtLWNvbWZ5LW1lbnUtYmcsICMxZjIyMjcpKSA4NCUsCiAgICAgICAgICAgICAgICAjMDAwIDE2JQogICAgICAgICAgICApCiAgICAgICAgKTsKfQoKYm9keS5tanItbWZ2LXBvcG91dC1ib2R5IHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9CgojbWpyLW1mdi1wb3BvdXQtcm9vdCwKLm1qci1tZnYtcG9wb3V0LXJvb3QgewogICAgaXNvbGF0aW9uOiBpc29sYXRlOwp9CgovKiAtLSBIZWFkZXIgKGRyYWcgaGFuZGxlKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoubWpyLW1mdi1oZWFkZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEpOwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgY3Vyc29yOiBtb3ZlOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICBmbGV4LXNocmluazogMDsKICAgIGdhcDogNnB4OwogICAgbWluLWhlaWdodDogMzRweDsKfQoKLm1qci1tZnYtaGVhZGVyLXRpdGxlIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBvcGFjaXR5OiAwLjc4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgZmxleDogMTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjI4cHg7Cn0KCi8qIC0tIFRvb2xiYXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLm1qci1tZnYtdG9vbGJhciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNHB4OwogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA1MCUsIHZhcigtLW1qci1zdXJmYWNlLTEpIDUwJSk7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBmbGV4LXNocmluazogMDsKICAgIG1pbi1oZWlnaHQ6IDM2cHg7CiAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7Cn0KLm1qci1tZnYtdG9vbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgZGlzcGxheTogbm9uZTsKfQoKLm1qci1tZnYtdG9vbGJhci1zZXAgewogICAgd2lkdGg6IDFweDsKICAgIGhlaWdodDogMThweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1ib3JkZXIpOwogICAgbWFyZ2luOiAwIDNweDsKICAgIGZsZXgtc2hyaW5rOiAwOwp9CgoubWpyLW1mdi1wcm9ncmVzcyB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgaGVpZ2h0OiAyMnB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDcyJSwgIzAwMCAyOCUpOwogICAgZmxleC1zaHJpbms6IDA7CiAgICBjdXJzb3I6IGRlZmF1bHQ7Cn0KCi5tanItbWZ2LXByb2dyZXNzLmlzLWNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi5tanItbWZ2LXByb2dyZXNzLmlzLWNsaWNrYWJsZTpob3ZlciB7CiAgICBmaWx0ZXI6IGJyaWdodG5lc3MoMS4wMyk7Cn0KCi5tanItbWZ2LXByb2dyZXNzLWJhciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAwOwogICAgd2lkdGg6IDAlOwogICAgdHJhbnNpdGlvbjogd2lkdGggNzBtcyBlYXNlLWluLW91dDsKfQoKLm1qci1tZnYtcHJvZ3Jlc3MtYmFyLS1ub2RlcyB7CiAgICB0b3A6IDA7CiAgICBoZWlnaHQ6IDUwJTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MpIDY4JSwgIzBiMzUxMyAzMiUpOwp9CgoubWpyLW1mdi1wcm9ncmVzcy1iYXItLXN0ZXBzIHsKICAgIHRvcDogNTAlOwogICAgaGVpZ2h0OiA1MCU7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNjQlLCAjMGIyMzQwIDM2JSk7Cn0KCi5tanItbWZ2LXByb2dyZXNzLmlzLWVycm9yIC5tanItbWZ2LXByb2dyZXNzLWJhci0tbm9kZXMsCi5tanItbWZ2LXByb2dyZXNzLmlzLWVycm9yIC5tanItbWZ2LXByb2dyZXNzLWJhci0tc3RlcHMgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsICNkOTUzNGYgNzglLCAjNGExNDE0IDIyJSk7Cn0KCi5tanItbWZ2LXByb2dyZXNzLW92ZXJsYXkgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpLCByZ2JhKDAsIDAsIDAsIDAuMTgpKTsKICAgIG1peC1ibGVuZC1tb2RlOiBzY3JlZW47CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLm1qci1tZnYtcHJvZ3Jlc3MtdGV4dCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAyOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBwYWRkaW5nOiAwIDhweDsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICB0ZXh0LXNoYWRvdzogMCAwIDJweCByZ2JhKDAsIDAsIDAsIDAuOSk7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwp9CgoubWpyLW1mdi1waW4tZ3JvdXAgewogICAgZGlzcGxheTogZmxleDsKICAgIGdhcDogMnB4OwogICAgZmxleC1zaHJpbms6IDA7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwp9Ci5tanItbWZ2LXBpbi1idG4gewogICAgd2lkdGg6IDI2cHg7CiAgICBoZWlnaHQ6IDI2cHg7CiAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTIpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHBhZGRpbmc6IDA7CiAgICBsaW5lLWhlaWdodDogMjRweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHRyYW5zaXRpb246CiAgICAgICAgYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGNvbG9yIDEyMG1zIGVhc2UsCiAgICAgICAgYm94LXNoYWRvdyAxMjBtcyBlYXNlOwp9Ci5tanItbWZ2LXBpbi1idG46aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNDUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLCB2YXIoLS1tanItYWNjZW50KSA4JSk7Cn0KLm1qci1tZnYtcGluLWJ0bi5pcy1waW5uZWQgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTglLCAjZmZmZmZmIDEyJSk7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNDIlLCB2YXIoLS1tanItYWNjZW50KSA1OCUpOwogICAgY29sb3I6ICNlZWY3ZmY7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDI0JSwgdHJhbnNwYXJlbnQpOwp9CgovKiAtLSBQaW4gZ3JvdXA6IG5vdyBhIGRyb3Bkb3duIG1lbnUgKGRpc3BsYXk6bm9uZSBieSBkZWZhdWx0LCBmbGV4IHdoZW4gLmlzLW9wZW4pIC0tICovCi5tanItbWZ2LXBpbi1ncm91cCB7CiAgICBkaXNwbGF5OiBub25lOwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMnB4OwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiBjYWxjKDEwMCUgKyA0cHgpOwogICAgbGVmdDogMDsKICAgIHotaW5kZXg6IDEwMDEwOwogICAgbWluLXdpZHRoOiA3MHB4OwogICAgcGFkZGluZzogNHB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDI0cHggcmdiYSgwLCAwLCAwLCAwLjU1KTsKfQoubWpyLW1mdi1waW4tZ3JvdXAuaXMtb3BlbiB7CiAgICBkaXNwbGF5OiBmbGV4Owp9Ci5tanItbWZ2LXBpbi1idG4gewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAzMHB4OwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHBhZGRpbmc6IDAgMTBweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHRyYW5zaXRpb246CiAgICAgICAgYmFja2dyb3VuZCAxMjBtcyBlYXNlLAogICAgICAgIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGNvbG9yIDEyMG1zIGVhc2U7Cn0KLm1qci1tZnYtcGluLWJ0bjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMzUlLCB0cmFuc3BhcmVudCk7Cn0KLm1qci1tZnYtcGluLWJ0bi5pcy1waW5uZWQgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTglLCAjZmZmZmZmIDEyJSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMiwgIzMzMykgNDIlLCB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKSA1OCUpOwogICAgY29sb3I6ICNlZWY3ZmY7Cn0KCi8qIC0tIEljb24gRHJvcGRvd24gY29tcG9uZW50ICgubWpyLW1mdi1pZHJvcCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5tanItbWZ2LWlkcm9wIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGZsZXgtc2hyaW5rOiAwOwp9CgoubWpyLW1mdi1pZHJvcC1tZW51IHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAycHg7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB6LWluZGV4OiAxMDAxMDsKICAgIG1pbi13aWR0aDogMTEwcHg7CiAgICBwYWRkaW5nOiA0cHg7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1tZW51LWJnLCAjMmEyYTJhKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgYm94LXNoYWRvdzogMCA4cHggMjRweCByZ2JhKDAsIDAsIDAsIDAuNTUpOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoubWpyLW1mdi1pZHJvcC1tZW51LmlzLW9wZW4gewogICAgZGlzcGxheTogZmxleDsKfQoKLm1qci1tZnYtaWRyb3AtaXRlbSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgd2lkdGg6IDEwMCU7CiAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICBib3JkZXI6IG5vbmU7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2RkZCk7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzIGVhc2U7Cn0KLm1qci1tZnYtaWRyb3AtaXRlbTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwp9Ci5tanItbWZ2LWlkcm9wLWl0ZW0uaXMtc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogcmdiYSg5NSwgMTc5LCAyNTUsIDAuMTYpOwogICAgY29sb3I6ICNhOGQ4ZmY7Cn0KLm1qci1tZnYtaWRyb3AtdHJpZ2dlclthcmlhLWV4cGFuZGVkPSJ0cnVlIl0gewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSAhaW1wb3J0YW50Owp9Ci8qIENoYW5uZWwgdHJpZ2dlcjogc2xpZ2h0bHkgd2lkZXIgdG8gZml0ICJSR0IiICovCi5tanItbWZ2LWNoLWxhYmVsIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA0ZW07CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLyogVG9vbGJhciBpY29uLWJ1dHRvbiBwb3BvdmVycyAoY2hhbm5lbCwgZ3VpZGVzLCBwaW4sIGZvcm1hdCAtIHNvcnQtc3R5bGUgY29udGV4dCBtZW51cykgKi8KLm1qci1tZnYtY2gtcG9wb3ZlciwKLm1qci1tZnYtZ3VpZGVzLXBvcG92ZXIsCi5tanItbWZ2LXBpbi1wb3BvdmVyLAoubWpyLW1mdi1mb3JtYXQtcG9wb3ZlciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBtaW4td2lkdGg6IDEyMHB4OwogICAgcGFkZGluZzogNnB4OwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnLCAwLjVyZW0pOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSwgdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSkpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7CiAgICBib3gtc2hhZG93OiAwIDhweCAyNHB4IHJnYmEoMCwgMCwgMCwgMC41NSk7CiAgICB6LWluZGV4OiAxMDAxMDsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KLm1qci1tZnYtY2gtcG9wb3Zlci5pcy1vcGVuLAoubWpyLW1mdi1ndWlkZXMtcG9wb3Zlci5pcy1vcGVuLAoubWpyLW1mdi1waW4tcG9wb3Zlci5pcy1vcGVuLAoubWpyLW1mdi1mb3JtYXQtcG9wb3Zlci5pcy1vcGVuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwp9Ci8qIFRvb2xiYXIgaWNvbiBpbWFnZXMgLSBjaCBpY29uIGlzIGJsYWNrIChpbnZlcnRlZCksIGd1aWRlcyBpY29uIGlzIG5hdGl2ZSB3aGl0ZSAqLwoubWpyLW1mdi1jaC1pY29uIHsKICAgIHdpZHRoOiAxOHB4OwogICAgaGVpZ2h0OiAxOHB4OwogICAgZmlsdGVyOiBpbnZlcnQoMSk7CiAgICBvcGFjaXR5OiAwLjg1OwogICAgZGlzcGxheTogYmxvY2s7Cn0KLm1qci1tZnYtZ3VpZGVzLWljb24gewogICAgd2lkdGg6IDE4cHg7CiAgICBoZWlnaHQ6IDE4cHg7CiAgICBvcGFjaXR5OiAwLjg1OwogICAgZGlzcGxheTogYmxvY2s7Cn0KLm1qci1tZnYtY2gtdHJpZ2dlclthcmlhLWV4cGFuZGVkPSJ0cnVlIl0sCi5tanItbWZ2LWd1aWRlcy10cmlnZ2VyW2FyaWEtZXhwYW5kZWQ9InRydWUiXSwKLm1qci1tZnYtcGluLXRyaWdnZXJbYXJpYS1leHBhbmRlZD0idHJ1ZSJdLAoubWpyLW1mdi1mb3JtYXQtdHJpZ2dlclthcmlhLWV4cGFuZGVkPSJ0cnVlIl0gewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSAhaW1wb3J0YW50Owp9Ci8qIFBpbiBzbG90IGFjdGl2ZSBzdGF0ZSAqLwoubWpyLW1mdi1waW4tcG9wb3ZlciAubWpyLW1lbnUtaXRlbS5pcy1waW5uZWQgewogICAgYmFja2dyb3VuZDogcmdiYSg5NSwgMTc5LCAyNTUsIDAuMTYpOwogICAgY29sb3I6ICNhOGQ4ZmY7Cn0KLm1qci1tZnYtcGluLXBvcG92ZXIgLm1qci1tZW51LWl0ZW0uaXMtcGlubmVkIC5tanItbWVudS1pdGVtLWNoZWNrIHsKICAgIG9wYWNpdHk6IDEgIWltcG9ydGFudDsKfQovKiBGb3JtYXQgcG9wb3Zlcjogc2VwYXJhdG9yICsgb3BhY2l0eSBzbGlkZXIgcm93ICovCi5tanItbWZ2LWZvcm1hdC1zZXAgewogICAgaGVpZ2h0OiAxcHg7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkpOwogICAgbWFyZ2luOiA0cHggMnB4Owp9Ci5tanItbWZ2LWZvcm1hdC1zbGlkZXItcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBwYWRkaW5nOiA0cHggOHB4IDJweDsKfQoubWpyLW1mdi1mb3JtYXQtc2xpZGVyLWxhYmVsIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGNvbG9yOiB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKTsKICAgIG9wYWNpdHk6IDAuNjU7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZmxleC1zaHJpbms6IDA7Cn0KLm1qci1tZnYtZm9ybWF0LXBvcG92ZXIgaW5wdXRbdHlwZT0icmFuZ2UiXSB7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiA3MHB4OwogICAgYWNjZW50LWNvbG9yOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKfQoubWpyLW1mdi1mb3JtYXQtcG9wb3ZlciAubWpyLW1mdi10b29sYmFyLXJhbmdlLW91dCB7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2RkZCk7CiAgICBvcGFjaXR5OiAwLjY1OwogICAgbWluLXdpZHRoOiAzMHB4OwogICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICBmbGV4LXNocmluazogMDsKfQoKLm1qci1tZnYgLm1qci1pY29uLWJ0biB7CiAgICB3aWR0aDogMzBweDsKICAgIGhlaWdodDogMzBweDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYm9yZGVyLXJhZGl1czogN3B4OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0yKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHBhZGRpbmc6IDA7CiAgICBmbGV4LXNocmluazogMDsKICAgIHRyYW5zaXRpb246CiAgICAgICAgdHJhbnNmb3JtIDEyMG1zIGVhc2UsCiAgICAgICAgYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGNvbG9yIDEyMG1zIGVhc2UsCiAgICAgICAgYm94LXNoYWRvdyAxMjBtcyBlYXNlOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDQ1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDgwJSwgdmFyKC0tbWpyLWFjY2VudCkgOCUpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuOmZvY3VzLXZpc2libGUgewogICAgb3V0bGluZTogbm9uZTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU4JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAyNCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1tZnYgLm1qci1pY29uLWJ0biAucGkgewogICAgZm9udC1zaXplOiAxM3B4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBvcGFjaXR5OiAwLjk7Cn0KCi8qIFVuaXZlcnNhbCBhY3RpdmUgaGlnaGxpZ2h0IC0gYW55IGFyaWEtcHJlc3NlZD0idHJ1ZSIgYnV0dG9uIGdldHMgYWNjZW50IGdsb3cuCiAgIFBsYWNlZCBiZWZvcmUgdGhlIGNvbG9yZWQgYWN0aXZlIGNsYXNzZXMgc28gdGhleSBjYW4gb3ZlcnJpZGUgd2l0aCB0aGVpciBvd24gY29sb3IuICovCi5tanItbWZ2IC5tanItaWNvbi1idG5bYXJpYS1wcmVzc2VkPSJ0cnVlIl0gewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDk1LCAxNzksIDI1NSwgMC41NSk7CiAgICBjb2xvcjogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMiwgIzMzMykgODAlLCB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKSAxNSUpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKSAyNSUsIHRyYW5zcGFyZW50KTsKfQoubWpyLW1mdiAubWpyLWljb24tYnRuW2FyaWEtcHJlc3NlZD0idHJ1ZSJdIC5waSB7CiAgICBvcGFjaXR5OiAxOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuLm1qci1saXZlLWFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MpIDYwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgY29sb3I6IHZhcigtLW1qci1zdGF0dXMtc3VjY2Vzcyk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLCB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MpIDEyJSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcykgMjUlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWZ2IC5tanItaWNvbi1idG4ubWpyLWxpdmUtYWN0aXZlIC5waSB7CiAgICBvcGFjaXR5OiAxOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuLm1qci1wcmV2aWV3LWFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA2MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4MCUsIHZhcigtLW1qci1hY2NlbnQpIDEyJSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDI1JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuLm1qci1wcmV2aWV3LWFjdGl2ZSAucGkgewogICAgb3BhY2l0eTogMTsKfQoKLm1qci1tZnYgLm1qci1pY29uLWJ0bi5tanItbm9kZXN0cmVhbS1hY3RpdmUgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCAjZmY5ODAwKSA2MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGNvbG9yOiB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZjk4MDApOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KAogICAgICAgIGluIHNyZ2IsCiAgICAgICAgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLAogICAgICAgIHZhcigtLW1qci1zdGF0dXMtd2FybmluZywgI2ZmOTgwMCkgMTIlCiAgICApOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZjk4MDApIDI1JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuLm1qci1ub2Rlc3RyZWFtLWFjdGl2ZSAucGkgewogICAgb3BhY2l0eTogMTsKfQoKLyogUG9wLWluIG1vZGUgKHZpZXdlciBwb3BwZWQgb3V0KTogcmFpc2UgYnV0dG9uIGNvbnRyYXN0L2JyaWdodG5lc3MgKi8KLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDkyJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSksCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDkyJSwgcmdiYSgwLCAwLCAwLCAwLjE4KSkKICAgICk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3NCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xOCkpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSksCiAgICAgICAgMCAyNHB4IDU2cHggcmdiYSgwLCAwLCAwLCAwLjQyKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItbWZ2LWhlYWRlciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4OCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA5MCUsIHJnYmEoMCwgMCwgMCwgMC4yNCkpCiAgICApOwogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc4JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KSk7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1oZWFkZXItdGl0bGUgewogICAgb3BhY2l0eTogMC45ODsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2VlZjRmZikgOTQlLCAjZmZmZmZmIDYlKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItbWZ2LXRvb2xiYXIgewogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDE4MGRlZywKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgODglLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgOTAlLCByZ2JhKDAsIDAsIDAsIDAuMjQpKQogICAgKTsKICAgIGJvcmRlci1ib3R0b20tY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3OCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCkpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1tZnYtdG9vbGJhci1zZXAgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc4JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1wcm9ncmVzcyB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA4MiUsICMwYTExMTggMTglKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgOTIlLCAjMDAwIDglKQogICAgKTsKICAgIGJvcmRlci1ib3R0b20tY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3OCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCkpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1tZnYtcHJvZ3Jlc3MtdGV4dCB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcsICNlZWY0ZmYpIDk0JSwgI2ZmZmZmZiA2JSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1jb250ZW50IHsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgcmFkaWFsLWdyYWRpZW50KAogICAgICAgICAgICBjaXJjbGUgYXQgdG9wLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMTAlLCB0cmFuc3BhcmVudCkgMCUsCiAgICAgICAgICAgIHRyYW5zcGFyZW50IDQyJQogICAgICAgICksCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDgyJSwgIzAwMCAxOCUpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1pY29uLWJ0biB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3NiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNikpOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDE4MGRlZywKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODYlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgOTIlLCByZ2JhKDAsIDAsIDAsIDAuMTgpKQogICAgKTsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2RkZCkgOTIlLCAjZmZmZmZmIDglKSAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSksCiAgICAgICAgMCA4cHggMThweCByZ2JhKDAsIDAsIDAsIDAuMTgpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1pY29uLWJ0bjpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1MiUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDU4JSwgdmFyKC0tbWpyLWFjY2VudCkgNDIlKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgNjIlLCB2YXIoLS1tanItYWNjZW50KSAzOCUpCiAgICApOwogICAgY29sb3I6ICNmNGY4ZmYgIWltcG9ydGFudDsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItaWNvbi1idG4gLnBpIHsKICAgIG9wYWNpdHk6IDE7CiAgICBjb2xvcjogaW5oZXJpdCAhaW1wb3J0YW50Owp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1pY29uLWJ0bi5tanItbGl2ZS1hY3RpdmUgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy1zdWNjZXNzKSA2MCUsICNmZmZmZmYgNDAlKTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcykgNjIlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy1zdWNjZXNzKSAzNiUsIHZhcigtLW1qci1zdXJmYWNlLTEpIDY0JSkKICAgICk7CiAgICBjb2xvcjogI2ZmZmZmZiAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiksCiAgICAgICAgMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MpIDI0JSwgdHJhbnNwYXJlbnQpLAogICAgICAgIDAgMCAxOHB4IHJnYmEoNzYsIDE3NSwgODAsIDAuMTgpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1pY29uLWJ0bi5tanItcHJldmlldy1hY3RpdmUgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTglLCAjZmZmZmZmIDQyJSk7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA2MiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAzNiUsIHZhcigtLW1qci1zdXJmYWNlLTEpIDY0JSkKICAgICk7CiAgICBjb2xvcjogI2ZmZmZmZiAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiksCiAgICAgICAgMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAyNCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAwIDAgMThweCByZ2JhKDk1LCAxNzksIDI1NSwgMC4xOCk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLWljb24tYnRuLm1qci1ub2Rlc3RyZWFtLWFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZjk4MDApIDU4JSwgI2ZmZmZmZiA0MiUpOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDE4MGRlZywKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCAjZmY5ODAwKSA2MiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZjk4MDApIDM2JSwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgNjQlKQogICAgKTsKICAgIGNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSwKICAgICAgICAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtd2FybmluZywgI2ZmOTgwMCkgMjQlLCB0cmFuc3BhcmVudCksCiAgICAgICAgMCAwIDE4cHggcmdiYSgyNTUsIDE1MiwgMCwgMC4xOCk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1waW4tYnRuIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc2JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KSk7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4NCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA5MiUsIHJnYmEoMCwgMCwgMCwgMC4xOCkpCiAgICApOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSA5MiUsICNmZmZmZmYgOCUpOwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1tZnYtcGluLWJ0bjpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1MiUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDU2JSwgdmFyKC0tbWpyLWFjY2VudCkgNDQlKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgNjQlLCB2YXIoLS1tanItYWNjZW50KSAzNiUpCiAgICApOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1tZnYtcGluLWJ0bi5pcy1waW5uZWQgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTglLCAjZmZmZmZmIDQyJSk7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA2MiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAzNiUsIHZhcigtLW1qci1zdXJmYWNlLTEpIDY0JSkKICAgICk7CiAgICBjb2xvcjogI2ZmZmZmZjsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItd3Mtc2lkZWJhciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA5NCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCkpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA5NCUsIHJnYmEoMCwgMCwgMCwgMC4xOCkpCiAgICApOwogICAgYm9yZGVyLWxlZnQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3OCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNikpOwogICAgYm94LXNoYWRvdzogaW5zZXQgMXB4IDAgMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDMpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImxlZnQiXSAubWpyLXdzLXNpZGViYXIgewogICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNzglLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItd3Mtc2lkZWJhci1oZWFkZXIgewogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDE4MGRlZywKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODQlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgOTIlLCByZ2JhKDAsIDAsIDAsIDAuMTgpKQogICAgKTsKICAgIGJvcmRlci1ib3R0b20tY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3NiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCkpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy1zaWRlYmFyLXRpdGxlIHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2VlZjRmZikgODIlLCB2YXIoLS1tanItbXV0ZWQpIDE4JSk7CiAgICBvcGFjaXR5OiAwLjg4Owp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy1ub2RlIHsKICAgIGJvcmRlci1ib3R0b20tY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3MiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy1ub2RlLWhlYWRlciB7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMCkpLAogICAgICAgIGxpbmVhci1ncmFkaWVudCgKICAgICAgICAgICAgMTgwZGVnLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgODYlLCB2YXIoLS1tanItYWNjZW50KSAxNCUpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgODYlLCByZ2JhKDAsIDAsIDAsIDAuMTQpKQogICAgICAgICk7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLW5vZGUtdGl0bGUgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZWVmNGZmKSA5NCUsICNmZmZmZmYgNiUpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy13aWRnZXQtbGFiZWwsCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLXNpZGViYXItZW1wdHksCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLW5vZGUtZW1wdHkgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItbXV0ZWQpIDg0JSwgI2ZmZmZmZiAxNiUpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy1pbnB1dCB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgNzQlLCAjMDUwNzBhIDI2JSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3NCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xOCkpOwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy1pbnB1dDpmb2N1cyB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1OCUsICNmZmZmZmYgMTAlKTsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpLAogICAgICAgIDAgMCAwIDJweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMTglLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWZ2IC5tanItaWNvbi1idG4ubWpyLXBvcGluLWFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1OCUsICNmZmZmZmYgNDIlKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA0NSUsIHZhcigtLW1qci1hY2NlbnQpIDU1JSk7CiAgICBjb2xvcjogI2VlZjdmZjsKfQoKLyogLS0gQ29udGVudCB3cmFwcGVyIChob3Jpem9udGFsIGZsZXg6IGNvbnRlbnQgKyBzaWRlYmFyKSAtLS0tLS0tLS0tLS0tLSAqLwoubWpyLW1mdi1jb250ZW50LXdyYXBwZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXg6IDE7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGNvbnRhaW5lci10eXBlOiBpbmxpbmUtc2l6ZTsKfQoKLyogLS0gU2lkZWJhciBwb3NpdGlvbiB2YXJpYW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJsZWZ0Il0gewogICAgZmxleC1kaXJlY3Rpb246IHJvdzsKfQoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0ibGVmdCJdIC5tanItd3Mtc2lkZWJhciB7CiAgICBib3JkZXItbGVmdDogbm9uZTsKICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwp9Ci5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSB7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwp9Ci5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLXdzLXNpZGViYXIgewogICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMDsKICAgIHRyYW5zaXRpb246CiAgICAgICAgaGVpZ2h0IDAuMnMgZWFzZSwKICAgICAgICB3aWR0aCAwczsKfQoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci13cy1zaWRlYmFyLm9wZW4gewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDIyMHB4OwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIG1pbi1oZWlnaHQ6IDEyMHB4OwogICAgbWF4LWhlaWdodDogNjUlOwp9CgovKiAtLSBDb250ZW50IGFyZWEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5tanItbWZ2LWNvbnRlbnQgewogICAgZmxleDogMTsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBiYWNrZ3JvdW5kOiAjMGQwZDBkOwogICAgbWluLWhlaWdodDogMDsKfQoKLm1qci1tZnYtZ2VuLXNpZGViYXIgewogICAgZGlzcGxheTogbm9uZTsKICAgIGZsZXg6IDAgMCAzMjBweDsKICAgIHdpZHRoOiAzMjBweDsKICAgIG1pbi13aWR0aDogMjEwcHg7CiAgICBtYXgtd2lkdGg6IG1pbig0MiUsIDQyMHB4KTsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICBwYWRkaW5nOiAxMHB4OwogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTgsIDE4LCAyMCwgMC45Nik7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg4KTsKfQoKLm1qci1tZnYtZ2VuLXNpZGViYXIub3BlbiB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMTBweDsKfQoKLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImxlZnQiXSAubWpyLW1mdi1nZW4tc2lkZWJhciB7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwogICAgYm9yZGVyLXJpZ2h0OiBub25lOwp9CgoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci1tZnYtZ2VuLXNpZGViYXIgewogICAgZmxleDogMCAwIGNsYW1wKDE5MHB4LCAzMiUsIDI4MHB4KTsKICAgIHdpZHRoOiAxMDAlOwogICAgbWF4LXdpZHRoOiBub25lOwogICAgbWluLXdpZHRoOiAwOwogICAgbWF4LWhlaWdodDogNDYlOwogICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7Cn0KCi5tanItbWZ2LWdlbi1zaWRlYmFyLXRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTQpOwp9CgoubWpyLW1mdi1nZW4tc2lkZWJhci1zZWN0aW9uIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiA2cHg7CiAgICBwYWRkaW5nLXRvcDogOHB4OwogICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKfQoKLm1qci1tZnYtZ2VuLXNpZGViYXItc2VjdGlvbjpmaXJzdC1vZi10eXBlIHsKICAgIHBhZGRpbmctdG9wOiAwOwogICAgYm9yZGVyLXRvcDogbm9uZTsKfQoKLm1qci1tZnYtZ2VuLXNpZGViYXItaGVhZGluZyB7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43Mik7Cn0KCi5tanItbWZ2LWdlbi1zaWRlYmFyLWJvZHkgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDEwcHg7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsaW5lLWhlaWdodDogMS40NTsKICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7Cn0KCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLW1mdi1nZW4tc2lkZWJhci5vcGVuIHsKICAgIGdhcDogNnB4Owp9CgoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci1tZnYtZ2VuLXNpZGViYXItdGl0bGUgewogICAgZmxleDogMCAwIGF1dG87Cn0KCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLW1mdi1nZW4tc2lkZWJhci1zZWN0aW9uIHsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgbWluLWhlaWdodDogYXV0bzsKICAgIHBhZGRpbmctdG9wOiA0cHg7Cn0KCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLW1mdi1nZW4tc2lkZWJhci1oZWFkaW5nIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLW1mdi1nZW4tc2lkZWJhci1ib2R5IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgY29sdW1uczogMyAxNzBweDsKICAgIGNvbHVtbi1nYXA6IDEwcHg7CiAgICBjb2x1bW4tZmlsbDogYmFsYW5jZTsKICAgIG1pbi1oZWlnaHQ6IGF1dG87CiAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICBvdmVyZmxvdy15OiB2aXNpYmxlOwogICAgcGFkZGluZy1yaWdodDogMnB4OwogICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluOwp9CgoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci1tZnYtZ2VuLXNpZGViYXItYm9keSA+ICogewogICAgZGlzcGxheTogZmxleDsKICAgIGJyZWFrLWluc2lkZTogYXZvaWQ7CiAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7CiAgICBtaW4td2lkdGg6IDA7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgbWFyZ2luLWJsb2NrOiAwIDEwcHg7Cn0KCi5tanItbWZ2LWdlbi10aW1lLWJhZGdlIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZ2FwOiAxMnB4OwogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDIyNCwgMjU1LCAxMjIsIDAuNDIpOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDIyNCwgMjU1LCAxMjIsIDAuMTYpLCByZ2JhKDc2LCAxNzUsIDgwLCAwLjEpKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCByZ2JhKDIyNCwgMjU1LCAxMjIsIDAuMTIpIGluc2V0OwogICAgY3Vyc29yOiBjb3B5OwogICAgdHJhbnNpdGlvbjoKICAgICAgICBiYWNrZ3JvdW5kIDAuMTZzIGVhc2UsCiAgICAgICAgYm9yZGVyLWNvbG9yIDAuMTZzIGVhc2UsCiAgICAgICAgYm94LXNoYWRvdyAwLjE2cyBlYXNlOwp9CgoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci1tZnYtZ2VuLXRpbWUtYmFkZ2UgewogICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgYm9yZGVyLXJhZGl1czogNnB4Owp9CgoubWpyLW1mdi1nZW4tdGltZS1sYWJlbCB7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcyKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4Owp9CgoubWpyLW1mdi1nZW4tdGltZS12YWx1ZSB7CiAgICBjb2xvcjogI2UwZmY3YTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGZvbnQtd2VpZ2h0OiA4MDA7CiAgICBmb250LWZhbWlseTogQ29uc29sYXMsIE1vbmFjbywgbW9ub3NwYWNlOwp9CgoubWpyLW1mdi1nZW4tY2FyZCB7CiAgICAtLW1qci1tZnYtZ2VuLWFjY2VudDogIzIxOTZmMzsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nOiAxMnB4OwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1tZnYtZ2VuLWFjY2VudCkgNDUlLCB0cmFuc3BhcmVudCk7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTM1ZGVnLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItbWZ2LWdlbi1hY2NlbnQpIDE2JSwgdHJhbnNwYXJlbnQpIDAlLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItbWZ2LWdlbi1hY2NlbnQpIDglLCB0cmFuc3BhcmVudCkgMTAwJQogICAgKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLW1mdi1nZW4tYWNjZW50KSAxNCUsIHRyYW5zcGFyZW50KSBpbnNldDsKICAgIGN1cnNvcjogY29weTsKICAgIHRyYW5zaXRpb246CiAgICAgICAgYmFja2dyb3VuZCAwLjE2cyBlYXNlLAogICAgICAgIGJvcmRlci1jb2xvciAwLjE2cyBlYXNlLAogICAgICAgIGJveC1zaGFkb3cgMC4xNnMgZWFzZTsKfQoKLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImJvdHRvbSJdIC5tanItbWZ2LWdlbi1jYXJkIHsKICAgIG1pbi1oZWlnaHQ6IDA7CiAgICBwYWRkaW5nOiAxMHB4Owp9CgoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci1tZnYtZ2VuLWNhcmQtLXBvc2l0aXZlLXByb21wdCwKLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImJvdHRvbSJdIC5tanItbWZ2LWdlbi1jYXJkLS1uZWdhdGl2ZS1wcm9tcHQsCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLW1mdi1nZW4tY2FyZC0tcHJvbXB0IHsKICAgIG1pbi1oZWlnaHQ6IDExMHB4Owp9CgoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci1tZnYtZ2VuLWNhcmQtLXdvcmtmbG93IHsKICAgIG1pbi1oZWlnaHQ6IDU4cHg7Cn0KCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLW1mdi1nZW4tY2FyZC0tbW9kZWwtYW5kLWxvcmEsCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLW1mdi1nZW4tY2FyZC0tbW9kZWxzLAoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci1tZnYtZ2VuLWNhcmQtLXNhbXBsaW5nLAoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci1tZnYtZ2VuLWNhcmQtLWdlbmVyYXRpb24tcGlwZWxpbmUsCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLW1mdi1nZW4tY2FyZC0tdGV4dC10by1pbWFnZSwKLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImJvdHRvbSJdIC5tanItbWZ2LWdlbi1jYXJkLS1pbWFnZS10by1pbWFnZSwKLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImJvdHRvbSJdIC5tanItbWZ2LWdlbi1jYXJkLS1pbnBhaW50LAoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci1tZnYtZ2VuLWNhcmQtLXVwc2NhbGUsCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLW1mdi1nZW4tY2FyZC0tcmVmaW5lIHsKICAgIG1pbi1oZWlnaHQ6IDg2cHg7Cn0KCi5tanItbWZ2LWdlbi1jYXJkLS1zZWVkIHsKICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgYm9yZGVyLXdpZHRoOiAycHg7Cn0KCi5tanItbWZ2LWdlbi1jYXJkLS1jb21wYWN0IHsKICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZ2FwOiAxMnB4Owp9CgoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci1tZnYtZ2VuLWNhcmQtLWNvbXBhY3QgewogICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwp9CgoubWpyLW1mdi1nZW4tY2FyZC0tY29tcGFjdCAubWpyLW1mdi1nZW4tY2FyZC10aXRsZSwKLm1qci1tZnYtZ2VuLWNhcmQtLWNvbXBhY3QgLm1qci1tZnYtZ2VuLWNhcmQtdmFsdWUgewogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci1tZnYtZ2VuLWNhcmQ6aG92ZXIsCi5tanItbWZ2LWdlbi10aW1lLWJhZGdlOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1tZnYtZ2VuLWFjY2VudCwgI2UwZmY3YSkgNzAlLCB0cmFuc3BhcmVudCk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1tZnYtZ2VuLWFjY2VudCwgI2UwZmY3YSkgMjQlLCB0cmFuc3BhcmVudCkKICAgICAgICBpbnNldDsKfQoKLm1qci1tZnYtZ2VuLWNvcHktZmxhc2ggewogICAgYmFja2dyb3VuZDogcmdiYSg3NiwgMTc1LCA4MCwgMC4yOCkgIWltcG9ydGFudDsKfQoKLm1qci1tZnYtZ2VuLWNhcmQtdGl0bGUgewogICAgY29sb3I6IHZhcigtLW1qci1tZnYtZ2VuLWFjY2VudCk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjVweDsKfQoKLm1qci1tZnYtZ2VuLWNhcmQtdmFsdWUgewogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTIpKTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIG1pbi13aWR0aDogMDsKICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7Cn0KCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLW1mdi1nZW4tY2FyZC12YWx1ZSB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgZGlzcGxheTogLXdlYmtpdC1ib3g7CiAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDU7CiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsOwp9CgoubWpyLW1mdi1nZW4tY2FyZC12YWx1ZS5pcy1jb21wYWN0IHsKICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKfQoKLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImJvdHRvbSJdIC5tanItbWZ2LWdlbi1jYXJkLXZhbHVlLmlzLWNvbXBhY3QgewogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKLm1qci1tZnYtZ2VuLWNhcmQtdmFsdWUuaXMtbXVsdGlsaW5lIHsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKfQoKLm1qci1tZnYtZ2VuLWNhcmQtLXNlZWQgLm1qci1tZnYtZ2VuLWNhcmQtdmFsdWUgewogICAgZm9udC1zaXplOiAxOHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGZvbnQtZmFtaWx5OiBDb25zb2xhcywgTW9uYWNvLCBtb25vc3BhY2U7CiAgICBsZXR0ZXItc3BhY2luZzogMXB4OwogICAgY29sb3I6ICNmZmY7Cn0KCi5tanItbWZ2LWdlbi1jYXJkLXZhbHVlLmlzLWZpZWxkcyB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICBnYXA6IDhweDsKfQoKLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImJvdHRvbSJdIC5tanItbWZ2LWdlbi1jYXJkLXZhbHVlLmlzLWZpZWxkcyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogN3B4OwogICAgLXdlYmtpdC1saW5lLWNsYW1wOiB1bnNldDsKfQoKLm1qci1tZnYtZ2VuLWNhcmQtdmFsdWUuaXMtYnJhbmNoLWdyb3VwcyB7CiAgICBnYXA6IDEwcHg7Cn0KCi5tanItbWZ2LWdlbi1icmFuY2gtZ3JvdXAgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDdweDsKICAgIG1pbi13aWR0aDogMDsKICAgIHBhZGRpbmc6IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNDUpOwp9CgoubWpyLW1mdi1nZW4tYnJhbmNoLXRpdGxlIHsKICAgIGNvbG9yOiB2YXIoLS1tanItbWZ2LWdlbi1hY2NlbnQpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDgwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjZweDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KCi5tanItbWZ2LWdlbi1maWVsZCB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoNzhweCwgYXV0bykgMWZyOwogICAgZ2FwOiAxMHB4OwogICAgYWxpZ24taXRlbXM6IHN0YXJ0OwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci1tZnYtZ2VuLWZpZWxkIHsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDU0cHgsIGF1dG8pIG1pbm1heCgwLCAxZnIpOwp9CgoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci1tZnYtZ2VuLWZpZWxkLXZhbHVlIHsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItbWZ2LWdlbi1maWVsZC1sYWJlbCB7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkLCByZ2JhKDE4MCwgMTgwLCAxODAsIDAuNzIpKTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCi5tanItbWZ2LWdlbi1maWVsZC12YWx1ZSB7CiAgICBjb2xvcjogdmFyKC0tZmctY29sb3IsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSkpOwogICAgbWluLXdpZHRoOiAwOwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgd29yZC1icmVhazogYnJlYWstd29yZDsKfQoKLm1qci1tZnYtZ2VuLXNpZGViYXItYm9keSBzdHJvbmcgewogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIG1hcmdpbi1yaWdodDogNHB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSk7Cn0KCi5tanItbWZ2LWdlbi1zaWRlYmFyLWJvZHkgW2RhdGEtZmllbGQ9InByb21wdCJdIHN0cm9uZyB7CiAgICBjb2xvcjogIzdlYzhmZjsKfQoubWpyLW1mdi1nZW4tc2lkZWJhci1ib2R5IFtkYXRhLWZpZWxkPSJzZWVkIl0gc3Ryb25nIHsKICAgIGNvbG9yOiAjZmZkNDdhOwp9Ci5tanItbWZ2LWdlbi1zaWRlYmFyLWJvZHkgW2RhdGEtZmllbGQ9Im1vZGVsIl0gc3Ryb25nIHsKICAgIGNvbG9yOiAjN2RkYThhOwp9Ci5tanItbWZ2LWdlbi1zaWRlYmFyLWJvZHkgW2RhdGEtZmllbGQ9ImxvcmEiXSBzdHJvbmcgewogICAgY29sb3I6ICNkNDhjZmY7Cn0KLm1qci1tZnYtZ2VuLXNpZGViYXItYm9keSBbZGF0YS1maWVsZD0ic2FtcGxlciJdIHN0cm9uZyB7CiAgICBjb2xvcjogI2ZmOWY3YTsKfQoubWpyLW1mdi1nZW4tc2lkZWJhci1ib2R5IFtkYXRhLWZpZWxkPSJzY2hlZHVsZXIiXSBzdHJvbmcgewogICAgY29sb3I6ICNmZjdhOWY7Cn0KLm1qci1tZnYtZ2VuLXNpZGViYXItYm9keSBbZGF0YS1maWVsZD0iY2ZnIl0gc3Ryb25nIHsKICAgIGNvbG9yOiAjN2E5ZmZmOwp9Ci5tanItbWZ2LWdlbi1zaWRlYmFyLWJvZHkgW2RhdGEtZmllbGQ9InN0ZXAiXSBzdHJvbmcgewogICAgY29sb3I6ICM3YWZmZDQ7Cn0KLm1qci1tZnYtZ2VuLXNpZGViYXItYm9keSBbZGF0YS1maWVsZD0iZ2VuVGltZSJdIHN0cm9uZyB7CiAgICBjb2xvcjogI2UwZmY3YTsKfQoKLm1qci1tZnYtZ2VuLXNpZGViYXItYm9keSBkaXYgewogICAgbWFyZ2luLWJvdHRvbTogNXB4Owp9CgoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci1tZnYtZ2VuLXNpZGViYXItYm9keSBkaXYgewogICAgbWFyZ2luLWJvdHRvbTogMDsKfQoKLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImJvdHRvbSJdIC5tanItbWZ2LWdlbi1zaWRlYmFyLWJvZHkgPiBkaXYsCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLW1mdi1nZW4tc2lkZWJhci1ib2R5ID4gc2VjdGlvbiB7CiAgICBtYXJnaW4tYmxvY2s6IDAgMTBweDsKfQoKLm1qci1tZnYtZ2VuLXNpZGViYXItYm9keSBkaXY6bGFzdC1jaGlsZCB7CiAgICBtYXJnaW4tYm90dG9tOiAwOwp9CgpAY29udGFpbmVyIChtYXgtd2lkdGg6IDc2MHB4KSB7CiAgICAubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci1tZnYtZ2VuLXNpZGViYXItYm9keSB7CiAgICAgICAgY29sdW1uczogYXV0bzsKICAgICAgICBjb2x1bW4tY291bnQ6IDE7CiAgICAgICAgY29sdW1uLXdpZHRoOiBhdXRvOwogICAgfQoKICAgIC5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLW1mdi1nZW4tc2lkZWJhci1ib2R5ID4gKiB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICB9Cn0KCi5tanItbWZ2LW92ZXJsYXktY2FudmFzIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDEyOwp9CgoubWpyLW1mdi10b29sYmFyLXNlbGVjdCB7CiAgICBoZWlnaHQ6IDI0cHg7CiAgICBwYWRkaW5nOiAwIDZweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJvcmRlcjogMC44cHggc29saWQgcmdiYSgxOTYsIDIwMiwgMjEwLCAwLjI0KTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjEwLCAyMTQsIDIyMCwgMC4wNiksIHJnYmEoMjEwLCAyMTQsIDIyMCwgMC4wMikpOwogICAgY29sb3I6IHJnYmEoMjMwLCAyMzMsIDIzOCwgMC45Mik7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBvdXRsaW5lOiBub25lOwp9CgoubWpyLW1mdi10b29sYmFyLXJhbmdlIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4Owp9CgoubWpyLW1mdi10b29sYmFyLXJhbmdlIGlucHV0W3R5cGU9InJhbmdlIl0gewogICAgd2lkdGg6IDcycHg7CiAgICBhY2NlbnQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44NSk7Cn0KCi5tanItbWZ2LXRvb2xiYXItcmFuZ2Utb3V0IHsKICAgIG1pbi13aWR0aDogMzBweDsKICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKfQoKLyogRVYgc2xpZGVyIGFjdGl2ZSBzdGF0ZSAodmFsdWUgIT0gMCkgKi8KLm1qci1tZnYtdG9vbGJhci1yYW5nZS5pcy1hY3RpdmUgaW5wdXRbdHlwZT0icmFuZ2UiXSB7CiAgICBhY2NlbnQtY29sb3I6ICNmNWM4NDI7Cn0KLm1qci1tZnYtdG9vbGJhci1yYW5nZS5pcy1hY3RpdmUgLm1qci1tZnYtdG9vbGJhci1yYW5nZS1vdXQgewogICAgY29sb3I6ICNmNWM4NDI7CiAgICBmb250LXdlaWdodDogNjAwOwp9CgoubWpyLW1mdi1tZWRpYS1wcm9ncmVzcyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDEwcHg7CiAgICBsZWZ0OiAxMHB4OwogICAgei1pbmRleDogNjsKICAgIG1heC13aWR0aDogY2FsYygxMDAlIC0gMjBweCk7CiAgICBwYWRkaW5nOiA1cHggOXB4OwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm9yZGVyOiAxcHggc29saWQKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KSkgODglLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgcmdiYSg1LCA4LCAxNCwgMC44NikgODYlLCB2YXIoLS1tanItc3VyZmFjZS0wLCAjMTExKSAxNCUpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNmNWY3ZmEpOwogICAgYm94LXNoYWRvdzogMCAycHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMjgpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBvcGFjaXR5OiAwOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00cHgpOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBvcGFjaXR5IDAuMTZzIGVhc2UsCiAgICAgICAgdHJhbnNmb3JtIDAuMTZzIGVhc2U7Cn0KCi5tanItbWZ2LW1lZGlhLXByb2dyZXNzLmlzLXZpc2libGUgewogICAgb3BhY2l0eTogMTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKfQoKLm1qci1tZnYtbWVkaWEtcHJvZ3Jlc3MuaXMtZXJyb3IgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy1lcnJvciwgI2ZmNWM3YSkgNzIlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgcmdiYSg2MCwgMTAsIDE4LCAwLjkpIDgyJSwgdmFyKC0tbWpyLXN1cmZhY2UtMCwgIzExMSkgMTglKTsKfQoKLm1qci1tZnYtbWVkaWEtcHJvZ3Jlc3MtdGV4dCB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGluZS1oZWlnaHQ6IDEuMjsKfQoKLyogLS0gV29ya2Zsb3cgU2lkZWJhciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoubWpyLXdzLXNpZGViYXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICB3aWR0aDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xLCAjMmEyYTJhKTsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7CiAgICB0cmFuc2l0aW9uOiB3aWR0aCAwLjJzIGVhc2U7CiAgICBmbGV4LXNocmluazogMDsKfQoKLm1qci13cy1zaWRlYmFyLm9wZW4gewogICAgd2lkdGg6IDI2MHB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIG1pbi13aWR0aDogMTgwcHg7CiAgICBtYXgtd2lkdGg6IDY1JTsKICAgIHRyYW5zaXRpb246IG5vbmU7Cn0KCi5tanItd3Mtc2lkZWJhci1oZWFkZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgbWluLWhlaWdodDogMzRweDsKfQoubWpyLXdzLXNpZGViYXItdGl0bGUgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7CiAgICBvcGFjaXR5OiAwLjY1Owp9Ci5tanItd3Mtc2lkZWJhci1ib2R5IHsKICAgIGZsZXg6IDE7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIHBhZGRpbmc6IDA7Cn0KLm1qci13cy1zaWRlYmFyLWVtcHR5IHsKICAgIHBhZGRpbmc6IDI0cHggMTZweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgbGluZS1oZWlnaHQ6IDEuNTsKfQoKLyogLS0gVGFiIGJhciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLm1qci13cy10YWItYmFyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LXNocmluazogMDsKICAgIGdhcDogMnB4OwogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4xOCk7Cn0KCi5tanItd3MtdGFiIHsKICAgIGZsZXg6IDE7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA1cHg7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgYm9yZGVyOiBub25lOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQ1KTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIGJhY2tncm91bmQgMC4xNXMsCiAgICAgICAgY29sb3IgMC4xNXM7Cn0KCi5tanItd3MtdGFiOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNyk7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1KTsKfQoKLm1qci13cy10YWIuaXMtYWN0aXZlIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoOTksIDE1NSwgMjU1LCAwLjE1KTsKICAgIGNvbG9yOiAjNjM5YmZmOwp9CgovKiAtLSBOb2RlcyB0YWIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoubWpyLXdzLW5vZGVzLXRhYiB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGZsZXg6IDE7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLyogR3JhcGggTWFwIHRhYiAqLwoubWpyLXdnbSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIG1pbi1oZWlnaHQ6IDEwMCU7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgyKTsKfQoKLm1qci13Z20tbWFwLXdyYXAgewogICAgaGVpZ2h0OiAxOTBweDsKICAgIG1pbi1oZWlnaHQ6IDE1MHB4OwogICAgbWFyZ2luOiA4cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yMik7Cn0KCi5tanItd2dtLXByZXZpZXcgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjMyKTsKfQoKLm1qci13Z20tcHJldmlldyAubWpyLW1mdi1tZWRpYSwKLm1qci13Z20tcHJldmlldyAubWpyLW1mdi1wbGF5ZXItaG9zdCwKLm1qci13Z20tcHJldmlldyAubWpyLW1vZGVsM2QtaG9zdCwKLm1qci13Z20tcHJldmlldy1tZWRpYSB7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBtYXgtaGVpZ2h0OiAxMDAlOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBvYmplY3QtZml0OiBjb250YWluOwp9CgoubWpyLXdnbS1wcmV2aWV3LWVtcHR5IHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzQpOwogICAgZm9udC1zaXplOiAxMXB4Owp9CgoubWpyLXdnbS1jYW52YXMgewogICAgZGlzcGxheTogYmxvY2s7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGN1cnNvcjogZ3JhYjsKICAgIHRvdWNoLWFjdGlvbjogbm9uZTsKfQoKLm1qci13Z20tY2FudmFzOmFjdGl2ZSB7CiAgICBjdXJzb3I6IGdyYWJiaW5nOwp9CgoubWpyLXdnbS0tbGFyZ2UgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjE4KTsKfQoKLm1qci13Z20tLWxhcmdlIC5tanItd2dtLW1hcC13cmFwIHsKICAgIGZsZXg6IDE7CiAgICBoZWlnaHQ6IGF1dG87CiAgICBtaW4taGVpZ2h0OiAwOwogICAgbWFyZ2luOiAwOwogICAgYm9yZGVyOiBub25lOwogICAgYm9yZGVyLXJhZGl1czogMDsKfQoKLm1qci13Z20tLWxhcmdlIC5tanItd2dtLXN0YXR1cyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAxMHB4OwogICAgdG9wOiAxMHB4OwogICAgei1pbmRleDogMjsKICAgIG1heC13aWR0aDogbWluKDQyMHB4LCBjYWxjKDEwMCUgLSAyMHB4KSk7CiAgICBwYWRkaW5nOiA1cHggOHB4OwogICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC41Mik7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc0KTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig4cHgpOwp9CgoubWpyLXdnbS10b29sYmFyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDEwcHg7CiAgICB0b3A6IDQ2cHg7CiAgICB6LWluZGV4OiAyOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBnYXA6IDZweDsKICAgIG1heC13aWR0aDogbWluKDQyMHB4LCBjYWxjKDEwMCUgLSAyMHB4KSk7Cn0KCi5tanItd2dtLW1vZGUgewogICAgbWluLWhlaWdodDogMjZweDsKICAgIHBhZGRpbmc6IDNweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNSk7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcyKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKfQoKLm1qci13Z20tbW9kZTpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMTQ5LCAxODMsIDI1NSwgMC40NSk7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwp9CgoubWpyLXdnbS1tb2RlLmlzLWFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMTI0LCAxODYsIDI1NSwgMC42Mik7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDc5LCAxMjMsIDIxNCwgMC4yNik7CiAgICBjb2xvcjogcmdiYSgyMzUsIDI0NSwgMjU1LCAwLjk2KTsKfQoKLm1qci13Z20tLWxhcmdlIC5tanItd2dtLWRldGFpbHMgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgcmlnaHQ6IDEwcHg7CiAgICB0b3A6IDEwcHg7CiAgICBib3R0b206IDEwcHg7CiAgICB6LWluZGV4OiAyOwogICAgd2lkdGg6IG1pbigzMjBweCwgMzglKTsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICBwYWRkaW5nOiAxMHB4OwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTgsIDIwLCAyNiwgMC44NCk7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7Cn0KCi5tanItd2dtLS1sYXJnZSAubWpyLXdnbS1hY3Rpb24gewogICAgbWluLWhlaWdodDogMzBweDsKfQoKLm1qci13Z20tLWxhcmdlIC5tanItd2dtLXBhcmFtIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKfQoKLm1qci13Z20tc3RhdHVzIHsKICAgIHBhZGRpbmc6IDAgMTBweCA4cHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQyKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1Owp9CgoubWpyLXdnbS1kZXRhaWxzIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiA2cHg7CiAgICBwYWRkaW5nOiAwIDhweCAxMHB4Owp9CgoubWpyLXdnbS1ub2RlLXRpdGxlIHsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKfQoKLm1qci13Z20tbm9kZS1tZXRhIHsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBtYXJnaW4tdG9wOiAtNHB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40Mik7CiAgICBmb250LXNpemU6IDEwcHg7Cn0KCi5tanItd2dtLWJyZWFkY3J1bWIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDVweDsKICAgIG1pbi13aWR0aDogMDsKICAgIG1hcmdpbjogLTJweCAwIDJweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTgpOwogICAgZm9udC1zaXplOiAxMXB4Owp9CgoubWpyLXdnbS1icmVhZGNydW1iLWl0ZW0gewogICAgbWluLXdpZHRoOiAwOwogICAgbWF4LXdpZHRoOiAxNDBweDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItd2dtLWJyZWFkY3J1bWItc2VwIHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzIpOwp9CgoubWpyLXdnbS1hY3Rpb25zIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgIGdhcDogNHB4Owp9CgoubWpyLXdnbS1hY3Rpb24gewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDdweDsKICAgIG1pbi1oZWlnaHQ6IDI4cHg7CiAgICBwYWRkaW5nOiA1cHggOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc2KTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKfQoKLm1qci13Z20tYWN0aW9uOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSg5OSwgMTU1LCAyNTUsIDAuNDUpOwogICAgYmFja2dyb3VuZDogcmdiYSg5OSwgMTU1LCAyNTUsIDAuMTIpOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45Mik7Cn0KCi5tanItd2dtLWFjdGlvbi5pcy1vayB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoNzYsIDE3NSwgODAsIDAuNTUpOwogICAgY29sb3I6IHJnYmEoMTkwLCAyNTUsIDE5NiwgMC45Nik7Cn0KCi5tanItd2dtLXBhcmFtcyB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA0cHg7CiAgICBtYXJnaW4tdG9wOiAycHg7Cn0KCi5tanItd2dtLXBhcmFtIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCg2NHB4LCAwLjQyZnIpIG1pbm1heCgwLCAxZnIpOwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nOiA1cHggN3B4OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjE4KTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIGJhY2tncm91bmQgMTIwbXMgZWFzZSwKICAgICAgICBib3JkZXItY29sb3IgMTIwbXMgZWFzZTsKfQoKLm1qci13Z20tcGFyYW06aG92ZXIsCi5tanItd2dtLXBhcmFtOmZvY3VzLXZpc2libGUgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KTsKICAgIG91dGxpbmU6IG5vbmU7Cn0KCi5tanItd2dtLXBhcmFtLmlzLW9rIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSg3OSwgMjEwLCAxMjUsIDAuNyk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDc5LCAyMTAsIDEyNSwgMC4xNik7Cn0KCi5tanItd2dtLXBhcmFtLmlzLWVycm9yIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDkwLCA5MCwgMC43KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCA5MCwgOTAsIDAuMTYpOwp9CgoubWpyLXdnbS1wYXJhbS1rZXkgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNDgpOwp9CgoubWpyLXdnbS1wYXJhbS12YWx1ZSB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44Mik7Cn0KCi5tanItd2dtLW5vZGUtdmlzdWFsIHsKICAgIC0tbWpyLXdnbS1ub2RlLWFjY2VudDogcmdiYSgxMTUsIDE1NSwgMjU1LCAwLjg4KTsKICAgIC0tbWpyLXdnbS1ub2RlLWFjY2VudC1zb2Z0OiByZ2JhKDExNSwgMTU1LCAyNTUsIDAuMjIpOwogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogOHB4OwogICAgbWFyZ2luLXRvcDogMnB4OwogICAgcGFkZGluZzogOHB4OwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci13Z20tbm9kZS1hY2NlbnQpIDM0JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpKTsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpLAogICAgICAgIDAgMTBweCAyNHB4IHJnYmEoMCwgMCwgMCwgMC4yNCk7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItd2dtLW5vZGUtYWNjZW50LXNvZnQpIDEwMCUsIHRyYW5zcGFyZW50KSwgcmdiYSg0NCwgNTYsIDg4LCAwLjIpKSwKICAgICAgICByZ2JhKDEzLCAxNiwgMjQsIDAuODUpOwp9CgoubWpyLXdnbS1ub2RlLXZpc3VhbDo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgZGlzcGxheTogYmxvY2s7CiAgICBoZWlnaHQ6IDJweDsKICAgIG1hcmdpbjogLThweCAtOHB4IDZweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweCA2cHggMCAwOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCB2YXIoLS1tanItd2dtLW5vZGUtYWNjZW50KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7Cn0KCi5tanItd2dtLW5vZGUtdmlzdWFsLmlzLW1vZGVsIHsKICAgIC0tbWpyLXdnbS1ub2RlLWFjY2VudDogcmdiYSgxMjQsIDE4NiwgMjU1LCAwLjkpOwogICAgLS1tanItd2dtLW5vZGUtYWNjZW50LXNvZnQ6IHJnYmEoNzAsIDEyMywgMTgxLCAwLjM0KTsKfQoKLm1qci13Z20tbm9kZS12aXN1YWwuaXMtc2FtcGxlciB7CiAgICAtLW1qci13Z20tbm9kZS1hY2NlbnQ6IHJnYmEoMTQzLCAyMjgsIDE2NywgMC45KTsKICAgIC0tbWpyLXdnbS1ub2RlLWFjY2VudC1zb2Z0OiByZ2JhKDY0LCAxMzMsIDg4LCAwLjM0KTsKfQoKLm1qci13Z20tbm9kZS12aXN1YWwuaXMtdGV4dCB7CiAgICAtLW1qci13Z20tbm9kZS1hY2NlbnQ6IHJnYmEoMjU1LCAxOTIsIDExNCwgMC45KTsKICAgIC0tbWpyLXdnbS1ub2RlLWFjY2VudC1zb2Z0OiByZ2JhKDE1NCwgMTAyLCA0OSwgMC4zNCk7Cn0KCi5tanItd2dtLW5vZGUtdmlzdWFsLmlzLW1lZGlhIHsKICAgIC0tbWpyLXdnbS1ub2RlLWFjY2VudDogcmdiYSgxNTQsIDE3MCwgMjU1LCAwLjkpOwogICAgLS1tanItd2dtLW5vZGUtYWNjZW50LXNvZnQ6IHJnYmEoODMsIDkzLCAxNjUsIDAuMzQpOwp9CgoubWpyLXdnbS1ub2RlLXZpc3VhbC5pcy1jb250cm9sIHsKICAgIC0tbWpyLXdnbS1ub2RlLWFjY2VudDogcmdiYSgyNTUsIDEzOSwgMTY5LCAwLjkpOwogICAgLS1tanItd2dtLW5vZGUtYWNjZW50LXNvZnQ6IHJnYmEoMTQ1LCA3MCwgOTUsIDAuMzQpOwp9CgoubWpyLXdnbS1ub2RlLXZpc3VhbC5pcy1sb2dpYyB7CiAgICAtLW1qci13Z20tbm9kZS1hY2NlbnQ6IHJnYmEoMTg4LCAxNjgsIDI1NSwgMC45KTsKICAgIC0tbWpyLXdnbS1ub2RlLWFjY2VudC1zb2Z0OiByZ2JhKDEwNSwgODYsIDE1MywgMC4zNCk7Cn0KCi5tanItd2dtLW5vZGUtdmlzdWFsLWhlYWRlciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZy1ib3R0b206IDZweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXdnbS1ub2RlLWFjY2VudCkgMjUlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpKTsKfQoKLm1qci13Z20tbm9kZS12aXN1YWwtdHlwZSB7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgY29sb3I6IHJnYmEoMjM2LCAyNDQsIDI1NSwgMC45NCk7CiAgICB0ZXh0LXNoYWRvdzogMCAxcHggMCByZ2JhKDAsIDAsIDAsIDAuMzUpOwp9CgoubWpyLXdnbS1ub2RlLXZpc3VhbC1pZCB7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBjb2xvcjogcmdiYSgxOTQsIDIxMywgMjU1LCAwLjc4KTsKfQoKLm1qci13Z20tbm9kZS1wb3J0cyB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOwogICAgZ2FwOiA4cHg7Cn0KCi5tanItd2dtLW5vZGUtcG9ydHMtY29sIHsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci13Z20tbm9kZS1wb3J0cy10aXRsZSB7CiAgICBtYXJnaW4tYm90dG9tOiA0cHg7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMmVtOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNDUpOwp9CgoubWpyLXdnbS1ub2RlLXBvcnRzLWxpc3QgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogM3B4Owp9CgoubWpyLXdnbS1ub2RlLXBvcnQsCi5tanItd2dtLW5vZGUtcG9ydC1lbXB0eSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgbWluLWhlaWdodDogMThweDsKICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjI0KTsKfQoKLm1qci13Z20tbm9kZS1wb3J0LWVtcHR5IHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjYpOwp9CgoubWpyLXdnbS1ub2RlLXBvcnQtZG90IHsKICAgIHdpZHRoOiA4cHg7CiAgICBoZWlnaHQ6IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgZmxleDogMCAwIGF1dG87CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KSBpbnNldDsKfQoKLm1qci13Z20tbm9kZS1wb3J0LWRvdC5pcy1pbiB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDEzNSwgMTk2LCAyNTUsIDAuOSk7Cn0KCi5tanItd2dtLW5vZGUtcG9ydC1kb3QuaXMtb3V0IHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTQ0LCAyMzgsIDE3NCwgMC45KTsKfQoKLm1qci13Z20tbm9kZS1wb3J0LW5hbWUgewogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc4KTsKfQoKLm1qci13Z20tbm9kZS1wb3J0LXR5cGUgewogICAgZmxleDogMCAwIGF1dG87CiAgICBtYXgtd2lkdGg6IDQ1JTsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXNpemU6IDlweDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAyZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgcGFkZGluZzogMXB4IDVweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7CiAgICBjb2xvcjogcmdiYSgyMjQsIDIzNiwgMjU1LCAwLjkpOwp9CgoubWpyLXdnbS1ub2RlLXdpZGdldHMgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogNHB4Owp9CgoubWpyLXdnbS1ub2RlLXdpZGdldHMtdGl0bGUgewogICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgZm9udC1zaXplOiAxMHB4OwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQ1KTsKfQoKLm1qci13Z20tbm9kZS13aWRnZXQsCi5tanItd2dtLW5vZGUtd2lkZ2V0LWVtcHR5IHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCg3MHB4LCAwLjQyZnIpIG1pbm1heCgwLCAxZnIpOwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nOiA0cHggNnB4OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsKfQoKLm1qci13Z20tbm9kZS13aWRnZXQgewogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBiYWNrZ3JvdW5kIDEyMG1zIGVhc2UsCiAgICAgICAgYm9yZGVyLWNvbG9yIDEyMG1zIGVhc2U7Cn0KCi5tanItd2dtLW5vZGUtd2lkZ2V0OmhvdmVyLAoubWpyLXdnbS1ub2RlLXdpZGdldDpmb2N1cy12aXNpYmxlIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOSk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICAgIG91dGxpbmU6IG5vbmU7Cn0KCi5tanItd2dtLW5vZGUtd2lkZ2V0LmlzLW9rIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSg3OSwgMjEwLCAxMjUsIDAuNyk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDc5LCAyMTAsIDEyNSwgMC4xNik7Cn0KCi5tanItd2dtLW5vZGUtd2lkZ2V0LmlzLWVycm9yIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDkwLCA5MCwgMC43KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCA5MCwgOTAsIDAuMTYpOwp9CgoubWpyLXdnbS1ub2RlLXdpZGdldC1lbXB0eSB7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzQpOwp9CgoubWpyLXdnbS1ub2RlLXdpZGdldC1rZXkgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTIpOwp9CgoubWpyLXdnbS1ub2RlLXdpZGdldC12YWx1ZSB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44OCk7Cn0KCi5tanItd2dtLW5vZGUtd2lkZ2V0LmlzLW11bHRpbGluZSB7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgIGFsaWduLWl0ZW1zOiBzdGFydDsKICAgIGdhcDogNHB4Owp9CgoubWpyLXdnbS1ub2RlLXdpZGdldC5pcy1tdWx0aWxpbmUgLm1qci13Z20tbm9kZS13aWRnZXQta2V5IHsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItd2dtLW5vZGUtd2lkZ2V0LmlzLW11bHRpbGluZSAubWpyLXdnbS1ub2RlLXdpZGdldC12YWx1ZSB7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwogICAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7CiAgICBsaW5lLWhlaWdodDogMS4zNTsKICAgIG1heC1oZWlnaHQ6IDkuMmVtOwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIHBhZGRpbmctcmlnaHQ6IDJweDsKfQoKLm1qci13Z20tbm9kZS13aWRnZXQuaXMtbXVsdGlsaW5lLmlzLXRleHQtZmllbGQgLm1qci13Z20tbm9kZS13aWRnZXQtdmFsdWUgewogICAgbWF4LWhlaWdodDogMTZlbTsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ7Cn0KCi5tanItd2dtLW5vZGUtd2lkZ2V0LW1vcmUgewogICAgZm9udC1zaXplOiAxMHB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40Nik7CiAgICB0ZXh0LWFsaWduOiByaWdodDsKfQoKQG1lZGlhIChtYXgtd2lkdGg6IDgyMHB4KSB7CiAgICAubWpyLXdnbS0tbGFyZ2UgLm1qci13Z20tZGV0YWlscyB7CiAgICAgICAgd2lkdGg6IG1pbigzODBweCwgY2FsYygxMDAlIC0gMjBweCkpOwogICAgfQoKICAgIC5tanItd2dtLW5vZGUtcG9ydHMgewogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgfQp9CgoubWpyLXdzLXNlYXJjaC13cmFwIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZmxleC1zaHJpbms6IDA7CiAgICBwYWRkaW5nOiA2cHggOHB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwp9CgoubWpyLXdzLXNlYXJjaC1pY29uIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDE2cHg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5tanItd3Mtc2VhcmNoIHsKICAgIGZsZXg6IDE7CiAgICBwYWRkaW5nOiA0cHggMjhweCA0cHggMjZweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4zNSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44NSk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBvdXRsaW5lOiBub25lOwp9CgoubWpyLXdzLXNlYXJjaDo6cGxhY2Vob2xkZXIgewogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yOCk7Cn0KCi5tanItd3Mtc2VhcmNoOmZvY3VzIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSg5OSwgMTU1LCAyNTUsIDAuNSk7Cn0KCi5tanItd3Mtc2VhcmNoLWNsZWFyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHJpZ2h0OiAxNHB4OwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIHdpZHRoOiAxOHB4OwogICAgaGVpZ2h0OiAxOHB4OwogICAgcGFkZGluZzogMDsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKfQoKLm1qci13cy1zZWFyY2gtY2xlYXI6aG92ZXIgewogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7Cn0KCi5tanItd3Mtbm9kZXMtbGlzdCB7CiAgICBmbGV4OiAxOwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIHBhZGRpbmc6IDRweCAwOwp9CgoubWpyLXdzLW5vZGUtcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBwYWRkaW5nOiA1cHggMTBweCA1cHggMTJweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgbWluLWhlaWdodDogMzJweDsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xczsKfQoKLm1qci13cy1ub2RlLXJvdzpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwp9CgoubWpyLXdzLW5vZGUtcm93LXR5cGUgewogICAgZmxleDogMTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzgpOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKfQoKLm1qci13cy1ub2RlLXJvdy10aXRsZSB7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQpOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIG1heC13aWR0aDogODBweDsKICAgIGZsZXgtc2hyaW5rOiAwOwp9CgoubWpyLXdzLW5vZGUtbG9jYXRlIHsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgd2lkdGg6IDIycHg7CiAgICBoZWlnaHQ6IDIycHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgcGFkZGluZzogMDsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIG9wYWNpdHk6IDA7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIG9wYWNpdHkgMC4xcywKICAgICAgICBjb2xvciAwLjFzLAogICAgICAgIGJhY2tncm91bmQgMC4xczsKfQoKLm1qci13cy1ub2RlLXJvdzpob3ZlciAubWpyLXdzLW5vZGUtbG9jYXRlIHsKICAgIG9wYWNpdHk6IDE7Cn0KCi5tanItd3Mtbm9kZS1sb2NhdGU6aG92ZXIgewogICAgY29sb3I6ICM2MzliZmY7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDk5LCAxNTUsIDI1NSwgMC4xNSk7Cn0KCi8qIC0tIE5vZGUgc2VjdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5tanItd3MtdHJlZS1pdGVtIHsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKfQoubWpyLXdzLXRyZWUtaXRlbSA+IC5tanItd3Mtbm9kZSB7CiAgICBib3JkZXItYm90dG9tOiBub25lOwp9Ci5tanItd3MtdHJlZS1pdGVtLS1zdWJncmFwaCB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCwgIzViOGFmMCkgNCUsIHRyYW5zcGFyZW50IDk2JSk7Cn0KLm1qci13cy1ub2RlIHsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKfQovKiBTdWJ0bGUgaGlnaGxpZ2h0IHdoZW4gdGhpcyBub2RlIG1hdGNoZXMgdGhlIGN1cnJlbnQgZ3JhcGggc2VsZWN0aW9uLiAqLwoubWpyLXdzLW5vZGUuaXMtc2VsZWN0ZWQtZnJvbS1ncmFwaCB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjEwLCA5MCwgMC4wOCk7CiAgICBib3gtc2hhZG93OiBpbnNldCAycHggMCAwIDAgcmdiYSgyNTUsIDIxMCwgOTAsIDAuNzUpOwp9Ci5tanItd3Mtbm9kZS5pcy1zZWxlY3RlZC1mcm9tLWdyYXBoIC5tanItd3Mtbm9kZS1oZWFkZXIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsICNmZmQ0NWEgMTglLCB2YXIoLS1tanItc3VyZmFjZS0xLCAjMmEyYTJhKSA4MiUpOwp9Ci5tanItd3Mtbm9kZS5pcy1zZWxlY3RlZC1mcm9tLWdyYXBoIC5tanItd3Mtbm9kZS10eXBlIHsKICAgIGNvbG9yOiAjZmZkNDVhOwp9Ci5tanItd3Mtbm9kZS5pcy1zZWxlY3RlZC1mcm9tLWdyYXBoIC5tanItd3Mtbm9kZS10aXRsZSB7CiAgICBjb2xvcjogcmdiYSgyNTUsIDIyNCwgMTMwLCAwLjg4KTsKfQoubWpyLXdzLW5vZGUuaXMtc2VsZWN0ZWQtZnJvbS1ncmFwaCAubWpyLXdzLW5vZGUtdG9nZ2xlLAoubWpyLXdzLW5vZGUuaXMtc2VsZWN0ZWQtZnJvbS1ncmFwaCAubWpyLXdzLWxvY2F0ZSwKLm1qci13cy1ub2RlLmlzLXNlbGVjdGVkLWZyb20tZ3JhcGggLm1qci13cy1ub2RlLWtpbmQgewogICAgY29sb3I6ICNmZmQ0NWE7Cn0KLm1qci13cy1zaWRlYmFyLXJlc2l6ZXIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAwOwogICAgYm90dG9tOiAwOwogICAgd2lkdGg6IDE0cHg7CiAgICB6LWluZGV4OiAyOwogICAgY3Vyc29yOiBldy1yZXNpemU7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKfQoKLm1qci13cy1zaWRlYmFyLXJlc2l6ZXI6OmJlZm9yZSB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNTAlOwogICAgbGVmdDogNTAlOwogICAgd2lkdGg6IDRweDsKICAgIGhlaWdodDogNTZweDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7CiAgICBvcGFjaXR5OiAwOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBvcGFjaXR5IDAuMTVzIGVhc2UsCiAgICAgICAgYmFja2dyb3VuZCAwLjE1cyBlYXNlOwp9CgoubWpyLXdzLXNpZGViYXIub3Blbjpob3ZlciAubWpyLXdzLXNpZGViYXItcmVzaXplcjo6YmVmb3JlLAoubWpyLXdzLXNpZGViYXIuaXMtcmVzaXppbmcgLm1qci13cy1zaWRlYmFyLXJlc2l6ZXI6OmJlZm9yZSwKLm1qci13cy1zaWRlYmFyLXJlc2l6ZXIuaXMtZHJhZ2dpbmc6OmJlZm9yZSB7CiAgICBvcGFjaXR5OiAxOwp9CgoubWpyLXdzLXNpZGViYXIuaXMtcmVzaXppbmcgLm1qci13cy1zaWRlYmFyLXJlc2l6ZXI6OmJlZm9yZSwKLm1qci13cy1zaWRlYmFyLXJlc2l6ZXI6aG92ZXI6OmJlZm9yZSwKLm1qci13cy1zaWRlYmFyLXJlc2l6ZXIuaXMtZHJhZ2dpbmc6OmJlZm9yZSB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzQpOwp9CgoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0icmlnaHQiXSAubWpyLXdzLXNpZGViYXItcmVzaXplciB7CiAgICByaWdodDogMDsKfQoKLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImxlZnQiXSAubWpyLXdzLXNpZGViYXItcmVzaXplciB7CiAgICBsZWZ0OiAwOwp9CgoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci13cy1zaWRlYmFyLXJlc2l6ZXIgewogICAgZGlzcGxheTogbm9uZTsKfQoubWpyLXdzLW5vZGUtaGVhZGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peCgKICAgICAgICBpbiBzcmdiLAogICAgICAgIHZhcigtLW1qci1zdXJmYWNlLTAsICMxZTFlMWUpIDQwJSwKICAgICAgICB2YXIoLS1tanItc3VyZmFjZS0xLCAjMmEyYTJhKSA2MCUKICAgICk7CiAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xMnMgZWFzZTsKfQoubWpyLXdzLW5vZGUuaXMtY29sbGFwc2libGUgLm1qci13cy1ub2RlLWhlYWRlciB7CiAgICBjdXJzb3I6IHBvaW50ZXI7Cn0KLm1qci13cy1ub2RlLmlzLWNvbGxhcHNpYmxlIC5tanItd3Mtbm9kZS1oZWFkZXI6aG92ZXIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KAogICAgICAgIGluIHNyZ2IsCiAgICAgICAgdmFyKC0tbWpyLXN1cmZhY2UtMCwgIzFlMWUxZSkgMjglLAogICAgICAgIHZhcigtLW1qci1zdXJmYWNlLTEsICMyYTJhMmEpIDcyJQogICAgKTsKfQoubWpyLXdzLW5vZGUuaXMtY29sbGFwc2libGUuaXMtY29sbGFwc2VkIC5tanItd3Mtbm9kZS1oZWFkZXI6aG92ZXIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KAogICAgICAgIGluIHNyZ2IsCiAgICAgICAgdmFyKC0tbWpyLWFjY2VudCwgIzViOGFmMCkgOCUsCiAgICAgICAgdmFyKC0tbWpyLXN1cmZhY2UtMSwgIzJhMmEyYSkgOTIlCiAgICApOwp9Ci5tanItd3Mtbm9kZS10b2dnbGUgewogICAgZmxleDogMCAwIGF1dG87Cn0KLm1qci13cy1ub2RlLXRpdGxlLXdyYXAgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAxcHg7Cn0KLm1qci13cy1ub2RlLXR5cGUgewogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cn0KLm1qci13cy1ub2RlLXRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNDgpOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKfQoubWpyLXdzLW5vZGUta2luZCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDRweDsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgbWF4LXdpZHRoOiAxMTBweDsKICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCwgIzViOGFmMCkgMzglLCB0cmFuc3BhcmVudCA2MiUpOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCwgIzViOGFmMCkgMTIlLCB0cmFuc3BhcmVudCA4OCUpOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCAjNWI4YWYwKSA3OCUsICNmZmZmZmYgMjIlKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMS4yOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoubWpyLXdzLW5vZGUta2luZCAucGkgewogICAgZm9udC1zaXplOiAxMHB4Owp9Ci5tanItd3Mtbm9kZS1raW5kLWNvdW50IHsKICAgIG1pbi13aWR0aDogMTRweDsKICAgIHBhZGRpbmc6IDAgM3B4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44Mik7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KLm1qci13cy1ub2RlLmlzLWNvbGxhcHNlZCAubWpyLXdzLW5vZGUtYm9keSB7CiAgICBkaXNwbGF5OiBub25lOwp9Ci5tanItd3Mtbm9kZS1ib2R5IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiA0cHg7CiAgICBwYWRkaW5nOiA2cHggMTBweDsKfQoubWpyLXdzLW5vZGUtZW1wdHkgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKTsKICAgIHBhZGRpbmc6IDRweCAwOwp9CgovKiAtLSBOZXN0ZWQgbm9kZXMgKGluc2lkZSBzdWJncmFwaHMpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5tanItd3Mtbm9kZS0tbmVzdGVkIHsKICAgIGJvcmRlci1sZWZ0OiAycHggc29saWQgcmdiYSg5MSwgMTM4LCAyNDAsIDAuMzUpOwp9Ci5tanItd3Mtbm9kZS0tbmVzdGVkIC5tanItd3Mtbm9kZS1oZWFkZXIgewogICAgcGFkZGluZy1sZWZ0OiAxNnB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KAogICAgICAgIGluIHNyZ2IsCiAgICAgICAgdmFyKC0tbWpyLWFjY2VudCwgIzViOGFmMCkgNSUsCiAgICAgICAgdmFyKC0tbWpyLXN1cmZhY2UtMSwgIzJhMmEyYSkgOTUlCiAgICApOwp9Ci5tanItd3Mtbm9kZS0tbmVzdGVkLmlzLWNvbGxhcHNpYmxlIC5tanItd3Mtbm9kZS1oZWFkZXI6aG92ZXIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KAogICAgICAgIGluIHNyZ2IsCiAgICAgICAgdmFyKC0tbWpyLWFjY2VudCwgIzViOGFmMCkgMTAlLAogICAgICAgIHZhcigtLW1qci1zdXJmYWNlLTEsICMyYTJhMmEpIDkwJQogICAgKTsKfQoKLyogLS0gU3ViZ3JhcGggY2hpbGRyZW4gZ3JvdXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLm1qci13cy1jaGlsZHJlbi10b2dnbGUgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDZweDsKICAgIHdpZHRoOiAxMDAlOwogICAgcGFkZGluZzogNXB4IDEwcHggNXB4IDIwcHg7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoCiAgICAgICAgaW4gc3JnYiwKICAgICAgICB2YXIoLS1tanItYWNjZW50LCAjNWI4YWYwKSA2JSwKICAgICAgICB2YXIoLS1tanItc3VyZmFjZS0wLCAjMWUxZTFlKSA5NCUKICAgICk7CiAgICBib3JkZXI6IG5vbmU7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7CiAgICBjb2xvcjogdmFyKC0tbWpyLWFjY2VudCwgIzViOGFmMCk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgb3BhY2l0eTogMC44OwogICAgdHJhbnNpdGlvbjoKICAgICAgICBvcGFjaXR5IDAuMXMgZWFzZSwKICAgICAgICBiYWNrZ3JvdW5kIDAuMXMgZWFzZTsKfQoubWpyLXdzLWNoaWxkcmVuLXRvZ2dsZS0tbmVzdGVkIHsKICAgIHBhZGRpbmctbGVmdDogMjhweDsKfQoubWpyLXdzLWNoaWxkcmVuLXRvZ2dsZTpob3ZlciB7CiAgICBvcGFjaXR5OiAxOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KAogICAgICAgIGluIHNyZ2IsCiAgICAgICAgdmFyKC0tbWpyLWFjY2VudCwgIzViOGFmMCkgMTIlLAogICAgICAgIHZhcigtLW1qci1zdXJmYWNlLTAsICMxZTFlMWUpIDg4JQogICAgKTsKfQoubWpyLXdzLWNoaWxkcmVuLXRvZ2dsZVthcmlhLWV4cGFuZGVkPSJ0cnVlIl0gewogICAgb3BhY2l0eTogMTsKfQoubWpyLXdzLWNoaWxkcmVuIHsKICAgIGJvcmRlci1sZWZ0OiAycHggc29saWQgcmdiYSg5MSwgMTM4LCAyNDAsIDAuMjUpOwogICAgbWFyZ2luLWxlZnQ6IDZweDsKICAgIHBhZGRpbmctbGVmdDogNnB4Owp9CgoubWpyLXdzLXdpZGdldC1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgZ2FwOiA4cHg7Cn0KLm1qci13cy13aWRnZXQtcm93LS1ibG9jayB7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAycHg7Cn0KLm1qci13cy13aWRnZXQtcm93LS1ibG9jayAubWpyLXdzLXdpZGdldC1sYWJlbCB7CiAgICBmbGV4OiBub25lOwogICAgcGFkZGluZy10b3A6IDA7Cn0KLm1qci13cy13aWRnZXQtcm93LS1ibG9jayAubWpyLXdzLXdpZGdldC1pbnB1dCB7CiAgICB3aWR0aDogMTAwJTsKfQoubWpyLXdzLXdpZGdldC1sYWJlbCB7CiAgICBmbGV4OiAwIDAgODBweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGNvbG9yOiB2YXIoLS1kZXNjcmlwLXRleHQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NSkpOwogICAgcGFkZGluZy10b3A6IDVweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cn0KLm1qci13cy13aWRnZXQtaW5wdXQgewogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMDsKfQoubWpyLXdzLWlucHV0IHsKICAgIHdpZHRoOiAxMDAlOwogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktaW5wdXQtYmcsICMyMjIpOwogICAgY29sb3I6IHZhcigtLWlucHV0LXRleHQsICNkZGQpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBwYWRkaW5nOiA0cHggNnB4OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICBvdXRsaW5lOiBub25lOwogICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDEyMG1zIGVhc2U7Cn0KLm1qci13cy1pbnB1dDpmb2N1cyB7CiAgICBib3JkZXItY29sb3I6IHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpOwp9Ci5tanItd3MtdGV4dGFyZWEgewogICAgcmVzaXplOiBub25lOwogICAgbWluLWhlaWdodDogMjhweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICBvdmVyZmxvdy15OiBoaWRkZW47Cn0KLm1qci13cy10ZXh0LXdyYXBwZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDJweDsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDA7Cn0KLm1qci13cy10ZXh0LXdyYXBwZXIgLm1qci13cy10ZXh0YXJlYSB7CiAgICB3aWR0aDogMTAwJTsKfQoubWpyLXdzLWV4cGFuZC1idG4gewogICAgYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgYm9yZGVyOiBub25lOwogICAgY29sb3I6IHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgcGFkZGluZzogMCA0cHg7CiAgICBvcGFjaXR5OiAwLjg7Cn0KLm1qci13cy1leHBhbmQtYnRuOmhvdmVyIHsKICAgIG9wYWNpdHk6IDE7CiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKfQoubWpyLXdzLXJlYWRvbmx5IHsKICAgIG9wYWNpdHk6IDAuNTsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoubWpyLXdzLWNoZWNrYm94IHsKICAgIGFjY2VudC1jb2xvcjogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7CiAgICB3aWR0aDogMTZweDsKICAgIGhlaWdodDogMTZweDsKICAgIG1hcmdpbi10b3A6IDRweDsKfQoubWpyLXdzLXRvZ2dsZS1sYWJlbCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKfQoKLyogLS0gTG9jYXRlIGJ1dHRvbiBpbnNpZGUgbm9kZSBoZWFkZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLm1qci13cy1sb2NhdGUgewogICAgd2lkdGg6IDI0cHggIWltcG9ydGFudDsKICAgIGhlaWdodDogMjRweCAhaW1wb3J0YW50OwogICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgb3BhY2l0eTogMC41Owp9Ci5tanItd3MtbG9jYXRlOmhvdmVyIHsKICAgIG9wYWNpdHk6IDE7Cn0KCi8qIC0tIFJ1biBidXR0b24gc3RhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5tanItbWZ2LXJ1bi1jb250cm9scyB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDRweDsKfQoubWpyLW1mdi1ydW4tYnRuIC5waSB7CiAgICBjb2xvcjogdmFyKC0tbWpyLXN0YXR1cy1zdWNjZXNzLCAjNGNhZjUwKTsKfQoubWpyLW1mdi1ydW4tYnRuLnJ1bm5pbmcgLnBpIHsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42NSkpOwp9Ci5tanItbWZ2LXJ1bi1idG4uc3RvcHBpbmcgLnBpIHsKICAgIGNvbG9yOiB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZmE3MjYpOwp9Ci5tanItbWZ2LXJ1bi1idG4uZXJyb3IgLnBpIHsKICAgIGNvbG9yOiAjZjQ0MzM2Owp9CgoubWpyLW1mdi1zdG9wLWJ0biAucGkgewogICAgY29sb3I6ICNlZjUzNTA7Cn0KLm1qci1tZnYtc3RvcC1idG4uYWN0aXZlIC5waSB7CiAgICBjb2xvcjogI2ZmOGE2NTsKfQoubWpyLW1mdi1zdG9wLWJ0bi5zdG9wcGluZyAucGkgewogICAgY29sb3I6IHZhcigtLW1qci1zdGF0dXMtd2FybmluZywgI2ZmYTcyNik7Cn0KCi8qIC0tIEZsb2F0aW5nIFZpZXdlciBzaW1wbGUgdmlkZW8gcGxheWVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLm1qci1tZnYtc2ltcGxlLXBsYXllciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLmlzLWF1ZGlvIHsKICAgIGJhY2tncm91bmQ6IHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgMjAlIDIwJSwgcmdiYSg5NSwgMTc5LCAyNTUsIDAuMiksIHJnYmEoMTgsIDIwLCAyOCwgMC45NSkpOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLWF1ZGlvLWJhY2tkcm9wIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMnB4OwogICAgdGV4dC1zaGFkb3c6IDAgMnB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjQ1KTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgcGFkZGluZzogMThweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci1jb250cm9scyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAxMnB4OwogICAgcmlnaHQ6IDEycHg7CiAgICBib3R0b206IDEycHg7CiAgICB6LWluZGV4OiAzMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nOiA5cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDE0cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHRvcCwgcmdiYSgxMCwgMTAsIDE0LCAwLjc2KSwgcmdiYSgxNiwgMTYsIDI0LCAwLjU1KSk7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTsKICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLXJvdyB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci1zZWVrIHsKICAgIC0tbWpyLXNlZWstcGN0OiAwJTsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogNnB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBvdXRsaW5lOiBub25lOwogICAgYm9yZGVyOiBub25lOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIHRvIHJpZ2h0LAogICAgICAgICNmZjJmNTIgMCUsCiAgICAgICAgI2ZmMmY1MiB2YXIoLS1tanItc2Vlay1wY3QpLAogICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNCkgdmFyKC0tbWpyLXNlZWstcGN0KSwKICAgICAgICByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjQpIDEwMCUKICAgICk7CiAgICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItc2Vlazo6LXdlYmtpdC1zbGlkZXItdGh1bWIgewogICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgd2lkdGg6IDEycHg7CiAgICBoZWlnaHQ6IDEycHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zNSk7CiAgICBiYWNrZ3JvdW5kOiAjZmYyZjUyOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLXNlZWs6Oi1tb3otcmFuZ2UtdGh1bWIgewogICAgd2lkdGg6IDEycHg7CiAgICBoZWlnaHQ6IDEycHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zNSk7CiAgICBiYWNrZ3JvdW5kOiAjZmYyZjUyOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLWJ0biB7CiAgICB3aWR0aDogMzBweDsKICAgIGhlaWdodDogMzBweDsKICAgIG1pbi13aWR0aDogMzBweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIyKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7Cn0KCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItYnRuIC5waSB7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk1KTsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci1idG4uaXMtZGlzYWJsZWQsCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItc2Vlay5pcy1kaXNhYmxlZCB7CiAgICBvcGFjaXR5OiAwLjQ1OwogICAgY3Vyc29yOiBkZWZhdWx0Owp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLXRpbWUgewogICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkyKTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7Cn0KCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItZnJhbWUgewogICAgbWFyZ2luLXJpZ2h0OiAycHg7CiAgICBwYWRkaW5nOiAzcHggOHB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgY29udGFpbmVyLXR5cGU6IGlubGluZS1zaXplOwp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdC0tYXVkaW8gewogICAgYmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAyMCUgMjAlLCByZ2JhKDk1LCAxNzksIDI1NSwgMC4yKSwgcmdiYSgxOCwgMjAsIDI4LCAwLjk1KSk7Cn0KCi5tanItbWZ2LXBsYXllci1hdWRpby1iYWNrZHJvcCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjJweDsKICAgIHRleHQtc2hhZG93OiAwIDJweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC40NSk7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHBhZGRpbmc6IDE4cHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9scyB7CiAgICB6LWluZGV4OiAzMDsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXSwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSB7CiAgICBsZWZ0OiA4cHg7CiAgICByaWdodDogOHB4OwogICAgYm90dG9tOiA4cHg7CiAgICBwYWRkaW5nOiA4cHg7CiAgICBnYXA6IDZweDsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXSAubWpyLXZpZGVvLXJvdy0tdG9wLAoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0ic3RhY2tlZCJdIC5tanItdmlkZW8tcm93LS10b3AgewogICAgZ2FwOiA4cHg7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0gLm1qci12aWRlby10aW1lZ3JvdXAsCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0gLm1qci12aWRlby10aW1lZ3JvdXAgewogICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgZ2FwOiA2cHg7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0gLm1qci12aWRlby1yb3ctLWJvdHRvbSwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLXJvdy0tYm90dG9tIHsKICAgIGZsZXgtd3JhcDogbm93cmFwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGdhcDogNnB4Owp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0iY29tcGFjdCJdIC5tanItdmlkZW8tYm90dG9tLAoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0ic3RhY2tlZCJdIC5tanItdmlkZW8tYm90dG9tIHsKICAgIGZsZXgtc2hyaW5rOiAxOwogICAgZmxleC13cmFwOiBub3dyYXA7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0gLm1qci12aWRlby10cmFuc3BvcnQsCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0gLm1qci12aWRlby10cmFuc3BvcnQgewogICAgZmxleC13cmFwOiBub3dyYXA7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0gLm1qci12aWRlby1ncm91cCwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLWdyb3VwIHsKICAgIGZsZXgtd3JhcDogbm93cmFwOwp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0iY29tcGFjdCJdIC5tanItdmlkZW8tc2Vlay13cmFwLAoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0ic3RhY2tlZCJdIC5tanItdmlkZW8tc2Vlay13cmFwIHsKICAgIG1pbi13aWR0aDogMDsKfQoKLyogVGhlIE1GViB1c2VzIHRoZSAiLS12aWV3ZXIiIGNvbnRyb2wgdmFyaWFudCwgd2hpY2ggKHVubGlrZSAiLS12aWV3ZXJiYXIiKQogICBkb2VzIG5vdCBzaXplIHRoZSBuYXRpdmUgc2VlayBpbnB1dCBhbmQgcGFja3MgZnJhbWUvaW4vc2Vlay9vdXQvdGltZSBpbnRvIGEKICAgc2luZ2xlIHJvdy4gSW4gdGhlIG5hcnJvdyBNRlYgdGhlIHNlZWsgd3JhcCB0aGVuIGNvbGxhcHNlcyB0byB+MHB4IHdpZGUgYW5kCiAgIHRoZSBuYXRpdmUgaW5wdXQgdG8gMHB4IHRhbGwsIGxlYXZpbmcgYWxtb3N0IG5vIGNsaWNrIC8gZHJhZyB0YXJnZXQgZm9yCiAgIHNjcnViYmluZy4gR2l2ZSB0aGUgc2VlayBpdHMgb3duIGZ1bGwtd2lkdGggcm93IHdpdGggYSB1c2FibGUgaGl0IGFyZWEuICovCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlciAubWpyLXZpZGVvLXJvdy0tdG9wIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgcm93LWdhcDogNDJweDsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyIC5tanItdmlkZW8tcm93LS10b3AgLm1qci12aWRlby1zZWVrLXdyYXAgewogICAgb3JkZXI6IDEwOwogICAgZmxleDogMSAxIDEwMCU7CiAgICB3aWR0aDogMTAwJTsKICAgIG1pbi13aWR0aDogMDsKICAgIG1pbi1oZWlnaHQ6IDQycHg7CiAgICBwYWRkaW5nLXRvcDogNnB4Owp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXIgLm1qci12aWRlby1yYW5nZS0tc2VlayB7CiAgICBoZWlnaHQ6IDIwcHg7CiAgICBhY2NlbnQtY29sb3I6IHJnYmEoMjE0LCAyMTgsIDIyNCwgMC45Mik7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlciAubWpyLXZpZGVvLXNlZWstem9uZXMgewogICAgaGVpZ2h0OiAxMHB4Owp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXIgLm1qci12aWRlby1zZWVrLWhhbmRsZSB7CiAgICB3aWR0aDogMTZweDsKICAgIGhlaWdodDogMjhweDsKICAgIHRvcDogMjBweDsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXSAubWpyLXZpZGVvLWJhci10aW1lbGluZSwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLWJhci10aW1lbGluZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QKICAgIC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0KICAgIC5tanItdmlkZW8tYmFyLXRpbWVsaW5lCiAgICAubWpyLXZpZGVvLXNlZWstd3JhcCwKLm1qci1tZnYtcGxheWVyLWhvc3QKICAgIC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0KICAgIC5tanItdmlkZW8tYmFyLXRpbWVsaW5lCiAgICAubWpyLXZpZGVvLXNlZWstd3JhcCB7CiAgICBvcmRlcjogLTE7CiAgICBmbGV4OiAxIDEgMTAwJTsKICAgIHdpZHRoOiAxMDAlOwp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdAogICAgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXQogICAgLm1qci12aWRlby1iYXItdGltZWxpbmUKICAgIC5tanItdmlkZW8tZ3JvdXAtLWluLAoubWpyLW1mdi1wbGF5ZXItaG9zdAogICAgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXQogICAgLm1qci12aWRlby1iYXItdGltZWxpbmUKICAgIC5tanItdmlkZW8tZ3JvdXAtLW91dCwKLm1qci1tZnYtcGxheWVyLWhvc3QKICAgIC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0KICAgIC5tanItdmlkZW8tYmFyLXRpbWVsaW5lCiAgICAubWpyLXZpZGVvLWdyb3VwLS1pbiwKLm1qci1tZnYtcGxheWVyLWhvc3QKICAgIC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0KICAgIC5tanItdmlkZW8tYmFyLXRpbWVsaW5lCiAgICAubWpyLXZpZGVvLWdyb3VwLS1vdXQgewogICAgZmxleDogMCAxIGF1dG87Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0gLm1qci12aWRlby1yYW5nZS1jb3VudCwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXSAubWpyLXZpZGVvLWZyYW1lIHsKICAgIG1pbi13aWR0aDogYXV0bzsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLXJhbmdlLWNvdW50IHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLWZyYW1lIHsKICAgIG1pbi13aWR0aDogYXV0bzsKICAgIHBhZGRpbmc6IDNweCA2cHg7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0gLm1qci12aWRlby1idG4tLWluLAoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0ic3RhY2tlZCJdIC5tanItdmlkZW8tYnRuLS1vdXQsCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0gLm1qci12aWRlby1idG4tLW1hcmsgewogICAgbWluLXdpZHRoOiAzMnB4Owp9CgpAY29udGFpbmVyIChtYXgtd2lkdGg6IDkwMHB4KSB7CiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzIHsKICAgICAgICBsZWZ0OiA4cHg7CiAgICAgICAgcmlnaHQ6IDhweDsKICAgICAgICBib3R0b206IDhweDsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgZ2FwOiA2cHg7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1yb3ctLXRvcCB7CiAgICAgICAgZ2FwOiA4cHg7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby10aW1lZ3JvdXAgewogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgICBnYXA6IDZweDsKICAgIH0KCiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLXJvdy0tYm90dG9tIHsKICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGdhcDogNnB4OwogICAgfQoKICAgIC5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tYm90dG9tIHsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgIH0KCiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLXRyYW5zcG9ydCB7CiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1ncm91cCB7CiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1zZWVrLXdyYXAgewogICAgICAgIG1pbi13aWR0aDogMDsKICAgIH0KCiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1iYXItdGltZWxpbmUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QKICAgICAgICAubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIKICAgICAgICAubWpyLXZpZGVvLWJhci10aW1lbGluZQogICAgICAgIC5tanItdmlkZW8tc2Vlay13cmFwIHsKICAgICAgICBvcmRlcjogLTE7CiAgICAgICAgZmxleDogMSAxIDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICB9Cn0KCkBjb250YWluZXIgKG1heC13aWR0aDogNjgwcHgpIHsKICAgIC5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHMgewogICAgICAgIHBhZGRpbmc6IDZweDsKICAgIH0KCiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWJ0biB7CiAgICAgICAgcGFkZGluZzogNXB4IDhweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1udW0gewogICAgICAgIHBhZGRpbmc6IDRweCA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgfQoKICAgIC5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tdGltZSwKICAgIC5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tZnJhbWUsCiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLXJhbmdlLWNvdW50IHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICB9Cn0KCi8qIC0tIFNldHRpbmdzIGJ1dHRvbiBhY3RpdmUgc3RhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5tanItbWZ2LXNldHRpbmdzLWJ0bi5hY3RpdmUgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoCiAgICAgICAgaW4gc3JnYiwKICAgICAgICB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKSA1NSUsCiAgICAgICAgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSkKICAgICk7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvci1taXgoCiAgICAgICAgaW4gc3JnYiwKICAgICAgICB2YXIoLS1tanItc3VyZmFjZS0yLCAjMzMzKSA3MCUsCiAgICAgICAgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZikgMTglCiAgICApOwp9Ci5tanItbWZ2LXNldHRpbmdzLWJ0bi5hY3RpdmUgLnBpIHsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKfQoKLyogLS0gQ2xvc2UgYnV0dG9uIChyZWQpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoubWpyLW1mdiAubWpyLW1mdi1jbG9zZS1idG4gewogICAgY29sb3I6ICNlODUwNTA7Cn0KLm1qci1tZnYgLm1qci1tZnYtY2xvc2UtYnRuOmhvdmVyIHsKICAgIGNvbG9yOiAjZmY2YjZiOwogICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyMzIsIDgwLCA4MCwgMC4xNSk7Cn0KCi8qIC0tIEVtcHR5IHN0YXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLm1qci1tZnYtZW1wdHkgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHBhZGRpbmc6IDEycHg7Cn0KCi8qIC0tIENvbXBhcmUgbGFiZWxzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLm1qci1tZnYtbGFiZWwgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiA4cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNTgpOwogICAgY29sb3I6ICNmZmY7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgcGFkZGluZzogMnB4IDdweDsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgei1pbmRleDogMjA7CiAgICBsZXR0ZXItc3BhY2luZzogMC40cHg7Cn0KCi5tanItbWZ2LWxhYmVsLmxhYmVsLWxlZnQgewogICAgbGVmdDogOHB4Owp9Ci5tanItbWZ2LWxhYmVsLmxhYmVsLXJpZ2h0IHsKICAgIHJpZ2h0OiA4cHg7Cn0KCi8qIC0tIEFCIGRpdmlkZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLm1qci1tZnYtYWItZGl2aWRlciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDA7CiAgICBib3R0b206IDA7CiAgICB3aWR0aDogMC41cHg7CiAgICBjdXJzb3I6IGNvbC1yZXNpemU7CiAgICB6LWluZGV4OiAxMDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44OCk7CiAgICBib3gtc2hhZG93OgogICAgICAgIDAgMCAwIDAuNXB4IHJnYmEoMCwgMCwgMCwgMC40KSwKICAgICAgICAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAxMDBtcyBlYXNlOwp9CgoubWpyLW1mdi1hYi1kaXZpZGVyOjpiZWZvcmUgewogICAgY29udGVudDogIiI7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDA7CiAgICBib3R0b206IDA7CiAgICBsZWZ0OiA1MCU7CiAgICB3aWR0aDogMTJweDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKfQoKLm1qci1tZnYtYWItZGl2aWRlcjpob3ZlciwKLm1qci1tZnYtYWItZGl2aWRlcjphY3RpdmUgewogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIE1GViBHZW9tZXRyeSAmIExheW91dCBDbGFzc2VzIChyZXBsYWNlcyBpbmxpbmUgc3R5bGVzIGluIEZsb2F0aW5nVmlld2VyLmpzKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKLyogTWFpbiBNRlYgY29udGFpbmVyIGdlb21ldHJ5ICovCi5tanItbWZ2IHsKICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgIHRvcDogdmFyKC0tbWpyLW1mdi10b3Atb2Zmc2V0LCA2MHB4KTsKICAgIHJpZ2h0OiAyMHB4OwogICAgd2lkdGg6IDY0MHB4OwogICAgaGVpZ2h0OiAzNjBweDsKICAgIG1pbi13aWR0aDogMjIwcHg7CiAgICBtaW4taGVpZ2h0OiAxNjBweDsKICAgIC8qIEFsd2F5cyBmbGV4OyB2aXNpYmlsaXR5ICsgb3BhY2l0eSBjb250cm9sIHNob3cvaGlkZSBzbyBDU1MgdHJhbnNpdGlvbnMgd29yay4KICAgICAgIHBvaW50ZXItZXZlbnRzOm5vbmUgd2hpbGUgaGlkZGVuIHByZXZlbnRzIGFjY2lkZW50YWwgaW50ZXJhY3Rpb24uICovCiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIHJlc2l6ZTogYm90aDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB6LWluZGV4OiAxMDAwMDsKICAgIC8qIEhpZGRlbiBzdGF0ZSAqLwogICAgb3BhY2l0eTogMDsKICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC02cHgpIHNjYWxlKDAuOTgpOwogICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIHJpZ2h0OwogICAgdHJhbnNpdGlvbjoKICAgICAgICBvcGFjaXR5IDAuMThzIGVhc2Utb3V0LAogICAgICAgIHRyYW5zZm9ybSAwLjE4cyBlYXNlLW91dCwKICAgICAgICB2aXNpYmlsaXR5IDBzIGxpbmVhciAwLjE4czsKfQoKLm1qci1tZnYubWpyLW1mdi0tcmVzaXppbmcgewogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItbWZ2LmlzLXZpc2libGUgewogICAgb3BhY2l0eTogMTsKICAgIHZpc2liaWxpdHk6IHZpc2libGU7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKSBzY2FsZSgxKTsKICAgIHRyYW5zaXRpb246CiAgICAgICAgb3BhY2l0eSAwLjE4cyBlYXNlLW91dCwKICAgICAgICB0cmFuc2Zvcm0gMC4xOHMgZWFzZS1vdXQsCiAgICAgICAgdmlzaWJpbGl0eSAwcyBsaW5lYXIgMHM7Cn0KCi8qIE1lZGlhIGVsZW1lbnRzIChpbWcvdmlkZW8pIHNpemluZyB2YXJpYW50cyAqLwoubWpyLW1mdi1tZWRpYSB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgbWF4LXdpZHRoOiAxMDAlOwogICAgbWF4LWhlaWdodDogMTAwJTsKICAgIG9iamVjdC1maXQ6IGNvbnRhaW47CiAgICBvYmplY3QtcG9zaXRpb246IGNlbnRlcjsKfQoKLm1qci1tZnYtbWVkaWEtLWZpdC1oZWlnaHQgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBtYXgtaGVpZ2h0OiAxMDAlOwogICAgb2JqZWN0LWZpdDogY29udGFpbjsKICAgIG9iamVjdC1wb3NpdGlvbjogY2VudGVyOwp9CgoubWpyLW1mdi1tZWRpYS0tZmlsbCB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIG1heC1oZWlnaHQ6IDEwMCU7CiAgICBvYmplY3QtZml0OiBjb250YWluOwogICAgb2JqZWN0LXBvc2l0aW9uOiBjZW50ZXI7CiAgICBkaXNwbGF5OiBibG9jazsKfQoKLyogQXVkaW8gY2FyZCBpbnNpZGUgTUZWICovCi5tanItbWZ2LWF1ZGlvLWNhcmQgewogICAgd2lkdGg6IG1pbig5MiUsIDU2MHB4KTsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAxMHB4OwogICAgcGFkZGluZzogMTJweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE2MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAyKSk7CiAgICBib3gtc2hhZG93OiAwIDZweCAxNnB4IHJnYmEoMCwgMCwgMCwgMC4zNSk7Cn0KCi5tanItbWZ2LWF1ZGlvLWhlYWQgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1tZnYtYXVkaW8taWNvbiB7CiAgICBjb2xvcjogdmFyKC0tbWpyLWJhZGdlLWF1ZGlvLCAjZmY5ODAwKTsKICAgIG9wYWNpdHk6IDAuOTU7Cn0KCi5tanItbWZ2LWF1ZGlvLXRpdGxlIHsKICAgIG1pbi13aWR0aDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwp9CgoubWpyLW1mdi1hdWRpby1wbGF5ZXIgewogICAgd2lkdGg6IDEwMCU7Cn0KCi5tanItbWZ2LXNpZGUtcGFuZWwgLm1qci1tZnYtYXVkaW8tY2FyZCwKLm1qci1tZnYtYWItbGF5ZXIgLm1qci1tZnYtYXVkaW8tY2FyZCwKLm1qci1tZnYtZ3JpZC1jZWxsIC5tanItbWZ2LWF1ZGlvLWNhcmQgewogICAgd2lkdGg6IGNhbGMoMTAwJSAtIDIwcHgpOwp9CgovKiBWaWRlbyBlbGVtZW50IHNwZWNpZmljIHN0eWxlcyAqLwoubWpyLW1mdi1tZWRpYS12aWRlbyB7CiAgICAvKiBJbmhlcml0cyBmcm9tIC5tanItbWZ2LW1lZGlhIG9yIC5tanItbWZ2LW1lZGlhLS1maWxsICovCn0KCi8qIE5vZGUgU3RyZWFtIC0gY3VycmVudGx5LXN0cmVhbWVkIG5vZGUgYmFkZ2UgKHRvcC1sZWZ0IG9mIGNvbnRlbnQgYXJlYSwKICAgZm9sbG93aW5nIHRoZSBzYW1lIG92ZXJsYXkgcGF0dGVybiBhcyAubWpyLW1mdi1nZW5pbmZvKS4gKi8KLm1qci1tZnYtbm9kZS1vdmVybGF5IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogOHB4OwogICAgbGVmdDogOHB4OwogICAgei1pbmRleDogMTI7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGluZS1oZWlnaHQ6IDEuMzsKICAgIGNvbG9yOiAjZTZmM2ZmOwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjY1KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTIwLCAxNzAsIDI0MCwgMC40NSk7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAxNnB4KTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cn0KLyogR2VuIGluZm8gb3ZlcmxheSAtIGFsbCBtb2RlcyBzaGFyZSBiYXNlIGxheW91dCAqLwoubWpyLW1mdi1nZW5pbmZvLAoubWpyLW1mdi1nZW5pbmZvLWEsCi5tanItbWZ2LWdlbmluZm8tYiB7CiAgICBkaXNwbGF5OiBub25lOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogOHB4OwogICAgcmlnaHQ6IDhweDsKICAgIGJvdHRvbTogOHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjY1KTsKICAgIGNvbG9yOiAjZmZmOwogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBtYXgtaGVpZ2h0OiA0MCU7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgb3ZlcnNjcm9sbC1iZWhhdmlvci15OiBjb250YWluOwogICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgdG91Y2gtYWN0aW9uOiBwYW4teTsKICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOwogICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC40KTsKfQoKLyogS2VlcCBHZW4gSW5mbyBhYm92ZSBjdXN0b20gc2ltcGxlLXBsYXllciBjb250cm9scyB3aGVuIHByZXNlbnQuICovCi5tanItbWZ2LWdlbmluZm8ubWpyLW1mdi1nZW5pbmZvLS1hYm92ZS1wbGF5ZXIsCi5tanItbWZ2LWdlbmluZm8tYS5tanItbWZ2LWdlbmluZm8tLWFib3ZlLXBsYXllciwKLm1qci1tZnYtZ2VuaW5mby1iLm1qci1tZnYtZ2VuaW5mby0tYWJvdmUtcGxheWVyIHsKICAgIHRvcDogOHB4OwogICAgYm90dG9tOiBhdXRvOwogICAgbWF4LWhlaWdodDogbWluKDQ1JSwgY2FsYygxMDAlIC0gMTI0cHgpKTsKfQoKLyogRmFsbGJhY2s6IHdoZW4gc2ltcGxlLXBsYXllciBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIGdlbmluZm8gb3ZlcmxheSwKICAgbW92ZSBpdCB1cCBldmVuIGlmIHRoZSBtb2RpZmllciBjbGFzcyB3YXMgbm90IGF0dGFjaGVkLiAqLwoubWpyLW1mdi1zaW1wbGUtcGxheWVyICsgLm1qci1tZnYtZ2VuaW5mbywKLm1qci1tZnYtc2ltcGxlLXBsYXllciArIC5tanItbWZ2LWdlbmluZm8tYSwKLm1qci1tZnYtc2ltcGxlLXBsYXllciArIC5tanItbWZ2LWdlbmluZm8tYiB7CiAgICB0b3A6IDhweDsKICAgIGJvdHRvbTogYXV0bzsKICAgIG1heC1oZWlnaHQ6IG1pbig0NSUsIGNhbGMoMTAwJSAtIDEyNHB4KSk7Cn0KCi8qIEFCIG1vZGUgb3ZlcmxheXMgYXJlIGF0dGFjaGVkIGF0IGNvbnRhaW5lciBsZXZlbDsgc2hpZnQgdGhlbSB3aGVuIEFCIGxheWVycyB1c2Ugc2ltcGxlLXBsYXllci4gKi8KLm1qci1tZnYtYWItY29udGFpbmVyOmhhcygubWpyLW1mdi1hYi1sYXllciAubWpyLW1mdi1zaW1wbGUtcGxheWVyKSAubWpyLW1mdi1nZW5pbmZvLWEsCi5tanItbWZ2LWFiLWNvbnRhaW5lcjpoYXMoLm1qci1tZnYtYWItbGF5ZXIgLm1qci1tZnYtc2ltcGxlLXBsYXllcikgLm1qci1tZnYtZ2VuaW5mby1iIHsKICAgIHRvcDogOHB4OwogICAgYm90dG9tOiBhdXRvOwogICAgbWF4LWhlaWdodDogbWluKDQ1JSwgY2FsYygxMDAlIC0gMTI0cHgpKTsKfQoKLyogU2hhcmVkIHN0eWxlIGZvciBhbGwgZ2VuIGluZm8gb3ZlcmxheSB2YXJpYW50cyAqLwoubWpyLW1mdi1nZW5pbmZvIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1hIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1iIHN0cm9uZyB7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbWFyZ2luLXJpZ2h0OiA0cHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk1KTsgLyogZGVmYXVsdCAtIG92ZXJyaWRkZW4gcGVyIGZpZWxkIGJlbG93ICovCn0KCi8qIFBlci1maWVsZCBsYWJlbCBjb2xvcnMgKi8KLm1qci1tZnYtZ2VuaW5mbyBbZGF0YS1maWVsZD0icHJvbXB0Il0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWEgW2RhdGEtZmllbGQ9InByb21wdCJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1iIFtkYXRhLWZpZWxkPSJwcm9tcHQiXSBzdHJvbmcgewogICAgY29sb3I6ICM3ZWM4ZmY7Cn0gLyogYmx1ZSAgIC0gUHJvbXB0ICovCgoubWpyLW1mdi1nZW5pbmZvIFtkYXRhLWZpZWxkPSJzZWVkIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWEgW2RhdGEtZmllbGQ9InNlZWQiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYiBbZGF0YS1maWVsZD0ic2VlZCJdIHN0cm9uZyB7CiAgICBjb2xvcjogI2ZmZDQ3YTsKfSAvKiBhbWJlciAgLSBTZWVkICAgKi8KCi5tanItbWZ2LWdlbmluZm8gW2RhdGEtZmllbGQ9Im1vZGVsIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWEgW2RhdGEtZmllbGQ9Im1vZGVsIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgW2RhdGEtZmllbGQ9Im1vZGVsIl0gc3Ryb25nIHsKICAgIGNvbG9yOiAjN2RkYThhOwp9IC8qIGdyZWVuICAtIE1vZGVsICAqLwoKLm1qci1tZnYtZ2VuaW5mbyBbZGF0YS1maWVsZD0ibG9yYSJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1hIFtkYXRhLWZpZWxkPSJsb3JhIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgW2RhdGEtZmllbGQ9ImxvcmEiXSBzdHJvbmcgewogICAgY29sb3I6ICNkNDhjZmY7Cn0gLyogdmlvbGV0IC0gTG9SQSAgICovCgoubWpyLW1mdi1nZW5pbmZvIFtkYXRhLWZpZWxkPSJzYW1wbGVyIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWEgW2RhdGEtZmllbGQ9InNhbXBsZXIiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYiBbZGF0YS1maWVsZD0ic2FtcGxlciJdIHN0cm9uZyB7CiAgICBjb2xvcjogI2ZmOWY3YTsKfSAvKiBvcmFuZ2UgLSBTYW1wbGVyICovCgoubWpyLW1mdi1nZW5pbmZvIFtkYXRhLWZpZWxkPSJzY2hlZHVsZXIiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYSBbZGF0YS1maWVsZD0ic2NoZWR1bGVyIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgW2RhdGEtZmllbGQ9InNjaGVkdWxlciJdIHN0cm9uZyB7CiAgICBjb2xvcjogI2ZmN2E5ZjsKfSAvKiBwaW5rICAgLSBTY2hlZHVsZXIgKi8KCi5tanItbWZ2LWdlbmluZm8gW2RhdGEtZmllbGQ9ImNmZyJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1hIFtkYXRhLWZpZWxkPSJjZmciXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYiBbZGF0YS1maWVsZD0iY2ZnIl0gc3Ryb25nIHsKICAgIGNvbG9yOiAjN2E5ZmZmOwp9IC8qIGluZGlnbyAtIENGRyAqLwoKLm1qci1tZnYtZ2VuaW5mbyBbZGF0YS1maWVsZD0ic3RlcCJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1hIFtkYXRhLWZpZWxkPSJzdGVwIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgW2RhdGEtZmllbGQ9InN0ZXAiXSBzdHJvbmcgewogICAgY29sb3I6ICM3YWZmZDQ7Cn0gLyogdGVhbCAgIC0gU3RlcCAqLwoKLm1qci1tZnYtZ2VuaW5mbyBbZGF0YS1maWVsZD0iZ2VuVGltZSJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1hIFtkYXRhLWZpZWxkPSJnZW5UaW1lIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgW2RhdGEtZmllbGQ9ImdlblRpbWUiXSBzdHJvbmcgewogICAgY29sb3I6ICNlMGZmN2E7Cn0gLyogbGltZSAgIC0gR2VuIFRpbWUgKi8KCi5tanItbWZ2LWdlbmluZm8gZGl2LAoubWpyLW1mdi1nZW5pbmZvLWEgZGl2LAoubWpyLW1mdi1nZW5pbmZvLWIgZGl2IHsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgbWFyZ2luLWJvdHRvbTogM3B4Owp9CgoubWpyLW1mdi1nZW5pbmZvIGRpdjpsYXN0LWNoaWxkLAoubWpyLW1mdi1nZW5pbmZvLWEgZGl2Omxhc3QtY2hpbGQsCi5tanItbWZ2LWdlbmluZm8tYiBkaXY6bGFzdC1jaGlsZCB7CiAgICBtYXJnaW4tYm90dG9tOiAwOwp9CgovKiBTaW1wbGUgbW9kZSBjb250YWluZXIgKi8KLm1qci1tZnYtc2ltcGxlLWNvbnRhaW5lciB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgovKiBBQiBtb2RlIGNvbnRhaW5lciAqLwoubWpyLW1mdi1hYi1jb250YWluZXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYmFja2dyb3VuZDogIzAwMDsKfQoKLyogQUIgbW9kZSBsYXllcnMgKi8KLm1qci1tZnYtYWItbGF5ZXIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwp9CgoubWpyLW1mdi1hYi1sYXllci0tYiB7CiAgICAvKiBjbGlwLXBhdGggYXBwbGllZCBpbmxpbmUgZm9yIGR5bmFtaWMgZGl2aWRlciBwb3NpdGlvbiAqLwp9CgovKiBTaWRlLWJ5LXNpZGUgbW9kZSBjb250YWluZXIgKi8KLm1qci1tZnYtc2lkZS1jb250YWluZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgZ2FwOiAycHg7CiAgICBiYWNrZ3JvdW5kOiAjMTExOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLyogU2lkZS1ieS1zaWRlIGhhbGYgcGFuZWxzICovCi5tanItbWZ2LXNpZGUtcGFuZWwgewogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgYmFja2dyb3VuZDogIzBkMGQwZDsKfQoKLyogR3JpZCBjb21wYXJlICgyLTIpIGNvbnRhaW5lciAqLwoubWpyLW1mdi1ncmlkLWNvbnRhaW5lciB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOwogICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAxZnIgMWZyOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBnYXA6IDJweDsKICAgIGJhY2tncm91bmQ6ICMxMTE7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgovKiBHcmlkIGNlbGxzICovCi5tanItbWZ2LWdyaWQtY2VsbCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJhY2tncm91bmQ6ICMwZDBkMGQ7CiAgICBtaW4td2lkdGg6IDA7CiAgICBtaW4taGVpZ2h0OiAwOwp9CgovKiBHZW4gaW5mbyBvdmVybGF5cyBmb3IgZ3JpZCBjZWxscyBDIGFuZCBEICovCi5tanItbWZ2LWdlbmluZm8tYywKLm1qci1tZnYtZ2VuaW5mby1kIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiA4cHg7CiAgICByaWdodDogOHB4OwogICAgYm90dG9tOiA4cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNjUpOwogICAgY29sb3I6ICNmZmY7CiAgICBwYWRkaW5nOiA4cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIG1heC1oZWlnaHQ6IDQwJTsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yLXk6IGNvbnRhaW47CiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICB0b3VjaC1hY3Rpb246IHBhbi15OwogICAgd29yZC1icmVhazogYnJlYWstd29yZDsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjQpOwp9CgoubWpyLW1mdi1nZW5pbmZvLWMgc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgc3Ryb25nIHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBtYXJnaW4tcmlnaHQ6IDRweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpOwp9CgovKiBQZXItZmllbGQgbGFiZWwgY29sb3JzIGZvciBDL0QgZ2VuIGluZm8gb3ZlcmxheXMgKi8KLm1qci1tZnYtZ2VuaW5mby1jIFtkYXRhLWZpZWxkPSJwcm9tcHQiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tZCBbZGF0YS1maWVsZD0icHJvbXB0Il0gc3Ryb25nIHsKICAgIGNvbG9yOiAjN2VjOGZmOwp9Ci5tanItbWZ2LWdlbmluZm8tYyBbZGF0YS1maWVsZD0ic2VlZCJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1kIFtkYXRhLWZpZWxkPSJzZWVkIl0gc3Ryb25nIHsKICAgIGNvbG9yOiAjZmZkNDdhOwp9Ci5tanItbWZ2LWdlbmluZm8tYyBbZGF0YS1maWVsZD0ibW9kZWwiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tZCBbZGF0YS1maWVsZD0ibW9kZWwiXSBzdHJvbmcgewogICAgY29sb3I6ICM3ZGRhOGE7Cn0KLm1qci1tZnYtZ2VuaW5mby1jIFtkYXRhLWZpZWxkPSJsb3JhIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgW2RhdGEtZmllbGQ9ImxvcmEiXSBzdHJvbmcgewogICAgY29sb3I6ICNkNDhjZmY7Cn0KLm1qci1tZnYtZ2VuaW5mby1jIFtkYXRhLWZpZWxkPSJzYW1wbGVyIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgW2RhdGEtZmllbGQ9InNhbXBsZXIiXSBzdHJvbmcgewogICAgY29sb3I6ICNmZjlmN2E7Cn0KLm1qci1tZnYtZ2VuaW5mby1jIFtkYXRhLWZpZWxkPSJzY2hlZHVsZXIiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tZCBbZGF0YS1maWVsZD0ic2NoZWR1bGVyIl0gc3Ryb25nIHsKICAgIGNvbG9yOiAjZmY3YTlmOwp9Ci5tanItbWZ2LWdlbmluZm8tYyBbZGF0YS1maWVsZD0iY2ZnIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgW2RhdGEtZmllbGQ9ImNmZyJdIHN0cm9uZyB7CiAgICBjb2xvcjogIzdhOWZmZjsKfQoubWpyLW1mdi1nZW5pbmZvLWMgW2RhdGEtZmllbGQ9InN0ZXAiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tZCBbZGF0YS1maWVsZD0ic3RlcCJdIHN0cm9uZyB7CiAgICBjb2xvcjogIzdhZmZkNDsKfQoKLyogR2VuIGluZm8gYWN0aXZlIHN0YXRlIC0gYnV0dG9uIGdsb3dzIHdoZW4gYXQgbGVhc3Qgb25lIGZpZWxkIGlzIHNlbGVjdGVkICovCi5tanItbWZ2IC5tanItaWNvbi1idG4uaXMtb24gewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKHZhcigtLW1qci1ncm91cC1hY2NlbnQsIDk1LCAxNzksIDI1NSksIDAuNTUpOwogICAgY29sb3I6IHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIsICMzMzMpIDgwJSwgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZikgMTUlKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZikgMjUlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWZ2IC5tanItaWNvbi1idG4uaXMtb3BlbiB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKSA2MiUsICNmZmZmZmYgMTIlKTsKICAgIGNvbG9yOiAjZWVmN2ZmOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSg5NSwgMTc5LCAyNTUsIDAuMjgpLCByZ2JhKDk1LCAxNzksIDI1NSwgMC4xNCkpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDAgMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSwKICAgICAgICAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpIDI2JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1pY29uLWJ0bi5pcy1vcGVuIHsKICAgIGNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7Cn0KCi8qIEdlbiBpbmZvIGRyb3Bkb3duIHBhbmVsICovCi5tanItbWZ2LWdlbi1kcm9wZG93biB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB6LWluZGV4OiAxMDAwMTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xLCAjMmEyYTJhKSA5NiUsIHRyYW5zcGFyZW50KTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIHBhZGRpbmc6IDZweCA0cHg7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMTgpOwogICAgYm94LXNoYWRvdzoKICAgICAgICAwIDhweCAyNHB4IHJnYmEoMCwgMCwgMCwgMC41NSksCiAgICAgICAgMCAycHggNnB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBtaW4td2lkdGg6IDE1MHB4OwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDhweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig4cHgpOwp9CgoubWpyLW1mdi1nZW4tZHJvcGRvd246OmJlZm9yZSB7CiAgICBjb250ZW50OiAiR0VOIElORk8iOwogICAgZGlzcGxheTogYmxvY2s7CiAgICBmb250LXNpemU6IDlweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC44cHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjM1KTsKICAgIHBhZGRpbmc6IDJweCAxMHB4IDZweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMSk7CiAgICBtYXJnaW4tYm90dG9tOiA0cHg7Cn0KCi5tanItbWZ2LWdlbi1kcm9wZG93bi5pcy12aXNpYmxlIHsKICAgIGRpc3BsYXk6IGJsb2NrOwp9CgoubWpyLW1mdi1nZW4tZHJvcGRvd24tcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBwYWRkaW5nOiA1cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMTAwbXMgZWFzZTsKICAgIHVzZXItc2VsZWN0OiBub25lOwp9CgoubWpyLW1mdi1nZW4tZHJvcGRvd24tcm93OmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNyk7Cn0KCi5tanItbWZ2LWdlbi1kcm9wZG93bi1yb3cgaW5wdXRbdHlwZT0iY2hlY2tib3giXSB7CiAgICB3aWR0aDogMTNweDsKICAgIGhlaWdodDogMTNweDsKICAgIGFjY2VudC1jb2xvcjogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmbGV4LXNocmluazogMDsKfQoKLyogVHJhbnNmb3JtIGZvciBwYW4vem9vbSAtIGFwcGxpZWQgaW5saW5lIGZvciBkeW5hbWljIHZhbHVlcyAqLwoubWpyLW1mdi1tZWRpYS0tdHJhbnNmb3JtIHsKICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjsKfQoKLyogQ3Vyc29yIGZlZWRiYWNrIGZvciBwYW4vem9vbSBpbnRlcmFjdGlvbnMgKi8KLm1qci1tZnYtY29udGVudC0tZ3JhYiB7CiAgICBjdXJzb3I6IGdyYWI7Cn0KCi5tanItbWZ2LWNvbnRlbnQtLWdyYWJiaW5nIHsKICAgIGN1cnNvcjogZ3JhYmJpbmc7Cn0KCi8qIFNpZGViYXIgdGFiIGJ1dHRvbjogYWxsb3cgMi1saW5lIGxhYmVsIHZpYSBcbiBpbiBsYWJlbCBzdHJpbmcgKi8KLm1ham9vci1hc3NldHMtdGFiLWJ1dHRvbiAuc2lkZS1iYXItYnV0dG9uLWxhYmVsIHsKICAgIHdoaXRlLXNwYWNlOiBwcmUtbGluZTsKfQoKLyogQm90dG9tLXBhbmVsIGdlbmVyYXRlZCBmZWVkOiBjb21wYWN0IGNhcmRzIHdpdGggb25seSB0aGUgZ2VuZXJhdGlvbi10aW1lIHBpbGwgKi8KLm1qci1ib3R0b20tZmVlZCB7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWFtLWdyaWQtc2Nyb2xsIHsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgbWluLWhlaWdodDogMDsKICAgIGhlaWdodDogMTAwJTsKICAgIG92ZXJmbG93OiBhdXRvOwogICAgc2Nyb2xsYmFyLWd1dHRlcjogc3RhYmxlOwogICAgb3ZlcnNjcm9sbC1iZWhhdmlvci15OiBjb250YWluOwogICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgdG91Y2gtYWN0aW9uOiBwYW4teTsKICAgIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoOwogICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluOwogICAgc2Nyb2xsYmFyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMiwgIzJmMzU0MCkgNzAlLCAjN2Y4ZWEzIDMwJSkKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCwgIzE2MTkxZikgODglLCAjMDAwIDEyJSk7Cn0KCi5tanItYm90dG9tLWZlZWQgLm1qci1hbS1ncmlkLXNjcm9sbDo6LXdlYmtpdC1zY3JvbGxiYXIsCi5tanItZmVlZC1ncm91cC1wb3BvdmVyLWdyaWQ6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIHdpZHRoOiAxMHB4OwogICAgaGVpZ2h0OiAxMHB4Owp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItYW0tZ3JpZC1zY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iLAoubWpyLWZlZWQtZ3JvdXAtcG9wb3Zlci1ncmlkOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMiwgIzJmMzU0MCkgNzAlLCAjN2Y4ZWEzIDMwJSk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMnB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWFtLWdyaWQtc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhci10cmFjaywKLm1qci1mZWVkLWdyb3VwLXBvcG92ZXItZ3JpZDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTAsICMxNjE5MWYpIDg4JSwgIzAwMCAxMiUpOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7Cn0KCi5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkIHsKICAgIGdhcDogNnB4ICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heChtaW4oMTAwJSwgMTMycHgpLCAxZnIpKSAhaW1wb3J0YW50OwogICAgbWluLWhlaWdodDogMDsKICAgIGhlaWdodDogYXV0bzsKICAgIGFsaWduLWNvbnRlbnQ6IHN0YXJ0Owp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZCwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmQgewogICAgYm9yZGVyLXJhZGl1czogMTJweCAhaW1wb3J0YW50OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA5MiUsICMwMDAgOCUpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4yMikgIWltcG9ydGFudDsKICAgIHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50Owp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZDpob3ZlciwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmQ6aG92ZXIgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiAwIDEwcHggMjRweCByZ2JhKDAsIDAsIDAsIDAuMjgpICFpbXBvcnRhbnQ7CgogICAgLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmQuaXMtc2VsZWN0ZWQgewogICAgICAgIGJveC1zaGFkb3c6CiAgICAgICAgICAgIDAgMCAwIDNweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKSA4MCUsIHZhcigtLWNvbnRlbnQtZmcpKSwKICAgICAgICAgICAgMCAwIDAgNnB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItY2FyZC1zZWxlY3Rpb24tY29sb3IpIDMwJSwgdHJhbnNwYXJlbnQpLAogICAgICAgICAgICAwIDAgMjBweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKSA0MCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAgICAgMCAxMHB4IDI4cHggcmdiYSgwLCAwLCAwLCAwLjI4KSAhaW1wb3J0YW50OwogICAgICAgIG91dGxpbmU6IDJweCBzb2xpZCB2YXIoLS1tanItY2FyZC1zZWxlY3Rpb24tY29sb3IpICFpbXBvcnRhbnQ7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDsKICAgIH0KfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gewogICAgb3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIC5tanItdGh1bWIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iIHsKICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7CiAgICBpc29sYXRpb246IGlzb2xhdGU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iOjpiZWZvcmUsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iOjphZnRlciwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIC5tanItdGh1bWI6OmJlZm9yZSwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIC5tanItdGh1bWI6OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAtMTsKICAgIHRyYW5zaXRpb246CiAgICAgICAgdHJhbnNmb3JtIDE0MG1zIGVhc2UsCiAgICAgICAgb3BhY2l0eSAxNDBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci10aHVtYjo6YmVmb3JlLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci10aHVtYjo6YmVmb3JlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDVweCwgNXB4KSBzY2FsZSgwLjk4NSk7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzKSksCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEsICMyMDI0MmIpIDg0JSwgIzAwMCAxNiUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjE2KTsKICAgIG9wYWNpdHk6IDAuOTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIC5tanItdGh1bWI6OmFmdGVyLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci10aHVtYjo6YWZ0ZXIgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTBweCwgMTBweCkgc2NhbGUoMC45Nyk7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNiksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMikpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wLCAjMTYxOTFmKSA4MiUsICMwMDAgMTglKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7CiAgICBib3gtc2hhZG93OiAwIDEycHggMjJweCByZ2JhKDAsIDAsIDAsIDAuMTQpOwogICAgb3BhY2l0eTogMC43NTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOmhvdmVyIC5tanItdGh1bWI6OmJlZm9yZSwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOmhvdmVyIC5tanItdGh1bWI6OmJlZm9yZSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg2cHgsIDZweCkgc2NhbGUoMC45ODUpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl06aG92ZXIgLm1qci10aHVtYjo6YWZ0ZXIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTpob3ZlciAubWpyLXRodW1iOjphZnRlciB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMnB4LCAxMnB4KSBzY2FsZSgwLjk3KTsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLXRodW1iIHsKICAgIGFzcGVjdC1yYXRpbzogMC45NSAvIDEgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA3MiUsICMwMDAgMjglKSAhaW1wb3J0YW50Owp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItdGh1bWItcGxheSB7CiAgICBiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoCiAgICAgICAgY2lyY2xlIGF0IGNlbnRlciwKICAgICAgICByZ2JhKDAsIDAsIDAsIDAuMTgpLAogICAgICAgIHJnYmEoMCwgMCwgMCwgMC4wNCkgMzglLAogICAgICAgIHRyYW5zcGFyZW50IDcwJQogICAgKTsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWJhZGdlLWV4dCwKLm1qci1ib3R0b20tZmVlZCAubWpyLWJhZGdlLXJhdGluZywKLm1qci1ib3R0b20tZmVlZCAubWpyLWJhZGdlLXRhZ3MgewogICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkyKTsKICAgIHRyYW5zZm9ybS1vcmlnaW46IHRvcCBsZWZ0Owp9CgovKiAtLSBGZWVkIGNhcmQgaW5mbzogZGVmYXVsdCBoaWRkZW4sIHRvZ2dsZWQgdmlhIG1qci1mZWVkLXNob3ctKiBjbGFzc2VzIG9uIC5tanItZ3JpZCAtLSAqLwoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZC1pbmZvIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDRweCA2cHggIWltcG9ydGFudDsKICAgIG1pbi13aWR0aDogMDsKfQoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZC5tanItZmVlZC1zaG93LWluZm8gLm1qci1jYXJkLWluZm8gewogICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKfQoKLyogRmVlZCBmaWxlbmFtZSAqLwoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZC1maWxlbmFtZSB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1maWxlbmFtZSAubWpyLWNhcmQtZmlsZW5hbWUgewogICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKfQoKLyogRmVlZCBkaW1lbnNpb25zIC8gZHVyYXRpb24gKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLW1ldGEtcmVzLAoubWpyLWJvdHRvbS1mZWVkIC5tanItbWV0YS1kdXJhdGlvbiB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1kaW1lbnNpb25zIC5tanItbWV0YS1yZXMsCi5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctZGltZW5zaW9ucyAubWpyLW1ldGEtZHVyYXRpb24gewogICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7Cn0KCi8qIEZlZWQgZGF0ZS90aW1lICovCi5tanItYm90dG9tLWZlZWQgLm1qci1tZXRhLWRhdGUsCi5tanItYm90dG9tLWZlZWQgLm1qci1tZXRhLXRpbWUtdmFsIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZC5tanItZmVlZC1zaG93LWRhdGUgLm1qci1tZXRhLWRhdGUsCi5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctZGF0ZSAubWpyLW1ldGEtdGltZS12YWwgewogICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7Cn0KCi8qIEZlZWQgZ2VuZXJhdGlvbiB0aW1lIGJhZGdlICovCi5tanItYm90dG9tLWZlZWQgLm1qci1tZXRhLWdlbnRpbWUgewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9Ci5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctZ2VudGltZSAubWpyLW1ldGEtZ2VudGltZSB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleCAhaW1wb3J0YW50Owp9CgovKiBGZWVkIHdvcmtmbG93IGRvdCAqLwoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZC1kb3Qtd3JhcHBlciB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1kb3QgLm1qci1jYXJkLWRvdC13cmFwcGVyIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7Cn0KCi8qIEZlZWQgYmFkZ2VzICovCi5tanItYm90dG9tLWZlZWQgLm1qci1iYWRnZS1leHQgewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9Ci5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctYmFkZ2VzLWV4dCAubWpyLWJhZGdlLWV4dCB7CiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7Cn0KCi5tanItYm90dG9tLWZlZWQgLm1qci1iYWRnZS1yYXRpbmcgewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9Ci5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctYmFkZ2VzLXJhdGluZyAubWpyLWJhZGdlLXJhdGluZyB7CiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7Cn0KCi5tanItYm90dG9tLWZlZWQgLm1qci1iYWRnZS10YWdzIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZC5tanItZmVlZC1zaG93LWJhZGdlcy10YWdzIC5tanItYmFkZ2UtdGFncyB7CiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7Cn0KCi8qIEZlZWQgbWV0YSByb3cgc3R5bGluZyAtIGZsZXggbGF5b3V0IHNvIHZpc2libGUgaXRlbXMgc3RheSBzZXBhcmF0ZWQgKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLWNhcmQtbWV0YS1yb3cgewogICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50OwogICAgZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDsKICAgIGdhcDogNXB4ICFpbXBvcnRhbnQ7CiAgICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICBtaW4td2lkdGg6IDAgIWltcG9ydGFudDsKICAgIHBhZGRpbmctcmlnaHQ6IDAgIWltcG9ydGFudDsKICAgIGxpbmUtaGVpZ2h0OiAxLjMgIWltcG9ydGFudDsKICAgIG9wYWNpdHk6IDAuNzggIWltcG9ydGFudDsKICAgIGZvbnQtc2l6ZTogMC44ZW0gIWltcG9ydGFudDsKICAgIC8qIHRleHQtb3ZlcmZsb3cgZWxsaXBzaXMgZG9lc24ndCBhcHBseSBvbiBhIGZsZXggY29udGFpbmVyIGl0c2VsZiAqLwp9Ci8qIEVhY2ggbWV0YSBzcGFuIHRydW5jYXRlcyBpbmRpdmlkdWFsbHkgaWYgdG9vIGxvbmcgKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLWNhcmQtbWV0YS1yb3cgPiBzcGFuIHsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmbGV4LXNocmluazogMTsKfQovKiBHZW50aW1lIGJhZGdlIGFuZCB0aW1lIHZhbHVlIHNob3VsZCBzdGF5IHZpc2libGUgKGRvbid0IHNocmluayBhd2F5KSAqLwoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZC1tZXRhLXJvdyA+IC5tanItbWV0YS1nZW50aW1lLAoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZC1tZXRhLXJvdyA+IC5tanItbWV0YS10aW1lLXZhbCB7CiAgICBmbGV4LXNocmluazogMDsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1nZW50aW1lIC5tanItbWV0YS1nZW50aW1lIHsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDNweDsKICAgIHBhZGRpbmc6IDNweCA3cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTAsIDE0LCAyMCwgMC43NCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOwogICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4yMik7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogODAwICFpbXBvcnRhbnQ7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMTVlbTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTgpOwogICAgdGV4dC1zaGFkb3c6CiAgICAgICAgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC45KSwKICAgICAgICAwIDAgMTBweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwp9CgovKiAtLSBBdWRpbyAvIDNEIHBsYWNlaG9sZGVyIHRodW1ibmFpbHMgaW4gdGhlIGZlZWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKLyogQXVkaW8gY2FyZHMgc2hvdyB0aGUgd2F2ZWZvcm0gc3ByaXRlOyBnaXZlIGl0IGEgZGlzdGluY3QgYmFja2dyb3VuZCBzbyBpdAogICBkb2Vzbid0IGxvb2sgbGlrZSBhIGJyb2tlbiBpbWFnZSBwbGFjZWhvbGRlciBpbiB0aGUgZmVlZC4gKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanIta2luZD0iYXVkaW8iXSAubWpyLXRodW1iLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1leHQ9Im1wMyJdIC5tanItdGh1bWIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWV4dD0id2F2Il0gLm1qci10aHVtYiwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZXh0PSJvZ2ciXSAubWpyLXRodW1iLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1leHQ9ImZsYWMiXSAubWpyLXRodW1iIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA2MCUsICMxYTFmMmIgNDAlKSAhaW1wb3J0YW50Owp9CgovKiAzRCBtb2RlbCBjYXJkcyB1c2UgYW4gaWNvbiBwbGFjZWhvbGRlciAtIGFkZCBhIHN1YnRsZSBncmFkaWVudCBzbyB0aGV5IHJlYWQKICAgYXMgaW50ZW50aW9uYWwgcmF0aGVyIHRoYW4gbWlzc2luZy4gKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanIta2luZD0ibW9kZWwzZCJdIC5tanItdGh1bWIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWV4dD0iZ2xiIl0gLm1qci10aHVtYiwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZXh0PSJnbHRmIl0gLm1qci10aHVtYiwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZXh0PSJvYmoiXSAubWpyLXRodW1iLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1leHQ9ImZieCJdIC5tanItdGh1bWIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDUwJSwgIzBkMTExNyA1MCUpICFpbXBvcnRhbnQ7Cn0KCi8qIC0tIEZlZWQgZ3JvdXAgYnV0dG9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKLm1qci1ib3R0b20tZmVlZCAubWpyLWZlZWQtZ3JvdXAtYnV0dG9uIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMzRweDsKICAgIHJpZ2h0OiA2cHg7CiAgICB6LWluZGV4OiAxMTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBtaW4td2lkdGg6IDI4cHg7CiAgICBtaW4taGVpZ2h0OiAyOHB4OwogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTAsIDE0LCAyMCwgMC43NCk7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk2KTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMjQpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247CiAgICB0cmFuc2l0aW9uOgogICAgICAgIGJhY2tncm91bmQgMTIwbXMgZWFzZSwKICAgICAgICB0cmFuc2Zvcm0gODBtcyBlYXNlOwp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItZmVlZC1ncm91cC1idXR0b246aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgxOCwgMjQsIDM0LCAwLjkpOwp9CgoubWpyLWZlZWQtZ3JvdXAtYnV0dG9uLWljb24gewogICAgZm9udC1zaXplOiAxMXB4OwogICAgb3BhY2l0eTogMC45Owp9CgoubWpyLWZlZWQtZ3JvdXAtYnV0dG9uLWNvdW50IHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLyogLS0gRmVlZCBncm91cCBwb3BvdmVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgoubWpyLWZlZWQtZ3JvdXAtcG9wb3ZlciB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1tZW51LWJnLCAjMjIyKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvciwgIzNhM2EzYSk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1sZywgOHB4KTsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDI4cHggcmdiYSgwLCAwLCAwLCAwLjQ1KTsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5tanItZmVlZC1ncm91cC1wb3BvdmVyLXRpdGxlIHsKICAgIHBhZGRpbmc6IDhweCAxMHB4IDRweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwogICAgbWFyZ2luLWJvdHRvbTogOHB4Owp9CgoubWpyLWZlZWQtZ3JvdXAtcG9wb3Zlci1ncmlkIHsKICAgIHBhZGRpbmc6IDRweCA4cHggMTBweDsKICAgIG1heC1oZWlnaHQ6IDM2MHB4OwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICBzY3JvbGxiYXItZ3V0dGVyOiBzdGFibGU7CiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47CiAgICBzY3JvbGxiYXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yLCAjMmYzNTQwKSA3MCUsICM3ZjhlYTMgMzAlKQogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wLCAjMTYxOTFmKSA4OCUsICMwMDAgMTIlKTsKfQoKLm1qci1mZWVkLWdyb3VwLWJ1dHRvbi1pY29uLAoubWpyLWZlZWQtZ3JvdXAtYnV0dG9uLWNvdW50IHsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoubWpyLWZlZWQtZ3JvdXAtbWVtYmVyLWNhcmQgewogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWZlZWQtZ3JvdXAtbWVtYmVyLWNhcmQgLm1qci10aHVtYiB7CiAgICBhc3BlY3QtcmF0aW86IDEgLyAxICFpbXBvcnRhbnQ7Cn0KCi5tanItZmVlZC1ncm91cC1tZW1iZXItY2FyZCAubWpyLWNhcmQtaW5mbyB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1zdGFjay1ncm91cC1idXR0b24gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAzNHB4OwogICAgcmlnaHQ6IDZweDsKICAgIHotaW5kZXg6IDExOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDRweDsKICAgIG1pbi13aWR0aDogMjhweDsKICAgIG1pbi1oZWlnaHQ6IDI4cHg7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgxMCwgMTQsIDIwLCAwLjc0KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTYpOwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjI0KTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBiYWNrZ3JvdW5kIDEyMG1zIGVhc2UsCiAgICAgICAgdHJhbnNmb3JtIDgwbXMgZWFzZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXN0YWNrLWdyb3VwLWJ1dHRvbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDE4LCAyNCwgMzQsIDAuOSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1zdGFjay1ncm91cC1idXR0b24gPiAqIHsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoubWpyLWZpbG1zdHJpcDo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgd2lkdGg6IDRweDsKICAgIGhlaWdodDogNHB4Owp9CgoubWpyLWZpbG1zdHJpcDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCi5tanItZmlsbXN0cmlwOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCk7Cn0KCi5tanItZmlsbXN0cmlwOmhvdmVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjIpOwp9CgoubWpyLWZpbG1zdHJpcC1hdWRpby10aHVtYiB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA1cHg7CiAgICBwYWRkaW5nOiA3cHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgyKTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgYmFja2dyb3VuZDoKICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDI0JSAyNCUsIHJnYmEoNzgsIDE4NCwgMjU1LCAwLjI4KSwgdHJhbnNwYXJlbnQgNDIlKSwKICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDg0JSA3MCUsIHJnYmEoODIsIDIyMCwgMTU2LCAwLjE4KSwgdHJhbnNwYXJlbnQgNDAlKSwKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDE4LCAyNSwgMzUsIDAuOTYpLCByZ2JhKDcsIDEwLCAxNSwgMC45OCkpOwp9CgoubWpyLWZpbG1zdHJpcC1hdWRpby13YXZlZm9ybSB7CiAgICB3aWR0aDogNzYlOwogICAgaGVpZ2h0OiAyNHB4OwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogMnB4Owp9CgoubWpyLWZpbG1zdHJpcC1hdWRpby13YXZlZm9ybSBzcGFuIHsKICAgIHdpZHRoOiAycHg7CiAgICBtaW4taGVpZ2h0OiA0cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NCksIHJnYmEoMTQ4LCAyMTgsIDI1NSwgMC42OCkpOwp9CgoubWpyLWZpbG1zdHJpcC1hdWRpby1sYWJlbCB7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgcGFkZGluZzogMnB4IDVweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjI4KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgIGZvbnQtc2l6ZTogN3B4OwogICAgZm9udC13ZWlnaHQ6IDgwMDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItc3RhY2stZ3JvdXAtYnV0dG9uLWNvdW50IHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLyogLS0gRHVwbGljYXRlIHN0YWNrIGJ1dHRvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogU2hvd3Mgb24gdGhlIHByaW1hcnkgY2FyZCB3aGVuIHNhbWUtZmlsZW5hbWUgZHVwbGljYXRlcyBleGlzdC4gICAgICAgICAgICAgKi8KLyogUG9zaXRpb25lZCBhdCBib3R0b20tcmlnaHQgdG8gbm90IG92ZXJsYXAgdGhlIHN0YWNrLWdyb3VwIGJ1dHRvbiAodG9wLXJpZ2h0KS4gKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWR1cC1zdGFjay1idXR0b24gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgYm90dG9tOiAzMHB4OwogICAgcmlnaHQ6IDZweDsKICAgIHotaW5kZXg6IDExOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDRweDsKICAgIG1pbi13aWR0aDogMjhweDsKICAgIG1pbi1oZWlnaHQ6IDI4cHg7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDE4MCwgMCwgMC4zOCk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMzAsIDE4LCAwLCAwLjgyKTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjAwLCA2MCwgMC45Nik7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjMyKTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIGJhY2tncm91bmQgMC4xNXMsCiAgICAgICAgdHJhbnNmb3JtIDgwbXMgZWFzZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWR1cC1zdGFjay1idXR0b246aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSg1MCwgMzAsIDAsIDAuOTQpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMTgwLCAwLCAwLjYpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZHVwLXN0YWNrLWJ1dHRvbiA+ICogewogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1kdXAtc3RhY2stY291bnQgewogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1kdXAtc3RhY2tlZD0idHJ1ZSJdIC5tanItZHVwLXN0YWNrLWJ1dHRvbiB7CiAgICBib3gtc2hhZG93OgogICAgICAgIDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMzIpLAogICAgICAgIDAgMCAwIDFweCByZ2JhKDI1NSwgMTgwLCAwLCAwLjIpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci1zdGFjay1ncm91cC1idXR0b24sCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLWZlZWQtZ3JvdXAtYnV0dG9uIHsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4yNCksCiAgICAgICAgMCAwIDAgMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTpob3ZlciwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZHVwLXN0YWNrZWQ9InRydWUiXTpob3ZlciB7CiAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDsKfQoKLyogLS0gVmlzdWFsIHN0YWNraW5nIGVmZmVjdCAtIGxheWVyZWQgY2FyZHMgYmVoaW5kIHRoZSBtYWluIGNhcmQgLS0tLS0tLS0tLS0tICovCi8qIENyZWF0ZXMgcHNldWRvLWVsZW1lbnQgImNhcmRzIiBvZmZzZXQgYmVoaW5kIHRoZSBwcmltYXJ5IGNhcmQgdG8gdmlzdWFsbHkgICAgKi8KLyogY29tbXVuaWNhdGUgdGhhdCB0aGlzIGNhcmQgcmVwcmVzZW50cyBhIGdyb3VwIG9mIG11bHRpcGxlIGltYWdlcy4gICAgICAgICAgICAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgei1pbmRleDogMTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOjpiZWZvcmUsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTo6YWZ0ZXIgewogICAgY29udGVudDogIiI7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1tZW51LWJnLCAjMWExYTJlKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IC0xOwogICAgdHJhbnNpdGlvbjoKICAgICAgICB0cmFuc2Zvcm0gMTgwbXMgZWFzZSwKICAgICAgICBvcGFjaXR5IDE4MG1zIGVhc2U7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTo6YmVmb3JlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDNweCwgM3B4KSByb3RhdGUoMWRlZyk7CiAgICBvcGFjaXR5OiAwLjQ1Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl06OmFmdGVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDZweCwgNnB4KSByb3RhdGUoMi4yZGVnKTsKICAgIG9wYWNpdHk6IDAuMjU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTpob3Zlcjo6YmVmb3JlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDRweCwgNHB4KSByb3RhdGUoMS41ZGVnKTsKICAgIG9wYWNpdHk6IDAuNTU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTpob3Zlcjo6YWZ0ZXIgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoOHB4LCA4cHgpIHJvdGF0ZSgzZGVnKTsKICAgIG9wYWNpdHk6IDAuMzU7Cn0KCi5tanItc3RhY2stZ3JvdXAtcG9wb3ZlciB7CiAgICB3aWR0aDogbWluKDQ0MHB4LCA5MnZ3KTsKfQoKLm1qci1zdGFjay1ncm91cC1tZW1iZXItY2FyZCB7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItc3RhY2stZ3JvdXAtbWVtYmVyLWNhcmQgLm1qci10aHVtYiB7CiAgICBhc3BlY3QtcmF0aW86IDEgLyAxICFpbXBvcnRhbnQ7Cn0KCi5tanItc3RhY2stZ3JvdXAtbWVtYmVyLWNhcmQgLm1qci1jYXJkLWluZm8gewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogTGlnaHQgbW9kZSBvdmVycmlkZXMgKENvbWZ5VUkgdjEuNDIrIGltcHJvdmVkIGxpZ2h0IHRoZW1lKQogKiBVc2VzIENvbWZ5VUkgZGF0YS10aGVtZSBhdHRyaWJ1dGUgd2hlbiBzZXQsIHdpdGgKICogcHJlZmVycy1jb2xvci1zY2hlbWUgYXMgYSBmYWxsYmFjayBmb3Igb2xkZXIgdmVyc2lvbnMuCiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKLyogQ29tZnlVSSBzZXRzIGRhdGEtdGhlbWU9ImxpZ2h0IiBvbiA8aHRtbD4gb3IgPGJvZHk+ICovCjppcyhbZGF0YS10aGVtZT0ibGlnaHQiXSwgW2RhdGEtY29sb3Itc2NoZW1lPSJsaWdodCJdKSAubWpyLWFzc2V0cy1tYW5hZ2VyLAo6aXMoW2RhdGEtdGhlbWU9ImxpZ2h0Il0sIFtkYXRhLWNvbG9yLXNjaGVtZT0ibGlnaHQiXSkgLm1qci1wb3BvdmVyIHsKICAgIC0tbWpyLXN1cmZhY2UtMDogdmFyKC0taW50ZXJmYWNlLXBhbmVsLXN1cmZhY2UsICNmMGYwZjApOwogICAgLS1tanItc3VyZmFjZS0xOiB2YXIoLS1pbnRlcmZhY2UtbWVudS1zdXJmYWNlLCAjZmFmYWZhKTsKICAgIC0tbWpyLXN1cmZhY2UtMjogdmFyKC0taW50ZXJmYWNlLXBhbmVsLWhvdmVyLXN1cmZhY2UsICNlOGU4ZTgpOwogICAgLS1tanItc3VyZmFjZS0zOiB2YXIoLS1tb2RhbC1jYXJkLWJhY2tncm91bmQsICNmZmZmZmYpOwogICAgLS1tanItYm9yZGVyOiB2YXIoLS1ib3JkZXItZGVmYXVsdCwgcmdiYSgwLCAwLCAwLCAwLjE0KSk7CiAgICAtLW1qci1tdXRlZDogdmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjU1KSk7CiAgICAtLW1qci1jYXJkLWhvdmVyLWNvbG9yOiB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtaG92ZXItc3VyZmFjZSwgI2UwZTBlMCk7Cn0KCkBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSB7CiAgICAvKiBGYWxsYmFjazogb25seSBhcHBseSBpZiBDb21meVVJIGhhc24ndCBzZXQgYW4gZXhwbGljaXQgZGF0YS10aGVtZSAqLwogICAgLm1qci1hc3NldHMtbWFuYWdlcjpub3QoW2RhdGEtdGhlbWUtYXBwbGllZF0pLAogICAgLm1qci1wb3BvdmVyOm5vdChbZGF0YS10aGVtZS1hcHBsaWVkXSkgewogICAgICAgIC0tbWpyLXN1cmZhY2UtMDogdmFyKC0taW50ZXJmYWNlLXBhbmVsLXN1cmZhY2UsICNmMGYwZjApOwogICAgICAgIC0tbWpyLXN1cmZhY2UtMTogdmFyKC0taW50ZXJmYWNlLW1lbnUtc3VyZmFjZSwgI2ZhZmFmYSk7CiAgICAgICAgLS1tanItc3VyZmFjZS0yOiB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtaG92ZXItc3VyZmFjZSwgI2U4ZThlOCk7CiAgICAgICAgLS1tanItc3VyZmFjZS0zOiB2YXIoLS1tb2RhbC1jYXJkLWJhY2tncm91bmQsICNmZmZmZmYpOwogICAgICAgIC0tbWpyLWJvcmRlcjogdmFyKC0tYm9yZGVyLWRlZmF1bHQsIHJnYmEoMCwgMCwgMCwgMC4xNCkpOwogICAgICAgIC0tbWpyLW11dGVkOiB2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuNTUpKTsKICAgICAgICAtLW1qci1jYXJkLWhvdmVyLWNvbG9yOiB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtaG92ZXItc3VyZmFjZSwgI2UwZTBlMCk7CiAgICB9Cn0KCi8qIC0tLSBTa2VsZXRvbiBsb2FkZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgoubWpyLWNhcmQtc2tlbGV0b24gewogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSwgIzJhMmEyYSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCAjM2EzYTNhKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLWxnLCA4cHgpOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIC8qIE1hdGNoIC5tanItdGh1bWIgYXNwZWN0IHJhdGlvIHNvIHNrZWxldG9ucyBoYXZlIHRoZSBzYW1lIGZvb3RwcmludCBhcyByZWFsIGNhcmRzLiAqLwogICAgYXNwZWN0LXJhdGlvOiAxIC8gMTsKfQoKLyogU2hpbW1lciBzd2VlcCAqLwoubWpyLWNhcmQtc2tlbGV0b246OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgOTBkZWcsCiAgICAgICAgdHJhbnNwYXJlbnQgMCUsCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIsICMzYTNhM2EpIDgwJSwgdHJhbnNwYXJlbnQpIDUwJSwKICAgICAgICB0cmFuc3BhcmVudCAxMDAlCiAgICApOwogICAgYW5pbWF0aW9uOiBtanItc2hpbW1lciAxLjRzIGVhc2UtaW4tb3V0IGluZmluaXRlOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTsKfQoKQGtleWZyYW1lcyBtanItc2hpbW1lciB7CiAgICBmcm9tIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpOwogICAgfQogICAgdG8gewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTsKICAgIH0KfQoKQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHsKICAgIC5tanItY2FyZC1za2VsZXRvbjo6YWZ0ZXIgewogICAgICAgIGFuaW1hdGlvbjogbm9uZTsKICAgIH0KfQoKLyogLS0tIFJlc3BvbnNpdmUgc3VtbWFyeSBiYXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCi8qCiAqIEVuYWJsZSBjb250YWluZXIgcXVlcmllcyBvbiB0aGUgc3VtbWFyeSBiYXIgc28gY2hpbGRyZW4gY2FuIHJlc3BvbmQgdG8gaXRzCiAqIGFjdHVhbCByZW5kZXJlZCB3aWR0aCAoZS5nLiB3aGVuIHRoZSBwYW5lbCBpcyBkb2NrZWQgaW4gYSBuYXJyb3cgc2lkZWJhcikuCiAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc3VtbWFyeSB7CiAgICBjb250YWluZXItdHlwZTogaW5saW5lLXNpemU7CiAgICBjb250YWluZXItbmFtZTogbWpyLXN1bW1hcnktYmFyOwp9CgovKiBCZWxvdyB+MzgwIHB4OiBoaWRlIHRoZSBwaWxscy9yaWdodCBzZWN0aW9uIHRvIHByZXZlbnQgb3ZlcmZsb3cuICovCkBjb250YWluZXIgbWpyLXN1bW1hcnktYmFyIChtYXgtd2lkdGg6IDM4MHB4KSB7CiAgICAubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc3VtbWFyeS1yaWdodCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KICAgIC5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zdW1tYXJ5LXRleHQgewogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgIH0KfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogU3R1ZGlvIHZpZXdlciAobWFpbiB2aWV3ZXIpIC0gLm1qci1zdHVkaW8KICogTmV1dHJhbCBkYXJrIHN0YWdlIHNvIGdlbmVyYXRlZCBjb2xvdXJzIGFyZSBqdWRnZWQgYWNjdXJhdGVseTsgY2hyb21lIHVzZXMKICogQ29tZnlVSSB0b2tlbnMgdGhyb3VnaCB0aGUgLS1tanItKiBhbGlhc2VzLgogKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLm1qci1zdHVkaW8gewogICAgcG9zaXRpb246IGZpeGVkOwogICAgaW5zZXQ6IDA7CiAgICB6LWluZGV4OiAxMDAwMDsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG8gbWlubWF4KDAsIDFmcikgYXV0bzsKICAgIGJhY2tncm91bmQ6ICMwZDBkMGY7CiAgICBjb2xvcjogdmFyKC0tZmctY29sb3IsICNlNmU2ZTYpOwogICAgb3V0bGluZTogbm9uZTsKICAgIC0tbWpyLXN0dWRpby1jaHJvbWU6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xLCAjMjMyMzI3KSA4OCUsIHRyYW5zcGFyZW50KTsKICAgIC0tbWpyLXN0dWRpby1saW5lOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlciwgI2ZmZjIpIDcwJSwgdHJhbnNwYXJlbnQpOwp9Ci5tanItc3R1ZGlvX19oZWFkZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEycHg7CiAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdHVkaW8tY2hyb21lKTsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItc3R1ZGlvLWxpbmUpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpOwogICAgbWluLXdpZHRoOiAwOwp9Ci5tanItc3R1ZGlvX19uYXYsCi5tanItc3R1ZGlvX19hY3Rpb25zIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBmbGV4OiAwIDAgYXV0bzsKfQoubWpyLXN0dWRpb19fY291bnRlciB7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCk7CiAgICBtaW4td2lkdGg6IDU0cHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KLm1qci1zdHVkaW9fX3RpdGxlIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgbWluLXdpZHRoOiAwOwogICAgZmxleDogMSAxIGF1dG87Cn0KLm1qci1zdHVkaW9fX2ZpbGVuYW1lIHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBmb250LXNpemU6IDEzLjVweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cn0KLm1qci1zdHVkaW9fX3N1bW1hcnkgewogICAgZm9udC1zaXplOiAxMS41cHg7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkKTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cn0KLm1qci1zdHVkaW8tYnRuIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBtaW4td2lkdGg6IDMwcHg7CiAgICBoZWlnaHQ6IDMwcHg7CiAgICBwYWRkaW5nOiAwIDdweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjb2xvcjogaW5oZXJpdDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZvbnQ6IGluaGVyaXQ7CiAgICBmb250LXNpemU6IDEycHg7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTJzLCBib3JkZXItY29sb3IgMC4xMnMsIGNvbG9yIDAuMTJzOwp9Ci5tanItc3R1ZGlvLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKSB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tZmctY29sb3IsICNmZmYpIDEwJSwgdHJhbnNwYXJlbnQpOwp9Ci5tanItc3R1ZGlvLWJ0bjpmb2N1cy12aXNpYmxlIHsKICAgIG91dGxpbmU6IDJweCBzb2xpZCB2YXIoLS1tanItYWNjZW50KTsKICAgIG91dGxpbmUtb2Zmc2V0OiAxcHg7Cn0KLm1qci1zdHVkaW8tYnRuOmRpc2FibGVkIHsKICAgIG9wYWNpdHk6IDAuMzU7CiAgICBjdXJzb3I6IGRlZmF1bHQ7Cn0KLm1qci1zdHVkaW8tYnRuLmlzLW9uIHsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAxNiUsIHRyYW5zcGFyZW50KTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDQwJSwgdHJhbnNwYXJlbnQpOwp9Ci5tanItc3R1ZGlvLWJ0bi5pcy10ZXh0IHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMmVtOwp9Ci5tanItc3R1ZGlvLWJ0bi5pcy1jbG9zZTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy1lcnJvciwgI2U1NDg0ZCkgMjglLCB0cmFuc3BhcmVudCk7Cn0KLm1qci1zdHVkaW8tY2hpcCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBoZWlnaHQ6IDIycHg7CiAgICBwYWRkaW5nOiAwIDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1mZy1jb2xvciwgI2ZmZikgOCUsIHRyYW5zcGFyZW50KTsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQpOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoubWpyLXN0dWRpby1zZWxlY3QgewogICAgaGVpZ2h0OiAyNnB4OwogICAgYm9yZGVyLXJhZGl1czogN3B4OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLXN0dWRpby1saW5lKTsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY29sb3I6IGluaGVyaXQ7CiAgICBmb250OiBpbmhlcml0OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgcGFkZGluZzogMCA0cHg7Cn0KLm1qci1zdHVkaW9fX2JvZHkgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDFmcikgbWlubWF4KDMwMHB4LCAzODBweCk7CiAgICBtaW4taGVpZ2h0OiAwOwp9Ci5tanItc3R1ZGlvLmlzLWluc3BlY3Rvci1jbG9zZWQgLm1qci1zdHVkaW9fX2JvZHkgewogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKTsKfQoubWpyLXN0dWRpb19fc3RhZ2UgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWluLXdpZHRoOiAwOwogICAgbWluLWhlaWdodDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KLm1qci1zdHVkaW9fX3Vuc3VwcG9ydGVkIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkKTsKfQoubWpyLXN0dWRpb19fdW5zdXBwb3J0ZWQgLnBpIHsKICAgIGZvbnQtc2l6ZTogNDBweDsKfQoubWpyLXN0dWRpb19faW5zcGVjdG9yIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgbWluLWhlaWdodDogMDsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTAsICMxYjFiMWUpOwogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1tanItc3R1ZGlvLWxpbmUpOwp9Ci5tanItc3R1ZGlvX19yZXZpZXcgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDhweDsKICAgIHBhZGRpbmc6IDEycHggMTRweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItc3R1ZGlvLWxpbmUpOwp9Ci5tanItc3R1ZGlvX19yZXZpZXctcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4Owp9Ci5tanItc3R1ZGlvX19sYWJlbCB7CiAgICBmb250LXNpemU6IDExcHg7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDZlbTsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQpOwp9Ci5tanItc3R1ZGlvX190YWJzIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBnYXA6IDJweDsKICAgIHBhZGRpbmc6IDZweCAxMHB4IDA7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLXN0dWRpby1saW5lKTsKfQoubWpyLXN0dWRpb19fdGFicyBidXR0b24gewogICAgYm9yZGVyOiBub25lOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkKTsKICAgIGZvbnQ6IGluaGVyaXQ7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBwYWRkaW5nOiA3cHggMTBweDsKICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGN1cnNvcjogcG9pbnRlcjsKfQoubWpyLXN0dWRpb19fdGFicyBidXR0b24uaXMtYWN0aXZlIHsKICAgIGNvbG9yOiB2YXIoLS1mZy1jb2xvciwgI2ZmZik7CiAgICBib3JkZXItYm90dG9tLWNvbG9yOiB2YXIoLS1tanItYWNjZW50KTsKfQoubWpyLXN0dWRpb19fdGFiLWJvZHkgewogICAgZmxleDogMSAxIGF1dG87CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIHBhZGRpbmc6IDEycHggMTRweCAxOHB4OwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDE0cHg7Cn0KLm1qci1zdHVkaW9fX2ZpbG1zdHJpcCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiA2cHg7CiAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3R1ZGlvLWNocm9tZSk7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tbWpyLXN0dWRpby1saW5lKTsKICAgIHNjcm9sbGJhci13aWR0aDogdGhpbjsKfQoubWpyLXN0dWRpb19fdGh1bWIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZmxleDogMCAwIGF1dG87CiAgICB3aWR0aDogNjRweDsKICAgIGhlaWdodDogNjRweDsKICAgIHBhZGRpbmc6IDA7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJhY2tncm91bmQ6ICMwMDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgb3BhY2l0eTogMC42OwogICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjEycywgYm9yZGVyLWNvbG9yIDAuMTJzLCB0cmFuc2Zvcm0gMC4xMnM7Cn0KLm1qci1zdHVkaW9fX3RodW1iOmhvdmVyIHsKICAgIG9wYWNpdHk6IDAuOTsKfQoubWpyLXN0dWRpb19fdGh1bWIuaXMtY3VycmVudCB7CiAgICBvcGFjaXR5OiAxOwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1tanItYWNjZW50KTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKfQoubWpyLXN0dWRpb19fdGh1bWIgaW1nIHsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICBkaXNwbGF5OiBibG9jazsKfQoubWpyLXN0dWRpb19fdGh1bWItYmFkZ2UgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgcmlnaHQ6IDRweDsKICAgIGJvdHRvbTogNHB4OwogICAgZm9udC1zaXplOiA5cHg7CiAgICBwYWRkaW5nOiAzcHg7CiAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNjUpOwogICAgY29sb3I6ICNmZmY7Cn0KCi8qIEltYWdlIHN0YWdlICovCi5tanItc3R1ZGlvLXN0YWdlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGN1cnNvcjogZ3JhYjsKICAgIHRvdWNoLWFjdGlvbjogbm9uZTsKfQoubWpyLXN0dWRpby1zdGFnZS5pcy1kcmFnZ2luZyB7CiAgICBjdXJzb3I6IGdyYWJiaW5nOwp9Ci5tanItc3R1ZGlvLXN0YWdlLmlzLWNoZWNrZXIgewogICAgYmFja2dyb3VuZC1jb2xvcjogIzJhMmEyYTsKICAgIGJhY2tncm91bmQtaW1hZ2U6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCAjM2EzYTNhIDI1JSwgdHJhbnNwYXJlbnQgMjUlKSwKICAgICAgICBsaW5lYXItZ3JhZGllbnQoLTQ1ZGVnLCAjM2EzYTNhIDI1JSwgdHJhbnNwYXJlbnQgMjUlKSwKICAgICAgICBsaW5lYXItZ3JhZGllbnQoNDVkZWcsIHRyYW5zcGFyZW50IDc1JSwgIzNhM2EzYSA3NSUpLAogICAgICAgIGxpbmVhci1ncmFkaWVudCgtNDVkZWcsIHRyYW5zcGFyZW50IDc1JSwgIzNhM2EzYSA3NSUpOwogICAgYmFja2dyb3VuZC1zaXplOiAyMHB4IDIwcHg7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDAsIDAgMTBweCwgMTBweCAtMTBweCwgLTEwcHggMDsKfQoubWpyLXN0dWRpby1zdGFnZV9fYm94IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDUwJTsKICAgIHRvcDogNTAlOwogICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsKICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07Cn0KLm1qci1zdHVkaW8tc3RhZ2VfX2xheWVycyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGlzb2xhdGlvbjogaXNvbGF0ZTsKfQoubWpyLXN0dWRpby1zdGFnZV9faW1nIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDA7CiAgICB0b3A6IDA7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIG1heC13aWR0aDogbm9uZTsKICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgLXdlYmtpdC11c2VyLWRyYWc6IG5vbmU7Cn0KLm1qci1zdHVkaW8tc3RhZ2VfX2Vycm9yIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQpOwp9CgovKiBQbGF5ZXIgKi8KLm1qci1zdHVkaW8tcGxheWVyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGJhY2tncm91bmQ6ICMwMDA7Cn0KLm1qci1zdHVkaW8tcGxheWVyLmNvbnRyb2xzLWhpZGRlbiB7CiAgICBjdXJzb3I6IG5vbmU7Cn0KLm1qci1zdHVkaW8tcGxheWVyX19tZWRpYSB7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBtYXgtaGVpZ2h0OiAxMDAlOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBvYmplY3QtZml0OiBjb250YWluOwogICAgZGlzcGxheTogYmxvY2s7Cn0KLm1qci1zdHVkaW8tcGxheWVyX19hdWRpby1hcnQgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMnB4OwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCk7CiAgICBjdXJzb3I6IHBvaW50ZXI7Cn0KLm1qci1zdHVkaW8tcGxheWVyX19hdWRpby1hcnQgLnBpIHsKICAgIGZvbnQtc2l6ZTogNjRweDsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50KTsKfQoubWpyLXN0dWRpby1wbGF5ZXJfX2JpZy1wbGF5IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDUwJTsKICAgIHRvcDogNTAlOwogICAgd2lkdGg6IDcycHg7CiAgICBoZWlnaHQ6IDcycHg7CiAgICBtYXJnaW46IC0zNnB4IDAgMCAtMzZweDsKICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNDUpOwogICAgY29sb3I6ICNmZmY7CiAgICBmb250LXNpemU6IDI2cHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjEycywgYmFja2dyb3VuZCAwLjEyczsKfQoubWpyLXN0dWRpby1wbGF5ZXJfX2JpZy1wbGF5OmhvdmVyIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wNik7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTUlLCByZ2JhKDAsIDAsIDAsIDAuNCkpOwp9Ci5tanItc3R1ZGlvLXBsYXllci5pcy1hdWRpbyAubWpyLXN0dWRpby1wbGF5ZXJfX2JpZy1wbGF5IHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KLm1qci1zdHVkaW8tcGxheWVyX19lcnJvciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBjb2xvcjogdmFyKC0tbWpyLXN0YXR1cy1lcnJvciwgI2ZmOGE4YSk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNik7CiAgICBwYWRkaW5nOiAxMHB4IDE0cHg7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7Cn0KLm1qci1zdHVkaW8tcGxheWVyX19jb250cm9scyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAxMnB4OwogICAgcmlnaHQ6IDEycHg7CiAgICBib3R0b206IDEycHg7CiAgICBwYWRkaW5nOiA2cHggMTBweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgYmFja2dyb3VuZDogcmdiYSgxMiwgMTIsIDE0LCAwLjcyKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTJweCk7CiAgICBjb2xvcjogI2VlZTsKICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycywgdHJhbnNmb3JtIDAuMnM7Cn0KLm1qci1zdHVkaW8tcGxheWVyLmNvbnRyb2xzLWhpZGRlbiAubWpyLXN0dWRpby1wbGF5ZXJfX2NvbnRyb2xzIHsKICAgIG9wYWNpdHk6IDA7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNnB4KTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9Ci5tanItc3R1ZGlvLXBsYXllcl9fdHJhY2sgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgaGVpZ2h0OiAxOHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdG91Y2gtYWN0aW9uOiBub25lOwp9Ci5tanItc3R1ZGlvLXBsYXllcl9fdHJhY2s6OmJlZm9yZSwKLm1qci1zdHVkaW8tcGxheWVyX19idWZmZXJlZCwKLm1qci1zdHVkaW8tcGxheWVyX19wcm9ncmVzcywKLm1qci1zdHVkaW8tcGxheWVyX19sb29wIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDA7CiAgICB0b3A6IDdweDsKICAgIGhlaWdodDogNHB4OwogICAgYm9yZGVyLXJhZGl1czogMnB4Owp9Ci5tanItc3R1ZGlvLXBsYXllcl9fdHJhY2s6OmJlZm9yZSB7CiAgICBjb250ZW50OiAiIjsKICAgIHJpZ2h0OiAwOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKfQoubWpyLXN0dWRpby1wbGF5ZXJfX3RyYWNrOmhvdmVyOjpiZWZvcmUsCi5tanItc3R1ZGlvLXBsYXllcl9fdHJhY2s6aG92ZXIgLm1qci1zdHVkaW8tcGxheWVyX19idWZmZXJlZCwKLm1qci1zdHVkaW8tcGxheWVyX190cmFjazpob3ZlciAubWpyLXN0dWRpby1wbGF5ZXJfX3Byb2dyZXNzLAoubWpyLXN0dWRpby1wbGF5ZXJfX3RyYWNrOmhvdmVyIC5tanItc3R1ZGlvLXBsYXllcl9fbG9vcCB7CiAgICB0b3A6IDZweDsKICAgIGhlaWdodDogNnB4Owp9Ci5tanItc3R1ZGlvLXBsYXllcl9fYnVmZmVyZWQgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI0KTsKfQoubWpyLXN0dWRpby1wbGF5ZXJfX2xvb3AgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtd2FybmluZywgI2Y1YTUyNCkgNTUlLCB0cmFuc3BhcmVudCk7Cn0KLm1qci1zdHVkaW8tcGxheWVyX19wcm9ncmVzcyB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItYWNjZW50KTsKfQoubWpyLXN0dWRpby1wbGF5ZXJfX3RodW1iIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogM3B4OwogICAgd2lkdGg6IDEycHg7CiAgICBoZWlnaHQ6IDEycHg7CiAgICBtYXJnaW4tbGVmdDogLTZweDsKICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgIGJhY2tncm91bmQ6ICNmZmY7CiAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDQ1JSwgdHJhbnNwYXJlbnQpOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KLm1qci1zdHVkaW8tcGxheWVyX19ob3ZlciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBib3R0b206IDIycHg7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICBwYWRkaW5nOiAzcHggN3B4OwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjg1KTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KLm1qci1zdHVkaW8tcGxheWVyX19yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDRweDsKICAgIGZsZXgtd3JhcDogd3JhcDsKfQoubWpyLXN0dWRpby1wbGF5ZXJfX3RpbWUgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsKICAgIG1hcmdpbjogMCA2cHg7Cn0KLm1qci1zdHVkaW8tcGxheWVyX190aW1lIC5pcy1kaW0gewogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41NSk7Cn0KLm1qci1zdHVkaW8tcGxheWVyX19zcGFjZXIgewogICAgZmxleDogMSAxIGF1dG87Cn0KLm1qci1zdHVkaW8tcGxheWVyX19ncm91cCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDJweDsKfQoubWpyLXN0dWRpby1wbGF5ZXJfX3ZvbHVtZSB7CiAgICB3aWR0aDogODBweDsKICAgIGFjY2VudC1jb2xvcjogdmFyKC0tbWpyLWFjY2VudCk7Cn0KQG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KSB7CiAgICAubWpyLXN0dWRpb19fYm9keSB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKTsKICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbm1heCgwLCAxZnIpIG1pbm1heCgwLCA0MCUpOwogICAgfQogICAgLm1qci1zdHVkaW9fX2luc3BlY3RvciB7CiAgICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLW1qci1zdHVkaW8tbGluZSk7CiAgICB9Cn0KLm1qci1zdHVkaW8tcGxheWVyX192b2x1bWUgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDgwcHg7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0b3VjaC1hY3Rpb246IG5vbmU7Cn0KLm1qci1zdHVkaW8tcGxheWVyX192b2x1bWU6OmJlZm9yZSwKLm1qci1zdHVkaW8tcGxheWVyX192b2x1bWUtZmlsbCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAwOwogICAgdG9wOiA2cHg7CiAgICBoZWlnaHQ6IDRweDsKICAgIGJvcmRlci1yYWRpdXM6IDJweDsKfQoubWpyLXN0dWRpby1wbGF5ZXJfX3ZvbHVtZTo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcmlnaHQ6IDA7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpOwp9Ci5tanItc3R1ZGlvLXBsYXllcl9fdm9sdW1lLWZpbGwgewogICAgYmFja2dyb3VuZDogI2ZmZjsKfQoKLyogU3R1ZGlvIHBsYXllciBpbnNpZGUgdGhlIGZsb2F0aW5nIHZpZXdlciAoY29tcGFjdCwgd2lkdGgtYXdhcmUpLiAqLwoubWpyLW1mdi1wbGF5ZXItaG9zdC0tc3R1ZGlvIHsKICAgIGJhY2tncm91bmQ6ICMwMDA7Cn0KLm1qci1zdHVkaW8tcGxheWVyLmlzLWNvbXBhY3QgLm1qci1zdHVkaW8tcGxheWVyX19jb250cm9scyB7CiAgICBsZWZ0OiA2cHg7CiAgICByaWdodDogNnB4OwogICAgYm90dG9tOiA2cHg7CiAgICBwYWRkaW5nOiA0cHggNnB4IDZweDsKICAgIGJvcmRlci1yYWRpdXM6IDlweDsKfQoubWpyLXN0dWRpby1wbGF5ZXIuaXMtY29tcGFjdCAubWpyLXN0dWRpby1idG4gewogICAgbWluLXdpZHRoOiAyNnB4OwogICAgaGVpZ2h0OiAyNnB4OwogICAgcGFkZGluZzogMCA1cHg7CiAgICBib3JkZXItcmFkaXVzOiA3cHg7Cn0KLm1qci1zdHVkaW8tcGxheWVyLmlzLWNvbXBhY3QgLm1qci1zdHVkaW8tcGxheWVyX190aW1lIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIG1hcmdpbjogMCA0cHg7Cn0KLm1qci1zdHVkaW8tcGxheWVyLmlzLWNvbXBhY3QgLm1qci1zdHVkaW8tcGxheWVyX19iaWctcGxheSB7CiAgICB3aWR0aDogNTJweDsKICAgIGhlaWdodDogNTJweDsKICAgIG1hcmdpbjogLTI2cHggMCAwIC0yNnB4OwogICAgZm9udC1zaXplOiAxOHB4Owp9Ci5tanItc3R1ZGlvLXBsYXllci5pcy1jb21wYWN0IC5tanItc3R1ZGlvLXBsYXllcl9fdm9sdW1lIHsKICAgIHdpZHRoOiA1NnB4Owp9Ci5tanItc3R1ZGlvLXBsYXllci5pcy1jb21wYWN0IC5tanItc3R1ZGlvLXBsYXllcl9fYXVkaW8tYXJ0IC5waSB7CiAgICBmb250LXNpemU6IDQwcHg7Cn0KQGNvbnRhaW5lciAobWF4LXdpZHRoOiA1MjBweCkgewogICAgLm1qci1zdHVkaW8tcGxheWVyLmlzLWNvbXBhY3QgLm1qci1zdHVkaW8tcGxheWVyX192b2x1bWUsCiAgICAubWpyLXN0dWRpby1wbGF5ZXIuaXMtY29tcGFjdCAubWpyLXN0dWRpby1jaGlwIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgfQp9CkBjb250YWluZXIgKG1heC13aWR0aDogMzgwcHgpIHsKICAgIC5tanItc3R1ZGlvLXBsYXllci5pcy1jb21wYWN0IC5tanItc3R1ZGlvLXBsYXllcl9fZ3JvdXAsCiAgICAubWpyLXN0dWRpby1wbGF5ZXIuaXMtY29tcGFjdCAubWpyLXN0dWRpby1wbGF5ZXJfX3RpbWUgLmlzLWRpbSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogRmxvYXRpbmcgdmlld2VyIHJlZnJlc2ggLSBhbGlnbmVkIHdpdGggdGhlIFN0dWRpbyB2aWV3ZXIuCiAqIFB1cmUgdmlzdWFsIGxheWVyIChhcHBlbmRlZCBsYXN0KTogZmxhdCBidXR0b25zIHRoYXQgbGlnaHQgdXAgb24gaG92ZXIgLwogKiB3aGVuIGFjdGl2ZSwgc29mdGVyIHdpbmRvdyBjaHJvbWUsIG5ldXRyYWwgc3RhZ2UuIFN0YXRlIGNvbG91cnMgKGxpdmUsCiAqIHByZXZpZXcsIG5vZGUgc3RyZWFtKSBrZWVwIHRoZWlyIGRlZGljYXRlZCBydWxlcyBhYm92ZS4KICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi5tanItbWZ2IHsKICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODAlLCB0cmFuc3BhcmVudCk7CiAgICBib3gtc2hhZG93OgogICAgICAgIDAgMThweCA0OHB4IHJnYmEoMCwgMCwgMCwgMC40NSksCiAgICAgICAgMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKfQoubWpyLW1mdi1oZWFkZXIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDkyJSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpOwp9Ci5tanItbWZ2LXRvb2xiYXIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDcwJSwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgMzAlKTsKICAgIGdhcDogMnB4Owp9Ci5tanItbWZ2IC5tanItaWNvbi1idG4gewogICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm9yZGVyLXJhZGl1czogOHB4Owp9Ci5tanItbWZ2IC5tanItaWNvbi1idG46aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZmZmKSAxMCUsIHRyYW5zcGFyZW50KTsKICAgIHRyYW5zZm9ybTogbm9uZTsKfQoubWpyLW1mdiAubWpyLWljb24tYnRuW2FyaWEtcHJlc3NlZD0idHJ1ZSJdIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDQwJSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDE2JSwgdHJhbnNwYXJlbnQpOwogICAgYm94LXNoYWRvdzogbm9uZTsKfQoubWpyLW1mdiAubWpyLWljb24tYnRuLm1qci1saXZlLWFjdGl2ZSB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy1zdWNjZXNzKSAxNiUsIHRyYW5zcGFyZW50KTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcykgNDUlLCB0cmFuc3BhcmVudCk7CiAgICBib3gtc2hhZG93OiBub25lOwp9Ci5tanItbWZ2IC5tanItaWNvbi1idG4ubWpyLXByZXZpZXctYWN0aXZlIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAxNiUsIHRyYW5zcGFyZW50KTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDQ1JSwgdHJhbnNwYXJlbnQpOwogICAgYm94LXNoYWRvdzogbm9uZTsKfQoubWpyLW1mdiAubWpyLW1mdi1zaW1wbGUtY29udGFpbmVyLAoubWpyLW1mdiAubWpyLW1mdi1wbGF5ZXItaG9zdCB7CiAgICBiYWNrZ3JvdW5kOiAjMGQwZDBmOwp9Ci5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCwKLm1qci1tZnYubWpyLW1mdi0tZGVza3RvcC1leHBhbmRlZCB7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgYm9yZGVyOiBub25lOwogICAgYm94LXNoYWRvdzogbm9uZTsKfQoKCi8qIOKUgOKUgOKUgCBTdHVkaW8gcmV2aWV3IHRvb2xzIChIVUQgcmFpbCwgY29tcGFyZSwgb3ZlcmxheXMpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwoubWpyLXN0dWRpby1meC1kZWZzIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHdpZHRoOiAwOwogICAgaGVpZ2h0OiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9Ci5tanItc3R1ZGlvLXN0YWdlLmlzLXByb2JpbmcsCi5tanItc3R1ZGlvLXBsYXllci5pcy1wcm9iaW5nIC5tanItc3R1ZGlvLXBsYXllcl9fc2NyZWVuIHsKICAgIGN1cnNvcjogY3Jvc3NoYWlyOwp9Ci5tanItc3R1ZGlvLXN0YWdlX19zaWRlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMDsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwp9Ci5tanItc3R1ZGlvLXN0YWdlX19kaXZpZGVyIHsKICAgIC0tbWpyLWs6IHZhcigtLW1qci1pbnYtc2NhbGUsIDEpOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAwOwogICAgYm90dG9tOiAwOwogICAgd2lkdGg6IGNhbGMoMjRweCAqIHZhcigtLW1qci1rKSk7CiAgICBtYXJnaW4tbGVmdDogY2FsYygtMTJweCAqIHZhcigtLW1qci1rKSk7CiAgICBjdXJzb3I6IGV3LXJlc2l6ZTsKICAgIHotaW5kZXg6IDM7CiAgICB0b3VjaC1hY3Rpb246IG5vbmU7Cn0KLm1qci1zdHVkaW8tc3RhZ2VfX2RpdmlkZXI6OmJlZm9yZSB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDUwJTsKICAgIHRvcDogMDsKICAgIGJvdHRvbTogMDsKICAgIHdpZHRoOiBjYWxjKDJweCAqIHZhcigtLW1qci1rKSk7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICBiYWNrZ3JvdW5kOiAjZmZmOwogICAgYm94LXNoYWRvdzogMCAwIDAgY2FsYygxcHggKiB2YXIoLS1tanItaykpIHJnYmEoMCwgMCwgMCwgMC40NSk7Cn0KLm1qci1zdHVkaW8tc3RhZ2VfX2RpdmlkZXIuaXMtdmVydGljYWwgewogICAgdG9wOiBhdXRvOwogICAgYm90dG9tOiBhdXRvOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgd2lkdGg6IGF1dG87CiAgICBoZWlnaHQ6IGNhbGMoMjRweCAqIHZhcigtLW1qci1rKSk7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIG1hcmdpbi10b3A6IGNhbGMoLTEycHggKiB2YXIoLS1tanItaykpOwogICAgY3Vyc29yOiBucy1yZXNpemU7Cn0KLm1qci1zdHVkaW8tc3RhZ2VfX2RpdmlkZXIuaXMtdmVydGljYWw6OmJlZm9yZSB7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICB0b3A6IDUwJTsKICAgIGJvdHRvbTogYXV0bzsKICAgIHdpZHRoOiBhdXRvOwogICAgaGVpZ2h0OiBjYWxjKDJweCAqIHZhcigtLW1qci1rKSk7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7Cn0KLm1qci1zdHVkaW8tc3RhZ2VfX2RpdmlkZXItZ3JpcCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiA1MCU7CiAgICB0b3A6IDUwJTsKICAgIHdpZHRoOiAxOHB4OwogICAgaGVpZ2h0OiAzNHB4OwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgc2NhbGUodmFyKC0tbWpyLWspKTsKICAgIGJvcmRlci1yYWRpdXM6IDlweDsKICAgIGJhY2tncm91bmQ6ICNmZmY7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjUpOwp9Ci5tanItc3R1ZGlvLXN0YWdlX19kaXZpZGVyLmlzLXZlcnRpY2FsIC5tanItc3R1ZGlvLXN0YWdlX19kaXZpZGVyLWdyaXAgewogICAgd2lkdGg6IDM0cHg7CiAgICBoZWlnaHQ6IDE4cHg7Cn0KLm1qci1zdHVkaW8tc3RhZ2VfX2RpdmlkZXIuaXMtYWN0aXZlIC5tanItc3R1ZGlvLXN0YWdlX19kaXZpZGVyLWdyaXAsCi5tanItc3R1ZGlvLXN0YWdlX19kaXZpZGVyOmhvdmVyIC5tanItc3R1ZGlvLXN0YWdlX19kaXZpZGVyLWdyaXAgewogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLWFjY2VudCwgIzRmYTNmZik7Cn0KLm1qci1zdHVkaW8tc3RhZ2VfX2FiIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDUwJTsKICAgIHRvcDogMTJweDsKICAgIHotaW5kZXg6IDQ7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiA2cHg7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICBwYWRkaW5nOiAycHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgZm9udDogNjAwIDExcHgvMjBweCB2YXIoLS1tanItZm9udCwgc3lzdGVtLXVpLCBzYW5zLXNlcmlmKTsKICAgIGNvbG9yOiAjZmZmOwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjYpOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KLm1qci1zdHVkaW8tc3RhZ2VfX2FiIC5pcy1zZXAgewogICAgb3BhY2l0eTogMC41Owp9CgoubWpyLXN0dWRpby1wbGF5ZXJfX3NjcmVlbiB7CiAgICBjdXJzb3I6IGNyb3NzaGFpcjsKfQoubWpyLXN0dWRpby1zdGFnZV9fc2lkZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDA7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKfQoubWpyLXN0dWRpby1zdGFnZV9fZGl2aWRlciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDA7CiAgICBib3R0b206IDA7CiAgICB3aWR0aDogMjRweDsKICAgIG1hcmdpbi1sZWZ0OiAtMTJweDsKICAgIGN1cnNvcjogZXctcmVzaXplOwogICAgei1pbmRleDogMzsKICAgIHRvdWNoLWFjdGlvbjogbm9uZTsKfQoubWpyLXN0dWRpby1zdGFnZV9fZGl2aWRlcjo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogNTAlOwogICAgdG9wOiAwOwogICAgYm90dG9tOiAwOwogICAgd2lkdGg6IDJweDsKICAgIG1hcmdpbi1sZWZ0OiAtMXB4OwogICAgYmFja2dyb3VuZDogI2ZmZjsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCByZ2JhKDAsIDAsIDAsIDAuNDUpOwp9Ci5tanItc3R1ZGlvLXN0YWdlX19kaXZpZGVyLmlzLXZlcnRpY2FsIHsKICAgIHRvcDogYXV0bzsKICAgIGJvdHRvbTogYXV0bzsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIHdpZHRoOiBhdXRvOwogICAgaGVpZ2h0OiAyNHB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBtYXJnaW4tdG9wOiAtMTJweDsKICAgIGN1cnNvcjogbnMtcmVzaXplOwp9Ci5tanItc3R1ZGlvLXN0YWdlX19kaXZpZGVyLmlzLXZlcnRpY2FsOjpiZWZvcmUgewogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgdG9wOiA1MCU7CiAgICBib3R0b206IGF1dG87CiAgICB3aWR0aDogYXV0bzsKICAgIGhlaWdodDogMnB4OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBtYXJnaW4tdG9wOiAtMXB4Owp9Ci5tanItc3R1ZGlvLXN0YWdlX19kaXZpZGVyLWdyaXAgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogNTAlOwogICAgdG9wOiA1MCU7CiAgICB3aWR0aDogMThweDsKICAgIGhlaWdodDogMzRweDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgYm9yZGVyLXJhZGl1czogOXB4OwogICAgYmFja2dyb3VuZDogI2ZmZjsKICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuNSk7Cn0KLm1qci1zdHVkaW8tc3RhZ2VfX2RpdmlkZXIuaXMtdmVydGljYWwgLm1qci1zdHVkaW8tc3RhZ2VfX2RpdmlkZXItZ3JpcCB7CiAgICB3aWR0aDogMzRweDsKICAgIGhlaWdodDogMThweDsKfQoubWpyLXN0dWRpby1zdGFnZV9fZGl2aWRlci5pcy1hY3RpdmUgLm1qci1zdHVkaW8tc3RhZ2VfX2RpdmlkZXItZ3JpcCwKLm1qci1zdHVkaW8tc3RhZ2VfX2RpdmlkZXI6aG92ZXIgLm1qci1zdHVkaW8tc3RhZ2VfX2RpdmlkZXItZ3JpcCB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItYWNjZW50LCAjNGZhM2ZmKTsKfQoubWpyLXN0dWRpby1zdGFnZV9fYWIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiA4cHg7CiAgICB6LWluZGV4OiAyOwogICAgcGFkZGluZzogMXB4IDdweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGZvbnQ6IDYwMCAxMXB4LzE4cHggdmFyKC0tbWpyLWZvbnQsIHN5c3RlbS11aSwgc2Fucy1zZXJpZik7CiAgICBjb2xvcjogI2ZmZjsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC42KTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9Ci5tanItc3R1ZGlvLXN0YWdlX19hYi5pcy1hIHsKICAgIGxlZnQ6IDhweDsKfQoubWpyLXN0dWRpby1zdGFnZV9fYWIuaXMtYiB7CiAgICByaWdodDogOHB4Owp9Ci5tanItc3R1ZGlvLXN0YWdlX19ib3ggLm1qci1zdHVkaW8tc3RhZ2VfX2FiIHsKICAgIC8qIEluc2lkZSB0aGUgem9vbWVkIGJveDoga2VlcCBsYWJlbHMgcmVhZGFibGUgYXQgYW55IHpvb20uICovCiAgICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgbGVmdDsKfQoKLm1qci1zdHVkaW8tcGxheWVyX19zY3JlZW4gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7Cn0KLm1qci1zdHVkaW8tcGxheWVyX19sYXllcnMgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBpc29sYXRpb246IGlzb2xhdGU7Cn0KLm1qci1zdHVkaW8tcGxheWVyX19tZWRpYS5pcy1iIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwp9Ci5tanItc3R1ZGlvLXBsYXllcl9fc2NyZWVuLmlzLXNpZGUgLm1qci1zdHVkaW8tcGxheWVyX19sYXllcnMgewogICAgZGlzcGxheTogZmxleDsKICAgIGdhcDogOHB4Owp9Ci5tanItc3R1ZGlvLXBsYXllcl9fc2NyZWVuLmlzLXNpZGUgLm1qci1zdHVkaW8tcGxheWVyX19tZWRpYSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBpbnNldDogYXV0bzsKICAgIGZsZXg6IDEgMSAwOwogICAgbWluLXdpZHRoOiAwOwogICAgd2lkdGg6IGF1dG87Cn0KLm1qci1zdHVkaW8tcGxheWVyX19ib3ggewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KLm1qci1zdHVkaW8tcGxheWVyX19ib3ggLm1qci1zdHVkaW8tc3RhZ2VfX2RpdmlkZXIgewogICAgcG9pbnRlci1ldmVudHM6IGF1dG87Cn0KCi5tanItc3R1ZGlvLWd1aWRlcywKLm1qci1zdHVkaW8temVicmEgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9Ci5tanItc3R1ZGlvLXplYnJhIHsKICAgIGltYWdlLXJlbmRlcmluZzogcGl4ZWxhdGVkOwp9Ci5tanItc3R1ZGlvLWd1aWRlc19fbGluZSB7CiAgICBzdHJva2U6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKICAgIHN0cm9rZS13aWR0aDogMTsKfQoubWpyLXN0dWRpby1ndWlkZXNfX3NhZmUgewogICAgc3Ryb2tlOiByZ2JhKDI1NSwgMjEwLCA4MCwgMC44KTsKICAgIHN0cm9rZS13aWR0aDogMTsKICAgIHN0cm9rZS1kYXNoYXJyYXk6IDYgNDsKfQoubWpyLXN0dWRpby1ndWlkZXNfX21hc2stZWRnZSB7CiAgICBzdHJva2U6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsKICAgIHN0cm9rZS13aWR0aDogMTsKfQoKLm1qci1zdHVkaW8tbW9kZWwzZCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIHBhZGRpbmc6IDEycHg7Cn0KLm1qci1zdHVkaW8tbW9kZWwzZF9faG9zdCB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKfQoKLyogSFVEIHJhaWwgKi8KLm1qci1zdHVkaW8tcmFpbCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAxMnB4OwogICAgdG9wOiAxMnB4OwogICAgei1pbmRleDogNTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgIGdhcDogOHB4OwogICAgbWF4LWhlaWdodDogY2FsYygxMDAlIC0gMjRweCk7Cn0KLm1qci1zdHVkaW8tcmFpbF9fYmFyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAycHg7CiAgICBwYWRkaW5nOiA1cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEsICMxYzFjMjApIDgyJSwgdHJhbnNwYXJlbnQpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLXN0dWRpby1saW5lLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkpOwogICAgYm94LXNoYWRvdzogMCA4cHggMjRweCByZ2JhKDAsIDAsIDAsIDAuMzUpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpOwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIG1heC1oZWlnaHQ6IDEwMCU7CiAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7Cn0KLm1qci1zdHVkaW8tcmFpbF9fYnRuIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgd2lkdGg6IDM0cHg7CiAgICBoZWlnaHQ6IDM0cHg7CiAgICBmbGV4OiAwIDAgYXV0bzsKICAgIGJvcmRlcjogMDsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY29sb3I6IHZhcigtLW1qci10ZXh0LW11dGVkLCAjYjViNWJkKTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRyYW5zaXRpb246CiAgICAgICAgYmFja2dyb3VuZCAwLjEycyBlYXNlLAogICAgICAgIGNvbG9yIDAuMTJzIGVhc2U7Cn0KLm1qci1zdHVkaW8tcmFpbF9fYnRuOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7CiAgICBjb2xvcjogdmFyKC0tbWpyLXRleHQsICNmZmYpOwp9Ci5tanItc3R1ZGlvLXJhaWxfX2J0bjpmb2N1cy12aXNpYmxlIHsKICAgIG91dGxpbmU6IDJweCBzb2xpZCB2YXIoLS1tanItYWNjZW50LCAjNGZhM2ZmKTsKICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4Owp9Ci5tanItc3R1ZGlvLXJhaWxfX2J0bi5pcy1vbiB7CiAgICBjb2xvcjogdmFyKC0tbWpyLWFjY2VudCwgIzRmYTNmZik7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCwgIzRmYTNmZikgMTYlLCB0cmFuc3BhcmVudCk7Cn0KLm1qci1zdHVkaW8tcmFpbF9fYnRuLmlzLW9wZW4gewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIGNvbG9yOiB2YXIoLS1tanItdGV4dCwgI2ZmZik7Cn0KLm1qci1zdHVkaW8tcmFpbF9fdGFnIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHJpZ2h0OiAxcHg7CiAgICBib3R0b206IDFweDsKICAgIG1pbi13aWR0aDogMTJweDsKICAgIHBhZGRpbmc6IDAgMnB4OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgZm9udDogNzAwIDhweC8xMXB4IHZhcigtLW1qci1mb250LCBzeXN0ZW0tdWksIHNhbnMtc2VyaWYpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLWFjY2VudCwgIzRmYTNmZik7CiAgICBjb2xvcjogI2ZmZjsKfQoubWpyLXN0dWRpby1yYWlsX19zZXAgewogICAgaGVpZ2h0OiAxcHg7CiAgICBtYXJnaW46IDNweCA2cHg7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3R1ZGlvLWxpbmUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSk7Cn0KLm1qci1zdHVkaW8tcmFpbF9fcGFuZWwgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogNTRweDsKICAgIHdpZHRoOiAyMzZweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAxMHB4OwogICAgcGFkZGluZzogMTJweDsKICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSwgIzFjMWMyMCkgOTIlLCB0cmFuc3BhcmVudCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItc3R1ZGlvLWxpbmUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSk7CiAgICBib3gtc2hhZG93OiAwIDEycHggMzJweCByZ2JhKDAsIDAsIDAsIDAuNDUpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEycHgpOwogICAgY29sb3I6IHZhcigtLW1qci10ZXh0LCAjZWVlKTsKICAgIGZvbnQtc2l6ZTogMTJweDsKfQoubWpyLXN0dWRpby1yYWlsX190aXRsZSB7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6IHZhcigtLW1qci10ZXh0LCAjZmZmKTsKfQoubWpyLXN0dWRpby1yYWlsX19iIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA0cHg7Cn0KLm1qci1zdHVkaW8tcmFpbF9fYi1sYWJlbCB7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgY29sb3I6IHZhcigtLW1qci1hY2NlbnQsICM0ZmEzZmYpOwp9Ci5tanItc3R1ZGlvLXJhaWxfX2ItbmFtZSB7CiAgICBmbGV4OiAxIDEgYXV0bzsKICAgIG1pbi13aWR0aDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBjb2xvcjogdmFyKC0tbWpyLXRleHQtbXV0ZWQsICNiNWI1YmQpOwp9Ci5tanItc3R1ZGlvLXNlZyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiAycHg7CiAgICBwYWRkaW5nOiAycHg7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMjUpOwp9Ci5tanItc3R1ZGlvLXNlZy5pcy13cmFwIHsKICAgIGZsZXgtd3JhcDogd3JhcDsKfQoubWpyLXN0dWRpby1zZWcgYnV0dG9uIHsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDRweDsKICAgIG1pbi1oZWlnaHQ6IDI2cHg7CiAgICBwYWRkaW5nOiAwIDhweDsKICAgIGJvcmRlcjogMDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY29sb3I6IHZhcigtLW1qci10ZXh0LW11dGVkLCAjYjViNWJkKTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KLm1qci1zdHVkaW8tc2VnIGJ1dHRvbjpob3ZlciB7CiAgICBjb2xvcjogdmFyKC0tbWpyLXRleHQsICNmZmYpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKfQoubWpyLXN0dWRpby1zZWcgYnV0dG9uLmlzLW9uIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1hY2NlbnQsICM0ZmEzZmYpOwogICAgY29sb3I6ICNmZmY7Cn0KCi8qIFNsaWRlciAqLwoubWpyLXN0dWRpby1zbGlkZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDZweDsKfQoubWpyLXN0dWRpby1zbGlkZXJfX2hlYWQgewogICAgZGlzcGxheTogZmxleDsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGNvbG9yOiB2YXIoLS1tanItdGV4dC1tdXRlZCwgI2I1YjViZCk7CiAgICBmb250LXNpemU6IDExcHg7Cn0KLm1qci1zdHVkaW8tc2xpZGVyX192YWx1ZSB7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgY29sb3I6IHZhcigtLW1qci10ZXh0LCAjZmZmKTsKfQoubWpyLXN0dWRpby1zbGlkZXJfX3RyYWNrIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGhlaWdodDogMTZweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRvdWNoLWFjdGlvbjogbm9uZTsKICAgIG91dGxpbmU6IG5vbmU7Cn0KLm1qci1zdHVkaW8tc2xpZGVyX190cmFjazo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgdG9wOiA3cHg7CiAgICBoZWlnaHQ6IDNweDsKICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSk7Cn0KLm1qci1zdHVkaW8tc2xpZGVyX19maWxsIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDA7CiAgICB0b3A6IDdweDsKICAgIGhlaWdodDogM3B4OwogICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLWFjY2VudCwgIzRmYTNmZik7Cn0KLm1qci1zdHVkaW8tc2xpZGVyX19rbm9iIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMnB4OwogICAgd2lkdGg6IDEycHg7CiAgICBoZWlnaHQ6IDEycHg7CiAgICBtYXJnaW4tbGVmdDogLTZweDsKICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgIGJhY2tncm91bmQ6ICNmZmY7CiAgICBib3gtc2hhZG93OiAwIDFweCA0cHggcmdiYSgwLCAwLCAwLCAwLjUpOwp9Ci5tanItc3R1ZGlvLXNsaWRlcl9fdHJhY2s6Zm9jdXMtdmlzaWJsZSAubWpyLXN0dWRpby1zbGlkZXJfX2tub2IgewogICAgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLW1qci1hY2NlbnQsICM0ZmEzZmYpOwogICAgb3V0bGluZS1vZmZzZXQ6IDFweDsKfQoKLyogU2NvcGVzIEhVRCAqLwoubWpyLXN0dWRpby1zY29wZXMgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgcmlnaHQ6IDEycHg7CiAgICB0b3A6IDEycHg7CiAgICB6LWluZGV4OiA0OwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDhweDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9Ci5tanItc3R1ZGlvLXNjb3Blc19fcGFuZWwgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcGFkZGluZzogNnB4OwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTAsIDEwLCAxMiwgMC43Mik7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDhweCk7Cn0KLm1qci1zdHVkaW8tc2NvcGVzX19wYW5lbCBjYW52YXMgewogICAgZGlzcGxheTogYmxvY2s7CiAgICB3aWR0aDogMjU2cHg7CiAgICBoZWlnaHQ6IDExMHB4Owp9Ci5tanItc3R1ZGlvLXNjb3Blc19fcGFuZWwgY2FudmFzLmlzLXdhdmUgewogICAgaGVpZ2h0OiAxMjhweDsKfQoubWpyLXN0dWRpby1zY29wZXNfX2xhYmVsIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDEwcHg7CiAgICB0b3A6IDZweDsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNik7Cn0KCi8qIFByb2JlIC8gbG91cGUgKi8KLm1qci1zdHVkaW8tcHJvYmUgewogICAgcG9zaXRpb246IGZpeGVkOwogICAgaW5zZXQ6IDA7CiAgICB6LWluZGV4OiAxMDAwMTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9Ci5tanItc3R1ZGlvLXByb2JlX19sb3VwZSB7CiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYm9yZGVyOiAycHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg1KTsKICAgIGJveC1zaGFkb3c6IDAgNnB4IDIwcHggcmdiYSgwLCAwLCAwLCAwLjU1KTsKICAgIGJhY2tncm91bmQ6ICMxMTE7Cn0KLm1qci1zdHVkaW8tcHJvYmVfX2xvdXBlIGNhbnZhcyB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgaW1hZ2UtcmVuZGVyaW5nOiBwaXhlbGF0ZWQ7Cn0KLm1qci1zdHVkaW8tcHJvYmVfX2Nyb3NzIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDUwJTsKICAgIHRvcDogNTAlOwogICAgd2lkdGg6IDEwcHg7CiAgICBoZWlnaHQ6IDEwcHg7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICNmZmY7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgwLCAwLCAwLCAwLjYpOwp9Ci5tanItc3R1ZGlvLXByb2JlX19jaGlwIHsKICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nOiA1cHggOXB4OwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgxMCwgMTAsIDEyLCAwLjg1KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgIGNvbG9yOiAjZmZmOwogICAgZm9udDogNTAwIDExcHgvMS4zIHVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBtb25vc3BhY2U7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9Ci5tanItc3R1ZGlvLXByb2JlX19jaGlwIC5pcy1kaW0gewogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KTsKfQoubWpyLXN0dWRpby1wcm9iZV9fc3dhdGNoIHsKICAgIHdpZHRoOiAxNHB4OwogICAgaGVpZ2h0OiAxNHB4OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQpOwp9CgovKiBBdWRpbyBzcGVjdHJ1bSAqLwoubWpyLXN0dWRpby1wbGF5ZXJfX2F1ZGlvLWFydC5oYXMtc3BlY3RydW0gewogICAgd2lkdGg6IG1pbig3MjBweCwgODYlKTsKfQoubWpyLXN0dWRpby1wbGF5ZXJfX3NwZWN0cnVtIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDE2MHB4Owp9Ci5tanItc3R1ZGlvLXBsYXllci5pcy1jb21wYWN0IC5tanItc3R1ZGlvLXBsYXllcl9fc3BlY3RydW0gewogICAgaGVpZ2h0OiA5MHB4Owp9Cg==", "" + import.meta.url).toString(), n = document.createElement("link"); n.id = t, n.rel = "stylesheet", n.type = "text/css", n.href = e, n.onerror = () => { try { n.remove(); @@ -869,7 +869,7 @@ var ji = { } }, Mi = null; function Ni() { - return Mi ||= import("./chunks/viewerOpenRequest-_DqD1rXA.js").then((e) => e.n), Mi; + return Mi ||= import("./chunks/viewerOpenRequest-CZXk8yvU.js").then((e) => e.n), Mi; } function Pi(e) { if (!e) return ""; @@ -1361,10 +1361,10 @@ function Hi() { // ui/features/contextmenu/GridContextMenu.ts var Ui = 1, Wi = null, Gi = null; function Ki() { - return Wi ||= import("./chunks/viewerOpenRequest-_DqD1rXA.js").then((e) => e.n), Wi; + return Wi ||= import("./chunks/viewerOpenRequest-CZXk8yvU.js").then((e) => e.n), Wi; } function qi() { - return Gi ||= import("./chunks/floatingViewerManager-CKeu6wKp.js").then((e) => e.n), Gi; + return Gi ||= import("./chunks/floatingViewerManager-CLgIT9uN.js").then((e) => e.n), Gi; } function Ji(e) { let t = String(e || "").trim().toLowerCase(); @@ -3631,7 +3631,7 @@ function vs() { } return e; } -var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ lr({ +var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ ur({ __name: "RatingBadge", props: { rating: { type: [Number, String], @@ -3642,27 +3642,27 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ lr({ } } }, setup(e) { - let t = e, n = K(() => Math.max(0, Math.min(5, Number(t.rating) || 0))), r = K(() => n.value > 0), i = K(() => R("rating.title", "Rating: {n} star{n, plural, one {} other {s}}", { n: n.value })); - return (e, t) => r.value ? (W(), X("div", { + let t = e, n = q(() => Math.max(0, Math.min(5, Number(t.rating) || 0))), r = q(() => n.value > 0), i = q(() => R("rating.title", "Rating: {n} star{n, plural, one {} other {s}}", { n: n.value })); + return (e, t) => r.value ? (J(), X("div", { key: 0, class: "mjr-rating-badge", title: i.value - }, [(W(!0), X(H, null, hr(n.value, (e) => (W(), X("span", { + }, [(J(!0), X(H, null, cr(n.value, (e) => (J(), X("span", { key: e, - style: br({ + style: xr({ color: "var(--mjr-rating-color, var(--mjr-star-active, #FFD45A))", marginRight: e < n.value ? "2px" : "0" }) }, " ★ ", 4))), 128))], 8, bs)) : G("", !0); } -}), Ss = ["title"], Cs = /* @__PURE__ */ lr({ +}), Ss = ["title"], Cs = /* @__PURE__ */ ur({ __name: "TagsBadge", props: { tags: { type: [Array, String], default: () => [] } }, setup(e) { - let t = e, n = K(() => { + let t = e, n = q(() => { if (Array.isArray(t.tags)) return t.tags.map((e) => String(e ?? "").trim()).filter(Boolean).slice(0, 10); if (typeof t.tags == "string") { let e = t.tags.trim(); @@ -3675,28 +3675,28 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ lr({ } } return []; - }), r = K(() => n.value.length > 0), i = K(() => R("tags.title", "Tags: {tags}", { tags: n.value.join(", ") })), a = K(() => { + }), r = q(() => n.value.length > 0), i = q(() => R("tags.title", "Tags: {tags}", { tags: n.value.join(", ") })), a = q(() => { let e = n.value; return e.length <= 5 ? e.join(", ") : e.slice(0, 5).join(", ") + ` +${e.length - 5}`; }); - return (e, t) => r.value ? (W(), X("div", { + return (e, t) => r.value ? (J(), X("div", { key: 0, class: "mjr-tags-badge", title: i.value, style: { color: "var(--mjr-tag-color, #90CAF9)" } - }, Z(a.value), 9, Ss)) : G("", !0); + }, Y(a.value), 9, Ss)) : G("", !0); } -}), ws = ["title"], Ts = /* @__PURE__ */ lr({ +}), ws = ["title"], Ts = /* @__PURE__ */ ur({ __name: "GenTimeBadge", props: { genTimeMs: { default: 0 } }, setup(e) { - let t = e, n = K(() => kt(t.genTimeMs)), r = K(() => n.value > 0), i = K(() => St(n.value)), a = K(() => wt(n.value)); - return (e, t) => r.value ? (W(), X("div", { + let t = e, n = q(() => kt(t.genTimeMs)), r = q(() => n.value > 0), i = q(() => St(n.value)), a = q(() => wt(n.value)); + return (e, t) => r.value ? (J(), X("div", { key: 0, class: "mjr-gentime-badge", title: i.value.title, - style: br({ color: a.value }) - }, Z(i.value.text), 13, ws)) : G("", !0); + style: xr({ color: a.value }) + }, Y(i.value.text), 13, ws)) : G("", !0); } }), Es = { key: 0, @@ -3757,7 +3757,7 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ lr({ opacity: "0.55", margin: "0 3px" } -}, oc = ["title"], sc = { class: "mjr-stack-group-button-count" }, cc = { class: "mjr-dup-stack-count" }, lc = /* @__PURE__ */ lr({ +}, oc = ["title"], sc = { class: "mjr-stack-group-button-count" }, cc = { class: "mjr-dup-stack-count" }, lc = /* @__PURE__ */ ur({ __name: "AssetCardInner", props: { asset: {} }, emits: ["workflow-action"], @@ -3893,26 +3893,26 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ lr({ function f(e) { e && (u(e), s(e)); } - let p = e, m = t, h = K(() => String(p.asset.kind || "image").toLowerCase()), g = K(() => h.value === "workflow"), _ = K(() => h.value === "image"), v = K(() => h.value === "video"), y = K(() => h.value === "audio"), b = K(() => h.value === "model3d"), x = K(() => Ge(p.asset) || ""), S = K(() => String(p.asset.thumbnail_url || p.asset.graph_map_thumbnail_url || p.asset.thumb_url || p.asset.poster || "").trim()), C = K(() => !!String(p.asset.thumbnail_url || p.asset.thumb_url || p.asset.poster || "").trim()), w = K(() => g.value && !C.value && !!String(p.asset.graph_map_thumbnail_url || "").trim()), T = K(() => String(p.asset.preview_url || p.asset.previewUrl || p.asset.url || "").trim()), E = K(() => x.value), D = K(() => T.value || x.value), O = K(() => !v.value && !g.value ? "" : et(p.asset, 384)), k = K(() => S.value || O.value), A = K(() => String(p.asset.filename || "")), j = K(() => String(p.asset.display_name || p.asset.displayName || p.asset.name || A.value || "").trim()), M = K(() => { + let p = e, m = t, h = q(() => String(p.asset.kind || "image").toLowerCase()), g = q(() => h.value === "workflow"), _ = q(() => h.value === "image"), v = q(() => h.value === "video"), y = q(() => h.value === "audio"), b = q(() => h.value === "model3d"), x = q(() => Ge(p.asset) || ""), S = q(() => String(p.asset.thumbnail_url || p.asset.graph_map_thumbnail_url || p.asset.thumb_url || p.asset.poster || "").trim()), C = q(() => !!String(p.asset.thumbnail_url || p.asset.thumb_url || p.asset.poster || "").trim()), w = q(() => g.value && !C.value && !!String(p.asset.graph_map_thumbnail_url || "").trim()), T = q(() => String(p.asset.preview_url || p.asset.previewUrl || p.asset.url || "").trim()), E = q(() => x.value), D = q(() => T.value || x.value), O = q(() => !v.value && !g.value ? "" : et(p.asset, 384)), k = q(() => S.value || O.value), A = q(() => String(p.asset.filename || "")), j = q(() => String(p.asset.display_name || p.asset.displayName || p.asset.name || A.value || "").trim()), M = q(() => { let e = A.value; return e.includes(".") ? e.split(".").pop().toUpperCase() : ""; - }), N = K(() => { + }), N = q(() => { let e = j.value || A.value; return e.includes(".") ? e.slice(0, e.lastIndexOf(".")) : e; - }), P = K(() => String(p.asset.notes || "").trim()), ee = K(() => r(`${p.asset.id || ""}:${A.value}:${p.asset.duration || ""}`)), te = K(() => N.value || A.value || "Audio"), F = K(() => [fe.value, M.value].filter(Boolean).join(" / ") || "Audio"), I = K(() => { + }), P = q(() => String(p.asset.notes || "").trim()), ee = q(() => r(`${p.asset.id || ""}:${A.value}:${p.asset.duration || ""}`)), te = q(() => N.value || A.value || "Audio"), F = q(() => [fe.value, M.value].filter(Boolean).join(" / ") || "Audio"), I = q(() => { let e = [A.value || j.value], t = String(p.asset.subfolder || p.asset.file_info?.subfolder || "").trim(), n = String(p.asset.type || p.asset.source || p.asset.file_info?.type || "").trim(); return t && e.push(`Subfolder: ${t}`), n && e.push(`Type: ${n}`), P.value && e.push(`Notes: ${P.value}`), e.filter(Boolean).join("\n"); - }), ne = K(() => Number(p.asset.rating) || 0), re = K(() => p.asset.tags || []), ie = K(() => { + }), ne = q(() => Number(p.asset.rating) || 0), re = q(() => p.asset.tags || []), ie = q(() => { let e = p.asset.generation_time_ms ?? p.asset.metadata?.generation_time_ms ?? 0; return kt(e); - }), ae = K(() => ie.value > 0), oe = K(() => St(ie.value)), se = K(() => wt(ie.value)), L = K(() => String(p.asset.positive_prompt || "").trim()), ce = K(() => p.asset?._mjrLivePlaceholder === !0 || p.asset?.is_live_placeholder === !0 || String(p.asset?.id || "").trim().toLowerCase().startsWith("live:")), le = K(() => String(p.asset?._mjrLiveLabel || "In progress").trim() || "In progress"), ue = K(() => `${le.value}: waiting for indexed asset data`), de = K(() => { + }), ae = q(() => ie.value > 0), oe = q(() => St(ie.value)), se = q(() => wt(ie.value)), L = q(() => String(p.asset.positive_prompt || "").trim()), ce = q(() => p.asset?._mjrLivePlaceholder === !0 || p.asset?.is_live_placeholder === !0 || String(p.asset?.id || "").trim().toLowerCase().startsWith("live:")), le = q(() => String(p.asset?._mjrLiveLabel || "In progress").trim() || "In progress"), ue = q(() => `${le.value}: waiting for indexed asset data`), de = q(() => { let { width: e, height: t } = p.asset; return e && t ? `${e}x${t}` : ""; - }), fe = K(() => p.asset.duration ? Sn(p.asset.duration) : ""), pe = K(() => String(p.asset.task || p.asset.workflow_task || "").trim()), me = K(() => String(p.asset.model_family || p.asset.modelFamily || "").trim()), he = K(() => String(p.asset.runs_on || p.asset.runsOn || "").trim()), ge = K(() => Number(p.asset.node_count || p.asset.nodeCount || 0) || 0), _e = K(() => !!p.asset.favorite), ve = K(() => Number(p.asset.subgraph_count || p.asset.subgraphCount || 0) || 0), ye = K(() => Number(p.asset.missing_nodes_count || p.asset.missingNodesCount || 0) || 0), be = K(() => Number(p.asset.missing_models_count || p.asset.missingModelsCount || 0) || 0), xe = K(() => ye.value > 0 || be.value > 0), Se = K(() => { + }), fe = q(() => p.asset.duration ? Sn(p.asset.duration) : ""), pe = q(() => String(p.asset.task || p.asset.workflow_task || "").trim()), me = q(() => String(p.asset.model_family || p.asset.modelFamily || "").trim()), he = q(() => String(p.asset.runs_on || p.asset.runsOn || "").trim()), ge = q(() => Number(p.asset.node_count || p.asset.nodeCount || 0) || 0), _e = q(() => !!p.asset.favorite), ve = q(() => Number(p.asset.subgraph_count || p.asset.subgraphCount || 0) || 0), ye = q(() => Number(p.asset.missing_nodes_count || p.asset.missingNodesCount || 0) || 0), be = q(() => Number(p.asset.missing_models_count || p.asset.missingModelsCount || 0) || 0), xe = q(() => ye.value > 0 || be.value > 0), Se = q(() => { if (!xe.value) return ""; let e = []; return ye.value > 0 && e.push(`${ye.value} node`), be.value > 0 && e.push(`${be.value} model`), `Missing: ${e.join(" / ")}`; - }), Ce = K(() => p.asset.generation_time || p.asset.file_creation_time || p.asset.mtime || p.asset.created_at), we = K(() => Ce.value ? Rn(Ce.value) : ""), Te = K(() => Ce.value ? jn(Ce.value) : ""), Ee = K(() => [ + }), Ce = q(() => p.asset.generation_time || p.asset.file_creation_time || p.asset.mtime || p.asset.created_at), we = q(() => Ce.value ? Rn(Ce.value) : ""), Te = q(() => Ce.value ? jn(Ce.value) : ""), Ee = q(() => [ de.value ? { key: "resolution", className: "mjr-meta-res", @@ -3947,12 +3947,12 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ lr({ fontWeight: "500" } } : null - ].filter(Boolean)), De = K(() => !!p.asset._mjrNameCollision && !p.asset._mjrDupStack), Oe = K(() => De.value ? "var(--mjr-badge-duplicate-alert, #ff1744)" : { + ].filter(Boolean)), De = q(() => !!p.asset._mjrNameCollision && !p.asset._mjrDupStack), Oe = q(() => De.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)" - }[h.value] || "var(--mjr-badge-image, #888)"), ke = sr("mjrStackService", null), Ae = K(() => !ke || !String(p.asset.stack_id || "").trim() ? !1 : Number(p.asset.stack_asset_count || p.asset._mjrFeedGroupCount || 0) > 1), je = K(() => Number(p.asset.stack_asset_count || p.asset._mjrFeedGroupCount || 0) || 0), Me = K(() => !!p.asset._mjrDupStack && Number(p.asset._mjrDupCount || 0) >= 2), Ne = K(() => Number(p.asset._mjrDupCount || 0) || 0), Pe = K(() => Me.value && !Ae.value), Fe = J(!1), Ie = J(!1); + }[h.value] || "var(--mjr-badge-image, #888)"), ke = dr("mjrStackService", null), Ae = q(() => !ke || !String(p.asset.stack_id || "").trim() ? !1 : Number(p.asset.stack_asset_count || p.asset._mjrFeedGroupCount || 0) > 1), je = q(() => Number(p.asset.stack_asset_count || p.asset._mjrFeedGroupCount || 0) || 0), Me = q(() => !!p.asset._mjrDupStack && Number(p.asset._mjrDupCount || 0) >= 2), Ne = q(() => Number(p.asset._mjrDupCount || 0) || 0), Pe = q(() => Me.value && !Ae.value), Fe = Q(!1), Ie = Q(!1); async function Le(e) { if (e.preventDefault(), e.stopPropagation(), !Fe.value) { Fe.value = !0; @@ -3977,7 +3977,7 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ lr({ } } } - let ze = J(null), Be = J(null), Ve = J(null), He = J(null), Ue = J(!1), We = J(!1), Ke = J(""), qe = 0, Je = "", Ye = "", Xe = ""; + let ze = Q(null), Be = Q(null), Ve = Q(null), He = Q(null), Ue = Q(!1), We = Q(!1), Ke = Q(""), qe = 0, Je = "", Ye = "", Xe = ""; function Ze() { try { Je && ys.releaseUrl(Je); @@ -3986,13 +3986,13 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ lr({ } Je = ""; } - wr(() => g.value ? S.value : _.value ? E.value : "", (e) => { + hr(() => g.value ? S.value : _.value ? E.value : "", (e) => { let t = String(e || "").trim(); t && t !== Ye && (Ue.value = !1, Ye = ""); - }, { immediate: !0 }), wr(() => b.value ? k.value : "", (e) => { + }, { immediate: !0 }), hr(() => b.value ? k.value : "", (e) => { let t = String(e || "").trim(); t && t !== Xe && (We.value = !1, Xe = ""); - }, { immediate: !0 }), wr(() => [_.value ? Ve.value : null, _.value ? E.value : ""], async ([e, t], n, r) => { + }, { immediate: !0 }), hr(() => [_.value ? Ve.value : null, _.value ? E.value : ""], async ([e, t], n, r) => { if (!e || !t || Ue.value) return; let o = qe += 1, s = new AbortController(), c = !1; r(() => { @@ -4012,35 +4012,35 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ lr({ } else !r && Je && Je !== t && (Ze(), Ke.value = ""); } catch {} }, { immediate: !0 }); - let Qe = J(B.GRID_VIDEO_AUTOPLAY_MODE || "hover"); + let Qe = Q(B.GRID_VIDEO_AUTOPLAY_MODE || "hover"); function $e() { Qe.value = B.GRID_VIDEO_AUTOPLAY_MODE || "hover"; } - nr(() => { + or(() => { window.addEventListener("mjr-settings-changed", $e); - }), wr(Be, (e, t) => { + }), hr(Be, (e, t) => { if (t) try { f(t); } catch {} if (e && ze.value) try { d(ze.value, e, Qe.value); } catch {} - }), wr(Qe, (e) => { + }), hr(Qe, (e) => { let t = Be.value, n = ze.value; t && n && d(n, t, e); - }), wr(D, (e, t) => { + }), hr(D, (e, t) => { if (e === t) return; let n = Be.value, r = ze.value; n && r && (f(n), d(r, n, Qe.value)); - }, { flush: "post" }), jr(() => { + }, { flush: "post" }), mr(() => { window.removeEventListener("mjr-settings-changed", $e), qe += 1, Ze(); let e = Be.value; if (e) try { f(e); } catch {} - }), mr(() => { + }), pr(() => { window.removeEventListener("mjr-settings-changed", $e); - }), ar(() => { + }), gr(() => { let e = He.value; if (!e) return; let t = p.asset; @@ -4088,49 +4088,49 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ lr({ }); } return (t, n) => { - let r = or("MButton"); - return W(), X(H, null, [ + let r = sr("MButton"); + return J(), X(H, null, [ U("div", { - class: yr(["mjr-thumb", { "mjr-thumb-workflow": g.value }]), + class: wr(["mjr-thumb", { "mjr-thumb-workflow": g.value }]), ref_key: "thumbRef", ref: ze }, [ - ce.value ? (W(), X("div", Es)) : G("", !0), - g.value ? (W(), X(H, { key: 1 }, [ + ce.value ? (J(), X("div", Es)) : G("", !0), + g.value ? (J(), X(H, { key: 1 }, [ U("div", { class: "mjr-workflow-card-actions", onClick: n[1] ||= fr(() => {}, ["stop"]), onDblclick: n[2] ||= fr(() => {}, ["stop"]) }, [U("button", { type: "button", - class: yr(["mjr-workflow-action-btn", { "is-active": _e.value }]), + class: wr(["mjr-workflow-action-btn", { "is-active": _e.value }]), title: _e.value ? "Remove favorite" : "Add favorite", "aria-label": _e.value ? "Remove favorite" : "Add favorite", onClick: n[0] ||= (e) => nt("favorite", e) - }, [U("i", { class: yr(_e.value ? "pi pi-star-fill" : "pi pi-star") }, null, 2)], 10, Ds)], 32), - k.value && !Ue.value ? (W(), X("img", { + }, [U("i", { class: wr(_e.value ? "pi pi-star-fill" : "pi pi-star") }, null, 2)], 10, Ds)], 32), + k.value && !Ue.value ? (J(), X("img", { key: 0, - class: yr(["mjr-thumb-media", { "mjr-workflow-graph-map-preview": w.value }]), + class: wr(["mjr-thumb-media", { "mjr-workflow-graph-map-preview": w.value }]), alt: A.value, decoding: "async", loading: "lazy", src: k.value, onError: R }, null, 42, Os)) : G("", !0), - U("div", { class: yr(["mjr-workflow-thumb", { + U("div", { class: wr(["mjr-workflow-thumb", { "has-thumbnail": k.value && !Ue.value, "has-graph-map": w.value && !Ue.value }]) }, [ n[15] ||= U("i", { class: "pi pi-sitemap" }, null, -1), - U("div", ks, Z(pe.value || "Workflow"), 1), + U("div", ks, Y(pe.value || "Workflow"), 1), U("div", As, [ - me.value ? (W(), X("span", js, Z(me.value), 1)) : G("", !0), - he.value ? (W(), X("span", Ms, Z(he.value), 1)) : G("", !0), - ge.value ? (W(), X("span", Ns, Z(ge.value) + " nodes", 1)) : G("", !0), - xe.value ? (W(), X("span", Ps, Z(Se.value), 1)) : G("", !0) + me.value ? (J(), X("span", js, Y(me.value), 1)) : G("", !0), + he.value ? (J(), X("span", Ms, Y(he.value), 1)) : G("", !0), + ge.value ? (J(), X("span", Ns, Y(ge.value) + " nodes", 1)) : G("", !0), + xe.value ? (J(), X("span", Ps, Y(Se.value), 1)) : G("", !0) ]) ], 2) - ], 64)) : _.value ? (W(), X(H, { key: 2 }, [Ue.value ? G("", !0) : (W(), X("img", { + ], 64)) : _.value ? (J(), X(H, { key: 2 }, [Ue.value ? G("", !0) : (J(), X("img", { key: 0, ref_key: "imgRef", ref: Ve, @@ -4140,7 +4140,7 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ lr({ loading: "lazy", src: Ke.value || E.value || void 0, onError: R - }, null, 40, Fs)), Ue.value ? (W(), X("div", Is, [...n[16] ||= [U("i", { class: "pi pi-image" }, null, -1)]])) : G("", !0)], 64)) : v.value ? (W(), X(H, { key: 3 }, [U("video", { + }, null, 40, Fs)), Ue.value ? (J(), X("div", Is, [...n[16] ||= [U("i", { class: "pi pi-image" }, null, -1)]])) : G("", !0)], 64)) : v.value ? (J(), X(H, { key: 3 }, [U("video", { ref_key: "videoRef", ref: Be, class: "mjr-thumb-media", @@ -4154,30 +4154,30 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ lr({ draggable: !1, tabindex: -1, style: { "pointer-events": "none" } - }, null, 8, Ls), n[17] ||= U("div", { class: "mjr-thumb-play" }, [U("i", { class: "pi pi-play" })], -1)], 64)) : y.value ? (W(), X(H, { key: 4 }, [k.value ? (W(), X("img", { + }, null, 8, Ls), n[17] ||= U("div", { class: "mjr-thumb-play" }, [U("i", { class: "pi pi-play" })], -1)], 64)) : y.value ? (J(), X(H, { key: 4 }, [k.value ? (J(), X("img", { key: 0, class: "mjr-thumb-media", src: k.value, draggable: !1, alt: "" - }, null, 8, Rs)) : G("", !0), U("div", { class: yr(["mjr-audio-thumb", { "has-poster": k.value }]) }, [ - U("div", zs, [n[18] ||= U("span", { class: "mjr-audio-thumb-icon" }, [U("i", { class: "pi pi-volume-up" })], -1), U("span", Bs, Z(M.value || "AUDIO"), 1)]), - U("div", Vs, [(W(!0), X(H, null, hr(ee.value, (e, t) => (W(), X("span", { + }, null, 8, Rs)) : G("", !0), U("div", { class: wr(["mjr-audio-thumb", { "has-poster": k.value }]) }, [ + U("div", zs, [n[18] ||= U("span", { class: "mjr-audio-thumb-icon" }, [U("i", { class: "pi pi-volume-up" })], -1), U("span", Bs, Y(M.value || "AUDIO"), 1)]), + U("div", Vs, [(J(!0), X(H, null, cr(ee.value, (e, t) => (J(), X("span", { key: t, - style: br({ + style: xr({ height: `${e.height}%`, opacity: e.opacity }) }, null, 4))), 128))]), - U("div", Hs, [U("span", Us, Z(te.value), 1), U("span", Ws, Z(F.value), 1)]) - ], 2)], 64)) : b.value ? (W(), X(H, { key: 5 }, [k.value && !We.value ? (W(), X("img", { + U("div", Hs, [U("span", Us, Y(te.value), 1), U("span", Ws, Y(F.value), 1)]) + ], 2)], 64)) : b.value ? (J(), X(H, { key: 5 }, [k.value && !We.value ? (J(), X("img", { key: 0, class: "mjr-thumb-media", src: k.value, draggable: !1, alt: A.value, onError: z - }, null, 40, Gs)) : (W(), X("div", Ks, [...n[19] ||= [U("i", { + }, null, 40, Gs)) : (J(), X("div", Ks, [...n[19] ||= [U("i", { class: "pi pi-box", style: { "font-size": "2.5rem" } }, null, -1)]]))], 64)) : G("", !0), @@ -4185,7 +4185,7 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ lr({ class: "mjr-file-badge mjr-badge-ext", "data-mjr-ext": M.value, "data-mjr-badge-bg": Oe.value, - style: br({ + style: xr({ position: "absolute", top: "6px", left: "6px", @@ -4201,28 +4201,28 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ lr({ }), title: De.value ? `${M.value} - duplicate filename (${e.asset._mjrNameCollisionCount || 2} files)` : `${M.value} file`, onClick: tt - }, Z(M.value) + Z(De.value ? "+" : ""), 13, qs), - Y(xs, { + }, Y(M.value) + Y(De.value ? "+" : ""), 13, qs), + W(xs, { rating: ne.value, class: "mjr-badge-rating" }, null, 8, ["rating"]), - Y(Cs, { + W(Cs, { tags: re.value, class: "mjr-badge-tags" }, null, 8, ["tags"]), - Y(Ts, { "gen-time-ms": ie.value }, null, 8, ["gen-time-ms"]), - ce.value ? (W(), X("div", { + W(Ts, { "gen-time-ms": ie.value }, null, 8, ["gen-time-ms"]), + ce.value ? (J(), X("div", { key: 6, class: "mjr-live-pill", title: ue.value }, [n[20] ||= U("span", { class: "mjr-live-pill-dot", "aria-hidden": "true" - }, null, -1), U("span", null, Z(le.value), 1)], 8, Js)) : G("", !0), - L.value || g.value && P.value || ae.value ? (W(), X("div", Ys, [ - L.value ? (W(), X("div", Xs, Z(L.value), 1)) : G("", !0), - g.value && P.value ? (W(), X("div", Zs, Z(P.value), 1)) : G("", !0), - ae.value ? (W(), X("div", Qs, "Time " + Z(oe.value.text), 1)) : G("", !0) + }, null, -1), U("span", null, Y(le.value), 1)], 8, Js)) : G("", !0), + L.value || g.value && P.value || ae.value ? (J(), X("div", Ys, [ + L.value ? (J(), X("div", Xs, Y(L.value), 1)) : G("", !0), + g.value && P.value ? (J(), X("div", Zs, Y(P.value), 1)) : G("", !0), + ae.value ? (J(), X("div", Qs, "Time " + Y(oe.value.text), 1)) : G("", !0) ])) : G("", !0) ], 2), U("div", { @@ -4244,28 +4244,28 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ lr({ "margin-bottom": "4px", "padding-right": "12px" } - }, Z(N.value), 9, ec), - U("div", tc, [g.value ? (W(), X(H, { key: 0 }, [ - pe.value ? (W(), X("span", { + }, Y(N.value), 9, ec), + U("div", tc, [g.value ? (J(), X(H, { key: 0 }, [ + pe.value ? (J(), X("span", { key: 0, class: "mjr-meta-workflow-task", title: `Task: ${pe.value}` - }, Z(pe.value), 9, nc)) : G("", !0), - ve.value ? (W(), X("span", { + }, Y(pe.value), 9, nc)) : G("", !0), + ve.value ? (J(), X("span", { key: 1, class: "mjr-meta-workflow-subgraphs", title: `${ve.value} subgraph${ve.value > 1 ? "s" : ""}` - }, Z(ve.value) + " sub", 9, rc)) : G("", !0), - xe.value ? (W(), X("span", { + }, Y(ve.value) + " sub", 9, rc)) : G("", !0), + xe.value ? (J(), X("span", { key: 2, class: "mjr-meta-workflow-missing", title: Se.value - }, Z(Se.value), 9, ic)) : G("", !0) - ], 64)) : G("", !0), (W(!0), X(H, null, hr(Ee.value, (e, t) => (W(), X(H, { key: e.key }, [t > 0 ? (W(), X("span", ac, "/")) : G("", !0), U("span", { - class: yr(e.className), - style: br(e.style || null), + }, Y(Se.value), 9, ic)) : G("", !0) + ], 64)) : G("", !0), (J(!0), X(H, null, cr(Ee.value, (e, t) => (J(), X(H, { key: e.key }, [t > 0 ? (J(), X("span", ac, "/")) : G("", !0), U("span", { + class: wr(e.className), + style: xr(e.style || null), title: e.title - }, Z(e.text), 15, oc)], 64))), 128))]), + }, Y(e.text), 15, oc)], 64))), 128))]), U("div", { ref_key: "dotWrapperRef", ref: He, @@ -4278,7 +4278,7 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ lr({ } }, null, 512) ], 8, $s), - Ae.value ? (W(), rr(r, { + Ae.value ? (J(), rr(r, { key: 0, type: "button", class: "mjr-stack-group-button", @@ -4297,7 +4297,7 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ lr({ onKeydown: n[7] ||= fr(() => {}, ["stop"]), onDragstart: n[8] ||= fr(() => {}, ["stop", "prevent"]) }, { - default: q(() => [n[21] ||= U("span", { class: "pi pi-clone" }, null, -1), U("span", sc, Z(je.value), 1)]), + default: K(() => [n[21] ||= U("span", { class: "pi pi-clone" }, null, -1), U("span", sc, Y(je.value), 1)]), _: 1 }, 8, [ "disabled", @@ -4305,7 +4305,7 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ lr({ "aria-label", "title" ])) : G("", !0), - Pe.value ? (W(), rr(r, { + Pe.value ? (J(), rr(r, { key: 1, type: "button", class: "mjr-dup-stack-button", @@ -4324,7 +4324,7 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ lr({ onKeydown: n[13] ||= fr(() => {}, ["stop"]), onDragstart: n[14] ||= fr(() => {}, ["stop", "prevent"]) }, { - default: q(() => [n[22] ||= U("span", { class: "pi pi-copy" }, null, -1), U("span", cc, Z(Ne.value), 1)]), + default: K(() => [n[22] ||= U("span", { class: "pi pi-copy" }, null, -1), U("span", cc, Y(Ne.value), 1)]), _: 1 }, 8, [ "disabled", @@ -4351,7 +4351,7 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ lr({ let n = e.__vccOpts || e; for (let [e, r] of t) n[e] = r; return n; -})(/* @__PURE__ */ lr({ +})(/* @__PURE__ */ ur({ __name: "FolderCard", props: { asset: {}, @@ -4359,7 +4359,7 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ lr({ }, emits: ["drop-asset"], setup(e, { emit: t }) { - let n = e, r = t, i = J(!1); + let n = e, r = t, i = Q(!1); function a(e) { e.dataTransfer && (e.dataTransfer.dropEffect = "move"), i.value = !0; } @@ -4380,8 +4380,8 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ lr({ folderPath: a }); } - return (t, n) => (W(), X("div", { - class: yr(["mjr-asset-card mjr-card mjr-folder-card", { + return (t, n) => (J(), X("div", { + class: wr(["mjr-asset-card mjr-card mjr-folder-card", { "is-selected": e.selected, "drop-active": i.value }]), @@ -4425,7 +4425,7 @@ var ys = vs(), bs = ["title"], xs = /* @__PURE__ */ lr({ "white-space": "nowrap", "margin-bottom": "4px" } - }, Z(e.asset.filename), 9, fc), n[0] ||= U("div", { class: "mjr-card-meta-row" }, null, -1)])], 42, uc)); + }, Y(e.asset.filename), 9, fc), n[0] ||= U("div", { class: "mjr-card-meta-row" }, null, -1)])], 42, uc)); } }), [["__scopeId", "data-v-252fa951"]]); // ui/vue/composables/useGridState.ts @@ -4433,7 +4433,7 @@ function mc(e) { return Array.from(e || []).map((e) => String(e || "").trim()).filter(Boolean); } function hc() { - let e = _r({ + let e = yr({ query: "*", offset: 0, cursor: null, @@ -4462,7 +4462,7 @@ function hc() { e.virtualGrid = { setItems(t) { e.assets = Array.isArray(t) ? t.slice() : []; } }; - let t = K(() => new Set(mc(e.selectedIds))); + let t = q(() => new Set(mc(e.selectedIds))); function n(t = "", { error: n = !1 } = {}) { e.statusMessage = String(t || ""), e.statusError = !!n; } @@ -5051,7 +5051,7 @@ function xl({ query: e, collection: t, fetchPage: n, pageSize: r = 80, getPageSi error: null, done: !1, requestId: 0 - }), o = K(() => t?.items?.value || []), s = K(() => !a.loading && !a.done); + }), o = q(() => t?.items?.value || []), s = q(() => !a.loading && !a.done); function c() { return e && typeof e == "object" && "value" in e ? e.value : e; } @@ -5566,7 +5566,7 @@ function Ql(e) { return e ? typeof e == "object" && "value" in e ? e.value || null : e : null; } async function $l() { - await dr(); + await nr(); } function eu(e, t) { let n = String(e || "Failed to load"); @@ -7286,30 +7286,30 @@ function Ou(e, t, n, r, i) { } // node_modules/@tanstack/vue-virtual/dist/esm/index.js function ku(e) { - let t = new Tu(Q(e)), n = Cr(t), r = t._didMount(); - return wr(() => Q(e).getScrollElement(), (e) => { + let t = new Tu(Z(e)), n = Cr(t), r = t._didMount(); + return hr(() => Z(e).getScrollElement(), (e) => { e && t._willUpdate(); - }, { immediate: !0 }), wr(() => Q(e), (e) => { + }, { immediate: !0 }), hr(() => Z(e), (e) => { t.setOptions({ ...e, onChange: (t, r) => { var i; - xr(n), (i = e.onChange) == null || i.call(e, t, r); + br(n), (i = e.onChange) == null || i.call(e, t, r); } - }), t._willUpdate(), xr(n); - }, { immediate: !0 }), Sr(r), n; + }), t._willUpdate(), br(n); + }, { immediate: !0 }), _r(r), n; } function Au(e) { - return ku(K(() => ({ + return ku(q(() => ({ observeElementRect: _u, observeElementOffset: xu, scrollToFn: Cu, - ...Q(e) + ...Z(e) }))); } // ui/vue/grid/useGridVirtualRows.ts function ju(e, t = 0) { - let n = Number(Q(e)); + let n = Number(Z(e)); return Number.isFinite(n) ? n : t; } function Mu(e = [], t = 1) { @@ -7325,15 +7325,15 @@ function Nu(e = [], t = 0, n = 1) { return r.slice(a, a + i); } function Pu({ scrollRef: e, items: t, rows: n, columnCount: r, estimateRowHeight: i, overscan: a = 8, enabled: o = !0, measure: s = Su } = {}) { - let c = K(() => { - if (!Q(o)) return 0; - let e = Q(n); + let c = q(() => { + if (!Z(o)) return 0; + let e = Z(n); if (Array.isArray(e)) return e.length; - let i = Q(t) || [], a = Math.max(1, ju(r, 1)); + let i = Z(t) || [], a = Math.max(1, ju(r, 1)); return Math.ceil((Array.isArray(i) ? i.length : 0) / a); - }), l = Au(K(() => ({ + }), l = Au(q(() => ({ count: c.value, - getScrollElement: () => Q(e) || null, + getScrollElement: () => Z(e) || null, estimateSize: () => Math.max(1, ju(i, 120)), overscan: Math.max(0, ju(a, 8)), measureElement: s @@ -7341,8 +7341,8 @@ function Pu({ scrollRef: e, items: t, rows: n, columnCount: r, estimateRowHeight return { rowCount: c, virtualizer: l, - virtualRows: K(() => { - let e = Q(n); + virtualRows: q(() => { + let e = Z(n); if (Array.isArray(e)) return l.value.getVirtualItems().map((t) => { let n = e[t.index] || {}; return { @@ -7355,7 +7355,7 @@ function Pu({ scrollRef: e, items: t, rows: n, columnCount: r, estimateRowHeight groupKey: String(n?.groupKey || "") }; }); - let i = Q(t) || [], a = Math.max(1, ju(r, 1)); + let i = Z(t) || [], a = Math.max(1, ju(r, 1)); return l.value.getVirtualItems().map((e) => ({ key: e.key, index: e.index, @@ -7366,17 +7366,17 @@ function Pu({ scrollRef: e, items: t, rows: n, columnCount: r, estimateRowHeight groupKey: "" })); }), - totalSize: K(() => l.value.getTotalSize()), - getRowItems: (e) => Nu(Q(t) || [], e, ju(r, 1)) + totalSize: q(() => l.value.getTotalSize()), + getRowItems: (e) => Nu(Z(t) || [], e, ju(r, 1)) }; } // ui/vue/grid/useInfiniteTrigger.ts function Fu(e, t = !0) { - let n = Q(e); + let n = Z(e); return n == null ? t : !!n; } function Iu({ rootRef: e, enabled: t = !0, canLoad: n = !0, loadMore: r, rootMargin: i = "900px", threshold: a = .01 } = {}) { - let o = J(null), s = null, c = !1; + let o = Q(null), s = null, c = !1; function l() { try { s?.disconnect?.(); @@ -7401,12 +7401,12 @@ function Iu({ rootRef: e, enabled: t = !0, canLoad: n = !0, loadMore: r, rootMar t && typeof IntersectionObserver == "function" && (s = new IntersectionObserver((e = []) => { e.some((e) => e?.isIntersecting) && u(); }, { - root: Q(e) || null, + root: Z(e) || null, rootMargin: i, threshold: a }), s.observe(t)); } - return ur() && (nr(d), jr(l), wr(() => [Q(e), o.value], () => d(), { flush: "post" })), { + return ir() && (or(d), mr(l), hr(() => [Z(e), o.value], () => d(), { flush: "post" })), { sentinelRef: o, connect: d, disconnect: l, @@ -7423,15 +7423,15 @@ function zu(e) { return !!e; } function Bu(e, t, n) { - Er(e)?.[t] !== n && (e[t] = n); + Dr(e)?.[t] !== n && (e[t] = n); } function Vu(e, t) { - let n = Er(e); + let n = Dr(e); n && Object.prototype.hasOwnProperty.call(n, t) && delete e[t]; } function Hu(e, t) { if (!Array.isArray(e) || e.length !== t.length) return !1; - for (let n = 0; n < t.length; n++) if (Er(e[n]) !== Er(t[n])) return !1; + for (let n = 0; n < t.length; n++) if (Dr(e[n]) !== Dr(t[n])) return !1; return !0; } function Uu(e) { @@ -7441,7 +7441,7 @@ function Uu(e) { } function Wu(e, t) { for (let t of Lu) Vu(e, t); - Bu(e, "_mjrNameCollision", !1), Bu(e, "_mjrDupStack", !0), Hu(Er(e)?._mjrDupMembers, t) || (e._mjrDupMembers = t.slice()), Bu(e, "_mjrDupCount", t.length), xt(e, t); + Bu(e, "_mjrNameCollision", !1), Bu(e, "_mjrDupStack", !0), Hu(Dr(e)?._mjrDupMembers, t) || (e._mjrDupMembers = t.slice()), Bu(e, "_mjrDupCount", t.length), xt(e, t); } function Gu(e, { collapseDuplicates: t = !0 } = {}) { let n = Array.isArray(e) ? e : []; @@ -7472,7 +7472,7 @@ function Ku(e) { let t = Array.isArray(e) ? e : [], n = [], r = /* @__PURE__ */ new Set(); for (let e of t) { if (!e || typeof e != "object") continue; - let t = { ...Er(e) }; + let t = { ...Dr(e) }; delete t._mjrDupMembers, delete t._mjrDupStack, delete t._mjrDupCount, delete t._mjrDupHidden, delete t._mjrNameCollision, delete t._mjrNameCollisionCount, delete t._mjrNameCollisionPaths; let i = String(t.id ?? ""); if (i) { @@ -7557,7 +7557,7 @@ var qu = { "onMousedown", "onClick", "onDblclick" -], od = 501, sd = /* @__PURE__ */ lr({ +], od = 501, sd = /* @__PURE__ */ ur({ __name: "VirtualAssetGridHost", props: { scrollElement: { default: null }, @@ -7583,14 +7583,14 @@ var qu = { } }, setup(t, { expose: n }) { - let r = t, i = J(null), o = J(1024); - J(!0); - let s = J(0), c = J(0), l = /* @__PURE__ */ new WeakMap(), u = 0, d = 0, f = 0, p = 0, m = 0, h = /* @__PURE__ */ new Map(), g = null, _ = null; + let r = t, i = Q(null), o = Q(1024); + Q(!0); + let s = Q(0), c = Q(0), l = /* @__PURE__ */ new WeakMap(), u = 0, d = 0, f = 0, p = 0, m = 0, h = /* @__PURE__ */ new Map(), g = null, _ = null; function v() { - return g ||= import("./chunks/viewerOpenRequest-_DqD1rXA.js").then((e) => e.n), g; + return g ||= import("./chunks/viewerOpenRequest-CZXk8yvU.js").then((e) => e.n), g; } function b() { - return _ ||= import("./chunks/floatingViewerManager-CKeu6wKp.js").then((e) => e.n), _; + return _ ||= import("./chunks/floatingViewerManager-CLgIT9uN.js").then((e) => e.n), _; } function x(e) { return (Array.isArray(e) ? e : []).slice().sort((e, t) => { @@ -7598,7 +7598,7 @@ var qu = { return (Number(t?.mtime || t?.created_at || 0) || 0) - n; }); } - pr("mjrStackService", { + ar("mjrStackService", { openStackGroup: async (e) => { let t = i.value; if (!t || !e) return; @@ -7646,7 +7646,7 @@ var qu = { function N(e) { return e ? typeof e == "object" && "value" in e ? e.value || null : e : null; } - let P = K(() => N(r.scrollElement)); + let P = q(() => N(r.scrollElement)); function ee() { return zl(i.value); } @@ -7692,7 +7692,7 @@ var qu = { }), { sentinelRef: ne } = Iu({ rootRef: P, enabled: !0, - canLoad: K(() => !S.loading && !S.done && F()), + canLoad: q(() => !S.loading && !S.done && F()), loadMore: () => I.loadNextPage(), rootMargin: "900px" }); @@ -7812,17 +7812,17 @@ var qu = { } } ve._lastSelectionKey = ""; - let ye = J(""), be = K(() => Gu(S.assets, { collapseDuplicates: ye.value !== "similar" })), xe = K(() => (Array.isArray(be.value) ? be.value : []).filter((e) => zu(e))), Se = J(/* @__PURE__ */ new Set()), Ce = J(""), we = K(() => { + let ye = Q(""), be = q(() => Gu(S.assets, { collapseDuplicates: ye.value !== "similar" })), xe = q(() => (Array.isArray(be.value) ? be.value : []).filter((e) => zu(e))), Se = Q(/* @__PURE__ */ new Set()), Ce = Q(""), we = q(() => { s.value; let e = ue(B.WORKFLOW_GRID_GROUP_BY); return e === "none" || Ce.value !== "workflow" ? "none" : e; - }), Te = K(() => { + }), Te = q(() => { let e = Array.isArray(xe.value) ? xe.value : []; if (!e.length) return []; let t = we.value; return t === "none" ? [] : me(e, Be.value, t); }); - wr(() => `${we.value}::${Te.value.map((e) => `${e.kind}:${e.groupKey}`).join("|")}`, () => { + hr(() => `${we.value}::${Te.value.map((e) => `${e.kind}:${e.groupKey}`).join("|")}`, () => { if (we.value === "none") { Se.value = /* @__PURE__ */ new Set(); return; @@ -7850,7 +7850,7 @@ var qu = { for (let e = 0; e < t.length; e += 1) n = (n << 5) - n + t.charCodeAt(e) | 0; return `mjr-grid-group-separator--accent-${Math.abs(n) % 8}`; } - let Ae = K(() => { + let Ae = q(() => { let e = Array.isArray(xe.value) ? xe.value : []; if (!e.length) return []; if (we.value === "none") return Mu(e, Be.value); @@ -7956,11 +7956,11 @@ var qu = { getDebugSnapshot: () => I.getDebugSnapshot() }, e._mjrLoadAssets = (...e) => I.loadAssets(...e), e._mjrLoadAssetsFromList = (...e) => I.loadAssetsFromList(...e), e._mjrPrepareForScopeSwitch = () => I.prepareGridForScopeSwitch(), e._mjrRefreshGrid = n, e._mjrCaptureAnchor = () => I.captureAnchor(), e._mjrRestoreAnchor = (e) => I.restoreAnchor(e), e._mjrHydrateFromSnapshot = (...e) => I.hydrateFromSnapshot(...e), e._mjrUpsertAsset = (e) => I.upsertAsset(e), e._mjrUpsertAssetNow = (e) => I.upsertAssetNow(e), e._mjrGetCanonicalState = () => I.getCanonicalState(), e._mjrGetDebugSnapshot = () => I.getDebugSnapshot(), e._mjrDispose = i; } - wr(i, (e) => { + hr(i, (e) => { e && (Re(e), _e(), je()); - }, { immediate: !0 }), wr(() => `${(S.selectedIds || []).join("|")}::${String(S.activeId || "")}`, () => { + }, { immediate: !0 }), hr(() => `${(S.selectedIds || []).join("|")}::${String(S.activeId || "")}`, () => { i.value && (_e(), ve()); - }, { flush: "post" }), wr(() => `${Array.isArray(xe.value) ? xe.value.length : 0}::${Number(S.total || 0)}::${Number(S.hiddenPngSiblings || 0)}`, () => { + }, { flush: "post" }), hr(() => `${Array.isArray(xe.value) ? xe.value.length : 0}::${Number(S.total || 0)}::${Number(S.hiddenPngSiblings || 0)}`, () => { i.value && je(); }, { flush: "post", @@ -7970,18 +7970,18 @@ var qu = { let e = i.value, t = String(e?.dataset?.mjrBottomFeed || "").toLowerCase() === "true", n = Number(B.GRID_MIN_SIZE || 120) || 120; return t ? Math.max(80, Number(B.FEED_GRID_MIN_SIZE || n) || n) : le() ? Math.max(180, n) : Math.max(80, n); } - let Be = K(() => { + let Be = q(() => { s.value; let e = Math.max(0, Number(B.GRID_GAP || 10) || 10), t = ze(), n = Number(o.value || 0) || Number(P.value?.clientWidth || 0) || 0; return n <= 0 ? 1 : Math.max(1, Math.floor((n + e) / (t + e))); - }), Ve = K(() => (Number(o.value || 0) || Number(P.value?.clientWidth || 0) || 0) > 0), He = K(() => (s.value, Math.max(0, Number(B.GRID_GAP || 10) || 10))), Ue = K(() => { + }), Ve = q(() => (Number(o.value || 0) || Number(P.value?.clientWidth || 0) || 0) > 0), He = q(() => (s.value, Math.max(0, Number(B.GRID_GAP || 10) || 10))), Ue = q(() => { let e = Math.max(1, Be.value), t = Number(o.value || 0) || Number(P.value?.clientWidth || 0) || 0; return t <= 0 ? ze() : Math.max(80, Math.floor((t - He.value * Math.max(0, e - 1)) / e)); - }), We = K(() => { + }), We = q(() => { s.value; let e = !!B.GRID_SHOW_DETAILS, t = Ue.value, n = e ? 82 : 0; return we.value === "none" ? t + n + He.value : Math.max(48, t + n + He.value); - }), Ge = K(() => r.virtualize ? [] : Array.isArray(Ae.value) ? Ae.value : []); + }), Ge = q(() => r.virtualize ? [] : Array.isArray(Ae.value) ? Ae.value : []); function Ke(e) { if (!d) try { d = requestAnimationFrame(() => { @@ -8024,30 +8024,30 @@ var qu = { rows: Ae, columnCount: Be, estimateRowHeight: We, - overscan: K(() => { + overscan: q(() => { let e = Math.max(1, We.value), t = P.value?.clientHeight || 0; if (t <= 0) return 6; let n = Math.ceil(t / e), r = Math.ceil(c.value * 3); return Math.max(3, Math.min(30, n + r)); }), - enabled: K(() => r.virtualize) - }), Ye = Je.rowCount, Xe = Je.virtualizer, Ze = Je.virtualRows, $e = Je.totalSize, et = K(() => { + enabled: q(() => r.virtualize) + }), Ye = Je.rowCount, Xe = Je.virtualizer, Ze = Je.virtualRows, $e = Je.totalSize, et = q(() => { let e = /* @__PURE__ */ new Map(); for (let t of Ze.value) e.set(t.index, t.virtual || t); return e; - }), z = K(() => (s.value, !!B.GRID_SHOW_DETAILS)), tt = K(() => { + }), z = q(() => (s.value, !!B.GRID_SHOW_DETAILS)), tt = q(() => { let e = Math.max(1, Number(Be.value || 1)); return Math.max(12, Math.min(36, e * 4)); - }), nt = K(() => Array.from({ length: Number(tt.value || 12) }, (e, t) => t)), it = K(() => { + }), nt = q(() => Array.from({ length: Number(tt.value || 12) }, (e, t) => t)), it = q(() => { let e = Math.max(80, Number(We.value || 0) - Number(He.value || 0)), t = Math.max(80, Number(Ue.value || 0)); return Math.max(0, e - t); - }), at = K(() => ({ + }), at = q(() => ({ display: "grid", gridTemplateColumns: `repeat(${Math.max(1, Number(Be.value || 1))}, minmax(0, ${Math.max(80, Number(Ue.value || 0))}px))`, gap: `${He.value}px`, justifyContent: "start", boxSizing: "border-box" - })), ot = K(() => ({ + })), ot = q(() => ({ width: "100%", minWidth: "0", height: `${Math.max(80, Number(We.value || 0) - Number(He.value || 0))}px`, @@ -8057,13 +8057,13 @@ var qu = { overflow: "hidden", boxShadow: "0 6px 18px rgba(0,0,0,0.24)", boxSizing: "border-box" - })), st = K(() => ({ + })), st = q(() => ({ width: "100%", height: `${Math.max(80, Number(Ue.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" - })), ct = K(() => ({ + })), ct = q(() => ({ height: "10px", margin: "10px 10px 6px", borderRadius: "8px", @@ -8071,7 +8071,7 @@ var qu = { 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" - })), lt = K(() => ({ + })), lt = q(() => ({ height: "10px", margin: "0 10px 10px", borderRadius: "8px", @@ -8079,7 +8079,7 @@ var qu = { background: "linear-gradient(90deg, rgba(160,166,173,0.34) 0%, rgba(208,214,221,0.48) 50%, rgba(160,166,173,0.34) 100%)", backgroundSize: "220% 100%", animation: "mjr-skeleton-shimmer 2.2s ease-in-out infinite" - })), ut = K(() => ({ + })), ut = q(() => ({ display: z.value ? "block" : "none", minHeight: `${Math.max(0, Number(it.value || 0))}px` })); @@ -8112,9 +8112,9 @@ var qu = { 400 ]) setTimeout(e, t); } - nr(() => { + or(() => { _t(), window.addEventListener(V.VIEWER_ACTIVE_ASSET_CHANGED, Ie); - }), wr(i, (e) => { + }), hr(i, (e) => { try { pt?.disconnect?.(); } catch (e) { @@ -8133,7 +8133,7 @@ var qu = { console.debug?.(e), pt = null; } } - }, { immediate: !0 }), wr(P, (e, t) => { + }, { immediate: !0 }), hr(P, (e, t) => { try { ft?.disconnect?.(); } catch (e) { @@ -8149,14 +8149,14 @@ var qu = { console.debug?.(e), ft = null; } } - }, { immediate: !0 }), wr(() => Ye.value, async () => { - Ve.value && (await dr(), xt(), Ht()); - }), wr(() => S.assets, async (e) => { + }, { immediate: !0 }), hr(() => Ye.value, async () => { + Ve.value && (await nr(), xt(), Ht()); + }), hr(() => S.assets, async (e) => { if (!Array.isArray(e) || e.length === 0) { let e = i.value; e?._mjrStackMembersCache && e._mjrStackMembersCache.clear(); } - await dr(), xt(); + await nr(), xt(); }); function vt(e, t) { let n = String(t?.filename || "").trim().toLowerCase(), r = l.get(e); @@ -8468,7 +8468,7 @@ var qu = { qe(); }; } - wr(P, (e) => { + hr(P, (e) => { try { Lt?.(); } catch (e) { @@ -8492,7 +8492,7 @@ var qu = { let e = P.value; if (!e) return; let t = Array.isArray(S.assets) ? S.assets.length : 0, n = `${t}::${Be.value}`; - if (!Rt && !(n === Bt && Date.now() - zt < 500) && (await dr(), (Number(e.scrollHeight || 0) || 0) <= Gt(e) + 40)) { + if (!Rt && !(n === Bt && Date.now() - zt < 500) && (await nr(), (Number(e.scrollHeight || 0) || 0) <= Gt(e) + 40)) { let e = t; Rt = Promise.resolve(I.loadNextPage()).catch((e) => console.debug?.(e)).finally(() => { let t = Array.isArray(S.assets) ? S.assets.length : 0; @@ -8502,7 +8502,7 @@ var qu = { }); } } - wr(() => `${Array.isArray(S.assets) ? S.assets.length : 0}::${Be.value}::${S.loading}::${S.done}`, () => { + hr(() => `${Array.isArray(S.assets) ? S.assets.length : 0}::${Be.value}::${S.loading}::${S.done}`, () => { Kt(); }, { flush: "post" }); function qt(e) { @@ -8547,9 +8547,9 @@ var qu = { function Qt() { s.value += 1, r.applyDefaultSettingsClasses && i.value && mi(i.value); } - return wr(() => r.applyDefaultSettingsClasses, () => { + return hr(() => r.applyDefaultSettingsClasses, () => { i.value && r.applyDefaultSettingsClasses && mi(i.value); - }, { immediate: !0 }), jr(() => { + }, { immediate: !0 }), mr(() => { try { window.removeEventListener(V.VIEWER_ACTIVE_ASSET_CHANGED, Ie); } catch (e) { @@ -8607,7 +8607,7 @@ var qu = { } catch (e) { console.debug?.(e); } - }), wr(i, (e) => { + }), hr(i, (e) => { e && (ht ||= (window.addEventListener("mjr-settings-changed", Qt), window.addEventListener("mjr:keepalive-attached", Ut), !0)); }, { immediate: !0 }), n({ get gridContainer() { @@ -8664,7 +8664,7 @@ var qu = { dispose() { return I.dispose(); } - }), (e, n) => (W(), X("div", { + }), (e, n) => (J(), X("div", { ref_key: "gridContainerRef", ref: i, class: "mjr-grid", @@ -8675,27 +8675,27 @@ var qu = { "min-height": "100%" } }, [ - Q(S).loading && !Q(S).assets.length ? (W(), X("div", qu, [U("div", Ju, [U("div", { + Z(S).loading && !Z(S).assets.length ? (J(), X("div", qu, [U("div", Ju, [U("div", { class: "mjr-grid-skeleton-layout", - style: br(at.value) - }, [(W(!0), X(H, null, hr(nt.value, (e) => (W(), X("div", { + style: xr(at.value) + }, [(J(!0), X(H, null, cr(nt.value, (e) => (J(), X("div", { key: `sk-${e}`, class: "mjr-grid-skeleton-card", - style: br(ot.value) + style: xr(ot.value) }, [U("div", { class: "mjr-grid-skeleton-thumb mjr-grid-skeleton-shimmer", - style: br(st.value) - }, null, 4), U("div", { style: br(ut.value) }, [U("div", { + style: xr(st.value) + }, null, 4), U("div", { style: xr(ut.value) }, [U("div", { class: "mjr-grid-skeleton-line mjr-grid-skeleton-line--title mjr-grid-skeleton-shimmer", - style: br(ct.value) + style: xr(ct.value) }, null, 4), U("div", { class: "mjr-grid-skeleton-line mjr-grid-skeleton-line--meta mjr-grid-skeleton-shimmer", - style: br(lt.value) - }, null, 4)], 4)], 4))), 128))], 4), U("div", Yu, Z(Q(S).loadingMessage || "Loading assets..."), 1)])])) : G("", !0), - Q(S).statusMessage && !Q(S).assets.length && !Q(S).loading ? (W(), X("div", { + style: xr(lt.value) + }, null, 4)], 4)], 4))), 128))], 4), U("div", Yu, Y(Z(S).loadingMessage || "Loading assets..."), 1)])])) : G("", !0), + Z(S).statusMessage && !Z(S).assets.length && !Z(S).loading ? (J(), X("div", { key: 1, class: "mjr-grid-message", - style: br({ + style: xr({ position: "absolute", inset: "0", zIndex: 3, @@ -8707,38 +8707,38 @@ var qu = { pointerEvents: "none", fontSize: "14px", lineHeight: "1.4", - color: Q(S).statusError ? "var(--error-text, #f44336)" : "var(--muted-text, #bdbdbd)", + color: Z(S).statusError ? "var(--error-text, #f44336)" : "var(--muted-text, #bdbdbd)", background: "rgba(0, 0, 0, 0.35)" }) - }, Z(Q(S).statusMessage), 5)) : G("", !0), - t.virtualize ? (W(), X("div", { + }, Y(Z(S).statusMessage), 5)) : G("", !0), + t.virtualize ? (J(), X("div", { key: 2, - style: br({ - height: `${Q($e)}px`, + style: xr({ + height: `${Z($e)}px`, position: "relative", width: "100%", gridColumn: "1 / -1" }) - }, [(W(!0), X(H, null, hr(Q(Ze), (e) => (W(), X("div", { + }, [(J(!0), X(H, null, cr(Z(Ze), (e) => (J(), X("div", { key: e.key, ref_for: !0, ref: qt, "data-index": e.index, - style: br(Xt(e.index)) - }, [e.kind === "header" ? (W(), X("button", { + style: xr(Xt(e.index)) + }, [e.kind === "header" ? (J(), X("button", { key: 0, type: "button", - class: yr(["mjr-grid-group-separator", Oe(e)]), + class: wr(["mjr-grid-group-separator", Oe(e)]), "aria-expanded": Ee(e.groupKey) ? "false" : "true", title: `${Ee(e.groupKey) ? "Open" : "Close"} group`, onClick: (t) => De(e.groupKey) - }, [U("span", Qu, [U("i", { class: yr(["pi", Ee(e.groupKey) ? "pi-chevron-down" : "pi-chevron-up"]) }, null, 2)]), U("span", $u, Z(e.title), 1)], 10, Zu)) : e.items.length ? (W(!0), X(H, { key: 1 }, hr(e.items, (e) => (W(), X(H, { key: String(e.id) }, [L(e) ? (W(), rr(pc, { + }, [U("span", Qu, [U("i", { class: wr(["pi", Ee(e.groupKey) ? "pi-chevron-down" : "pi-chevron-up"]) }, null, 2)]), U("span", $u, Y(e.title), 1)], 10, Zu)) : e.items.length ? (J(!0), X(H, { key: 1 }, cr(e.items, (e) => (J(), X(H, { key: String(e.id) }, [L(e) ? (J(), rr(pc, { key: 0, ref_for: !0, ref: wt(e), asset: e, selected: se(e), - style: br(Jt()), + style: xr(Jt()), onMousedown: fr((t) => Ot(t, e), ["left"]), onClick: (t) => Dt(t, e), onDblclick: fr((t) => Pt(e), ["stop"]), @@ -8750,18 +8750,18 @@ var qu = { "onMousedown", "onClick", "onDblclick" - ])) : (W(), X("div", { + ])) : (J(), X("div", { key: 1, ref_for: !0, ref: wt(e), - class: yr(["mjr-asset-card mjr-card", { + class: wr(["mjr-asset-card mjr-card", { "is-selected": se(e), "mjr-live-placeholder": ge(e) }]), role: "button", tabindex: "0", draggable: "true", - style: br(Jt()), + style: xr(Jt()), "data-mjr-asset-id": String(e.id ?? ""), "data-mjr-filename-key": String(e.filename || "").toLowerCase(), "data-mjr-ext": ie(e), @@ -8777,26 +8777,26 @@ var qu = { onMousedown: fr((t) => Ot(t, e), ["left"]), onClick: (t) => Dt(t, e), onDblclick: fr((t) => Pt(e), ["stop"]) - }, [Y(lc, { + }, [W(lc, { asset: e, onWorkflowAction: (t) => Mt(t, e) - }, null, 8, ["asset", "onWorkflowAction"])], 46, ed))], 64))), 128)) : G("", !0)], 12, Xu))), 128))], 4)) : (W(), X("div", td, [(W(!0), X(H, null, hr(Ge.value, (e) => (W(), X("div", { + }, null, 8, ["asset", "onWorkflowAction"])], 46, ed))], 64))), 128)) : G("", !0)], 12, Xu))), 128))], 4)) : (J(), X("div", td, [(J(!0), X(H, null, cr(Ge.value, (e) => (J(), X("div", { key: `${e.kind || "assets"}-${e.groupKey || ""}-${e.index ?? ""}`, - style: br(Zt()) - }, [e.kind === "header" ? (W(), X("button", { + style: xr(Zt()) + }, [e.kind === "header" ? (J(), X("button", { key: 0, type: "button", - class: yr(["mjr-grid-group-separator", Oe(e)]), + class: wr(["mjr-grid-group-separator", Oe(e)]), "aria-expanded": Ee(e.groupKey) ? "false" : "true", title: `${Ee(e.groupKey) ? "Open" : "Close"} group`, onClick: (t) => De(e.groupKey) - }, [U("span", rd, [U("i", { class: yr(["pi", Ee(e.groupKey) ? "pi-chevron-down" : "pi-chevron-up"]) }, null, 2)]), U("span", id, Z(e.title), 1)], 10, nd)) : (W(!0), X(H, { key: 1 }, hr(e.items, (e) => (W(), X(H, { key: String(e.id) }, [L(e) ? (W(), rr(pc, { + }, [U("span", rd, [U("i", { class: wr(["pi", Ee(e.groupKey) ? "pi-chevron-down" : "pi-chevron-up"]) }, null, 2)]), U("span", id, Y(e.title), 1)], 10, nd)) : (J(!0), X(H, { key: 1 }, cr(e.items, (e) => (J(), X(H, { key: String(e.id) }, [L(e) ? (J(), rr(pc, { key: 0, ref_for: !0, ref: wt(e), asset: e, selected: se(e), - style: br(Jt()), + style: xr(Jt()), onMousedown: fr((t) => Ot(t, e), ["left"]), onClick: (t) => Dt(t, e), onDblclick: fr((t) => Pt(e), ["stop"]), @@ -8808,18 +8808,18 @@ var qu = { "onMousedown", "onClick", "onDblclick" - ])) : (W(), X("div", { + ])) : (J(), X("div", { key: 1, ref_for: !0, ref: wt(e), - class: yr(["mjr-asset-card mjr-card", { + class: wr(["mjr-asset-card mjr-card", { "is-selected": se(e), "mjr-live-placeholder": ge(e) }]), role: "button", tabindex: "0", draggable: "true", - style: br(Jt()), + style: xr(Jt()), "data-mjr-asset-id": String(e.id ?? ""), "data-mjr-filename-key": String(e.filename || "").toLowerCase(), "data-mjr-ext": ie(e), @@ -8835,7 +8835,7 @@ var qu = { onMousedown: fr((t) => Ot(t, e), ["left"]), onClick: (t) => Dt(t, e), onDblclick: fr((t) => Pt(e), ["stop"]) - }, [Y(lc, { + }, [W(lc, { asset: e, onWorkflowAction: (t) => Mt(t, e) }, null, 8, ["asset", "onWorkflowAction"])], 46, ad))], 64))), 128))], 4))), 128))])), @@ -8854,10 +8854,10 @@ var qu = { } }), cd = 240, ld = 120, ud = 80, dd = null, fd = null; function pd() { - return dd ||= import("./chunks/viewerOpenRequest-_DqD1rXA.js").then((e) => e.n), dd; + return dd ||= import("./chunks/viewerOpenRequest-CZXk8yvU.js").then((e) => e.n), dd; } function md() { - return fd ||= import("./chunks/floatingViewerManager-CKeu6wKp.js").then((e) => e.n), fd; + return fd ||= import("./chunks/floatingViewerManager-CLgIT9uN.js").then((e) => e.n), fd; } function hd(e) { let t = document.createElement("button"); @@ -11090,13 +11090,13 @@ function Wp(e = null) { // ui/vue/composables/useDragDrop.ts function Gp() { let e = null; - nr(() => { + or(() => { try { e = ss() ?? null; } catch (e) { console.warn("[Majoor] useDragDrop: init failed", e); } - }), mr(() => { + }), pr(() => { try { e?.({ force: !0 }); } catch (e) { @@ -11111,10 +11111,10 @@ function Gp() { }); } // ui/vue/GlobalRuntime.vue -var Kp = /* @__PURE__ */ lr({ +var Kp = /* @__PURE__ */ ur({ __name: "GlobalRuntime", setup(e) { - let t = cr(() => import("./chunks/ViewerPortal-wTimKJbx.js")), n = J(!1), r = [ + let t = lr(() => import("./chunks/ViewerPortal-DMaFAqG8.js")), n = Q(!1), r = [ V.OPEN_VIEWER, V.MFV_OPEN, V.MFV_TOGGLE, @@ -11127,7 +11127,7 @@ var Kp = /* @__PURE__ */ lr({ if (n.value) return; n.value = !0; let t = String(e?.type || ""), r = e?.detail ?? null; - t && t !== V.OPEN_VIEWER && dr(() => { + t && t !== V.OPEN_VIEWER && nr(() => { try { window.dispatchEvent(new CustomEvent(t, { detail: r })); } catch (e) { @@ -11135,19 +11135,19 @@ var Kp = /* @__PURE__ */ lr({ } }); } - return Gp(), nr(() => { + return Gp(), or(() => { for (let e of r) try { window.addEventListener(e, i, { once: !1 }); } catch (e) { console.debug?.(e); } - }), mr(() => { + }), pr(() => { for (let e of r) try { window.removeEventListener(e, i); } catch (e) { console.debug?.(e); } - }), (e, r) => n.value ? (W(), rr(Q(t), { key: 0 })) : G("", !0); + }), (e, r) => n.value ? (J(), rr(Z(t), { key: 0 })) : G("", !0); } }), qp = { gridRenderCount: 0, @@ -12645,8 +12645,8 @@ function vh(e) { } catch {} } var yh = Mr("mjr-panel", () => { - let e = _h(), t = J(e.scope || "output"), n = J(e.customRootId || ""), r = J(e.customRootLabel || ""), i = J(e.currentFolderRelativePath || ""), a = J(e.collectionId || ""), o = J(e.collectionName || ""), s = J(e.kindFilter || ""), c = J(e.dateRangeFilter || ""), l = J(e.dateExactFilter || ""), u = J(e.workflowOnly || !1), d = J(e.minRating || 0), f = J(e.minSizeMB || 0), p = J(e.maxSizeMB || 0), m = J(e.resolutionCompare || "gte"), h = J(e.minWidth || 0), g = J(e.minHeight || 0), _ = J(e.maxWidth || 0), v = J(e.maxHeight || 0), y = J(e.workflowType || ""), b = J(e.workflowId || ""), x = J(e.workflowModelFilter || ""), S = J(e.workflowRunsOnFilter || ""), C = J(e.sort || "mtime_desc"), w = J(e.searchQuery || ""), T = J(e.metadataSearchMode || "AND"), E = J(e.scrollTop || 0), D = J(e.activeAssetId || ""), O = J(e.selectedAssetIds || []), k = J(e.sidebarOpen || !1), A = J(0), j = J(0), M = J(""), N = J([]), P = J(""), ee = J(""), te = null; - wr([ + let e = _h(), t = Q(e.scope || "output"), n = Q(e.customRootId || ""), r = Q(e.customRootLabel || ""), i = Q(e.currentFolderRelativePath || ""), a = Q(e.collectionId || ""), o = Q(e.collectionName || ""), s = Q(e.kindFilter || ""), c = Q(e.dateRangeFilter || ""), l = Q(e.dateExactFilter || ""), u = Q(e.workflowOnly || !1), d = Q(e.minRating || 0), f = Q(e.minSizeMB || 0), p = Q(e.maxSizeMB || 0), m = Q(e.resolutionCompare || "gte"), h = Q(e.minWidth || 0), g = Q(e.minHeight || 0), _ = Q(e.maxWidth || 0), v = Q(e.maxHeight || 0), y = Q(e.workflowType || ""), b = Q(e.workflowId || ""), x = Q(e.workflowModelFilter || ""), S = Q(e.workflowRunsOnFilter || ""), C = Q(e.sort || "mtime_desc"), w = Q(e.searchQuery || ""), T = Q(e.metadataSearchMode || "AND"), E = Q(e.scrollTop || 0), D = Q(e.activeAssetId || ""), O = Q(e.selectedAssetIds || []), k = Q(e.sidebarOpen || !1), A = Q(0), j = Q(0), M = Q(""), N = Q([]), P = Q(""), ee = Q(""), te = null; + hr([ t, n, r, @@ -12720,7 +12720,7 @@ var yh = Mr("mjr-panel", () => { try { window.addEventListener("storage", F); } catch {} - Sr(() => { + _r(() => { try { window.removeEventListener("storage", F); } catch {} @@ -18389,11 +18389,11 @@ async function D_(t, { useComfyThemeUI: n = !0, external: r = {} } = {}) { return tm(Xp("panelRender", "gridRender") ?? 0), { gridContainer: z }; } // ui/vue/components/status/StatusSection.vue -var O_ = /* @__PURE__ */ lr({ +var O_ = /* @__PURE__ */ ur({ __name: "StatusSection", setup(e, { expose: t }) { let n = Om({ getScanContext: null }), r = n.querySelector("#mjr-status-dot"), i = n.querySelector("#mjr-status-text"), a = n.querySelector("#mjr-status-capabilities"); - return mr(() => { + return pr(() => { try { n?._mjrStatusPollDispose?.(); } catch {} @@ -18422,10 +18422,10 @@ function j_(e = null) { var M_ = { class: "mjr-popover mjr-similar-popover", style: { display: "none" } -}, N_ = { class: "mjr-menu mjr-similar-menu" }, P_ = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, F_ = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, I_ = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, L_ = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, R_ = /* @__PURE__ */ lr({ +}, N_ = { class: "mjr-menu mjr-similar-menu" }, P_ = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, F_ = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, I_ = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, L_ = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, R_ = /* @__PURE__ */ ur({ __name: "SimilarSearchPopover", setup(e, { expose: t }) { - let n = J(null), r = J(null), i = J(null), a = J(null), o = (e) => e?.$el || e || null; + let n = Q(null), r = Q(null), i = Q(null), a = Q(null), o = (e) => e?.$el || e || null; return t({ get findSimilarBtn() { return o(n.value); @@ -18440,24 +18440,24 @@ var M_ = { return o(a.value); } }), (e, t) => { - let o = or("MButton"); - return W(), X("div", M_, [U("div", N_, [ - Y(o, { + let o = sr("MButton"); + return J(), X("div", M_, [U("div", N_, [ + W(o, { ref_key: "findSimilarBtnRef", ref: n, type: "button", class: "mjr-menu-item", severity: "secondary", text: "", - title: Q(R)("search.findSimilarWarning", "Find similar assets. This may be heavy on very large libraries.") + title: Z(R)("search.findSimilarWarning", "Find similar assets. This may be heavy on very large libraries.") }, { - default: q(() => [U("span", P_, [t[0] ||= U("i", { + default: K(() => [U("span", P_, [t[0] ||= U("i", { class: "pi pi-sparkles", "aria-hidden": "true" - }, null, -1), U("span", null, Z(Q(R)("search.findSimilar", "Find Similar")), 1)])]), + }, null, -1), U("span", null, Y(Z(R)("search.findSimilar", "Find Similar")), 1)])]), _: 1 }, 8, ["title"]), - Y(o, { + W(o, { ref_key: "findDuplicatesBtnRef", ref: r, type: "button", @@ -18465,14 +18465,14 @@ var M_ = { severity: "secondary", text: "" }, { - default: q(() => [U("span", F_, [t[1] ||= U("i", { + default: K(() => [U("span", F_, [t[1] ||= U("i", { class: "pi pi-clone", "aria-hidden": "true" - }, null, -1), U("span", null, Z(Q(R)("search.findDuplicates", "Find Duplicate")), 1)])]), + }, null, -1), U("span", null, Y(Z(R)("search.findDuplicates", "Find Duplicate")), 1)])]), _: 1 }, 512), t[4] ||= U("div", { class: "mjr-menu-divider" }, null, -1), - Y(o, { + W(o, { ref_key: "sameNodeBtnRef", ref: i, type: "button", @@ -18480,13 +18480,13 @@ var M_ = { severity: "secondary", text: "" }, { - default: q(() => [U("span", I_, [t[2] ||= U("i", { + default: K(() => [U("span", I_, [t[2] ||= U("i", { class: "pi pi-share-alt", "aria-hidden": "true" - }, null, -1), U("span", null, Z(Q(R)("search.generatedWithSameSaveNode", "Generated with same save node")), 1)])]), + }, null, -1), U("span", null, Y(Z(R)("search.generatedWithSameSaveNode", "Generated with same save node")), 1)])]), _: 1 }, 512), - Y(o, { + W(o, { ref_key: "sameWorkflowBtnRef", ref: a, type: "button", @@ -18494,20 +18494,20 @@ var M_ = { severity: "secondary", text: "" }, { - default: q(() => [U("span", L_, [t[3] ||= U("i", { + default: K(() => [U("span", L_, [t[3] ||= U("i", { class: "pi pi-sitemap", "aria-hidden": "true" - }, null, -1), U("span", null, Z(Q(R)("search.generatedFromSameWorkflow", "Generated from same workflow")), 1)])]), + }, null, -1), U("span", null, Y(Z(R)("search.generatedFromSameWorkflow", "Generated from same workflow")), 1)])]), _: 1 }, 512) ])]); }; } -}), z_ = { class: "mjr-am-search-pill" }, B_ = ["id"], V_ = { class: "mjr-am-search-tools" }, H_ = { class: "mjr-popover-anchor" }, U_ = { class: "mjr-popover-anchor" }, W_ = "Ctrl/Cmd+F, Ctrl/Cmd+K, Ctrl/Cmd+H", G_ = "AND", K_ = /* @__PURE__ */ lr({ +}), z_ = { class: "mjr-am-search-pill" }, B_ = ["id"], V_ = { class: "mjr-am-search-tools" }, H_ = { class: "mjr-popover-anchor" }, U_ = { class: "mjr-popover-anchor" }, W_ = "Ctrl/Cmd+F, Ctrl/Cmd+K, Ctrl/Cmd+H", G_ = "AND", K_ = /* @__PURE__ */ ur({ __name: "SearchBar", emits: ["search-change"], setup(e, { expose: t, emit: n }) { - let r = n, i = yh(), a = J(null), o = J(null), s = J(null), c = J(null), l = J(null), u = J(null), d = Ne("mjr-search-autocomplete-", 8), f = (e) => e?.$el || e || null, p = () => f(o.value), m = J(!1), h = J(!0), g = J(G_), _ = null, v = null, y = K(() => m.value ? R("search.semanticPlaceholder", "Describe what you're looking for...") : R("search.placeholder", "Search assets...")), b = K(() => m.value ? Gt(R("search.semanticTitle", "AI semantic search — describe your image in natural language"), W_) : Gt(R("search.title", "Search by filename, tags, or attributes (e.g. rating:5, ext:png)"), W_)), x = K(() => m.value ? { + let r = n, i = yh(), a = Q(null), o = Q(null), s = Q(null), c = Q(null), l = Q(null), u = Q(null), d = Ne("mjr-search-autocomplete-", 8), f = (e) => e?.$el || e || null, p = () => f(o.value), m = Q(!1), h = Q(!0), g = Q(G_), _ = null, v = null, y = q(() => m.value ? R("search.semanticPlaceholder", "Describe what you're looking for...") : R("search.placeholder", "Search assets...")), b = q(() => m.value ? Gt(R("search.semanticTitle", "AI semantic search — describe your image in natural language"), W_) : Gt(R("search.title", "Search by filename, tags, or attributes (e.g. rating:5, ext:png)"), W_)), x = q(() => m.value ? { background: "rgba(0, 188, 212, 0.2)", borderColor: "rgba(0, 188, 212, 0.6)", color: "#00BCD4", @@ -18590,16 +18590,16 @@ var M_ = { })); } catch {} }, 300); - return wr(() => i.searchQuery, (e) => { + return hr(() => i.searchQuery, (e) => { let t = p(); t && t.value !== e && (t.value = e); - }), wr(h, (e) => { + }), hr(h, (e) => { !e && m.value && (m.value = !1), S(); - }), wr(m, () => { + }), hr(m, () => { S(); - }), wr(() => i.metadataSearchMode, (e) => { + }), hr(() => i.metadataSearchMode, (e) => { String(e || "").toUpperCase() !== G_ && (i.metadataSearchMode = G_), g.value !== G_ && (g.value = G_), S(); - }), nr(() => { + }), or(() => { try { let e = p(); e && (e.value = i.searchQuery || ""), i.metadataSearchMode = G_; @@ -18639,14 +18639,14 @@ var M_ = { h.value = !!e, S(); } }), (e, t) => { - let n = or("MInputText"), r = or("MButton"); - return W(), X("div", { + let n = sr("MInputText"), r = sr("MButton"); + return J(), X("div", { ref_key: "searchSectionRef", ref: a, class: "mjr-am-search" }, [U("div", z_, [ t[0] ||= U("span", { class: "mjr-am-search-icon" }, [U("i", { class: "pi pi-search" })], -1), - Y(n, { + W(n, { ref_key: "searchInputRef", ref: o, id: "mjr-search-input", @@ -18654,7 +18654,7 @@ var M_ = { type: "text", placeholder: y.value, title: b.value, - list: Q(d), + list: Z(d), onInput: T }, null, 8, [ "placeholder", @@ -18664,10 +18664,10 @@ var M_ = { U("datalist", { ref_key: "dataListRef", ref: s, - id: Q(d) + id: Z(d) }, null, 8, B_) ]), U("div", V_, [ - U("div", H_, [Y(r, { + U("div", H_, [W(r, { ref_key: "semanticBtnRef", ref: u, type: "button", @@ -18677,11 +18677,11 @@ var M_ = { rounded: "", disabled: !h.value, "aria-disabled": !h.value, - title: h.value ? Q(R)("search.semanticToggle", "Toggle AI semantic search (CLIP-based)") : Q(R)("search.semanticDisabled", "AI semantic search is disabled in settings"), - style: br(x.value), + title: h.value ? Z(R)("search.semanticToggle", "Toggle AI semantic search (CLIP-based)") : Z(R)("search.semanticDisabled", "AI semantic search is disabled in settings"), + style: xr(x.value), onClick: w }, { - default: q(() => [...t[1] ||= [U("i", { class: "pi pi-sparkles" }, null, -1)]]), + default: K(() => [...t[1] ||= [U("i", { class: "pi pi-sparkles" }, null, -1)]]), _: 1 }, 8, [ "disabled", @@ -18689,7 +18689,7 @@ var M_ = { "title", "style" ])]), - U("div", U_, [Y(r, { + U("div", U_, [W(r, { ref_key: "similarBtnRef", ref: c, type: "button", @@ -18697,35 +18697,35 @@ var M_ = { severity: "secondary", text: "", rounded: "", - title: Q(R)("search.findSimilar", "Find Similar") + title: Z(R)("search.findSimilar", "Find Similar") }, { - default: q(() => [...t[2] ||= [U("i", { class: "pi pi-search" }, null, -1)]]), + default: K(() => [...t[2] ||= [U("i", { class: "pi pi-search" }, null, -1)]]), _: 1 - }, 8, ["title"]), Y(R_, { + }, 8, ["title"]), W(R_, { ref_key: "similarPopoverRef", ref: l }, null, 512)]), - ir(e.$slots, "filter-anchor"), - ir(e.$slots, "sort-anchor"), - ir(e.$slots, "collections-anchor"), - ir(e.$slots, "pinned-folders-anchor") + Er(e.$slots, "filter-anchor"), + Er(e.$slots, "sort-anchor"), + Er(e.$slots, "collections-anchor"), + Er(e.$slots, "pinned-folders-anchor") ])], 512); }; } }), q_ = { class: "mjr-popover mjr-sort-popover", style: { display: "none" } -}, J_ = { class: "mjr-menu-item-label" }, Y_ = /* @__PURE__ */ lr({ +}, J_ = { class: "mjr-menu-item-label" }, Y_ = /* @__PURE__ */ ur({ __name: "SortPopover", setup(e) { - let t = yh(), n = K(() => t.sort || "mtime_desc"), r = (e) => { + let t = yh(), n = q(() => t.sort || "mtime_desc"), r = (e) => { t.sort = e; try { window.dispatchEvent(new CustomEvent("mjr:sort-changed", { detail: { sort: e } })); } catch (e) { console.debug?.(e); } - }, i = K(() => [ + }, i = q(() => [ { key: "mtime_desc", label: R("sort.newest"), @@ -18767,15 +18767,15 @@ var M_ = { command: () => r(e.key) }))); return (e, t) => { - let r = or("MMenu"); - return W(), X("div", q_, [Y(r, { + let r = sr("MMenu"); + return J(), X("div", q_, [W(r, { model: i.value, class: "mjr-menu mjr-prime-menu mjr-sort-menu", pt: { list: { class: "mjr-menu mjr-prime-menu-list" } } }, { - item: q(({ item: e }) => [U("div", { class: yr(["mjr-menu-item", { "is-active": n.value === e.key }]) }, [U("span", J_, Z(e.label), 1), U("i", { - class: yr([e.icon, "mjr-menu-item-check"]), - style: br({ opacity: +(n.value === e.key) }) + item: K(({ item: e }) => [U("div", { class: wr(["mjr-menu-item", { "is-active": n.value === e.key }]) }, [U("span", J_, Y(e.label), 1), U("i", { + class: wr([e.icon, "mjr-menu-item-check"]), + style: xr({ opacity: +(n.value === e.key) }) }, null, 6)], 2)]), _: 1 }, 8, ["model"])]); @@ -18790,20 +18790,20 @@ var M_ = { }, Ev = { class: "mjr-filter-group-body" }, Dv = { class: "mjr-filter-card" }, Ov = { class: "mjr-popover-row mjr-popover-row--3col" }, kv = { class: "mjr-popover-label" }, Av = { class: "mjr-popover-row" }, jv = { class: "mjr-popover-label" }, Mv = { class: "mjr-popover-row mjr-popover-row--3col" }, Nv = { class: "mjr-popover-label" }, Pv = { class: "mjr-popover-row mjr-popover-row--3col" }, Fv = { class: "mjr-popover-label" }, Iv = { class: "mjr-filter-group-title" }, Lv = { class: "mjr-filter-group-chevron", "aria-hidden": "true" -}, Rv = { class: "mjr-filter-group-body" }, zv = { class: "mjr-filter-card mjr-filter-card--agenda" }, Bv = { class: "mjr-popover-row" }, Vv = { class: "mjr-popover-label" }, Hv = { class: "mjr-popover-row" }, Uv = { class: "mjr-popover-label" }, Wv = /* @__PURE__ */ lr({ +}, Rv = { class: "mjr-filter-group-body" }, zv = { class: "mjr-filter-card mjr-filter-card--agenda" }, Bv = { class: "mjr-popover-row" }, Vv = { class: "mjr-popover-label" }, Hv = { class: "mjr-popover-row" }, Uv = { class: "mjr-popover-label" }, Wv = /* @__PURE__ */ ur({ __name: "FilterPopover", setup(e, { expose: t }) { - let n = yh(), r = J(null), a = J(null), o = J(null), s = J(null), c = J(null), l = J(null), u = J(null), d = J(null), f = J(null), p = J(null), m = J([{ + let n = yh(), r = Q(null), a = Q(null), o = Q(null), s = Q(null), c = Q(null), l = Q(null), u = Q(null), d = Q(null), f = Q(null), p = Q(null), m = Q([{ label: R("filter.any", "Any"), value: "" }]), h = (e) => e?.$el || e || null, g = (e) => h(e.value)?.value || "", _ = (e, t) => { let n = h(e.value); n && (n.value = String(t ?? "")); - }, v = J({ + }, v = Q({ core: !0, media: !1, time: !0 - }), y = K(() => [ + }), y = q(() => [ { label: R("filter.all"), value: "" @@ -18824,7 +18824,7 @@ var M_ = { label: "3D", value: "model3d" } - ]), b = K(() => [ + ]), b = q(() => [ { label: R("filter.any", "Any"), value: "" @@ -18869,7 +18869,7 @@ var M_ = { label: "A2A (Audio to Audio)", value: "A2A" } - ]), x = K(() => [ + ]), x = q(() => [ { label: R("filter.any", "Any"), value: "" @@ -18890,7 +18890,7 @@ var M_ = { label: "Unknown", value: "unknown" } - ]), S = K(() => { + ]), S = q(() => { let e = Array.isArray(m.value) ? m.value.slice() : [{ label: R("filter.any", "Any"), value: "" @@ -18904,7 +18904,7 @@ var M_ = { label: t, value: t }), e; - }), C = K(() => [ + }), C = q(() => [ { label: R("filter.anyRating"), value: "0" @@ -18929,7 +18929,7 @@ var M_ = { label: "★ 5", value: "5" } - ]), w = K(() => [ + ]), w = q(() => [ { label: R("filter.any", "Any"), value: "" @@ -18950,7 +18950,7 @@ var M_ = { label: "4K (3840x2160)", value: "uhd" } - ]), T = K(() => [ + ]), T = q(() => [ { label: R("filter.anytime"), value: "" @@ -18967,10 +18967,10 @@ var M_ = { label: R("filter.thisMonth"), value: "this_month" } - ]), E = K(() => { + ]), E = q(() => { let e = Number(n.minWidth || 0) || 0, t = Number(n.minHeight || 0) || 0; return e >= 3840 && t >= 2160 ? "uhd" : e >= 2560 && t >= 1440 ? "qhd" : e >= 1920 && t >= 1080 ? "fhd" : e >= 1280 && t >= 720 ? "hd" : ""; - }), D = K(() => { + }), D = q(() => { let e = String(n.dateExactFilter || "").trim().length > 0; return { "mjr-agenda-filled": e, @@ -19003,7 +19003,7 @@ var M_ = { console.debug?.(e); } }; - nr(() => { + or(() => { A(); }); let j = (e, { emit: t = !0 } = {}) => { @@ -19095,7 +19095,7 @@ var M_ = { }), _e = L({ getValue: () => String(n.dateRangeFilter || ""), setValue: ie - }), ve = K(() => { + }), ve = q(() => { let e = 0; return String(n.kindFilter || "").trim() && (e += 1), n.workflowOnly && (e += 1), String(n.workflowType || "").trim() && (e += 1), String(n.workflowId || "").trim() && (e += 1), String(n.workflowModelFilter || "").trim() && (e += 1), String(n.workflowRunsOnFilter || "").trim() && (e += 1), (Number(n.minRating || 0) || 0) > 0 && (e += 1), ((Number(n.minSizeMB || 0) || 0) > 0 || (Number(n.maxSizeMB || 0) || 0) > 0) && (e += 1), ((Number(n.minWidth || 0) || 0) > 0 || (Number(n.minHeight || 0) || 0) > 0 || (Number(n.maxWidth || 0) || 0) > 0 || (Number(n.maxHeight || 0) || 0) > 0) && (e += 1), String(n.dateRangeFilter || "").trim() && (e += 1), String(n.dateExactFilter || "").trim() && (e += 1), e; }), ye = () => { @@ -19157,9 +19157,9 @@ var M_ = { return u.value; } }), (e, t) => { - let i = or("MButton"), m = or("MSelect"), h = or("MCheckbox"), g = or("MInputText"); - return W(), X("div", X_, [ - U("div", Z_, [U("div", Q_, [U("div", $_, Z(Q(R)("label.filters", "Filters")), 1), U("div", ev, Z(Q(R)("label.refineResults", "Refine your results")), 1)]), U("div", tv, [U("span", nv, Z(ve.value), 1), Y(i, { + let i = sr("MButton"), m = sr("MSelect"), h = sr("MCheckbox"), g = sr("MInputText"); + return J(), X("div", X_, [ + U("div", Z_, [U("div", Q_, [U("div", $_, Y(Z(R)("label.filters", "Filters")), 1), U("div", ev, Y(Z(R)("label.refineResults", "Refine your results")), 1)]), U("div", tv, [U("span", nv, Y(ve.value), 1), W(i, { type: "button", class: "mjr-filter-clear-all", severity: "secondary", @@ -19167,10 +19167,10 @@ var M_ = { disabled: ve.value === 0, onClick: ye }, { - default: q(() => [tr(Z(Q(R)("action.clearAll", "Clear all")), 1)]), + default: K(() => [Sr(Y(Z(R)("action.clearAll", "Clear all")), 1)]), _: 1 }, 8, ["disabled"])])]), - U("div", { class: yr(["mjr-filter-group mjr-filter-group--core", { "is-open": se("core") }]) }, [Y(i, { + U("div", { class: wr(["mjr-filter-group mjr-filter-group--core", { "is-open": se("core") }]) }, [W(i, { type: "button", class: "mjr-filter-group-toggle", severity: "secondary", @@ -19178,13 +19178,13 @@ var M_ = { "aria-expanded": String(se("core")), onClick: t[0] ||= (e) => oe("core") }, { - default: q(() => [U("span", rv, Z(Q(R)("group.core", "Core")), 1), U("span", iv, Z(se("core") ? "▾" : "▸"), 1)]), + default: K(() => [U("span", rv, Y(Z(R)("group.core", "Core")), 1), U("span", iv, Y(se("core") ? "▾" : "▸"), 1)]), _: 1 - }, 8, ["aria-expanded"]), gr(U("div", av, [U("div", ov, [U("div", sv, [U("div", cv, Z(Q(R)("label.type")), 1), Y(m, { + }, 8, ["aria-expanded"]), tr(U("div", av, [U("div", ov, [U("div", sv, [U("div", cv, Y(Z(R)("label.type")), 1), W(m, { class: "mjr-select mjr-filter-select", "panel-class": "mjr-filter-select-panel", - title: Q(R)("tooltip.filterByFileType", "Filter by file type"), - "model-value": String(Q(n).kindFilter || ""), + title: Z(R)("tooltip.filterByFileType", "Filter by file type"), + "model-value": String(Z(n).kindFilter || ""), options: y.value, "option-label": "label", "option-value": "value", @@ -19193,31 +19193,31 @@ var M_ = { "title", "model-value", "options" - ])]), U("div", lv, [U("div", uv, Z(Q(R)("label.workflow")), 1), U("label", { + ])]), U("div", lv, [U("div", uv, Y(Z(R)("label.workflow")), 1), U("label", { class: "mjr-popover-toggle", - title: Q(R)("tooltip.filterWorkflowOnly", "Show only assets with embedded workflow data") - }, [Y(h, { + title: Z(R)("tooltip.filterWorkflowOnly", "Show only assets with embedded workflow data") + }, [W(h, { class: "mjr-checkbox", - "model-value": !!Q(n).workflowOnly, + "model-value": !!Z(n).workflowOnly, binary: "", "onUpdate:modelValue": M - }, null, 8, ["model-value"]), U("span", null, Z(Q(R)("filter.onlyWithWorkflow")), 1)], 8, dv)])]), U("div", fv, [ - U("div", pv, [U("div", mv, Z(Q(R)("label.workflowType", "Workflow type")), 1), Y(m, { + }, null, 8, ["model-value"]), U("span", null, Y(Z(R)("filter.onlyWithWorkflow")), 1)], 8, dv)])]), U("div", fv, [ + U("div", pv, [U("div", mv, Y(Z(R)("label.workflowType", "Workflow type")), 1), W(m, { class: "mjr-select mjr-filter-select", "panel-class": "mjr-filter-select-panel", - "model-value": String(Q(n).workflowType || "").trim().toUpperCase(), + "model-value": String(Z(n).workflowType || "").trim().toUpperCase(), options: b.value, "option-label": "label", "option-value": "value", "onUpdate:modelValue": N }, null, 8, ["model-value", "options"])]), - U("div", hv, [U("div", gv, Z(Q(R)("label.sameWorkflow", "Generated with Same Workflow")), 1), Y(g, { + U("div", hv, [U("div", gv, Y(Z(R)("label.sameWorkflow", "Generated with Same Workflow")), 1), W(g, { ref_key: "workflowIdInputRef", ref: f, class: "mjr-input", - title: Q(R)("tooltip.filterWorkflowId", "Filter assets generated from the same embedded workflow id"), - placeholder: Q(R)("placeholder.workflowId", "Workflow ID"), - "model-value": String(Q(n).workflowId || ""), + title: Z(R)("tooltip.filterWorkflowId", "Filter assets generated from the same embedded workflow id"), + placeholder: Z(R)("placeholder.workflowId", "Workflow ID"), + "model-value": String(Z(n).workflowId || ""), "onUpdate:modelValue": P, onChange: t[1] ||= (e) => P(e?.target?.value) }, null, 8, [ @@ -19225,37 +19225,37 @@ var M_ = { "placeholder", "model-value" ])]), - U("div", _v, [U("div", vv, Z(Q(R)("label.workflowModelFamily", "Model family")), 1), U("div", yv, [Y(m, { + U("div", _v, [U("div", vv, Y(Z(R)("label.workflowModelFamily", "Model family")), 1), U("div", yv, [W(m, { class: "mjr-select mjr-filter-select", "panel-class": "mjr-filter-select-panel", - "model-value": String(Q(n).workflowModelFilter || ""), + "model-value": String(Z(n).workflowModelFilter || ""), options: S.value, "option-label": "label", "option-value": "value", "onUpdate:modelValue": ee - }, null, 8, ["model-value", "options"]), Y(g, { + }, null, 8, ["model-value", "options"]), W(g, { ref_key: "workflowModelInputRef", ref: p, class: "mjr-input", - placeholder: Q(R)("placeholder.workflowModelFamily", "Flux, Wan, SDXL..."), - "model-value": String(Q(n).workflowModelFilter || ""), + placeholder: Z(R)("placeholder.workflowModelFamily", "Flux, Wan, SDXL..."), + "model-value": String(Z(n).workflowModelFilter || ""), "onUpdate:modelValue": ee, onChange: t[2] ||= (e) => ee(e?.target?.value) }, null, 8, ["placeholder", "model-value"])])]), - U("div", bv, [U("div", xv, Z(Q(R)("label.workflowRunsOn", "Runs on")), 1), Y(m, { + U("div", bv, [U("div", xv, Y(Z(R)("label.workflowRunsOn", "Runs on")), 1), W(m, { class: "mjr-select mjr-filter-select", "panel-class": "mjr-filter-select-panel", - "model-value": String(Q(n).workflowRunsOnFilter || "").trim().toLowerCase(), + "model-value": String(Z(n).workflowRunsOnFilter || "").trim().toLowerCase(), options: x.value, "option-label": "label", "option-value": "value", "onUpdate:modelValue": te }, null, 8, ["model-value", "options"])]), - U("div", Sv, [U("div", Cv, Z(Q(R)("label.rating")), 1), Y(m, { + U("div", Sv, [U("div", Cv, Y(Z(R)("label.rating")), 1), W(m, { class: "mjr-select mjr-filter-select", "panel-class": "mjr-filter-select-panel", - title: Q(R)("tooltip.filterMinRating", "Filter by minimum rating"), - "model-value": String(Number(Q(n).minRating || 0) || 0), + title: Z(R)("tooltip.filterMinRating", "Filter by minimum rating"), + "model-value": String(Number(Z(n).minRating || 0) || 0), options: C.value, "option-label": "label", "option-value": "value", @@ -19266,7 +19266,7 @@ var M_ = { "options" ])]) ])], 512), [[vr, se("core")]])], 2), - U("div", { class: yr(["mjr-filter-group mjr-filter-group--media", { "is-open": se("media") }]) }, [Y(i, { + U("div", { class: wr(["mjr-filter-group mjr-filter-group--media", { "is-open": se("media") }]) }, [W(i, { type: "button", class: "mjr-filter-group-toggle", severity: "secondary", @@ -19274,35 +19274,35 @@ var M_ = { "aria-expanded": String(se("media")), onClick: t[3] ||= (e) => oe("media") }, { - default: q(() => [U("span", wv, Z(Q(R)("group.media", "Media")), 1), U("span", Tv, Z(se("media") ? "▾" : "▸"), 1)]), + default: K(() => [U("span", wv, Y(Z(R)("group.media", "Media")), 1), U("span", Tv, Y(se("media") ? "▾" : "▸"), 1)]), _: 1 - }, 8, ["aria-expanded"]), gr(U("div", Ev, [U("div", Dv, [ + }, 8, ["aria-expanded"]), tr(U("div", Ev, [U("div", Dv, [ U("div", Ov, [ - U("div", kv, Z(Q(R)("label.fileSizeMB", "File size (MB)")), 1), - Y(g, { + U("div", kv, Y(Z(R)("label.fileSizeMB", "File size (MB)")), 1), + W(g, { ref_key: "minSizeInputRef", ref: r, type: "number", min: "0", step: "0.1", class: "mjr-input", - placeholder: Q(R)("label.min", "Min"), - value: Q(n).minSizeMB || "", + placeholder: Z(R)("label.min", "Min"), + value: Z(n).minSizeMB || "", onChange: I }, null, 8, ["placeholder", "value"]), - Y(g, { + W(g, { ref_key: "maxSizeInputRef", ref: a, type: "number", min: "0", step: "0.1", class: "mjr-input", - placeholder: Q(R)("label.max", "Max"), - value: Q(n).maxSizeMB || "", + placeholder: Z(R)("label.max", "Max"), + value: Z(n).maxSizeMB || "", onChange: I }, null, 8, ["placeholder", "value"]) ]), - U("div", Av, [U("div", jv, Z(Q(R)("label.resolutionPx", "Resolution (px)")), 1), Y(m, { + U("div", Av, [U("div", jv, Y(Z(R)("label.resolutionPx", "Resolution (px)")), 1), W(m, { class: "mjr-select mjr-filter-select", "panel-class": "mjr-filter-select-panel", "model-value": E.value, @@ -19312,33 +19312,33 @@ var M_ = { "onUpdate:modelValue": re }, null, 8, ["model-value", "options"])]), U("div", Mv, [ - U("div", Nv, Z(Q(R)("label.resolutionMinWxH", "Min WxH (px)")), 1), - Y(g, { + U("div", Nv, Y(Z(R)("label.resolutionMinWxH", "Min WxH (px)")), 1), + W(g, { ref_key: "minWidthInputRef", ref: o, type: "number", min: "0", step: "1", class: "mjr-input", - placeholder: Q(R)("label.widthPx", "W (px)"), - title: Q(R)("tooltip.widthPx", "Minimum width in pixels"), - value: Q(n).minWidth || "", + placeholder: Z(R)("label.widthPx", "W (px)"), + title: Z(R)("tooltip.widthPx", "Minimum width in pixels"), + value: Z(n).minWidth || "", onChange: ne }, null, 8, [ "placeholder", "title", "value" ]), - Y(g, { + W(g, { ref_key: "minHeightInputRef", ref: s, type: "number", min: "0", step: "1", class: "mjr-input", - placeholder: Q(R)("label.heightPx", "H (px)"), - title: Q(R)("tooltip.heightPx", "Minimum height in pixels"), - value: Q(n).minHeight || "", + placeholder: Z(R)("label.heightPx", "H (px)"), + title: Z(R)("tooltip.heightPx", "Minimum height in pixels"), + value: Z(n).minHeight || "", onChange: ne }, null, 8, [ "placeholder", @@ -19347,33 +19347,33 @@ var M_ = { ]) ]), U("div", Pv, [ - U("div", Fv, Z(Q(R)("label.resolutionMaxWxH", "Max WxH (px)")), 1), - Y(g, { + U("div", Fv, Y(Z(R)("label.resolutionMaxWxH", "Max WxH (px)")), 1), + W(g, { ref_key: "maxWidthInputRef", ref: c, type: "number", min: "0", step: "1", class: "mjr-input", - placeholder: Q(R)("label.widthPx", "W (px)"), - title: Q(R)("tooltip.widthPx", "Maximum width in pixels"), - value: Q(n).maxWidth || "", + placeholder: Z(R)("label.widthPx", "W (px)"), + title: Z(R)("tooltip.widthPx", "Maximum width in pixels"), + value: Z(n).maxWidth || "", onChange: ne }, null, 8, [ "placeholder", "title", "value" ]), - Y(g, { + W(g, { ref_key: "maxHeightInputRef", ref: l, type: "number", min: "0", step: "1", class: "mjr-input", - placeholder: Q(R)("label.heightPx", "H (px)"), - title: Q(R)("tooltip.heightPx", "Maximum height in pixels"), - value: Q(n).maxHeight || "", + placeholder: Z(R)("label.heightPx", "H (px)"), + title: Z(R)("tooltip.heightPx", "Maximum height in pixels"), + value: Z(n).maxHeight || "", onChange: ne }, null, 8, [ "placeholder", @@ -19382,7 +19382,7 @@ var M_ = { ]) ]) ])], 512), [[vr, se("media")]])], 2), - U("div", { class: yr(["mjr-filter-group mjr-filter-group--time", { "is-open": se("time") }]) }, [Y(i, { + U("div", { class: wr(["mjr-filter-group mjr-filter-group--time", { "is-open": se("time") }]) }, [W(i, { type: "button", class: "mjr-filter-group-toggle", severity: "secondary", @@ -19390,13 +19390,13 @@ var M_ = { "aria-expanded": String(se("time")), onClick: t[4] ||= (e) => oe("time") }, { - default: q(() => [U("span", Iv, Z(Q(R)("group.time", "Time")), 1), U("span", Lv, Z(se("time") ? "▾" : "▸"), 1)]), + default: K(() => [U("span", Iv, Y(Z(R)("group.time", "Time")), 1), U("span", Lv, Y(se("time") ? "▾" : "▸"), 1)]), _: 1 - }, 8, ["aria-expanded"]), gr(U("div", Rv, [U("div", zv, [U("div", Bv, [U("div", Vv, Z(Q(R)("label.dateRange")), 1), Y(m, { + }, 8, ["aria-expanded"]), tr(U("div", Rv, [U("div", zv, [U("div", Bv, [U("div", Vv, Y(Z(R)("label.dateRange")), 1), W(m, { class: "mjr-select mjr-filter-select", "panel-class": "mjr-filter-select-panel", - title: Q(R)("tooltip.filterByDateRange", "Filter by date range"), - "model-value": String(Q(n).dateRangeFilter || ""), + title: Z(R)("tooltip.filterByDateRange", "Filter by date range"), + "model-value": String(Z(n).dateRangeFilter || ""), options: T.value, "option-label": "label", "option-value": "value", @@ -19405,16 +19405,16 @@ var M_ = { "title", "model-value", "options" - ])]), U("div", Hv, [U("div", Uv, Z(Q(R)("label.agenda")), 1), U("div", { + ])]), U("div", Hv, [U("div", Uv, Y(Z(R)("label.agenda")), 1), U("div", { ref_key: "agendaContainerRef", ref: u, class: "mjr-agenda-container" - }, [Y(g, { + }, [W(g, { ref_key: "dateExactInputRef", ref: d, type: "date", - class: yr(["mjr-input mjr-agenda-input", D.value]), - value: Q(n).dateExactFilter, + class: wr(["mjr-input mjr-agenda-input", D.value]), + value: Z(n).dateExactFilter, onChange: ae }, null, 8, ["class", "value"])], 512)])])], 512), [[vr, se("time")]])], 2) ]); @@ -19562,10 +19562,10 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite }, dy = { class: "mjr-state-block" }, fy = { class: "mjr-section-title mjr-section-title--cyan" }, py = { class: "mjr-section-hint" }, my = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, hy = { class: "mjr-section-title mjr-section-title--violet" }, gy = { class: "mjr-section-hint" }, _y = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, vy = { key: 0, class: "mjr-state-block is-error" -}, yy = { class: "mjr-cluster-thumbs" }, by = ["src", "alt"], xy = { class: "mjr-cluster-info" }, Sy = ["title"], Cy = { class: "mjr-cluster-count" }, wy = "mjr:collections-changed", Ty = /* @__PURE__ */ lr({ +}, yy = { class: "mjr-cluster-thumbs" }, by = ["src", "alt"], xy = { class: "mjr-cluster-info" }, Sy = ["title"], Cy = { class: "mjr-cluster-count" }, wy = "mjr:collections-changed", Ty = /* @__PURE__ */ ur({ __name: "CollectionsPopover", setup(t, { expose: n }) { - let r = yh(), i = J(null), a = J([]), o = J(!1), s = J(""), c = J(!1), l = J(!0), u = J(!1), p = J(!1), m = J(!1), h = J([]), g = J(""), _ = J(""), v = 0, y = null, b = !1, x = K(() => String(r.collectionId || "").trim()), C = K(() => String(r.collectionName || "").trim()), T = K(() => !!x.value), O = K(() => !l.value || p.value), k = K(() => l.value && u.value), A = K(() => `${Math.max(1, Math.min(a.value.length, 6)) * 48}px`); + let r = yh(), i = Q(null), a = Q([]), o = Q(!1), s = Q(""), c = Q(!1), l = Q(!0), u = Q(!1), p = Q(!1), m = Q(!1), h = Q([]), g = Q(""), _ = Q(""), v = 0, y = null, b = !1, x = q(() => String(r.collectionId || "").trim()), C = q(() => String(r.collectionName || "").trim()), T = q(() => !!x.value), O = q(() => !l.value || p.value), k = q(() => l.value && u.value), A = q(() => `${Math.max(1, Math.min(a.value.length, 6)) * 48}px`); function j() { let e = i.value; return !!e && String(e.style.display || "").toLowerCase() !== "none"; @@ -19795,12 +19795,12 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite let e = j(); e && !b && te().catch(() => {}), b = e; } - return nr(() => { + return or(() => { ce(), typeof MutationObserver < "u" && i.value && (y = new MutationObserver(() => ce()), y.observe(i.value, { attributes: !0, attributeFilter: ["style"] })); - }), mr(() => { + }), pr(() => { try { y?.disconnect?.(); } catch (e) { @@ -19808,38 +19808,38 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite } y = null; }), n({ refresh: te }), (e, t) => { - let n = or("MButton"), r = or("MVirtualScroller"); - return W(), X("div", { + let n = sr("MButton"), r = sr("MVirtualScroller"); + return J(), X("div", { ref_key: "rootRef", ref: i, class: "mjr-popover mjr-collections-popover", style: { display: "none" } }, [U("div", $v, [ - Y(n, { + W(n, { type: "button", class: "mjr-menu-item", severity: "secondary", text: "", disabled: _.value !== "", - onClick: Q(I) + onClick: Z(I) }, { - default: q(() => [U("span", ey, Z(Q(R)("ctx.createCollection", "Create collection")), 1), t[0] ||= U("i", { class: "pi pi-plus mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1)]), + default: K(() => [U("span", ey, Y(Z(R)("ctx.createCollection", "Create collection")), 1), t[0] ||= U("i", { class: "pi pi-plus mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1)]), _: 1 }, 8, ["disabled", "onClick"]), - T.value ? (W(), rr(n, { + T.value ? (J(), rr(n, { key: 0, type: "button", class: "mjr-menu-item", severity: "secondary", text: "", disabled: _.value !== "", - onClick: Q(ne) + onClick: Z(ne) }, { - default: q(() => [U("span", ty, Z(Q(R)("ctx.exitCollection", "Exit collection")), 1), U("span", ny, [C.value ? (W(), X("span", ry, Z(C.value), 1)) : G("", !0), t[1] ||= U("i", { class: "pi pi-times mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1)])]), + default: K(() => [U("span", ty, Y(Z(R)("ctx.exitCollection", "Exit collection")), 1), U("span", ny, [C.value ? (J(), X("span", ry, Y(C.value), 1)) : G("", !0), t[1] ||= U("i", { class: "pi pi-times mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1)])]), _: 1 }, 8, ["disabled", "onClick"])) : G("", !0), t[9] ||= U("div", { class: "mjr-menu-divider" }, null, -1), - o.value ? (W(), X("div", iy, Z(Q(R)("label.loading", "Loading...")), 1)) : s.value ? (W(), X("div", ay, Z(s.value), 1)) : a.value.length ? (W(), rr(r, { + o.value ? (J(), X("div", iy, Y(Z(R)("label.loading", "Loading...")), 1)) : s.value ? (J(), X("div", ay, Y(s.value), 1)) : a.value.length ? (J(), rr(r, { key: 4, items: a.value, "item-size": 48, @@ -19847,30 +19847,30 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite "num-tolerated-items": 4, class: "mjr-collections-virtual-list" }, { - item: q(({ item: e }) => [U("div", sy, [Y(n, { + item: K(({ item: e }) => [U("div", sy, [W(n, { type: "button", - class: yr(["mjr-menu-item", { "is-active": x.value === String(e.id || "") }]), + class: wr(["mjr-menu-item", { "is-active": x.value === String(e.id || "") }]), severity: "secondary", text: "", disabled: _.value !== "", - onClick: (t) => Q(re)(e) + onClick: (t) => Z(re)(e) }, { - default: q(() => [U("span", cy, Z(e.name || e.id), 1), U("span", ly, [Number(e.count || 0) ? (W(), X("span", uy, Z(Number(e.count || 0)), 1)) : G("", !0), t[2] ||= U("i", { class: "pi pi-check mjr-menu-item-check" }, null, -1)])]), + default: K(() => [U("span", cy, Y(e.name || e.id), 1), U("span", ly, [Number(e.count || 0) ? (J(), X("span", uy, Y(Number(e.count || 0)), 1)) : G("", !0), t[2] ||= U("i", { class: "pi pi-check mjr-menu-item-check" }, null, -1)])]), _: 2 }, 1032, [ "class", "disabled", "onClick" - ]), Y(n, { + ]), W(n, { type: "button", class: "mjr-menu-item mjr-delete-btn", severity: "secondary", text: "", disabled: _.value !== "", - title: Q(R)("tooltip.deleteCollection", "Delete collection"), - onClick: fr((t) => Q(ie)(e), ["stop", "prevent"]) + title: Z(R)("tooltip.deleteCollection", "Delete collection"), + onClick: fr((t) => Z(ie)(e), ["stop", "prevent"]) }, { - default: q(() => [...t[3] ||= [U("i", { class: "pi pi-trash" }, null, -1)]]), + default: K(() => [...t[3] ||= [U("i", { class: "pi pi-trash" }, null, -1)]]), _: 1 }, 8, [ "disabled", @@ -19878,13 +19878,13 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite "onClick" ])])]), _: 1 - }, 8, ["items", "scroll-height"])) : (W(), X("div", oy, Z(Q(R)("msg.noCollections", "No collections yet")), 1)), - !c.value && O.value ? (W(), X(H, { key: 5 }, [t[4] ||= U("div", { class: "mjr-menu-divider" }, null, -1), U("div", dy, Z(l.value ? "AI Smart Collections are disabled (enable vector search env var)." : "AI Smart Collections are disabled in settings."), 1)], 64)) : G("", !0), - !c.value && k.value ? (W(), X(H, { key: 6 }, [ + }, 8, ["items", "scroll-height"])) : (J(), X("div", oy, Y(Z(R)("msg.noCollections", "No collections yet")), 1)), + !c.value && O.value ? (J(), X(H, { key: 5 }, [t[4] ||= U("div", { class: "mjr-menu-divider" }, null, -1), U("div", dy, Y(l.value ? "AI Smart Collections are disabled (enable vector search env var)." : "AI Smart Collections are disabled in settings."), 1)], 64)) : G("", !0), + !c.value && k.value ? (J(), X(H, { key: 6 }, [ t[7] ||= U("div", { class: "mjr-menu-divider" }, null, -1), - U("div", fy, Z(Q(R)("label.smartSuggestions", "Smart Suggestions")), 1), - U("div", py, Z(Q(R)("label.smartCollectionsHint", "Create collections from AI-detected themes")), 1), - (W(!0), X(H, null, hr(Q(Kv), (e) => (W(), rr(n, { + U("div", fy, Y(Z(R)("label.smartSuggestions", "Smart Suggestions")), 1), + U("div", py, Y(Z(R)("label.smartCollectionsHint", "Create collections from AI-detected themes")), 1), + (J(!0), X(H, null, cr(Z(Kv), (e) => (J(), rr(n, { key: e.key, type: "button", class: "mjr-menu-item mjr-menu-item--smart", @@ -19893,13 +19893,13 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite disabled: _.value !== "", onClick: (t) => oe(e) }, { - default: q(() => [U("span", my, [U("i", { class: yr(e.iconClass) }, null, 2), U("span", null, Z(e.label), 1)]), t[5] ||= U("i", { class: "pi pi-plus mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1)]), + default: K(() => [U("span", my, [U("i", { class: wr(e.iconClass) }, null, 2), U("span", null, Y(e.label), 1)]), t[5] ||= U("i", { class: "pi pi-plus mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1)]), _: 2 }, 1032, ["disabled", "onClick"]))), 128)), t[8] ||= U("div", { class: "mjr-menu-divider" }, null, -1), - U("div", hy, Z(Q(R)("label.discoverGroups", "Discover Groups")), 1), - U("div", gy, Z(Q(R)("label.discoverGroupsHint", "AI clusters assets by visual similarity")), 1), - Y(n, { + U("div", hy, Y(Z(R)("label.discoverGroups", "Discover Groups")), 1), + U("div", gy, Y(Z(R)("label.discoverGroupsHint", "AI clusters assets by visual similarity")), 1), + W(n, { type: "button", class: "mjr-menu-item mjr-menu-item--cluster", severity: "secondary", @@ -19907,15 +19907,15 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite disabled: m.value || _.value !== "", onClick: se }, { - default: q(() => [U("span", _y, [t[6] ||= U("i", { class: "pi pi-search" }, null, -1), U("span", null, Z(m.value ? Q(R)("label.analyzing", "Analyzing...") : Q(R)("label.analyzeLibrary", "Analyze library")), 1)])]), + default: K(() => [U("span", _y, [t[6] ||= U("i", { class: "pi pi-search" }, null, -1), U("span", null, Y(m.value ? Z(R)("label.analyzing", "Analyzing...") : Z(R)("label.analyzeLibrary", "Analyze library")), 1)])]), _: 1 }, 8, ["disabled"]), - g.value ? (W(), X("div", vy, Z(g.value), 1)) : G("", !0), - (W(!0), X(H, null, hr(h.value, (e) => (W(), X("div", { + g.value ? (J(), X("div", vy, Y(g.value), 1)) : G("", !0), + (J(!0), X(H, null, cr(h.value, (e) => (J(), X("div", { key: e.cluster_id, class: "mjr-cluster-row" }, [ - U("div", yy, [(W(!0), X(H, null, hr(Array.isArray(e.sample_assets) ? e.sample_assets.slice(0, 3) : [], (t, n) => (W(), X("img", { + U("div", yy, [(J(!0), X(H, null, cr(Array.isArray(e.sample_assets) ? e.sample_assets.slice(0, 3) : [], (t, n) => (J(), X("img", { key: `${e.cluster_id}-${n}`, class: "mjr-cluster-thumb", src: N(t), @@ -19925,16 +19925,16 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite U("div", xy, [U("div", { class: "mjr-cluster-name", title: e._label - }, Z(e._label), 9, Sy), U("div", Cy, Z(Number(e.size || 0)) + " " + Z(Q(R)("label.assets", "assets")), 1)]), - Y(n, { + }, Y(e._label), 9, Sy), U("div", Cy, Y(Number(e.size || 0)) + " " + Y(Z(R)("label.assets", "assets")), 1)]), + W(n, { type: "button", class: "mjr-cluster-create-btn", severity: "secondary", disabled: _.value !== "", - title: Q(R)("ctx.createCollection", "Create collection"), + title: Z(R)("ctx.createCollection", "Create collection"), onClick: (t) => L(e) }, { - default: q(() => [tr(Z(_.value === `cluster:${String(e.cluster_id ?? "")}` ? Q(R)("label.loading", "Loading...") : Q(R)("label.create", "Create")), 1)]), + default: K(() => [Sr(Y(_.value === `cluster:${String(e.cluster_id ?? "")}` ? Z(R)("label.loading", "Loading...") : Z(R)("label.create", "Create")), 1)]), _: 2 }, 1032, [ "disabled", @@ -19955,10 +19955,10 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite }, ky = { class: "mjr-pinned-folder-label" }, Ay = { key: 0, class: "mjr-menu-item-hint mjr-pinned-folder-path" -}, jy = /* @__PURE__ */ lr({ +}, jy = /* @__PURE__ */ ur({ __name: "PinnedFoldersPopover", setup(e, { expose: t }) { - let n = J(null), r = J([]), i = J(!1), a = J("No pinned folders"), o = J("Loading..."), s = J("Unpin folder"), c = J(null), l = J(null); + let n = Q(null), r = Q([]), i = Q(!1), a = Q("No pinned folders"), o = Q("Loading..."), s = Q("Unpin folder"), c = Q(null), l = Q(null); function u(e) { let t = String(e?.id || "").trim(); return t ? { @@ -19986,25 +19986,25 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite setPinnedFolders: d, setPinnedFoldersLoading: f }), (e, t) => { - let c = or("MButton"); - return W(), X("div", Ey, [U("div", { + let c = sr("MButton"); + return J(), X("div", Ey, [U("div", { ref_key: "menuRef", ref: n, class: "mjr-menu mjr-pinned-folders-menu", role: "menu" - }, [i.value ? (W(), X("div", Dy, Z(o.value), 1)) : r.value.length ? (W(!0), X(H, { key: 2 }, hr(r.value, (e) => (W(), X("div", { + }, [i.value ? (J(), X("div", Dy, Y(o.value), 1)) : r.value.length ? (J(!0), X(H, { key: 2 }, cr(r.value, (e) => (J(), X("div", { key: e.id, class: "mjr-pinned-folder-row" - }, [Y(c, { + }, [W(c, { type: "button", class: "mjr-menu-item mjr-pinned-folder-open", role: "menuitem", severity: "secondary", onClick: (t) => p(e) }, { - default: q(() => [U("span", ky, Z(e.label), 1), e.path ? (W(), X("span", Ay, Z(e.path), 1)) : G("", !0)]), + default: K(() => [U("span", ky, Y(e.label), 1), e.path ? (J(), X("span", Ay, Y(e.path), 1)) : G("", !0)]), _: 2 - }, 1032, ["onClick"]), Y(c, { + }, 1032, ["onClick"]), W(c, { type: "button", class: "mjr-menu-item mjr-pinned-folder-unpin", role: "menuitem", @@ -20013,7 +20013,7 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite "aria-label": `${s.value}: ${e.label}`, onClick: (t) => m(e, t) }, { - default: q(() => [...t[0] ||= [U("i", { + default: K(() => [...t[0] ||= [U("i", { class: "pi pi-times", "aria-hidden": "true" }, null, -1)]]), @@ -20022,20 +20022,20 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite "title", "aria-label", "onClick" - ])]))), 128)) : (W(), X("div", Oy, Z(a.value), 1))], 512)]); + ])]))), 128)) : (J(), X("div", Oy, Y(a.value), 1))], 512)]); }; } }), My = { class: "mjr-popover mjr-custom-popover", style: { display: "none" } -}, Ny = { class: "mjr-popover-row" }, Py = { class: "mjr-popover-label" }, Fy = { class: "mjr-popover-row mjr-popover-row--actions" }, Iy = /* @__PURE__ */ lr({ +}, Ny = { class: "mjr-popover-row" }, Py = { class: "mjr-popover-label" }, Fy = { class: "mjr-popover-row mjr-popover-row--actions" }, Iy = /* @__PURE__ */ ur({ __name: "CustomRootsPopover", setup(e, { expose: t }) { - let n = J([{ + let n = Q([{ label: R("label.selectFolder", "Select folder..."), value: "", disabled: !1 - }]), r = J(""), i = J(!1), a = J(null), o = J(null), s = (e) => e?.$el || e || null, c = new EventTarget(), l = (e) => ({ + }]), r = Q(""), i = Q(!1), a = Q(null), o = Q(null), s = (e) => e?.$el || e || null, c = new EventTarget(), l = (e) => ({ value: String(e?.value || ""), label: String(e?.textContent || e?.text || e?.label || ""), text: String(e?.text || e?.textContent || e?.label || ""), @@ -20111,8 +20111,8 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite return s(o.value); } }), (e, t) => { - let s = or("MSelect"), c = or("MButton"); - return W(), X("div", My, [U("div", Ny, [U("div", Py, Z(Q(R)("label.folder")), 1), Y(s, { + let s = sr("MSelect"), c = sr("MButton"); + return J(), X("div", My, [U("div", Ny, [U("div", Py, Y(Z(R)("label.folder")), 1), W(s, { class: "mjr-select", "model-value": r.value, options: n.value, @@ -20124,16 +20124,16 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite "model-value", "options", "disabled" - ])]), U("div", Fy, [Y(c, { + ])]), U("div", Fy, [W(c, { ref_key: "customAddBtnRef", ref: a, type: "button", class: "mjr-btn", severity: "secondary" }, { - default: q(() => [tr(Z(Q(R)("btn.add")), 1)]), + default: K(() => [Sr(Y(Z(R)("btn.add")), 1)]), _: 1 - }, 512), Y(c, { + }, 512), W(c, { ref_key: "customRemoveBtnRef", ref: o, type: "button", @@ -20141,7 +20141,7 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite severity: "secondary", disabled: "" }, { - default: q(() => [tr(Z(Q(R)("btn.remove")), 1)]), + default: K(() => [Sr(Y(Z(R)("btn.remove")), 1)]), _: 1 }, 512)])]); }; @@ -20149,10 +20149,10 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite }), Ly = ["aria-label"], Ry = { class: "mjr-messages-head" }, zy = { class: "mjr-messages-actions" }, By = ["title"], Vy = { class: "mjr-messages-star-label" }, Hy = { class: "mjr-messages-tabs", role: "tablist" -}, Uy = { class: "mjr-messages-panels" }, Wy = { class: "mjr-messages-empty" }, Gy = "https://github.com/MajoorWaldi/ComfyUI-Majoor-AssetsManager", Ky = /* @__PURE__ */ lr({ +}, Uy = { class: "mjr-messages-panels" }, Wy = { class: "mjr-messages-empty" }, Gy = "https://github.com/MajoorWaldi/ComfyUI-Majoor-AssetsManager", Ky = /* @__PURE__ */ ur({ __name: "MessagePopover", setup(e, { expose: t }) { - let n = J(null), r = J(null), i = J(null), a = J(null), o = J(null), s = J(null), c = J(null), l = J(null), u = J(null), d = J(null), f = J(null), p = (e) => e?.$el || e || null; + let n = Q(null), r = Q(null), i = Q(null), a = Q(null), o = Q(null), s = Q(null), c = Q(null), l = Q(null), u = Q(null), d = Q(null), f = Q(null), p = (e) => e?.$el || e || null; return t({ get title() { return n.value; @@ -20188,16 +20188,16 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite return f.value; } }), (e, t) => { - let p = or("MButton"), m = or("MDialog"); - return W(), X("div", { + let p = sr("MButton"), m = sr("MDialog"); + return J(), X("div", { class: "mjr-popover mjr-messages-popover", id: "mjr-messages-popover", role: "dialog", - "aria-label": Q(R)("label.messages", "Messages"), + "aria-label": Z(R)("label.messages", "Messages"), "aria-hidden": "true", tabindex: "-1", style: { display: "none" } - }, [Y(m, { + }, [W(m, { visible: !0, modal: !1, "show-header": !1, @@ -20213,33 +20213,33 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite root: { class: "mjr-inline-dialog-root" } } }, { - default: q(() => [ + default: K(() => [ U("div", Ry, [U("div", { ref_key: "titleRef", ref: n, class: "mjr-messages-title" - }, Z(Q(R)("label.messages", "Messages")), 513), U("div", zy, [U("a", { + }, Y(Z(R)("label.messages", "Messages")), 513), U("div", zy, [U("a", { href: Gy, target: "_blank", rel: "noopener noreferrer", class: "mjr-btn mjr-messages-star-link", - title: Q(R)("tooltip.starGithub", "Open GitHub and give a star") + title: Z(R)("tooltip.starGithub", "Open GitHub and give a star") }, [t[0] ||= U("span", { class: "mjr-messages-star-icon", "aria-hidden": "true" - }, "★", -1), U("span", Vy, Z(Q(R)("btn.giveStar", "Give a star")), 1)], 8, By), Y(p, { + }, "★", -1), U("span", Vy, Y(Z(R)("btn.giveStar", "Give a star")), 1)], 8, By), W(p, { ref_key: "markReadBtnRef", ref: r, type: "button", class: "mjr-btn mjr-messages-mark-read-btn", severity: "secondary", - title: Q(R)("tooltip.markMessagesRead", "Mark all messages as read") + title: Z(R)("tooltip.markMessagesRead", "Mark all messages as read") }, { - default: q(() => [tr(Z(Q(R)("btn.markAllRead", "Mark all read")), 1)]), + default: K(() => [Sr(Y(Z(R)("btn.markAllRead", "Mark all read")), 1)]), _: 1 }, 8, ["title"])])]), U("div", Hy, [ - Y(p, { + W(p, { ref_key: "messageTabBtnRef", ref: i, type: "button", @@ -20251,7 +20251,7 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite "aria-controls": "mjr-messages-panel", id: "mjr-messages-tab" }, { - default: q(() => [U("span", null, Z(Q(R)("label.messages", "Messages")), 1), U("span", { + default: K(() => [U("span", null, Y(Z(R)("label.messages", "Messages")), 1), U("span", { ref_key: "messageTabBadgeRef", ref: a, class: "mjr-tab-count-badge", @@ -20260,7 +20260,7 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite }, null, 512)]), _: 1 }, 512), - Y(p, { + W(p, { ref_key: "historyTabBtnRef", ref: o, type: "button", @@ -20272,8 +20272,8 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite "aria-controls": "mjr-history-panel", id: "mjr-history-tab" }, { - default: q(() => [ - U("span", null, Z(Q(R)("label.toastHistory", "History")), 1), + default: K(() => [ + U("span", null, Y(Z(R)("label.toastHistory", "History")), 1), U("span", { ref_key: "historyTabCountRef", ref: c, @@ -20291,7 +20291,7 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite ]), _: 1 }, 512), - Y(p, { + W(p, { ref_key: "shortcutsTabBtnRef", ref: l, type: "button", @@ -20303,7 +20303,7 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite "aria-controls": "mjr-shortcuts-panel", id: "mjr-shortcuts-tab" }, { - default: q(() => [tr(Z(Q(R)("msg.shortcuts.title", "Shortcut Guide")), 1)]), + default: K(() => [Sr(Y(Z(R)("msg.shortcuts.title", "Shortcut Guide")), 1)]), _: 1 }, 512) ]), @@ -20315,7 +20315,7 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite id: "mjr-messages-panel", role: "tabpanel", "aria-labelledby": "mjr-messages-tab" - }, [U("div", Wy, Z(Q(R)("msg.noMessages", "No messages for now.")), 1)], 512), + }, [U("div", Wy, Y(Z(R)("msg.noMessages", "No messages for now.")), 1)], 512), U("div", { ref_key: "historyPanelRef", ref: d, @@ -20343,7 +20343,7 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite }), qy = { class: "mjr-am-header-row" }, Jy = { class: "mjr-am-header-left" }, Yy = { class: "mjr-am-header-title" }, Xy = ["data-mjr-version-channel", "title"], Zy = { class: "mjr-tabs" }, Qy = { class: "mjr-am-header-tools" }, $y = { class: "mjr-popover-anchor", style: { display: "none" } -}, eb = { class: "mjr-popover-anchor" }, tb = { class: "mjr-popover-anchor" }, nb = { class: "mjr-popover-anchor" }, rb = { class: "mjr-popover-anchor" }, ib = { class: "mjr-popover-anchor" }, ab = "mjr-am-version-badge-label", ob = "V", sb = /* @__PURE__ */ lr({ +}, eb = { class: "mjr-popover-anchor" }, tb = { class: "mjr-popover-anchor" }, nb = { class: "mjr-popover-anchor" }, rb = { class: "mjr-popover-anchor" }, ib = { class: "mjr-popover-anchor" }, ab = "mjr-am-version-badge-label", ob = "V", sb = /* @__PURE__ */ ur({ __name: "HeaderSection", setup(n, { expose: r }) { let i = null; @@ -20381,10 +20381,10 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite rating_desc: "pi pi-star-fill", size_desc: "pi pi-sort-numeric-down-alt", size_asc: "pi pi-sort-numeric-up-alt" - }, l = yh(), u = s() === "nightly", d = J(null), f = J(null), p = J(null), m = J(null), h = J(null), g = J(null), _ = J(null), y = J(null), b = J(null), x = J(null), S = J(null), C = J(null), w = J(null), T = J(null), E = J(null), D = J(null), O = J(null), k = J(null), A = J(null), j = J(null), M = J(null), N = J(null), P = J(null), ee = J(null), te = J(null), F = J(null), I = (e) => e?.$el || e || null, ne = J(u ? "nightly" : "v?"), ie = J(u ? "nightly" : "stable"), ae = J(!1), oe = J(!1), se = K(() => c[l.sort] ?? "pi pi-sort-amount-down"), ce = K(() => String(l.viewScope || l.scope || "output").toLowerCase()), le = K(() => ce.value === "similar" || Array.isArray(l.similarResults) && l.similarResults.length > 0 || !!l.similarTitle), ue = K(() => { + }, l = yh(), u = s() === "nightly", d = Q(null), f = Q(null), p = Q(null), m = Q(null), h = Q(null), g = Q(null), _ = Q(null), y = Q(null), b = Q(null), x = Q(null), S = Q(null), C = Q(null), w = Q(null), T = Q(null), E = Q(null), D = Q(null), O = Q(null), k = Q(null), A = Q(null), j = Q(null), M = Q(null), N = Q(null), P = Q(null), ee = Q(null), te = Q(null), F = Q(null), I = (e) => e?.$el || e || null, ne = Q(u ? "nightly" : "v?"), ie = Q(u ? "nightly" : "stable"), ae = Q(!1), oe = Q(!1), se = q(() => c[l.sort] ?? "pi pi-sort-amount-down"), ce = q(() => String(l.viewScope || l.scope || "output").toLowerCase()), le = q(() => ce.value === "similar" || Array.isArray(l.similarResults) && l.similarResults.length > 0 || !!l.similarTitle), ue = q(() => { let e = String(l.similarSourceAssetId || ""); return e.startsWith("stack:") || e.startsWith("duplicates:") || e.startsWith("group:") || e.startsWith("node:") ? "group" : "similar"; - }), de = K(() => ue.value === "group" ? R("tab.group", "Group") : R("tab.similar", "Similar")), fe = K(() => ue.value === "group" ? R("tooltip.tab.group", "Browse current grouped assets") : R("tooltip.tab.similar", "Browse current similar findings")), pe = { + }), de = q(() => ue.value === "group" ? R("tab.group", "Group") : R("tab.similar", "Similar")), fe = q(() => ue.value === "group" ? R("tooltip.tab.group", "Browse current grouped assets") : R("tooltip.tab.similar", "Browse current similar findings")), pe = { get tabAll() { return I(M.value); }, @@ -20403,7 +20403,7 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite get tabSimilar() { return I(F.value); } - }, me = K(() => ({ + }, me = q(() => ({ position: "relative", fontSize: "10px", opacity: ae.value ? "1" : "0.6", @@ -20416,7 +20416,7 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite cursor: "pointer", transition: "opacity 0.2s, background 0.2s", verticalAlign: "middle" - })), he = K(() => oe.value ? R("tooltip.closeMFV", "Close Majoor Floating Viewer") : R("tooltip.openMFV", "Open Majoor Floating Viewer")), ge = K(() => "pi pi-eye"), _e = K(() => R("tooltip.openMajoorSettings", "Open Majoor Assets Manager settings")); + })), he = q(() => oe.value ? R("tooltip.closeMFV", "Close Majoor Floating Viewer") : R("tooltip.openMFV", "Open Majoor Floating Viewer")), ge = q(() => "pi pi-eye"), _e = q(() => R("tooltip.openMajoorSettings", "Open Majoor Assets Manager settings")); async function ve() { let n = it(); if (!n || typeof n != "object") { @@ -20583,10 +20583,10 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite console.debug?.(e); } } - return wr(oe, () => { + return hr(oe, () => { Ee(); - }), nr(async () => { - await dr(), De(), Ee(), we(u), Te(u); + }), or(async () => { + await nr(), De(), Ee(), we(u), Te(u); try { typeof window < "u" && window.addEventListener(V.MFV_VISIBILITY_CHANGED, Oe); } catch (e) { @@ -20597,7 +20597,7 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite } catch (e) { console.debug?.(e); } - }), mr(() => { + }), pr(() => { je(); }), r({ isVueHeader: !0, @@ -20781,8 +20781,8 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite }, _headerDispose: je }), (e, t) => { - let n = or("MButton"); - return W(), X(H, null, [U("div", { + let n = sr("MButton"); + return J(), X(H, null, [U("div", { ref_key: "headerRef", ref: d, class: "mjr-am-header" @@ -20791,100 +20791,100 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite class: "mjr-am-header-icon pi pi-folder", "aria-hidden": "true" }, null, -1), - U("div", Yy, Z(Q(R)("manager.title")), 1), + U("div", Yy, Y(Z(R)("manager.title")), 1), U("a", { href: "https://ko-fi.com/majoorwaldi", target: "_blank", rel: "noopener noreferrer", class: "mjr-am-version-badge", "data-mjr-version-channel": ie.value, - title: Q(R)("tooltip.supportKofi"), - style: br(me.value), + title: Z(R)("tooltip.supportKofi"), + style: xr(me.value), onMouseenter: t[0] ||= (e) => ae.value = !0, onMouseleave: t[1] ||= (e) => ae.value = !1 - }, [U("span", { class: yr(ab) }, Z(ne.value), 1)], 44, Xy) + }, [U("span", { class: wr(ab) }, Y(ne.value), 1)], 44, Xy) ]), U("div", { ref_key: "headerActionsRef", ref: f, class: "mjr-am-header-actions" }, [U("div", Zy, [ - Y(n, { + W(n, { ref_key: "tabAllRef", ref: M, type: "button", - class: yr(["mjr-tab", { "is-active": ce.value === "all" }]), + class: wr(["mjr-tab", { "is-active": ce.value === "all" }]), severity: "secondary", text: "", "data-scope": "all", - title: Q(R)("tooltip.tab.all") + title: Z(R)("tooltip.tab.all") }, { - default: q(() => [tr(Z(Q(R)("tab.all")), 1)]), + default: K(() => [Sr(Y(Z(R)("tab.all")), 1)]), _: 1 }, 8, ["class", "title"]), - Y(n, { + W(n, { ref_key: "tabInputsRef", ref: N, type: "button", - class: yr(["mjr-tab", { "is-active": ce.value === "input" }]), + class: wr(["mjr-tab", { "is-active": ce.value === "input" }]), severity: "secondary", text: "", "data-scope": "input", - title: Q(R)("tooltip.tab.input") + title: Z(R)("tooltip.tab.input") }, { - default: q(() => [tr(Z(Q(R)("tab.input")), 1)]), + default: K(() => [Sr(Y(Z(R)("tab.input")), 1)]), _: 1 }, 8, ["class", "title"]), - Y(n, { + W(n, { ref_key: "tabOutputsRef", ref: P, type: "button", - class: yr(["mjr-tab", { "is-active": ce.value === "output" }]), + class: wr(["mjr-tab", { "is-active": ce.value === "output" }]), severity: "secondary", text: "", "data-scope": "output", - title: Q(R)("tooltip.tab.output") + title: Z(R)("tooltip.tab.output") }, { - default: q(() => [tr(Z(Q(R)("tab.output")), 1)]), + default: K(() => [Sr(Y(Z(R)("tab.output")), 1)]), _: 1 }, 8, ["class", "title"]), - Y(n, { + W(n, { ref_key: "tabCustomRef", ref: ee, type: "button", - class: yr(["mjr-tab", { "is-active": ce.value === "custom" }]), + class: wr(["mjr-tab", { "is-active": ce.value === "custom" }]), severity: "secondary", text: "", "data-scope": "custom", - title: Q(R)("tooltip.tab.custom") + title: Z(R)("tooltip.tab.custom") }, { - default: q(() => [tr(Z(Q(R)("tab.custom")), 1)]), + default: K(() => [Sr(Y(Z(R)("tab.custom")), 1)]), _: 1 }, 8, ["class", "title"]), - Y(n, { + W(n, { ref_key: "tabWorkflowRef", ref: te, type: "button", - class: yr(["mjr-tab", { "is-active": ce.value === "workflow" }]), + class: wr(["mjr-tab", { "is-active": ce.value === "workflow" }]), severity: "secondary", text: "", "data-scope": "workflow", - title: Q(R)("tooltip.tab.workflow", "Browse saved workflows") + title: Z(R)("tooltip.tab.workflow", "Browse saved workflows") }, { - default: q(() => [tr(Z(Q(R)("tab.workflow", "Workflow")), 1)]), + default: K(() => [Sr(Y(Z(R)("tab.workflow", "Workflow")), 1)]), _: 1 }, 8, ["class", "title"]), - Y(n, { + W(n, { ref_key: "tabSimilarRef", ref: F, type: "button", - class: yr(["mjr-tab", { "is-active": ce.value === "similar" }]), + class: wr(["mjr-tab", { "is-active": ce.value === "similar" }]), severity: "secondary", text: "", "data-scope": "similar", - style: br({ display: le.value ? "" : "none" }), + style: xr({ display: le.value ? "" : "none" }), title: fe.value }, { - default: q(() => [tr(Z(de.value), 1)]), + default: K(() => [Sr(Y(de.value), 1)]), _: 1 }, 8, [ "class", @@ -20892,7 +20892,7 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite "title" ]) ]), U("div", Qy, [ - ce.value === "workflow" ? (W(), rr(n, { + ce.value === "workflow" ? (J(), rr(n, { key: 0, ref_key: "saveWorkflowBtnRef", ref: S, @@ -20901,17 +20901,17 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite severity: "secondary", text: "", rounded: "", - title: Q(R)("tooltip.saveCurrentWorkflow", "Save current workflow"), - "aria-label": Q(R)("tooltip.saveCurrentWorkflow", "Save current workflow"), + title: Z(R)("tooltip.saveCurrentWorkflow", "Save current workflow"), + "aria-label": Z(R)("tooltip.saveCurrentWorkflow", "Save current workflow"), onClick: ve }, { - default: q(() => [...t[3] ||= [U("i", { + default: K(() => [...t[3] ||= [U("i", { class: "pi pi-save", "aria-hidden": "true" }, null, -1)]]), _: 1 }, 8, ["title", "aria-label"])) : G("", !0), - ce.value === "workflow" ? (W(), rr(n, { + ce.value === "workflow" ? (J(), rr(n, { key: 1, ref_key: "pickWorkflowRootBtnRef", ref: C, @@ -20920,28 +20920,28 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite severity: "secondary", text: "", rounded: "", - title: Q(R)("tooltip.pickWorkflowRoot", "Pick saved workflow root"), - "aria-label": Q(R)("tooltip.pickWorkflowRoot", "Pick saved workflow root"), + title: Z(R)("tooltip.pickWorkflowRoot", "Pick saved workflow root"), + "aria-label": Z(R)("tooltip.pickWorkflowRoot", "Pick saved workflow root"), onClick: ye }, { - default: q(() => [...t[4] ||= [U("i", { + default: K(() => [...t[4] ||= [U("i", { class: "pi pi-folder-plus", "aria-hidden": "true" }, null, -1)]]), _: 1 }, 8, ["title", "aria-label"])) : G("", !0), - ce.value === "workflow" ? (W(), rr(n, { + ce.value === "workflow" ? (J(), rr(n, { key: 2, type: "button", class: "mjr-icon-btn mjr-import-workflow-btn", severity: "secondary", text: "", rounded: "", - title: Q(R)("tooltip.importWorkflow", "Import workflow"), - "aria-label": Q(R)("tooltip.importWorkflow", "Import workflow"), + title: Z(R)("tooltip.importWorkflow", "Import workflow"), + "aria-label": Z(R)("tooltip.importWorkflow", "Import workflow"), onClick: be }, { - default: q(() => [...t[5] ||= [U("i", { + default: K(() => [...t[5] ||= [U("i", { class: "pi pi-upload", "aria-hidden": "true" }, null, -1)]]), @@ -20956,7 +20956,7 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite style: { display: "none" }, onChange: Se }, null, 544), - U("div", $y, [Y(n, { + U("div", $y, [W(n, { ref_key: "customMenuBtnRef", ref: p, type: "button", @@ -20964,23 +20964,23 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite severity: "secondary", text: "", rounded: "", - title: Q(R)("tooltip.browserFolders"), - "aria-label": Q(R)("tooltip.browserFolders") + title: Z(R)("tooltip.browserFolders"), + "aria-label": Z(R)("tooltip.browserFolders") }, { - default: q(() => [...t[6] ||= [U("i", { + default: K(() => [...t[6] ||= [U("i", { class: "pi pi-folder-open", "aria-hidden": "true" }, null, -1)]]), _: 1 - }, 8, ["title", "aria-label"]), Y(Iy, { + }, 8, ["title", "aria-label"]), W(Iy, { ref_key: "customPopoverRef", ref: A }, null, 512)]), - Y(n, { + W(n, { ref_key: "mfvBtnRef", ref: y, type: "button", - class: yr(["mjr-icon-btn", { "mjr-mfv-btn-active": oe.value }]), + class: wr(["mjr-icon-btn", { "mjr-mfv-btn-active": oe.value }]), severity: "secondary", text: "", rounded: "", @@ -20988,8 +20988,8 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite "aria-label": he.value, onClick: ke }, { - default: q(() => [U("i", { - class: yr(ge.value), + default: K(() => [U("i", { + class: wr(ge.value), "aria-hidden": "true" }, null, 2)]), _: 1 @@ -20998,7 +20998,7 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite "title", "aria-label" ]), - U("div", eb, [Y(n, { + U("div", eb, [W(n, { ref_key: "messageBtnRef", ref: b, type: "button", @@ -21006,10 +21006,10 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite severity: "secondary", text: "", rounded: "", - title: Q(R)("tooltip.openMessages", "Messages and updates"), - "aria-label": Q(R)("tooltip.openMessages", "Messages and updates") + title: Z(R)("tooltip.openMessages", "Messages and updates"), + "aria-label": Z(R)("tooltip.openMessages", "Messages and updates") }, { - default: q(() => [...t[7] ||= [U("i", { + default: K(() => [...t[7] ||= [U("i", { class: "pi pi-info-circle", "aria-hidden": "true" }, null, -1), U("span", { @@ -21018,11 +21018,11 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite "aria-hidden": "true" }, null, -1)]]), _: 1 - }, 8, ["title", "aria-label"]), Y(Ky, { + }, 8, ["title", "aria-label"]), W(Ky, { ref_key: "messagePopoverRef", ref: j }, null, 512)]), - Y(n, { + W(n, { ref_key: "settingsBtnRef", ref: x, type: "button", @@ -21034,17 +21034,17 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite "aria-label": _e.value, onClick: Ae }, { - default: q(() => [...t[8] ||= [U("i", { + default: K(() => [...t[8] ||= [U("i", { class: "pi pi-cog", "aria-hidden": "true" }, null, -1)]]), _: 1 }, 8, ["title", "aria-label"]) - ])], 512)])], 512), Y(K_, { + ])], 512)])], 512), W(K_, { ref_key: "searchBarRef", ref: T }, { - "filter-anchor": q(() => [U("div", tb, [Y(n, { + "filter-anchor": K(() => [U("div", tb, [W(n, { ref_key: "filterBtnRef", ref: m, type: "button", @@ -21052,19 +21052,19 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite severity: "secondary", text: "", rounded: "", - title: Q(R)("label.filters"), - "aria-label": Q(R)("label.filters") + title: Z(R)("label.filters"), + "aria-label": Z(R)("label.filters") }, { - default: q(() => [...t[9] ||= [U("i", { + default: K(() => [...t[9] ||= [U("i", { class: "pi pi-filter", "aria-hidden": "true" }, null, -1)]]), _: 1 - }, 8, ["title", "aria-label"]), Y(Wv, { + }, 8, ["title", "aria-label"]), W(Wv, { ref_key: "filterPopoverRef", ref: D }, null, 512)])]), - "sort-anchor": q(() => [U("div", nb, [Y(n, { + "sort-anchor": K(() => [U("div", nb, [W(n, { ref_key: "sortBtnRef", ref: h, type: "button", @@ -21072,19 +21072,19 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite severity: "secondary", text: "", rounded: "", - title: Q(R)("label.sort"), - "aria-label": Q(R)("label.sort") + title: Z(R)("label.sort"), + "aria-label": Z(R)("label.sort") }, { - default: q(() => [U("i", { - class: yr(se.value), + default: K(() => [U("i", { + class: wr(se.value), "aria-hidden": "true" }, null, 2)]), _: 1 - }, 8, ["title", "aria-label"]), Y(Y_, { + }, 8, ["title", "aria-label"]), W(Y_, { ref_key: "sortPopoverRef", ref: E }, null, 512)])]), - "collections-anchor": q(() => [U("div", rb, [Y(n, { + "collections-anchor": K(() => [U("div", rb, [W(n, { ref_key: "collectionsBtnRef", ref: g, type: "button", @@ -21092,19 +21092,19 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite severity: "secondary", text: "", rounded: "", - title: Q(R)("label.collections"), - "aria-label": Q(R)("label.collections") + title: Z(R)("label.collections"), + "aria-label": Z(R)("label.collections") }, { - default: q(() => [...t[10] ||= [U("i", { + default: K(() => [...t[10] ||= [U("i", { class: "pi pi-bookmark", "aria-hidden": "true" }, null, -1)]]), _: 1 - }, 8, ["title", "aria-label"]), Y(Ty, { + }, 8, ["title", "aria-label"]), W(Ty, { ref_key: "collectionsPopoverRef", ref: O }, null, 512)])]), - "pinned-folders-anchor": q(() => [U("div", ib, [Y(n, { + "pinned-folders-anchor": K(() => [U("div", ib, [W(n, { ref_key: "pinnedFoldersBtnRef", ref: _, type: "button", @@ -21112,15 +21112,15 @@ var $v = { class: "mjr-menu mjr-collections-menu" }, ey = { class: "mjr-menu-ite severity: "secondary", text: "", rounded: "", - title: Q(R)("tooltip.pinnedFolders"), - "aria-label": Q(R)("tooltip.pinnedFolders") + title: Z(R)("tooltip.pinnedFolders"), + "aria-label": Z(R)("tooltip.pinnedFolders") }, { - default: q(() => [...t[11] ||= [U("i", { + default: K(() => [...t[11] ||= [U("i", { class: "pi pi-folder", "aria-hidden": "true" }, null, -1)]]), _: 1 - }, 8, ["title", "aria-label"]), Y(jy, { + }, 8, ["title", "aria-label"]), W(jy, { ref_key: "pinnedFoldersPopoverRef", ref: k }, null, 512)])]), @@ -21344,10 +21344,10 @@ var yb = { }, bb = { key: 0, class: "mjr-folder-breadcrumb-separator" -}, xb = { class: "mjr-am-summary-left" }, Sb = { class: "mjr-am-summary-text" }, Cb = { class: "mjr-am-summary-right" }, wb = ["aria-label"], Tb = /* @__PURE__ */ lr({ +}, xb = { class: "mjr-am-summary-left" }, Sb = { class: "mjr-am-summary-text" }, Cb = { class: "mjr-am-summary-right" }, wb = ["aria-label"], Tb = /* @__PURE__ */ ur({ __name: "SummaryBarSection", setup(e, { expose: t }) { - let n = yh(), r = J(null), i = J(null), a = J(null), o = J(""), s = J(""), c = J(!1), l = J(!1), u = J(null), d = J(null), f = J([]), p = fb(), m = K(() => String(n.kindFilter || "").trim().toLowerCase()), h = K(() => { + let n = yh(), r = Q(null), i = Q(null), a = Q(null), o = Q(""), s = Q(""), c = Q(!1), l = Q(!1), u = Q(null), d = Q(null), f = Q([]), p = fb(), m = q(() => String(n.kindFilter || "").trim().toLowerCase()), h = q(() => { let e = R("label.type", "Type"); return [ { @@ -21432,7 +21432,7 @@ var yb = { console.debug?.(e); } } - return nr(() => { + return or(() => { try { a.value?.appendChild?.(p.wrap); } catch (e) { @@ -21444,14 +21444,14 @@ var yb = { folderBreadcrumb: i, setFolderBreadcrumb: S }), (e, t) => { - let n = or("MButton"); - return W(), X(H, null, [U("div", { + let n = sr("MButton"); + return J(), X(H, null, [U("div", { ref_key: "folderBreadcrumb", ref: i, - class: yr(["mjr-folder-breadcrumb", { "is-visible": l.value }]), + class: wr(["mjr-folder-breadcrumb", { "is-visible": l.value }]), "aria-label": "Folder breadcrumb" }, [ - u.value ? (W(), rr(n, { + u.value ? (J(), rr(n, { key: 0, type: "button", class: "mjr-btn-link mjr-folder-breadcrumb-action", @@ -21460,10 +21460,10 @@ var yb = { disabled: u.value.disabled, onClick: t[0] ||= (e) => C(u.value) }, { - default: q(() => [tr(Z(u.value.label), 1)]), + default: K(() => [Sr(Y(u.value.label), 1)]), _: 1 }, 8, ["disabled"])) : G("", !0), - d.value ? (W(), rr(n, { + d.value ? (J(), rr(n, { key: 1, type: "button", class: "mjr-btn-link mjr-folder-breadcrumb-action", @@ -21472,19 +21472,19 @@ var yb = { disabled: d.value.disabled, onClick: t[1] ||= (e) => C(d.value) }, { - default: q(() => [tr(Z(d.value.label), 1)]), + default: K(() => [Sr(Y(d.value.label), 1)]), _: 1 }, 8, ["disabled"])) : G("", !0), - u.value || d.value ? (W(), X("span", yb, " | ")) : G("", !0), - (W(!0), X(H, null, hr(f.value, (e, t) => (W(), X(H, { key: `${e.target}:${t}` }, [t > 0 ? (W(), X("span", bb, "/")) : G("", !0), Y(n, { + u.value || d.value ? (J(), X("span", yb, " | ")) : G("", !0), + (J(!0), X(H, null, cr(f.value, (e, t) => (J(), X(H, { key: `${e.target}:${t}` }, [t > 0 ? (J(), X("span", bb, "/")) : G("", !0), W(n, { type: "button", - class: yr(["mjr-btn-link mjr-folder-breadcrumb-segment", { "is-current": e.current }]), + class: wr(["mjr-btn-link mjr-folder-breadcrumb-segment", { "is-current": e.current }]), severity: "secondary", text: "", disabled: e.current, onClick: (t) => C(e) }, { - default: q(() => [tr(Z(e.label), 1)]), + default: K(() => [Sr(Y(e.label), 1)]), _: 2 }, 1032, [ "class", @@ -21496,15 +21496,15 @@ var yb = { ref: r, class: "mjr-am-summary", "aria-live": "polite" - }, [U("div", xb, [U("div", Sb, Z(o.value), 1)]), U("div", Cb, [ + }, [U("div", xb, [U("div", Sb, Y(o.value), 1)]), U("div", Cb, [ U("div", { class: "mjr-media-shortcuts", - "aria-label": Q(R)("label.type", "Type"), + "aria-label": Z(R)("label.type", "Type"), role: "group" - }, [(W(!0), X(H, null, hr(h.value, (e) => (W(), rr(n, { + }, [(J(!0), X(H, null, cr(h.value, (e) => (J(), rr(n, { key: e.kind, type: "button", - class: yr(["mjr-icon-btn mjr-media-shortcut-btn", { "mjr-context-active": v(e.kind) }]), + class: wr(["mjr-icon-btn mjr-media-shortcut-btn", { "mjr-context-active": v(e.kind) }]), severity: "secondary", text: "", rounded: "", @@ -21513,8 +21513,8 @@ var yb = { "aria-pressed": String(v(e.kind)), onClick: (t) => b(e.kind) }, { - default: q(() => [U("i", { - class: yr(e.icon), + default: K(() => [U("i", { + class: wr(e.icon), "aria-hidden": "true" }, null, 2)]), _: 2 @@ -21525,7 +21525,7 @@ var yb = { "class", "onClick" ]))), 128))], 8, wb), - c.value ? (W(), rr(n, { + c.value ? (J(), rr(n, { key: 0, type: "button", class: "mjr-am-dup-alert", @@ -21534,7 +21534,7 @@ var yb = { title: s.value, onClick: _ }, { - default: q(() => [tr(Z(s.value), 1)]), + default: K(() => [Sr(Y(s.value), 1)]), _: 1 }, 8, ["title"])) : G("", !0), U("div", { @@ -21564,9 +21564,9 @@ function Eb(e, t) { } catch {} n = null; } - wr(e, (e, t) => { + hr(e, (e, t) => { t && i(), e && r(e); - }, { immediate: !0 }), mr(i); + }, { immediate: !0 }), pr(i); } // ui/vue/composables/useGridKeyboard.ts function Db(e) { @@ -21617,9 +21617,9 @@ function Ob(e) { } t = null; }; - wr(e, (e, r) => { + hr(e, (e, r) => { r && n(), e && (t = Db(e)); - }, { immediate: !0 }), mr(n); + }, { immediate: !0 }), pr(n); } // ui/vue/components/grid/assetsGridHostState.ts function kb() {} @@ -21797,10 +21797,10 @@ async function Ib({ initialLoadPromise: e, gridWrapper: t, gridContainer: n, pan r.sidebarOpen && s && jb(i); } // ui/vue/components/grid/AssetsGrid.vue -var Lb = /* @__PURE__ */ lr({ +var Lb = /* @__PURE__ */ ur({ __name: "AssetsGrid", setup(e, { expose: t }) { - let n = J(null), r = J(null), i = J(null), a = yh(), o = K(() => i.value?.gridContainer ?? null), s = null, c = null, l = null, u = null; + let n = Q(null), r = Q(null), i = Q(null), a = yh(), o = q(() => i.value?.gridContainer ?? null), s = null, c = null, l = null, u = null; function d() { try { l?.setVisibility?.(); @@ -21894,7 +21894,7 @@ var Lb = /* @__PURE__ */ lr({ } }; } - pr("mjr-grid-container-ref", o), Eb(o, () => a), Ob(o); + ar("mjr-grid-container-ref", o), Eb(o, () => a), Ob(o); function m() { return o.value || null; } @@ -21912,7 +21912,7 @@ var Lb = /* @__PURE__ */ lr({ }); } } - return nr(() => { + return or(() => { s = Pb(r.value, a), r.value && Number(a.scrollTop || 0) > 0 && (r.value.scrollTop = Number(a.scrollTop || 0)), p(); try { window.addEventListener("mjr:keepalive-attached", f), document.addEventListener("visibilitychange", d); @@ -21920,7 +21920,7 @@ var Lb = /* @__PURE__ */ lr({ console.debug?.(e); } d(); - }), jr(() => { + }), mr(() => { try { Xn(m()); } catch (e) { @@ -21955,7 +21955,7 @@ var Lb = /* @__PURE__ */ lr({ } catch (e) { console.debug?.(e); } - }), wr(o, (e, t) => { + }), hr(o, (e, t) => { try { t && t !== e && Xn(t); } catch (e) { @@ -22042,7 +22042,7 @@ var Lb = /* @__PURE__ */ lr({ disposeGrid(...e) { return i.value?.dispose?.(...e); } - }), (e, t) => (W(), X("div", { + }), (e, t) => (J(), X("div", { ref_key: "browseSectionRef", ref: n, class: "mjr-am-browse", @@ -22061,7 +22061,7 @@ var Lb = /* @__PURE__ */ lr({ overflow: "auto", position: "relative" } - }, [Y(sd, { + }, [W(sd, { ref_key: "gridHostRef", ref: i, "scroll-element": r.value @@ -22078,15 +22078,15 @@ var Lb = /* @__PURE__ */ lr({ "flex-shrink": "0", background: "var(--mjr-surface-2,#2e2e2e)" } -}, zb = ["title"], Bb = /* @__PURE__ */ lr({ +}, zb = ["title"], Bb = /* @__PURE__ */ ur({ __name: "SidebarHeaderSection", props: { asset: {} }, emits: ["close"], setup(e, { emit: t }) { let n = t; return (t, r) => { - let i = or("MButton"); - return W(), X("div", Rb, [U("div", { + let i = sr("MButton"); + return J(), X("div", Rb, [U("div", { class: "mjr-sidebar-filename", title: e.asset.filename, style: { @@ -22099,7 +22099,7 @@ var Lb = /* @__PURE__ */ lr({ "min-width": "0", "padding-right": "8px" } - }, Z(e.asset.filename), 9, zb), Y(i, { + }, Y(e.asset.filename), 9, zb), W(i, { type: "button", class: "mjr-sidebar-close", severity: "secondary", @@ -22123,7 +22123,7 @@ var Lb = /* @__PURE__ */ lr({ onMouseenter: r[1] ||= (e) => (e.currentTarget.style.background = "rgba(255,255,255,0.1)") && (e.currentTarget.style.borderColor = "rgba(255,255,255,0.2)"), onMouseleave: r[2] ||= (e) => (e.currentTarget.style.background = "none") && (e.currentTarget.style.borderColor = "transparent") }, { - default: q(() => [...r[3] ||= [tr("x", -1)]]), + default: K(() => [...r[3] ||= [Sr("x", -1)]]), _: 1 })]); }; @@ -22165,7 +22165,7 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr "padding-bottom": "12px", "border-bottom": "1px solid var(--mjr-border, rgba(255, 255, 255, 0.12))" } -}, Yb = /* @__PURE__ */ lr({ +}, Yb = /* @__PURE__ */ ur({ __name: "SidebarPreviewSection", props: { asset: {}, @@ -22175,10 +22175,10 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr } }, setup(e) { - let t = e, n = J(null), r = null, i = K(() => Ge(t.asset) || ""), a = K(() => { + let t = e, n = Q(null), r = null, i = q(() => Ge(t.asset) || ""), a = q(() => { let e = String(t.asset?.filename || ""), n = e.lastIndexOf("."); return n === -1 ? "" : e.slice(n + 1).toUpperCase(); - }), o = K(() => { + }), o = q(() => { let e = []; a.value && e.push(a.value), t.asset?.kind && e.push(String(t.asset.kind).toLowerCase()); let n = Vb(t.asset?.size); @@ -22217,17 +22217,17 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr } } } - return wr(() => [t.asset, t.showPreviewThumb], () => { + return hr(() => [t.asset, t.showPreviewThumb], () => { s(); - }, { flush: "post" }), wr(i, () => { + }, { flush: "post" }), hr(i, () => { setTimeout(() => { l(); }, 0); - }), nr(() => { + }), or(() => { l(); - }), jr(() => { + }), mr(() => { s(); - }), (t, r) => (W(), X("div", Ub, [e.showPreviewThumb ? (W(), X("div", { + }), (t, r) => (J(), X("div", Ub, [e.showPreviewThumb ? (J(), X("div", { key: 0, ref_key: "previewContainerRef", ref: n, @@ -22242,7 +22242,7 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr "justify-content": "center", position: "relative" } - }, [e.asset.kind === "image" ? (W(), X("img", { + }, [e.asset.kind === "image" ? (J(), X("img", { key: 0, src: i.value, style: { @@ -22250,7 +22250,7 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr "max-height": "100%", "object-fit": "contain" } - }, null, 8, Wb)) : e.asset.kind === "video" ? (W(), X("video", { + }, null, 8, Wb)) : e.asset.kind === "video" ? (J(), X("video", { key: 1, src: i.value, muted: !0, @@ -22263,7 +22263,7 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr "max-height": "100%", "object-fit": "contain" } - }, null, 8, Gb)) : e.asset.kind === "audio" ? (W(), X("audio", { + }, null, 8, Gb)) : e.asset.kind === "audio" ? (J(), X("audio", { key: 2, src: i.value, controls: "", @@ -22272,7 +22272,7 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr width: "92%", "max-width": "560px" } - }, null, 8, Kb)) : (W(), X("div", qb, Z(String(e.asset.kind || "PREVIEW").toUpperCase()), 1))], 512)) : G("", !0), U("div", Jb, Z(o.value), 1)])); + }, null, 8, Kb)) : (J(), X("div", qb, Y(String(e.asset.kind || "PREVIEW").toUpperCase()), 1))], 512)) : G("", !0), U("div", Jb, Y(o.value), 1)])); } }), Xb = { class: "mjr-sidebar-section", @@ -22297,7 +22297,7 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr "font-size": "12px", opacity: "0.68", "min-width": "92px" -} }, ex = ["title"], tx = /* @__PURE__ */ lr({ +} }, ex = ["title"], tx = /* @__PURE__ */ ur({ __name: "SidebarFolderSection", props: { asset: {} }, setup(e) { @@ -22315,7 +22315,7 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr for (; r >= 1024 && i < n.length - 1;) r /= 1024, i += 1; return `${r.toFixed(+(i > 0))} ${n[i]}`; } - let r = K(() => { + let r = q(() => { let e = t.asset || {}, r = e.folder_info || e.folderInfo || {}, i = String(r.path || e.filepath || e.subfolder || ""), a = String(r.name || e.filename || "").trim(), o = Number(r.files ?? 0), s = Number(r.folders ?? 0), c = Number(r.size ?? 0), l = Number(r.mtime ?? e.mtime ?? 0), u = Number(r.ctime ?? 0), d = !!r.truncated, f = [ { label: R("sidebar.folder.name", "Name"), @@ -22350,7 +22350,7 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr valueStyle: "color:#FFB74D;font-weight:600;" }), f; }); - return (e, t) => (W(), X("div", Xb, [U("div", Zb, Z(Q(R)("sidebar.folder.details", "Folder Details")), 1), U("div", Qb, [(W(!0), X(H, null, hr(r.value, (e) => (W(), X("div", { + return (e, t) => (J(), X("div", Xb, [U("div", Zb, Y(Z(R)("sidebar.folder.details", "Folder Details")), 1), U("div", Qb, [(J(!0), X(H, null, cr(r.value, (e) => (J(), X("div", { key: e.label, style: { display: "flex", @@ -22358,10 +22358,10 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr "align-items": "flex-start", "justify-content": "space-between" } - }, [U("div", $b, Z(e.label), 1), U("div", { - style: br(e.valueStyle || "font-size: 12px; text-align: right; word-break: break-word"), + }, [U("div", $b, Y(e.label), 1), U("div", { + style: xr(e.valueStyle || "font-size: 12px; text-align: right; word-break: break-word"), title: String(e.value || "") - }, Z(e.value), 13, ex)]))), 128))])])); + }, Y(e.value), 13, ex)]))), 128))])])); } }), nx = ["aria-label"], rx = { class: "mjr-context-menu-title" }, ix = { class: "mjr-context-menu-item-left" }, ax = { key: 0, @@ -22375,16 +22375,16 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr }, cx = { class: "mjr-context-menu-item-left" }, lx = { key: 0, class: "mjr-context-menu-hint" -}, ux = /* @__PURE__ */ lr({ +}, ux = /* @__PURE__ */ ur({ __name: "AddToCollectionMenu", setup(t) { - let n = J(null), r = J(!1), i = J([]), a = J(""), o = 0, s = null, c = K(() => ({ + let n = Q(null), r = Q(!1), i = Q([]), a = Q(""), o = 0, s = null, c = q(() => ({ position: "fixed", left: `${Math.round(Number(Ut.x) || 0)}px`, top: `${Math.round(Number(Ut.y) || 0)}px`, display: "block", zIndex: "10004" - })), l = K(() => Ut.assets.length || 0), u = K(() => R("ctx.addToCollection", "Add to collection") + (l.value > 1 ? ` (${l.value})` : "")); + })), l = q(() => Ut.assets.length || 0), u = q(() => R("ctx.addToCollection", "Add to collection") + (l.value > 1 ? ` (${l.value})` : "")); function d({ collectionName: e, selectedCount: t, addRes: n }) { let r = Number(n?.data?.added ?? 0) || 0, i = Number(n?.data?.skipped_existing ?? 0) || 0, a = Number(n?.data?.skipped_duplicate ?? 0) || 0, o = String(e || "").trim() || R("label.collection", "collection"), s = R("msg.collectionAdd.added", "Added {added} item(s) to \"{name}\".", { added: r, @@ -22410,7 +22410,7 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr i.value = [], a.value = R("toast.failedLoadCollections", "Failed to load collections."); } finally { if (e === o) { - r.value = !1, await dr(), p(); + r.value = !1, await nr(), p(); try { n.value?.querySelector?.(".mjr-context-menu-item:not([aria-disabled=\"true\"])")?.focus?.(); } catch (e) { @@ -22455,9 +22455,9 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr function y() { jt(); } - return wr(() => Ut.open, async (e) => { + return hr(() => Ut.open, async (e) => { e && (i.value = [], await m()); - }), nr(() => { + }), or(() => { s = new AbortController(); let e = { capture: !0, @@ -22471,7 +22471,7 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr passive: !0, signal: s.signal }), window.addEventListener("mjr-close-all-menus", y, { signal: s.signal }); - }), mr(() => { + }), pr(() => { try { s?.abort(); } catch (e) { @@ -22479,18 +22479,18 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr } s = null, jt(); }), (e, t) => { - let o = or("MButton"); - return W(), rr(Or, { to: "body" }, [Q(Ut).open ? (W(), X("div", { + let o = sr("MButton"); + return J(), rr(kr, { to: "body" }, [Z(Ut).open ? (J(), X("div", { key: 0, ref_key: "menuRef", ref: n, class: "mjr-add-to-collection-menu mjr-context-menu", - style: br(c.value), + style: xr(c.value), role: "menu", "aria-label": u.value }, [ - U("div", rx, Z(u.value), 1), - Y(o, { + U("div", rx, Y(u.value), 1), + W(o, { type: "button", class: "mjr-context-menu-item", severity: "secondary", @@ -22498,12 +22498,12 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr role: "menuitem", onClick: g }, { - default: q(() => [U("span", ix, [t[0] ||= U("i", { class: "pi pi-plus" }, null, -1), U("span", null, Z(Q(R)("dialog.createCollection", "Create collection")) + "...", 1)])]), + default: K(() => [U("span", ix, [t[0] ||= U("i", { class: "pi pi-plus" }, null, -1), U("span", null, Y(Z(R)("dialog.createCollection", "Create collection")) + "...", 1)])]), _: 1 }), t[2] ||= U("div", { class: "mjr-context-menu-separator" }, null, -1), - r.value ? (W(), X("div", ax, Z(Q(R)("msg.loadingCollections", "Loading collections...")), 1)) : a.value ? (W(), X("div", ox, Z(a.value), 1)) : i.value.length ? G("", !0) : (W(), X("div", sx, Z(Q(R)("msg.noCollections", "No collections yet.")), 1)), - (W(!0), X(H, null, hr(i.value, (e) => (W(), rr(o, { + r.value ? (J(), X("div", ax, Y(Z(R)("msg.loadingCollections", "Loading collections...")), 1)) : a.value ? (J(), X("div", ox, Y(a.value), 1)) : i.value.length ? G("", !0) : (J(), X("div", sx, Y(Z(R)("msg.noCollections", "No collections yet.")), 1)), + (J(!0), X(H, null, cr(i.value, (e) => (J(), rr(o, { key: String(e?.id || ""), type: "button", class: "mjr-context-menu-item", @@ -22512,7 +22512,7 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr role: "menuitem", onClick: (t) => h(String(e?.id || ""), String(e?.name || e?.id || "")) }, { - default: q(() => [U("span", cx, [t[1] ||= U("i", { class: "pi pi-bookmark" }, null, -1), U("span", null, Z(String(e?.name || e?.id || "")), 1)]), Number(e?.count || 0) > 0 ? (W(), X("span", lx, Z(Number(e?.count || 0)), 1)) : G("", !0)]), + default: K(() => [U("span", cx, [t[1] ||= U("i", { class: "pi pi-bookmark" }, null, -1), U("span", null, Y(String(e?.name || e?.id || "")), 1)]), Number(e?.count || 0) > 0 ? (J(), X("span", lx, Y(Number(e?.count || 0)), 1)) : G("", !0)]), _: 2 }, 1032, ["onClick"]))), 128)) ], 12, nx)) : G("", !0)]); @@ -22533,10 +22533,10 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr }, _x = { class: "mjr-context-menu-item-left" }, vx = { key: 0, class: "mjr-context-menu-hint" -}, yx = /* @__PURE__ */ lr({ +}, yx = /* @__PURE__ */ ur({ __name: "GridContextMenu", setup(e) { - let t = J(null), n = J(null), r = J(null), i = null, a = null, o = K(() => l(mn.main, 10031)), s = K(() => l(mn.submenu, 10032)), c = K(() => l(mn.tags, 10033)); + let t = Q(null), n = Q(null), r = Q(null), i = null, a = null, o = q(() => l(mn.main, 10031)), s = q(() => l(mn.submenu, 10032)), c = q(() => l(mn.tags, 10033)); function l(e, t) { return { position: "fixed", @@ -22560,7 +22560,7 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr a + n.width > r && (a = Math.max(8, r - n.width - 10)), o + n.height > i && (o = Math.max(8, i - n.height - 10)), a < 8 && (a = 8), o < 8 && (o = 8), e.x = a, e.y = o; } async function p(e, t) { - await dr(), f(e, t?.value || null); + await nr(), f(e, t?.value || null); } function m(e) { try { @@ -22633,13 +22633,13 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr console.debug?.(e); } } - return wr(() => mn.main.open, async (e) => { + return hr(() => mn.main.open, async (e) => { e && (await p(mn.main, t), m(t)); - }), wr(() => mn.submenu.open, async (e) => { + }), hr(() => mn.submenu.open, async (e) => { e && (await p(mn.submenu, n), m(n)); - }), wr(() => mn.tags.open, async (e) => { + }), hr(() => mn.tags.open, async (e) => { e && await p(mn.tags, r); - }), nr(() => { + }), or(() => { a = new AbortController(); let e = { capture: !0, @@ -22653,7 +22653,7 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr passive: !0, signal: a.signal }), window.addEventListener("mjr-close-all-menus", w, { signal: a.signal }); - }), mr(() => { + }), pr(() => { u(); try { a?.abort(); @@ -22662,20 +22662,20 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr } a = null, hn(); }), (e, i) => { - let a = or("MButton"); - return W(), rr(Or, { to: "body" }, [ - Q(mn).main.open ? (W(), X("div", { + let a = sr("MButton"); + return J(), rr(kr, { to: "body" }, [ + Z(mn).main.open ? (J(), X("div", { key: 0, ref_key: "mainMenuRef", ref: t, class: "mjr-grid-context-menu mjr-context-menu", - style: br(o.value), + style: xr(o.value), role: "menu", "aria-label": "Grid context menu" - }, [(W(!0), X(H, null, hr(Q(mn).main.items, (e) => (W(), X(H, { key: e.id }, [e.type === "separator" ? (W(), X("div", dx)) : (W(), rr(a, { + }, [(J(!0), X(H, null, cr(Z(mn).main.items, (e) => (J(), X(H, { key: e.id }, [e.type === "separator" ? (J(), X("div", dx)) : (J(), rr(a, { key: 1, type: "button", - class: yr(["mjr-context-menu-item", { + class: wr(["mjr-context-menu-item", { "is-disabled": e.disabled, "has-submenu": Array.isArray(e.submenu) && e.submenu.length, "is-tone-graph-map": e.tone === "graph-map", @@ -22692,10 +22692,10 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr onMouseenter: (t) => _(e, t), onMouseleave: (t) => v(e) }, { - default: q(() => [U("span", fx, [e.iconClass ? (W(), X("i", { + default: K(() => [U("span", fx, [e.iconClass ? (J(), X("i", { key: 0, - class: yr(e.iconClass) - }, null, 2)) : G("", !0), U("span", null, Z(e.label), 1)]), U("span", px, [e.rightHint ? (W(), X("span", mx, Z(e.rightHint), 1)) : G("", !0), Array.isArray(e.submenu) && e.submenu.length ? (W(), X("span", hx, " > ")) : G("", !0)])]), + class: wr(e.iconClass) + }, null, 2)) : G("", !0), U("span", null, Y(e.label), 1)]), U("span", px, [e.rightHint ? (J(), X("span", mx, Y(e.rightHint), 1)) : G("", !0), Array.isArray(e.submenu) && e.submenu.length ? (J(), X("span", hx, " > ")) : G("", !0)])]), _: 2 }, 1032, [ "class", @@ -22705,20 +22705,20 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr "onMouseenter", "onMouseleave" ]))], 64))), 128))], 4)) : G("", !0), - Q(mn).submenu.open ? (W(), X("div", { + Z(mn).submenu.open ? (J(), X("div", { key: 1, ref_key: "submenuRef", ref: n, class: "mjr-grid-rating-submenu mjr-context-menu", - style: br(s.value), + style: xr(s.value), role: "menu", "aria-label": "Grid context submenu", onMouseenter: y, onMouseleave: b - }, [(W(!0), X(H, null, hr(Q(mn).submenu.items, (e) => (W(), X(H, { key: e.id }, [e.type === "separator" ? (W(), X("div", gx)) : (W(), rr(a, { + }, [(J(!0), X(H, null, cr(Z(mn).submenu.items, (e) => (J(), X(H, { key: e.id }, [e.type === "separator" ? (J(), X("div", gx)) : (J(), rr(a, { key: 1, type: "button", - class: yr(["mjr-context-menu-item", { + class: wr(["mjr-context-menu-item", { "is-disabled": e.disabled, "is-tone-graph-map": e.tone === "graph-map", "is-tone-rename": e.tone === "rename", @@ -22732,10 +22732,10 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr tabindex: e.disabled ? -1 : 0, onClick: (t) => g(e, t, "submenu") }, { - default: q(() => [U("span", _x, [e.iconClass ? (W(), X("i", { + default: K(() => [U("span", _x, [e.iconClass ? (J(), X("i", { key: 0, - class: yr(e.iconClass) - }, null, 2)) : G("", !0), U("span", null, Z(e.label), 1)]), e.rightHint ? (W(), X("span", vx, Z(e.rightHint), 1)) : G("", !0)]), + class: wr(e.iconClass) + }, null, 2)) : G("", !0), U("span", null, Y(e.label), 1)]), e.rightHint ? (J(), X("span", vx, Y(e.rightHint), 1)) : G("", !0)]), _: 2 }, 1032, [ "class", @@ -22743,22 +22743,22 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr "tabindex", "onClick" ]))], 64))), 128))], 36)) : G("", !0), - Q(mn).tags.open && Q(mn).tags.asset ? (W(), X("div", { + Z(mn).tags.open && Z(mn).tags.asset ? (J(), X("div", { key: 2, ref_key: "tagsPopoverRef", ref: r, class: "mjr-grid-popover", - style: br(c.value) - }, [Y(Fr, { - asset: Q(mn).tags.asset, - "model-value": Q(mn).tags.asset?.tags || [], + style: xr(c.value) + }, [W(Fr, { + asset: Z(mn).tags.asset, + "model-value": Z(mn).tags.asset?.tags || [], "onUpdate:modelValue": T, onTagsChange: E }, null, 8, ["asset", "model-value"])], 4)) : G("", !0) ]); }; } -}), bx = { class: "mjr-workflow-picker-dialog mjr-workflow-info-dialog" }, xx = { class: "mjr-workflow-picker-header" }, Sx = { class: "mjr-workflow-picker-title" }, Cx = { class: "mjr-workflow-picker-subtitle" }, wx = { class: "mjr-workflow-info-form" }, Tx = { class: "is-wide" }, Ex = { class: "mjr-workflow-picker-footer" }, Dx = /* @__PURE__ */ lr({ +}), bx = { class: "mjr-workflow-picker-dialog mjr-workflow-info-dialog" }, xx = { class: "mjr-workflow-picker-header" }, Sx = { class: "mjr-workflow-picker-title" }, Cx = { class: "mjr-workflow-picker-subtitle" }, wx = { class: "mjr-workflow-info-form" }, Tx = { class: "is-wide" }, Ex = { class: "mjr-workflow-picker-footer" }, Dx = /* @__PURE__ */ ur({ __name: "WorkflowInfoDialog", setup(t) { let n = Tr({ @@ -22767,8 +22767,8 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr provider: "", runs_on: "", notes: "" - }), r = K(() => Bi.workflow || null), i = K(() => String(r.value?.display_name || r.value?.filename || "Workflow")); - wr(() => Bi.open, (e) => { + }), r = q(() => Bi.workflow || null), i = q(() => String(r.value?.display_name || r.value?.filename || "Workflow")); + hr(() => Bi.open, (e) => { if (!e) return; let t = r.value || {}; n.task = String(t.user_task || t.task || ""), n.model_family = String(t.user_model_family || t.model_family || ""), n.provider = String(t.user_provider || t.provider || ""), n.runs_on = String(t.user_runs_on || t.runs_on || ""), n.notes = String(t.notes || ""); @@ -22788,53 +22788,53 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr }, { timeoutMs: 2e4 }); i?.ok ? (e(R("toast.workflowUpdated", "Workflow updated"), "success", 1800), window?.dispatchEvent?.(new CustomEvent("mjr:reload-grid", { detail: { reason: "workflow-info" } })), a()) : e(i?.error || R("toast.workflowSaveFailed", "Failed to save workflow."), "error"); } - return (e, t) => (W(), rr(Or, { to: "body" }, [Q(Bi).open ? (W(), X("div", { + return (e, t) => (J(), rr(kr, { to: "body" }, [Z(Bi).open ? (J(), X("div", { key: 0, class: "mjr-workflow-picker-backdrop", onClick: fr(a, ["self"]) }, [U("section", bx, [ - U("header", xx, [U("div", null, [U("div", Sx, Z(Q(R)("ctx.editWorkflowInfo", "Edit infos")), 1), U("div", Cx, Z(i.value), 1)]), U("button", { + U("header", xx, [U("div", null, [U("div", Sx, Y(Z(R)("ctx.editWorkflowInfo", "Edit infos")), 1), U("div", Cx, Y(i.value), 1)]), U("button", { type: "button", class: "mjr-workflow-picker-close", onClick: a }, [...t[5] ||= [U("i", { class: "pi pi-times" }, null, -1)]])]), U("div", wx, [ - U("label", null, [t[6] ||= U("span", null, "Task", -1), gr(U("input", { + U("label", null, [t[6] ||= U("span", null, "Task", -1), tr(U("input", { "onUpdate:modelValue": t[0] ||= (e) => n.task = e, type: "text", placeholder: "I2V, I2I, T2V, Image Edit..." - }, null, 512), [[Ar, n.task]])]), - U("label", null, [t[7] ||= U("span", null, "Model family", -1), gr(U("input", { + }, null, 512), [[jr, n.task]])]), + U("label", null, [t[7] ||= U("span", null, "Model family", -1), tr(U("input", { "onUpdate:modelValue": t[1] ||= (e) => n.model_family = e, type: "text", placeholder: "Flux, Qwen, Wan..." - }, null, 512), [[Ar, n.model_family]])]), - U("label", null, [t[8] ||= U("span", null, "Provider", -1), gr(U("input", { + }, null, 512), [[jr, n.model_family]])]), + U("label", null, [t[8] ||= U("span", null, "Provider", -1), tr(U("input", { "onUpdate:modelValue": t[2] ||= (e) => n.provider = e, type: "text", placeholder: "Google, ByteDance, local..." - }, null, 512), [[Ar, n.provider]])]), - U("label", null, [t[10] ||= U("span", null, "Runs on", -1), gr(U("select", { "onUpdate:modelValue": t[3] ||= (e) => n.runs_on = e }, [...t[9] ||= [ + }, null, 512), [[jr, n.provider]])]), + U("label", null, [t[10] ||= U("span", null, "Runs on", -1), tr(U("select", { "onUpdate:modelValue": t[3] ||= (e) => n.runs_on = e }, [...t[9] ||= [ U("option", { value: "" }, "Auto", -1), U("option", { value: "local" }, "local", -1), U("option", { value: "api" }, "api", -1), U("option", { value: "cloud" }, "cloud", -1) - ]], 512), [[Dr, n.runs_on]])]), - U("label", Tx, [t[11] ||= U("span", null, "Notes", -1), gr(U("textarea", { + ]], 512), [[Or, n.runs_on]])]), + U("label", Tx, [t[11] ||= U("span", null, "Notes", -1), tr(U("textarea", { "onUpdate:modelValue": t[4] ||= (e) => n.notes = e, rows: "5", placeholder: "Notes displayed on workflow hover" - }, null, 512), [[Ar, n.notes]])]) + }, null, 512), [[jr, n.notes]])]) ]), U("footer", Ex, [U("button", { type: "button", class: "mjr-workflow-picker-secondary", onClick: a - }, Z(Q(R)("btn.cancel", "Cancel")), 1), U("button", { + }, Y(Z(R)("btn.cancel", "Cancel")), 1), U("button", { type: "button", class: "mjr-workflow-picker-primary", onClick: o - }, Z(Q(R)("btn.apply", "Apply")), 1)]) + }, Y(Z(R)("btn.apply", "Apply")), 1)]) ])])) : G("", !0)])); } }), Ox = { class: "mjr-workflow-picker-header" }, kx = { class: "mjr-workflow-picker-title" }, Ax = { @@ -22852,10 +22852,10 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr }, Wx = ["onClick"], Gx = { class: "mjr-workflow-picker-thumb" }, Kx = ["src", "alt"], qx = { key: 1, class: "pi pi-sitemap" -}, Jx = { class: "mjr-workflow-picker-card-info" }, Yx = ["disabled"], Xx = { class: "mjr-workflow-picker-card-info" }, Zx = { class: "mjr-workflow-picker-footer" }, Qx = ["disabled"], $x = 120, eS = /* @__PURE__ */ lr({ +}, Jx = { class: "mjr-workflow-picker-card-info" }, Yx = ["disabled"], Xx = { class: "mjr-workflow-picker-card-info" }, Zx = { class: "mjr-workflow-picker-footer" }, Qx = ["disabled"], $x = 120, eS = /* @__PURE__ */ ur({ __name: "WorkflowPickerDialog", setup(e) { - let t = J(""), n = J(!1), r = J(!1), i = J(""), a = J([]), s = J(""), c = J(0), l = J(!1), u = 0, d = K(() => bn.sourceAsset || null), f = K(() => bn.workflow || null), p = K(() => String(bn.mode || "") === "asset"), m = K(() => String(d.value?.filename || d.value?.display_name || f.value?.display_name || f.value?.filename || d.value?.filepath || f.value?.filepath || "")), h = K(() => x("task")), g = K(() => x("model_family")), _ = K(() => x("runs_on")), v = J(""), y = J(""), b = J(""); + let t = Q(""), n = Q(!1), r = Q(!1), i = Q(""), a = Q([]), s = Q(""), c = Q(0), l = Q(!1), u = 0, d = q(() => bn.sourceAsset || null), f = q(() => bn.workflow || null), p = q(() => String(bn.mode || "") === "asset"), m = q(() => String(d.value?.filename || d.value?.display_name || f.value?.display_name || f.value?.filename || d.value?.filepath || f.value?.filepath || "")), h = q(() => x("task")), g = q(() => x("model_family")), _ = q(() => x("runs_on")), v = Q(""), y = Q(""), b = Q(""); function x(e) { let t = /* @__PURE__ */ new Set(); for (let n of a.value || []) { @@ -22864,7 +22864,7 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr } return Array.from(t).sort((e, t) => e.localeCompare(t)); } - let S = K(() => { + let S = q(() => { let e = t.value.trim().toLowerCase(); return (a.value || []).filter((t) => !p.value && (v.value && String(t?.task || "") !== v.value || y.value && String(t?.model_family || "") !== y.value || b.value && String(t?.runs_on || "") !== b.value) ? !1 : !e || [ t?.display_name, @@ -22877,7 +22877,7 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr t?.kind, t?.filepath ].join(" ").toLowerCase().includes(e)); - }), C = K(() => (a.value || []).find((e) => String(e?.filepath || "") === s.value) || null); + }), C = q(() => (a.value || []).find((e) => String(e?.filepath || "") === s.value) || null); function w(e) { return String(e?.display_name || e?.name || e?.filename || "Workflow"); } @@ -22936,7 +22936,7 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr function M(e) { e.key === "Escape" && (e.preventDefault(), j()); } - return wr(() => bn.open, (e) => { + return hr(() => bn.open, (e) => { if (e) { s.value = "", c.value = 0, l.value = !1, t.value = "", v.value = "", y.value = "", b.value = "", O(); try { @@ -22945,92 +22945,92 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr } else try { window.removeEventListener("keydown", M); } catch {} - }), jr(() => { + }), mr(() => { try { window.removeEventListener("keydown", M); } catch {} - }), (e, a) => (W(), rr(Or, { to: "body" }, [Q(bn).open ? (W(), X("div", { + }), (e, a) => (J(), rr(kr, { to: "body" }, [Z(bn).open ? (J(), X("div", { key: 0, class: "mjr-workflow-picker-backdrop", onMousedown: fr(j, ["self"]) }, [U("section", { - class: yr(["mjr-workflow-picker-dialog", { "is-asset-mode": p.value }]), + class: wr(["mjr-workflow-picker-dialog", { "is-asset-mode": p.value }]), role: "dialog", "aria-modal": "true" }, [ - U("header", Ox, [U("div", kx, [a[4] ||= U("i", { class: "pi pi-sitemap" }, null, -1), U("span", null, Z(Q(bn).title), 1)]), U("button", { + U("header", Ox, [U("div", kx, [a[4] ||= U("i", { class: "pi pi-sitemap" }, null, -1), U("span", null, Y(Z(bn).title), 1)]), U("button", { class: "mjr-workflow-picker-icon-btn", type: "button", onClick: j }, [...a[5] ||= [U("i", { class: "pi pi-times" }, null, -1)]])]), - m.value ? (W(), X("div", Ax, [U("span", null, Z(p.value ? Q(R)("tab.workflow", "Workflow") : Q(R)("dialog.workflowThumbnailSource", "Source")), 1), U("strong", null, Z(m.value), 1)])) : G("", !0), + m.value ? (J(), X("div", Ax, [U("span", null, Y(p.value ? Z(R)("tab.workflow", "Workflow") : Z(R)("dialog.workflowThumbnailSource", "Source")), 1), U("strong", null, Y(m.value), 1)])) : G("", !0), U("div", jx, [ - U("label", Mx, [a[6] ||= U("i", { class: "pi pi-search" }, null, -1), gr(U("input", { + U("label", Mx, [a[6] ||= U("i", { class: "pi pi-search" }, null, -1), tr(U("input", { "onUpdate:modelValue": a[0] ||= (e) => t.value = e, type: "search", - placeholder: Q(R)("search.workflows", "Search workflows...") - }, null, 8, Nx), [[Ar, t.value]])]), - p.value ? G("", !0) : gr((W(), X("select", { + placeholder: Z(R)("search.workflows", "Search workflows...") + }, null, 8, Nx), [[jr, t.value]])]), + p.value ? G("", !0) : tr((J(), X("select", { key: 0, "onUpdate:modelValue": a[1] ||= (e) => v.value = e - }, [U("option", Px, Z(Q(R)("filter.task", "Task")), 1), (W(!0), X(H, null, hr(h.value, (e) => (W(), X("option", { + }, [U("option", Px, Y(Z(R)("filter.task", "Task")), 1), (J(!0), X(H, null, cr(h.value, (e) => (J(), X("option", { key: e, value: e - }, Z(e), 9, Fx))), 128))], 512)), [[Dr, v.value]]), - p.value ? G("", !0) : gr((W(), X("select", { + }, Y(e), 9, Fx))), 128))], 512)), [[Or, v.value]]), + p.value ? G("", !0) : tr((J(), X("select", { key: 1, "onUpdate:modelValue": a[2] ||= (e) => y.value = e - }, [U("option", Ix, Z(Q(R)("filter.model", "Model")), 1), (W(!0), X(H, null, hr(g.value, (e) => (W(), X("option", { + }, [U("option", Ix, Y(Z(R)("filter.model", "Model")), 1), (J(!0), X(H, null, cr(g.value, (e) => (J(), X("option", { key: e, value: e - }, Z(e), 9, Lx))), 128))], 512)), [[Dr, y.value]]), - p.value ? G("", !0) : gr((W(), X("select", { + }, Y(e), 9, Lx))), 128))], 512)), [[Or, y.value]]), + p.value ? G("", !0) : tr((J(), X("select", { key: 2, "onUpdate:modelValue": a[3] ||= (e) => b.value = e - }, [U("option", Rx, Z(Q(R)("filter.runsOn", "Runs on")), 1), (W(!0), X(H, null, hr(_.value, (e) => (W(), X("option", { + }, [U("option", Rx, Y(Z(R)("filter.runsOn", "Runs on")), 1), (J(!0), X(H, null, cr(_.value, (e) => (J(), X("option", { key: e, value: e - }, Z(e), 9, zx))), 128))], 512)), [[Dr, b.value]]) + }, Y(e), 9, zx))), 128))], 512)), [[Or, b.value]]) ]), - U("div", Bx, [n.value ? (W(), X("div", Vx, Z(Q(R)("status.loading", "Loading...")), 1)) : i.value ? (W(), X("div", Hx, Z(i.value), 1)) : S.value.length ? (W(), X(H, { key: 3 }, [(W(!0), X(H, null, hr(S.value, (e) => (W(), X("button", { + U("div", Bx, [n.value ? (J(), X("div", Vx, Y(Z(R)("status.loading", "Loading...")), 1)) : i.value ? (J(), X("div", Hx, Y(i.value), 1)) : S.value.length ? (J(), X(H, { key: 3 }, [(J(!0), X(H, null, cr(S.value, (e) => (J(), X("button", { key: e.filepath, type: "button", - class: yr(["mjr-workflow-picker-card", { "is-selected": s.value === String(e.filepath || "") }]), + class: wr(["mjr-workflow-picker-card", { "is-selected": s.value === String(e.filepath || "") }]), onClick: (t) => s.value = String(e.filepath || ""), onDblclick: A - }, [U("div", Gx, [E(e) ? (W(), X("img", { + }, [U("div", Gx, [E(e) ? (J(), X("img", { key: 0, src: E(e), alt: w(e), loading: "lazy" - }, null, 8, Kx)) : (W(), X("i", qx))]), U("div", Jx, [ - U("strong", null, Z(w(e)), 1), - U("span", null, Z(T(e)), 1), - U("small", null, Z(e.filename), 1) - ])], 42, Wx))), 128)), !p.value && l.value ? (W(), X("button", { + }, null, 8, Kx)) : (J(), X("i", qx))]), U("div", Jx, [ + U("strong", null, Y(w(e)), 1), + U("span", null, Y(T(e)), 1), + U("small", null, Y(e.filename), 1) + ])], 42, Wx))), 128)), !p.value && l.value ? (J(), X("button", { key: 0, type: "button", class: "mjr-workflow-picker-card mjr-workflow-picker-load-more", disabled: r.value, onClick: k }, [a[7] ||= U("div", { class: "mjr-workflow-picker-thumb" }, [U("i", { class: "pi pi-angle-down" })], -1), U("div", Xx, [ - U("strong", null, Z(r.value ? Q(R)("status.loading", "Loading...") : Q(R)("action.loadMore", "Load more")), 1), - U("span", null, Z(Q(R)("tab.workflow", "Workflow")), 1), - U("small", null, Z(c.value) + " loaded", 1) - ])], 8, Yx)) : G("", !0)], 64)) : (W(), X("div", Ux, Z(Q(R)("toast.noWorkflowsFound", "No workflows found.")), 1))]), + U("strong", null, Y(r.value ? Z(R)("status.loading", "Loading...") : Z(R)("action.loadMore", "Load more")), 1), + U("span", null, Y(Z(R)("tab.workflow", "Workflow")), 1), + U("small", null, Y(c.value) + " loaded", 1) + ])], 8, Yx)) : G("", !0)], 64)) : (J(), X("div", Ux, Y(Z(R)("toast.noWorkflowsFound", "No workflows found.")), 1))]), U("footer", Zx, [U("button", { type: "button", class: "mjr-workflow-picker-btn", onClick: j - }, Z(Q(R)("action.cancel", "Cancel")), 1), U("button", { + }, Y(Z(R)("action.cancel", "Cancel")), 1), U("button", { type: "button", class: "mjr-workflow-picker-btn is-primary", disabled: !C.value, onClick: A - }, Z(Q(R)("action.apply", "Apply")), 9, Qx)]) + }, Y(Z(R)("action.apply", "Apply")), 9, Qx)]) ], 2)], 32)) : G("", !0)])); } -}), tS = { class: "mjr-workflow-picker-dialog mjr-workflow-info-dialog" }, nS = { class: "mjr-workflow-picker-header" }, rS = { class: "mjr-workflow-picker-title" }, iS = { class: "mjr-workflow-picker-subtitle" }, aS = { class: "mjr-workflow-info-form" }, oS = { class: "is-wide" }, sS = { class: "is-wide" }, cS = { class: "mjr-workflow-picker-footer" }, lS = /* @__PURE__ */ lr({ +}), tS = { class: "mjr-workflow-picker-dialog mjr-workflow-info-dialog" }, nS = { class: "mjr-workflow-picker-header" }, rS = { class: "mjr-workflow-picker-title" }, iS = { class: "mjr-workflow-picker-subtitle" }, aS = { class: "mjr-workflow-info-form" }, oS = { class: "is-wide" }, sS = { class: "is-wide" }, cS = { class: "mjr-workflow-picker-footer" }, lS = /* @__PURE__ */ ur({ __name: "WorkflowSaveInfoDialog", setup(e) { let t = Tr({ @@ -23040,8 +23040,8 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr provider: "", runs_on: "", notes: "" - }), n = K(() => k_.initial || {}), r = K(() => R("dialog.saveWorkflowWithInfo", "Save workflow")), i = K(() => R("dialog.workflowInfoAutoFallback", "Leave fields empty to use automatic workflow detection.")); - wr(() => k_.open, (e) => { + }), n = q(() => k_.initial || {}), r = q(() => R("dialog.saveWorkflowWithInfo", "Save workflow")), i = q(() => R("dialog.workflowInfoAutoFallback", "Leave fields empty to use automatic workflow detection.")); + hr(() => k_.open, (e) => { if (!e) return; let r = n.value || {}; t.name = String(r.name || r.workflow?.name || r.workflow?.title || "workflow").trim(), t.task = String(r.task || ""), t.model_family = String(r.model_family || ""), t.provider = String(r.provider || ""), t.runs_on = String(r.runs_on || ""), t.notes = String(r.notes || ""); @@ -23061,47 +23061,47 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr }); } return (e, n) => { - let s = or("MButton"), c = or("MInputText"), l = or("MSelect"), u = or("MTextarea"); - return W(), rr(Or, { to: "body" }, [Q(k_).open ? (W(), X("div", { + let s = sr("MButton"), c = sr("MInputText"), l = sr("MSelect"), u = sr("MTextarea"); + return J(), rr(kr, { to: "body" }, [Z(k_).open ? (J(), X("div", { key: 0, class: "mjr-workflow-picker-backdrop", onClick: fr(a, ["self"]) }, [U("section", tS, [ - U("header", nS, [U("div", null, [U("div", rS, Z(r.value), 1), U("div", iS, Z(i.value), 1)]), Y(s, { + U("header", nS, [U("div", null, [U("div", rS, Y(r.value), 1), U("div", iS, Y(i.value), 1)]), W(s, { type: "button", class: "mjr-workflow-picker-close", onClick: a }, { - default: q(() => [...n[6] ||= [U("i", { class: "pi pi-times" }, null, -1)]]), + default: K(() => [...n[6] ||= [U("i", { class: "pi pi-times" }, null, -1)]]), _: 1 })]), U("div", aS, [ - U("label", oS, [U("span", null, Z(Q(R)("dialog.workflowSaveName", "Workflow name")), 1), Y(c, { + U("label", oS, [U("span", null, Y(Z(R)("dialog.workflowSaveName", "Workflow name")), 1), W(c, { modelValue: t.name, "onUpdate:modelValue": n[0] ||= (e) => t.name = e, type: "text", placeholder: "workflow", - onKeydown: kr(fr(o, ["prevent"]), ["enter"]) + onKeydown: Ar(fr(o, ["prevent"]), ["enter"]) }, null, 8, ["modelValue", "onKeydown"])]), - U("label", null, [n[7] ||= U("span", null, "Task", -1), Y(c, { + U("label", null, [n[7] ||= U("span", null, "Task", -1), W(c, { modelValue: t.task, "onUpdate:modelValue": n[1] ||= (e) => t.task = e, type: "text", placeholder: "Auto" }, null, 8, ["modelValue"])]), - U("label", null, [n[8] ||= U("span", null, "Model family", -1), Y(c, { + U("label", null, [n[8] ||= U("span", null, "Model family", -1), W(c, { modelValue: t.model_family, "onUpdate:modelValue": n[2] ||= (e) => t.model_family = e, type: "text", placeholder: "Auto" }, null, 8, ["modelValue"])]), - U("label", null, [n[9] ||= U("span", null, "Provider", -1), Y(c, { + U("label", null, [n[9] ||= U("span", null, "Provider", -1), W(c, { modelValue: t.provider, "onUpdate:modelValue": n[3] ||= (e) => t.provider = e, type: "text", placeholder: "Auto" }, null, 8, ["modelValue"])]), - U("label", null, [n[10] ||= U("span", null, "Runs on", -1), Y(l, { + U("label", null, [n[10] ||= U("span", null, "Runs on", -1), W(l, { modelValue: t.runs_on, "onUpdate:modelValue": n[4] ||= (e) => t.runs_on = e, options: [ @@ -23126,46 +23126,46 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr "option-value": "value", placeholder: "Auto" }, null, 8, ["modelValue"])]), - U("label", sS, [n[11] ||= U("span", null, "Notes", -1), Y(u, { + U("label", sS, [n[11] ||= U("span", null, "Notes", -1), W(u, { modelValue: t.notes, "onUpdate:modelValue": n[5] ||= (e) => t.notes = e, rows: "5", placeholder: "Notes displayed on workflow hover" }, null, 8, ["modelValue"])]) ]), - U("footer", cS, [Y(s, { + U("footer", cS, [W(s, { type: "button", class: "mjr-workflow-picker-secondary", onClick: a }, { - default: q(() => [tr(Z(Q(R)("btn.cancel", "Cancel")), 1)]), + default: K(() => [Sr(Y(Z(R)("btn.cancel", "Cancel")), 1)]), _: 1 - }), Y(s, { + }), W(s, { type: "button", class: "mjr-workflow-picker-primary", disabled: !String(t.name || "").trim(), onClick: o }, { - default: q(() => [tr(Z(Q(R)("btn.save", "Save")), 1)]), + default: K(() => [Sr(Y(Z(R)("btn.save", "Save")), 1)]), _: 1 }, 8, ["disabled"])]) ])])) : G("", !0)]); }; } -}), uS = /* @__PURE__ */ lr({ +}), uS = /* @__PURE__ */ ur({ __name: "ContextMenuPortal", setup(e) { - let t = J(""), n = K(() => gn(t.value)); - return nr(() => { + let t = Q(""), n = q(() => gn(t.value)); + return or(() => { t.value = Yt(); - }), mr(() => { + }), pr(() => { rn(t.value), t.value = ""; - }), (e, t) => n.value ? (W(), X(H, { key: 0 }, [ - Y(yx), - Y(ux), - Y(eS), - Y(Dx), - Y(lS) + }), (e, t) => n.value ? (J(), X(H, { key: 0 }, [ + W(yx), + W(ux), + W(eS), + W(Dx), + W(lS) ], 64)) : G("", !0); } }), dS = { @@ -23200,7 +23200,7 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr } }, gS = { style: { "font-size": "0.8em", opacity: "0.6" -} }, _S = /* @__PURE__ */ lr({ +} }, _S = /* @__PURE__ */ ur({ __name: "AssetSidebarContent", props: { asset: {}, @@ -23209,10 +23209,10 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr }, emits: ["close"], setup(t, { emit: r }) { - let i = t, a = r, o = K(() => String(i.asset?.kind || "").toLowerCase() === "folder"), s = K(() => { + let i = t, a = r, o = q(() => String(i.asset?.kind || "").toLowerCase() === "folder"), s = q(() => { let e = String(i.asset?.kind || "").toLowerCase(), t = String(i.asset?.source || i.asset?.scope || "").toLowerCase(), n = String(i.asset?.filepath || i.asset?.path || "").toLowerCase(); return e === "workflow" || t === "workflow" || n.endsWith(".json"); - }), c = K(() => Number(i.asset?.rating) || 0), l = K(() => i.asset?.tags || []), u = K(() => { + }), c = q(() => Number(i.asset?.rating) || 0), l = q(() => i.asset?.tags || []), u = q(() => { try { return !!(Bn()?.sidebar?.showPreviewThumb ?? !0); } catch { @@ -23227,7 +23227,7 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr } else a("close"); } - let f = J(!1), p = K(() => String(i.asset?.filepath || i.asset?.path || i.asset?.file_info?.filepath || "").trim()); + let f = Q(!1), p = q(() => String(i.asset?.filepath || i.asset?.path || i.asset?.file_info?.filepath || "").trim()); async function m() { if (!f.value && p.value) { f.value = !0; @@ -23251,36 +23251,36 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr } } return (e, n) => { - let r = or("MButton"); - return W(), X(H, null, [ - Y(Bb, { + let r = sr("MButton"); + return J(), X(H, null, [ + W(Bb, { asset: t.asset, onClose: d }, null, 8, ["asset"]), - U("div", dS, [o.value ? (W(), rr(tx, { + U("div", dS, [o.value ? (J(), rr(tx, { key: 0, asset: t.asset - }, null, 8, ["asset"])) : (W(), X(H, { key: 1 }, [s.value ? G("", !0) : (W(), X(H, { key: 0 }, [ - Y(Yb, { + }, null, 8, ["asset"])) : (J(), X(H, { key: 1 }, [s.value ? G("", !0) : (J(), X(H, { key: 0 }, [ + W(Yb, { asset: t.asset, "show-preview-thumb": u.value }, null, 8, ["asset", "show-preview-thumb"]), - U("div", fS, [U("div", pS, [U("span", mS, Z(Q(R)("sidebar.rating", "Rating")), 1), Y(Pr, { + U("div", fS, [U("div", pS, [U("span", mS, Y(Z(R)("sidebar.rating", "Rating")), 1), W(Pr, { asset: t.asset, "model-value": c.value, size: 60 - }, null, 8, ["asset", "model-value"])]), U("div", hS, [U("span", gS, Z(Q(R)("sidebar.tags", "Tags")), 1), Y(Fr, { + }, null, 8, ["asset", "model-value"])]), U("div", hS, [U("span", gS, Y(Z(R)("sidebar.tags", "Tags")), 1), W(Fr, { asset: t.asset, "model-value": l.value }, null, 8, ["asset", "model-value"])])]), - Y(On, { asset: t.asset }, null, 8, ["asset"]), - p.value ? (W(), rr(r, { + W(On, { asset: t.asset }, null, 8, ["asset"]), + p.value ? (J(), rr(r, { key: 0, type: "button", class: "mjr-btn mjr-sidebar-collect-btn", severity: "secondary", disabled: f.value, - title: Q(R)("sidebar.collectFilesTooltip", "Create a ZIP next to this asset with the workflow JSON, its media inputs and a manifest"), + title: Z(R)("sidebar.collectFilesTooltip", "Create a ZIP next to this asset with the workflow JSON, its media inputs and a manifest"), style: { display: "flex", "align-items": "center", @@ -23290,12 +23290,12 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr }, onClick: m }, { - default: q(() => [U("i", { class: yr(f.value ? "pi pi-spin pi-spinner" : "pi pi-box") }, null, 2), U("span", null, Z(f.value ? Q(R)("sidebar.collectingFiles", "Collecting...") : Q(R)("sidebar.collectFiles", "Collect files")), 1)]), + default: K(() => [U("i", { class: wr(f.value ? "pi pi-spin pi-spinner" : "pi pi-box") }, null, 2), U("span", null, Y(f.value ? Z(R)("sidebar.collectingFiles", "Collecting...") : Z(R)("sidebar.collectFiles", "Collect files")), 1)]), _: 1 }, 8, ["disabled", "title"])) : G("", !0), - Y(Nn, { asset: t.asset }, null, 8, ["asset"]) - ], 64)), Y(zn, { asset: t.asset }, null, 8, ["asset"])], 64))]), - Y(uS) + W(Nn, { asset: t.asset }, null, 8, ["asset"]) + ], 64)), W(zn, { asset: t.asset }, null, 8, ["asset"])], 64))]), + W(uS) ], 64); }; } @@ -23312,11 +23312,11 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr "font-size": "0.85em", "text-align": "center" } -}, yS = /* @__PURE__ */ lr({ +}, yS = /* @__PURE__ */ ur({ __name: "SidebarSection", setup(e, { expose: t }) { - let n = J(null), { activeAsset: r, onUpdateCallback: i } = Xm(); - return nr(() => { + let n = Q(null), { activeAsset: r, onUpdateCallback: i } = Xm(); + return or(() => { let e = n.value; if (!e) return; 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", e._requestSeq = 0, e._currentAsset = null, e._currentFullAsset = null, e._ratingTagsSection = null; @@ -23367,7 +23367,7 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr console.debug?.(e); } } - }), mr(() => { + }), pr(() => { try { n.value?.dispose?.(); } catch {} @@ -23376,7 +23376,7 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr } catch {} }), t({ get sidebar() { return n.value; - } }), (e, t) => (W(), X("div", { + } }), (e, t) => (J(), X("div", { ref_key: "sidebarEl", ref: n, class: "mjr-inline-sidebar", @@ -23388,22 +23388,22 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr transition: "width 140ms ease,max-width 140ms ease,flex-basis 140ms ease,border-color 140ms ease", contain: "layout paint style" } - }, [Q(r) ? (W(), rr(_S, { + }, [Z(r) ? (J(), rr(_S, { key: 0, - asset: Q(r), - "on-update": Q(i), + asset: Z(r), + "on-update": Z(i), sidebar: n.value }, null, 8, [ "asset", "on-update", "sidebar" - ])) : (W(), X("div", vS, Z(Q(R)("sidebar.placeholderSelectAsset", "Select an asset to view details")), 1))], 512)); + ])) : (J(), X("div", vS, Y(Z(R)("sidebar.placeholderSelectAsset", "Select an asset to view details")), 1))], 512)); } -}), bS = /* @__PURE__ */ lr({ +}), bS = /* @__PURE__ */ ur({ __name: "App", setup(e) { - let t = J(null), n = J(null), r = J(null), i = J(null), a = J(null), o = J(null), s = null; - return nr(async () => { + let t = Q(null), n = Q(null), r = Q(null), i = Q(null), a = Q(null), o = Q(null), s = null; + return or(async () => { if (!t.value) return; let e = {}; n.value && (e.statusSection = n.value.statusSection, e.statusDot = n.value.statusDot, e.statusText = n.value.statusText, e.capabilitiesSection = n.value.capabilitiesSection), r.value && (e.headerSection = r.value), i.value && (e.summaryBar = i.value.summaryBar, e.updateSummaryBar = i.value.updateSummaryBar, e.folderBreadcrumb = i.value.folderBreadcrumb, e.folderBreadcrumbController = i.value), a.value && (e.browseSection = a.value.browseSection, e.gridWrapper = a.value.gridWrapper, e.gridContainer = a.value.gridContainer, e.onGridContainerReady = (...e) => a.value?.onGridContainerReady?.(...e), e.bindGridHostState = (...e) => a.value?.bindGridHostState?.(...e), e.restoreGridUiState = (...e) => a.value?.restoreGridUiState?.(...e), e.initAssetsQueryController = (...e) => a.value?.initAssetsQueryController?.(...e), e.loadAssets = (e, t = "*", n = {}) => a.value?.loadAssets?.(t, n), e.loadAssetsFromList = (e, t = [], n = {}) => a.value?.loadAssetsFromList?.(t, n), e.prepareGridForScopeSwitch = (e) => a.value?.prepareGridForScopeSwitch?.(), e.refreshGrid = (e) => a.value?.refreshGrid?.(), e.captureAnchor = (e) => a.value?.captureAnchor?.(), e.restoreAnchor = (e, t) => a.value?.restoreAnchor?.(t), e.hydrateGridFromSnapshot = (e, t = {}, n = {}) => a.value?.hydrateGridFromSnapshot?.(t, n), e.upsertAsset = (e, t) => a.value?.upsertAsset?.(t), e.removeAssets = (e, t = [], n = {}) => a.value?.removeAssets?.(t, n), e.disposeGrid = (e) => a.value?.disposeGrid?.()), o.value && (e.sidebar = o.value.sidebar); @@ -23418,33 +23418,33 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr try { yh().validatePersistedCustomRoot?.(); } catch {} - }), mr(() => { + }), pr(() => { try { s?.dispose?.(); } catch {} s = null; - }), (e, s) => (W(), X(H, null, [ - Y(O_, { + }), (e, s) => (J(), X(H, null, [ + W(O_, { ref_key: "statusSectionRef", ref: n }, null, 512), - Y(sb, { + W(sb, { ref_key: "headerSectionRef", ref: r }, null, 512), - Y(Tb, { + W(Tb, { ref_key: "summaryBarSectionRef", ref: i }, null, 512), - Y(Lb, { + W(Lb, { ref_key: "assetsGridRef", ref: a }, null, 512), - Y(yS, { + W(yS, { ref_key: "sidebarSectionRef", ref: o }, null, 512), - Y(uS), + W(uS), U("div", { ref_key: "containerRef", ref: t, @@ -23458,10 +23458,10 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr }, null, 512) ], 64)); } -}), xS = /* @__PURE__ */ lr({ +}), xS = /* @__PURE__ */ ur({ __name: "GeneratedFeedApp", setup(e) { - let t = J(null), n = null; + let t = Q(null), n = null; function r(e) { if (!e) return; let t = [ @@ -23478,18 +23478,18 @@ var Ub = { class: "mjr-sidebar-preview" }, Wb = ["src"], Gb = ["src"], Kb = ["sr } } } - return nr(() => { + return or(() => { if (t.value) try { r(t.value), n = of(t.value); } catch (e) { console.warn("[Majoor] GeneratedFeedApp.vue: createGeneratedFeedHost failed", e); } - }), mr(() => { + }), pr(() => { try { sf(n); } catch {} n = null; - }), (e, n) => (W(), X(H, null, [Y(uS), U("div", { + }), (e, n) => (J(), X(H, null, [W(uS), U("div", { ref_key: "containerRef", ref: t, class: "mjr-vue-feed-root", @@ -23779,7 +23779,7 @@ async function wC(e) { try { let t = await xC(e); if (t.length) { - let { floatingViewerManager: e } = await import("./chunks/floatingViewerManager-CKeu6wKp.js").then((e) => e.n); + let { floatingViewerManager: e } = await import("./chunks/floatingViewerManager-CLgIT9uN.js").then((e) => e.n); if (await e.openAssets({ assets: t, index: 0 @@ -24249,7 +24249,7 @@ function ZC({ cleanupEntryRuntimeFn: e = YC, teardownLiveStreamTracker: t, teard // ui/entry.ts var QC = null, $C = null, ew = null; function tw() { - return ew ||= import("./chunks/floatingViewerManager-CKeu6wKp.js").then((e) => e.n), ew; + return ew ||= import("./chunks/floatingViewerManager-CLgIT9uN.js").then((e) => e.n), ew; } function nw() { ew && ew.then((e) => e?.teardownFloatingViewerManager?.()).catch((e) => console.debug?.("[Majoor] MFV teardown skipped", e)); @@ -24369,7 +24369,7 @@ function xw(e = 1200) { }, Math.max(250, Number(e) || 0)); } function Sw(e) { - import("./chunks/LiveStreamTracker-qLlvARw8.js").then((t) => { + import("./chunks/LiveStreamTracker-VoGYaNV3.js").then((t) => { QC = t; try { t.initLiveStreamTracker(e); diff --git a/docs/VIEWER_FEATURE_TUTORIAL.md b/docs/VIEWER_FEATURE_TUTORIAL.md index 749deb05..0f2383ba 100644 --- a/docs/VIEWER_FEATURE_TUTORIAL.md +++ b/docs/VIEWER_FEATURE_TUTORIAL.md @@ -15,10 +15,31 @@ Opening an asset (double-click, Enter, context menu) now shows the **Studio view - **Header**: previous / next with `n / N`, file name, resolution · format · duration · size, and actions (zoom, fit, 1:1, transparency checkerboard, compare, download, classic viewer, info panel, fullscreen, close). - **Image stage**: wheel zooms around the cursor, drag to pan, double-click toggles fit ↔ 100 %, checkerboard to inspect alpha. Above 200 % pixels stay sharp (nearest-neighbour). -- **Player** (video / audio): big play button, scrubber with buffered range and hover time + frame, frame counter `f n / N · fps`, frame-by-frame stepping, A-B loop, loop, speed 0.25×–2×, volume, fullscreen, **save current frame as PNG**. Controls auto-hide while playing. Media is released when you move on. +- **Player** (video / audio): big play button, scrubber with buffered range and hover time + frame, frame counter `f n / N · fps`, frame-by-frame stepping, A-B loop, loop, speed 0.25×–2×, volume, fullscreen, **save current frame as PNG**. Controls auto-hide while playing. Audio files show a live spectrum. Media is released when you move on. +- **3D models** (GLB, glTF, OBJ, STL, PLY, splats…): orbit with left drag, pan with right drag, zoom with the wheel. - **Inspector** (right, `Tab`): rating and tags on top, then tabs **Generation** (prompts, models, LoRAs, sampler, seed… — same data as the asset sidebar), **Workflow** (graph preview, load into ComfyUI) and **File**. - **Filmstrip**: thumbnails of the current list to jump anywhere. +#### Review tools (HUD rail) + +Images and videos get a tool rail on the left of the stage. Each icon toggles a tool; tools with settings open a small panel next to the rail (`Esc` closes it). Colour tools run on the GPU, so they also work on playing video. + +| Tool | What it does | +| --- | --- | +| **Channels** | RGB, R, G, B, alpha or luma as greyscale | +| **Exposure / gamma** | ±5 EV and display gamma 0.1–3 (double-click a slider to reset) | +| **Zebra** (`Z`) | Stripes over highlights above the threshold (50–100 %) | +| **Scopes** (`S`) | RGB + luma histogram, luma waveform, or both — live on video | +| **Guides** (`G`) | Rule of thirds, golden ratio, centre cross, action / title safe areas | +| **Aspect mask** | Darkens outside 16:9, 9:16, 1:1, 4:3 or 2.39 (adjustable opacity) | +| **Pixel probe** (`P`) | Hex, RGB, luma and pixel coordinates under the cursor | +| **Loupe** (`L`) | Pixel-accurate magnifier; right-click the icon for zoom 2–32× and size | +| **Compare A/B** (`C`) | Wipe ↔, wipe ↕, side by side, difference, add, subtract (images), multiply, screen | +| **Copy** (`Ctrl+C`) | Copies the image or the current video frame to the clipboard as PNG | +| **Reset** (`R`) | Resets every tool | + +**Compare**: B is the next asset of the same kind in the list. In the compare panel, `‹ ›` picks another B, **Set B** (`B`) pins the current asset as B and moves on, **Swap** (`X`) exchanges A and B. Drag the wipe line (double-click it to centre it). Videos are kept in sync (play, pause, seek, speed, loops). Raise the exposure in *difference* mode to make subtle changes visible. Opening an A/B or side-by-side compare from the grid or the floating viewer lands here with that mode already on. + | Key | Action | | --- | --- | | `←` / `→` | Previous / next asset (`Home` / `End`: first / last) | @@ -30,12 +51,16 @@ Opening an asset (double-click, Enter, context menu) now shows the **Studio view | `M` | Mute | | `0`–`5` | Set rating | | `+` / `-`, `Alt+0` | Zoom in / out, fit | -| `C` | Compare with the next asset (classic A/B viewer) | +| `C` / `B` / `X` | Compare on/off / set current as B / swap A and B | +| `Z` / `S` / `G` | Zebra / cycle scopes / cycle guides | +| `P` / `L` | Pixel probe / loupe | +| `R` | Reset review tools | +| `Ctrl+C` | Copy image or frame | | `Tab` | Show / hide the inspector | | `F` | Fullscreen | -| `Esc` | Close | +| `Esc` | Close the open tool panel, then the viewer | -The **classic viewer** below is still there: it is used for A/B and side-by-side compare, 3D models, and its analysis tools (scopes, loupe, grading) are one click away with the sliders button. To use it for everything, enable *Settings → Majoor Assets Manager → Viewer → Use the classic viewer*. +The **classic viewer** below is still available (header sliders button, or *Settings → Majoor Assets Manager → Viewer → Use the classic viewer* to use it for everything). ### 1. Majoor Floating Viewer (MFV) — NEW! 🎉 diff --git a/ui/app/i18n.ts b/ui/app/i18n.ts index fd0cf60a..e1265299 100644 --- a/ui/app/i18n.ts +++ b/ui/app/i18n.ts @@ -1302,6 +1302,71 @@ const DICTIONARY: Record> = { "hotkey.delete": "Delete (Del)", "hotkey.viewer": "Open viewer (Enter)", "hotkey.escape": "Close (Esc)", + // --- Studio viewer (main viewer and review tools) --- + "viewer.studio.abLoop": "A-B loop (I / O, U to clear)", + "viewer.studio.actualSize": "Actual size", + "viewer.studio.aspect": "Aspect ratio mask", + "viewer.studio.channels": "Channels", + "viewer.studio.checker": "Transparency checkerboard", + "viewer.studio.classic": "Open in the classic viewer", + "viewer.studio.classicShort": "Classic viewer", + "viewer.studio.clearLoop": "Clear A-B loop", + "viewer.studio.close": "Close (Esc)", + "viewer.studio.compare": "Compare A/B (C)", + "viewer.studio.compareTool": "Compare A/B (C)", + "viewer.studio.copied": "Copied to clipboard", + "viewer.studio.copy": "Copy image / frame to clipboard", + "viewer.studio.copyFailed": "Could not copy this image", + "viewer.studio.download": "Download", + "viewer.studio.ev": "Exposure", + "viewer.studio.exportFrame": "Save this frame as PNG", + "viewer.studio.exposure": "Exposure / gamma", + "viewer.studio.filmstrip": "Filmstrip", + "viewer.studio.fit": "Fit", + "viewer.studio.frame": "Frame", + "viewer.studio.fullscreen": "Fullscreen (F)", + "viewer.studio.gamma": "Gamma", + "viewer.studio.grid": "Guides (G)", + "viewer.studio.histogram": "Histogram", + "viewer.studio.inspector": "Generation info (Tab)", + "viewer.studio.loop": "Loop", + "viewer.studio.loupe": "Loupe (L) - right-click for settings", + "viewer.studio.loupeTitle": "Loupe", + "viewer.studio.magnification": "Magnification", + "viewer.studio.mediaError": "This file cannot be played by the browser.", + "viewer.studio.mute": "Mute (M)", + "viewer.studio.next": "Next (→)", + "viewer.studio.nextB": "Next B", + "viewer.studio.nextFrame": "Next frame (.)", + "viewer.studio.opacity": "Opacity", + "viewer.studio.pinB": "Use the current asset as B (B)", + "viewer.studio.pinBShort": "Set B", + "viewer.studio.play": "Play", + "viewer.studio.playPause": "Play / pause (Space)", + "viewer.studio.prev": "Previous (←)", + "viewer.studio.prevB": "Previous B", + "viewer.studio.prevFrame": "Previous frame (,)", + "viewer.studio.probe": "Pixel probe (P)", + "viewer.studio.reset": "Reset", + "viewer.studio.resetTools": "Reset all tools (R)", + "viewer.studio.scopes": "Scopes (S)", + "viewer.studio.seek": "Seek", + "viewer.studio.size": "Size", + "viewer.studio.speed": "Speed ([ / ])", + "viewer.studio.swap": "Swap A and B (X)", + "viewer.studio.swapShort": "Swap", + "viewer.studio.tabFile": "File", + "viewer.studio.tabGeneration": "Generation", + "viewer.studio.tabWorkflow": "Workflow", + "viewer.studio.threshold": "Threshold", + "viewer.studio.title": "Viewer", + "viewer.studio.tools": "Review tools", + "viewer.studio.unsupported": "No preview for this file type.", + "viewer.studio.volume": "Volume", + "viewer.studio.waveform": "Waveform", + "viewer.studio.wipe": "Wipe", + "viewer.studio.zebra": "Zebra highlights (Z)", + "viewer.studio.zoomHint": "Wheel to zoom, double-click for fit / 100 %", }, "fr-FR": { @@ -1871,6 +1936,71 @@ const DICTIONARY: Record> = { "msg.newVersionDetail": "La version {latest} est disponible. Version installée : {current}.", "tooltip.starGithub": "Ouvrir GitHub et mettre une etoile", + // --- Studio viewer (viewer principal et outils de revue) --- + "viewer.studio.abLoop": "Boucle A-B (I / O, U pour effacer)", + "viewer.studio.actualSize": "Taille réelle", + "viewer.studio.aspect": "Masque de format", + "viewer.studio.channels": "Canaux", + "viewer.studio.checker": "Damier de transparence", + "viewer.studio.classic": "Ouvrir dans le viewer classique", + "viewer.studio.classicShort": "Viewer classique", + "viewer.studio.clearLoop": "Effacer la boucle A-B", + "viewer.studio.close": "Fermer (Échap)", + "viewer.studio.compare": "Comparer A/B (C)", + "viewer.studio.compareTool": "Comparer A/B (C)", + "viewer.studio.copied": "Copié dans le presse-papiers", + "viewer.studio.copy": "Copier l'image / la frame", + "viewer.studio.copyFailed": "Impossible de copier cette image", + "viewer.studio.download": "Télécharger", + "viewer.studio.ev": "Exposition", + "viewer.studio.exportFrame": "Enregistrer cette frame en PNG", + "viewer.studio.exposure": "Exposition / gamma", + "viewer.studio.filmstrip": "Pellicule", + "viewer.studio.fit": "Ajuster", + "viewer.studio.frame": "Frame", + "viewer.studio.fullscreen": "Plein écran (F)", + "viewer.studio.gamma": "Gamma", + "viewer.studio.grid": "Guides (G)", + "viewer.studio.histogram": "Histogramme", + "viewer.studio.inspector": "Infos de génération (Tab)", + "viewer.studio.loop": "Boucle", + "viewer.studio.loupe": "Loupe (L) - clic droit pour les réglages", + "viewer.studio.loupeTitle": "Loupe", + "viewer.studio.magnification": "Grossissement", + "viewer.studio.mediaError": "Ce fichier ne peut pas être lu par le navigateur.", + "viewer.studio.mute": "Muet (M)", + "viewer.studio.next": "Suivant (→)", + "viewer.studio.nextB": "B suivant", + "viewer.studio.nextFrame": "Frame suivante (.)", + "viewer.studio.opacity": "Opacité", + "viewer.studio.pinB": "Utiliser l'asset courant comme B (B)", + "viewer.studio.pinBShort": "Définir B", + "viewer.studio.play": "Lecture", + "viewer.studio.playPause": "Lecture / pause (Espace)", + "viewer.studio.prev": "Précédent (←)", + "viewer.studio.prevB": "B précédent", + "viewer.studio.prevFrame": "Frame précédente (,)", + "viewer.studio.probe": "Pipette (P)", + "viewer.studio.reset": "Réinitialiser", + "viewer.studio.resetTools": "Réinitialiser les outils (R)", + "viewer.studio.scopes": "Scopes (S)", + "viewer.studio.seek": "Position", + "viewer.studio.size": "Taille", + "viewer.studio.speed": "Vitesse ([ / ])", + "viewer.studio.swap": "Inverser A et B (X)", + "viewer.studio.swapShort": "Inverser", + "viewer.studio.tabFile": "Fichier", + "viewer.studio.tabGeneration": "Génération", + "viewer.studio.tabWorkflow": "Workflow", + "viewer.studio.threshold": "Seuil", + "viewer.studio.title": "Viewer", + "viewer.studio.tools": "Outils de revue", + "viewer.studio.unsupported": "Pas d'aperçu pour ce type de fichier.", + "viewer.studio.volume": "Volume", + "viewer.studio.waveform": "Waveform", + "viewer.studio.wipe": "Volet", + "viewer.studio.zebra": "Zébras (Z)", + "viewer.studio.zoomHint": "Molette pour zoomer, double-clic pour ajuster / 100 %", }, }; diff --git a/ui/features/viewer/studio/studioFx.ts b/ui/features/viewer/studio/studioFx.ts new file mode 100644 index 00000000..02e7f324 --- /dev/null +++ b/ui/features/viewer/studio/studioFx.ts @@ -0,0 +1,330 @@ +/** + * Pure review-tool maths for the Studio viewer (no DOM): colour filters, + * guides, aspect masks, scopes, zebra and pixel probing. + * + * Colour effects are expressed as SVG filter primitives so the GPU applies + * them to images *and* playing video alike. + */ + +export type StudioChannel = "rgb" | "r" | "g" | "b" | "a" | "l"; +export type StudioGrid = "off" | "thirds" | "center" | "safe" | "golden"; +export type StudioAspect = "off" | "16:9" | "1:1" | "4:3" | "2.39" | "9:16"; +export type StudioScopes = "off" | "hist" | "wave" | "both"; +export type StudioCompare = + "off" | "wipe" | "wipeV" | "side" | "difference" | "add" | "subtract" | "multiply" | "screen"; + +export interface StudioTools { + channel: StudioChannel; + exposure: number; // EV, -5..+5 + gamma: number; // 0.1..3 + zebra: boolean; + zebraThreshold: number; // 0..1 luma + scopes: StudioScopes; + grid: StudioGrid; + aspect: StudioAspect; + maskOpacity: number; // 0..1 + probe: boolean; + loupe: boolean; + loupeSize: number; + loupeZoom: number; + compare: StudioCompare; + wipe: number; // 0..100 +} + +export function defaultStudioTools(): StudioTools { + return { + channel: "rgb", + exposure: 0, + gamma: 1, + zebra: false, + zebraThreshold: 0.95, + scopes: "off", + grid: "off", + aspect: "off", + maskOpacity: 0.65, + probe: false, + loupe: false, + loupeSize: 140, + loupeZoom: 8, + compare: "off", + wipe: 50, + }; +} + +/** Rec.709 luma. */ +const LR = 0.2126; +const LG = 0.7152; +const LB = 0.0722; + +/** feColorMatrix `values` (4x5) isolating a channel as greyscale, or null for RGB. */ +export function channelMatrix(channel: StudioChannel): string | null { + const grey = (r: number, g: number, b: number, a = 0) => + [r, g, b, a, 0, r, g, b, a, 0, r, g, b, a, 0].join(" "); + switch (channel) { + case "r": + return `${grey(1, 0, 0)} 0 0 0 1 0`; + case "g": + return `${grey(0, 1, 0)} 0 0 0 1 0`; + case "b": + return `${grey(0, 0, 1)} 0 0 0 1 0`; + case "l": + return `${grey(LR, LG, LB)} 0 0 0 1 0`; + case "a": + // Alpha shown as greyscale on an opaque canvas. + return `${grey(0, 0, 0, 1)} 0 0 0 0 1`; + default: + return null; + } +} + +export function exposureSlope(ev: number): number { + const safe = Number.isFinite(ev) ? Math.max(-10, Math.min(10, ev)) : 0; + return Math.pow(2, safe); +} + +/** Display gamma: out = in^(1/gamma). */ +export function gammaExponent(gamma: number): number { + const g = Number.isFinite(gamma) && gamma > 0 ? gamma : 1; + return 1 / g; +} + +export function hasColorFx(tools: Pick): boolean { + return ( + tools.channel !== "rgb" || + Math.abs(tools.exposure) > 1e-3 || + Math.abs(tools.gamma - 1) > 1e-3 + ); +} + +export function aspectRatioValue(aspect: StudioAspect): number | null { + switch (aspect) { + case "16:9": + return 16 / 9; + case "1:1": + return 1; + case "4:3": + return 4 / 3; + case "2.39": + return 2.39; + case "9:16": + return 9 / 16; + default: + return null; + } +} + +/** Largest centred rect of `aspect` inside w×h (the visible area of the mask). */ +export function aspectRect( + w: number, + h: number, + aspect: StudioAspect, +): { x: number; y: number; w: number; h: number } | null { + const ratio = aspectRatioValue(aspect); + if (!ratio || w <= 0 || h <= 0) return null; + let rw = w; + let rh = w / ratio; + if (rh > h) { + rh = h; + rw = h * ratio; + } + return { x: (w - rw) / 2, y: (h - rh) / 2, w: rw, h: rh }; +} + +export interface GuideLine { + x1: number; + y1: number; + x2: number; + y2: number; +} +export interface GuideRect { + x: number; + y: number; + w: number; + h: number; +} + +/** Guide lines / rectangles in image pixel coordinates. */ +export function gridGuides( + w: number, + h: number, + grid: StudioGrid, +): { lines: GuideLine[]; rects: GuideRect[] } { + const lines: GuideLine[] = []; + const rects: GuideRect[] = []; + if (w <= 0 || h <= 0 || grid === "off") return { lines, rects }; + const v = (f: number) => lines.push({ x1: w * f, y1: 0, x2: w * f, y2: h }); + const hz = (f: number) => lines.push({ x1: 0, y1: h * f, x2: w, y2: h * f }); + if (grid === "thirds") { + v(1 / 3); + v(2 / 3); + hz(1 / 3); + hz(2 / 3); + } else if (grid === "golden") { + const g = 0.381966; + v(g); + v(1 - g); + hz(g); + hz(1 - g); + } else if (grid === "center") { + v(0.5); + hz(0.5); + } else if (grid === "safe") { + // Action safe (90 %) and title safe (80 %). + for (const f of [0.9, 0.8]) { + rects.push({ x: (w * (1 - f)) / 2, y: (h * (1 - f)) / 2, w: w * f, h: h * f }); + } + v(0.5); + hz(0.5); + } + return { lines, rects }; +} + +export function luma(r: number, g: number, b: number): number { + return LR * r + LG * g + LB * b; +} + +export interface Histogram { + r: Uint32Array; + g: Uint32Array; + b: Uint32Array; + l: Uint32Array; + max: number; +} + +/** 256-bin RGB + luma histogram of RGBA pixel data (alpha-weighted pixels skipped when transparent). */ +export function computeHistogram(data: Uint8ClampedArray | number[]): Histogram { + const r = new Uint32Array(256); + const g = new Uint32Array(256); + const b = new Uint32Array(256); + const l = new Uint32Array(256); + for (let i = 0; i + 3 < data.length; i += 4) { + if (data[i + 3] === 0) continue; + r[data[i]] += 1; + g[data[i + 1]] += 1; + b[data[i + 2]] += 1; + l[Math.round(luma(data[i], data[i + 1], data[i + 2]))] += 1; + } + let max = 1; + for (let k = 1; k < 255; k++) max = Math.max(max, r[k], g[k], b[k], l[k]); + return { r, g, b, l, max }; +} + +/** + * Luma waveform: `columns` × 256 density grid (column-major by image x), + * values are counts of pixels at that luma in that column. + */ +export function computeWaveform( + data: Uint8ClampedArray | number[], + width: number, + height: number, + columns = 256, +): { columns: number; bins: Uint32Array; max: number } { + const cols = Math.max(1, Math.min(columns, width)); + const bins = new Uint32Array(cols * 256); + let max = 1; + for (let y = 0; y < height; y++) { + for (let x = 0; x < width; x++) { + const i = (y * width + x) * 4; + if (data[i + 3] === 0) continue; + const c = Math.min(cols - 1, Math.floor((x * cols) / width)); + const v = Math.round(luma(data[i], data[i + 1], data[i + 2])); + const idx = c * 256 + v; + bins[idx] += 1; + if (bins[idx] > max) max = bins[idx]; + } + } + return { columns: cols, bins, max }; +} + +/** Zebra stripes over pixels whose luma >= threshold (RGBA overlay, transparent elsewhere). */ +export function computeZebra( + data: Uint8ClampedArray | number[], + width: number, + height: number, + threshold: number, + phase = 0, +): Uint8ClampedArray { + const out = new Uint8ClampedArray(new ArrayBuffer(width * height * 4)); + const limit = Math.max(0, Math.min(1, threshold)) * 255; + for (let y = 0; y < height; y++) { + for (let x = 0; x < width; x++) { + const i = (y * width + x) * 4; + if (luma(data[i], data[i + 1], data[i + 2]) < limit) continue; + const stripe = Math.floor((x + y + phase) / 4) % 2 === 0; + out[i] = stripe ? 255 : 20; + out[i + 1] = stripe ? 40 : 20; + out[i + 2] = stripe ? 40 : 20; + out[i + 3] = 200; + } + } + return out; +} + +/** Size that fits `w×h` within `max` on the long edge (for cheap sampling). */ +export function sampleSize(w: number, h: number, max = 256): { w: number; h: number } { + if (w <= 0 || h <= 0) return { w: 0, h: 0 }; + const scale = Math.min(1, max / Math.max(w, h)); + return { w: Math.max(1, Math.round(w * scale)), h: Math.max(1, Math.round(h * scale)) }; +} + +export function formatProbe( + r: number, + g: number, + b: number, + a: number, +): { hex: string; rgb: string; luma: string } { + const hex = + `#${[r, g, b].map((v) => Math.round(v).toString(16).padStart(2, "0")).join("")}`.toUpperCase(); + return { + hex, + rgb: `${r}, ${g}, ${b}${a < 255 ? ` · α ${a}` : ""}`, + luma: `${Math.round((luma(r, g, b) / 255) * 100)}%`, + }; +} + +/** CSS mix-blend-mode for blend compare modes, or null. */ +export function compareBlendMode(mode: StudioCompare): string | null { + switch (mode) { + case "difference": + return "difference"; + case "add": + return "plus-lighter"; + case "multiply": + return "multiply"; + case "screen": + return "screen"; + default: + return null; + } +} + +export const COMPARE_MODES: { value: StudioCompare; label: string; imageOnly?: boolean }[] = [ + { value: "wipe", label: "Wipe ↔" }, + { value: "wipeV", label: "Wipe ↕" }, + { value: "side", label: "Side by side" }, + { value: "difference", label: "Difference" }, + { value: "add", label: "Add" }, + { value: "subtract", label: "Subtract", imageOnly: true }, + { value: "multiply", label: "Multiply" }, + { value: "screen", label: "Screen" }, +]; + +/** + * Next index from `from` (stepping `delta`, wrapping) whose asset matches + * `accept`; never returns `from` itself. Null when nothing matches. + */ +export function nextCompareIndex( + list: readonly T[], + from: number, + delta: number, + accept: (item: T, index: number) => boolean = () => true, +): number | null { + const n = list.length; + if (n < 2) return null; + const step = delta < 0 ? -1 : 1; + for (let k = 1; k < n; k++) { + const i = (((from + step * k) % n) + n) % n; + if (i !== from && accept(list[i], i)) return i; + } + return null; +} diff --git a/ui/features/viewer/studio/studioSampler.ts b/ui/features/viewer/studio/studioSampler.ts new file mode 100644 index 00000000..775b6183 --- /dev/null +++ b/ui/features/viewer/studio/studioSampler.ts @@ -0,0 +1,134 @@ +/** + * Pixel access for the Studio review tools (zebra, scopes, probe, loupe). + * + * Draws the *source* media (image or the current video frame) into small + * reusable canvases. Sources are same-origin (/view, /mjr/am), so reading + * pixels is allowed; failures (tainted canvas, frame not ready) return null. + */ + +import { sampleSize } from "./studioFx.js"; + +export type StudioSource = HTMLImageElement | HTMLVideoElement | HTMLCanvasElement; + +let sampleCanvas: HTMLCanvasElement | null = null; +let pixelCanvas: HTMLCanvasElement | null = null; + +function canvas2d(existing: HTMLCanvasElement | null, w: number, h: number) { + const c = existing || document.createElement("canvas"); + if (c.width !== w) c.width = w; + if (c.height !== h) c.height = h; + const ctx = c.getContext("2d", { willReadFrequently: true }); + return { c, ctx }; +} + +export function sourceSize(source: StudioSource | null | undefined): { w: number; h: number } { + if (!source) return { w: 0, h: 0 }; + if (source instanceof HTMLVideoElement) + return { w: source.videoWidth || 0, h: source.videoHeight || 0 }; + if (source instanceof HTMLImageElement) + return { w: source.naturalWidth || 0, h: source.naturalHeight || 0 }; + return { w: source.width || 0, h: source.height || 0 }; +} + +export function isSourceReady(source: StudioSource | null | undefined): boolean { + if (!source) return false; + if (source instanceof HTMLVideoElement) return source.readyState >= 2 && source.videoWidth > 0; + if (source instanceof HTMLImageElement) return source.complete && source.naturalWidth > 0; + return source.width > 0; +} + +/** Downsampled RGBA pixels of the source (long edge <= max). */ +export function sampleImageData( + source: StudioSource | null | undefined, + max = 256, +): { data: Uint8ClampedArray; width: number; height: number } | null { + if (!isSourceReady(source)) return null; + const { w, h } = sourceSize(source); + const size = sampleSize(w, h, max); + if (!size.w || !size.h) return null; + try { + const { c, ctx } = canvas2d(sampleCanvas, size.w, size.h); + sampleCanvas = c; + if (!ctx) return null; + ctx.clearRect(0, 0, size.w, size.h); + ctx.drawImage(source as CanvasImageSource, 0, 0, size.w, size.h); + const img = ctx.getImageData(0, 0, size.w, size.h); + return { data: img.data, width: size.w, height: size.h }; + } catch { + return null; + } +} + +/** RGBA at source pixel (x, y), or null. */ +export function pixelAt( + source: StudioSource | null | undefined, + x: number, + y: number, +): [number, number, number, number] | null { + if (!isSourceReady(source)) return null; + const { w, h } = sourceSize(source); + const px = Math.floor(x); + const py = Math.floor(y); + if (px < 0 || py < 0 || px >= w || py >= h) return null; + try { + const { c, ctx } = canvas2d(pixelCanvas, 1, 1); + pixelCanvas = c; + if (!ctx) return null; + ctx.clearRect(0, 0, 1, 1); + ctx.drawImage(source as CanvasImageSource, px, py, 1, 1, 0, 0, 1, 1); + const d = ctx.getImageData(0, 0, 1, 1).data; + return [d[0], d[1], d[2], d[3]]; + } catch { + return null; + } +} + +/** Nearest-neighbour magnification of the region around (x, y) into `target`. */ +export function drawLoupe( + target: HTMLCanvasElement, + source: StudioSource | null | undefined, + x: number, + y: number, + zoom: number, +): boolean { + if (!isSourceReady(source)) return false; + const ctx = target.getContext("2d"); + if (!ctx) return false; + const span = target.width / Math.max(1, zoom); + try { + ctx.imageSmoothingEnabled = false; + ctx.fillStyle = "#111"; + ctx.fillRect(0, 0, target.width, target.height); + ctx.drawImage( + source as CanvasImageSource, + Math.floor(x - span / 2), + Math.floor(y - span / 2), + Math.ceil(span), + Math.ceil(span), + 0, + 0, + target.width, + target.height, + ); + return true; + } catch { + return false; + } +} + +/** PNG blob of the source at native resolution (copy / export current frame). */ +export async function sourceToPngBlob( + source: StudioSource | null | undefined, +): Promise { + if (!isSourceReady(source)) return null; + const { w, h } = sourceSize(source); + const c = document.createElement("canvas"); + c.width = w; + c.height = h; + try { + c.getContext("2d")?.drawImage(source as CanvasImageSource, 0, 0); + return await new Promise((resolve) => c.toBlob(resolve, "image/png")); + } catch { + return null; + } +} diff --git a/ui/features/viewer/studio/studioViewerState.ts b/ui/features/viewer/studio/studioViewerState.ts index 1f97780c..0dc18fac 100644 --- a/ui/features/viewer/studio/studioViewerState.ts +++ b/ui/features/viewer/studio/studioViewerState.ts @@ -9,7 +9,6 @@ import { reactive } from "vue"; import { loadMajoorSettings } from "../../../app/settings/settingsCore.js"; -import { studioMediaKind } from "./studioMedia.js"; export const studioViewerState = reactive({ open: false, @@ -17,17 +16,30 @@ export const studioViewerState = reactive({ index: 0, /** Bumped on every open so the overlay can reset per-session UI. */ session: 0, + /** Compare mode requested by the opener ("wipe", "side") or "". */ + compare: "" as "" | "wipe" | "side", }); export function currentStudioAsset(): any { return studioViewerState.assets[studioViewerState.index] ?? null; } -export function openStudioViewer(assets: unknown[], index = 0): boolean { +/** Map the classic viewer's open modes to a Studio compare mode. */ +export function studioCompareForMode(mode = ""): "" | "wipe" | "side" { + const m = String(mode || "") + .trim() + .toLowerCase(); + if (m === "ab") return "wipe"; + if (m === "sidebyside") return "side"; + return ""; +} + +export function openStudioViewer(assets: unknown[], index = 0, mode = ""): boolean { const list = (Array.isArray(assets) ? assets : []).filter(Boolean); if (!list.length) return false; studioViewerState.assets = list; studioViewerState.index = Math.max(0, Math.min(Number(index) || 0, list.length - 1)); + studioViewerState.compare = list.length > 1 ? studioCompareForMode(mode) : ""; studioViewerState.session += 1; studioViewerState.open = true; return true; @@ -50,14 +62,11 @@ export function stepStudioViewer(delta: number): void { /** * Whether an open request should use the Studio viewer. * - * The classic viewer keeps the compare modes (A/B, side-by-side), 3D models, - * and anyone who switched back to it in the settings. + * The Studio viewer handles every media kind and the compare modes; only + * users who switched back to the classic viewer in the settings (or a + * non-media file) go to the classic runtime. */ -export function shouldUseStudioViewer(assets: unknown[], index: number, mode = ""): boolean { - const normalizedMode = String(mode || "") - .trim() - .toLowerCase(); - if (normalizedMode === "ab" || normalizedMode === "sidebyside") return false; +export function shouldUseStudioViewer(assets: unknown[], index: number, _mode = ""): boolean { try { if (loadMajoorSettings()?.viewer?.classic === true) return false; } catch (e) { @@ -65,5 +74,5 @@ export function shouldUseStudioViewer(assets: unknown[], index: number, mode = " } const list = Array.isArray(assets) ? assets : []; const asset = list[Math.max(0, Math.min(Number(index) || 0, list.length - 1))]; - return !!asset && studioMediaKind(asset) !== "model3d"; + return !!asset; } diff --git a/ui/tests/studio_fx.vitest.ts b/ui/tests/studio_fx.vitest.ts new file mode 100644 index 00000000..ac15b46e --- /dev/null +++ b/ui/tests/studio_fx.vitest.ts @@ -0,0 +1,131 @@ +import { describe, expect, it } from "vitest"; + +import { + aspectRect, + channelMatrix, + compareBlendMode, + computeHistogram, + computeWaveform, + computeZebra, + defaultStudioTools, + exposureSlope, + formatProbe, + gammaExponent, + gridGuides, + hasColorFx, + nextCompareIndex, + sampleSize, +} from "../features/viewer/studio/studioFx.js"; + +describe("studio colour fx", () => { + it("builds channel isolation matrices", () => { + expect(channelMatrix("rgb")).toBeNull(); + const r = channelMatrix("r")!.split(" ").map(Number); + expect(r).toHaveLength(20); + // Every output colour row reads the red input only. + expect([r[0], r[5], r[10]]).toEqual([1, 1, 1]); + expect([r[1], r[2], r[6], r[12]]).toEqual([0, 0, 0, 0]); + expect(r.slice(15)).toEqual([0, 0, 0, 1, 0]); + const a = channelMatrix("a")!.split(" ").map(Number); + expect([a[3], a[8], a[13]]).toEqual([1, 1, 1]); + expect(a.slice(15)).toEqual([0, 0, 0, 0, 1]); + const l = channelMatrix("l")!.split(" ").map(Number); + expect(l[0] + l[1] + l[2]).toBeCloseTo(1, 5); + }); + + it("maps exposure and gamma", () => { + expect(exposureSlope(0)).toBe(1); + expect(exposureSlope(1)).toBe(2); + expect(exposureSlope(-2)).toBe(0.25); + expect(exposureSlope(Number.NaN)).toBe(1); + expect(gammaExponent(2)).toBe(0.5); + expect(gammaExponent(0)).toBe(1); + expect(hasColorFx(defaultStudioTools())).toBe(false); + expect(hasColorFx({ ...defaultStudioTools(), exposure: 0.5 })).toBe(true); + expect(hasColorFx({ ...defaultStudioTools(), channel: "g" })).toBe(true); + }); + + it("maps blend compare modes", () => { + expect(compareBlendMode("difference")).toBe("difference"); + expect(compareBlendMode("add")).toBe("plus-lighter"); + expect(compareBlendMode("wipe")).toBeNull(); + expect(compareBlendMode("subtract")).toBeNull(); + }); +}); + +describe("studio guides", () => { + it("fits aspect masks inside the frame", () => { + expect(aspectRect(1000, 1000, "off")).toBeNull(); + expect(aspectRect(1920, 1920, "16:9")).toEqual({ x: 0, y: 420, w: 1920, h: 1080 }); + const tall = aspectRect(1600, 900, "9:16")!; + expect(tall.h).toBe(900); + expect(tall.w).toBeCloseTo(506.25, 5); + expect(tall.x).toBeCloseTo((1600 - 506.25) / 2, 5); + }); + + it("draws thirds, centre and safe areas", () => { + expect(gridGuides(300, 300, "off").lines).toHaveLength(0); + const thirds = gridGuides(300, 600, "thirds"); + expect(thirds.lines).toHaveLength(4); + expect(thirds.lines[0]).toEqual({ x1: 100, y1: 0, x2: 100, y2: 600 }); + expect(thirds.lines[2]).toEqual({ x1: 0, y1: 200, x2: 300, y2: 200 }); + const safe = gridGuides(1000, 500, "safe"); + expect(safe.rects).toHaveLength(2); + expect(safe.rects[0].x).toBeCloseTo(50, 6); + expect(safe.rects[0].y).toBeCloseTo(25, 6); + expect(safe.rects[0].w).toBeCloseTo(900, 6); + }); +}); + +describe("studio scopes and zebra", () => { + // 2x1 image: pure white, pure black (both opaque) + 1 transparent pixel. + const data = new Uint8ClampedArray([255, 255, 255, 255, 0, 0, 0, 255]); + + it("computes histograms", () => { + const h = computeHistogram(data); + expect(h.r[255]).toBe(1); + expect(h.r[0]).toBe(1); + expect(h.l[255]).toBe(1); + expect(computeHistogram(new Uint8ClampedArray([9, 9, 9, 0])).r[9]).toBe(0); + }); + + it("computes a luma waveform per column", () => { + const w = computeWaveform(data, 2, 1, 256); + expect(w.columns).toBe(2); + expect(w.bins[0 * 256 + 255]).toBe(1); + expect(w.bins[1 * 256 + 0]).toBe(1); + }); + + it("stripes only the highlights", () => { + const z = computeZebra(data, 2, 1, 0.9); + expect(z[3]).toBeGreaterThan(0); + expect(z[7]).toBe(0); + }); + + it("downsizes samples and formats probes", () => { + expect(sampleSize(1024, 512, 256)).toEqual({ w: 256, h: 128 }); + expect(sampleSize(100, 50, 256)).toEqual({ w: 100, h: 50 }); + expect(formatProbe(255, 128, 0, 255)).toEqual({ + hex: "#FF8000", + rgb: "255, 128, 0", + luma: "57%", + }); + expect(formatProbe(0, 0, 0, 10).rgb).toContain("α 10"); + }); +}); + +describe("compare B selection", () => { + const list = ["img", "vid", "img", "img"]; + const isImg = (v: string) => v === "img"; + + it("steps to the next matching item and wraps", () => { + expect(nextCompareIndex(list, 0, 1, isImg)).toBe(2); + expect(nextCompareIndex(list, 3, 1, isImg)).toBe(0); + expect(nextCompareIndex(list, 0, -1, isImg)).toBe(3); + }); + + it("never returns the start and handles no match", () => { + expect(nextCompareIndex(["img"], 0, 1)).toBeNull(); + expect(nextCompareIndex(list, 1, 1, (v) => v === "vid")).toBeNull(); + }); +}); diff --git a/ui/tests/studio_media.vitest.ts b/ui/tests/studio_media.vitest.ts index c9ea024b..e90b749d 100644 --- a/ui/tests/studio_media.vitest.ts +++ b/ui/tests/studio_media.vitest.ts @@ -18,7 +18,10 @@ import { timeForFrame, totalFrames, } from "../features/viewer/studio/studioMedia.js"; -import { shouldUseStudioViewer } from "../features/viewer/studio/studioViewerState.js"; +import { + shouldUseStudioViewer, + studioCompareForMode, +} from "../features/viewer/studio/studioViewerState.js"; describe("studio media helpers", () => { it("formats time for short and long media", () => { @@ -85,11 +88,17 @@ describe("viewer routing", () => { expect(shouldUseStudioViewer([image], 0)).toBe(true); }); - it("keeps compare modes, 3D and the classic setting on the classic viewer", () => { - expect(shouldUseStudioViewer([image, image], 0, "ab")).toBe(false); - expect(shouldUseStudioViewer([image, image], 0, "sidebyside")).toBe(false); - expect(shouldUseStudioViewer([{ filename: "m.glb" }], 0)).toBe(false); + it("handles compare modes and 3D; only the classic setting opts out", () => { + expect(shouldUseStudioViewer([image, image], 0, "ab")).toBe(true); + expect(shouldUseStudioViewer([image, image], 0, "sidebyside")).toBe(true); + expect(shouldUseStudioViewer([{ filename: "m.glb" }], 0)).toBe(true); (loadMajoorSettings as any).mockReturnValueOnce({ viewer: { classic: true } }); expect(shouldUseStudioViewer([image], 0)).toBe(false); }); + + it("maps classic open modes to Studio compare modes", () => { + expect(studioCompareForMode("ab")).toBe("wipe"); + expect(studioCompareForMode("SideBySide")).toBe("side"); + expect(studioCompareForMode("")).toBe(""); + }); }); diff --git a/ui/tests/studio_viewer.vitest.ts b/ui/tests/studio_viewer.vitest.ts index 34c1163b..e0b7a8f9 100644 --- a/ui/tests/studio_viewer.vitest.ts +++ b/ui/tests/studio_viewer.vitest.ts @@ -53,9 +53,14 @@ function mountViewer() { SidebarWorkflowSection: true, SidebarFileInfoSection: true, StudioImageStage: { - props: ["src"], - template: '
', + props: ["src", "compare", "compareSrc", "mediaFilter"], + template: + '
', }, + StudioZebra: true, + StudioScopes: true, + StudioProbe: true, + StudioModel3D: true, StudioPlayer: { props: ["src", "fps", "frameCount"], template: '
', @@ -129,15 +134,56 @@ describe("StudioViewer", () => { expect(studioViewerState.index).toBe(0); }); - it("hands compare over to the classic viewer", async () => { + it("toggles A/B compare in place and picks the next same-kind asset as B", async () => { const wrapper = mountViewer(); openStudioViewer(ASSETS, 1); await flushPromises(); press("c"); await nextTick(); + expect(studioViewerState.open).toBe(true); + expect(wrapper.emitted("open-classic")).toBeUndefined(); + const stage = wrapper.find(".stage-stub"); + expect(stage.attributes("data-compare")).toBe("wipe"); + // B skips the video and wraps to the other image. + expect(stage.attributes("data-compare-src")).toMatch(/\/asset\/1$/); - expect(studioViewerState.open).toBe(false); - expect(wrapper.emitted("open-classic")?.[0]?.[0]).toMatchObject({ index: 1, mode: "ab" }); + press("x"); + await flushPromises(); + expect(studioViewerState.index).toBe(0); + expect(wrapper.find(".stage-stub").attributes("data-compare-src")).toMatch(/\/asset\/2$/); + + press("c"); + await nextTick(); + expect(wrapper.find(".stage-stub").attributes("data-compare")).toBe("off"); + }); + + it("opens with the compare mode requested by the caller", async () => { + const wrapper = mountViewer(); + openStudioViewer(ASSETS, 0, "sidebyside"); + await flushPromises(); + expect(wrapper.find(".stage-stub").attributes("data-compare")).toBe("side"); + }); + + it("drives review tools from the rail shortcuts", async () => { + const wrapper = mountViewer(); + openStudioViewer(ASSETS, 0); + await flushPromises(); + expect(wrapper.find(".mjr-studio-rail").exists()).toBe(true); + + press("z"); + press("g"); + press("p"); + await nextTick(); + const rail = wrapper.findComponent({ name: "StudioToolRail" }); + const tools = rail.props("tools") as any; + expect(tools.zebra).toBe(true); + expect(tools.grid).toBe("thirds"); + expect(tools.probe).toBe(true); + + press("r"); + await nextTick(); + expect(tools.zebra).toBe(false); + expect(tools.grid).toBe("off"); }); }); diff --git a/ui/tests/viewer_vue_components.vitest.ts b/ui/tests/viewer_vue_components.vitest.ts index 0f849b9c..5b48e8fb 100644 --- a/ui/tests/viewer_vue_components.vitest.ts +++ b/ui/tests/viewer_vue_components.vitest.ts @@ -217,8 +217,14 @@ describe("viewer Vue components", () => { ); await flushUi(1); - expect(instance.open).toHaveBeenCalledWith(assets, 1); - expect(instance.setMode).toHaveBeenCalledWith("ab"); + // Compare modes now open in the Studio viewer, preset to a wipe. + const { studioViewerState, closeStudioViewer } = + await import("../features/viewer/studio/studioViewerState.js"); + expect(studioViewerState.open).toBe(true); + expect(studioViewerState.index).toBe(1); + expect(studioViewerState.compare).toBe("wipe"); + expect(instance.open).not.toHaveBeenCalled(); + closeStudioViewer(); wrapper.unmount(); @@ -231,7 +237,7 @@ describe("viewer Vue components", () => { }), ); - expect(instance.open).toHaveBeenCalledTimes(1); + expect(instance.open).not.toHaveBeenCalled(); }); it("renders ViewerContextMenu.vue through Teleport and closes the main menu after an action", async () => { diff --git a/ui/theme/theme-comfy.css b/ui/theme/theme-comfy.css index c2f8658c..ede41622 100644 --- a/ui/theme/theme-comfy.css +++ b/ui/theme/theme-comfy.css @@ -10167,15 +10167,27 @@ body.mjr-mfv-popout-body { background-size: 20px 20px; background-position: 0 0, 0 10px, 10px -10px, -10px 0; } -.mjr-studio-stage__img { +.mjr-studio-stage__box { position: absolute; left: 50%; top: 50%; - max-width: none; transform-origin: center center; + will-change: transform; +} +.mjr-studio-stage__layers { + position: absolute; + inset: 0; + isolation: isolate; +} +.mjr-studio-stage__img { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + max-width: none; user-select: none; -webkit-user-drag: none; - will-change: transform; } .mjr-studio-stage__error { position: absolute; @@ -10490,3 +10502,567 @@ body.mjr-mfv-popout-body { border: none; box-shadow: none; } + + +/* ─── Studio review tools (HUD rail, compare, overlays) ─────────────────── */ +.mjr-studio-fx-defs { + position: absolute; + width: 0; + height: 0; + overflow: hidden; + pointer-events: none; +} +.mjr-studio-stage.is-probing, +.mjr-studio-player.is-probing .mjr-studio-player__screen { + cursor: crosshair; +} +.mjr-studio-stage__side { + position: absolute; + top: 0; + width: 100%; + height: 100%; +} +.mjr-studio-stage__divider { + --mjr-k: var(--mjr-inv-scale, 1); + position: absolute; + top: 0; + bottom: 0; + width: calc(24px * var(--mjr-k)); + margin-left: calc(-12px * var(--mjr-k)); + cursor: ew-resize; + z-index: 3; + touch-action: none; +} +.mjr-studio-stage__divider::before { + content: ""; + position: absolute; + left: 50%; + top: 0; + bottom: 0; + width: calc(2px * var(--mjr-k)); + transform: translateX(-50%); + background: #fff; + box-shadow: 0 0 0 calc(1px * var(--mjr-k)) rgba(0, 0, 0, 0.45); +} +.mjr-studio-stage__divider.is-vertical { + top: auto; + bottom: auto; + left: 0; + right: 0; + width: auto; + height: calc(24px * var(--mjr-k)); + margin-left: 0; + margin-top: calc(-12px * var(--mjr-k)); + cursor: ns-resize; +} +.mjr-studio-stage__divider.is-vertical::before { + left: 0; + right: 0; + top: 50%; + bottom: auto; + width: auto; + height: calc(2px * var(--mjr-k)); + transform: translateY(-50%); +} +.mjr-studio-stage__divider-grip { + position: absolute; + left: 50%; + top: 50%; + width: 18px; + height: 34px; + transform: translate(-50%, -50%) scale(var(--mjr-k)); + border-radius: 9px; + background: #fff; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.5); +} +.mjr-studio-stage__divider.is-vertical .mjr-studio-stage__divider-grip { + width: 34px; + height: 18px; +} +.mjr-studio-stage__divider.is-active .mjr-studio-stage__divider-grip, +.mjr-studio-stage__divider:hover .mjr-studio-stage__divider-grip { + background: var(--mjr-accent, #4fa3ff); +} +.mjr-studio-stage__ab { + position: absolute; + left: 50%; + top: 12px; + z-index: 4; + display: flex; + gap: 6px; + transform: translateX(-50%); + padding: 2px 10px; + border-radius: 999px; + font: 600 11px/20px var(--mjr-font, system-ui, sans-serif); + color: #fff; + background: rgba(0, 0, 0, 0.6); + pointer-events: none; +} +.mjr-studio-stage__ab .is-sep { + opacity: 0.5; +} + +.mjr-studio-player__screen { + cursor: crosshair; +} +.mjr-studio-stage__side { + position: absolute; + top: 0; + width: 100%; + height: 100%; +} +.mjr-studio-stage__divider { + position: absolute; + top: 0; + bottom: 0; + width: 24px; + margin-left: -12px; + cursor: ew-resize; + z-index: 3; + touch-action: none; +} +.mjr-studio-stage__divider::before { + content: ""; + position: absolute; + left: 50%; + top: 0; + bottom: 0; + width: 2px; + margin-left: -1px; + background: #fff; + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.45); +} +.mjr-studio-stage__divider.is-vertical { + top: auto; + bottom: auto; + left: 0; + right: 0; + width: auto; + height: 24px; + margin-left: 0; + margin-top: -12px; + cursor: ns-resize; +} +.mjr-studio-stage__divider.is-vertical::before { + left: 0; + right: 0; + top: 50%; + bottom: auto; + width: auto; + height: 2px; + margin-left: 0; + margin-top: -1px; +} +.mjr-studio-stage__divider-grip { + position: absolute; + left: 50%; + top: 50%; + width: 18px; + height: 34px; + transform: translate(-50%, -50%); + border-radius: 9px; + background: #fff; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.5); +} +.mjr-studio-stage__divider.is-vertical .mjr-studio-stage__divider-grip { + width: 34px; + height: 18px; +} +.mjr-studio-stage__divider.is-active .mjr-studio-stage__divider-grip, +.mjr-studio-stage__divider:hover .mjr-studio-stage__divider-grip { + background: var(--mjr-accent, #4fa3ff); +} +.mjr-studio-stage__ab { + position: absolute; + top: 8px; + z-index: 2; + padding: 1px 7px; + border-radius: 6px; + font: 600 11px/18px var(--mjr-font, system-ui, sans-serif); + color: #fff; + background: rgba(0, 0, 0, 0.6); + pointer-events: none; +} +.mjr-studio-stage__ab.is-a { + left: 8px; +} +.mjr-studio-stage__ab.is-b { + right: 8px; +} +.mjr-studio-stage__box .mjr-studio-stage__ab { + /* Inside the zoomed box: keep labels readable at any zoom. */ + transform-origin: top left; +} + +.mjr-studio-player__screen { + position: absolute; + inset: 0; +} +.mjr-studio-player__layers { + position: absolute; + inset: 0; + isolation: isolate; +} +.mjr-studio-player__media.is-b { + position: absolute; + inset: 0; +} +.mjr-studio-player__screen.is-side .mjr-studio-player__layers { + display: flex; + gap: 8px; +} +.mjr-studio-player__screen.is-side .mjr-studio-player__media { + position: relative; + inset: auto; + flex: 1 1 0; + min-width: 0; + width: auto; +} +.mjr-studio-player__box { + position: absolute; + pointer-events: none; +} +.mjr-studio-player__box .mjr-studio-stage__divider { + pointer-events: auto; +} + +.mjr-studio-guides, +.mjr-studio-zebra { + position: absolute; + inset: 0; + width: 100%; + height: 100%; + pointer-events: none; +} +.mjr-studio-zebra { + image-rendering: pixelated; +} +.mjr-studio-guides__line { + stroke: rgba(255, 255, 255, 0.7); + stroke-width: 1; +} +.mjr-studio-guides__safe { + stroke: rgba(255, 210, 80, 0.8); + stroke-width: 1; + stroke-dasharray: 6 4; +} +.mjr-studio-guides__mask-edge { + stroke: rgba(255, 255, 255, 0.5); + stroke-width: 1; +} + +.mjr-studio-model3d { + position: absolute; + inset: 0; + padding: 12px; +} +.mjr-studio-model3d__host { + width: 100%; + height: 100%; +} + +/* HUD rail */ +.mjr-studio-rail { + position: absolute; + left: 12px; + top: 12px; + z-index: 5; + display: flex; + align-items: flex-start; + gap: 8px; + max-height: calc(100% - 24px); +} +.mjr-studio-rail__bar { + display: flex; + flex-direction: column; + gap: 2px; + padding: 5px; + border-radius: 12px; + background: color-mix(in srgb, var(--mjr-surface-1, #1c1c20) 82%, transparent); + border: 1px solid var(--mjr-studio-line, rgba(255, 255, 255, 0.1)); + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.35); + backdrop-filter: blur(10px); + overflow-y: auto; + max-height: 100%; + scrollbar-width: none; +} +.mjr-studio-rail__btn { + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + width: 34px; + height: 34px; + flex: 0 0 auto; + border: 0; + border-radius: 8px; + background: transparent; + color: var(--mjr-text-muted, #b5b5bd); + cursor: pointer; + transition: + background 0.12s ease, + color 0.12s ease; +} +.mjr-studio-rail__btn:hover { + background: rgba(255, 255, 255, 0.08); + color: var(--mjr-text, #fff); +} +.mjr-studio-rail__btn:focus-visible { + outline: 2px solid var(--mjr-accent, #4fa3ff); + outline-offset: -2px; +} +.mjr-studio-rail__btn.is-on { + color: var(--mjr-accent, #4fa3ff); + background: color-mix(in srgb, var(--mjr-accent, #4fa3ff) 16%, transparent); +} +.mjr-studio-rail__btn.is-open { + background: rgba(255, 255, 255, 0.12); + color: var(--mjr-text, #fff); +} +.mjr-studio-rail__tag { + position: absolute; + right: 1px; + bottom: 1px; + min-width: 12px; + padding: 0 2px; + border-radius: 4px; + font: 700 8px/11px var(--mjr-font, system-ui, sans-serif); + background: var(--mjr-accent, #4fa3ff); + color: #fff; +} +.mjr-studio-rail__sep { + height: 1px; + margin: 3px 6px; + background: var(--mjr-studio-line, rgba(255, 255, 255, 0.1)); +} +.mjr-studio-rail__panel { + position: absolute; + left: 54px; + width: 236px; + display: flex; + flex-direction: column; + gap: 10px; + padding: 12px; + border-radius: 12px; + background: color-mix(in srgb, var(--mjr-surface-1, #1c1c20) 92%, transparent); + border: 1px solid var(--mjr-studio-line, rgba(255, 255, 255, 0.1)); + box-shadow: 0 12px 32px rgba(0, 0, 0, 0.45); + backdrop-filter: blur(12px); + color: var(--mjr-text, #eee); + font-size: 12px; +} +.mjr-studio-rail__title { + font-weight: 600; + font-size: 12px; + color: var(--mjr-text, #fff); +} +.mjr-studio-rail__b { + display: flex; + align-items: center; + gap: 4px; +} +.mjr-studio-rail__b-label { + font-weight: 700; + color: var(--mjr-accent, #4fa3ff); +} +.mjr-studio-rail__b-name { + flex: 1 1 auto; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + text-align: center; + color: var(--mjr-text-muted, #b5b5bd); +} +.mjr-studio-seg { + display: flex; + gap: 2px; + padding: 2px; + border-radius: 8px; + background: rgba(0, 0, 0, 0.25); +} +.mjr-studio-seg.is-wrap { + flex-wrap: wrap; +} +.mjr-studio-seg button { + flex: 1 1 auto; + display: inline-flex; + align-items: center; + justify-content: center; + gap: 4px; + min-height: 26px; + padding: 0 8px; + border: 0; + border-radius: 6px; + background: transparent; + color: var(--mjr-text-muted, #b5b5bd); + font-size: 11px; + cursor: pointer; + white-space: nowrap; +} +.mjr-studio-seg button:hover { + color: var(--mjr-text, #fff); + background: rgba(255, 255, 255, 0.06); +} +.mjr-studio-seg button.is-on { + background: var(--mjr-accent, #4fa3ff); + color: #fff; +} + +/* Slider */ +.mjr-studio-slider { + display: flex; + flex-direction: column; + gap: 6px; +} +.mjr-studio-slider__head { + display: flex; + justify-content: space-between; + color: var(--mjr-text-muted, #b5b5bd); + font-size: 11px; +} +.mjr-studio-slider__value { + font-variant-numeric: tabular-nums; + color: var(--mjr-text, #fff); +} +.mjr-studio-slider__track { + position: relative; + height: 16px; + cursor: pointer; + touch-action: none; + outline: none; +} +.mjr-studio-slider__track::before { + content: ""; + position: absolute; + left: 0; + right: 0; + top: 7px; + height: 3px; + border-radius: 2px; + background: rgba(255, 255, 255, 0.15); +} +.mjr-studio-slider__fill { + position: absolute; + left: 0; + top: 7px; + height: 3px; + border-radius: 2px; + background: var(--mjr-accent, #4fa3ff); +} +.mjr-studio-slider__knob { + position: absolute; + top: 2px; + width: 12px; + height: 12px; + margin-left: -6px; + border-radius: 50%; + background: #fff; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.5); +} +.mjr-studio-slider__track:focus-visible .mjr-studio-slider__knob { + outline: 2px solid var(--mjr-accent, #4fa3ff); + outline-offset: 1px; +} + +/* Scopes HUD */ +.mjr-studio-scopes { + position: absolute; + right: 12px; + top: 12px; + z-index: 4; + display: flex; + flex-direction: column; + gap: 8px; + pointer-events: none; +} +.mjr-studio-scopes__panel { + position: relative; + padding: 6px; + border-radius: 10px; + background: rgba(10, 10, 12, 0.72); + border: 1px solid rgba(255, 255, 255, 0.08); + backdrop-filter: blur(8px); +} +.mjr-studio-scopes__panel canvas { + display: block; + width: 256px; + height: 110px; +} +.mjr-studio-scopes__panel canvas.is-wave { + height: 128px; +} +.mjr-studio-scopes__label { + position: absolute; + left: 10px; + top: 6px; + font-size: 10px; + color: rgba(255, 255, 255, 0.6); +} + +/* Probe / loupe */ +.mjr-studio-probe { + position: fixed; + inset: 0; + z-index: 10001; + pointer-events: none; +} +.mjr-studio-probe__loupe { + position: fixed; + border-radius: 50%; + overflow: hidden; + border: 2px solid rgba(255, 255, 255, 0.85); + box-shadow: 0 6px 20px rgba(0, 0, 0, 0.55); + background: #111; +} +.mjr-studio-probe__loupe canvas { + display: block; + width: 100%; + height: 100%; + image-rendering: pixelated; +} +.mjr-studio-probe__cross { + position: absolute; + left: 50%; + top: 50%; + width: 10px; + height: 10px; + transform: translate(-50%, -50%); + border: 1px solid #fff; + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.6); +} +.mjr-studio-probe__chip { + position: fixed; + display: flex; + align-items: center; + gap: 8px; + padding: 5px 9px; + border-radius: 8px; + background: rgba(10, 10, 12, 0.85); + border: 1px solid rgba(255, 255, 255, 0.1); + color: #fff; + font: 500 11px/1.3 ui-monospace, SFMono-Regular, Menlo, monospace; + white-space: nowrap; +} +.mjr-studio-probe__chip .is-dim { + color: rgba(255, 255, 255, 0.6); +} +.mjr-studio-probe__swatch { + width: 14px; + height: 14px; + border-radius: 4px; + border: 1px solid rgba(255, 255, 255, 0.4); +} + +/* Audio spectrum */ +.mjr-studio-player__audio-art.has-spectrum { + width: min(720px, 86%); +} +.mjr-studio-player__spectrum { + display: block; + width: 100%; + height: 160px; +} +.mjr-studio-player.is-compact .mjr-studio-player__spectrum { + height: 90px; +} diff --git a/ui/vue/components/common/TagsEditor.vue b/ui/vue/components/common/TagsEditor.vue index c90712a4..3e8b3d62 100644 --- a/ui/vue/components/common/TagsEditor.vue +++ b/ui/vue/components/common/TagsEditor.vue @@ -91,11 +91,16 @@ function areTagsEqual(left: unknown, right: unknown) { return true; } -const props = defineProps<{ - asset: MjrAssetLike; - modelValue?: string[] | string; - disabled?: boolean; -}>(); +const props = withDefaults( + defineProps<{ + asset: MjrAssetLike; + modelValue?: string[] | string; + disabled?: boolean; + /** Focus the input on mount (off where the editor is always visible). */ + autofocus?: boolean; + }>(), + { modelValue: undefined, disabled: false, autofocus: true }, +); const emit = defineEmits<{ "update:modelValue": [tags: string[]]; @@ -256,7 +261,7 @@ async function saveTags() { onMounted(async () => { try { await nextTick(); - resolveDomElement(inputRef.value)?.focus(); + if (props.autofocus) resolveDomElement(inputRef.value)?.focus(); } catch (e) { console.debug?.(e); } diff --git a/ui/vue/components/viewer/ViewerPortal.vue b/ui/vue/components/viewer/ViewerPortal.vue index 8ac56a1c..03e12e35 100644 --- a/ui/vue/components/viewer/ViewerPortal.vue +++ b/ui/vue/components/viewer/ViewerPortal.vue @@ -55,9 +55,9 @@ function _openFromEvent(event: Event) { const index = Math.max(0, Math.min(Number(detail?.index) || 0, assets.length - 1)); const mode = String(detail?.mode || "").trim().toLowerCase(); - // Studio viewer by default; compare modes, 3D and the "classic viewer" - // setting go to the classic runtime below. - if (shouldUseStudioViewer(assets, index, mode) && openStudioViewer(assets, index)) { + // Studio viewer by default (compare modes and 3D included); the + // "classic viewer" setting goes to the classic runtime below. + if (shouldUseStudioViewer(assets, index, mode) && openStudioViewer(assets, index, mode)) { try { (_instance as any)?.close?.(); } catch (e) { diff --git a/ui/vue/components/viewer/studio/StudioFxDefs.vue b/ui/vue/components/viewer/studio/StudioFxDefs.vue new file mode 100644 index 00000000..afef246b --- /dev/null +++ b/ui/vue/components/viewer/studio/StudioFxDefs.vue @@ -0,0 +1,88 @@ + + + diff --git a/ui/vue/components/viewer/studio/StudioGuides.vue b/ui/vue/components/viewer/studio/StudioGuides.vue new file mode 100644 index 00000000..f5b0193c --- /dev/null +++ b/ui/vue/components/viewer/studio/StudioGuides.vue @@ -0,0 +1,82 @@ + + + diff --git a/ui/vue/components/viewer/studio/StudioImageStage.vue b/ui/vue/components/viewer/studio/StudioImageStage.vue index f95fb8c2..e1a3fc56 100644 --- a/ui/vue/components/viewer/studio/StudioImageStage.vue +++ b/ui/vue/components/viewer/studio/StudioImageStage.vue @@ -5,27 +5,68 @@ * Wheel zooms around the cursor, drag pans, double-click toggles fit <-> 100 %. * Zoom is expressed relative to the image's natural size so "100 %" is a * pixel-accurate view of the generation. + * + * The image sits in a "box" at natural size that carries the zoom/pan + * transform; review overlays (guides, zebra) go in the `overlay` slot and + * follow it for free. A second image (B) can be compared: wipe, blend modes + * or side by side - both share the same transform. */ import { computed, onBeforeUnmount, onMounted, ref, watch } from "vue"; -const props = defineProps<{ src: string; alt?: string; checker?: boolean }>(); +import { + compareBlendMode, + type StudioCompare, +} from "../../../../features/viewer/studio/studioFx.js"; + +const props = withDefaults( + defineProps<{ + src: string; + alt?: string; + checker?: boolean; + /** CSS filter applied to the picture (colour tools). */ + mediaFilter?: string; + compareSrc?: string | null; + compare?: StudioCompare; + wipe?: number; + }>(), + { alt: "", checker: false, mediaFilter: "", compareSrc: null, compare: "off", wipe: 50 }, +); const emit = defineEmits<{ (e: "zoom", value: number): void; (e: "loaded", size: { width: number; height: number }): void; + (e: "update:wipe", value: number): void; }>(); const stage = ref(null); +const box = ref(null); +const img = ref(null); const natural = ref({ w: 0, h: 0 }); const scale = ref(1); const offset = ref({ x: 0, y: 0 }); const fitMode = ref(true); const failed = ref(false); const dragging = ref(false); +const wiping = ref(false); let drag: { x: number; y: number; ox: number; oy: number; id: number } | null = null; let resizeObserver: ResizeObserver | null = null; const MIN_SCALE = 0.05; const MAX_SCALE = 32; +const SIDE_GAP = 16; + +const comparing = computed(() => !!props.compareSrc && props.compare !== "off"); +const isSide = computed(() => comparing.value && props.compare === "side"); +const isWipe = computed( + () => comparing.value && (props.compare === "wipe" || props.compare === "wipeV"), +); +const blend = computed(() => (comparing.value ? compareBlendMode(props.compare) : null)); +/** Subtract is done by the colour filter (feImage of B), so B is not drawn. */ +const showB = computed(() => comparing.value && props.compare !== "subtract"); + +/** Content width used for fitting (side by side shows two images). */ +function contentWidth(): number { + return isSide.value ? natural.value.w * 2 + SIDE_GAP : natural.value.w; +} function stageSize() { const rect = stage.value?.getBoundingClientRect(); @@ -35,13 +76,16 @@ function stageSize() { function fitScale(): number { const { w, h } = stageSize(); if (!natural.value.w || !natural.value.h || !w || !h) return 1; - return Math.min(w / natural.value.w, h / natural.value.h); + return Math.min(w / contentWidth(), h / natural.value.h); } function applyFit() { fitMode.value = true; scale.value = fitScale(); - offset.value = { x: 0, y: 0 }; + offset.value = { + x: isSide.value ? -((natural.value.w + SIDE_GAP) / 2) * scale.value : 0, + y: 0, + }; emit("zoom", scale.value); } @@ -106,20 +150,57 @@ function onPointerUp(event: PointerEvent) { dragging.value = false; } +function wipeFromEvent(event: PointerEvent) { + const rect = box.value?.getBoundingClientRect(); + if (!rect || rect.width <= 0 || rect.height <= 0) return; + const ratio = + props.compare === "wipeV" + ? (event.clientY - rect.top) / rect.height + : (event.clientX - rect.left) / rect.width; + emit("update:wipe", Math.round(Math.max(0, Math.min(1, ratio)) * 1000) / 10); +} +function onWipeDown(event: PointerEvent) { + wiping.value = true; + (event.currentTarget as HTMLElement)?.setPointerCapture?.(event.pointerId); + wipeFromEvent(event); +} +function onWipeMove(event: PointerEvent) { + if (wiping.value) wipeFromEvent(event); +} +function onWipeUp() { + wiping.value = false; +} + function onLoad(event: Event) { - const img = event.target as HTMLImageElement; - natural.value = { w: img.naturalWidth, h: img.naturalHeight }; + const el = event.target as HTMLImageElement; + natural.value = { w: el.naturalWidth, h: el.naturalHeight }; failed.value = false; - emit("loaded", { width: img.naturalWidth, height: img.naturalHeight }); + emit("loaded", { width: el.naturalWidth, height: el.naturalHeight }); applyFit(); } -const imageStyle = computed(() => ({ +const boxStyle = computed(() => ({ width: `${natural.value.w}px`, height: `${natural.value.h}px`, transform: `translate(-50%, -50%) translate(${offset.value.x}px, ${offset.value.y}px) scale(${scale.value})`, imageRendering: scale.value >= 2 ? ("pixelated" as const) : ("auto" as const), + // Lets in-box UI (wipe divider) keep a constant on-screen size. + "--mjr-inv-scale": String(1 / (scale.value || 1)), })); +const layersStyle = computed(() => (props.mediaFilter ? { filter: props.mediaFilter } : {})); +const bStyle = computed(() => { + if (blend.value) return { mixBlendMode: blend.value as any }; + if (isWipe.value) { + const pct = Math.max(0, Math.min(100, props.wipe)); + return { + clipPath: props.compare === "wipeV" ? `inset(${pct}% 0 0 0)` : `inset(0 0 0 ${pct}%)`, + }; + } + return {}; +}); +const dividerStyle = computed(() => + props.compare === "wipeV" ? { top: `${props.wipe}%` } : { left: `${props.wipe}%` }, +); watch( () => props.src, @@ -128,6 +209,9 @@ watch( failed.value = false; }, ); +watch(isSide, () => { + if (fitMode.value) applyFit(); +}); onMounted(() => { try { @@ -141,7 +225,15 @@ onMounted(() => { }); onBeforeUnmount(() => resizeObserver?.disconnect()); -defineExpose({ zoomBy, fit: applyFit, actualSize, toggleFitActual }); +defineExpose({ + zoomBy, + fit: applyFit, + actualSize, + toggleFitActual, + getSource: () => (img.value && !failed.value ? img.value : null), + getBox: () => box.value, + naturalSize: () => ({ ...natural.value }), +});