From 8e9e52531734bf449adcdde614f918ff0a01e01e Mon Sep 17 00:00:00 2001 From: Ewald <129623145+MajoorWaldi@users.noreply.github.com> Date: Tue, 30 Jun 2026 09:27:05 +0200 Subject: [PATCH] Polish asset sidebar UI --- ...BokZM7bF.js => FloatingViewer-mV836Kgg.js} | 6 +- ...UAl7N.js => LiveStreamTracker-Cc-aAK4I.js} | 2 +- ....js => SidebarWorkflowSection-Dhrg9X98.js} | 2113 +++++++++-------- ...{Viewer-BG31OAT8.js => Viewer-CnTOrl2S.js} | 2 +- ...l-CafMImU6.js => ViewerPortal-CH9H0gfB.js} | 4 +- ...v.js => floatingViewerManager-tOuaq4XR.js} | 2 +- ...enInfo-CPsL2cZc.js => genInfo-B6Ymnifm.js} | 2 +- ...OHU0.js => openMajoorSettings-CVZbL23Z.js} | 2 +- ...VAV86.js => viewerOpenRequest-B2J_WEEB.js} | 2 +- dist/entry.js | 1285 +++++----- ui/features/panel/panelSettingsSync.ts | 6 +- ui/tests/sidebar_workflow_section.vitest.ts | 42 + ui/theme/theme-comfy.css | 8 + ui/vue/components/common/RatingEditor.vue | 13 +- ui/vue/components/panel/SearchBar.vue | 44 +- .../panel/sidebar/AssetSidebarContent.vue | 1 + .../sidebar/SidebarGenerationSection.vue | 100 +- .../panel/sidebar/SidebarWorkflowSection.vue | 22 +- 18 files changed, 1861 insertions(+), 1795 deletions(-) rename dist/chunks/{FloatingViewer-BokZM7bF.js => FloatingViewer-mV836Kgg.js} (99%) rename dist/chunks/{LiveStreamTracker-DuvUAl7N.js => LiveStreamTracker-Cc-aAK4I.js} (98%) rename dist/chunks/{SidebarWorkflowSection-BkH7KoSY.js => SidebarWorkflowSection-Dhrg9X98.js} (77%) rename dist/chunks/{Viewer-BG31OAT8.js => Viewer-CnTOrl2S.js} (99%) rename dist/chunks/{ViewerPortal-CafMImU6.js => ViewerPortal-CH9H0gfB.js} (98%) rename dist/chunks/{floatingViewerManager-pz1ceTHv.js => floatingViewerManager-tOuaq4XR.js} (99%) rename dist/chunks/{genInfo-CPsL2cZc.js => genInfo-B6Ymnifm.js} (99%) rename dist/chunks/{openMajoorSettings-DDiqOHU0.js => openMajoorSettings-CVZbL23Z.js} (99%) rename dist/chunks/{viewerOpenRequest-NfPVAV86.js => viewerOpenRequest-B2J_WEEB.js} (95%) diff --git a/dist/chunks/FloatingViewer-BokZM7bF.js b/dist/chunks/FloatingViewer-mV836Kgg.js similarity index 99% rename from dist/chunks/FloatingViewer-BokZM7bF.js rename to dist/chunks/FloatingViewer-mV836Kgg.js index c34a0406..0ece9254 100644 --- a/dist/chunks/FloatingViewer-BokZM7bF.js +++ b/dist/chunks/FloatingViewer-mV836Kgg.js @@ -2,12 +2,12 @@ import { Wt as e, h as t, v as n } from "./viewerRuntimeHosts-B9wQ_Nxj.js"; import { B as r, C as i, I as a, M as o, O as s, P as c, R as l, S as u, V as d, j as f, m as p, o as m, pt as h, r as g, rt as _, v, w as y, x as b } from "./events-BpkKbGZs.js"; import { a as x, i as S, o as C, s as w } from "./graphTraversal-CjIZsRsP.js"; import { a as T, i as ee } from "./mediaFps-CbdE2lHO.js"; -import { a as E, c as D, i as O, n as k, o as te, r as A } from "./SidebarWorkflowSection-BkH7KoSY.js"; -import { a as j, c as M, i as N, n as P, o as ne, r as F, s as re, t as ie } from "./openMajoorSettings-DDiqOHU0.js"; +import { a as E, c as D, i as O, n as k, o as te, r as A } from "./SidebarWorkflowSection-Dhrg9X98.js"; +import { a as j, c as M, i as N, n as P, o as ne, r as F, s as re, t as ie } from "./openMajoorSettings-CVZbL23Z.js"; import { i as I, n as L, r as R } from "./VideoControls-Dy5An_lN.js"; import { i as ae, o as z, r as oe, t as se } from "./geninfoParser-DMd9PWlT.js"; import { l as ce, o as le, p as ue, r as de, s as fe } from "./mediaPlayer-DTyhTlcJ.js"; -import { t as pe } from "./genInfo-CPsL2cZc.js"; +import { t as pe } from "./genInfo-B6Ymnifm.js"; //#region ui/features/viewer/floatingViewerConstants.ts var B = Object.freeze({ SIMPLE: "simple", diff --git a/dist/chunks/LiveStreamTracker-DuvUAl7N.js b/dist/chunks/LiveStreamTracker-Cc-aAK4I.js similarity index 98% rename from dist/chunks/LiveStreamTracker-DuvUAl7N.js rename to dist/chunks/LiveStreamTracker-Cc-aAK4I.js index 762bb853..d30a6d6a 100644 --- a/dist/chunks/LiveStreamTracker-DuvUAl7N.js +++ b/dist/chunks/LiveStreamTracker-Cc-aAK4I.js @@ -1,5 +1,5 @@ import { J as e, r as t } from "./events-BpkKbGZs.js"; -import { t as n } from "./floatingViewerManager-pz1ceTHv.js"; +import { t as n } from "./floatingViewerManager-tOuaq4XR.js"; //#region ui/features/viewer/LiveStreamTracker.ts var r = !1, i = null, a = null, o = null, s = null, c = null, l = 0, u = 0, d = 400, f = new Set([ ".png", diff --git a/dist/chunks/SidebarWorkflowSection-BkH7KoSY.js b/dist/chunks/SidebarWorkflowSection-Dhrg9X98.js similarity index 77% rename from dist/chunks/SidebarWorkflowSection-BkH7KoSY.js rename to dist/chunks/SidebarWorkflowSection-Dhrg9X98.js index f7056001..feeb6033 100644 --- a/dist/chunks/SidebarWorkflowSection-BkH7KoSY.js +++ b/dist/chunks/SidebarWorkflowSection-Dhrg9X98.js @@ -1,10 +1,10 @@ -import { $ as e, $t as t, Bt as n, C as r, Ct as i, Dt as a, E as o, Et as s, F as c, G as l, Gt as u, H as d, Ht as f, It as p, J as m, K as h, Lt as g, Mt as _, Nt as v, Pt as y, Q as b, Qt as x, St as S, Tt as C, Ut as w, Wt as T, X as ee, Y as te, Z as ne, _t as E, at as re, bt as ie, et as D, gt as ae, it as oe, j as se, jt as ce, kt as le, nt as ue, q as de, rt as fe, vt as pe, wt as me, x as he, xt as ge, yt as _e } from "./viewerRuntimeHosts-B9wQ_Nxj.js"; -import { K as ve, N as ye, T as be, c as xe, d as Se, f as Ce, h as we, l as Te, m as O, o as k, p as Ee, pt as De, s as A, u as Oe, y as ke } from "./events-BpkKbGZs.js"; -import { A as Ae, D as je, a as Me, g as Ne, h as Pe, i as Fe, t as Ie } from "./mediaFps-CbdE2lHO.js"; -import { t as Le } from "./floatingViewerManager-pz1ceTHv.js"; -import { A as Re, B as j, C as M, D as ze, E as N, G as Be, H as P, J as Ve, L as He, O as F, R as Ue, S as We, T as I, W as Ge, _ as Ke, a as qe, b as Je, c as Ye, ct as L, d as Xe, dt as R, f as Ze, g as Qe, h as $e, i as et, j as tt, k as z, l as nt, lt as rt, m as it, n as at, nt as B, o as ot, p as st, q as ct, r as lt, s as ut, t as dt, tt as ft, u as pt, ut as V, y as mt } from "./mjr-primevue-n1rsQYJg.js"; -import { t as ht } from "./mjr-vue-vendor-D2GeV7Qd.js"; -import { a as gt, i as _t, n as vt, o as yt, r as H, t as bt } from "./geninfoParser-DMd9PWlT.js"; +import { $ as e, $t as t, Bt as n, C as r, Ct as i, Dt as a, E as o, Et as s, F as c, G as l, Gt as u, H as d, Ht as f, It as p, J as m, K as h, Lt as g, Mt as _, Nt as v, Pt as y, Q as b, Qt as x, St as S, Tt as C, Ut as w, Wt as T, X as ee, Y as te, Z as ne, _t as re, at as ie, bt as E, et as D, gt as ae, it as oe, j as se, jt as O, kt as ce, nt as le, q as ue, rt as de, vt as fe, wt as pe, x as me, xt as he, yt as ge } from "./viewerRuntimeHosts-B9wQ_Nxj.js"; +import { K as _e, N as ve, T as ye, c as be, d as xe, f as Se, h as Ce, l as we, m as k, o as A, p as Te, pt as Ee, s as j, u as De, y as Oe } from "./events-BpkKbGZs.js"; +import { A as ke, D as Ae, a as je, g as Me, h as Ne, i as Pe, t as Fe } from "./mediaFps-CbdE2lHO.js"; +import { t as Ie } from "./floatingViewerManager-tOuaq4XR.js"; +import { A as Le, B as M, C as N, D as Re, E as P, G as ze, H as F, J as Be, L as Ve, O as I, R as He, S as Ue, T as L, W as We, _ as Ge, a as Ke, b as qe, c as Je, ct as R, d as Ye, dt as z, f as Xe, g as Ze, h as Qe, i as $e, j as et, k as B, l as tt, lt as nt, m as rt, n as it, nt as V, o as at, p as ot, q as st, r as ct, s as lt, t as ut, tt as dt, u as ft, ut as H, y as pt } from "./mjr-primevue-n1rsQYJg.js"; +import { t as mt } from "./mjr-vue-vendor-D2GeV7Qd.js"; +import { a as ht, i as gt, n as _t, o as vt, r as yt, t as bt } from "./geninfoParser-DMd9PWlT.js"; //#region ui/app/settings/settingsUtils.ts var U = (e, t) => { if (typeof e == "boolean") return e; @@ -47,82 +47,82 @@ var U = (e, t) => { "large" ]), Et = (e, t) => Math.max(60, Math.min(600, Math.round(W(e, t)))), Dt = (e = {}) => { let t = Number(e?.minSize); - if (Number.isFinite(t)) return Et(t, A.GRID_MIN_SIZE); + if (Number.isFinite(t)) return Et(t, j.GRID_MIN_SIZE); let n = xt(String(e?.minSizePreset || "").toLowerCase(), Tt, ""); - return n ? wt[n] : Et(e?.minSize, A.GRID_MIN_SIZE); -}, Ot = (e = {}) => Et(e?.minSize, A.FEED_GRID_MIN_SIZE), kt = (e) => { - let t = Math.round(W(e, A.GRID_MIN_SIZE)); + return n ? wt[n] : Et(e?.minSize, j.GRID_MIN_SIZE); +}, Ot = (e = {}) => Et(e?.minSize, j.FEED_GRID_MIN_SIZE), kt = (e) => { + let t = Math.round(W(e, j.GRID_MIN_SIZE)); return t <= 100 ? "small" : t >= 150 ? "large" : "medium"; }, G = { debug: { - safeCall: A.DEBUG_SAFE_CALL, - safeListeners: A.DEBUG_SAFE_LISTENERS, - viewer: A.DEBUG_VIEWER + safeCall: j.DEBUG_SAFE_CALL, + safeListeners: j.DEBUG_SAFE_LISTENERS, + viewer: j.DEBUG_VIEWER }, grid: { - pageSize: A.DEFAULT_PAGE_SIZE, - minSize: A.GRID_MIN_SIZE, - minSizePreset: kt(A.GRID_MIN_SIZE), - gap: A.GRID_GAP, - showExtBadge: A.GRID_SHOW_BADGES_EXTENSION, - showRatingBadge: A.GRID_SHOW_BADGES_RATING, - showTagsBadge: A.GRID_SHOW_BADGES_TAGS, - showDetails: A.GRID_SHOW_DETAILS, - showFilename: A.GRID_SHOW_DETAILS_FILENAME, - showDate: A.GRID_SHOW_DETAILS_DATE, - showDimensions: A.GRID_SHOW_DETAILS_DIMENSIONS, - showGenTime: A.GRID_SHOW_DETAILS_GENTIME, - showHoverInfo: A.GRID_SHOW_HOVER_INFO, - showWorkflowDot: A.GRID_SHOW_WORKFLOW_DOT, - workflowGroupBy: A.WORKFLOW_GRID_GROUP_BY, - videoAutoplayMode: A.GRID_VIDEO_AUTOPLAY_MODE, - starColor: A.BADGE_STAR_COLOR, - badgeImageColor: A.BADGE_IMAGE_COLOR, - badgeVideoColor: A.BADGE_VIDEO_COLOR, - badgeAudioColor: A.BADGE_AUDIO_COLOR, - badgeModel3dColor: A.BADGE_MODEL3D_COLOR, - badgeDuplicateAlertColor: A.BADGE_DUPLICATE_ALERT_COLOR + pageSize: j.DEFAULT_PAGE_SIZE, + minSize: j.GRID_MIN_SIZE, + minSizePreset: kt(j.GRID_MIN_SIZE), + gap: j.GRID_GAP, + showExtBadge: j.GRID_SHOW_BADGES_EXTENSION, + showRatingBadge: j.GRID_SHOW_BADGES_RATING, + showTagsBadge: j.GRID_SHOW_BADGES_TAGS, + showDetails: j.GRID_SHOW_DETAILS, + showFilename: j.GRID_SHOW_DETAILS_FILENAME, + showDate: j.GRID_SHOW_DETAILS_DATE, + showDimensions: j.GRID_SHOW_DETAILS_DIMENSIONS, + showGenTime: j.GRID_SHOW_DETAILS_GENTIME, + showHoverInfo: j.GRID_SHOW_HOVER_INFO, + showWorkflowDot: j.GRID_SHOW_WORKFLOW_DOT, + workflowGroupBy: j.WORKFLOW_GRID_GROUP_BY, + videoAutoplayMode: j.GRID_VIDEO_AUTOPLAY_MODE, + starColor: j.BADGE_STAR_COLOR, + badgeImageColor: j.BADGE_IMAGE_COLOR, + badgeVideoColor: j.BADGE_VIDEO_COLOR, + badgeAudioColor: j.BADGE_AUDIO_COLOR, + badgeModel3dColor: j.BADGE_MODEL3D_COLOR, + badgeDuplicateAlertColor: j.BADGE_DUPLICATE_ALERT_COLOR }, infiniteScroll: { - enabled: A.INFINITE_SCROLL_ENABLED, - rootMargin: A.INFINITE_SCROLL_ROOT_MARGIN, - threshold: A.INFINITE_SCROLL_THRESHOLD, - bottomGapPx: A.BOTTOM_GAP_PX + enabled: j.INFINITE_SCROLL_ENABLED, + rootMargin: j.INFINITE_SCROLL_ROOT_MARGIN, + threshold: j.INFINITE_SCROLL_THRESHOLD, + bottomGapPx: j.BOTTOM_GAP_PX }, siblings: { hidePngSiblings: !0 }, - autoScan: { onStartup: A.AUTO_SCAN_ON_STARTUP }, + autoScan: { onStartup: j.AUTO_SCAN_ON_STARTUP }, scan: { fastMode: !0 }, watcher: { enabled: !0, - debounceMs: A.WATCHER_DEBOUNCE_MS, - dedupeTtlMs: A.WATCHER_DEDUPE_TTL_MS, + debounceMs: j.WATCHER_DEBOUNCE_MS, + dedupeTtlMs: j.WATCHER_DEDUPE_TTL_MS, maxPending: 500, minSize: 100, maxSize: 4294967296 }, safety: { confirmDeletion: !0 }, - status: { pollInterval: A.STATUS_POLL_INTERVAL }, + status: { pollInterval: j.STATUS_POLL_INTERVAL }, viewer: { - allowPanAtZoom1: A.VIEWER_ALLOW_PAN_AT_ZOOM_1, - disableWebGL: A.VIEWER_DISABLE_WEBGL_VIDEO, - pauseDuringExecution: A.VIEWER_PAUSE_DURING_EXECUTION, - floatingPauseDuringExecution: A.FLOATING_VIEWER_PAUSE_DURING_EXECUTION, - mfvLiveDefault: A.MFV_LIVE_DEFAULT, - mfvPreviewDefault: A.MFV_PREVIEW_DEFAULT, - videoGradeThrottleFps: A.VIEWER_VIDEO_GRADE_THROTTLE_FPS, - scopesFps: A.VIEWER_SCOPES_FPS, - metaTtlMs: A.VIEWER_META_TTL_MS, - metaMaxEntries: A.VIEWER_META_MAX_ENTRIES, + allowPanAtZoom1: j.VIEWER_ALLOW_PAN_AT_ZOOM_1, + disableWebGL: j.VIEWER_DISABLE_WEBGL_VIDEO, + pauseDuringExecution: j.VIEWER_PAUSE_DURING_EXECUTION, + floatingPauseDuringExecution: j.FLOATING_VIEWER_PAUSE_DURING_EXECUTION, + mfvLiveDefault: j.MFV_LIVE_DEFAULT, + mfvPreviewDefault: j.MFV_PREVIEW_DEFAULT, + videoGradeThrottleFps: j.VIEWER_VIDEO_GRADE_THROTTLE_FPS, + scopesFps: j.VIEWER_SCOPES_FPS, + metaTtlMs: j.VIEWER_META_TTL_MS, + metaMaxEntries: j.VIEWER_META_MAX_ENTRIES, mfvSidebarPosition: "right", - mfvPreviewMethod: A.MFV_PREVIEW_METHOD, + mfvPreviewMethod: j.MFV_PREVIEW_METHOD, ltxavRgbFallback: !1 }, rtHydrate: { - concurrency: A.RT_HYDRATE_CONCURRENCY, - queueMax: A.RT_HYDRATE_QUEUE_MAX, - seenMax: A.RT_HYDRATE_SEEN_MAX, - pruneBudget: A.RT_HYDRATE_PRUNE_BUDGET, - seenTtlMs: A.RT_HYDRATE_SEEN_TTL_MS + concurrency: j.RT_HYDRATE_CONCURRENCY, + queueMax: j.RT_HYDRATE_QUEUE_MAX, + seenMax: j.RT_HYDRATE_SEEN_MAX, + pruneBudget: j.RT_HYDRATE_PRUNE_BUDGET, + seenTtlMs: j.RT_HYDRATE_SEEN_TTL_MS }, observability: { enabled: !1, @@ -132,22 +132,22 @@ var U = (e, t) => { verboseStartupLogs: !1 }, feed: { - minSize: A.FEED_GRID_MIN_SIZE, - showInfo: A.FEED_SHOW_INFO, - showFilename: A.FEED_SHOW_FILENAME, - showDimensions: A.FEED_SHOW_DIMENSIONS, - showDate: A.FEED_SHOW_DATE, - showGenTime: A.FEED_SHOW_GENTIME, - showWorkflowDot: A.FEED_SHOW_WORKFLOW_DOT, - showExtBadge: A.FEED_SHOW_BADGES_EXTENSION, - showRatingBadge: A.FEED_SHOW_BADGES_RATING, - showTagsBadge: A.FEED_SHOW_BADGES_TAGS + minSize: j.FEED_GRID_MIN_SIZE, + showInfo: j.FEED_SHOW_INFO, + showFilename: j.FEED_SHOW_FILENAME, + showDimensions: j.FEED_SHOW_DIMENSIONS, + showDate: j.FEED_SHOW_DATE, + showGenTime: j.FEED_SHOW_GENTIME, + showWorkflowDot: j.FEED_SHOW_WORKFLOW_DOT, + showExtBadge: j.FEED_SHOW_BADGES_EXTENSION, + showRatingBadge: j.FEED_SHOW_BADGES_RATING, + showTagsBadge: j.FEED_SHOW_BADGES_TAGS }, sidebar: { position: "right", showPreviewThumb: !0, widthPx: 360, - assetBadgeEnabled: A.SIDEBAR_ASSET_BADGE_ENABLED + assetBadgeEnabled: j.SIDEBAR_ASSET_BADGE_ENABLED }, probeBackend: { mode: "auto" }, i18n: { followComfyLanguage: !0 }, @@ -167,15 +167,15 @@ var U = (e, t) => { }, ratingTagsSync: { enabled: !0 }, cache: { tagsTTLms: 3e4 }, - search: { maxResults: A.SEARCH_DEFAULT_LIMIT }, + search: { maxResults: j.SEARCH_DEFAULT_LIMIT }, ai: { vectorSearchEnabled: !0, vectorCaptionOnIndex: !1, verboseAiLogs: !1 }, - executionGrouping: { enabled: A.EXECUTION_GROUPING_ENABLED }, + executionGrouping: { enabled: j.EXECUTION_GROUPING_ENABLED }, workflowMinimap: { - enabled: A.WORKFLOW_MINIMAP_ENABLED, + enabled: j.WORKFLOW_MINIMAP_ENABLED, nodeColors: !0, showLinks: !0, showGroups: !0, @@ -186,10 +186,10 @@ var U = (e, t) => { size: "comfortable" }, ui: { - cardHoverColor: A.UI_CARD_HOVER_COLOR, - cardSelectionColor: A.UI_CARD_SELECTION_COLOR, - ratingColor: A.UI_RATING_COLOR, - tagColor: A.UI_TAG_COLOR + cardHoverColor: j.UI_CARD_HOVER_COLOR, + cardSelectionColor: j.UI_CARD_SELECTION_COLOR, + ratingColor: j.UI_RATING_COLOR, + tagColor: j.UI_TAG_COLOR }, security: { safeMode: !1, @@ -205,7 +205,7 @@ var U = (e, t) => { } }, K = () => { try { - let e = we.get(t); + let e = Ce.get(t); if (!e) return { ...G }; let n = JSON.parse(e), r = n && typeof n == "object" && Number.isInteger(n.version) && n.data && typeof n.data == "object"; if (!r && !(n && typeof n == "object" && !Array.isArray(n))) return { ...G }; @@ -230,69 +230,69 @@ var U = (e, t) => { version: 1, data: t }; - if (!we.set("mjrSettings", JSON.stringify(n))) throw Error("SettingsStore rejected the write"); + if (!Ce.set("mjrSettings", JSON.stringify(n))) throw Error("SettingsStore rejected the write"); } catch (e) { console.warn("[Majoor] settings save failed", e); try { let e = Date.now(); - e - (Number(window?._mjrSettingsSaveFailAt || 0) || 0) > 3e4 && (window._mjrSettingsSaveFailAt = e, je(O("dialog.settingsSaveFailed", "Majoor: Failed to save settings (browser storage full or blocked)."))); + e - (Number(window?._mjrSettingsSaveFailAt || 0) || 0) > 3e4 && (window._mjrSettingsSaveFailAt = e, Ae(k("dialog.settingsSaveFailed", "Majoor: Failed to save settings (browser storage full or blocked)."))); } catch (e) { console.debug?.(e); } try { - Ae("mjr-settings-save-failed", { error: String(e?.message || e || "") }, { warnPrefix: "[Majoor]" }); + ke("mjr-settings-save-failed", { error: String(e?.message || e || "") }, { warnPrefix: "[Majoor]" }); } catch (e) { console.debug?.(e); } } }, J = (e) => { - let t = Number(A.MAX_PAGE_SIZE) || 2e3; - k.DEFAULT_PAGE_SIZE = Math.max(50, Math.min(t, Number(e.grid?.pageSize) || A.DEFAULT_PAGE_SIZE)), k.AUTO_SCAN_ON_STARTUP = !!e.autoScan?.onStartup, k.EXECUTION_GROUPING_ENABLED = !!(e.executionGrouping?.enabled ?? A.EXECUTION_GROUPING_ENABLED), k.STATUS_POLL_INTERVAL = Math.max(1e3, Number(e.status?.pollInterval) || A.STATUS_POLL_INTERVAL), k.DEBUG_SAFE_CALL = !!e.debug?.safeCall, k.DEBUG_SAFE_LISTENERS = !!e.debug?.safeListeners, k.DEBUG_VIEWER = !!e.debug?.viewer, k.GRID_MIN_SIZE = Dt(e.grid), k.FEED_GRID_MIN_SIZE = Ot(e.feed), k.GRID_GAP = Math.max(0, Math.min(40, Math.round(W(e.grid?.gap, A.GRID_GAP)))), k.GRID_SHOW_BADGES_EXTENSION = !!(e.grid?.showExtBadge ?? A.GRID_SHOW_BADGES_EXTENSION), k.GRID_SHOW_BADGES_RATING = !!(e.grid?.showRatingBadge ?? A.GRID_SHOW_BADGES_RATING), k.GRID_SHOW_BADGES_TAGS = !!(e.grid?.showTagsBadge ?? A.GRID_SHOW_BADGES_TAGS), k.GRID_SHOW_DETAILS = !!(e.grid?.showDetails ?? A.GRID_SHOW_DETAILS), k.GRID_SHOW_DETAILS_FILENAME = !!(e.grid?.showFilename ?? A.GRID_SHOW_DETAILS_FILENAME), k.GRID_SHOW_DETAILS_DATE = !!(e.grid?.showDate ?? A.GRID_SHOW_DETAILS_DATE), k.GRID_SHOW_DETAILS_DIMENSIONS = !!(e.grid?.showDimensions ?? A.GRID_SHOW_DETAILS_DIMENSIONS), k.GRID_SHOW_DETAILS_GENTIME = !!(e.grid?.showGenTime ?? A.GRID_SHOW_DETAILS_GENTIME), k.GRID_SHOW_HOVER_INFO = !!(e.grid?.showHoverInfo ?? A.GRID_SHOW_HOVER_INFO), k.GRID_SHOW_WORKFLOW_DOT = !!(e.grid?.showWorkflowDot ?? A.GRID_SHOW_WORKFLOW_DOT); + let t = Number(j.MAX_PAGE_SIZE) || 2e3; + A.DEFAULT_PAGE_SIZE = Math.max(50, Math.min(t, Number(e.grid?.pageSize) || j.DEFAULT_PAGE_SIZE)), A.AUTO_SCAN_ON_STARTUP = !!e.autoScan?.onStartup, A.EXECUTION_GROUPING_ENABLED = !!(e.executionGrouping?.enabled ?? j.EXECUTION_GROUPING_ENABLED), A.STATUS_POLL_INTERVAL = Math.max(1e3, Number(e.status?.pollInterval) || j.STATUS_POLL_INTERVAL), A.DEBUG_SAFE_CALL = !!e.debug?.safeCall, A.DEBUG_SAFE_LISTENERS = !!e.debug?.safeListeners, A.DEBUG_VIEWER = !!e.debug?.viewer, A.GRID_MIN_SIZE = Dt(e.grid), A.FEED_GRID_MIN_SIZE = Ot(e.feed), A.GRID_GAP = Math.max(0, Math.min(40, Math.round(W(e.grid?.gap, j.GRID_GAP)))), A.GRID_SHOW_BADGES_EXTENSION = !!(e.grid?.showExtBadge ?? j.GRID_SHOW_BADGES_EXTENSION), A.GRID_SHOW_BADGES_RATING = !!(e.grid?.showRatingBadge ?? j.GRID_SHOW_BADGES_RATING), A.GRID_SHOW_BADGES_TAGS = !!(e.grid?.showTagsBadge ?? j.GRID_SHOW_BADGES_TAGS), A.GRID_SHOW_DETAILS = !!(e.grid?.showDetails ?? j.GRID_SHOW_DETAILS), A.GRID_SHOW_DETAILS_FILENAME = !!(e.grid?.showFilename ?? j.GRID_SHOW_DETAILS_FILENAME), A.GRID_SHOW_DETAILS_DATE = !!(e.grid?.showDate ?? j.GRID_SHOW_DETAILS_DATE), A.GRID_SHOW_DETAILS_DIMENSIONS = !!(e.grid?.showDimensions ?? j.GRID_SHOW_DETAILS_DIMENSIONS), A.GRID_SHOW_DETAILS_GENTIME = !!(e.grid?.showGenTime ?? j.GRID_SHOW_DETAILS_GENTIME), A.GRID_SHOW_HOVER_INFO = !!(e.grid?.showHoverInfo ?? j.GRID_SHOW_HOVER_INFO), A.GRID_SHOW_WORKFLOW_DOT = !!(e.grid?.showWorkflowDot ?? j.GRID_SHOW_WORKFLOW_DOT); { - let t = String(e.grid?.workflowGroupBy ?? A.WORKFLOW_GRID_GROUP_BY).toLowerCase(); - k.WORKFLOW_GRID_GROUP_BY = [ + let t = String(e.grid?.workflowGroupBy ?? j.WORKFLOW_GRID_GROUP_BY).toLowerCase(); + A.WORKFLOW_GRID_GROUP_BY = [ "none", "task", "model", "category" - ].includes(t) ? t : A.WORKFLOW_GRID_GROUP_BY; + ].includes(t) ? t : j.WORKFLOW_GRID_GROUP_BY; } - k.FEED_SHOW_INFO = !!(e.feed?.showInfo ?? A.FEED_SHOW_INFO), k.FEED_SHOW_FILENAME = !!(e.feed?.showFilename ?? A.FEED_SHOW_FILENAME), k.FEED_SHOW_DIMENSIONS = !!(e.feed?.showDimensions ?? A.FEED_SHOW_DIMENSIONS), k.FEED_SHOW_DATE = !!(e.feed?.showDate ?? A.FEED_SHOW_DATE), k.FEED_SHOW_GENTIME = !!(e.feed?.showGenTime ?? A.FEED_SHOW_GENTIME), k.FEED_SHOW_WORKFLOW_DOT = !!(e.feed?.showWorkflowDot ?? A.FEED_SHOW_WORKFLOW_DOT), k.FEED_SHOW_BADGES_EXTENSION = !!(e.feed?.showExtBadge ?? A.FEED_SHOW_BADGES_EXTENSION), k.FEED_SHOW_BADGES_RATING = !!(e.feed?.showRatingBadge ?? A.FEED_SHOW_BADGES_RATING), k.FEED_SHOW_BADGES_TAGS = !!(e.feed?.showTagsBadge ?? A.FEED_SHOW_BADGES_TAGS); + A.FEED_SHOW_INFO = !!(e.feed?.showInfo ?? j.FEED_SHOW_INFO), A.FEED_SHOW_FILENAME = !!(e.feed?.showFilename ?? j.FEED_SHOW_FILENAME), A.FEED_SHOW_DIMENSIONS = !!(e.feed?.showDimensions ?? j.FEED_SHOW_DIMENSIONS), A.FEED_SHOW_DATE = !!(e.feed?.showDate ?? j.FEED_SHOW_DATE), A.FEED_SHOW_GENTIME = !!(e.feed?.showGenTime ?? j.FEED_SHOW_GENTIME), A.FEED_SHOW_WORKFLOW_DOT = !!(e.feed?.showWorkflowDot ?? j.FEED_SHOW_WORKFLOW_DOT), A.FEED_SHOW_BADGES_EXTENSION = !!(e.feed?.showExtBadge ?? j.FEED_SHOW_BADGES_EXTENSION), A.FEED_SHOW_BADGES_RATING = !!(e.feed?.showRatingBadge ?? j.FEED_SHOW_BADGES_RATING), A.FEED_SHOW_BADGES_TAGS = !!(e.feed?.showTagsBadge ?? j.FEED_SHOW_BADGES_TAGS); { - let t = e.grid?.videoAutoplayMode ?? A.GRID_VIDEO_AUTOPLAY_MODE; - t ??= e.grid?.videoHoverAutoplay === !1 ? "off" : "hover", t === !0 && (t = "hover"), t === !1 && (t = "off"), t !== "hover" && t !== "always" && t !== "off" && (t = "hover"), k.GRID_VIDEO_AUTOPLAY_MODE = t; + let t = e.grid?.videoAutoplayMode ?? j.GRID_VIDEO_AUTOPLAY_MODE; + t ??= e.grid?.videoHoverAutoplay === !1 ? "off" : "hover", t === !0 && (t = "hover"), t === !1 && (t = "off"), t !== "hover" && t !== "always" && t !== "off" && (t = "hover"), A.GRID_VIDEO_AUTOPLAY_MODE = t; } let n = (e, t) => { let n = String(e || "").trim(); return /^[0-9a-fA-F]{6}$/.test(n) && (n = `#${n}`), /^#[0-9a-fA-F]{3,8}$/.test(n) ? n : t; }; - k.BADGE_STAR_COLOR = n(e.grid?.starColor, A.BADGE_STAR_COLOR), k.BADGE_IMAGE_COLOR = n(e.grid?.badgeImageColor, A.BADGE_IMAGE_COLOR), k.BADGE_VIDEO_COLOR = n(e.grid?.badgeVideoColor, A.BADGE_VIDEO_COLOR), k.BADGE_AUDIO_COLOR = n(e.grid?.badgeAudioColor, A.BADGE_AUDIO_COLOR), k.BADGE_MODEL3D_COLOR = n(e.grid?.badgeModel3dColor, A.BADGE_MODEL3D_COLOR), k.BADGE_DUPLICATE_ALERT_COLOR = n(e.grid?.badgeDuplicateAlertColor, A.BADGE_DUPLICATE_ALERT_COLOR), k.UI_CARD_HOVER_COLOR = n(e.ui?.cardHoverColor, A.UI_CARD_HOVER_COLOR), k.UI_CARD_SELECTION_COLOR = n(e.ui?.cardSelectionColor, A.UI_CARD_SELECTION_COLOR), k.UI_RATING_COLOR = n(e.ui?.ratingColor, A.UI_RATING_COLOR), k.UI_TAG_COLOR = n(e.ui?.tagColor, A.UI_TAG_COLOR); + A.BADGE_STAR_COLOR = n(e.grid?.starColor, j.BADGE_STAR_COLOR), A.BADGE_IMAGE_COLOR = n(e.grid?.badgeImageColor, j.BADGE_IMAGE_COLOR), A.BADGE_VIDEO_COLOR = n(e.grid?.badgeVideoColor, j.BADGE_VIDEO_COLOR), A.BADGE_AUDIO_COLOR = n(e.grid?.badgeAudioColor, j.BADGE_AUDIO_COLOR), A.BADGE_MODEL3D_COLOR = n(e.grid?.badgeModel3dColor, j.BADGE_MODEL3D_COLOR), A.BADGE_DUPLICATE_ALERT_COLOR = n(e.grid?.badgeDuplicateAlertColor, j.BADGE_DUPLICATE_ALERT_COLOR), A.UI_CARD_HOVER_COLOR = n(e.ui?.cardHoverColor, j.UI_CARD_HOVER_COLOR), A.UI_CARD_SELECTION_COLOR = n(e.ui?.cardSelectionColor, j.UI_CARD_SELECTION_COLOR), A.UI_RATING_COLOR = n(e.ui?.ratingColor, j.UI_RATING_COLOR), A.UI_TAG_COLOR = n(e.ui?.tagColor, j.UI_TAG_COLOR); try { let e = Array.from(document.querySelectorAll(".mjr-assets-manager")); - for (let t of e) t.style.setProperty("--mjr-star-active", k.BADGE_STAR_COLOR), t.style.setProperty("--mjr-badge-image", k.BADGE_IMAGE_COLOR), t.style.setProperty("--mjr-badge-video", k.BADGE_VIDEO_COLOR), t.style.setProperty("--mjr-badge-audio", k.BADGE_AUDIO_COLOR), t.style.setProperty("--mjr-badge-model3d", k.BADGE_MODEL3D_COLOR), t.style.setProperty("--mjr-badge-duplicate-alert", k.BADGE_DUPLICATE_ALERT_COLOR), t.style.setProperty("--mjr-card-hover-color", k.UI_CARD_HOVER_COLOR), t.style.setProperty("--mjr-card-selection-color", k.UI_CARD_SELECTION_COLOR), t.style.setProperty("--mjr-rating-color", k.UI_RATING_COLOR), t.style.setProperty("--mjr-tag-color", k.UI_TAG_COLOR); + for (let t of e) t.style.setProperty("--mjr-star-active", A.BADGE_STAR_COLOR), t.style.setProperty("--mjr-badge-image", A.BADGE_IMAGE_COLOR), t.style.setProperty("--mjr-badge-video", A.BADGE_VIDEO_COLOR), t.style.setProperty("--mjr-badge-audio", A.BADGE_AUDIO_COLOR), t.style.setProperty("--mjr-badge-model3d", A.BADGE_MODEL3D_COLOR), t.style.setProperty("--mjr-badge-duplicate-alert", A.BADGE_DUPLICATE_ALERT_COLOR), t.style.setProperty("--mjr-card-hover-color", A.UI_CARD_HOVER_COLOR), t.style.setProperty("--mjr-card-selection-color", A.UI_CARD_SELECTION_COLOR), t.style.setProperty("--mjr-rating-color", A.UI_RATING_COLOR), t.style.setProperty("--mjr-tag-color", A.UI_TAG_COLOR); } catch (e) { console.debug?.(e); } - k.INFINITE_SCROLL_ENABLED = !!e.infiniteScroll?.enabled, k.INFINITE_SCROLL_ROOT_MARGIN = String(e.infiniteScroll?.rootMargin || A.INFINITE_SCROLL_ROOT_MARGIN), k.INFINITE_SCROLL_THRESHOLD = Math.max(0, Math.min(1, W(e.infiniteScroll?.threshold, A.INFINITE_SCROLL_THRESHOLD))), k.BOTTOM_GAP_PX = Math.max(0, Math.min(5e3, Math.round(W(e.infiniteScroll?.bottomGapPx, A.BOTTOM_GAP_PX)))), k.VIEWER_ALLOW_PAN_AT_ZOOM_1 = !!e.viewer?.allowPanAtZoom1, k.VIEWER_DISABLE_WEBGL_VIDEO = !!e.viewer?.disableWebGL, k.VIEWER_PAUSE_DURING_EXECUTION = !!(e.viewer?.pauseDuringExecution ?? A.VIEWER_PAUSE_DURING_EXECUTION), k.FLOATING_VIEWER_PAUSE_DURING_EXECUTION = !!(e.viewer?.floatingPauseDuringExecution ?? A.FLOATING_VIEWER_PAUSE_DURING_EXECUTION), k.MFV_LIVE_DEFAULT = e.viewer?.mfvLiveDefault ?? A.MFV_LIVE_DEFAULT, k.MFV_PREVIEW_DEFAULT = e.viewer?.mfvPreviewDefault ?? A.MFV_PREVIEW_DEFAULT, k.MFV_LIVE_AUTO_OPEN = !1, k.MFV_PREVIEW_AUTO_OPEN = !1, k.MFV_NODE_STREAM_AUTO_OPEN = !1; + A.INFINITE_SCROLL_ENABLED = !!e.infiniteScroll?.enabled, A.INFINITE_SCROLL_ROOT_MARGIN = String(e.infiniteScroll?.rootMargin || j.INFINITE_SCROLL_ROOT_MARGIN), A.INFINITE_SCROLL_THRESHOLD = Math.max(0, Math.min(1, W(e.infiniteScroll?.threshold, j.INFINITE_SCROLL_THRESHOLD))), A.BOTTOM_GAP_PX = Math.max(0, Math.min(5e3, Math.round(W(e.infiniteScroll?.bottomGapPx, j.BOTTOM_GAP_PX)))), A.VIEWER_ALLOW_PAN_AT_ZOOM_1 = !!e.viewer?.allowPanAtZoom1, A.VIEWER_DISABLE_WEBGL_VIDEO = !!e.viewer?.disableWebGL, A.VIEWER_PAUSE_DURING_EXECUTION = !!(e.viewer?.pauseDuringExecution ?? j.VIEWER_PAUSE_DURING_EXECUTION), A.FLOATING_VIEWER_PAUSE_DURING_EXECUTION = !!(e.viewer?.floatingPauseDuringExecution ?? j.FLOATING_VIEWER_PAUSE_DURING_EXECUTION), A.MFV_LIVE_DEFAULT = e.viewer?.mfvLiveDefault ?? j.MFV_LIVE_DEFAULT, A.MFV_PREVIEW_DEFAULT = e.viewer?.mfvPreviewDefault ?? j.MFV_PREVIEW_DEFAULT, A.MFV_LIVE_AUTO_OPEN = !1, A.MFV_PREVIEW_AUTO_OPEN = !1, A.MFV_NODE_STREAM_AUTO_OPEN = !1; { - let t = String(e.viewer?.mfvPreviewMethod || A.MFV_PREVIEW_METHOD).toLowerCase(); - k.MFV_PREVIEW_METHOD = [ + let t = String(e.viewer?.mfvPreviewMethod || j.MFV_PREVIEW_METHOD).toLowerCase(); + A.MFV_PREVIEW_METHOD = [ "default", "auto", "latent2rgb", "taesd", "none" - ].includes(t) ? t : A.MFV_PREVIEW_METHOD; + ].includes(t) ? t : j.MFV_PREVIEW_METHOD; } { let t = String(e.viewer?.mfvSidebarPosition || "right").toLowerCase(); - k.MFV_SIDEBAR_POSITION = [ + A.MFV_SIDEBAR_POSITION = [ "left", "right", "bottom" ].includes(t) ? t : "right"; } - k.VIEWER_VIDEO_GRADE_THROTTLE_FPS = Math.max(1, Math.min(60, Math.round(W(e.viewer?.videoGradeThrottleFps, A.VIEWER_VIDEO_GRADE_THROTTLE_FPS)))), k.VIEWER_SCOPES_FPS = Math.max(1, Math.min(60, Math.round(W(e.viewer?.scopesFps, A.VIEWER_SCOPES_FPS)))), k.VIEWER_META_TTL_MS = Math.max(1e3, Math.min(10 * 6e4, Math.round(W(e.viewer?.metaTtlMs, A.VIEWER_META_TTL_MS)))), k.VIEWER_META_MAX_ENTRIES = Math.max(50, Math.min(5e3, Math.round(W(e.viewer?.metaMaxEntries, A.VIEWER_META_MAX_ENTRIES)))), k.WORKFLOW_MINIMAP_ENABLED = !!(e.workflowMinimap?.enabled ?? A.WORKFLOW_MINIMAP_ENABLED), k.RT_HYDRATE_CONCURRENCY = Math.max(1, Math.min(16, Math.round(W(e.rtHydrate?.concurrency, A.RT_HYDRATE_CONCURRENCY)))), k.RT_HYDRATE_QUEUE_MAX = Math.max(10, Math.min(5e3, Math.round(W(e.rtHydrate?.queueMax, A.RT_HYDRATE_QUEUE_MAX)))), k.RT_HYDRATE_SEEN_MAX = Math.max(1e3, Math.min(2e5, Math.round(W(e.rtHydrate?.seenMax, A.RT_HYDRATE_SEEN_MAX)))), k.RT_HYDRATE_PRUNE_BUDGET = Math.max(10, Math.min(1e4, Math.round(W(e.rtHydrate?.pruneBudget, A.RT_HYDRATE_PRUNE_BUDGET)))), k.RT_HYDRATE_SEEN_TTL_MS = Math.max(5e3, Math.min(360 * 6e4, Math.round(W(e.rtHydrate?.seenTtlMs, A.RT_HYDRATE_SEEN_TTL_MS)))), k.DELETE_CONFIRMATION = !!e.safety?.confirmDeletion, k.DEBUG_VERBOSE_ERRORS = !!e.observability?.verboseErrors, k.WATCHER_MAX_PENDING = Math.max(10, Math.min(5e3, Math.round(W(e.watcher?.maxPending, 500)))), k.WATCHER_MIN_SIZE = Math.max(0, Math.min(1e6, Math.round(W(e.watcher?.minSize, 100)))), k.WATCHER_MAX_SIZE = Math.max(1e5, Math.min(17179869184, Math.round(W(e.watcher?.maxSize, 4294967296)))), k.DB_TIMEOUT_MS = Math.max(1e3, Math.min(3e4, Math.round(W(e.db?.timeoutMs, 5e3)))), k.DB_MAX_CONNECTIONS = Math.max(1, Math.min(100, Math.round(W(e.db?.maxConnections, 10)))), k.DB_QUERY_TIMEOUT_MS = Math.max(500, Math.min(1e4, Math.round(W(e.db?.queryTimeoutMs, 1e3)))), k.SIDEBAR_ASSET_BADGE_ENABLED = !!(e.sidebar?.assetBadgeEnabled ?? A.SIDEBAR_ASSET_BADGE_ENABLED), k.SEARCH_REQUEST_LIMIT = Math.max(10, Math.min(A.MAX_PAGE_SIZE || 2e3, Math.round(W(e.search?.maxResults, A.SEARCH_DEFAULT_LIMIT)))); + A.VIEWER_VIDEO_GRADE_THROTTLE_FPS = Math.max(1, Math.min(60, Math.round(W(e.viewer?.videoGradeThrottleFps, j.VIEWER_VIDEO_GRADE_THROTTLE_FPS)))), A.VIEWER_SCOPES_FPS = Math.max(1, Math.min(60, Math.round(W(e.viewer?.scopesFps, j.VIEWER_SCOPES_FPS)))), A.VIEWER_META_TTL_MS = Math.max(1e3, Math.min(10 * 6e4, Math.round(W(e.viewer?.metaTtlMs, j.VIEWER_META_TTL_MS)))), A.VIEWER_META_MAX_ENTRIES = Math.max(50, Math.min(5e3, Math.round(W(e.viewer?.metaMaxEntries, j.VIEWER_META_MAX_ENTRIES)))), A.WORKFLOW_MINIMAP_ENABLED = !!(e.workflowMinimap?.enabled ?? j.WORKFLOW_MINIMAP_ENABLED), A.RT_HYDRATE_CONCURRENCY = Math.max(1, Math.min(16, Math.round(W(e.rtHydrate?.concurrency, j.RT_HYDRATE_CONCURRENCY)))), A.RT_HYDRATE_QUEUE_MAX = Math.max(10, Math.min(5e3, Math.round(W(e.rtHydrate?.queueMax, j.RT_HYDRATE_QUEUE_MAX)))), A.RT_HYDRATE_SEEN_MAX = Math.max(1e3, Math.min(2e5, Math.round(W(e.rtHydrate?.seenMax, j.RT_HYDRATE_SEEN_MAX)))), A.RT_HYDRATE_PRUNE_BUDGET = Math.max(10, Math.min(1e4, Math.round(W(e.rtHydrate?.pruneBudget, j.RT_HYDRATE_PRUNE_BUDGET)))), A.RT_HYDRATE_SEEN_TTL_MS = Math.max(5e3, Math.min(360 * 6e4, Math.round(W(e.rtHydrate?.seenTtlMs, j.RT_HYDRATE_SEEN_TTL_MS)))), A.DELETE_CONFIRMATION = !!e.safety?.confirmDeletion, A.DEBUG_VERBOSE_ERRORS = !!e.observability?.verboseErrors, A.WATCHER_MAX_PENDING = Math.max(10, Math.min(5e3, Math.round(W(e.watcher?.maxPending, 500)))), A.WATCHER_MIN_SIZE = Math.max(0, Math.min(1e6, Math.round(W(e.watcher?.minSize, 100)))), A.WATCHER_MAX_SIZE = Math.max(1e5, Math.min(17179869184, Math.round(W(e.watcher?.maxSize, 4294967296)))), A.DB_TIMEOUT_MS = Math.max(1e3, Math.min(3e4, Math.round(W(e.db?.timeoutMs, 5e3)))), A.DB_MAX_CONNECTIONS = Math.max(1, Math.min(100, Math.round(W(e.db?.maxConnections, 10)))), A.DB_QUERY_TIMEOUT_MS = Math.max(500, Math.min(1e4, Math.round(W(e.db?.queryTimeoutMs, 1e3)))), A.SIDEBAR_ASSET_BADGE_ENABLED = !!(e.sidebar?.assetBadgeEnabled ?? j.SIDEBAR_ASSET_BADGE_ENABLED), A.SEARCH_REQUEST_LIMIT = Math.max(10, Math.min(j.MAX_PAGE_SIZE || 2e3, Math.round(W(e.search?.maxResults, j.SEARCH_DEFAULT_LIMIT)))); }; async function At() { try { @@ -307,19 +307,19 @@ async function At() { } catch (e) { console.debug?.(e); } - q(r), J(r), Ae("mjr-settings-changed", { key: "security" }, { warnPrefix: "[Majoor]" }); + q(r), J(r), ke("mjr-settings-changed", { key: "security" }, { warnPrefix: "[Majoor]" }); } catch (e) { console.warn("[Majoor] failed to sync backend security settings", e); } } async function jt() { try { - let e = await ue(); + let e = await le(); if (!e?.ok) return; let t = e.data?.prefs; if (!t || typeof t != "object") return; let n = K(); - n.ai = n.ai || {}, n.ai.vectorSearchEnabled = U(t.enabled, n.ai.vectorSearchEnabled ?? !0), n.ai.vectorCaptionOnIndex = U(t.caption_on_index ?? t.captionOnIndex, n.ai.vectorCaptionOnIndex ?? !1), n.ai.vectorIndexOnScan = U(t.index_on_scan ?? t.indexOnScan, n.ai.vectorIndexOnScan ?? !1), n.ai.vectorUnloadAfterUse = U(t.unload_after_use ?? t.unloadAfterUse, n.ai.vectorUnloadAfterUse ?? !1), n.ai.vectorConcurrency = Math.max(1, Math.min(16, Math.floor(Number(t.concurrency ?? n.ai.vectorConcurrency ?? 1) || 1))), q(n), J(n), Ae("mjr-settings-changed", { key: "ai.vectorSearch" }, { warnPrefix: "[Majoor]" }); + n.ai = n.ai || {}, n.ai.vectorSearchEnabled = U(t.enabled, n.ai.vectorSearchEnabled ?? !0), n.ai.vectorCaptionOnIndex = U(t.caption_on_index ?? t.captionOnIndex, n.ai.vectorCaptionOnIndex ?? !1), n.ai.vectorIndexOnScan = U(t.index_on_scan ?? t.indexOnScan, n.ai.vectorIndexOnScan ?? !1), n.ai.vectorUnloadAfterUse = U(t.unload_after_use ?? t.unloadAfterUse, n.ai.vectorUnloadAfterUse ?? !1), n.ai.vectorConcurrency = Math.max(1, Math.min(16, Math.floor(Number(t.concurrency ?? n.ai.vectorConcurrency ?? 1) || 1))), q(n), J(n), ke("mjr-settings-changed", { key: "ai.vectorSearch" }, { warnPrefix: "[Majoor]" }); } catch (e) { console.warn("[Majoor] failed to sync backend vector search settings", e); } @@ -331,7 +331,7 @@ async function Mt() { let t = e.data?.prefs; if (!t || typeof t != "object") return; let n = K(); - n.executionGrouping = n.executionGrouping || {}, n.executionGrouping.enabled = U(t.enabled, n.executionGrouping.enabled ?? A.EXECUTION_GROUPING_ENABLED), q(n), J(n), Ae("mjr-settings-changed", { key: "executionGrouping.enabled" }, { warnPrefix: "[Majoor]" }); + n.executionGrouping = n.executionGrouping || {}, n.executionGrouping.enabled = U(t.enabled, n.executionGrouping.enabled ?? j.EXECUTION_GROUPING_ENABLED), q(n), J(n), ke("mjr-settings-changed", { key: "executionGrouping.enabled" }, { warnPrefix: "[Majoor]" }); } catch (e) { console.warn("[Majoor] failed to sync backend execution grouping settings", e); } @@ -374,22 +374,22 @@ function Rt(e, t) { function zt(e) { let t = String(e?.token_hint || "").trim(), n = f(), r = t || (n ? "(session)" : ""), i = e?.allow_write !== !1, a = e?.require_auth === !0, o = e?.token_configured === !0; return i ? n ? { - text: O("runtime.writeAuthActive", "Write auth: active {tokenHint}", { tokenHint: r || "(session)" }), + text: k("runtime.writeAuthActive", "Write auth: active {tokenHint}", { tokenHint: r || "(session)" }), color: "#7ee0a0" } : a && o ? { - text: O("runtime.writeAuthMissing", "Write auth: missing in this browser {tokenHint}", { tokenHint: r || "(server token configured)" }), + text: k("runtime.writeAuthMissing", "Write auth: missing in this browser {tokenHint}", { tokenHint: r || "(server token configured)" }), color: "#f1c36d" } : a ? { - text: O("runtime.writeAuthRequired", "Write auth: required"), + text: k("runtime.writeAuthRequired", "Write auth: required"), color: "#f1c36d" } : e && typeof e == "object" ? { - text: O("runtime.writeAuthNotRequired", "Write auth: not required"), + text: k("runtime.writeAuthNotRequired", "Write auth: not required"), color: "#8fd0ff" } : { - text: O("runtime.writeAuthUnknown", "Write auth: unknown"), + text: k("runtime.writeAuthUnknown", "Write auth: unknown"), color: "#c8ced8" } : { - text: O("runtime.writeAuthBlocked", "Write auth: writes blocked by server"), + text: k("runtime.writeAuthBlocked", "Write auth: writes blocked by server"), color: "#ff9b9b" }; } @@ -422,15 +422,15 @@ async function Vt() { if (!t) return !1; let n = Rt(t, "metrics"), r = Rt(t, "auth"); try { - let [i, a] = await Promise.all([b(), e()]), o = O("runtime.unavailable", "Runtime: unavailable"); + let [i, a] = await Promise.all([b(), e()]), o = k("runtime.unavailable", "Runtime: unavailable"); if (!i?.ok || !i?.data) n.textContent = o; else { let e = i.data.db || {}, t = i.data.index || {}, r = i.data.watcher || {}, a = Number(e.active_connections || 0), s = Number(t.enrichment_queue_length || 0), c = Number(r.pending_files || 0); - n.textContent = O("runtime.metricsLine", "DB active: {active} | Enrich Q: {enrichQ} | Watcher pending: {pending}", { + n.textContent = k("runtime.metricsLine", "DB active: {active} | Enrich Q: {enrichQ} | Watcher pending: {pending}", { active: a, enrichQ: s, pending: c - }), o = O("runtime.metricsTitle", "Runtime Metrics\nDB active connections: {active}\nEnrichment queue: {enrichQ}\nWatcher pending files: {pending}", { + }), o = k("runtime.metricsTitle", "Runtime Metrics\nDB active connections: {active}\nEnrichment queue: {enrichQ}\nWatcher pending files: {pending}", { active: a, enrichQ: s, pending: c @@ -439,7 +439,7 @@ async function Vt() { let s = zt(a?.data?.prefs || null); return r.textContent = s.text, r.style.color = s.color, t.title = `${o}\n${s.text}`, !0; } catch { - return n.textContent = O("runtime.unavailable", "Runtime: unavailable"), r.textContent = O("runtime.writeAuthUnknown", "Write auth: unknown"), r.style.color = "#c8ced8", t.title = `${O("runtime.unavailable", "Runtime: unavailable")}\n${r.textContent}`, !0; + return n.textContent = k("runtime.unavailable", "Runtime: unavailable"), r.textContent = k("runtime.writeAuthUnknown", "Write auth: unknown"), r.style.color = "#c8ced8", t.title = `${k("runtime.unavailable", "Runtime: unavailable")}\n${r.textContent}`, !0; } } function Ht() { @@ -493,15 +493,15 @@ function Kt(e, t, n) { t ], i = (e) => [ Gt, - O("cat.cards", "Cards"), + k("cat.cards", "Cards"), e ], a = (e) => [ Gt, - O("cat.badges", "Badges"), + k("cat.badges", "Badges"), e ], o = (e) => [ Gt, - O("cat.badges", "Badges"), + k("cat.badges", "Badges"), e ], s = (e, t) => { let n = String(e || "").trim(); @@ -509,30 +509,30 @@ function Kt(e, t, n) { }; t.grid?.minSizePreset || (t.grid = t.grid || {}, t.grid.minSizePreset = kt(t.grid.minSize), q(t)), e({ id: `${Y}.Cards.ThumbSize`, - category: i(O("setting.grid.cardSize.group", "Card size")), - name: O("setting.grid.cardSize.name", "Majoor: Card Size"), - tooltip: O("setting.grid.cardSize.desc", "Choose the card size preset used by the grid layout."), + category: i(k("setting.grid.cardSize.group", "Card size")), + name: k("setting.grid.cardSize.name", "Majoor: Card Size"), + tooltip: k("setting.grid.cardSize.desc", "Choose the card size preset used by the grid layout."), type: "combo", defaultValue: (() => { let e = xt(String(t.grid?.minSizePreset || "").toLowerCase(), Tt, kt(t.grid?.minSize)), n = { - small: O("setting.grid.cardSize.small", "Small"), - medium: O("setting.grid.cardSize.medium", "Medium"), - large: O("setting.grid.cardSize.large", "Large") + small: k("setting.grid.cardSize.small", "Small"), + medium: k("setting.grid.cardSize.medium", "Medium"), + large: k("setting.grid.cardSize.large", "Large") }; return n[e] || n.medium; })(), options: [ - O("setting.grid.cardSize.small", "Small"), - O("setting.grid.cardSize.medium", "Medium"), - O("setting.grid.cardSize.large", "Large") + k("setting.grid.cardSize.small", "Small"), + k("setting.grid.cardSize.medium", "Medium"), + k("setting.grid.cardSize.large", "Large") ], onChange: (e) => { - let r = String(e || "").trim().toLowerCase(), i = O("setting.grid.cardSize.small", "Small").toLowerCase(), a = O("setting.grid.cardSize.medium", "Medium").toLowerCase(), o = O("setting.grid.cardSize.large", "Large").toLowerCase(), s = "medium"; + let r = String(e || "").trim().toLowerCase(), i = k("setting.grid.cardSize.small", "Small").toLowerCase(), a = k("setting.grid.cardSize.medium", "Medium").toLowerCase(), o = k("setting.grid.cardSize.large", "Large").toLowerCase(), s = "medium"; r === i || r === "small" || r === "petit" ? s = "small" : r === o || r === "large" || r === "grand" ? s = "large" : (r === a || r === "medium" || r === "moyen") && (s = "medium"), t.grid.minSizePreset = s, t.grid.minSize = wt[s], q(t), J(t), n("grid.minSizePreset"); } }), e({ id: `${Y}.Cards.CustomThumbSize`, - category: i(O("setting.grid.cardSize.group", "Card size")), + category: i(k("setting.grid.cardSize.group", "Card size")), name: "Majoor: Custom Card Size (px)", tooltip: "Set the minimum card width used by the main grid layout (60-600 px).", type: "number", @@ -592,7 +592,7 @@ function Kt(e, t, n) { name: "Show generation time", tooltip: "Display seconds taken to generate the asset (if available)", type: "boolean", - defaultValue: !!(t.grid?.showGenTime ?? A.GRID_SHOW_DETAILS_GENTIME), + defaultValue: !!(t.grid?.showGenTime ?? j.GRID_SHOW_DETAILS_GENTIME), onChange: (e) => { t.grid.showGenTime = !!e, q(t), J(t), n("grid.showGenTime"); } @@ -602,7 +602,7 @@ function Kt(e, t, n) { name: "Show prompt on hover", tooltip: "Show positive prompt and generation time as a tooltip overlay when hovering over a card thumbnail. Does not block video play-on-hover.", type: "boolean", - defaultValue: !!(t.grid?.showHoverInfo ?? A.GRID_SHOW_HOVER_INFO), + defaultValue: !!(t.grid?.showHoverInfo ?? j.GRID_SHOW_HOVER_INFO), onChange: (e) => { t.grid.showHoverInfo = !!e, q(t), J(t), n("grid.showHoverInfo"); } @@ -648,88 +648,88 @@ function Kt(e, t, n) { } }), e({ id: `${Y}.Badges.StarColor`, - category: o(O("setting.starColor", "Star color")), - name: O("setting.starColor", "Majoor: Star color"), - tooltip: O("setting.starColor.tooltip", "Color of rating stars on thumbnails (hex, e.g. #FFD45A)"), + category: o(k("setting.starColor", "Star color")), + name: k("setting.starColor", "Majoor: Star color"), + tooltip: k("setting.starColor.tooltip", "Color of rating stars on thumbnails (hex, e.g. #FFD45A)"), type: "color", - defaultValue: s(t.grid?.starColor, A.BADGE_STAR_COLOR), + defaultValue: s(t.grid?.starColor, j.BADGE_STAR_COLOR), onChange: (e) => { - t.grid.starColor = s(e, A.BADGE_STAR_COLOR), q(t), J(t), n("grid.starColor"); + t.grid.starColor = s(e, j.BADGE_STAR_COLOR), q(t), J(t), n("grid.starColor"); } }), e({ id: `${Y}.Badges.ImageColor`, - category: o(O("setting.badgeImageColor", "Image badge color")), - name: O("setting.badgeImageColor", "Majoor: Image badge color"), - tooltip: O("setting.badgeImageColor.tooltip", "Color for image badges: PNG, JPG, WEBP, GIF, BMP, TIF (hex)"), + category: o(k("setting.badgeImageColor", "Image badge color")), + name: k("setting.badgeImageColor", "Majoor: Image badge color"), + tooltip: k("setting.badgeImageColor.tooltip", "Color for image badges: PNG, JPG, WEBP, GIF, BMP, TIF (hex)"), type: "color", - defaultValue: s(t.grid?.badgeImageColor, A.BADGE_IMAGE_COLOR), + defaultValue: s(t.grid?.badgeImageColor, j.BADGE_IMAGE_COLOR), onChange: (e) => { - t.grid.badgeImageColor = s(e, A.BADGE_IMAGE_COLOR), q(t), J(t), n("grid.badgeImageColor"); + t.grid.badgeImageColor = s(e, j.BADGE_IMAGE_COLOR), q(t), J(t), n("grid.badgeImageColor"); } }), e({ id: `${Y}.Badges.VideoColor`, - category: o(O("setting.badgeVideoColor", "Video badge color")), - name: O("setting.badgeVideoColor", "Majoor: Video badge color"), - tooltip: O("setting.badgeVideoColor.tooltip", "Color for video badges: MP4, WEBM, MOV, AVI, MKV (hex)"), + category: o(k("setting.badgeVideoColor", "Video badge color")), + name: k("setting.badgeVideoColor", "Majoor: Video badge color"), + tooltip: k("setting.badgeVideoColor.tooltip", "Color for video badges: MP4, WEBM, MOV, AVI, MKV (hex)"), type: "color", - defaultValue: s(t.grid?.badgeVideoColor, A.BADGE_VIDEO_COLOR), + defaultValue: s(t.grid?.badgeVideoColor, j.BADGE_VIDEO_COLOR), onChange: (e) => { - t.grid.badgeVideoColor = s(e, A.BADGE_VIDEO_COLOR), q(t), J(t), n("grid.badgeVideoColor"); + t.grid.badgeVideoColor = s(e, j.BADGE_VIDEO_COLOR), q(t), J(t), n("grid.badgeVideoColor"); } }), e({ id: `${Y}.Badges.AudioColor`, - category: o(O("setting.badgeAudioColor", "Audio badge color")), - name: O("setting.badgeAudioColor", "Majoor: Audio badge color"), - tooltip: O("setting.badgeAudioColor.tooltip", "Color for audio badges: MP3, WAV, OGG, FLAC (hex)"), + category: o(k("setting.badgeAudioColor", "Audio badge color")), + name: k("setting.badgeAudioColor", "Majoor: Audio badge color"), + tooltip: k("setting.badgeAudioColor.tooltip", "Color for audio badges: MP3, WAV, OGG, FLAC (hex)"), type: "color", - defaultValue: s(t.grid?.badgeAudioColor, A.BADGE_AUDIO_COLOR), + defaultValue: s(t.grid?.badgeAudioColor, j.BADGE_AUDIO_COLOR), onChange: (e) => { - t.grid.badgeAudioColor = s(e, A.BADGE_AUDIO_COLOR), q(t), J(t), n("grid.badgeAudioColor"); + t.grid.badgeAudioColor = s(e, j.BADGE_AUDIO_COLOR), q(t), J(t), n("grid.badgeAudioColor"); } }), e({ id: `${Y}.Badges.Model3dColor`, - category: o(O("setting.badgeModel3dColor", "3D model badge color")), - name: O("setting.badgeModel3dColor", "Majoor: 3D model badge color"), - tooltip: O("setting.badgeModel3dColor.tooltip", "Color for 3D model badges: OBJ, FBX, GLB, GLTF (hex)"), + category: o(k("setting.badgeModel3dColor", "3D model badge color")), + name: k("setting.badgeModel3dColor", "Majoor: 3D model badge color"), + tooltip: k("setting.badgeModel3dColor.tooltip", "Color for 3D model badges: OBJ, FBX, GLB, GLTF (hex)"), type: "color", - defaultValue: s(t.grid?.badgeModel3dColor, A.BADGE_MODEL3D_COLOR), + defaultValue: s(t.grid?.badgeModel3dColor, j.BADGE_MODEL3D_COLOR), onChange: (e) => { - t.grid.badgeModel3dColor = s(e, A.BADGE_MODEL3D_COLOR), q(t), J(t), n("grid.badgeModel3dColor"); + t.grid.badgeModel3dColor = s(e, j.BADGE_MODEL3D_COLOR), q(t), J(t), n("grid.badgeModel3dColor"); } }), e({ id: `${Y}.Badges.DuplicateAlertColor`, - category: o(O("setting.badgeDuplicateAlertColor", "Duplicate alert badge color")), - name: O("setting.badgeDuplicateAlertColor", "Majoor: Duplicate alert badge color"), - tooltip: O("setting.badgeDuplicateAlertColor.tooltip", "Color for duplicate extension badges (PNG+, JPG+, etc)."), + category: o(k("setting.badgeDuplicateAlertColor", "Duplicate alert badge color")), + name: k("setting.badgeDuplicateAlertColor", "Majoor: Duplicate alert badge color"), + tooltip: k("setting.badgeDuplicateAlertColor.tooltip", "Color for duplicate extension badges (PNG+, JPG+, etc)."), type: "color", - defaultValue: s(t.grid?.badgeDuplicateAlertColor, A.BADGE_DUPLICATE_ALERT_COLOR), + defaultValue: s(t.grid?.badgeDuplicateAlertColor, j.BADGE_DUPLICATE_ALERT_COLOR), onChange: (e) => { - t.grid.badgeDuplicateAlertColor = s(e, A.BADGE_DUPLICATE_ALERT_COLOR), q(t), J(t), n("grid.badgeDuplicateAlertColor"); + t.grid.badgeDuplicateAlertColor = s(e, j.BADGE_DUPLICATE_ALERT_COLOR), q(t), J(t), n("grid.badgeDuplicateAlertColor"); } }), e({ id: `${Y}.Grid.PageSize`, - category: r(O("cat.grid"), O("setting.grid.pagesize.name").replace("Majoor: ", "")), - name: O("setting.grid.pagesize.name"), - tooltip: O("setting.grid.pagesize.desc"), + category: r(k("cat.grid"), k("setting.grid.pagesize.name").replace("Majoor: ", "")), + name: k("setting.grid.pagesize.name"), + tooltip: k("setting.grid.pagesize.desc"), type: "number", defaultValue: t.grid.pageSize, attrs: { min: 50, - max: Number(k.MAX_PAGE_SIZE) || 2e3, + max: Number(A.MAX_PAGE_SIZE) || 2e3, step: 50 }, onChange: (e) => { - let r = Number(k.MAX_PAGE_SIZE) || 2e3; - t.grid.pageSize = Math.max(50, Math.min(r, Number(e) || A.DEFAULT_PAGE_SIZE)), q(t), J(t), n("grid.pageSize"); + let r = Number(A.MAX_PAGE_SIZE) || 2e3; + t.grid.pageSize = Math.max(50, Math.min(r, Number(e) || j.DEFAULT_PAGE_SIZE)), q(t), J(t), n("grid.pageSize"); } }), e({ id: `${Y}.Grid.WorkflowGroupBy`, - category: r(O("cat.grid"), "Workflow grouping"), + category: r(k("cat.grid"), "Workflow grouping"), name: "Workflow grid grouping", tooltip: "In Workflow scope, insert titled separators and group cards by Task, Model, or Category.", type: "combo", defaultValue: (() => { - let e = String(t.grid?.workflowGroupBy || A.WORKFLOW_GRID_GROUP_BY).trim().toLowerCase(), n = { + let e = String(t.grid?.workflowGroupBy || j.WORKFLOW_GRID_GROUP_BY).trim().toLowerCase(), n = { none: "None", task: "Task", model: "Model", @@ -754,9 +754,9 @@ function Kt(e, t, n) { } }), e({ id: `${Y}.InfiniteScroll.Enabled`, - category: r(O("cat.grid"), O("setting.nav.infinite.name").replace("Majoor: ", "")), - name: O("setting.nav.infinite.name"), - tooltip: O("setting.nav.infinite.desc"), + category: r(k("cat.grid"), k("setting.nav.infinite.name").replace("Majoor: ", "")), + name: k("setting.nav.infinite.name"), + tooltip: k("setting.nav.infinite.desc"), type: "boolean", defaultValue: !!t.infiniteScroll?.enabled, onChange: (e) => { @@ -764,9 +764,9 @@ function Kt(e, t, n) { } }), e({ id: `${Y}.Sidebar.Position`, - category: r(O("cat.grid"), O("setting.sidebar.pos.name").replace("Majoor: ", "")), - name: O("setting.sidebar.pos.name"), - tooltip: O("setting.sidebar.pos.desc"), + category: r(k("cat.grid"), k("setting.sidebar.pos.name").replace("Majoor: ", "")), + name: k("setting.sidebar.pos.name"), + tooltip: k("setting.sidebar.pos.desc"), type: "combo", defaultValue: t.sidebar?.position || "right", options: ["left", "right"], @@ -775,7 +775,7 @@ function Kt(e, t, n) { } }), e({ id: `${Y}.Sidebar.ShowPreviewThumb`, - category: r(O("cat.grid"), "Sidebar preview"), + category: r(k("cat.grid"), "Sidebar preview"), name: "Show sidebar preview thumb", tooltip: "Show/hide the large media preview at the top of the sidebar metadata panel.", type: "boolean", @@ -785,17 +785,17 @@ function Kt(e, t, n) { } }), e({ id: `${Y}.Sidebar.AssetBadgeEnabled`, - category: r(O("cat.grid"), "Sidebar asset notification badge"), + category: r(k("cat.grid"), "Sidebar asset notification badge"), name: "Show new asset badge on sidebar icon", tooltip: "Display a small counter on the Majoor sidebar icon only when a new asset is indexed by Assets Manager.", type: "boolean", - defaultValue: !!(t.sidebar?.assetBadgeEnabled ?? A.SIDEBAR_ASSET_BADGE_ENABLED), + defaultValue: !!(t.sidebar?.assetBadgeEnabled ?? j.SIDEBAR_ASSET_BADGE_ENABLED), onChange: (e) => { t.sidebar = t.sidebar || {}, t.sidebar.assetBadgeEnabled = !!e, q(t), J(t), n("sidebar.assetBadgeEnabled"); } }), e({ id: `${Y}.Sidebar.WidthPx`, - category: r(O("cat.grid"), "Sidebar width"), + category: r(k("cat.grid"), "Sidebar width"), name: "Sidebar width (px)", tooltip: "Set the details sidebar width in pixels (240-640).", type: "number", @@ -810,9 +810,9 @@ function Kt(e, t, n) { } }), e({ id: `${Y}.General.HideSiblings`, - category: r(O("cat.grid"), O("setting.siblings.hide.name").replace("Majoor: ", "")), - name: O("setting.siblings.hide.name"), - tooltip: O("setting.siblings.hide.desc"), + category: r(k("cat.grid"), k("setting.siblings.hide.name").replace("Majoor: ", "")), + name: k("setting.siblings.hide.name"), + tooltip: k("setting.siblings.hide.desc"), type: "boolean", defaultValue: !!t.siblings?.hidePngSiblings, onChange: (e) => { @@ -820,30 +820,30 @@ function Kt(e, t, n) { } }), e({ id: `${Y}.Grid.VideoAutoplayMode`, - category: r(O("cat.grid"), O("setting.grid.videoAutoplayMode.name", "Video autoplay").replace("Majoor: ", "")), - name: O("setting.grid.videoAutoplayMode.name", "Majoor: Video autoplay"), - tooltip: O("setting.grid.videoAutoplayMode.desc", "Controls video thumbnail playback in the grid. Off: static frame. Hover: play on mouse hover. Always: loop while visible."), + category: r(k("cat.grid"), k("setting.grid.videoAutoplayMode.name", "Video autoplay").replace("Majoor: ", "")), + name: k("setting.grid.videoAutoplayMode.name", "Majoor: Video autoplay"), + tooltip: k("setting.grid.videoAutoplayMode.desc", "Controls video thumbnail playback in the grid. Off: static frame. Hover: play on mouse hover. Always: loop while visible."), type: "combo", defaultValue: (() => { let e = t.grid?.videoAutoplayMode; e ??= t.grid?.videoHoverAutoplay === !1 ? "off" : "hover", e === !0 && (e = "hover"), e === !1 && (e = "off"), e !== "hover" && e !== "always" && e !== "off" && (e = "hover"); let n = { - off: O("setting.grid.videoAutoplayMode.off", "Off"), - hover: O("setting.grid.videoAutoplayMode.hover", "Hover"), - always: O("setting.grid.videoAutoplayMode.always", "Always") + off: k("setting.grid.videoAutoplayMode.off", "Off"), + hover: k("setting.grid.videoAutoplayMode.hover", "Hover"), + always: k("setting.grid.videoAutoplayMode.always", "Always") }; return n[e] || n.off; })(), options: [ - O("setting.grid.videoAutoplayMode.off", "Off"), - O("setting.grid.videoAutoplayMode.hover", "Hover"), - O("setting.grid.videoAutoplayMode.always", "Always") + k("setting.grid.videoAutoplayMode.off", "Off"), + k("setting.grid.videoAutoplayMode.hover", "Hover"), + k("setting.grid.videoAutoplayMode.always", "Always") ], onChange: (e) => { let r = { - [O("setting.grid.videoAutoplayMode.off", "Off")]: "off", - [O("setting.grid.videoAutoplayMode.hover", "Hover")]: "hover", - [O("setting.grid.videoAutoplayMode.always", "Always")]: "always" + [k("setting.grid.videoAutoplayMode.off", "Off")]: "off", + [k("setting.grid.videoAutoplayMode.hover", "Hover")]: "hover", + [k("setting.grid.videoAutoplayMode.always", "Always")]: "always" }[e] || "off"; t.grid = t.grid || {}, t.grid.videoAutoplayMode = r, delete t.grid.videoHoverAutoplay, q(t), J(t), n("grid.videoAutoplayMode"); } @@ -853,9 +853,9 @@ function Kt(e, t, n) { name: "Majoor: Card hover color", tooltip: "Background tint used when hovering a card (hex, e.g. #3D3D3D).", type: "color", - defaultValue: s(t.ui?.cardHoverColor, A.UI_CARD_HOVER_COLOR), + defaultValue: s(t.ui?.cardHoverColor, j.UI_CARD_HOVER_COLOR), onChange: (e) => { - t.ui = t.ui || {}, t.ui.cardHoverColor = s(e, A.UI_CARD_HOVER_COLOR), q(t), J(t), n("ui.cardHoverColor"); + t.ui = t.ui || {}, t.ui.cardHoverColor = s(e, j.UI_CARD_HOVER_COLOR), q(t), J(t), n("ui.cardHoverColor"); } }), e({ id: `${Y}.Cards.SelectionColor`, @@ -863,9 +863,9 @@ function Kt(e, t, n) { name: "Majoor: Card selection color", tooltip: "Outline/accent color used for selected cards (hex, e.g. #4A90E2).", type: "color", - defaultValue: s(t.ui?.cardSelectionColor, A.UI_CARD_SELECTION_COLOR), + defaultValue: s(t.ui?.cardSelectionColor, j.UI_CARD_SELECTION_COLOR), onChange: (e) => { - t.ui = t.ui || {}, t.ui.cardSelectionColor = s(e, A.UI_CARD_SELECTION_COLOR), q(t), J(t), n("ui.cardSelectionColor"); + t.ui = t.ui || {}, t.ui.cardSelectionColor = s(e, j.UI_CARD_SELECTION_COLOR), q(t), J(t), n("ui.cardSelectionColor"); } }), e({ id: `${Y}.Badges.RatingColor`, @@ -873,9 +873,9 @@ function Kt(e, t, n) { name: "Majoor: Rating badge color", tooltip: "Color used for rating badge text/accent (hex, e.g. #FF9500).", type: "color", - defaultValue: s(t.ui?.ratingColor, A.UI_RATING_COLOR), + defaultValue: s(t.ui?.ratingColor, j.UI_RATING_COLOR), onChange: (e) => { - t.ui = t.ui || {}, t.ui.ratingColor = s(e, A.UI_RATING_COLOR), q(t), J(t), n("ui.ratingColor"); + t.ui = t.ui || {}, t.ui.ratingColor = s(e, j.UI_RATING_COLOR), q(t), J(t), n("ui.ratingColor"); } }), e({ id: `${Y}.Badges.TagColor`, @@ -883,9 +883,9 @@ function Kt(e, t, n) { name: "Majoor: Tags badge color", tooltip: "Color used for tags badge text/accent (hex, e.g. #4A90E2).", type: "color", - defaultValue: s(t.ui?.tagColor, A.UI_TAG_COLOR), + defaultValue: s(t.ui?.tagColor, j.UI_TAG_COLOR), onChange: (e) => { - t.ui = t.ui || {}, t.ui.tagColor = s(e, A.UI_TAG_COLOR), q(t), J(t), n("ui.tagColor"); + t.ui = t.ui || {}, t.ui.tagColor = s(e, j.UI_TAG_COLOR), q(t), J(t), n("ui.tagColor"); } }); } @@ -897,12 +897,12 @@ function Yt(e, t, n) { Jt, e, t - ], i = (e) => r(O("cat.viewer", "Viewer"), e), a = (e) => r(O("cat.floatingViewer", "Floating Viewer"), e); + ], i = (e) => r(k("cat.viewer", "Viewer"), e), a = (e) => r(k("cat.floatingViewer", "Floating Viewer"), e); e({ id: `${qt}.Viewer.AllowPanAtZoom1`, - category: i(O("setting.viewer.pan.name").replace("Majoor: ", "")), - name: O("setting.viewer.pan.name"), - tooltip: O("setting.viewer.pan.desc"), + category: i(k("setting.viewer.pan.name").replace("Majoor: ", "")), + name: k("setting.viewer.pan.name"), + tooltip: k("setting.viewer.pan.desc"), type: "boolean", defaultValue: !!t.viewer?.allowPanAtZoom1, onChange: (e) => { @@ -920,9 +920,9 @@ function Yt(e, t, n) { } }), e({ id: `${qt}.Viewer.PauseDuringExecution`, - category: i(O("setting.viewer.pauseExecution.name").replace("Majoor: ", "")), - name: O("setting.viewer.pauseExecution.name"), - tooltip: O("setting.viewer.pauseExecution.desc"), + category: i(k("setting.viewer.pauseExecution.name").replace("Majoor: ", "")), + name: k("setting.viewer.pauseExecution.name"), + tooltip: k("setting.viewer.pauseExecution.desc"), type: "boolean", defaultValue: !!t.viewer?.pauseDuringExecution, onChange: (e) => { @@ -930,9 +930,9 @@ function Yt(e, t, n) { } }), e({ id: `${qt}.Viewer.FloatingPauseDuringExecution`, - category: a(O("setting.viewer.floatingPauseExecution.name").replace("Majoor: ", "")), - name: O("setting.viewer.floatingPauseExecution.name"), - tooltip: O("setting.viewer.floatingPauseExecution.desc"), + category: a(k("setting.viewer.floatingPauseExecution.name").replace("Majoor: ", "")), + name: k("setting.viewer.floatingPauseExecution.name"), + tooltip: k("setting.viewer.floatingPauseExecution.desc"), type: "boolean", defaultValue: !!t.viewer?.floatingPauseDuringExecution, onChange: (e) => { @@ -940,21 +940,21 @@ function Yt(e, t, n) { } }), e({ id: `${qt}.Viewer.MfvLiveDefault`, - category: a(O("setting.viewer.mfvLiveDefault.name").replace("Majoor: ", "")), - name: O("setting.viewer.mfvLiveDefault.name"), - tooltip: O("setting.viewer.mfvLiveDefault.desc"), + category: a(k("setting.viewer.mfvLiveDefault.name").replace("Majoor: ", "")), + name: k("setting.viewer.mfvLiveDefault.name"), + tooltip: k("setting.viewer.mfvLiveDefault.desc"), type: "boolean", - defaultValue: !!(t.viewer?.mfvLiveDefault ?? A.MFV_LIVE_DEFAULT), + defaultValue: !!(t.viewer?.mfvLiveDefault ?? j.MFV_LIVE_DEFAULT), onChange: (e) => { t.viewer = t.viewer || {}, t.viewer.mfvLiveDefault = !!e, q(t), J(t), n("viewer.mfvLiveDefault"); } }), e({ id: `${qt}.Viewer.MfvPreviewDefault`, - category: a(O("setting.viewer.mfvPreviewDefault.name").replace("Majoor: ", "")), - name: O("setting.viewer.mfvPreviewDefault.name"), - tooltip: O("setting.viewer.mfvPreviewDefault.desc"), + category: a(k("setting.viewer.mfvPreviewDefault.name").replace("Majoor: ", "")), + name: k("setting.viewer.mfvPreviewDefault.name"), + tooltip: k("setting.viewer.mfvPreviewDefault.desc"), type: "boolean", - defaultValue: !!(t.viewer?.mfvPreviewDefault ?? A.MFV_PREVIEW_DEFAULT), + defaultValue: !!(t.viewer?.mfvPreviewDefault ?? j.MFV_PREVIEW_DEFAULT), onChange: (e) => { t.viewer = t.viewer || {}, t.viewer.mfvPreviewDefault = !!e, q(t), J(t), n("viewer.mfvPreviewDefault"); } @@ -980,11 +980,11 @@ function Yt(e, t, n) { } }), e({ id: `${qt}.Viewer.MfvPreviewMethod`, - category: a(O("setting.viewer.mfvPreviewMethod.name").replace("Majoor: ", "")), - name: O("setting.viewer.mfvPreviewMethod.name"), - tooltip: O("setting.viewer.mfvPreviewMethod.desc"), + category: a(k("setting.viewer.mfvPreviewMethod.name").replace("Majoor: ", "")), + name: k("setting.viewer.mfvPreviewMethod.name"), + tooltip: k("setting.viewer.mfvPreviewMethod.desc"), type: "combo", - defaultValue: t.viewer?.mfvPreviewMethod || A.MFV_PREVIEW_METHOD, + defaultValue: t.viewer?.mfvPreviewMethod || j.MFV_PREVIEW_METHOD, options: [ "taesd", "latent2rgb", @@ -999,7 +999,7 @@ function Yt(e, t, n) { "auto", "default", "none" - ].includes(e) ? e : A.MFV_PREVIEW_METHOD; + ].includes(e) ? e : j.MFV_PREVIEW_METHOD; t.viewer = t.viewer || {}, t.viewer.mfvPreviewMethod = r, q(t), J(t), n("viewer.mfvPreviewMethod"); } }), e({ @@ -1013,7 +1013,7 @@ function Yt(e, t, n) { let r = !!e, i = !!t.viewer?.ltxavRgbFallback; t.viewer = t.viewer || {}, t.viewer.ltxavRgbFallback = r, q(t), J(t), n("viewer.ltxavRgbFallback"); try { - let e = await ie(r); + let e = await E(r); if (!e?.ok) throw Error(e?.error || "Failed to update LTXAV RGB preview fallback setting"); } catch (e) { t.viewer.ltxavRgbFallback = i, q(t), J(t), n("viewer.ltxavRgbFallback"), T(e?.message || "Failed to update LTXAV RGB preview fallback setting", "error"); @@ -1032,9 +1032,9 @@ function Yt(e, t, n) { ((r, a, o, s) => { e({ id: `${qt}.WorkflowMinimap.${r}`, - category: i(O(o).replace("Majoor: ", "")), - name: O(o), - tooltip: O(s), + category: i(k(o).replace("Majoor: ", "")), + name: k(o), + tooltip: k(s), type: "boolean", defaultValue: !!t.workflowMinimap?.[a], onChange: (e) => { @@ -1054,16 +1054,16 @@ function Qt(e, t, n) { ]; e({ id: `${Xt}.ExecutionGrouping.Enabled`, - category: r(O("cat.scanning"), "Execution grouping"), + category: r(k("cat.scanning"), "Execution grouping"), name: "Execution job/stack grouping", tooltip: "Enable or disable all live job_id / stack_id tracking, grouping, and stack finalization logic.", type: "boolean", - defaultValue: !!(t.executionGrouping?.enabled ?? A.EXECUTION_GROUPING_ENABLED), + defaultValue: !!(t.executionGrouping?.enabled ?? j.EXECUTION_GROUPING_ENABLED), onChange: async (e) => { - let r = !!(t.executionGrouping?.enabled ?? A.EXECUTION_GROUPING_ENABLED), i = !!e; + let r = !!(t.executionGrouping?.enabled ?? j.EXECUTION_GROUPING_ENABLED), i = !!e; t.executionGrouping = t.executionGrouping || {}, t.executionGrouping.enabled = i, q(t), J(t), n("executionGrouping.enabled"); try { - let e = await E(i); + let e = await re(i); if (!e?.ok) throw Error(e?.error || "Failed to update execution grouping setting"); t.executionGrouping.enabled = !!e?.data?.prefs?.enabled, q(t), J(t), n("executionGrouping.enabled"); } catch (e) { @@ -1072,9 +1072,9 @@ function Qt(e, t, n) { } }), e({ id: `${Xt}.AutoScan.OnStartup`, - category: r(O("cat.scanning"), O("setting.scan.startup.name").replace("Majoor: ", "")), - name: O("setting.scan.startup.name"), - tooltip: O("setting.scan.startup.desc"), + category: r(k("cat.scanning"), k("setting.scan.startup.name").replace("Majoor: ", "")), + name: k("setting.scan.startup.name"), + tooltip: k("setting.scan.startup.desc"), type: "boolean", defaultValue: !!t.autoScan?.onStartup, onChange: (e) => { @@ -1082,7 +1082,7 @@ function Qt(e, t, n) { } }), e({ id: `${Xt}.Scan.FastMode`, - category: r(O("cat.scanning"), "Scan mode"), + category: r(k("cat.scanning"), "Scan mode"), name: "Fast scan mode", tooltip: "Use fast scan mode for manual backfill scans (skip heavier metadata work during scan).", type: "boolean", @@ -1092,18 +1092,18 @@ function Qt(e, t, n) { } }), e({ id: `${Xt}.RtHydrate.Concurrency`, - category: r(O("cat.scanning"), "Hydration"), + category: r(k("cat.scanning"), "Hydration"), name: "Hydrate Concurrency", tooltip: "Maximum concurrent hydration requests for rating/tags.", type: "number", - defaultValue: Number(t.rtHydrate?.concurrency || A.RT_HYDRATE_CONCURRENCY || 5), + defaultValue: Number(t.rtHydrate?.concurrency || j.RT_HYDRATE_CONCURRENCY || 5), attrs: { min: 1, max: 20, step: 1 }, onChange: (e) => { - t.rtHydrate = t.rtHydrate || {}, t.rtHydrate.concurrency = Math.max(1, Math.min(20, Math.round(W(e, A.RT_HYDRATE_CONCURRENCY || 5)))), q(t), J(t), n("rtHydrate.concurrency"); + t.rtHydrate = t.rtHydrate || {}, t.rtHydrate.concurrency = Math.max(1, Math.min(20, Math.round(W(e, j.RT_HYDRATE_CONCURRENCY || 5)))), q(t), J(t), n("rtHydrate.concurrency"); } }); let i = (e, t, n, r) => { @@ -1122,7 +1122,7 @@ function Qt(e, t, n) { r.length && (q(t), r.forEach((e) => n(e))); }, o = async () => { try { - let e = await fe(); + let e = await de(); if (!e?.ok) return; a(e.data || {}); } catch (e) { @@ -1131,75 +1131,75 @@ function Qt(e, t, n) { }; e({ id: `${Xt}.Watcher.Enabled`, - category: r(O("cat.scanning"), O("setting.watcher.enabled.label", "Enable watcher")), - name: O("setting.watcher.name"), - tooltip: O("setting.watcher.desc") + " (env: MJR_ENABLE_WATCHER)", + category: r(k("cat.scanning"), k("setting.watcher.enabled.label", "Enable watcher")), + name: k("setting.watcher.name"), + tooltip: k("setting.watcher.desc") + " (env: MJR_ENABLE_WATCHER)", type: "boolean", defaultValue: !!t.watcher?.enabled, onChange: async (e) => { t.watcher = t.watcher || {}, t.watcher.enabled = !!e, q(t), n("watcher.enabled"); try { - let r = await ce(!!e); - r?.ok || (t.watcher.enabled = !e, q(t), n("watcher.enabled"), T(r?.error || O("toast.failedToggleWatcher", "Failed to toggle watcher"), "error")); + let r = await O(!!e); + r?.ok || (t.watcher.enabled = !e, q(t), n("watcher.enabled"), T(r?.error || k("toast.failedToggleWatcher", "Failed to toggle watcher"), "error")); } catch { t.watcher.enabled = !e, q(t), n("watcher.enabled"); } } }), e({ id: `${Xt}.Watcher.DebounceDelay`, - category: r(O("cat.scanning"), O("setting.watcher.debounce.label", "Watcher debounce delay")), - name: O("setting.watcher.debounce.name"), - tooltip: O("setting.watcher.debounce.desc") + " (env: MJR_WATCHER_DEBOUNCE_MS)", + category: r(k("cat.scanning"), k("setting.watcher.debounce.label", "Watcher debounce delay")), + name: k("setting.watcher.debounce.name"), + tooltip: k("setting.watcher.debounce.desc") + " (env: MJR_WATCHER_DEBOUNCE_MS)", type: "number", - defaultValue: t.watcher?.debounceMs ?? A.WATCHER_DEBOUNCE_MS, + defaultValue: t.watcher?.debounceMs ?? j.WATCHER_DEBOUNCE_MS, attrs: { min: 50, max: 6e4, step: 50 }, onChange: async (e) => { - let r = A.WATCHER_DEBOUNCE_MS, a = i(e, r, 50, 6e4), o = t.watcher?.debounceMs ?? r; + let r = j.WATCHER_DEBOUNCE_MS, a = i(e, r, 50, 6e4), o = t.watcher?.debounceMs ?? r; if (a !== o) { t.watcher = t.watcher || {}, t.watcher.debounceMs = a, q(t); try { let e = await v({ debounce_ms: a }); - if (!e?.ok) throw Error(e?.error || O("setting.watcher.debounce.error")); + if (!e?.ok) throw Error(e?.error || k("setting.watcher.debounce.error")); let r = Math.round(Number(e?.data?.debounce_ms ?? a)); t.watcher.debounceMs = r, q(t), n("watcher.debounceMs"); } catch (e) { - t.watcher.debounceMs = o, q(t), n("watcher.debounceMs"), T(e?.message || O("setting.watcher.debounce.error"), "error"); + t.watcher.debounceMs = o, q(t), n("watcher.debounceMs"), T(e?.message || k("setting.watcher.debounce.error"), "error"); } } } }), e({ id: `${Xt}.Watcher.DedupeWindow`, - category: r(O("cat.scanning"), O("setting.watcher.dedupe.label", "Watcher dedupe window")), - name: O("setting.watcher.dedupe.name"), - tooltip: O("setting.watcher.dedupe.desc") + " (env: MJR_WATCHER_DEDUPE_TTL_MS)", + category: r(k("cat.scanning"), k("setting.watcher.dedupe.label", "Watcher dedupe window")), + name: k("setting.watcher.dedupe.name"), + tooltip: k("setting.watcher.dedupe.desc") + " (env: MJR_WATCHER_DEDUPE_TTL_MS)", type: "number", - defaultValue: t.watcher?.dedupeTtlMs ?? A.WATCHER_DEDUPE_TTL_MS, + defaultValue: t.watcher?.dedupeTtlMs ?? j.WATCHER_DEDUPE_TTL_MS, attrs: { min: 100, max: 12e4, step: 100 }, onChange: async (e) => { - let r = A.WATCHER_DEDUPE_TTL_MS, a = i(e, r, 100, 12e4), o = t.watcher?.dedupeTtlMs ?? r; + let r = j.WATCHER_DEDUPE_TTL_MS, a = i(e, r, 100, 12e4), o = t.watcher?.dedupeTtlMs ?? r; if (a !== o) { t.watcher = t.watcher || {}, t.watcher.dedupeTtlMs = a, q(t); try { let e = await v({ dedupe_ttl_ms: a }); - if (!e?.ok) throw Error(e?.error || O("setting.watcher.dedupe.error")); + if (!e?.ok) throw Error(e?.error || k("setting.watcher.dedupe.error")); let r = Math.round(Number(e?.data?.dedupe_ttl_ms ?? a)); t.watcher.dedupeTtlMs = r, q(t), n("watcher.dedupeTtlMs"); } catch (e) { - t.watcher.dedupeTtlMs = o, q(t), n("watcher.dedupeTtlMs"), T(e?.message || O("setting.watcher.dedupe.error"), "error"); + t.watcher.dedupeTtlMs = o, q(t), n("watcher.dedupeTtlMs"), T(e?.message || k("setting.watcher.dedupe.error"), "error"); } } } }), e({ id: `${Xt}.Watcher.MaxPending`, - category: r(O("cat.scanning"), "Watcher queue"), + category: r(k("cat.scanning"), "Watcher queue"), name: "Watcher: max pending files", tooltip: "Maximum number of pending watcher files kept in memory.", type: "number", @@ -1214,7 +1214,7 @@ function Qt(e, t, n) { } }), e({ id: `${Xt}.Watcher.MinSize`, - category: r(O("cat.scanning"), "Watcher file size"), + category: r(k("cat.scanning"), "Watcher file size"), name: "Watcher: min size (bytes)", tooltip: "Minimum file size indexed by watcher.", type: "number", @@ -1229,7 +1229,7 @@ function Qt(e, t, n) { } }), e({ id: `${Xt}.Watcher.MaxSize`, - category: r(O("cat.scanning"), "Watcher file size"), + category: r(k("cat.scanning"), "Watcher file size"), name: "Watcher: max size (bytes)", tooltip: "Maximum file size indexed by watcher.", type: "number", @@ -1250,9 +1250,9 @@ function Qt(e, t, n) { } e({ id: `${Xt}.RatingTagsSync.Enabled`, - category: r(O("cat.scanning"), O("setting.sync.rating.name").replace("Majoor: ", "")), - name: O("setting.sync.rating.name"), - tooltip: O("setting.sync.rating.desc"), + category: r(k("cat.scanning"), k("setting.sync.rating.name").replace("Majoor: ", "")), + name: k("setting.sync.rating.name"), + tooltip: k("setting.sync.rating.desc"), type: "boolean", defaultValue: !!t.ratingTagsSync?.enabled, onChange: (e) => { @@ -1266,7 +1266,7 @@ var $t = "Majoor", en = "Majoor Assets Manager"; function tn(e, t, n) { let r = (e) => [ en, - O("cat.feed", "Generated Feed"), + k("cat.feed", "Generated Feed"), e ], i = () => { t.feed = t.feed || {}; @@ -1292,7 +1292,7 @@ function tn(e, t, n) { name: "Show card info section", tooltip: "Show or hide the entire info section (filename, metadata, dots) below thumbnails in the Generated Feed.", type: "boolean", - defaultValue: !!(t.feed?.showInfo ?? A.FEED_SHOW_INFO), + defaultValue: !!(t.feed?.showInfo ?? j.FEED_SHOW_INFO), onChange: (e) => { i(), t.feed.showInfo = !!e, q(t), J(t), n("feed.showInfo"); } @@ -1302,7 +1302,7 @@ function tn(e, t, n) { name: "Show filename", tooltip: "Display the filename on feed cards.", type: "boolean", - defaultValue: !!(t.feed?.showFilename ?? A.FEED_SHOW_FILENAME), + defaultValue: !!(t.feed?.showFilename ?? j.FEED_SHOW_FILENAME), onChange: (e) => { i(), t.feed.showFilename = !!e, q(t), J(t), n("feed.showFilename"); } @@ -1312,7 +1312,7 @@ function tn(e, t, n) { name: "Show dimensions", tooltip: "Display resolution (WxH) and duration on feed cards.", type: "boolean", - defaultValue: !!(t.feed?.showDimensions ?? A.FEED_SHOW_DIMENSIONS), + defaultValue: !!(t.feed?.showDimensions ?? j.FEED_SHOW_DIMENSIONS), onChange: (e) => { i(), t.feed.showDimensions = !!e, q(t), J(t), n("feed.showDimensions"); } @@ -1322,7 +1322,7 @@ function tn(e, t, n) { name: "Show date/time", tooltip: "Display date and time on feed cards.", type: "boolean", - defaultValue: !!(t.feed?.showDate ?? A.FEED_SHOW_DATE), + defaultValue: !!(t.feed?.showDate ?? j.FEED_SHOW_DATE), onChange: (e) => { i(), t.feed.showDate = !!e, q(t), J(t), n("feed.showDate"); } @@ -1332,7 +1332,7 @@ function tn(e, t, n) { name: "Show generation time", tooltip: "Display the generation time badge on feed cards.", type: "boolean", - defaultValue: !!(t.feed?.showGenTime ?? A.FEED_SHOW_GENTIME), + defaultValue: !!(t.feed?.showGenTime ?? j.FEED_SHOW_GENTIME), onChange: (e) => { i(), t.feed.showGenTime = !!e, q(t), J(t), n("feed.showGenTime"); } @@ -1342,7 +1342,7 @@ function tn(e, t, n) { name: "Show workflow indicator", tooltip: "Display the workflow availability dot on feed cards.", type: "boolean", - defaultValue: !!(t.feed?.showWorkflowDot ?? A.FEED_SHOW_WORKFLOW_DOT), + defaultValue: !!(t.feed?.showWorkflowDot ?? j.FEED_SHOW_WORKFLOW_DOT), onChange: (e) => { i(), t.feed.showWorkflowDot = !!e, q(t), J(t), n("feed.showWorkflowDot"); } @@ -1352,7 +1352,7 @@ function tn(e, t, n) { name: "Show format badges", tooltip: "Display format badges (e.g. JPG, MP4) on feed card thumbnails.", type: "boolean", - defaultValue: !!(t.feed?.showExtBadge ?? A.FEED_SHOW_BADGES_EXTENSION), + defaultValue: !!(t.feed?.showExtBadge ?? j.FEED_SHOW_BADGES_EXTENSION), onChange: (e) => { i(), t.feed.showExtBadge = !!e, q(t), J(t), n("feed.showExtBadge"); } @@ -1362,7 +1362,7 @@ function tn(e, t, n) { name: "Show ratings", tooltip: "Display star ratings on feed card thumbnails.", type: "boolean", - defaultValue: !!(t.feed?.showRatingBadge ?? A.FEED_SHOW_BADGES_RATING), + defaultValue: !!(t.feed?.showRatingBadge ?? j.FEED_SHOW_BADGES_RATING), onChange: (e) => { i(), t.feed.showRatingBadge = !!e, q(t), J(t), n("feed.showRatingBadge"); } @@ -1372,7 +1372,7 @@ function tn(e, t, n) { name: "Show tags", tooltip: "Display tag indicators on feed card thumbnails.", type: "boolean", - defaultValue: !!(t.feed?.showTagsBadge ?? A.FEED_SHOW_BADGES_TAGS), + defaultValue: !!(t.feed?.showTagsBadge ?? j.FEED_SHOW_BADGES_TAGS), onChange: (e) => { i(), t.feed.showTagsBadge = !!e, q(t), J(t), n("feed.showTagsBadge"); } @@ -1455,7 +1455,7 @@ function yn(e) { } function bn(e) { let t = String(e?.security?.tokenHint || "").trim(); - return t ? O("setting.sec.token.placeholderConfigured", "Token configured on server ({tokenHint}). Leave blank to keep the current server token.", { tokenHint: t }) : e?.security?.tokenConfigured ? O("setting.sec.token.placeholderConfiguredGeneric", "Token configured on server. Leave blank to keep the current server token.") : O("setting.sec.token.placeholder", "Auto-generated for this browser session."); + return t ? k("setting.sec.token.placeholderConfigured", "Token configured on server ({tokenHint}). Leave blank to keep the current server token.", { tokenHint: t }) : e?.security?.tokenConfigured ? k("setting.sec.token.placeholderConfiguredGeneric", "Token configured on server. Leave blank to keep the current server token.") : k("setting.sec.token.placeholder", "Auto-generated for this browser session."); } function xn(e, t, n) { let r = (e, t) => [ @@ -1465,7 +1465,7 @@ function xn(e, t, n) { ]; e({ id: `${nn}.Safety.ConfirmDeletion`, - category: r(O("cat.security"), "Confirm before deleting"), + category: r(k("cat.security"), "Confirm before deleting"), name: "Confirm before deleting", tooltip: "Show a confirmation dialog before deleting files. Disabling this allows instant deletion.", type: "boolean", @@ -1477,9 +1477,9 @@ function xn(e, t, n) { let i = (i, a, o, s = "cat.security") => { e({ id: `${nn}.Security.${i}`, - category: r(O(s), O(a).replace("Majoor: ", "")), - name: O(a), - tooltip: O(o), + category: r(k(s), k(a).replace("Majoor: ", "")), + name: k(a), + tooltip: k(o), type: "boolean", defaultValue: U(t.security?.[i], on[i] ?? !1), onChange: (e) => { @@ -1498,9 +1498,9 @@ function xn(e, t, n) { }; i("safeMode", "setting.sec.safe.name", "setting.sec.safe.desc"), i("allowWrite", "setting.sec.write.name", "setting.sec.write.desc"), i("allowDelete", "setting.sec.del.name", "setting.sec.del.desc"), i("allowRename", "setting.sec.ren.name", "setting.sec.ren.desc"), i("allowOpenInFolder", "setting.sec.open.name", "setting.sec.open.desc"), i("allowResetIndex", "setting.sec.reset.name", "setting.sec.reset.desc"), e({ id: `${nn}.Security.RemoteLanPreset`, - category: r(O("cat.remote"), O("setting.sec.remoteLanPreset.name").replace("Majoor: ", "")), - name: O("setting.sec.remoteLanPreset.name"), - tooltip: O("setting.sec.remoteLanPreset.desc"), + category: r(k("cat.remote"), k("setting.sec.remoteLanPreset.name").replace("Majoor: ", "")), + name: k("setting.sec.remoteLanPreset.name"), + tooltip: k("setting.sec.remoteLanPreset.desc"), type: "boolean", defaultValue: gn(t.security), onChange: (e) => { @@ -1513,15 +1513,15 @@ function xn(e, t, n) { try { r = _n(t.security); } catch (e) { - T(e?.message || O("toast.remoteLanPresetFailed", "Failed to apply the recommended remote LAN setup."), "error"); + T(e?.message || k("toast.remoteLanPresetFailed", "Failed to apply the recommended remote LAN setup."), "error"); return; } Object.assign(t.security, r), t.security.tokenConfigured = !0, t.security.tokenHint = String(r.apiToken || "").trim() ? `...${String(r.apiToken).trim().slice(-4)}` : "", r.apiToken && w(r.apiToken), q(t), n("security.remoteLanPreset"), n("security.apiToken"), n("security.allowWrite"), n("security.requireAuth"), n("security.allowRemoteWrite"), n("security.allowInsecureTokenTransport"); try { yn(t.security).then((e) => { - e?.ok && e.data?.prefs ? (At(), T(O("toast.remoteLanPresetApplied", "Recommended remote LAN setup applied. This browser session is now authorized for Majoor write operations."), "success")) : e && e.ok === !1 && (T(e.error || O("toast.remoteLanPresetFailed", "Failed to apply the recommended remote LAN setup."), "error"), console.warn("[Majoor] backend remote LAN preset update failed", e.error || e)); + e?.ok && e.data?.prefs ? (At(), T(k("toast.remoteLanPresetApplied", "Recommended remote LAN setup applied. This browser session is now authorized for Majoor write operations."), "success")) : e && e.ok === !1 && (T(e.error || k("toast.remoteLanPresetFailed", "Failed to apply the recommended remote LAN setup."), "error"), console.warn("[Majoor] backend remote LAN preset update failed", e.error || e)); }).catch((e) => { - T(e?.message || O("toast.remoteLanPresetFailed", "Failed to apply the recommended remote LAN setup."), "error"); + T(e?.message || k("toast.remoteLanPresetFailed", "Failed to apply the recommended remote LAN setup."), "error"); }); } catch (e) { console.debug?.(e); @@ -1529,9 +1529,9 @@ function xn(e, t, n) { } }), e({ id: `${nn}.Security.ApiToken`, - category: r(O("cat.remote"), O("setting.sec.token.name").replace("Majoor: ", "")), - name: O("setting.sec.token.name", "Majoor: API Token"), - tooltip: O("setting.sec.token.desc", "Store the API token used for write operations. Majoor sends it via X-MJR-Token and Authorization headers."), + category: r(k("cat.remote"), k("setting.sec.token.name").replace("Majoor: ", "")), + name: k("setting.sec.token.name", "Majoor: API Token"), + tooltip: k("setting.sec.token.desc", "Store the API token used for write operations. Majoor sends it via X-MJR-Token and Authorization headers."), type: "text", defaultValue: t.security?.apiToken || "", attrs: { placeholder: bn(t) }, @@ -1559,7 +1559,7 @@ function Cn(e, t, r, a) { ], c = String(t.paths?.outputDirectory || ""), l = null, f = 0, p = null; e({ id: `${X}.Paths.OutputDirectory`, - category: o(O("cat.advanced"), "Paths / Output"), + category: o(k("cat.advanced"), "Paths / Output"), name: "Majoor: Generation Output Directory", tooltip: "Override the ComfyUI generation output directory used by Majoor (equivalent to --output-directory). Leave empty to keep the current backend default.", type: "text", @@ -1585,12 +1585,12 @@ function Cn(e, t, r, a) { try { let i = await S(n, p ? { signal: p.signal } : {}); if (e !== f) return; - if (!i?.ok) throw Error(i?.error || O("toast.failedSetOutputDirectory", "Failed to set output directory")); + if (!i?.ok) throw Error(i?.error || k("toast.failedSetOutputDirectory", "Failed to set output directory")); let a = String(i?.data?.output_directory || n).trim(); t.paths.outputDirectory = a, c = a, q(t), r("paths.outputDirectory"); } catch (n) { if (e !== f || String(n?.name || "") === "AbortError" || String(n?.code || "") === "ABORTED") return; - t.paths.outputDirectory = c, q(t), r("paths.outputDirectory"), T(n?.message || O("toast.failedSetOutputDirectory", "Failed to set output directory"), "error"); + t.paths.outputDirectory = c, q(t), r("paths.outputDirectory"), T(n?.message || k("toast.failedSetOutputDirectory", "Failed to set output directory"), "error"); } }, 700); } @@ -1607,7 +1607,7 @@ function Cn(e, t, r, a) { let m = String(t.paths?.indexDirectory || ""), g = null, _ = 0, v = null; e({ id: `${X}.Paths.IndexDirectory`, - category: o(O("cat.advanced"), "Paths / Index"), + category: o(k("cat.advanced"), "Paths / Index"), name: "Majoor: Index Database Directory", tooltip: "Override the Majoor index database directory. Use this to keep the SQLite index on a different local disk. Requires restart.", type: "text", @@ -1631,20 +1631,20 @@ function Cn(e, t, r, a) { } v = typeof AbortController < "u" ? new AbortController() : null; try { - let i = await _e(n, v ? { signal: v.signal } : {}); + let i = await ge(n, v ? { signal: v.signal } : {}); if (e !== _) return; - if (!i?.ok) throw Error(i?.error || O("toast.failedSetIndexDirectory", "Failed to set index directory")); + if (!i?.ok) throw Error(i?.error || k("toast.failedSetIndexDirectory", "Failed to set index directory")); let a = String(i?.data?.index_directory || n).trim(), o = a !== m; - t.paths.indexDirectory = a, m = a, q(t), r("paths.indexDirectory"), o && T(O("toast.indexDirectorySavedRestart", "Index directory saved. Restart ComfyUI to apply."), "success", void 0, { history: { trackId: "settings:index-directory-saved" } }); + t.paths.indexDirectory = a, m = a, q(t), r("paths.indexDirectory"), o && T(k("toast.indexDirectorySavedRestart", "Index directory saved. Restart ComfyUI to apply."), "success", void 0, { history: { trackId: "settings:index-directory-saved" } }); } catch (n) { if (e !== _ || String(n?.name || "") === "AbortError" || String(n?.code || "") === "ABORTED") return; - t.paths.indexDirectory = m, q(t), r("paths.indexDirectory"), T(n?.message || O("toast.failedSetIndexDirectory", "Failed to set index directory"), "error"); + t.paths.indexDirectory = m, q(t), r("paths.indexDirectory"), T(n?.message || k("toast.failedSetIndexDirectory", "Failed to set index directory"), "error"); } }, 700); } }); try { - de().then((e) => { + ue().then((e) => { if (!e?.ok) return; let n = String(e?.data?.index_directory || "").trim(); t.paths = t.paths || {}, t.paths.indexDirectory !== n && (t.paths.indexDirectory = n, m = n, q(t), r("paths.indexDirectory")); @@ -1655,7 +1655,7 @@ function Cn(e, t, r, a) { let b = String(t.paths?.workflowRoots || ""), x = null, C = 0, w = null; e({ id: `${X}.Paths.WorkflowRoots`, - category: o(O("cat.advanced"), "Paths / Workflows"), + category: o(k("cat.advanced"), "Paths / Workflows"), name: "Majoor: Workflow Roots", tooltip: "Folders scanned by the Workflow tab. Use one folder per line, or separate folders with semicolons. Leave empty to use ComfyUI defaults and MJR_AM_WORKFLOW_DIRECTORY.", type: "text", @@ -1679,20 +1679,20 @@ function Cn(e, t, r, a) { } w = typeof AbortController < "u" ? new AbortController() : null; try { - let i = await le(n, w ? { signal: w.signal } : {}); + let i = await ce(n, w ? { signal: w.signal } : {}); if (e !== C) return; - if (!i?.ok) throw Error(i?.error || O("toast.failedSetWorkflowRoots", "Failed to set workflow roots")); + if (!i?.ok) throw Error(i?.error || k("toast.failedSetWorkflowRoots", "Failed to set workflow roots")); let a = String(i?.data?.workflow_roots_text || n).trim(); - t.paths.workflowRoots = a, b = a, q(t), r("paths.workflowRoots"), T(O("toast.workflowRootsSaved", "Workflow roots saved"), "success", 1800); + t.paths.workflowRoots = a, b = a, q(t), r("paths.workflowRoots"), T(k("toast.workflowRootsSaved", "Workflow roots saved"), "success", 1800); } catch (n) { if (e !== C || String(n?.name || "") === "AbortError" || String(n?.code || "") === "ABORTED") return; - t.paths.workflowRoots = b, q(t), r("paths.workflowRoots"), T(n?.message || O("toast.failedSetWorkflowRoots", "Failed to set workflow roots"), "error"); + t.paths.workflowRoots = b, q(t), r("paths.workflowRoots"), T(n?.message || k("toast.failedSetWorkflowRoots", "Failed to set workflow roots"), "error"); } }, 700); } }); try { - re().then((e) => { + ie().then((e) => { if (!e?.ok) return; let n = String(e?.data?.workflow_roots_text || "").trim(); t.paths = t.paths || {}, t.paths.workflowRoots !== n && (t.paths.workflowRoots = n, b = n, q(t), r("paths.workflowRoots")); @@ -1700,27 +1700,27 @@ function Cn(e, t, r, a) { } catch (e) { console.debug?.(e); } - let E = Te().map((e) => e.code), ie = ["auto", ...E]; + let re = we().map((e) => e.code), E = ["auto", ...re]; e({ id: `${X}.Language`, - category: o(O("cat.advanced"), O("setting.language.name", "Language")), - name: O("setting.language.name", "Majoor: Language"), + category: o(k("cat.advanced"), k("setting.language.name", "Language")), + name: k("setting.language.name", "Majoor: Language"), tooltip: "Use auto to detect and follow ComfyUI language. Or choose a fixed language for Majoor only.", type: "combo", - defaultValue: t.i18n?.followComfyLanguage ? "auto" : xe(), - options: ie, + defaultValue: t.i18n?.followComfyLanguage ? "auto" : be(), + options: E, onChange: (e) => { if (t.i18n = t.i18n || {}, e === "auto") { - t.i18n.followComfyLanguage = !0, Se(!0), Oe(a), q(t), r("language"); + t.i18n.followComfyLanguage = !0, xe(!0), De(a), q(t), r("language"); return; } - E.includes(e) && (t.i18n.followComfyLanguage = !1, Se(!1), Ce(e), q(t), r("language")); + re.includes(e) && (t.i18n.followComfyLanguage = !1, xe(!1), Se(e), q(t), r("language")); } }), e({ id: `${X}.ProbeBackend.Mode`, - category: o(O("cat.advanced"), O("setting.probe.mode.name").replace("Majoor: ", "")), - name: O("setting.probe.mode.name"), - tooltip: O("setting.probe.mode.desc") + " (env: MAJOOR_MEDIA_PROBE_BACKEND)", + category: o(k("cat.advanced"), k("setting.probe.mode.name").replace("Majoor: ", "")), + name: k("setting.probe.mode.name"), + tooltip: k("setting.probe.mode.desc") + " (env: MAJOOR_MEDIA_PROBE_BACKEND)", type: "combo", defaultValue: t.probeBackend?.mode || G.probeBackend.mode, options: [ @@ -1740,7 +1740,7 @@ function Cn(e, t, r, a) { } }), e({ id: `${X}.MetadataFallback.Image`, - category: o(O("cat.advanced"), "Metadata"), + category: o(k("cat.advanced"), "Metadata"), name: "Majoor: Metadata Fallback (Images)", tooltip: "Enable Pillow fallback when ExifTool is missing or fails.", type: "boolean", @@ -1749,18 +1749,18 @@ function Cn(e, t, r, a) { let n = !!e, i = !!(t.metadataFallback?.image ?? G.metadataFallback.image); t.metadataFallback = t.metadataFallback || {}, t.metadataFallback.image = n, q(t), r("metadataFallback.image"); try { - let e = await ge({ + let e = await he({ image: n, media: t.metadataFallback?.media ?? G.metadataFallback.media }); - if (!e?.ok) throw Error(e?.error || O("toast.failedUpdateMetadataFallback", "Failed to update metadata fallback settings")); + if (!e?.ok) throw Error(e?.error || k("toast.failedUpdateMetadataFallback", "Failed to update metadata fallback settings")); } catch (e) { - t.metadataFallback.image = i, q(t), r("metadataFallback.image"), T(e?.message || O("toast.failedUpdateMetadataFallback", "Failed to update metadata fallback settings"), "error"); + t.metadataFallback.image = i, q(t), r("metadataFallback.image"), T(e?.message || k("toast.failedUpdateMetadataFallback", "Failed to update metadata fallback settings"), "error"); } } }), e({ id: `${X}.MetadataFallback.Media`, - category: o(O("cat.advanced"), "Metadata"), + category: o(k("cat.advanced"), "Metadata"), name: "Majoor: Metadata Fallback (Audio/Video)", tooltip: "Enable hachoir fallback when ffprobe is missing or fails.", type: "boolean", @@ -1769,13 +1769,13 @@ function Cn(e, t, r, a) { let n = !!e, i = !!(t.metadataFallback?.media ?? G.metadataFallback.media); t.metadataFallback = t.metadataFallback || {}, t.metadataFallback.media = n, q(t), r("metadataFallback.media"); try { - let e = await ge({ + let e = await he({ image: t.metadataFallback?.image ?? G.metadataFallback.image, media: n }); - if (!e?.ok) throw Error(e?.error || O("toast.failedUpdateMetadataFallback", "Failed to update metadata fallback settings")); + if (!e?.ok) throw Error(e?.error || k("toast.failedUpdateMetadataFallback", "Failed to update metadata fallback settings")); } catch (e) { - t.metadataFallback.media = i, q(t), r("metadataFallback.media"), T(e?.message || O("toast.failedUpdateMetadataFallback", "Failed to update metadata fallback settings"), "error"); + t.metadataFallback.media = i, q(t), r("metadataFallback.media"), T(e?.message || k("toast.failedUpdateMetadataFallback", "Failed to update metadata fallback settings"), "error"); } } }); @@ -1792,7 +1792,7 @@ function Cn(e, t, r, a) { } e({ id: `${X}.Db.Timeout`, - category: o(O("cat.advanced"), "Database"), + category: o(k("cat.advanced"), "Database"), name: "DB Timeout (ms)", tooltip: "Client-side DB timeout preference (stored locally).", type: "number", @@ -1807,7 +1807,7 @@ function Cn(e, t, r, a) { } }), e({ id: `${X}.Db.MaxConnections`, - category: o(O("cat.advanced"), "Database"), + category: o(k("cat.advanced"), "Database"), name: "DB Max Connections", tooltip: "Client-side DB max connections preference (stored locally).", type: "number", @@ -1822,7 +1822,7 @@ function Cn(e, t, r, a) { } }), e({ id: `${X}.Db.QueryTimeout`, - category: o(O("cat.advanced"), "Database"), + category: o(k("cat.advanced"), "Database"), name: "DB Query Timeout (ms)", tooltip: "Client-side DB query timeout preference (stored locally).", type: "number", @@ -1837,9 +1837,9 @@ function Cn(e, t, r, a) { } }), e({ id: `${X}.Observability.Enabled`, - category: o(O("cat.advanced"), O("setting.obs.enabled.name").replace("Majoor: ", "")), - name: O("setting.obs.enabled.name"), - tooltip: O("setting.obs.enabled.desc"), + category: o(k("cat.advanced"), k("setting.obs.enabled.name").replace("Majoor: ", "")), + name: k("setting.obs.enabled.name"), + tooltip: k("setting.obs.enabled.desc"), type: "boolean", defaultValue: !!t.observability?.enabled, onChange: (e) => { @@ -1847,7 +1847,7 @@ function Cn(e, t, r, a) { } }), e({ id: `${X}.Observability.RuntimeDashboardMode`, - category: o(O("cat.advanced"), "Runtime metrics badge"), + category: o(k("cat.advanced"), "Runtime metrics badge"), name: "Majoor: Runtime metrics badge", tooltip: "Controls the small DB/enrichment/watcher metrics badge in the Assets Manager panel.", type: "combo", @@ -1867,7 +1867,7 @@ function Cn(e, t, r, a) { } }), e({ id: `${X}.Observability.VerboseErrors`, - category: o(O("cat.advanced"), "Verbose error logging"), + category: o(k("cat.advanced"), "Verbose error logging"), name: "Verbose error logging", tooltip: "Show detailed error messages in toasts and console. Useful for debugging.", type: "boolean", @@ -1877,7 +1877,7 @@ function Cn(e, t, r, a) { } }), e({ id: `${X}.Observability.VerboseRouteRegistrationLogs`, - category: o(O("cat.advanced"), "Logs"), + category: o(k("cat.advanced"), "Logs"), name: "Majoor: Verbose route registration logs", tooltip: "When disabled, Majoor prints a compact startup summary instead of listing every registered API route. Takes effect on the next backend restart.", type: "boolean", @@ -1886,7 +1886,7 @@ function Cn(e, t, r, a) { let n = !!e, i = !!(t.observability?.verboseRouteRegistrationLogs ?? G.observability?.verboseRouteRegistrationLogs ?? !1); t.observability = t.observability || {}, t.observability.verboseRouteRegistrationLogs = n, q(t), r("observability.verboseRouteRegistrationLogs"); try { - let e = await me(n); + let e = await pe(n); if (!e?.ok) throw Error(e?.error || "Failed to update route logging settings"); } catch (e) { t.observability.verboseRouteRegistrationLogs = i, q(t), r("observability.verboseRouteRegistrationLogs"), T(e?.message || "Failed to update route logging settings", "error"); @@ -1901,7 +1901,7 @@ function Cn(e, t, r, a) { } })(), e({ id: `${X}.Observability.VerboseStartupLogs`, - category: o(O("cat.advanced"), "Logs"), + category: o(k("cat.advanced"), "Logs"), name: "Majoor: Verbose startup logs", tooltip: "When disabled, Majoor suppresses most informational bootstrap logs during backend startup while keeping warnings and errors. Takes effect on the next backend restart.", type: "boolean", @@ -1952,7 +1952,7 @@ function Cn(e, t, r, a) { }; e({ id: `${X}.AI.HuggingFaceTokenVisible`, - category: o(O("cat.advanced"), n), + category: o(k("cat.advanced"), n), name: "Show HuggingFace token", tooltip: "Show or hide the HuggingFace token while editing.", type: "boolean", @@ -1963,7 +1963,7 @@ function Cn(e, t, r, a) { } }), e({ id: `${X}.AI.HuggingFaceToken`, - category: o(O("cat.advanced"), n), + category: o(k("cat.advanced"), n), name: "HuggingFace Token", tooltip: [ "Optional token for HuggingFace Hub downloads (higher rate limits).", @@ -1991,7 +1991,7 @@ function Cn(e, t, r, a) { a = null; let e = ++s; try { - let n = await pe(t); + let n = await fe(t); if (e !== s) return; if (!n?.ok) throw Error(n?.error || "Failed to update HuggingFace token"); i = t, r("ai.huggingFaceToken"), t ? T("HuggingFace token saved", "success") : T("HuggingFace token cleared", "success", void 0, { noHistory: !0 }); @@ -2011,7 +2011,7 @@ function Cn(e, t, r, a) { } })(), e({ id: `${X}.AI.VerboseLogs`, - category: o(O("cat.advanced"), n), + category: o(k("cat.advanced"), n), name: "Majoor: Verbose AI logs", tooltip: "Enable detailed HuggingFace/SigLIP2/X-CLIP logs and progress bars during model download/loading.", type: "boolean", @@ -2037,7 +2037,7 @@ function Cn(e, t, r, a) { } e({ id: `${X}.AI.VectorStats`, - category: o(O("cat.advanced"), "AI / Vector Search"), + category: o(k("cat.advanced"), "AI / Vector Search"), name: "Vector Index Status", tooltip: "Current status of the SigLIP2/X-CLIP vector index used for semantic search", type: "text", @@ -2051,7 +2051,7 @@ function Cn(e, t, r, a) { } })(), e({ id: `${X}.AI.VectorBackfillAction`, - category: o(O("cat.advanced"), "AI / Vector Search"), + category: o(k("cat.advanced"), "AI / Vector Search"), name: "Vector Index Action", tooltip: [ "Compute CLIP embeddings for all assets that don't have them yet.", @@ -2075,7 +2075,7 @@ function Cn(e, t, r, a) { forceStore: !0 } }; try { - T(O("toast.vectorBackfillStarting", "Starting vector backfill... This may take a while."), "info", void 0, { history: { + T(k("toast.vectorBackfillStarting", "Starting vector backfill... This may take a while."), "info", void 0, { history: { ...t.history, status: "started", detail: "Starting vector backfill... This may take a while." @@ -2108,7 +2108,7 @@ function Cn(e, t, r, a) { ].includes(i), o = r?.progress || {}, s = Number(r?.processed ?? o?.candidates ?? 0), c = Number(r?.indexed ?? o?.indexed ?? 0), l = Number(r?.skipped ?? o?.skipped ?? 0); if (a) { let e = String(r?.job_id || "").trim(); - T(O("toast.vectorBackfillRunning", "Vector backfill still running in background{job}.", { job: e ? ` (job ${e.slice(0, 8)})` : "" }), "info", void 0, { history: { + T(k("toast.vectorBackfillRunning", "Vector backfill still running in background{job}.", { job: e ? ` (job ${e.slice(0, 8)})` : "" }), "info", void 0, { history: { ...t.history, status: "running", detail: `Vector backfill still running in background${e ? ` (${e.slice(0, 8)})` : ""}.`, @@ -2121,7 +2121,7 @@ function Cn(e, t, r, a) { label: "running" } } }); - } else T(O("toast.vectorBackfillComplete", "Vector backfill complete! Processed: {processed}, Indexed: {indexed}, Skipped: {skipped}", { + } else T(k("toast.vectorBackfillComplete", "Vector backfill complete! Processed: {processed}, Indexed: {indexed}, Skipped: {skipped}", { processed: s, indexed: c, skipped: l @@ -2144,10 +2144,10 @@ function Cn(e, t, r, a) { } catch (e) { console.debug?.("[Majoor] Failed to refresh vector stats:", e); } - } else throw Error(e?.error || O("toast.vectorBackfillFailedGeneric", "Backfill failed")); + } else throw Error(e?.error || k("toast.vectorBackfillFailedGeneric", "Backfill failed")); } catch (e) { - let n = e?.message || String(e || O("status.unknown", "unknown")); - T(O("toast.vectorBackfillFailedDetail", "Vector backfill failed: {error}", { error: n }), "error", void 0, { history: { + let n = e?.message || String(e || k("status.unknown", "unknown")); + T(k("toast.vectorBackfillFailedDetail", "Vector backfill failed: {error}", { error: n }), "error", void 0, { history: { ...t.history, status: "failed", detail: n @@ -2167,9 +2167,9 @@ function En(e, t, n) { ]; e({ id: `${wn}.AI.VectorSearchEnabled`, - category: r(O("cat.search", "Search"), "AI"), - name: O("setting.ai.vector.enabled.name", "Enable AI semantic search"), - tooltip: O("setting.ai.vector.enabled.desc", "Enable/disable AI vector search features (SigLIP2/X-CLIP: description search, prompt alignment, AI tag suggestions, smart collections)."), + category: r(k("cat.search", "Search"), "AI"), + name: k("setting.ai.vector.enabled.name", "Enable AI semantic search"), + tooltip: k("setting.ai.vector.enabled.desc", "Enable/disable AI vector search features (SigLIP2/X-CLIP: description search, prompt alignment, AI tag suggestions, smart collections)."), type: "boolean", defaultValue: !!(t.ai?.vectorSearchEnabled ?? !0), onChange: async (e) => { @@ -2189,9 +2189,9 @@ function En(e, t, n) { } }), e({ id: `${wn}.AI.VectorCaptionOnIndex`, - category: r(O("cat.search", "Search"), "AI"), - name: O("setting.ai.vector.captionOnIndex.name", "Generate AI captions during indexing"), - tooltip: O("setting.ai.vector.captionOnIndex.desc", "Allow automatic vector indexing and backfill to run Florence-2 captions for image assets. This is slower and can use significant VRAM/CPU; leave it off for faster grid startup."), + category: r(k("cat.search", "Search"), "AI"), + name: k("setting.ai.vector.captionOnIndex.name", "Generate AI captions during indexing"), + tooltip: k("setting.ai.vector.captionOnIndex.desc", "Allow automatic vector indexing and backfill to run Florence-2 captions for image assets. This is slower and can use significant VRAM/CPU; leave it off for faster grid startup."), type: "boolean", defaultValue: !!(t.ai?.vectorCaptionOnIndex ?? !1), onChange: async (e) => { @@ -2211,9 +2211,9 @@ function En(e, t, n) { } }), e({ id: `${wn}.AI.VectorIndexOnScan`, - category: r(O("cat.search", "Search"), "AI"), - name: O("setting.ai.vector.indexOnScan.name", "Index vectors during scans"), - tooltip: O("setting.ai.vector.indexOnScan.desc", "Compute SigLIP/X-CLIP embeddings while assets are scanned. Disable to avoid surprise VRAM use; run vector backfill manually when needed."), + category: r(k("cat.search", "Search"), "AI"), + name: k("setting.ai.vector.indexOnScan.name", "Index vectors during scans"), + tooltip: k("setting.ai.vector.indexOnScan.desc", "Compute SigLIP/X-CLIP embeddings while assets are scanned. Disable to avoid surprise VRAM use; run vector backfill manually when needed."), type: "boolean", defaultValue: !!(t.ai?.vectorIndexOnScan ?? !1), onChange: async (e) => { @@ -2233,9 +2233,9 @@ function En(e, t, n) { } }), e({ id: `${wn}.AI.VectorConcurrency`, - category: r(O("cat.search", "Search"), "AI"), - name: O("setting.ai.vector.concurrency.name", "Vector indexing concurrency"), - tooltip: O("setting.ai.vector.concurrency.desc", "Maximum concurrent vector embedding workers. Use 1 to minimize transient VRAM spikes."), + category: r(k("cat.search", "Search"), "AI"), + name: k("setting.ai.vector.concurrency.name", "Vector indexing concurrency"), + tooltip: k("setting.ai.vector.concurrency.desc", "Maximum concurrent vector embedding workers. Use 1 to minimize transient VRAM spikes."), type: "number", defaultValue: Number(t.ai?.vectorConcurrency || 1), attrs: { @@ -2256,9 +2256,9 @@ function En(e, t, n) { } }), e({ id: `${wn}.AI.VectorUnloadAfterUse`, - category: r(O("cat.search", "Search"), "AI"), - name: O("setting.ai.vector.unloadAfterUse.name", "Unload AI models after use"), - tooltip: O("setting.ai.vector.unloadAfterUse.desc", "Unload Majoor SigLIP/X-CLIP/Florence models after heavy AI actions and call torch CUDA cache cleanup. This frees VRAM but makes the next AI action slower."), + category: r(k("cat.search", "Search"), "AI"), + name: k("setting.ai.vector.unloadAfterUse.name", "Unload AI models after use"), + tooltip: k("setting.ai.vector.unloadAfterUse.desc", "Unload Majoor SigLIP/X-CLIP/Florence models after heavy AI actions and call torch CUDA cache cleanup. This frees VRAM but makes the next AI action slower."), type: "boolean", defaultValue: !!(t.ai?.vectorUnloadAfterUse ?? !1), onChange: async (e) => { @@ -2278,9 +2278,9 @@ function En(e, t, n) { } }), e({ id: `${wn}.AI.VectorUnloadNow`, - category: r(O("cat.search", "Search"), "AI"), - name: O("setting.ai.vector.unloadNow.name", "Memory purge now"), - tooltip: O("setting.ai.vector.unloadNow.desc", "Immediately unload Majoor AI vector/caption models, ask ComfyUI to unload loaded models, and clear torch CUDA cache when idle."), + category: r(k("cat.search", "Search"), "AI"), + name: k("setting.ai.vector.unloadNow.name", "Memory purge now"), + tooltip: k("setting.ai.vector.unloadNow.desc", "Immediately unload Majoor AI vector/caption models, ask ComfyUI to unload loaded models, and clear torch CUDA cache when idle."), type: "combo", options: ["Idle", "Unload now"], defaultValue: "Idle", @@ -2294,22 +2294,22 @@ function En(e, t, n) { } }), e({ id: `${wn}.Search.MaxResults`, - category: r(O("cat.search", "Search")), - name: O("setting.search.maxResults.name", "Max search results (client)"), - tooltip: O("setting.search.maxResults.desc", "Maximum number of results requested per search. The backend still enforces MAJOOR_SEARCH_MAX_LIMIT; increase that env var if you need a higher hard cap."), + category: r(k("cat.search", "Search")), + name: k("setting.search.maxResults.name", "Max search results (client)"), + tooltip: k("setting.search.maxResults.desc", "Maximum number of results requested per search. The backend still enforces MAJOOR_SEARCH_MAX_LIMIT; increase that env var if you need a higher hard cap."), type: "number", - defaultValue: Number(t.search?.maxResults || A.SEARCH_DEFAULT_LIMIT), + defaultValue: Number(t.search?.maxResults || j.SEARCH_DEFAULT_LIMIT), attrs: { min: 10, - max: A.MAX_PAGE_SIZE || 2e3, + max: j.MAX_PAGE_SIZE || 2e3, step: 1 }, onChange: (e) => { - t.search = t.search || {}, t.search.maxResults = Math.max(10, Math.min(A.MAX_PAGE_SIZE || 2e3, Number(e) || A.SEARCH_DEFAULT_LIMIT)), q(t), J(t), n("search.maxResults"); + t.search = t.search || {}, t.search.maxResults = Math.max(10, Math.min(j.MAX_PAGE_SIZE || 2e3, Number(e) || j.SEARCH_DEFAULT_LIMIT)), q(t), J(t), n("search.maxResults"); } }), e({ id: `${wn}.EnvVars.Reference`, - category: r(O("cat.advanced"), "Environment variables"), + category: r(k("cat.advanced"), "Environment variables"), name: "Environment variables reference", tooltip: [ "Set these env vars before starting ComfyUI to override defaults:", @@ -2398,7 +2398,7 @@ function Un(e, t, n) { if (!r || Vn.has(r)) return !1; Vn.add(r); try { - return ve(e, r, n); + return _e(e, r, n); } finally { Vn.delete(r); } @@ -2446,7 +2446,7 @@ function Xn(e, t, n) { String(e?.id || "").trim() && (Un(n, e, t), typeof e?.onChange == "function" && e.onChange(t)); } function Zn(e, t, n, r) { - let i = !qn(ye(r, t.id, t.defaultValue), n); + let i = !qn(ve(r, t.id, t.defaultValue), n); e.disabled = !i, e.style.opacity = i ? "1" : "0.45"; } function Qn() { @@ -2490,19 +2490,19 @@ function er(e, t, { initRuntime: n = !1 } = {}) { if (zn) typeof t == "function" && zn.onAppliedListeners.add(t), e && !zn.app && (zn.app = e); else { let n = K(); - n.i18n = n.i18n || {}, typeof n.i18n.followComfyLanguage == "boolean" ? Se(!!n.i18n.followComfyLanguage) : (n.i18n.followComfyLanguage = !0, Se(!0), q(n)); + n.i18n = n.i18n || {}, typeof n.i18n.followComfyLanguage == "boolean" ? xe(!!n.i18n.followComfyLanguage) : (n.i18n.followComfyLanguage = !0, xe(!0), q(n)); let r = /* @__PURE__ */ new Set(); typeof t == "function" && r.add(t); let i = /* @__PURE__ */ new Set(), a = /* @__PURE__ */ new Set(), o = () => { if (!i.size) return; let e = Array.from(i); i.clear(); - for (let t of e) Ae("mjr-settings-changed", { key: t }, { warnPrefix: "[Majoor]" }); + for (let t of e) ke("mjr-settings-changed", { key: t }, { warnPrefix: "[Majoor]" }); }, s = () => { if (!a.size) return; let e = Array.from(a); a.clear(); - for (let t of e) Ae("mjr-settings-changed", { key: t }, { warnPrefix: "[Majoor]" }); + for (let t of e) ke("mjr-settings-changed", { key: t }, { warnPrefix: "[Majoor]" }); }, c = Wt(o, 120), l = Wt(s, 450), u = (e) => { typeof e == "string" && i.add(e), c(); }, d = (e) => { @@ -2542,7 +2542,7 @@ function er(e, t, { initRuntime: n = !1 } = {}) { } if (n && !Bn) { let t = e || zn.app, n = zn.settings; - Oe(t), J(n), Ee(t), At(), jt(), Mt(), n?.watcher && typeof n.watcher.enabled == "boolean" && ce(!!n.watcher.enabled).catch(() => {}), Ht(), Bn = !0; + De(t), J(n), Te(t), At(), jt(), Mt(), n?.watcher && typeof n.watcher.enabled == "boolean" && O(!!n.watcher.enabled).catch(() => {}), Ht(), Bn = !0; } return zn; } @@ -2567,14 +2567,14 @@ try { let e = K(); e?.watcher && typeof e.watcher.enabled == "boolean" && oe().then((e) => { let t = !!e?.ok && !!e?.data?.enabled, n = K(); - n.watcher = n.watcher || {}, typeof t == "boolean" && t !== !!n.watcher.enabled && (n.watcher.enabled = t, q(n), Ae("mjr-settings-changed", { key: "watcher.enabled" }, { warnPrefix: "[Majoor]" })); + n.watcher = n.watcher || {}, typeof t == "boolean" && t !== !!n.watcher.enabled && (n.watcher.enabled = t, q(n), ke("mjr-settings-changed", { key: "watcher.enabled" }, { warnPrefix: "[Majoor]" })); }).catch(() => {}); } catch (e) { console.debug?.(e); } //#endregion //#region ui/features/workflows/workflowPickerState.ts -var Z = ft({ +var Z = dt({ open: !1, mode: "workflow", title: "", @@ -2604,33 +2604,33 @@ function ar(e = null) { //#endregion //#region ui/vue/majoorPrimeVue.ts var or = { - Button: Ze, - Checkbox: Xe, - InputText: pt, - Textarea: nt, - Select: ut, - ToggleButton: ot, - Badge: st, - Tag: qe, - Dialog: et, - Menu: lt, - Listbox: at, - Tree: dt, - VirtualScroller: Ye + Button: Xe, + Checkbox: Ye, + InputText: ft, + Textarea: tt, + Select: lt, + ToggleButton: at, + Badge: ot, + Tag: Ke, + Dialog: $e, + Menu: ct, + Listbox: it, + Tree: ut, + VirtualScroller: Je }; function sr(e) { - return e.use(Qe, { + return e.use(Ze, { ripple: !1, unstyled: !0, zIndex: { overlay: 10100 } - }), e.use($e), e.use(it), Object.entries(or).forEach(([t, n]) => { + }), e.use(Qe), e.use(rt), Object.entries(or).forEach(([t, n]) => { e.component(`M${t}`, n); }), e; } //#endregion //#region ui/vue/createVueApp.ts function cr(e, t = void 0) { - let n = ht(), r = Ke(e, t); + let n = mt(), r = Ge(e, t); return r.use(n), sr(r), { app: r, pinia: n @@ -2854,7 +2854,7 @@ var Cr = { let n = e?.[t] ?? e?.file_info?.[t]; return n != null && n !== "" ? n : t === "workflow_id" ? e?.user_metadata?.workflow?.id ?? e?.metadata?.workflow_id ?? "" : ""; } - let a = I(() => { + let a = L(() => { let e = t.asset || {}, a = []; if (e.width && e.height && a.push({ label: "Dimensions", @@ -2865,25 +2865,25 @@ var Cr = { value: vr(e.duration), tooltip: "Video duration" }), r(e)) { - let t = Fe(e); + let t = Pe(e); t != null && a.push({ label: "FPS", - value: Ie(t), + value: Fe(t), tooltip: "Native frame rate" }); - let n = Me(e, t); + let n = je(e, t); n != null && a.push({ label: "Length", value: `${Math.max(0, Math.floor(n))} frames`, tooltip: "Total frame count" }); } - let o = Ne(e.generation_time_ms ?? e.metadata?.generation_time_ms ?? 0); + let o = Me(e.generation_time_ms ?? e.metadata?.generation_time_ms ?? 0); o > 0 && a.push({ label: "Generation Time", value: `${(Number(o) / 1e3).toFixed(1)}s`, tooltip: "Time taken to generate this asset (workflow execution time)", - valueStyle: `color: ${Pe(o)}; font-weight: 600;` + valueStyle: `color: ${Ne(o)}; font-weight: 600;` }); let s = e.generation_time || e.file_creation_time || e.mtime || e.created_at; if (s) { @@ -2932,14 +2932,14 @@ var Cr = { tooltip: "ComfyUI workflow identifier (from workflow.id in extra_data)" }), a; }); - return (e, t) => a.value.length ? (j(), z("div", Cr, [t[0] ||= N("div", { style: { + return (e, t) => a.value.length ? (M(), B("div", Cr, [t[0] ||= P("div", { style: { "font-size": "12px", "font-weight": "700", color: "#607d8b", "margin-bottom": "8px", "text-transform": "uppercase", "letter-spacing": "0.4px" - } }, " File Info ", -1), N("div", wr, [(j(!0), z(M, null, P(a.value, (e) => (j(), z("div", { + } }, " File Info ", -1), P("div", wr, [(M(!0), B(N, null, F(a.value, (e) => (M(), B("div", { key: e.label, style: { display: "flex", @@ -2947,17 +2947,17 @@ var Cr = { "align-items": "flex-start", "justify-content": "space-between" } - }, [N("div", { + }, [P("div", { title: e.tooltip || "", style: { "font-size": "12px", opacity: "0.68", "min-width": "92px" } - }, R(e.label), 9, Tr), N("div", { - style: V(e.valueStyle || "font-size: 12px; text-align: right; word-break: break-word"), + }, z(e.label), 9, Tr), P("div", { + style: H(e.valueStyle || "font-size: 12px; text-align: right; word-break: break-word"), title: String(e.value || "") - }, R(e.value), 13, Er)]))), 128))])])) : F("", !0); + }, z(e.value), 13, Er)]))), 128))])])) : I("", !0); } }, Or = new Set([ "png", @@ -3014,7 +3014,7 @@ function Ir(e) { if (!t) return []; let n = String(e?.subfolder || "").trim(), r = String(e?.folder_type || "input").trim().toLowerCase(), i = [], a = (e) => { if (!e) return; - let r = De(t, n, e); + let r = Ee(t, n, e); r && !i.includes(r) && i.push(r); }; return (r === "input" || r === "output") && a(r), a("input"), a("output"), i; @@ -3035,15 +3035,15 @@ function Q(e) { } function Rr(e, t) { let n = String(e?.pass_stage || e?.stage || e?.kind || "").trim().toLowerCase(); - if (n === "txt2img" || n === "text_to_image" || n === "text-to-image") return O("sidebar.generation.stageTextToImage", "Text-to-Image"); - if (n === "img2img" || n === "image_to_image" || n === "image-to-image") return O("sidebar.generation.stageImageToImage", "Image-to-Image"); - if (n === "inpaint" || n === "inpainting") return O("sidebar.generation.stageInpaint", "Inpaint"); - if (n === "upscale" || n === "upscaling") return O("sidebar.generation.stageUpscale", "Upscale"); - if (n === "refine" || n === "refiner") return O("sidebar.generation.stageRefine", "Refine"); + if (n === "txt2img" || n === "text_to_image" || n === "text-to-image") return k("sidebar.generation.stageTextToImage", "Text-to-Image"); + if (n === "img2img" || n === "image_to_image" || n === "image-to-image") return k("sidebar.generation.stageImageToImage", "Image-to-Image"); + if (n === "inpaint" || n === "inpainting") return k("sidebar.generation.stageInpaint", "Inpaint"); + if (n === "upscale" || n === "upscaling") return k("sidebar.generation.stageUpscale", "Upscale"); + if (n === "refine" || n === "refiner") return k("sidebar.generation.stageRefine", "Refine"); let r = String(e?.pass_name || "").trim(); if (r && r.toLowerCase() !== "base") return r; let i = Number(e?.denoise); - return t === 0 || i === 1 ? O("sidebar.generation.stageBase", "Base") : Number.isFinite(i) && i < 1 ? O("sidebar.generation.stageRefineUpscale", "Refine / Upscale") : O("sidebar.generation.stagePassN", "Pass {n}", { n: t + 1 }); + return t === 0 || i === 1 ? k("sidebar.generation.stageBase", "Base") : Number.isFinite(i) && i < 1 ? k("sidebar.generation.stageRefineUpscale", "Refine / Upscale") : k("sidebar.generation.stagePassN", "Pass {n}", { n: t + 1 }); } function zr(e) { let t = []; @@ -3055,7 +3055,7 @@ function Br(e, t) { function Vr(e) { let t = zr(e), n = {}; for (let e of t) { - let t = _t(e); + let t = gt(e); !t || typeof t != "object" || Br(n, t); } return Object.keys(n).length ? n : null; @@ -3063,14 +3063,14 @@ function Vr(e) { function Hr(e) { try { if (!e || typeof e != "object") return !1; - if (e.is_override || typeof e.workflow_notes == "string" && e.workflow_notes.trim() || typeof e.notes == "string" && e.notes.trim() || Array.isArray(e.custom_info) && e.custom_info.length > 0 || e.engine && typeof e.engine == "object" && e.engine.type || yt(e.prompt) || typeof (e.negative_prompt || e.negativePrompt) == "string" && yt(e.negative_prompt || e.negativePrompt) || e.models || e.model || e.checkpoint || e.loras || e.sampler || e.sampler_name || e.steps || e.cfg || e.cfg_scale || e.cfg_high_noise || e.cfg_low_noise || e.scheduler || Array.isArray(e.chained_passes) && e.chained_passes.length > 0 || Array.isArray(e.all_samplers) && e.all_samplers.length > 0 || e.seed || e.denoise || e.denoising || e.clip_skip || e.voice || e.language || e.temperature || e.top_k || e.top_p || e.repetition_penalty || e.max_new_tokens || e.device || e.voice_preset || e.instruct || e.dtype || e.attn_implementation || e.enable_chunking !== void 0 || e.max_chars_per_chunk || e.chunk_combination_method || e.silence_between_chunks_ms || e.enable_audio_cache !== void 0 || e.batch_size !== void 0 || e.use_torch_compile !== void 0 || e.use_cuda_graphs !== void 0 || e.compile_mode || typeof e.lyrics == "string" && e.lyrics.trim()) return !0; + if (e.is_override || typeof e.workflow_notes == "string" && e.workflow_notes.trim() || typeof e.notes == "string" && e.notes.trim() || Array.isArray(e.custom_info) && e.custom_info.length > 0 || e.engine && typeof e.engine == "object" && e.engine.type || vt(e.prompt) || typeof (e.negative_prompt || e.negativePrompt) == "string" && vt(e.negative_prompt || e.negativePrompt) || e.models || e.model || e.checkpoint || e.loras || e.sampler || e.sampler_name || e.steps || e.cfg || e.cfg_scale || e.cfg_high_noise || e.cfg_low_noise || e.scheduler || Array.isArray(e.chained_passes) && e.chained_passes.length > 0 || Array.isArray(e.all_samplers) && e.all_samplers.length > 0 || e.seed || e.denoise || e.denoising || e.clip_skip || e.voice || e.language || e.temperature || e.top_k || e.top_p || e.repetition_penalty || e.max_new_tokens || e.device || e.voice_preset || e.instruct || e.dtype || e.attn_implementation || e.enable_chunking !== void 0 || e.max_chars_per_chunk || e.chunk_combination_method || e.silence_between_chunks_ms || e.enable_audio_cache !== void 0 || e.batch_size !== void 0 || e.use_torch_compile !== void 0 || e.use_cuda_graphs !== void 0 || e.compile_mode || typeof e.lyrics == "string" && e.lyrics.trim()) return !0; } catch { return !1; } return !1; } function $(e) { - return e ? typeof e == "string" ? H(e) : typeof e == "object" ? H(e.name || e.value || "") : "" : ""; + return e ? typeof e == "string" ? yt(e) : typeof e == "object" ? yt(e.name || e.value || "") : "" : ""; } function Ur(e, t, n, r) { let i = String(r || "").trim(); @@ -3089,7 +3089,7 @@ function Gr(e) { let t = [], n = Array.isArray(e.model_groups) ? e.model_groups : []; if (n.length) return n.forEach((e) => { if (!e || typeof e != "object") return; - let n = $(e.model), r = Array.isArray(e.loras) ? e.loras.map((e) => vt(e)).filter(Boolean) : []; + let n = $(e.model), r = Array.isArray(e.loras) ? e.loras.map((e) => _t(e)).filter(Boolean) : []; !n && !r.length || t.push({ key: String(e.key || "").trim() || `group-${t.length + 1}`, label: String(e.label || "").trim() || `Group ${t.length + 1}`, @@ -3100,14 +3100,14 @@ function Gr(e) { let r = e.models && typeof e.models == "object" ? e.models : null, i = Array.isArray(e.loras) ? e.loras : []; return r && [{ key: "high_noise", - label: O("sidebar.generation.highNoise", "High Noise"), + label: k("sidebar.generation.highNoise", "High Noise"), model: $(r.unet_high_noise) }, { key: "low_noise", - label: O("sidebar.generation.lowNoise", "Low Noise"), + label: k("sidebar.generation.lowNoise", "Low Noise"), model: $(r.unet_low_noise) }].forEach((e) => { - let n = i.filter((t) => Wr(t) === e.key).map((e) => vt(e)).filter(Boolean); + let n = i.filter((t) => Wr(t) === e.key).map((e) => _t(e)).filter(Boolean); !e.model && !n.length || t.push({ ...e, loras: n @@ -3117,7 +3117,7 @@ function Gr(e) { function Kr(e, t) { return t == null ? null : { label: e, - value: t ? O("state.on", "on") : O("state.off", "off") + value: t ? k("state.on", "on") : k("state.off", "off") }; } function qr(e) { @@ -3132,7 +3132,7 @@ function Yr(e) { } function Xr(e, t) { let n = String(t || e || "").trim(), r = String(e || n).toLowerCase(), i = r.match(/^pass_(\d+)$/); - return i ? O("sidebar.generation.stagePassN", "Pass {n}", { n: Number(i[1]) }) : r.includes("high") ? "High" : r.includes("low") ? "Low" : r.includes("refine") ? "Refiner" : r.includes("upscale") ? "Upscale" : r.includes("text_to_image") || r.includes("image_to_image") || r === "base" ? "Base" : n || "Branch"; + return i ? k("sidebar.generation.stagePassN", "Pass {n}", { n: Number(i[1]) }) : r.includes("high") ? "High" : r.includes("low") ? "Low" : r.includes("refine") ? "Refiner" : r.includes("upscale") ? "Upscale" : r.includes("text_to_image") || r.includes("image_to_image") || r === "base" ? "Base" : n || "Branch"; } function Zr(e, t) { let n = new Set(t.map((e) => String(e).toLowerCase())); @@ -3198,7 +3198,7 @@ function ai(e, t, n, r) { return i.set(n, a), a; }, o = (e, t, n) => { let r = String(n || "").trim(); - r && (e.modelFields.some((e) => String(e.label || "").toLowerCase() === String(t || "").toLowerCase() && H(e.value) === H(r)) || e.modelFields.push({ + r && (e.modelFields.some((e) => String(e.label || "").toLowerCase() === String(t || "").toLowerCase() && yt(e.value) === yt(r)) || e.modelFields.push({ label: t, value: r })); @@ -3213,7 +3213,7 @@ function ai(e, t, n, r) { } let c = e.models && typeof e.models == "object" ? e.models : null; if (c) { - let t = $(c.unet), n = $r(t), r = $(c.checkpoint || (n ? null : c.unet) || e.model || e.checkpoint), i = $(c.unet_high_noise) || (n === "high" ? t : ""), l = $(c.unet_low_noise) || (n === "low" ? t : ""), u = $(c.clip), d = $(c.vae), f = Array.isArray(e.loras) ? e.loras.map((e) => vt(e)).filter(Boolean) : [], p = !!(i || l), m = !p && (r || u || d || f.length) ? a("base", "Base") : null, h = p && (u || d) ? a("shared", "Shared") : null, g = i ? a("high", "High") : null, _ = l ? a("low", "Low") : null; + let t = $(c.unet), n = $r(t), r = $(c.checkpoint || (n ? null : c.unet) || e.model || e.checkpoint), i = $(c.unet_high_noise) || (n === "high" ? t : ""), l = $(c.unet_low_noise) || (n === "low" ? t : ""), u = $(c.clip), d = $(c.vae), f = Array.isArray(e.loras) ? e.loras.map((e) => _t(e)).filter(Boolean) : [], p = !!(i || l), m = !p && (r || u || d || f.length) ? a("base", "Base") : null, h = p && (u || d) ? a("shared", "Shared") : null, g = i ? a("high", "High") : null, _ = l ? a("low", "Low") : null; if (m) { r && o(m, e.model || e.checkpoint || c.checkpoint ? "Model" : "UNet", r), u && o(m, "CLIP", u), d && o(m, "VAE", d); for (let e of f) s(m, e); @@ -3235,8 +3235,8 @@ function ai(e, t, n, r) { ["high", "low"].includes(n) || (d ? n = d : s > 1 || i > 1 ? n = `pass_${e + 1}` : h ? n = e === 0 ? "high" : "low" : n === "base" && l && u ? n = "high" : ["text_to_image", "image_to_image"].includes(n) && (n = m ? "low" : "base")), n.includes("upscale") && m && (n = "high"); let f = a(n, t.label); if (!/^pass_\d+$/i.test(n) && c && String(c.value || "") !== "-") { - let e = H(c.value); - f.modelFields.some((t) => H(t.value) === e) || f.modelFields.push(c); + let e = yt(c.value); + f.modelFields.some((t) => yt(t.value) === e) || f.modelFields.push(c); } for (let e of t.fields || []) [ "Sampler", @@ -3302,7 +3302,7 @@ function ci(e, ...t) { } function li(e) { return Array.isArray(e) ? e.filter((e) => e && typeof e == "object").map((e, t) => ({ - title: String(e.title || O("sidebar.generation.customInfoN", "Custom Info {n}", { n: t + 1 })).trim(), + title: String(e.title || k("sidebar.generation.customInfoN", "Custom Info {n}", { n: t + 1 })).trim(), content: String(e.content ?? e.value ?? "").trim(), color: /^#[0-9a-fA-F]{6}$/.test(String(e.color || "").trim()) ? String(e.color).trim() : "#2196F3" })).filter((e) => e.content) : []; @@ -3310,7 +3310,7 @@ function li(e) { function ui(e) { let t = Vr(e), n = { kind: "empty", - title: O("sidebar.generation.title", "Generation"), + title: k("sidebar.generation.title", "Generation"), workflowType: "", workflowLabel: "", workflowBadge: "", @@ -3322,8 +3322,8 @@ function ui(e) { promptTabs: [], mediaOnlyMessage: "", showAlignment: !1, - captionLabel: O("sidebar.generation.imageDescription", "Image Description"), - emptyCaptionText: O("sidebar.generation.noImageDescription", "No image description yet."), + captionLabel: k("sidebar.generation.imageDescription", "Image Description"), + emptyCaptionText: k("sidebar.generation.noImageDescription", "No image description yet."), isImageAsset: Ar(e), lyrics: "", modelFields: [], @@ -3350,19 +3350,19 @@ function ui(e) { return t && typeof t == "object" && t.kind === "media_pipeline" ? { ...n, kind: "media-only", - mediaOnlyMessage: O("sidebar.generation.mediaOnlyPipeline", "This file looks like a media-only pipeline (e.g. LoadVideo/VideoCombine) and does not contain generation parameters.") + mediaOnlyMessage: k("sidebar.generation.mediaOnlyPipeline", "This file looks like a media-only pipeline (e.g. LoadVideo/VideoCombine) and does not contain generation parameters.") } : Ar(e) || jr(e) ? { ...n, kind: "caption-only", showAlignment: !1 } : n; } - let r = t, i = si(r), a = r.engine && typeof r.engine == "object" ? r.engine : null, o = !!(r.is_override || a?.mode === "override" || a?.parser_version === "geninfo-override-v1" || a?.source === "majoor_geninfo"), s = bt(r), c = gt(typeof r.prompt == "string" ? r.prompt : null, typeof (r.negative_prompt || r.negativePrompt) == "string" ? r.negative_prompt || r.negativePrompt : null), l = Array.isArray(r.all_positive_prompts) && r.all_positive_prompts.length > 1 ? r.all_positive_prompts.map((e, t) => { - let n = gt(typeof e == "string" ? e : "", typeof r.all_negative_prompts?.[t] == "string" ? r.all_negative_prompts[t] : ""); + let r = t, i = si(r), a = r.engine && typeof r.engine == "object" ? r.engine : null, o = !!(r.is_override || a?.mode === "override" || a?.parser_version === "geninfo-override-v1" || a?.source === "majoor_geninfo"), s = bt(r), c = ht(typeof r.prompt == "string" ? r.prompt : null, typeof (r.negative_prompt || r.negativePrompt) == "string" ? r.negative_prompt || r.negativePrompt : null), l = Array.isArray(r.all_positive_prompts) && r.all_positive_prompts.length > 1 ? r.all_positive_prompts.map((e, t) => { + let n = ht(typeof e == "string" ? e : "", typeof r.all_negative_prompts?.[t] == "string" ? r.all_negative_prompts[t] : ""); return { - label: O("sidebar.generation.promptN", "Prompt {n}", { n: t + 1 }), - positive: yt(n.positive), - negative: yt(n.negative) + label: k("sidebar.generation.promptN", "Prompt {n}", { n: t + 1 }), + positive: vt(n.positive), + negative: vt(n.negative) }; }).filter((e) => e.positive) : [], u = [], d = /* @__PURE__ */ new Set(), f = r.models && typeof r.models == "object" ? r.models : null, p = Gr(r), m = new Set(p.map((e) => String(e.model || "").trim()).filter(Boolean)), h = Array.isArray(r.all_checkpoints) && r.all_checkpoints.length > 1 ? r.all_checkpoints : null; if (f) { @@ -3373,64 +3373,64 @@ function ui(e) { ].filter(Boolean)); if (h) h.forEach((e, t) => { let n = $(e); - Ur(u, d, O("sidebar.generation.checkpointN", "Checkpoint {n}", { n: t + 1 }), n); + Ur(u, d, k("sidebar.generation.checkpointN", "Checkpoint {n}", { n: t + 1 }), n); }); else { let t = $(f.checkpoint); - t && !e.has(t) && Ur(u, d, O("sidebar.generation.checkpoint", "Checkpoint"), t); + t && !e.has(t) && Ur(u, d, k("sidebar.generation.checkpoint", "Checkpoint"), t); } [ ["UNet", $(f.unet)], ["Diffusion", $(f.diffusion)], - [O("sidebar.generation.upscaler", "Upscaler"), $(f.upscaler)], + [k("sidebar.generation.upscaler", "Upscaler"), $(f.upscaler)], ["CLIP", $(f.clip)], ["VAE", $(f.vae)] ].forEach(([t, n]) => { e.has(n) || Ur(u, d, t, n); }); - } else (r.model || r.checkpoint) && Ur(u, d, O("sidebar.generation.model", "Model"), H(r.model || r.checkpoint)); + } else (r.model || r.checkpoint) && Ur(u, d, k("sidebar.generation.model", "Model"), yt(r.model || r.checkpoint)); if (Array.isArray(r.loras) && r.loras.length > 0) { - let e = r.loras.map((e) => vt(e)).filter(Boolean).join("\n"); - e && Ur(u, d, r.loras.length > 1 ? O("sidebar.generation.loras", "LoRAs") : "LoRA", e); + let e = r.loras.map((e) => _t(e)).filter(Boolean).join("\n"); + e && Ur(u, d, r.loras.length > 1 ? k("sidebar.generation.loras", "LoRAs") : "LoRA", e); } - !f && r.clip && Ur(u, d, "CLIP", H(r.clip)), !f && r.vae && Ur(u, d, "VAE", H(r.vae)), !f && r.unet && Ur(u, d, "UNet", H(r.unet)), !f && r.diffusion && Ur(u, d, "Diffusion", H(r.diffusion)), !f && r.upscaler && Ur(u, d, O("sidebar.generation.upscaler", "Upscaler"), H(r.upscaler)), f && r.clip && Ur(u, d, "CLIP", H(r.clip)), f && r.vae && Ur(u, d, "VAE", H(r.vae)); + !f && r.clip && Ur(u, d, "CLIP", yt(r.clip)), !f && r.vae && Ur(u, d, "VAE", yt(r.vae)), !f && r.unet && Ur(u, d, "UNet", yt(r.unet)), !f && r.diffusion && Ur(u, d, "Diffusion", yt(r.diffusion)), !f && r.upscaler && Ur(u, d, k("sidebar.generation.upscaler", "Upscaler"), yt(r.upscaler)), f && r.clip && Ur(u, d, "CLIP", yt(r.clip)), f && r.vae && Ur(u, d, "VAE", yt(r.vae)); for (let e of u) { let t = String(e.label || "").toLowerCase(); (t.includes("checkpoint") || t === "model") && (e.override = ci(i, "checkpoint", "model")), t === "clip" && (e.override = ci(i, "clip")), t === "vae" && (e.override = ci(i, "vae")), t.includes("lora") && (e.override = ci(i, "loras")); } let g = []; qr(r.seed) && g.push({ - label: O("sidebar.generation.seed", "Seed"), + label: k("sidebar.generation.seed", "Seed"), value: r.seed, override: ci(i, "seed") }), (r.sampler || r.sampler_name) && g.push({ - label: O("sidebar.generation.sampler", "Sampler"), + label: k("sidebar.generation.sampler", "Sampler"), value: r.sampler || r.sampler_name, override: ci(i, "sampler", "sampler_name") }), qr(r.steps) && g.push({ - label: O("sidebar.generation.steps", "Steps"), + label: k("sidebar.generation.steps", "Steps"), value: r.steps, override: ci(i, "steps") }); let _ = qr(r.cfg) ? r.cfg : r.cfg_scale; qr(_) && g.push({ - label: O("sidebar.generation.cfgScale", "CFG Scale"), + label: k("sidebar.generation.cfgScale", "CFG Scale"), value: _, override: ci(i, "cfg", "cfg_scale") }), r.cfg_high_noise !== void 0 && r.cfg_high_noise !== null && g.push({ - label: O("sidebar.generation.cfgHighNoise", "CFG High Noise"), + label: k("sidebar.generation.cfgHighNoise", "CFG High Noise"), value: r.cfg_high_noise }), r.cfg_low_noise !== void 0 && r.cfg_low_noise !== null && g.push({ - label: O("sidebar.generation.cfgLowNoise", "CFG Low Noise"), + label: k("sidebar.generation.cfgLowNoise", "CFG Low Noise"), value: r.cfg_low_noise }), r.scheduler && g.push({ - label: O("sidebar.generation.scheduler", "Scheduler"), + label: k("sidebar.generation.scheduler", "Scheduler"), value: r.scheduler, override: ci(i, "scheduler") }); let v = qr(r.denoise) ? r.denoise : r.denoising; qr(v) && g.push({ - label: O("sidebar.generation.denoise", "Denoise"), + label: k("sidebar.generation.denoise", "Denoise"), value: v, override: ci(i, "denoise", "denoising") }); @@ -3440,19 +3440,19 @@ function ui(e) { stage: String(e?.pass_stage || "").trim(), fields: [ { - label: O("sidebar.generation.model", "Model"), + label: k("sidebar.generation.model", "Model"), value: Q(e?.model) }, { - label: O("sidebar.generation.sampler", "Sampler"), + label: k("sidebar.generation.sampler", "Sampler"), value: Q(e?.sampler_name || e?.sampler) }, { - label: O("sidebar.generation.scheduler", "Scheduler"), + label: k("sidebar.generation.scheduler", "Scheduler"), value: Q(e?.scheduler) }, { - label: O("sidebar.generation.steps", "Steps"), + label: k("sidebar.generation.steps", "Steps"), value: Q(e?.steps) }, { @@ -3460,7 +3460,7 @@ function ui(e) { value: Q(e?.cfg) }, { - label: O("sidebar.generation.denoise", "Denoise"), + label: k("sidebar.generation.denoise", "Denoise"), value: Q(e?.denoise) }, { @@ -3472,7 +3472,7 @@ function ui(e) { value: Q(e?.end_at_step) }, { - label: O("sidebar.generation.seed", "Seed"), + label: k("sidebar.generation.seed", "Seed"), value: Q(e?.seed_val || e?.seed) } ] @@ -3481,19 +3481,19 @@ function ui(e) { stage: String(e?.pass_stage || "").trim(), fields: [ { - label: O("sidebar.generation.model", "Model"), + label: k("sidebar.generation.model", "Model"), value: Q(e?.model) }, { - label: O("sidebar.generation.sampler", "Sampler"), + label: k("sidebar.generation.sampler", "Sampler"), value: Q(e?.sampler_name || e?.sampler) }, { - label: O("sidebar.generation.scheduler", "Scheduler"), + label: k("sidebar.generation.scheduler", "Scheduler"), value: Q(e?.scheduler) }, { - label: O("sidebar.generation.steps", "Steps"), + label: k("sidebar.generation.steps", "Steps"), value: Q(e?.steps) }, { @@ -3501,7 +3501,7 @@ function ui(e) { value: Q(e?.cfg) }, { - label: O("sidebar.generation.denoise", "Denoise"), + label: k("sidebar.generation.denoise", "Denoise"), value: Q(e?.denoise) }, { @@ -3513,17 +3513,17 @@ function ui(e) { value: Q(e?.end_at_step) }, { - label: O("sidebar.generation.seed", "Seed"), + label: k("sidebar.generation.seed", "Seed"), value: Q(e?.seed_val || e?.seed) } ] }))); let b = []; r.voice && b.push({ - label: O("sidebar.generation.narratorVoice", "Narrator Voice"), + label: k("sidebar.generation.narratorVoice", "Narrator Voice"), value: r.voice }), r.language && b.push({ - label: O("sidebar.generation.language", "Language"), + label: k("sidebar.generation.language", "Language"), value: r.language }), r.top_k !== void 0 && r.top_k !== null && b.push({ label: "Top-k", @@ -3532,77 +3532,77 @@ function ui(e) { label: "Top-p", value: r.top_p }), r.temperature !== void 0 && r.temperature !== null && b.push({ - label: O("sidebar.generation.temperature", "Temperature"), + label: k("sidebar.generation.temperature", "Temperature"), value: r.temperature }), r.repetition_penalty !== void 0 && r.repetition_penalty !== null && b.push({ - label: O("sidebar.generation.repetitionPenalty", "Repetition Penalty"), + label: k("sidebar.generation.repetitionPenalty", "Repetition Penalty"), value: r.repetition_penalty }), r.max_new_tokens !== void 0 && r.max_new_tokens !== null && b.push({ - label: O("sidebar.generation.maxNewTokens", "Max New Tokens"), + label: k("sidebar.generation.maxNewTokens", "Max New Tokens"), value: r.max_new_tokens }); let x = []; r.device && x.push({ - label: O("sidebar.generation.device", "Device"), + label: k("sidebar.generation.device", "Device"), value: r.device }), r.voice_preset && x.push({ - label: O("sidebar.generation.voicePreset", "Voice Preset"), + label: k("sidebar.generation.voicePreset", "Voice Preset"), value: r.voice_preset }), r.dtype && x.push({ - label: O("sidebar.generation.dtype", "Dtype"), + label: k("sidebar.generation.dtype", "Dtype"), value: r.dtype }), r.attn_implementation && x.push({ - label: O("sidebar.generation.attention", "Attention"), + label: k("sidebar.generation.attention", "Attention"), value: r.attn_implementation }), r.compile_mode && x.push({ - label: O("sidebar.generation.compileMode", "Compile Mode"), + label: k("sidebar.generation.compileMode", "Compile Mode"), value: r.compile_mode }), [ - Kr(O("sidebar.generation.torchCompile", "Torch Compile"), r.use_torch_compile), - Kr(O("sidebar.generation.cudaGraphs", "CUDA Graphs"), r.use_cuda_graphs), - Kr(O("sidebar.generation.xVectorOnly", "X-Vector Only"), r.x_vector_only_mode) + Kr(k("sidebar.generation.torchCompile", "Torch Compile"), r.use_torch_compile), + Kr(k("sidebar.generation.cudaGraphs", "CUDA Graphs"), r.use_cuda_graphs), + Kr(k("sidebar.generation.xVectorOnly", "X-Vector Only"), r.x_vector_only_mode) ].filter(Boolean).forEach((e) => x.push(e)); let S = []; [ - Kr(O("sidebar.generation.chunking", "Chunking"), r.enable_chunking), + Kr(k("sidebar.generation.chunking", "Chunking"), r.enable_chunking), r.max_chars_per_chunk !== void 0 && r.max_chars_per_chunk !== null ? { - label: O("sidebar.generation.maxCharsChunk", "Max Chars/Chunk"), + label: k("sidebar.generation.maxCharsChunk", "Max Chars/Chunk"), value: r.max_chars_per_chunk } : null, r.chunk_combination_method ? { - label: O("sidebar.generation.chunkMethod", "Chunk Method"), + label: k("sidebar.generation.chunkMethod", "Chunk Method"), value: r.chunk_combination_method } : null, r.silence_between_chunks_ms !== void 0 && r.silence_between_chunks_ms !== null ? { - label: O("sidebar.generation.silenceBetweenChunks", "Silence Between Chunks (ms)"), + label: k("sidebar.generation.silenceBetweenChunks", "Silence Between Chunks (ms)"), value: r.silence_between_chunks_ms } : null, - Kr(O("sidebar.generation.audioCache", "Audio Cache"), r.enable_audio_cache), + Kr(k("sidebar.generation.audioCache", "Audio Cache"), r.enable_audio_cache), r.batch_size !== void 0 && r.batch_size !== null ? { - label: O("sidebar.generation.batchSize", "Batch Size"), + label: k("sidebar.generation.batchSize", "Batch Size"), value: r.batch_size } : null ].filter(Boolean).forEach((e) => S.push(e)); let C = []; r.lyrics_strength !== void 0 && r.lyrics_strength !== null && C.push({ - label: O("sidebar.generation.lyricsStrength", "Lyrics Strength"), + label: k("sidebar.generation.lyricsStrength", "Lyrics Strength"), value: r.lyrics_strength }); let w = []; qr(v) && !g.some((e) => e.label === "Denoise") && w.push({ - label: O("sidebar.generation.denoise", "Denoise"), + label: k("sidebar.generation.denoise", "Denoise"), value: v }), qr(r.clip_skip) && w.push({ - label: O("sidebar.generation.clipSkip", "Clip Skip"), + label: k("sidebar.generation.clipSkip", "Clip Skip"), value: r.clip_skip }); let T = [], ee = String(r.workflow_notes || r.notes || "").trim(); ee && T.push({ - label: O("sidebar.generation.workflowNotes", "Workflow Notes"), + label: k("sidebar.generation.workflowNotes", "Workflow Notes"), value: ee, override: ci(i, "workflow_notes", "notes") }); - let te = li(r.custom_info), ne = ai(r, p, g, y), E = oi(r, y, te, s.workflowType), re = ri(r, y), ie = Array.isArray(r.inputs) ? r.inputs.filter((e) => e && typeof e == "object" && e.filename).map((e, t) => ({ + let te = li(r.custom_info), ne = ai(r, p, g, y), re = oi(r, y, te, s.workflowType), ie = ri(r, y), E = Array.isArray(r.inputs) ? r.inputs.filter((e) => e && typeof e == "object" && e.filename).map((e, t) => ({ id: `${e.filename}-${t}`, filename: String(e.filename || "").trim(), filepath: String(e.filepath || e.filename || "").trim(), @@ -3637,14 +3637,14 @@ function ui(e) { ttsInstruction: String(r.instruct || "").trim(), ttsRuntimeFields: S, audioFields: C, - seed: re, + seed: ie, imageFields: w, - inputFiles: ie, + inputFiles: E, isOverride: o, overrideLabel: o ? "Gen Info Override" : "", notesFields: T, customInfoBlocks: te, - moduleBlocks: E + moduleBlocks: re }; } //#endregion @@ -3682,7 +3682,7 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { required: !0 } }, setup(e) { - let t = e, n = B(0), r = B(!1); + let t = e, n = V(0), r = V(!1); function i() { return (Array.isArray(t.inputFile?.previewCandidates) ? t.inputFile.previewCandidates : [])[n.value] || ""; } @@ -3720,9 +3720,9 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { console.debug?.(e); } } - return (t, n) => (j(), z("div", { + return (t, n) => (M(), B("div", { title: `${e.inputFile.filename} (click to copy, double-click to open in new tab)`, - style: V({ + style: H({ width: "64px", height: "64px", background: "#222", @@ -3738,7 +3738,7 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { }), onClick: o, onDblclick: s - }, [e.inputFile.isVideo ? (j(), z("video", { + }, [e.inputFile.isVideo ? (M(), B("video", { key: 0, src: i(), muted: "", @@ -3753,7 +3753,7 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { onError: a, onMouseover: c, onMouseout: l - }, null, 40, fi)) : (j(), z("img", { + }, null, 40, fi)) : (M(), B("img", { key: 1, src: i(), style: { @@ -3762,7 +3762,7 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { "object-fit": "cover" }, onError: a - }, null, 40, pi)), e.inputFile.role && e.inputFile.role !== "secondary" ? (j(), z("div", mi, R(e.inputFile.roleLabel), 1)) : e.inputFile.isVideo ? (j(), z("div", hi, " Play ")) : F("", !0)], 44, di)); + }, null, 40, pi)), e.inputFile.role && e.inputFile.role !== "secondary" ? (M(), B("div", mi, z(e.inputFile.roleLabel), 1)) : e.inputFile.isVideo ? (M(), B("div", hi, " Play ")) : I("", !0)], 44, di)); } }, _i = { key: 0, @@ -3877,30 +3877,6 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { "letter-spacing": "0.5px", "margin-bottom": "8px" } }, Bi = ["title"], Vi = ["title"], Hi = { style: { - "font-size": "11px", - "font-weight": "600", - color: "#9C27B0", - "text-transform": "uppercase", - "letter-spacing": "0.5px", - "margin-bottom": "10px" -} }, Ui = { style: { - display: "grid", - "grid-template-columns": "repeat(auto-fit, minmax(190px, 1fr))", - gap: "10px" -} }, Wi = { style: { - "font-size": "10px", - "font-weight": "700", - color: "rgba(255,255,255,0.58)", - "text-transform": "uppercase", - "letter-spacing": "0.4px" -} }, Gi = ["onClick"], Ki = { - key: 0, - style: { - display: "flex", - "flex-direction": "column", - gap: "5px" - } -}, qi = ["onClick"], Ji = { style: { "font-size": "11px", "font-weight": "600", color: "#00BCD4", @@ -3909,17 +3885,17 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { display: "flex", "align-items": "center", "justify-content": "space-between" -} }, Yi = ["title"], Xi = { style: { +} }, Ui = ["title"], Wi = { style: { display: "flex", "align-items": "center", gap: "10px" -} }, Zi = { style: { +} }, Gi = { style: { flex: "1", height: "8px", background: "rgba(255,255,255,0.1)", "border-radius": "4px", overflow: "hidden" -} }, Qi = { +} }, Ki = { key: 0, style: { "font-size": "10px", @@ -3929,7 +3905,7 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { padding: "6px 8px", background: "rgba(255,255,255,0.04)" } -}, $i = { style: { +}, qi = { style: { "font-size": "10px", "font-weight": "600", color: "rgba(0, 188, 212, 0.75)", @@ -3940,11 +3916,35 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { "align-items": "center", "justify-content": "space-between", gap: "8px" -} }, ea = ["title"], ta = { style: { +} }, Ji = ["title"], Yi = { style: { display: "flex", "align-items": "center", gap: "6px" -} }, na = ["title"], ra = { style: { +} }, Xi = ["title"], Zi = { style: { + "font-size": "11px", + "font-weight": "600", + color: "#9C27B0", + "text-transform": "uppercase", + "letter-spacing": "0.5px", + "margin-bottom": "10px" +} }, Qi = { style: { + display: "grid", + "grid-template-columns": "repeat(auto-fit, minmax(190px, 1fr))", + gap: "10px" +} }, $i = { style: { + "font-size": "10px", + "font-weight": "700", + color: "rgba(255,255,255,0.58)", + "text-transform": "uppercase", + "letter-spacing": "0.4px" +} }, ea = ["onClick"], ta = { + key: 0, + style: { + display: "flex", + "flex-direction": "column", + gap: "5px" + } +}, na = ["onClick"], ra = { style: { display: "flex", "justify-content": "space-between", "align-items": "center", @@ -4064,18 +4064,18 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { required: !0 } }, setup(e) { - let t = e, n = B(0), r = B(0), i = B(""), a = B(O("action.copy", "Copy")), o = B(O("action.generate", "Generate")), s = B(!1), c = B(u()), l = 0; + let t = e, n = V(0), r = V(0), i = V(""), a = V(k("action.copy", "Copy")), o = V(k("action.generate", "Generate")), s = V(!1), c = V(u()), l = 0; function u() { return { scoreText: "...", scoreColor: "#888", - qualityText: O("status.loading", "Loading"), + qualityText: k("status.loading", "Loading"), qualityColor: "#888", qualityBackground: "rgba(127,127,127,0.3)", fillWidth: "0%", fillColor: "#666", aiStatusVisible: !1, - aiStatusText: O("sidebar.generation.aiDisabledEnv", "AI features are disabled (enable vector search env var).") + aiStatusText: k("sidebar.generation.aiDisabledEnv", "AI features are disabled (enable vector search env var).") }; } function d(e, t) { @@ -4121,19 +4121,19 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { whiteSpace: "nowrap" }; } - let _ = I(() => ui(t.asset)), v = I(() => Mr()), y = I(() => _.value.kind === "full" || _.value.kind === "caption-only"), b = I(() => Fr(i.value) || _.value.emptyCaptionText), x = I(() => v.value && _.value.isImageAsset && !!t.asset?.id), S = I(() => v.value && !!Fr(b.value) && b.value !== _.value.emptyCaptionText), C = I(() => _.value.branchCards.filter((e) => e.modelFields.length || e.loras.length)), w = I(() => _.value.branchCards.filter((e) => e.samplingFields.length)); - I(() => _.value.branchCards.filter((e) => e.loras.length)); - let T = I(() => { + let _ = L(() => ui(t.asset)), v = L(() => Mr()), y = L(() => _.value.kind === "full" || _.value.kind === "caption-only"), b = L(() => Fr(i.value) || _.value.emptyCaptionText), x = L(() => v.value && _.value.isImageAsset && !!t.asset?.id), S = L(() => v.value && !!Fr(b.value) && b.value !== _.value.emptyCaptionText), C = L(() => _.value.branchCards.filter((e) => e.modelFields.length || e.loras.length)), w = L(() => _.value.branchCards.filter((e) => e.samplingFields.length)); + L(() => _.value.branchCards.filter((e) => e.loras.length)); + let T = L(() => { let e = [], t = (e, t) => Sr(e)?.title || t; return !C.value.length && _.value.modelFields.length && e.push({ key: "model", - title: t("model", O("sidebar.generation.modelLora", "Model & LoRA")), + title: t("model", k("sidebar.generation.modelLora", "Model & LoRA")), accent: "#9C27B0", emphasis: !0, fields: _.value.modelFields }), !w.value.length && _.value.samplingFields.length && e.push({ key: "sampling", - title: t("sampler", O("sidebar.generation.sampling", "Sampling")), + title: t("sampler", k("sidebar.generation.sampling", "Sampling")), accent: "#FF9800", emphasis: !0, fields: _.value.samplingFields @@ -4157,13 +4157,13 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { fields: _.value.ttsRuntimeFields }), _.value.audioFields.length && e.push({ key: "audio", - title: O("sidebar.generation.audio", "Audio"), + title: k("sidebar.generation.audio", "Audio"), accent: "#00BCD4", emphasis: !1, fields: _.value.audioFields }), _.value.imageFields.length && e.push({ key: "image", - title: O("sidebar.generation.image", "Image"), + title: k("sidebar.generation.image", "Image"), accent: "#2196F3", emphasis: !1, fields: _.value.imageFields @@ -4189,6 +4189,13 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { }; } function ne(e) { + return "#CE6DE0"; + } + function re(e) { + let t = String(e?.key || "").toLowerCase(); + return t.includes("high") ? "#FFC107" : t.includes("low") ? "#FFB300" : t.includes("base") ? "#FF9800" : t.includes("upscale") || t.includes("refine") ? "#FFCA28" : t.includes("pass") ? "#FDD835" : "#FF9800"; + } + function ie(e) { return e === "high_noise" ? "#FF7043" : e === "low_noise" ? "#29B6F6" : "#AB47BC"; } async function E(e, t = null, n = "rgba(76, 175, 80, 0.35)") { @@ -4199,39 +4206,39 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { console.debug?.(e); } } - function re() { + function D() { c.value = { scoreText: "AI OFF", scoreColor: "#9E9E9E", - qualityText: O("status.disabled", "Disabled"), + qualityText: k("status.disabled", "Disabled"), qualityColor: "#BDBDBD", qualityBackground: "rgba(158,158,158,0.25)", fillWidth: "0%", fillColor: "#777", aiStatusVisible: !0, - aiStatusText: O("sidebar.generation.aiDisabledSettings", "AI features are disabled in settings.") + aiStatusText: k("sidebar.generation.aiDisabledSettings", "AI features are disabled in settings.") }; } - function ie() { + function ae() { c.value = u(); } - async function D() { + async function oe() { l += 1; let e = l; if (!_.value.showAlignment || !t.asset?.id) { - ie(); + ae(); return; } if (!v.value) { - re(); + D(); return; } - ie(); + ae(); try { let n = await g(t.asset.id); if (e !== l) return; if (!n?.ok && (String(n?.code || "").toUpperCase() === "SERVICE_UNAVAILABLE" || /vector search is not enabled/i.test(String(n?.error || "")))) { - re(); + D(); return; } let r = n?.ok && n.data != null ? Number(n.data) : null; @@ -4239,7 +4246,7 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { c.value = { scoreText: "N/A", scoreColor: "#888", - qualityText: O("status.na", "N/A"), + qualityText: k("status.na", "N/A"), qualityColor: "#888", qualityBackground: "rgba(127,127,127,0.3)", fillWidth: "0%", @@ -4266,7 +4273,7 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { c.value = { scoreText: "-", scoreColor: "#888", - qualityText: O("status.unavailable", "Unavailable"), + qualityText: k("status.unavailable", "Unavailable"), qualityColor: "#888", qualityBackground: "rgba(127,127,127,0.3)", fillWidth: "0%", @@ -4276,42 +4283,42 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { }; } } - async function ae() { + async function se() { if (!(!x.value || s.value)) { - s.value = !0, o.value = O("status.generating", "Generating..."); + s.value = !0, o.value = k("status.generating", "Generating..."); try { let e = await p(t.asset.id); e?.ok && (i.value = String(e?.data || "").trim()); } catch (e) { console.debug?.(e); } finally { - s.value = !1, o.value = O("action.generate", "Generate"); + s.value = !1, o.value = k("action.generate", "Generate"); } } } - async function oe() { + async function O() { if (S.value) try { - await navigator.clipboard.writeText(b.value), a.value = O("viewer.copySuccessShort", "Copied!"), setTimeout(() => { - a.value = O("action.copy", "Copy"); + await navigator.clipboard.writeText(b.value), a.value = k("viewer.copySuccessShort", "Copied!"), setTimeout(() => { + a.value = k("action.copy", "Copy"); }, 900); } catch (e) { console.debug?.(e); } } - return Be(() => 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 }), Be(() => [ + return ze(() => t.asset, () => { + n.value = 0, r.value = 0, i.value = String(t.asset?.enhanced_caption || "").trim(), a.value = k("action.copy", "Copy"), o.value = k("action.generate", "Generate"); + }, { immediate: !0 }), ze(() => [ t.asset?.id, _.value.kind, _.value.showAlignment, v.value ], () => { - D(); + oe(); }, { immediate: !0 }), (e, t) => { - let r = Ge("MButton"); - return _.value.kind === "empty" ? F("", !0) : (j(), z("div", _i, [ - _.value.workflowType ? (j(), z("div", vi, [N("span", yi, R(L(O)("viewer.workflow", "Workflow")), 1), N("div", bi, [N("span", { - title: L(O)("sidebar.generation.workflowEngine", "Workflow engine: {value}", { value: _.value.workflowType }), + let r = We("MButton"); + return _.value.kind === "empty" ? I("", !0) : (M(), B("div", _i, [ + _.value.workflowType ? (M(), B("div", vi, [P("span", yi, z(R(k)("viewer.workflow", "Workflow")), 1), P("div", bi, [P("span", { + title: R(k)("sidebar.generation.workflowEngine", "Workflow engine: {value}", { value: _.value.workflowType }), style: { background: "#2196F3", color: "white", @@ -4321,9 +4328,9 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { "font-size": "10px", "letter-spacing": "0.2px" } - }, R(_.value.workflowLabel || _.value.workflowType), 9, xi), _.value.workflowBadge ? (j(), z("span", { + }, z(_.value.workflowLabel || _.value.workflowType), 9, xi), _.value.workflowBadge ? (M(), B("span", { key: 0, - title: L(O)("sidebar.generation.apiProvider", "API provider: {value}", { value: _.value.workflowBadge }), + title: R(k)("sidebar.generation.apiProvider", "API provider: {value}", { value: _.value.workflowBadge }), style: { background: "rgba(255,255,255,0.08)", color: "var(--fg-color, #eee)", @@ -4334,47 +4341,47 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { "font-size": "10px", "letter-spacing": "0.2px" } - }, R(_.value.workflowBadge), 9, Si)) : F("", !0)])])) : F("", !0), - _.value.isOverride ? (j(), z("div", { + }, z(_.value.workflowBadge), 9, Si)) : I("", !0)])])) : I("", !0), + _.value.isOverride ? (M(), B("div", { key: 1, - style: V(f("#00BCD4", { + style: H(f("#00BCD4", { emphasis: !0, startAlpha: .14, endAlpha: .08 })) - }, [N("div", Ci, [N("span", wi, R(L(O)("sidebar.generation.override", "Override")), 1), N("span", Ti, R(_.value.overrideLabel), 1)])], 4)) : F("", !0), - _.value.isTruncated ? (j(), z("div", { + }, [P("div", Ci, [P("span", wi, z(R(k)("sidebar.generation.override", "Override")), 1), P("span", Ti, z(_.value.overrideLabel), 1)])], 4)) : I("", !0), + _.value.isTruncated ? (M(), B("div", { key: 2, - style: V(f("#FF9800", { + style: H(f("#FF9800", { emphasis: !0, startAlpha: .12, endAlpha: .08 })) - }, [N("div", Ei, R(L(O)("sidebar.generation.metadataTruncated", "Metadata Truncated")), 1), N("div", Di, R(L(O)("sidebar.generation.metadataTruncatedBody", "Generation data is incomplete because it exceeded the size limit.")), 1)], 4)) : F("", !0), - _.value.kind === "media-only" ? (j(), z("div", { + }, [P("div", Ei, z(R(k)("sidebar.generation.metadataTruncated", "Metadata Truncated")), 1), P("div", Di, z(R(k)("sidebar.generation.metadataTruncatedBody", "Generation data is incomplete because it exceeded the size limit.")), 1)], 4)) : I("", !0), + _.value.kind === "media-only" ? (M(), B("div", { key: 3, - style: V(f("#9E9E9E", { + style: H(f("#9E9E9E", { emphasis: !0, startAlpha: .1, endAlpha: .06 })) - }, [N("div", Oi, R(L(O)("sidebar.generation.generationData", "Generation Data")), 1), N("div", ki, R(_.value.mediaOnlyMessage), 1)], 4)) : F("", !0), - _.value.kind === "full" ? (j(), z(M, { key: 4 }, [_.value.promptTabs.length ? (j(), z("div", { + }, [P("div", Oi, z(R(k)("sidebar.generation.generationData", "Generation Data")), 1), P("div", ki, z(_.value.mediaOnlyMessage), 1)], 4)) : I("", !0), + _.value.kind === "full" ? (M(), B(N, { key: 4 }, [_.value.promptTabs.length ? (M(), B("div", { key: 0, - style: V(f("#4CAF50", { + style: H(f("#4CAF50", { emphasis: !0, startAlpha: .16, endAlpha: .1 })) }, [ - N("div", Ai, R(L(O)("sidebar.generation.promptPipeline", "Prompt Pipeline ({count} variants)", { count: _.value.promptTabs.length })), 1), - N("div", ji, [(j(!0), z(M, null, P(_.value.promptTabs, (e, t) => (j(), ze(r, { + P("div", Ai, z(R(k)("sidebar.generation.promptPipeline", "Prompt Pipeline ({count} variants)", { count: _.value.promptTabs.length })), 1), + P("div", ji, [(M(!0), B(N, null, F(_.value.promptTabs, (e, t) => (M(), Re(r, { key: e.label, type: "button", severity: "secondary", text: "", rounded: "", - style: V({ + style: H({ appearance: "none", border: n.value === t ? "1px solid #4CAF50" : "1px solid var(--border-color, rgba(255,255,255,0.12))", borderRadius: "999px", @@ -4388,10 +4395,10 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { }), onClick: (e) => n.value = t }, { - default: ct(() => [Re(R(e.label), 1)]), + default: st(() => [Le(z(e.label), 1)]), _: 2 }, 1032, ["style", "onClick"]))), 128))]), - (j(!0), z(M, null, P(_.value.promptTabs, (e, t) => Ve((j(), z("div", { + (M(!0), B(N, null, F(_.value.promptTabs, (e, t) => Be((M(), B("div", { key: `${e.label}-panel`, style: { display: "flex", @@ -4404,8 +4411,8 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { padding: "10px" } }, [ - N("div", Mi, R(L(O)("sidebar.generation.positive", "POSITIVE")), 1), - N("div", { + P("div", Mi, z(R(k)("sidebar.generation.positive", "POSITIVE")), 1), + P("div", { style: { "font-size": "12px", color: "var(--fg-color, #ddd)", @@ -4414,8 +4421,8 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { cursor: "pointer" }, onClick: (t) => E(e.positive, t.currentTarget) - }, R(e.positive), 9, Ni), - e.negative ? (j(), z(M, { key: 0 }, [N("div", Pi, R(L(O)("sidebar.generation.negative", "NEGATIVE")), 1), N("div", { + }, z(e.positive), 9, Ni), + e.negative ? (M(), B(N, { key: 0 }, [P("div", Pi, z(R(k)("sidebar.generation.negative", "NEGATIVE")), 1), P("div", { style: { "font-size": "12px", color: "var(--fg-color, #ddd)", @@ -4424,21 +4431,21 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { cursor: "pointer" }, onClick: (t) => E(e.negative, t.currentTarget) - }, R(e.negative), 9, Fi)], 64)) : F("", !0) - ])), [[Je, n.value === t]])), 128)) - ], 4)) : _.value.positivePrompt ? (j(), z("div", { + }, z(e.negative), 9, Fi)], 64)) : I("", !0) + ])), [[qe, n.value === t]])), 128)) + ], 4)) : _.value.positivePrompt ? (M(), B("div", { key: 1, - style: V(f("#4CAF50", { + style: H(f("#4CAF50", { emphasis: !0, startAlpha: .16, endAlpha: .1 })) - }, [N("div", Ii, [N("span", null, R(L(O)("sidebar.generation.positivePrompt", "Positive Prompt")), 1), _.value.positivePromptOverride ? (j(), z("span", { + }, [P("div", Ii, [P("span", null, z(R(k)("sidebar.generation.positivePrompt", "Positive Prompt")), 1), _.value.positivePromptOverride ? (M(), B("span", { key: 0, - style: V(h()), - title: L(O)("sidebar.generation.overrideTooltip", "This field was forced by Majoor Gen Info Override") - }, R(L(O)("sidebar.generation.override", "override")), 13, Li)) : F("", !0)]), N("div", { - title: L(O)("action.clickToCopy", "Click to copy"), + style: H(h()), + title: R(k)("sidebar.generation.overrideTooltip", "This field was forced by Majoor Gen Info Override") + }, z(R(k)("sidebar.generation.override", "override")), 13, Li)) : I("", !0)]), P("div", { + title: R(k)("action.clickToCopy", "Click to copy"), style: { "font-size": "12px", color: "var(--fg-color, rgba(255,255,255,0.9))", @@ -4448,19 +4455,19 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { cursor: "pointer" }, onClick: t[0] ||= (e) => E(_.value.positivePrompt, e.currentTarget) - }, R(_.value.positivePrompt), 9, Ri)], 4)) : F("", !0), !_.value.promptTabs.length && _.value.negativePrompt ? (j(), z("div", { + }, z(_.value.positivePrompt), 9, Ri)], 4)) : I("", !0), !_.value.promptTabs.length && _.value.negativePrompt ? (M(), B("div", { key: 2, - style: V(f("#F44336", { + style: H(f("#F44336", { emphasis: !0, startAlpha: .16, endAlpha: .1 })) - }, [N("div", zi, [N("span", null, R(L(O)("sidebar.generation.negativePrompt", "Negative Prompt")), 1), _.value.negativePromptOverride ? (j(), z("span", { + }, [P("div", zi, [P("span", null, z(R(k)("sidebar.generation.negativePrompt", "Negative Prompt")), 1), _.value.negativePromptOverride ? (M(), B("span", { key: 0, - style: V(h()), - title: L(O)("sidebar.generation.overrideTooltip", "This field was forced by Majoor Gen Info Override") - }, R(L(O)("sidebar.generation.override", "override")), 13, Bi)) : F("", !0)]), N("div", { - title: L(O)("action.clickToCopy", "Click to copy"), + style: H(h()), + title: R(k)("sidebar.generation.overrideTooltip", "This field was forced by Majoor Gen Info Override") + }, z(R(k)("sidebar.generation.override", "override")), 13, Bi)) : I("", !0)]), P("div", { + title: R(k)("action.clickToCopy", "Click to copy"), style: { "font-size": "12px", color: "var(--fg-color, rgba(255,255,255,0.9))", @@ -4470,26 +4477,135 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { cursor: "pointer" }, onClick: t[1] ||= (e) => E(_.value.negativePrompt, e.currentTarget) - }, R(_.value.negativePrompt), 9, Vi)], 4)) : F("", !0)], 64)) : F("", !0), - C.value.length ? (j(), z("div", { + }, z(_.value.negativePrompt), 9, Vi)], 4)) : I("", !0)], 64)) : I("", !0), + y.value ? (M(), B("div", { key: 5, - style: V(f("#9C27B0", { + style: { + background: "linear-gradient(135deg, rgba(0, 188, 212, 0.14) 0%, rgba(33, 150, 243, 0.10) 100%)", + border: "1px solid rgba(0, 188, 212, 0.40)", + "border-radius": "6px", + padding: "12px", + display: "flex", + "flex-direction": "column", + gap: "10px" + }, + class: nt({ "mjr-ai-disabled-block": !v.value }) + }, [ + _.value.showAlignment ? (M(), B(N, { key: 0 }, [ + P("div", Hi, [P("span", { title: R(k)("sidebar.generation.promptAlignmentTooltip", "How closely the generated image matches the prompt (SigLIP2 score)") }, z(R(k)("sidebar.generation.promptAlignment", "Prompt Alignment")), 9, Ui)]), + P("div", Wi, [ + P("div", Gi, [P("div", { style: H({ + height: "100%", + width: c.value.fillWidth, + background: c.value.fillColor, + borderRadius: "4px", + transition: "width 0.6s ease, background 0.4s ease" + }) }, null, 4)]), + P("span", { style: H({ + fontSize: "13px", + fontWeight: "700", + color: c.value.scoreColor, + minWidth: "60px", + textAlign: "right", + fontFamily: "'Consolas', 'Monaco', monospace" + }) }, z(c.value.scoreText), 5), + P("span", { style: H({ + fontSize: "9px", + fontWeight: "700", + padding: "2px 6px", + borderRadius: "3px", + background: c.value.qualityBackground, + color: c.value.qualityColor, + textTransform: "uppercase", + letterSpacing: "0.5px" + }) }, z(c.value.qualityText), 5) + ]), + c.value.aiStatusVisible ? (M(), B("div", Ki, z(c.value.aiStatusText), 1)) : I("", !0) + ], 64)) : I("", !0), + P("div", qi, [P("span", { title: R(k)("sidebar.generation.aiCaptionTooltip", "AI caption generated by Florence-2") }, z(_.value.captionLabel), 9, Ji), P("div", Yi, [et(r, { + type: "button", + class: "mjr-ai-control", + severity: "secondary", + text: "", + disabled: !x.value || s.value, + style: H([{ + border: "1px solid rgba(0,188,212,0.45)", + background: "rgba(0,188,212,0.12)", + color: "#00BCD4", + "border-radius": "4px", + "font-size": "10px", + "font-weight": "600", + padding: "2px 8px", + cursor: "pointer" + }, { + opacity: x.value ? "1" : "0.6", + cursor: x.value ? "pointer" : "default" + }]), + onClick: Ue(se, ["stop"]) + }, { + default: st(() => [Le(z(o.value), 1)]), + _: 1 + }, 8, ["disabled", "style"]), et(r, { + type: "button", + class: "mjr-ai-control", + severity: "secondary", + text: "", + disabled: !S.value, + style: H([{ + border: "1px solid rgba(0,188,212,0.45)", + background: "rgba(0,188,212,0.12)", + color: "#00BCD4", + "border-radius": "4px", + "font-size": "10px", + "font-weight": "600", + padding: "2px 8px", + cursor: "pointer" + }, { + opacity: S.value ? "1" : "0.6", + cursor: S.value ? "pointer" : "default" + }]), + onClick: Ue(O, ["stop"]) + }, { + default: st(() => [Le(z(a.value), 1)]), + _: 1 + }, 8, ["disabled", "style"])])]), + P("div", { + title: v.value ? R(k)("sidebar.generation.copyCaptionTooltip", "Click to copy caption") : R(k)("sidebar.generation.aiCaptionDisabled", "AI caption controls are disabled"), + style: H({ + marginTop: "4px", + padding: "8px", + borderRadius: "6px", + border: "1px solid rgba(0, 188, 212, 0.30)", + background: "rgba(0, 188, 212, 0.08)", + color: "rgba(230, 250, 255, 0.95)", + fontSize: "11px", + lineHeight: "1.45", + whiteSpace: "pre-wrap", + wordBreak: "break-word", + cursor: S.value ? "copy" : "default" + }), + onClick: O + }, z(b.value), 13, Xi) + ], 2)) : I("", !0), + C.value.length ? (M(), B("div", { + key: 6, + style: H(f("#9C27B0", { emphasis: !0, startAlpha: .18, endAlpha: .1 })) - }, [N("div", Hi, R(L(O)("sidebar.generation.models", "Models")), 1), N("div", Ui, [(j(!0), z(M, null, P(C.value, (e) => (j(), z("div", { + }, [P("div", Zi, z(R(k)("sidebar.generation.models", "Models")), 1), P("div", Qi, [(M(!0), B(N, null, F(C.value, (e) => (M(), B("div", { key: `models-top-${e.key}`, - style: V(te(e.accent, !0)) + style: H(te(ne(e), !0)) }, [ - N("div", { style: V({ + P("div", { style: H({ fontSize: "10px", fontWeight: "800", - color: e.accent, + color: ne(e), letterSpacing: "0.6px", textTransform: "uppercase" - }) }, R(e.label), 5), - (j(!0), z(M, null, P(e.modelFields, (t) => (j(), z("div", { + }) }, z(e.label), 5), + (M(!0), B(N, null, F(e.modelFields, (t) => (M(), B("div", { key: `model-top-${e.key}-${t.label}`, style: { display: "flex", @@ -4497,7 +4613,7 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { gap: "3px", "min-width": "0" } - }, [N("span", Wi, R(t.label), 1), N("span", { + }, [P("span", $i, z(t.label), 1), P("span", { style: { "font-size": "12px", color: "var(--fg-color, rgba(255,255,255,0.96))", @@ -4506,14 +4622,14 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { cursor: "pointer" }, onClick: (e) => E(t.value, e.currentTarget) - }, R(t.value || "-"), 9, Gi)]))), 128)), - e.loras.length ? (j(), z("div", Ki, [t[4] ||= N("span", { style: { + }, z(t.value || "-"), 9, ea)]))), 128)), + e.loras.length ? (M(), B("div", ta, [t[4] ||= P("span", { style: { "font-size": "10px", "font-weight": "700", color: "rgba(255,255,255,0.58)", "text-transform": "uppercase", "letter-spacing": "0.4px" - } }, "LoRA", -1), (j(!0), z(M, null, P(e.loras, (t, n) => (j(), z("span", { + } }, "LoRA", -1), (M(!0), B(N, null, F(e.loras, (t, n) => (M(), B("span", { key: `model-top-${e.key}-lora-${n}`, style: { "font-size": "12px", @@ -4527,140 +4643,31 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { cursor: "pointer" }, onClick: (e) => E(t, e.currentTarget) - }, R(t), 9, qi))), 128))])) : F("", !0) - ], 4))), 128))])], 4)) : F("", !0), - y.value ? (j(), z("div", { - key: 6, - style: { - background: "linear-gradient(135deg, rgba(0, 188, 212, 0.14) 0%, rgba(33, 150, 243, 0.10) 100%)", - border: "1px solid rgba(0, 188, 212, 0.40)", - "border-radius": "6px", - padding: "12px", - display: "flex", - "flex-direction": "column", - gap: "10px" - }, - class: rt({ "mjr-ai-disabled-block": !v.value }) - }, [ - _.value.showAlignment ? (j(), z(M, { key: 0 }, [ - N("div", Ji, [N("span", { title: L(O)("sidebar.generation.promptAlignmentTooltip", "How closely the generated image matches the prompt (SigLIP2 score)") }, R(L(O)("sidebar.generation.promptAlignment", "Prompt Alignment")), 9, Yi)]), - N("div", Xi, [ - N("div", Zi, [N("div", { style: V({ - height: "100%", - width: c.value.fillWidth, - background: c.value.fillColor, - borderRadius: "4px", - transition: "width 0.6s ease, background 0.4s ease" - }) }, null, 4)]), - N("span", { style: V({ - fontSize: "13px", - fontWeight: "700", - color: c.value.scoreColor, - minWidth: "60px", - textAlign: "right", - fontFamily: "'Consolas', 'Monaco', monospace" - }) }, R(c.value.scoreText), 5), - N("span", { style: V({ - fontSize: "9px", - fontWeight: "700", - padding: "2px 6px", - borderRadius: "3px", - background: c.value.qualityBackground, - color: c.value.qualityColor, - textTransform: "uppercase", - letterSpacing: "0.5px" - }) }, R(c.value.qualityText), 5) - ]), - c.value.aiStatusVisible ? (j(), z("div", Qi, R(c.value.aiStatusText), 1)) : F("", !0) - ], 64)) : F("", !0), - N("div", $i, [N("span", { title: L(O)("sidebar.generation.aiCaptionTooltip", "AI caption generated by Florence-2") }, R(_.value.captionLabel), 9, ea), N("div", ta, [tt(r, { - type: "button", - class: "mjr-ai-control", - severity: "secondary", - text: "", - disabled: !x.value || s.value, - style: V([{ - border: "1px solid rgba(0,188,212,0.45)", - background: "rgba(0,188,212,0.12)", - color: "#00BCD4", - "border-radius": "4px", - "font-size": "10px", - "font-weight": "600", - padding: "2px 8px", - cursor: "pointer" - }, { - opacity: x.value ? "1" : "0.6", - cursor: x.value ? "pointer" : "default" - }]), - onClick: We(ae, ["stop"]) - }, { - default: ct(() => [Re(R(o.value), 1)]), - _: 1 - }, 8, ["disabled", "style"]), tt(r, { - type: "button", - class: "mjr-ai-control", - severity: "secondary", - text: "", - disabled: !S.value, - style: V([{ - border: "1px solid rgba(0,188,212,0.45)", - background: "rgba(0,188,212,0.12)", - color: "#00BCD4", - "border-radius": "4px", - "font-size": "10px", - "font-weight": "600", - padding: "2px 8px", - cursor: "pointer" - }, { - opacity: S.value ? "1" : "0.6", - cursor: S.value ? "pointer" : "default" - }]), - onClick: We(oe, ["stop"]) - }, { - default: ct(() => [Re(R(a.value), 1)]), - _: 1 - }, 8, ["disabled", "style"])])]), - N("div", { - title: v.value ? L(O)("sidebar.generation.copyCaptionTooltip", "Click to copy caption") : L(O)("sidebar.generation.aiCaptionDisabled", "AI caption controls are disabled"), - style: V({ - marginTop: "4px", - padding: "8px", - borderRadius: "6px", - border: "1px solid rgba(0, 188, 212, 0.30)", - background: "rgba(0, 188, 212, 0.08)", - color: "rgba(230, 250, 255, 0.95)", - fontSize: "11px", - lineHeight: "1.45", - whiteSpace: "pre-wrap", - wordBreak: "break-word", - cursor: S.value ? "copy" : "default" - }), - onClick: oe - }, R(b.value), 13, na) - ], 2)) : F("", !0), - _.value.lyrics ? (j(), z("div", { + }, z(t), 9, na))), 128))])) : I("", !0) + ], 4))), 128))])], 4)) : I("", !0), + _.value.lyrics ? (M(), B("div", { key: 7, - style: V(f("#00BCD4", { emphasis: !1 })) - }, [N("div", ra, [N("span", null, R(L(O)("sidebar.generation.lyrics", "Lyrics")), 1)]), N("div", ia, R(_.value.lyrics), 1)], 4)) : F("", !0), - _.value.branchCards.length ? (j(), z(M, { key: 8 }, [ - F("", !0), - w.value.length ? (j(), z("div", { + style: H(f("#00BCD4", { emphasis: !1 })) + }, [P("div", ra, [P("span", null, z(R(k)("sidebar.generation.lyrics", "Lyrics")), 1)]), P("div", ia, z(_.value.lyrics), 1)], 4)) : I("", !0), + _.value.branchCards.length ? (M(), B(N, { key: 8 }, [ + I("", !0), + w.value.length ? (M(), B("div", { key: 1, - style: V(f("#FF9800", { + style: H(f("#FF9800", { emphasis: !0, startAlpha: .16, endAlpha: .1 })) - }, [N("div", aa, R(L(O)("sidebar.generation.sampling", "Sampling")), 1), N("div", oa, [(j(!0), z(M, null, P(w.value, (e) => (j(), z("div", { + }, [P("div", aa, z(R(k)("sidebar.generation.sampling", "Sampling")), 1), P("div", oa, [(M(!0), B(N, null, F(w.value, (e) => (M(), B("div", { key: `sampling-${e.key}`, - style: V(te(e.accent, !0)) - }, [N("div", { style: V({ + style: H(te(re(e), !0)) + }, [P("div", { style: H({ fontSize: "10px", fontWeight: "800", - color: e.accent, + color: re(e), letterSpacing: "0.6px", textTransform: "uppercase" - }) }, R(e.label), 5), (j(!0), z(M, null, P(e.samplingFields, (t) => (j(), z("div", { + }) }, z(e.label), 5), (M(!0), B(N, null, F(e.samplingFields, (t) => (M(), B("div", { key: `sampling-row-${e.key}-${t.label}`, style: { display: "grid", @@ -4670,7 +4677,7 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { color: "rgba(255,255,255,0.72)", "align-items": "start" } - }, [N("span", null, R(t.label), 1), N("span", { + }, [P("span", null, z(t.label), 1), P("span", { style: { color: "var(--fg-color, #ddd)", "word-break": "break-word", @@ -4678,43 +4685,43 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { cursor: "pointer" }, onClick: (e) => E(t.value, e.currentTarget) - }, R(t.value), 9, sa)]))), 128))], 4))), 128))])], 4)) : F("", !0), - F("", !0) - ], 64)) : _.value.modelGroups.length ? (j(), z("div", { + }, z(t.value), 9, sa)]))), 128))], 4))), 128))])], 4)) : I("", !0), + I("", !0) + ], 64)) : _.value.modelGroups.length ? (M(), B("div", { key: 9, - style: V(f("#9C27B0", { + style: H(f("#9C27B0", { emphasis: !0, startAlpha: .18, endAlpha: .1 })) - }, [N("div", ca, R(L(O)("sidebar.generation.models", "Models")), 1), N("div", la, [(j(!0), z(M, null, P(_.value.modelGroups, (e) => (j(), z("div", { + }, [P("div", ca, z(R(k)("sidebar.generation.models", "Models")), 1), P("div", la, [(M(!0), B(N, null, F(_.value.modelGroups, (e) => (M(), B("div", { key: `model-group-${e.key}`, - style: V(te(ne(e.key), !0)) + style: H(te(ie(e.key), !0)) }, [ - N("div", ua, [N("div", { style: V({ + P("div", ua, [P("div", { style: H({ fontSize: "10px", fontWeight: "800", - color: ne(e.key), + color: ie(e.key), letterSpacing: "0.6px", textTransform: "uppercase" - }) }, R(e.label), 5), N("span", { style: V({ + }) }, z(e.label), 5), P("span", { style: H({ fontSize: "9px", fontWeight: "700", color: "#fff", - background: d(ne(e.key), .22), - border: `1px solid ${d(ne(e.key), .48)}`, + background: d(ie(e.key), .22), + border: `1px solid ${d(ie(e.key), .48)}`, borderRadius: "999px", padding: "2px 8px", letterSpacing: "0.4px", textTransform: "uppercase" - }) }, R(e.loras?.length || 0) + " LoRA ", 5)]), - N("div", da, [t[5] ||= N("div", { style: { + }) }, z(e.loras?.length || 0) + " LoRA ", 5)]), + P("div", da, [t[5] ||= P("div", { style: { "font-size": "10px", "font-weight": "700", color: "rgba(255,255,255,0.58)", "text-transform": "uppercase", "letter-spacing": "0.4px" - } }, " UNet ", -1), N("div", { + } }, " UNet ", -1), P("div", { style: { "font-size": "12px", color: "var(--fg-color, rgba(255,255,255,0.96))", @@ -4723,8 +4730,8 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { cursor: "pointer" }, onClick: (t) => E(e.model, t.currentTarget) - }, R(e.model || "-"), 9, fa)]), - e.loras?.length ? (j(), z("div", pa, [N("div", ma, R(L(O)("sidebar.generation.loraStack", "LoRA Stack")), 1), N("div", ha, [(j(!0), z(M, null, P(e.loras, (t, n) => (j(), z("div", { + }, z(e.model || "-"), 9, fa)]), + e.loras?.length ? (M(), B("div", pa, [P("div", ma, z(R(k)("sidebar.generation.loraStack", "LoRA Stack")), 1), P("div", ha, [(M(!0), B(N, null, F(e.loras, (t, n) => (M(), B("div", { key: `${e.key}-lora-${n}`, style: { "font-size": "12px", @@ -4738,19 +4745,19 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { cursor: "pointer" }, onClick: (e) => E(t, e.currentTarget) - }, R(t), 9, ga))), 128))])])) : F("", !0) - ], 4))), 128))])], 4)) : F("", !0), - (j(!0), z(M, null, P(T.value, (e) => (j(), z("div", { + }, z(t), 9, ga))), 128))])])) : I("", !0) + ], 4))), 128))])], 4)) : I("", !0), + (M(!0), B(N, null, F(T.value, (e) => (M(), B("div", { key: e.key, - style: V(f(e.accent, { emphasis: e.emphasis })) - }, [N("div", { style: V({ + style: H(f(e.accent, { emphasis: e.emphasis })) + }, [P("div", { style: H({ fontSize: "11px", fontWeight: "600", color: e.accent, textTransform: "uppercase", letterSpacing: "0.5px", marginBottom: "10px" - }) }, R(e.title), 5), N("div", _a, [(j(!0), z(M, null, P(e.fields, (t) => (j(), z(M, { key: `${e.key}-${t.label}` }, [N("div", { + }) }, z(e.title), 5), P("div", _a, [(M(!0), B(N, null, F(e.fields, (t) => (M(), B(N, { key: `${e.key}-${t.label}` }, [P("div", { title: t.label, style: { "font-size": "11px", @@ -4760,11 +4767,11 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { "align-items": "center", gap: "6px" } - }, [N("span", null, R(t.label) + ":", 1), t.override ? (j(), z("span", { + }, [P("span", null, z(t.label) + ":", 1), t.override ? (M(), B("span", { key: 0, - style: V(h()), - title: L(O)("sidebar.generation.overrideTooltip", "This field was forced by Majoor Gen Info Override") - }, R(L(O)("sidebar.generation.override", "override")), 13, ya)) : F("", !0)], 8, va), N("div", { + style: H(h()), + title: R(k)("sidebar.generation.overrideTooltip", "This field was forced by Majoor Gen Info Override") + }, z(R(k)("sidebar.generation.override", "override")), 13, ya)) : I("", !0)], 8, va), P("div", { title: `${t.label}: ${t.value}`, style: { "font-size": "12px", @@ -4774,11 +4781,11 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { cursor: "pointer" }, onClick: (e) => E(t.value, e.currentTarget) - }, R(t.value), 9, ba)], 64))), 128))])], 4))), 128)), - _.value.notesFields.length ? (j(), z("div", { + }, z(t.value), 9, ba)], 64))), 128))])], 4))), 128)), + _.value.notesFields.length ? (M(), B("div", { key: 10, - style: V(f("#4CAF50", { emphasis: !1 })) - }, [N("div", xa, R(L(O)("sidebar.generation.notes", "Notes")), 1), (j(!0), z(M, null, P(_.value.notesFields, (e) => (j(), z("div", { + style: H(f("#4CAF50", { emphasis: !1 })) + }, [P("div", xa, z(R(k)("sidebar.generation.notes", "Notes")), 1), (M(!0), B(N, null, F(_.value.notesFields, (e) => (M(), B("div", { key: e.label, title: `${e.label}: ${e.value}`, style: { @@ -4790,24 +4797,24 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { cursor: "pointer" }, onClick: (t) => E(e.value, t.currentTarget) - }, R(e.value), 9, Sa))), 128))], 4)) : F("", !0), - _.value.moduleBlocks.length ? (j(), z("div", { + }, z(e.value), 9, Sa))), 128))], 4)) : I("", !0), + _.value.moduleBlocks.length ? (M(), B("div", { key: 11, - style: V(f("#26C6DA", { + style: H(f("#26C6DA", { emphasis: !0, startAlpha: .14, endAlpha: .08 })) - }, [N("div", Ca, R(L(O)("sidebar.generation.modules", "Modules")), 1), N("div", wa, [(j(!0), z(M, null, P(_.value.moduleBlocks, (e) => (j(), z("div", { + }, [P("div", Ca, z(R(k)("sidebar.generation.modules", "Modules")), 1), P("div", wa, [(M(!0), B(N, null, F(_.value.moduleBlocks, (e) => (M(), B("div", { key: `module-${e.key}-${e.title}`, - style: V(te(e.accent, !1)) - }, [N("div", { style: V({ + style: H(te(e.accent, !1)) + }, [P("div", { style: H({ fontSize: "10px", fontWeight: "800", color: e.accent, letterSpacing: "0.6px", textTransform: "uppercase" - }) }, R(e.title), 5), (j(!0), z(M, null, P(e.fields, (t) => (j(), z("div", { + }) }, z(e.title), 5), (M(!0), B(N, null, F(e.fields, (t) => (M(), B("div", { key: `module-${e.key}-${t.label}`, style: { display: "flex", @@ -4815,7 +4822,7 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { gap: "3px", "min-width": "0" } - }, [N("span", Ta, R(t.label), 1), N("span", { + }, [P("span", Ta, z(t.label), 1), P("span", { title: `${t.label}: ${t.value}`, style: { "font-size": "12px", @@ -4826,12 +4833,12 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { cursor: "pointer" }, onClick: (e) => E(t.value, e.currentTarget) - }, R(t.value), 9, Ea)]))), 128))], 4))), 128))])], 4)) : F("", !0), - _.value.ttsInstruction ? (j(), z("div", { + }, z(t.value), 9, Ea)]))), 128))], 4))), 128))])], 4)) : I("", !0), + _.value.ttsInstruction ? (M(), B("div", { key: 12, - style: V(f("#26A69A", { emphasis: !1 })) - }, [N("div", Da, [N("span", null, R(L(O)("sidebar.generation.ttsInstruction", "TTS Instruction")), 1)]), N("div", { - title: L(O)("action.clickToCopy", "Click to copy"), + style: H(f("#26A69A", { emphasis: !1 })) + }, [P("div", Da, [P("span", null, z(R(k)("sidebar.generation.ttsInstruction", "TTS Instruction")), 1)]), P("div", { + title: R(k)("action.clickToCopy", "Click to copy"), style: { "font-size": "12px", color: "var(--fg-color, rgba(255,255,255,0.9))", @@ -4841,12 +4848,12 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { cursor: "pointer" }, onClick: t[2] ||= (e) => E(_.value.ttsInstruction, e.currentTarget) - }, R(_.value.ttsInstruction), 9, Oa)], 4)) : F("", !0), - _.value.seed !== null && _.value.seed !== void 0 && _.value.seed !== "" ? (j(), z("div", { + }, z(_.value.ttsInstruction), 9, Oa)], 4)) : I("", !0), + _.value.seed !== null && _.value.seed !== void 0 && _.value.seed !== "" ? (M(), B("div", { key: 13, - style: V(m()) - }, [N("div", ka, R(L(O)("sidebar.generation.seed", "SEED")), 1), N("div", { - title: L(O)("sidebar.generation.copySeedTooltip", "Click to copy seed: {seed}", { seed: _.value.seed }), + style: H(m()) + }, [P("div", ka, z(R(k)("sidebar.generation.seed", "SEED")), 1), P("div", { + title: R(k)("sidebar.generation.copySeedTooltip", "Click to copy seed: {seed}", { seed: _.value.seed }), style: { "font-size": "18px", "font-weight": "700", @@ -4859,16 +4866,16 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { transition: "background 0.2s" }, onClick: t[3] ||= (e) => E(_.value.seed, e.currentTarget, "rgba(76, 175, 80, 0.4)") - }, R(_.value.seed), 9, Aa)], 4)) : F("", !0), - _.value.inputFiles.length ? (j(), z("div", { + }, z(_.value.seed), 9, Aa)], 4)) : I("", !0), + _.value.inputFiles.length ? (M(), B("div", { key: 14, - style: V(f("#4CAF50", { + style: H(f("#4CAF50", { emphasis: !0, startAlpha: .16, endAlpha: .1 })) - }, [N("div", { - title: L(O)("tooltip.generationInputs", "Input files used in generation"), + }, [P("div", { + title: R(k)("tooltip.generationInputs", "Input files used in generation"), style: { "font-size": "11px", "font-weight": "600", @@ -4877,10 +4884,10 @@ var di = ["title"], fi = ["src"], pi = ["src"], mi = { "letter-spacing": "0.5px", "margin-bottom": "8px" } - }, R(L(O)("sidebar.generation.sourceFiles", "Source Files")), 9, ja), N("div", Ma, [(j(!0), z(M, null, P(_.value.inputFiles, (e) => (j(), ze(gi, { + }, z(R(k)("sidebar.generation.sourceFiles", "Source Files")), 9, ja), P("div", Ma, [(M(!0), B(N, null, F(_.value.inputFiles, (e) => (M(), Re(gi, { key: e.id, "input-file": e - }, null, 8, ["input-file"]))), 128))])], 4)) : F("", !0) + }, null, 8, ["input-file"]))), 128))])], 4)) : I("", !0) ])); }; } @@ -5065,23 +5072,23 @@ function Za(e, t, n = null) { if (!m.length) return r.clearRect(0, 0, l, u), null; let v = m[0].x, y = m[0].y, b = m[0].x + m[0].w, x = m[0].y + m[0].h; for (let e of m) v = Math.min(v, e.x), y = Math.min(y, e.y), b = Math.max(b, e.x + e.w), x = Math.max(x, e.y + e.h); - let S = Math.max(1, b - v), C = Math.max(1, x - y), w = v + S / 2, T = y + C / 2, ee = i.view && typeof i.view == "object" ? i.view : Object.create(null), te = Ja(ee.zoom ?? 1, Ua, Wa), ne = Math.max(1, S / te), E = Math.max(1, C / te), re = ne / 2, ie = E / 2, D = ne >= S ? w : Ja(ee.centerX ?? w, v + re, b - re), ae = E >= C ? T : Ja(ee.centerY ?? T, y + ie, x - ie), oe = D - re, se = ae - ie, ce = Ha, le = Math.min((l - ce * 2) / ne, (u - ce * 2) / E), ue = ee.hoveredNodeId !== null && ee.hoveredNodeId !== void 0 ? String(ee.hoveredNodeId) : null; + let S = Math.max(1, b - v), C = Math.max(1, x - y), w = v + S / 2, T = y + C / 2, ee = i.view && typeof i.view == "object" ? i.view : Object.create(null), te = Ja(ee.zoom ?? 1, Ua, Wa), ne = Math.max(1, S / te), re = Math.max(1, C / te), ie = ne / 2, E = re / 2, D = ne >= S ? w : Ja(ee.centerX ?? w, v + ie, b - ie), ae = re >= C ? T : Ja(ee.centerY ?? T, y + E, x - E), oe = D - ie, se = ae - E, O = Ha, ce = Math.min((l - O * 2) / ne, (u - O * 2) / re), le = ee.hoveredNodeId !== null && ee.hoveredNodeId !== void 0 ? String(ee.hoveredNodeId) : null; r.clearRect(0, 0, l, u), r.fillStyle = "rgba(0,0,0,0.22)", r.fillRect(0, 0, l, u); - let de = (e, t) => ({ - x: ce + (e - oe) * le, - y: ce + (t - se) * le - }), fe = (e, t) => ({ - x: Ja(oe + (Number(e) - ce) / le, v, b), - y: Ja(se + (Number(t) - ce) / le, y, x) - }), pe = (e) => ({ - x: ce + (e.x - oe) * le, - y: ce + (e.y - se) * le, - w: Math.max(1, e.w * le), - h: Math.max(1, e.h * le) - }), me = (e) => Math.max(10, Math.min(24, Math.floor(Number(e) * .2))), he = (e, t, n) => { - let r = pe(e), i = me(r.h), a = n === "output" ? e.outputs : e.inputs, o = Math.max(1, Array.isArray(a) ? a.length : Number(e[`${n}Count`]) || 0), s = Ja(t, 0, Math.max(0, o - 1)); + let ue = (e, t) => ({ + x: O + (e - oe) * ce, + y: O + (t - se) * ce + }), de = (e, t) => ({ + x: Ja(oe + (Number(e) - O) / ce, v, b), + y: Ja(se + (Number(t) - O) / ce, y, x) + }), fe = (e) => ({ + x: O + (e.x - oe) * ce, + y: O + (e.y - se) * ce, + w: Math.max(1, e.w * ce), + h: Math.max(1, e.h * ce) + }), pe = (e) => Math.max(10, Math.min(24, Math.floor(Number(e) * .2))), me = (e, t, n) => { + let r = fe(e), i = pe(r.h), a = n === "output" ? e.outputs : e.inputs, o = Math.max(1, Array.isArray(a) ? a.length : Number(e[`${n}Count`]) || 0), s = Ja(t, 0, Math.max(0, o - 1)); return r.y + i + (r.h - i) * (s + 1) / (o + 1); - }, ge = (e) => Array.isArray(e) && e.length >= 5 ? { + }, he = (e) => Array.isArray(e) && e.length >= 5 ? { originId: e[1], originSlot: Number(e[2]) || 0, targetId: e[3], @@ -5093,30 +5100,30 @@ function Za(e, t, n = null) { targetId: e.target_id ?? e.targetId ?? e.to ?? null, targetSlot: Number(e.target_slot ?? e.targetSlot ?? e.toSlot ?? 0) || 0, type: e.type - } : null, _e = (e) => { + } : null, ge = (e) => { let t = String(e || "").toUpperCase(); return t.includes("IMAGE") ? "rgba(145,198,99,0.38)" : t.includes("LATENT") ? "rgba(89,178,118,0.38)" : t.includes("MODEL") ? "rgba(112,155,255,0.38)" : t.includes("CONDITIONING") ? "rgba(191,123,226,0.38)" : t.includes("CLIP") ? "rgba(220,178,77,0.38)" : t.includes("VAE") ? "rgba(72,184,214,0.38)" : t.includes("MASK") ? "rgba(190,190,190,0.36)" : "rgba(255,255,255,0.2)"; - }, ve = () => { + }, _e = () => { if (i.showLinks && !(!c || c.length === 0)) { r.save(), r.globalAlpha = 1, r.lineWidth = 1; for (let e of c) { - let t = ge(e), n = t?.originId, i = t?.targetId; + let t = he(e), n = t?.originId, i = t?.targetId; if (n === null || i === null) continue; let a = h.get(String(n)), o = h.get(String(i)); if (!a || !o) continue; - let s = pe(a), c = pe(o), l = { + let s = fe(a), c = fe(o), l = { x: s.x + s.w, - y: he(a, t?.originSlot ?? 0, "output") + y: me(a, t?.originSlot ?? 0, "output") }, u = { x: c.x, - y: he(o, t?.targetSlot ?? 0, "input") + y: me(o, t?.targetSlot ?? 0, "input") }, d = Math.max(12, Math.min(80, Math.abs(u.x - l.x) * .35)); - r.strokeStyle = _e(t?.type), r.beginPath(), r.moveTo(l.x, l.y), r.bezierCurveTo(l.x + d, l.y, u.x - d, u.y, u.x, u.y), r.stroke(); + r.strokeStyle = ge(t?.type), r.beginPath(), r.moveTo(l.x, l.y), r.bezierCurveTo(l.x + d, l.y, u.x - d, u.y, u.x, u.y), r.stroke(); } r.restore(); } - }, ye = (e) => { - let { x: t, y: n, w: a, h: o } = pe(e), s = e.kind === "node", c = e.kind === "group", l = !!e.bypassed, u = !!e.errored, f = c ? .18 : l && i.renderBypassState ? .14 : .62, p = c ? .55 : l && i.renderBypassState ? .32 : .8, m = d(e.fill, f), h = d(e.stroke, p), g = s && i.showNodeLabels && a >= Ga && o >= Ka, _ = Math.max(2, Math.min(g ? 7 : 8, Math.floor(Math.min(a, o) * .08))), v = s ? me(o) : 0; + }, ve = (e) => { + let { x: t, y: n, w: a, h: o } = fe(e), s = e.kind === "node", c = e.kind === "group", l = !!e.bypassed, u = !!e.errored, f = c ? .18 : l && i.renderBypassState ? .14 : .62, p = c ? .55 : l && i.renderBypassState ? .32 : .8, m = d(e.fill, f), h = d(e.stroke, p), g = s && i.showNodeLabels && a >= Ga && o >= Ka, _ = Math.max(2, Math.min(g ? 7 : 8, Math.floor(Math.min(a, o) * .08))), v = s ? pe(o) : 0; if (r.save(), r.globalAlpha = 1, typeof m == "string" && (m.startsWith("#") || m.startsWith("rgb") || m.startsWith("hsl")) ? (r.fillStyle = m, r.globalAlpha = f) : (r.fillStyle = typeof m == "string" ? m : "rgba(82,88,96,0.72)", r.globalAlpha = f), typeof r.roundRect == "function" ? (r.beginPath(), r.roundRect(t, n, a, o, _), r.fill()) : r.fillRect(t, n, a, o), r.restore(), s && (r.save(), r.fillStyle = d(e.stroke || e.fill, l ? .34 : .9), typeof r.roundRect == "function" ? (r.beginPath(), r.roundRect(t, n, a, v, [ _, _, @@ -5136,11 +5143,11 @@ function Za(e, t, n = null) { let n = Math.min(g ? 16 : 6, Number(e.inputCount) || 0), i = Math.min(g ? 16 : 6, Number(e.outputCount) || 0); r.save(), r.strokeStyle = "rgba(0,0,0,0.48)", r.lineWidth = 1; for (let i = 0; i < n; i += 1) { - let n = he(e, i, "input"); + let n = me(e, i, "input"); r.fillStyle = Ya(e.inputs?.[i]?.type, !1), r.beginPath(), r.arc(t, n, g ? 3 : 2.2, 0, Math.PI * 2), r.fill(), r.stroke(); } for (let n = 0; n < i; n += 1) { - let i = he(e, n, "output"); + let i = me(e, n, "output"); r.fillStyle = Ya(e.outputs?.[n]?.type, !0), r.beginPath(), r.arc(t + a, i, g ? 3 : 2.2, 0, Math.PI * 2), r.fill(), r.stroke(); } r.restore(); @@ -5153,7 +5160,7 @@ function Za(e, t, n = null) { } r.strokeStyle = "rgba(244,67,54,0.95)", r.lineWidth = 1.5, r.strokeRect(t - .5, n - .5, a + 1, o + 1); } - if (s && ue && String(e.id || "") === ue) { + if (s && le && String(e.id || "") === le) { try { r.setLineDash([]); } catch (e) { @@ -5184,24 +5191,24 @@ function Za(e, t, n = null) { let i = Math.max(24, a * .34); for (let a = 0; a < Math.min(8, e.inputs?.length || 0); a += 1) { let o = e.inputs[a], s = String(o?.label || o?.localized_name || o?.name || "").trim(); - s && r.fillText(Xa(r, s, i), t + 7, he(e, a, "input") + n * .35, i); + s && r.fillText(Xa(r, s, i), t + 7, me(e, a, "input") + n * .35, i); } for (let o = 0; o < Math.min(8, e.outputs?.length || 0); o += 1) { let s = e.outputs[o], c = String(s?.label || s?.localized_name || s?.name || "").trim(); if (!c) continue; let l = Xa(r, c, i); - r.fillText(l, t + a - 7 - Math.min(i, r.measureText(l).width), he(e, o, "output") + n * .35, i); + r.fillText(l, t + a - 7 - Math.min(i, r.measureText(l).width), me(e, o, "output") + n * .35, i); } r.restore(); } }; - for (let e of m.filter((e) => e.kind === "group")) ye(e); - ve(); - for (let e of m.filter((e) => e.kind === "node")) ye(e); + for (let e of m.filter((e) => e.kind === "group")) ve(e); + _e(); + for (let e of m.filter((e) => e.kind === "node")) ve(e); if (i.showViewport) try { - let e = be(); + let e = ye(); if (e) { - let t = de(e.x0, e.y0), n = de(e.x1, e.y1), i = Math.min(t.x, n.x), a = Math.min(t.y, n.y), o = Math.abs(n.x - t.x), s = Math.abs(n.y - t.y); + let t = ue(e.x0, e.y0), n = ue(e.x1, e.y1), i = Math.min(t.x, n.x), a = Math.min(t.y, n.y), o = Math.abs(n.x - t.x), s = Math.abs(n.y - t.y); r.save(), r.globalAlpha = 1, r.strokeStyle = "rgba(255,255,255,0.9)", r.lineWidth = 1, r.strokeRect(i, a, o, s), r.restore(); } } catch (e) { @@ -5221,16 +5228,16 @@ function Za(e, t, n = null) { centerX: D, centerY: ae, visibleW: ne, - visibleH: E, + visibleH: re, viewMinX: oe, viewMinY: se, - pad: ce, - renderScale: le + pad: O, + renderScale: ce }, - canvasToWorld: fe, - worldToCanvas: de, + canvasToWorld: de, + worldToCanvas: ue, hitTestNode: (e, t) => { - let n = fe(e, t); + let n = de(e, t); for (let e = m.length - 1; e >= 0; --e) { let t = m[e]; if (t.kind === "node" && n.x >= t.x && n.x <= t.x + t.w && n.y >= t.y && n.y <= t.y + t.h) return t; @@ -5656,44 +5663,36 @@ var co = { "align-items": "center", "justify-content": "space-between", gap: "10px", - "margin-bottom": "8px" + "margin-bottom": "8px", + "min-width": "0" } }, Bo = { style: { - "font-size": "12px", - color: "rgba(255,255,255,0.8)", - "margin-top": "2px" -} }, Vo = { - key: 0, - style: { - display: "flex", - "flex-wrap": "wrap", - gap: "4px", - "justify-content": "flex-end" - } -}, Ho = { style: { + "min-width": "0", + flex: "1 1 auto" +} }, Vo = ["title"], Ho = ["title"], Uo = { style: { display: "flex", gap: "8px", "align-items": "center" -} }, Uo = ["placeholder"], Wo = { +} }, Wo = ["placeholder"], Go = { key: 2, class: "mjr-workflow-tree-wrap" -}, Go = { class: "mjr-workflow-tree-node" }, Ko = { class: "mjr-workflow-tree-node-name" }, qo = { +}, Ko = { class: "mjr-workflow-tree-node" }, qo = { class: "mjr-workflow-tree-node-name" }, Jo = { key: 0, class: "mjr-workflow-tree-node-type" -}, Jo = { class: "mjr-menu-item-hint" }, Yo = { +}, Yo = { class: "mjr-menu-item-hint" }, Xo = { key: 0, class: "mjr-section-hint" -}, Xo = { style: { +}, Zo = { style: { display: "flex", "align-items": "center", "justify-content": "space-between", gap: "10px", "margin-top": "8px" -} }, Zo = { style: { +} }, Qo = { style: { display: "flex", "flex-wrap": "wrap", gap: "6px", "align-items": "center" -} }, Qo = { +} }, $o = { key: 3, style: { display: "grid", @@ -5703,23 +5702,23 @@ var co = { "margin-top": "10px", "margin-bottom": "10px" } -}, $o = { style: { +}, es = { style: { display: "flex", "flex-direction": "column", gap: "2px", "min-width": "0" -} }, es = { style: { +} }, ts = { style: { "font-size": "13px", "font-weight": "600" -} }, ts = { style: { +} }, ns = { style: { "font-size": "11px", color: "rgba(255,255,255,0.58)" -} }, ns = { style: { +} }, rs = { style: { display: "flex", gap: "10px", "align-items": "stretch", "margin-top": "10px" -} }, rs = { style: { +} }, is = { style: { display: "flex", "justify-content": "space-between", "align-items": "center", @@ -5727,7 +5726,7 @@ var co = { "margin-top": "8px", "font-size": "11px", color: "rgba(255,255,255,0.58)" -} }, is = ["open"], as = { style: { +} }, as = ["open"], os = { style: { background: "rgba(0,0,0,0.5)", padding: "10px", "border-radius": "6px", @@ -5737,7 +5736,7 @@ var co = { margin: "10px 0 0 0", color: "#90CAF9", "font-family": "'Consolas', 'Monaco', monospace" -} }, os = 1, ss = 8, cs = 250, ls = { +} }, ss = 1, cs = 8, ls = 250, us = { __name: "SidebarWorkflowSection", props: { asset: { type: Object, @@ -5774,7 +5773,7 @@ var co = { label: "Expanded", height: 220 } - ]), s = B(null), c = B(""), l = B(!1), u = B(!1), d = B(null), f = B(!1), p = B(!1), m = B(re()), h = B({ ...i }), g = B("crosshair"), _ = B(""), v = null, y = null, b = null; + ]), s = V(null), c = V(""), l = V(!1), u = V(!1), d = V(null), f = V(!1), p = V(!1), m = V(ie()), h = V({ ...i }), g = V("crosshair"), _ = V(""), v = null, y = null, b = null; function S(e, t, n) { let r = Number(e); return Number.isFinite(r) ? Math.max(t, Math.min(n, r)) : t; @@ -5782,7 +5781,7 @@ var co = { function C(e) { !e || typeof e != "object" || (h.value = { ...h.value, - zoom: S(e.zoom ?? h.value.zoom, os, ss), + zoom: S(e.zoom ?? h.value.zoom, ss, cs), centerX: Number.isFinite(Number(e.centerX)) ? Number(e.centerX) : null, centerY: Number.isFinite(Number(e.centerY)) ? Number(e.centerY) : null }); @@ -5832,7 +5831,7 @@ var co = { } return null; } - function E(e) { + function re(e) { let t = ee(e), n = e?.prompt || e?.Prompt || t?.prompt || t?.Prompt || null; if (!n) return null; if (typeof n == "object") return te(n) ? n : null; @@ -5848,7 +5847,7 @@ var co = { } return null; } - function re() { + function ie() { try { let e = K?.()?.workflowMinimap; if (e && typeof e == "object") return { @@ -5881,7 +5880,7 @@ var co = { return { ...n }; } } - function ie(e) { + function E(e) { try { let t = K(); t.workflowMinimap = { @@ -5892,35 +5891,35 @@ var co = { console.debug?.(e); } } - let D = I(() => { - let e = ne(t.asset) || ne(d.value), n = E(t.asset) || E(d.value); + let D = L(() => { + let e = ne(t.asset) || ne(d.value), n = re(t.asset) || re(d.value); return !e && !n ? null : e || so(n); - }), ae = I(() => String(t.asset?.filepath || t.asset?.path || t.asset?.file_info?.filepath || "").trim()), oe = I(() => String(t.asset?.display_name || t.asset?.name || t.asset?.filename || t.asset?.title || "Workflow").trim()), ce = I(() => String(t.asset?.task || t.asset?.workflow_task || "").trim()), le = I(() => String(t.asset?.model_family || t.asset?.workflow_model_family || "").trim()), ue = I(() => String(t.asset?.provider || t.asset?.workflow_provider || "").trim()), de = I(() => String(t.asset?.runs_on || t.asset?.runsOn || "").trim().toLowerCase()), fe = I(() => { - let e = de.value, t = ue.value; + }), ae = L(() => String(t.asset?.filepath || t.asset?.path || t.asset?.file_info?.filepath || "").trim()), oe = L(() => String(t.asset?.display_name || t.asset?.name || t.asset?.filename || t.asset?.title || "Workflow").trim()), O = L(() => String(t.asset?.task || t.asset?.workflow_task || "").trim()), ce = L(() => String(t.asset?.model_family || t.asset?.workflow_model_family || "").trim()), le = L(() => String(t.asset?.provider || t.asset?.workflow_provider || "").trim()), ue = L(() => String(t.asset?.runs_on || t.asset?.runsOn || "").trim().toLowerCase()), de = L(() => { + let e = ue.value, t = le.value; return e === "api" && t ? `API · ${t}` : e ? t && t.toLowerCase() !== e ? `${e} · ${t}` : e : t; - }), pe = I(() => String(t.asset?.notes || "").trim()), me = I(() => [ + }), fe = L(() => String(t.asset?.notes || "").trim()), pe = L(() => [ t.asset?.detected_task ? `detected: ${t.asset.detected_task}` : "", t.asset?.detected_model_family ? t.asset.detected_model_family : "", t.asset?.detected_provider ? t.asset.detected_provider : "" - ].filter(Boolean).join(" · ")), ge = I(() => be(t.asset?.missing_nodes || t.asset?.missingNodes)), _e = I(() => be(t.asset?.missing_models || t.asset?.missingModels)), ve = I(() => { + ].filter(Boolean).join(" · ")), he = L(() => ye(t.asset?.missing_nodes || t.asset?.missingNodes)), ge = L(() => ye(t.asset?.missing_models || t.asset?.missingModels)), _e = L(() => { let e = Number(t.asset?.usage_count || t.asset?.usageCount || 0); return !Number.isFinite(e) || e <= 0 ? "" : `${Math.floor(e)} use${e === 1 ? "" : "s"}`; - }), ye = I(() => xe(t.asset?.mtime || t.asset?.modified_at || t.asset?.updated_at)); - function be(e) { + }), ve = L(() => be(t.asset?.mtime || t.asset?.modified_at || t.asset?.updated_at)); + function ye(e) { if (Array.isArray(e)) return e.map((e) => String(e || "").trim()).filter(Boolean); if (typeof e == "string") { let t = e.trim(); if (!t) return []; try { let e = JSON.parse(t); - if (Array.isArray(e)) return be(e); + if (Array.isArray(e)) return ye(e); } catch { return t.split(/[,\n]/).map((e) => e.trim()).filter(Boolean); } } return []; } - function xe(e) { + function be(e) { let t = Number(e); if (!Number.isFinite(t) || t <= 0) return ""; let n = t > 1e10 ? t : t * 1e3; @@ -5930,13 +5929,13 @@ var co = { return ""; } } - async function Se() { + async function xe() { if (D.value) return; let e = ae.value; if (e && !u.value) { u.value = !0; try { - let t = await he(e, { timeoutMs: 25e3 }); + let t = await me(e, { timeoutMs: 25e3 }); if (!t?.ok) return; let n = t?.data?.workflow || t?.workflow || null, r = t?.data?.prompt || t?.prompt || null; if (!n && !r) return; @@ -5951,25 +5950,25 @@ var co = { } } } - let Ce = I(() => t.asset?.has_generation_data ? "Complete" : "Partial"), we = I(() => D.value ? JSON.stringify(D.value, null, 2) : ""), Te = I(() => String(t.asset?.category || t.asset?.subfolder || t.asset?.folder || "").trim().replace(/^\/+|\/+$/g, "")), k = I(() => Te.value ? Te.value.split(/[\\/]+/).filter(Boolean) : []); - function Ee(e, t) { + let Se = L(() => t.asset?.has_generation_data ? "Complete" : "Partial"), Ce = L(() => D.value ? JSON.stringify(D.value, null, 2) : ""), we = L(() => String(t.asset?.category || t.asset?.subfolder || t.asset?.folder || "").trim().replace(/^\/+|\/+$/g, "")), A = L(() => we.value ? we.value.split(/[\\/]+/).filter(Boolean) : []), Te = L(() => A.value.at(-1) || we.value || "Root"), Ee = L(() => A.value.slice(-1)); + function j(e, t) { let n = e?.id ?? e?.key ?? t + 1; return String(e?.title || e?._meta?.title || e?.type || e?.class_type || e?.name || `Node ${n}`); } function De(e) { return String(e?.type || e?.class_type || e?.name || "").trim(); } - function A() { - c.value = Te.value; + function ke() { + c.value = we.value; } - async function Oe() { + async function Ae() { let e = String(t.asset?.filepath || t.asset?.path || t.asset?.file_info?.filepath || "").trim(); if (!e) { - T(O("toast.workflowMissingPath", "Workflow file path is missing."), "error"); + T(k("toast.workflowMissingPath", "Workflow file path is missing."), "error"); return; } let n = String(c.value || "").trim(); - if (n !== Te.value) { + if (n !== we.value) { l.value = !0; try { let t = await o({ @@ -5977,21 +5976,21 @@ var co = { category: n }, { timeoutMs: 3e4 }); if (!t?.ok) { - T(t?.error || O("toast.workflowMoveFailed", "Failed to move workflow."), "error"); + T(t?.error || k("toast.workflowMoveFailed", "Failed to move workflow."), "error"); return; } - c.value = String(t?.data?.workflow?.category || n || "").trim(), T(O("toast.workflowCategoryUpdated", "Workflow category updated"), "success", 1800); + c.value = String(t?.data?.workflow?.category || n || "").trim(), T(k("toast.workflowCategoryUpdated", "Workflow category updated"), "success", 1800); } catch { - T(O("toast.workflowMoveFailed", "Failed to move workflow."), "error"); + T(k("toast.workflowMoveFailed", "Failed to move workflow."), "error"); } finally { l.value = !1; } } } - async function Ae() { + async function je() { let e = ae.value; if (!e) { - T(O("toast.workflowMissingPath", "Workflow file path is missing."), "error"); + T(k("toast.workflowMissingPath", "Workflow file path is missing."), "error"); return; } let n = await r({ @@ -5999,16 +5998,16 @@ var co = { limit: 12 }, { timeoutMs: 15e3 }); if (!n?.ok) { - T(n?.error || O("toast.workflowLoadFailed", "Failed to load workflow."), "error"); + T(n?.error || k("toast.workflowLoadFailed", "Failed to load workflow."), "error"); return; } let i = Array.isArray(n.data) ? n.data : []; if (!i.length) { - T(O("toast.workflowThumbnailNoCandidates", "No linked outputs are available for this workflow yet."), "warning", 2600); + T(k("toast.workflowThumbnailNoCandidates", "No linked outputs are available for this workflow yet."), "warning", 2600); return; } let a = await ir({ - title: O("ctx.setWorkflowThumbnail", "Set workflow thumbnail"), + title: k("ctx.setWorkflowThumbnail", "Set workflow thumbnail"), workflow: t.asset, items: i }); @@ -6018,18 +6017,18 @@ var co = { source_filepath: a.filepath }, { timeoutMs: 3e4 }); if (!o?.ok) { - T(o?.error || O("toast.workflowSaveFailed", "Failed to save workflow."), "error"); + T(o?.error || k("toast.workflowSaveFailed", "Failed to save workflow."), "error"); return; } - T(O("toast.workflowUpdated", "Workflow updated"), "success", 1800), window?.dispatchEvent?.(new CustomEvent("mjr:reload-grid", { detail: { reason: "workflow-thumbnail-sidebar" } })); + T(k("toast.workflowUpdated", "Workflow updated"), "success", 1800), window?.dispatchEvent?.(new CustomEvent("mjr:reload-grid", { detail: { reason: "workflow-thumbnail-sidebar" } })); } - async function je() { - if (await Se(), !D.value) { - T(O("toast.workflowLoadFailed", "Failed to load workflow."), "error"); + async function Me() { + if (await xe(), !D.value) { + T(k("toast.workflowLoadFailed", "Failed to load workflow."), "error"); return; } try { - await Le.openAssets({ + await Ie.openAssets({ assets: [{ ...t.asset, workflow: D.value, @@ -6039,21 +6038,21 @@ var co = { mode: "graph" }); } catch (e) { - console.debug?.(e), T(O("toast.workflowLoadFailed", "Failed to load workflow."), "error"); + console.debug?.(e), T(k("toast.workflowLoadFailed", "Failed to load workflow."), "error"); } } - let Me = I(() => (Array.isArray(D.value?.nodes) ? D.value.nodes : []).slice(0, cs).map((e, t) => { + let Ne = L(() => (Array.isArray(D.value?.nodes) ? D.value.nodes : []).slice(0, ls).map((e, t) => { let n = e?.id ?? e?.key ?? t + 1, r = De(e); return { key: String(n), - label: Ee(e, t), + label: j(e, t), icon: "pi pi-circle-fill", data: { id: n, type: r } }; - })), Ne = I(() => Math.max(0, Number(Pe.value.nodes || 0) - Me.value.length)), Pe = I(() => { + })), Pe = L(() => Math.max(0, Number(Fe.value.nodes || 0) - Ne.value.length)), Fe = L(() => { let e = D.value; return e ? { nodes: Array.isArray(e?.nodes) ? e.nodes.length : 0, @@ -6066,10 +6065,10 @@ var co = { groups: 0, source: "" }; - }), Fe = I(() => { + }), Ue = L(() => { let e = String(m.value?.size || "comfortable"); return a.find((t) => t.key === e) || a[1]; - }), Ie = I(() => `${Fe.value.height}px`), We = I(() => [ + }), Ge = L(() => `${Ue.value.height}px`), Ke = L(() => [ { key: "showNodeLabels", label: "Node Labels", @@ -6106,7 +6105,7 @@ var co = { iconClass: "pi pi-window-maximize" } ]); - function Ke() { + function qe() { let e = s.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)); @@ -6117,10 +6116,10 @@ var co = { view: h.value }) || null, C(y?.resolvedView); } - function qe(e) { - ke(e); - } function Je(e) { + Oe(e); + } + function Ye(e) { let t = s.value; if (!t) return null; let n = t.getBoundingClientRect?.(); @@ -6129,50 +6128,50 @@ var co = { y: Number(e?.clientY) - n.top } : null; } - function Ye(e) { - let t = Je(e); + function Xe(e) { + let t = Ye(e); return !t || !y?.canvasToWorld ? null : { local: t, world: y.canvasToWorld(t.x, t.y) }; } - function Xe(e) { - let t = Je(e), n = t && y?.hitTestNode ? y.hitTestNode(t.x, t.y) : null, r = n?.id !== null && n?.id !== void 0 ? String(n.id) : null, i = h.value.hoveredNodeId !== null && h.value.hoveredNodeId !== void 0 ? String(h.value.hoveredNodeId) : null; + function Ze(e) { + let t = Ye(e), n = t && y?.hitTestNode ? y.hitTestNode(t.x, t.y) : null, r = n?.id !== null && n?.id !== void 0 ? String(n.id) : null, i = h.value.hoveredNodeId !== null && h.value.hoveredNodeId !== void 0 ? String(h.value.hoveredNodeId) : null; _.value = n?.label || "", r !== i && (h.value = { ...h.value, hoveredNodeId: r - }, Ke()); + }, qe()); } - function Ze(e) { - e && (qe(e), h.value = { + function Qe(e) { + e && (Je(e), h.value = { ...h.value, centerX: Number(e.x), centerY: Number(e.y) - }, Ke()); - } - function Qe(e) { - if (Number(e?.button ?? 0) !== 0) return; - let t = Ye(e); - t && (b = e.pointerId ?? 1, g.value = "grabbing", s.value?.setPointerCapture?.(b), Ze(t.world), Xe(e), e.preventDefault?.(), e.stopPropagation?.()); + }, qe()); } function $e(e) { + if (Number(e?.button ?? 0) !== 0) return; + let t = Xe(e); + t && (b = e.pointerId ?? 1, g.value = "grabbing", s.value?.setPointerCapture?.(b), Qe(t.world), Ze(e), e.preventDefault?.(), e.stopPropagation?.()); + } + function tt(e) { if (b !== null && e.pointerId === b) { - let t = Ye(e); - t && Ze(t.world), e.preventDefault?.(), e.stopPropagation?.(); + let t = Xe(e); + t && Qe(t.world), e.preventDefault?.(), e.stopPropagation?.(); return; } - Xe(e); + Ze(e); } - function et(e) { + function rt(e) { b !== null && e?.pointerId === b && (s.value?.releasePointerCapture?.(b), b = null, g.value = "crosshair"), e?.type === "pointerleave" && (_.value = "", h.value.hoveredNodeId !== null && (h.value = { ...h.value, hoveredNodeId: null - }, Ke())); + }, qe())); } - function nt(e) { - let t = Ye(e), n = y?.resolvedView; + function it(e) { + let t = Xe(e), n = y?.resolvedView; if (!t || !n) return; - let r = S(Number(e?.deltaY) || 0, -240, 240), i = Math.exp(-r * .0025), a = S((Number(h.value.zoom) || 1) * i, os, ss); + let r = S(Number(e?.deltaY) || 0, -240, 240), i = Math.exp(-r * .0025), a = S((Number(h.value.zoom) || 1) * i, ss, cs); if (Math.abs(a - (Number(h.value.zoom) || 1)) < .001) { e.preventDefault?.(), e.stopPropagation?.(); return; @@ -6183,40 +6182,40 @@ var co = { zoom: a, centerX: Number(t.world.x) + (.5 - c) * o, centerY: Number(t.world.y) + (.5 - l) * s - }, Ke(), Xe(e), e.preventDefault?.(), e.stopPropagation?.(); - } - function it(e) { - let t = Ye(e); - w(), t && qe(t.world), Ke(), e.preventDefault?.(), e.stopPropagation?.(); + }, qe(), Ze(e), e.preventDefault?.(), e.stopPropagation?.(); } function at(e) { + let t = Xe(e); + w(), t && Je(t.world), qe(), e.preventDefault?.(), e.stopPropagation?.(); + } + function ot(e) { m.value = { ...m.value, [e]: !m.value?.[e] - }, ie(m.value); + }, E(m.value); } - function ot(e) { + function ct(e) { a.some((t) => t.key === e) && (m.value = { ...m.value, size: e - }, ie(m.value)); + }, E(m.value)); } - return Ue(() => { - s.value && typeof ResizeObserver == "function" && (v = new ResizeObserver(() => Ke()), v.observe(s.value)), A(), Se(), Ke(); - }), Be(D, () => { - w(), Ke(); - }, { flush: "post" }), Be(ae, () => { - d.value = null, Se(); - }, { immediate: !0 }), Be(Te, () => { - A(); - }), Be(m, () => { - Ke(); + return He(() => { + s.value && typeof ResizeObserver == "function" && (v = new ResizeObserver(() => qe()), v.observe(s.value)), ke(), xe(), qe(); + }), ze(D, () => { + w(), qe(); + }, { flush: "post" }), ze(ae, () => { + d.value = null, xe(); + }, { immediate: !0 }), ze(we, () => { + ke(); + }), ze(m, () => { + qe(); }, { deep: !0, flush: "post" - }), Be(f, () => { - Ke(); - }, { flush: "post" }), He(() => { + }), ze(f, () => { + qe(); + }, { flush: "post" }), Ve(() => { try { v?.disconnect?.(); } catch (e) { @@ -6224,9 +6223,9 @@ var co = { } v = null, b = null; }), (e, t) => { - let n = Ge("MButton"), r = Ge("MTree"); - return D.value ? (j(), z("div", co, [ - t[17] ||= N("div", { style: { + let n = We("MButton"), r = We("MTree"); + return D.value ? (M(), B("div", co, [ + t[17] ||= P("div", { style: { "font-size": "13px", "font-weight": "600", color: "var(--fg-color, #eaeaea)", @@ -6234,7 +6233,7 @@ var co = { "text-transform": "uppercase", "letter-spacing": "0.5px" } }, " ComfyUI Workflow ", -1), - N("div", lo, [N("div", uo, R(oe.value), 1), ae.value ? (j(), z("div", { + P("div", lo, [P("div", uo, z(oe.value), 1), ae.value ? (M(), B("div", { key: 0, style: { "font-size": "11px", @@ -6245,44 +6244,44 @@ var co = { "white-space": "nowrap" }, title: ae.value - }, R(ae.value), 9, fo)) : F("", !0)]), - N("div", po, [N("div", mo, R(Ce.value), 1), Pe.value.source ? (j(), z("div", ho, R(Pe.value.source), 1)) : F("", !0)]), - N("div", go, [ - ce.value ? (j(), z("div", _o, [t[3] ||= N("div", { style: { + }, z(ae.value), 9, fo)) : I("", !0)]), + P("div", po, [P("div", mo, z(Se.value), 1), Fe.value.source ? (M(), B("div", ho, z(Fe.value.source), 1)) : I("", !0)]), + P("div", go, [ + O.value ? (M(), B("div", _o, [t[3] ||= P("div", { style: { "font-size": "10px", "font-weight": "700", color: "rgba(255,255,255,0.55)", "text-transform": "uppercase", "letter-spacing": "0.4px" - } }, "Task", -1), N("div", vo, R(ce.value), 1)])) : F("", !0), - le.value ? (j(), z("div", yo, [t[4] ||= N("div", { style: { + } }, "Task", -1), P("div", vo, z(O.value), 1)])) : I("", !0), + ce.value ? (M(), B("div", yo, [t[4] ||= P("div", { style: { "font-size": "10px", "font-weight": "700", color: "rgba(255,255,255,0.55)", "text-transform": "uppercase", "letter-spacing": "0.4px" - } }, "Model", -1), N("div", bo, R(le.value), 1)])) : F("", !0), - fe.value ? (j(), z("div", xo, [t[5] ||= N("div", { style: { + } }, "Model", -1), P("div", bo, z(ce.value), 1)])) : I("", !0), + de.value ? (M(), B("div", xo, [t[5] ||= P("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), N("div", So, R(fe.value), 1)])) : F("", !0), - ve.value || ye.value ? (j(), z("div", Co, [ - t[6] ||= N("div", { style: { + } }, "Runs on", -1), P("div", So, z(de.value), 1)])) : I("", !0), + _e.value || ve.value ? (M(), B("div", Co, [ + t[6] ||= P("div", { style: { "font-size": "10px", "font-weight": "700", color: "rgba(255,255,255,0.55)", "text-transform": "uppercase", "letter-spacing": "0.4px" } }, "Library", -1), - N("div", wo, R(ve.value || ye.value), 1), - ve.value && ye.value ? (j(), z("div", To, R(ye.value), 1)) : F("", !0) - ])) : F("", !0) + P("div", wo, z(_e.value || ve.value), 1), + _e.value && ve.value ? (M(), B("div", To, z(ve.value), 1)) : I("", !0) + ])) : I("", !0) ]), - ge.value.length || _e.value.length ? (j(), z("div", Eo, [ - t[7] ||= N("div", { style: { + he.value.length || ge.value.length ? (M(), B("div", Eo, [ + t[7] ||= P("div", { style: { "font-size": "10px", "font-weight": "800", color: "#ef9a9a", @@ -6290,15 +6289,15 @@ var co = { "letter-spacing": "0.4px", "margin-bottom": "6px" } }, "Missing dependencies", -1), - ge.value.length ? (j(), z("div", { + he.value.length ? (M(), B("div", { key: 0, - style: V({ + style: H({ display: "flex", flexWrap: "wrap", gap: "5px", - marginBottom: _e.value.length ? "7px" : "0" + marginBottom: ge.value.length ? "7px" : "0" }) - }, [(j(!0), z(M, null, P(ge.value, (e) => (j(), z("span", { + }, [(M(!0), B(N, null, F(he.value, (e) => (M(), B("span", { key: `node-${e}`, style: { padding: "3px 7px", @@ -6308,8 +6307,8 @@ var co = { "font-weight": "700", color: "#ffcdd2" } - }, R(e), 1))), 128))], 4)) : F("", !0), - _e.value.length ? (j(), z("div", Do, [(j(!0), z(M, null, P(_e.value, (e) => (j(), z("span", { + }, z(e), 1))), 128))], 4)) : I("", !0), + ge.value.length ? (M(), B("div", Do, [(M(!0), B(N, null, F(ge.value, (e) => (M(), B("span", { key: `model-${e}`, style: { padding: "3px 7px", @@ -6319,17 +6318,17 @@ var co = { "font-weight": "700", color: "#ffe0b2" } - }, R(e), 1))), 128))])) : F("", !0) - ])) : F("", !0), - pe.value || me.value ? (j(), z("div", Oo, [pe.value ? (j(), z("div", ko, R(pe.value), 1)) : F("", !0), me.value ? (j(), z("div", { + }, z(e), 1))), 128))])) : I("", !0) + ])) : I("", !0), + fe.value || pe.value ? (M(), B("div", Oo, [fe.value ? (M(), B("div", ko, z(fe.value), 1)) : I("", !0), pe.value ? (M(), B("div", { key: 1, - style: V({ + style: H({ fontSize: "11px", color: "rgba(255,255,255,0.48)", - marginTop: pe.value ? "7px" : "0" + marginTop: fe.value ? "7px" : "0" }) - }, R(me.value), 5)) : F("", !0)])) : F("", !0), - N("div", Ao, [tt(n, { + }, z(pe.value), 5)) : I("", !0)])) : I("", !0), + P("div", Ao, [et(n, { type: "button", severity: "secondary", text: "", @@ -6347,11 +6346,11 @@ var co = { "justify-content": "center", gap: "7px" }, - onClick: Ae + onClick: je }, { - default: ct(() => [t[8] ||= N("i", { class: "pi pi-image" }, null, -1), N("span", null, R(L(O)("ctx.setWorkflowThumbnail", "Set workflow thumbnail")), 1)]), + default: st(() => [t[8] ||= P("i", { class: "pi pi-image" }, null, -1), P("span", null, z(R(k)("ctx.setWorkflowThumbnail", "Set workflow thumbnail")), 1)]), _: 1 - }), tt(n, { + }), et(n, { type: "button", severity: "secondary", text: "", @@ -6369,41 +6368,63 @@ var co = { "justify-content": "center", gap: "7px" }, - onClick: je + onClick: Me }, { - default: ct(() => [t[9] ||= N("i", { class: "pi pi-search" }, null, -1), N("span", null, R(L(O)("ctx.inspect", "Inspect")), 1)]), + default: st(() => [t[9] ||= P("i", { class: "pi pi-search" }, null, -1), P("span", null, z(R(k)("ctx.inspect", "Inspect")), 1)]), _: 1 })]), - N("div", jo, [ - N("div", Mo, [t[10] ||= N("div", { style: { + P("div", jo, [ + P("div", Mo, [t[10] ||= P("div", { style: { "font-size": "10px", "font-weight": "700", color: "rgba(255,255,255,0.55)", "text-transform": "uppercase", "letter-spacing": "0.4px" - } }, "Nodes", -1), N("div", No, R(Pe.value.nodes), 1)]), - N("div", Po, [t[11] ||= N("div", { style: { + } }, "Nodes", -1), P("div", No, z(Fe.value.nodes), 1)]), + P("div", Po, [t[11] ||= P("div", { style: { "font-size": "10px", "font-weight": "700", color: "rgba(255,255,255,0.55)", "text-transform": "uppercase", "letter-spacing": "0.4px" - } }, "Links", -1), N("div", Fo, R(Pe.value.links), 1)]), - N("div", Io, [t[12] ||= N("div", { style: { + } }, "Links", -1), P("div", Fo, z(Fe.value.links), 1)]), + P("div", Io, [t[12] ||= P("div", { style: { "font-size": "10px", "font-weight": "700", color: "rgba(255,255,255,0.55)", "text-transform": "uppercase", "letter-spacing": "0.4px" - } }, "Groups", -1), N("div", Lo, R(Pe.value.groups), 1)]) + } }, "Groups", -1), P("div", Lo, z(Fe.value.groups), 1)]) ]), - N("div", Ro, [N("div", zo, [N("div", null, [t[13] ||= N("div", { style: { + P("div", Ro, [P("div", zo, [P("div", Bo, [t[13] ||= P("div", { style: { "font-size": "10px", "font-weight": "700", color: "rgba(255,255,255,0.55)", "text-transform": "uppercase", "letter-spacing": "0.4px" - } }, "Category", -1), N("div", Bo, R(Te.value || "Root"), 1)]), k.value.length ? (j(), z("div", Vo, [(j(!0), z(M, null, P(k.value, (e) => (j(), z("span", { + } }, "Category", -1), P("div", { + title: we.value || "Root", + style: { + "font-size": "12px", + color: "rgba(255,255,255,0.8)", + "margin-top": "2px", + overflow: "hidden", + "text-overflow": "ellipsis", + "white-space": "nowrap", + "max-width": "100%" + } + }, z(Te.value), 9, Vo)]), Ee.value.length ? (M(), B("div", { + key: 0, + title: we.value, + style: { + display: "flex", + "flex-wrap": "wrap", + gap: "4px", + "justify-content": "flex-end", + "min-width": "0", + "max-width": "45%" + } + }, [(M(!0), B(N, null, F(Ee.value, (e) => (M(), B("span", { key: e, style: { padding: "3px 7px", @@ -6414,12 +6435,16 @@ var co = { "font-weight": "700", color: "#90CAF9", "text-transform": "uppercase", - "letter-spacing": "0.3px" + "letter-spacing": "0.3px", + "max-width": "100%", + overflow: "hidden", + "text-overflow": "ellipsis", + "white-space": "nowrap" } - }, R(e), 1))), 128))])) : F("", !0)]), N("div", Ho, [Ve(N("input", { + }, z(e), 1))), 128))], 8, Ho)) : I("", !0)]), P("div", Uo, [Be(P("input", { "onUpdate:modelValue": t[0] ||= (e) => c.value = e, type: "text", - placeholder: L(O)("dialog.workflowCategory", "Workflow category"), + placeholder: R(k)("dialog.workflowCategory", "Workflow category"), style: { flex: "1", "min-width": "0", @@ -6430,13 +6455,13 @@ var co = { color: "rgba(255,255,255,0.92)", "font-size": "12px" } - }, null, 8, Uo), [[mt, c.value]]), tt(n, { + }, null, 8, Wo), [[pt, c.value]]), et(n, { type: "button", severity: "secondary", text: "", rounded: "", disabled: l.value, - style: V({ + style: H({ padding: "8px 12px", borderRadius: "8px", border: "1px solid rgba(255,255,255,0.12)", @@ -6447,15 +6472,15 @@ var co = { fontWeight: "700", whiteSpace: "nowrap" }), - onClick: Oe + onClick: Ae }, { - default: ct(() => [Re(R(l.value ? "Saving..." : "Move"), 1)]), + default: st(() => [Le(z(l.value ? "Saving..." : "Move"), 1)]), _: 1 }, 8, ["disabled", "style"])])]), - Me.value.length ? (j(), z("div", Wo, [ - t[14] ||= N("div", { class: "mjr-section-title" }, " Workflow Nodes ", -1), - tt(r, { - value: Me.value, + Ne.value.length ? (M(), B("div", Go, [ + t[14] ||= P("div", { class: "mjr-section-title" }, " Workflow Nodes ", -1), + et(r, { + value: Ne.value, class: "mjr-workflow-tree", "scroll-height": "180px", pt: { @@ -6467,23 +6492,23 @@ var co = { nodeLabel: { class: "mjr-workflow-tree-label" } } }, { - default: ct(({ node: e }) => [N("span", Go, [ - N("span", Ko, R(e.label), 1), - e.data?.type ? (j(), z("span", qo, R(e.data.type), 1)) : F("", !0), - N("span", Jo, "#" + R(e.data?.id), 1) + default: st(({ node: e }) => [P("span", Ko, [ + P("span", qo, z(e.label), 1), + e.data?.type ? (M(), B("span", Jo, z(e.data.type), 1)) : I("", !0), + P("span", Yo, "#" + z(e.data?.id), 1) ])]), _: 1 }, 8, ["value"]), - Ne.value ? (j(), z("div", Yo, " +" + R(Ne.value) + " more nodes ", 1)) : F("", !0) - ])) : F("", !0), - N("div", Xo, [N("div", Zo, [(j(!0), z(M, null, P(L(a), (e) => (j(), ze(n, { + Pe.value ? (M(), B("div", Xo, " +" + z(Pe.value) + " more nodes ", 1)) : I("", !0) + ])) : I("", !0), + P("div", Zo, [P("div", Qo, [(M(!0), B(N, null, F(R(a), (e) => (M(), Re(n, { key: e.key, type: "button", severity: "secondary", text: "", rounded: "", title: `${e.label} minimap`, - style: V({ + style: H({ appearance: "none", border: m.value.size === e.key ? "1px solid rgba(33,150,243,0.55)" : "1px solid rgba(255,255,255,0.12)", borderRadius: "999px", @@ -6494,21 +6519,21 @@ var co = { fontWeight: m.value.size === e.key ? "700" : "600", cursor: "pointer" }), - onClick: (t) => ot(e.key) + onClick: (t) => ct(e.key) }, { - default: ct(() => [Re(R(e.label), 1)]), + default: st(() => [Le(z(e.label), 1)]), _: 2 }, 1032, [ "title", "style", "onClick" - ]))), 128))]), tt(n, { + ]))), 128))]), et(n, { type: "button", class: "mjr-btn mjr-icon-btn", severity: "secondary", text: "", rounded: "", - title: L(O)("tooltip.minimapSettings", "Minimap settings"), + title: R(k)("tooltip.minimapSettings", "Minimap settings"), style: { width: "28px", height: "28px", @@ -6523,15 +6548,15 @@ var co = { }, onClick: t[1] ||= (e) => f.value = !f.value }, { - default: ct(() => [...t[15] ||= [N("i", { class: "pi pi-sliders-h" }, null, -1)]]), + default: st(() => [...t[15] ||= [P("i", { class: "pi pi-sliders-h" }, null, -1)]]), _: 1 }, 8, ["title"])]), - f.value ? (j(), z("div", Qo, [(j(!0), z(M, null, P(We.value, (e) => (j(), ze(n, { + f.value ? (M(), B("div", $o, [(M(!0), B(N, null, F(Ke.value, (e) => (M(), Re(n, { key: e.key, type: "button", severity: "secondary", text: "", - style: V({ + style: H({ display: "flex", alignItems: "center", gap: "10px", @@ -6543,10 +6568,10 @@ var co = { color: "rgba(255,255,255,0.92)", textAlign: "left" }), - onClick: (t) => at(e.key) + onClick: (t) => ot(e.key) }, { - default: ct(() => [ - N("span", { style: V({ + default: st(() => [ + P("span", { style: H({ width: "22px", height: "22px", borderRadius: "6px", @@ -6556,31 +6581,31 @@ var co = { background: m.value?.[e.key] ? "rgba(76,175,80,0.95)" : "rgba(255,255,255,0.08)", border: m.value?.[e.key] ? "1px solid rgba(76,175,80,0.35)" : "1px solid rgba(255,255,255,0.12)", flex: "0 0 auto" - }) }, [N("i", { + }) }, [P("i", { class: "pi pi-check", - style: V({ + style: H({ fontSize: "12px", opacity: m.value?.[e.key] ? "1" : "0" }) }, null, 4)], 4), - N("i", { - class: rt(e.iconClass), + P("i", { + class: nt(e.iconClass), style: { "font-size": "18px", opacity: "0.9", width: "18px" } }, null, 2), - N("div", $o, [N("div", es, R(e.label), 1), N("div", ts, R(m.value?.[e.key] ? "On" : "Off"), 1)]) + P("div", es, [P("div", ts, z(e.label), 1), P("div", ns, z(m.value?.[e.key] ? "On" : "Off"), 1)]) ]), _: 2 - }, 1032, ["style", "onClick"]))), 128))])) : F("", !0), - N("div", ns, [N("canvas", { + }, 1032, ["style", "onClick"]))), 128))])) : I("", !0), + P("div", rs, [P("canvas", { ref_key: "canvasRef", ref: s, - style: V({ + style: H({ width: "100%", - height: Ie.value, + height: Ge.value, cursor: g.value, touchAction: "none", borderRadius: "10px", @@ -6589,28 +6614,28 @@ var co = { 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: Qe, - onPointermove: $e, - onPointerup: et, - onPointercancel: et, - onPointerleave: et, - onWheel: nt, - onDblclick: it + onPointerdown: $e, + onPointermove: tt, + onPointerup: rt, + onPointercancel: rt, + onPointerleave: rt, + onWheel: it, + onDblclick: at }, null, 36)]), - N("div", rs, [N("span", null, R(_.value || "Click/drag to navigate | wheel to zoom"), 1), N("span", null, R(Math.round((h.value.zoom || 1) * 100)) + "% | " + R(Fe.value.label), 1)]), - N("details", { + P("div", is, [P("span", null, z(_.value || "Click/drag to navigate | wheel to zoom"), 1), P("span", null, z(Math.round((h.value.zoom || 1) * 100)) + "% | " + z(Ue.value.label), 1)]), + P("details", { open: p.value, style: { "margin-top": "10px" }, onToggle: t[2] ||= (e) => p.value = e.target.open - }, [t[16] ||= N("summary", { style: { + }, [t[16] ||= P("summary", { style: { cursor: "pointer", color: "var(--mjr-muted, rgba(255,255,255,0.65))", "font-size": "12px", "user-select": "none" - } }, " Show raw JSON ", -1), N("pre", as, R(we.value), 1)], 40, is) - ])) : F("", !0); + } }, " Show raw JSON ", -1), P("pre", os, z(Ce.value), 1)], 40, as) + ])) : I("", !0); }; } }; //#endregion -export { tr as C, q as D, K as E, nr as S, J as T, mr as _, Ra as a, rr as b, ui as c, xr as d, gr as f, pr as g, cr as h, Ba as i, Dr as l, _r as m, Za as n, Va as o, vr as p, so as r, Na as s, ls as t, br as u, ar as v, Wt as w, Z as x, ir as y }; +export { tr as C, q as D, K as E, nr as S, J as T, mr as _, Ra as a, rr as b, ui as c, xr as d, gr as f, pr as g, cr as h, Ba as i, Dr as l, _r as m, Za as n, Va as o, vr as p, so as r, Na as s, us as t, br as u, ar as v, Wt as w, Z as x, ir as y }; diff --git a/dist/chunks/Viewer-BG31OAT8.js b/dist/chunks/Viewer-CnTOrl2S.js similarity index 99% rename from dist/chunks/Viewer-BG31OAT8.js rename to dist/chunks/Viewer-CnTOrl2S.js index bbbf6f92..ecff7fed 100644 --- a/dist/chunks/Viewer-BG31OAT8.js +++ b/dist/chunks/Viewer-CnTOrl2S.js @@ -6449,7 +6449,7 @@ function Zt() { qt = e; }), Jt || import("./scopes-X1iFrTle.js").then((e) => { Jt = e; - }), Yt || import("./genInfo-CPsL2cZc.js").then((e) => e.n).then((e) => { + }), Yt || import("./genInfo-B6Ymnifm.js").then((e) => e.n).then((e) => { Yt = e; }), Xt || import("./frameExport-tksSZ7sb.js").then((e) => { Xt = e; diff --git a/dist/chunks/ViewerPortal-CafMImU6.js b/dist/chunks/ViewerPortal-CH9H0gfB.js similarity index 98% rename from dist/chunks/ViewerPortal-CafMImU6.js rename to dist/chunks/ViewerPortal-CH9H0gfB.js index f87c248f..630e6a9a 100644 --- a/dist/chunks/ViewerPortal-CafMImU6.js +++ b/dist/chunks/ViewerPortal-CH9H0gfB.js @@ -1,9 +1,9 @@ import { a as e, i as t } from "./viewerRuntimeHosts-B9wQ_Nxj.js"; import { r as n } from "./events-BpkKbGZs.js"; -import { i as r, r as i } from "./floatingViewerManager-pz1ceTHv.js"; +import { i as r, r as i } from "./floatingViewerManager-tOuaq4XR.js"; import { B as a, C as o, D as s, E as c, G as l, H as u, I as d, O as f, R as p, T as m, W as h, ct as g, dt as _, j as v, k as y, lt as b, nt as x, q as S, ut as C, w, z as T } from "./mjr-primevue-n1rsQYJg.js"; import { t as E } from "./TagsEditor-DtmqPU71.js"; -import { a as D, c as O, i as k, n as A, o as ee, r as j, s as M, t as N } from "./Viewer-BG31OAT8.js"; +import { a as D, c as O, i as k, n as A, o as ee, r as j, s as M, t as N } from "./Viewer-CnTOrl2S.js"; //#region ui/vue/components/viewer/FloatingViewerHost.vue var P = { __name: "FloatingViewerHost", diff --git a/dist/chunks/floatingViewerManager-pz1ceTHv.js b/dist/chunks/floatingViewerManager-tOuaq4XR.js similarity index 99% rename from dist/chunks/floatingViewerManager-pz1ceTHv.js rename to dist/chunks/floatingViewerManager-tOuaq4XR.js index ff0e9bbc..c6656a36 100644 --- a/dist/chunks/floatingViewerManager-pz1ceTHv.js +++ b/dist/chunks/floatingViewerManager-tOuaq4XR.js @@ -98,7 +98,7 @@ var ie = /* @__PURE__ */ e({ teardownFloatingViewerManager: () => $ }), h = null, g = null; async function ae() { - return h || (g ||= import("./FloatingViewer-BokZM7bF.js").then((e) => (h = e.FloatingViewer, h)), g); + return h || (g ||= import("./FloatingViewer-mV836Kgg.js").then((e) => (h = e.FloatingViewer, h)), g); } var _ = null, oe = null; async function se() { diff --git a/dist/chunks/genInfo-CPsL2cZc.js b/dist/chunks/genInfo-B6Ymnifm.js similarity index 99% rename from dist/chunks/genInfo-CPsL2cZc.js rename to dist/chunks/genInfo-B6Ymnifm.js index 52bbf336..f020ffce 100644 --- a/dist/chunks/genInfo-CPsL2cZc.js +++ b/dist/chunks/genInfo-B6Ymnifm.js @@ -1,7 +1,7 @@ import { t as e } from "./rolldown-runtime-Dy4uBu1J.js"; import { m as t, o as n } from "./events-BpkKbGZs.js"; import { c as r } from "./mediaFps-CbdE2lHO.js"; -import { c as i, h as a, l as o, s, t as c } from "./SidebarWorkflowSection-BkH7KoSY.js"; +import { c as i, h as a, l as o, s, t as c } from "./SidebarWorkflowSection-Dhrg9X98.js"; import { B as l, D as u, E as d, O as f, T as p, ct as m, dt as h, k as g, ut as _ } from "./mjr-primevue-n1rsQYJg.js"; //#region ui/vue/components/viewer/ViewerMetadataBlock.vue var v = { style: { diff --git a/dist/chunks/openMajoorSettings-DDiqOHU0.js b/dist/chunks/openMajoorSettings-CVZbL23Z.js similarity index 99% rename from dist/chunks/openMajoorSettings-DDiqOHU0.js rename to dist/chunks/openMajoorSettings-CVZbL23Z.js index 6a433ba4..cb5652c1 100644 --- a/dist/chunks/openMajoorSettings-DDiqOHU0.js +++ b/dist/chunks/openMajoorSettings-CVZbL23Z.js @@ -1,6 +1,6 @@ import { A as e, E as t, J as n, R as r, Y as i, b as a, j as o, m as s } from "./events-BpkKbGZs.js"; import { a as c, n as l } from "./graphTraversal-CjIZsRsP.js"; -import { S as u } from "./SidebarWorkflowSection-BkH7KoSY.js"; +import { S as u } from "./SidebarWorkflowSection-Dhrg9X98.js"; //#region ui/features/viewer/floatingViewerProgress.ts var d = "progress-update", f = "__MJR_MFV_PROGRESS_SERVICE__"; function p() { diff --git a/dist/chunks/viewerOpenRequest-NfPVAV86.js b/dist/chunks/viewerOpenRequest-B2J_WEEB.js similarity index 95% rename from dist/chunks/viewerOpenRequest-NfPVAV86.js rename to dist/chunks/viewerOpenRequest-B2J_WEEB.js index 8331662b..b7920fa6 100644 --- a/dist/chunks/viewerOpenRequest-NfPVAV86.js +++ b/dist/chunks/viewerOpenRequest-B2J_WEEB.js @@ -1,5 +1,5 @@ import { r as e } from "./events-BpkKbGZs.js"; -import { t } from "./Viewer-BG31OAT8.js"; +import { t } from "./Viewer-CnTOrl2S.js"; //#region ui/features/viewer/viewerOpenRequest.ts function n(e) { let t = String(e || "").trim().toLowerCase(); diff --git a/dist/entry.js b/dist/entry.js index f7136998..4da7f4dd 100644 --- a/dist/entry.js +++ b/dist/entry.js @@ -2,9 +2,9 @@ import { A as e, At as t, B as n, Bt as r, C as i, D as a, E as o, Ft as s, Gt a import { $ as Me, A as Ne, F as Pe, G as Fe, H as Ie, K as Le, L as Re, Q as ze, U as Be, W as Ve, X as He, Z as Ue, _ as We, _t as Ge, at as Ke, bt as qe, ct as Je, dt as Ye, et as Xe, ft as Ze, g as F, gt as Qe, h as $e, it as et, j as tt, lt as nt, m as I, n as rt, o as L, ot as it, pt as at, q as ot, r as R, rt as st, st as ct, t as lt, tt as z, ut, vt as dt, x as ft, yt as pt } from "./chunks/events-BpkKbGZs.js"; import { a as mt, i as ht, n as gt, t as _t } from "./chunks/graphTraversal-CjIZsRsP.js"; import { A as vt, C as yt, E as bt, O as xt, S as St, T as Ct, _ as wt, b as Tt, d as Et, f as Dt, g as Ot, h as kt, k as At, l as jt, m as Mt, p as Nt, v as Pt, w as Ft, x as It, y as Lt } from "./chunks/mediaFps-CbdE2lHO.js"; -import { C as Rt, D as zt, E as Bt, S as Vt, T as Ht, _ as Ut, b as Wt, d as Gt, f as Kt, g as qt, h as Jt, l as Yt, m as Xt, p as Zt, s as Qt, t as $t, u as en, v as tn, w as nn, x as rn, y as an } from "./chunks/SidebarWorkflowSection-BkH7KoSY.js"; -import { r as on, s as sn, t as cn } from "./chunks/openMajoorSettings-DDiqOHU0.js"; -import { a as ln, c as un, l as dn, o as fn, s as pn, u as mn } from "./chunks/floatingViewerManager-pz1ceTHv.js"; +import { C as Rt, D as zt, E as Bt, S as Vt, T as Ht, _ as Ut, b as Wt, d as Gt, f as Kt, g as qt, h as Jt, l as Yt, m as Xt, p as Zt, s as Qt, t as $t, u as en, v as tn, w as nn, x as rn, y as an } from "./chunks/SidebarWorkflowSection-Dhrg9X98.js"; +import { r as on, s as sn, t as cn } from "./chunks/openMajoorSettings-CVZbL23Z.js"; +import { a as ln, c as un, l as dn, o as fn, s as pn, u as mn } from "./chunks/floatingViewerManager-tOuaq4XR.js"; import { A as hn, B, C as V, D as gn, E as H, F as _n, G as vn, H as yn, I as bn, J as xn, K as Sn, L as Cn, M as wn, N as Tn, O as U, R as En, S as Dn, T as W, U as On, V as kn, W as An, b as jn, ct as G, dt as K, et as Mn, it as Nn, j as q, k as J, lt as Y, nt as X, q as Z, rt as Pn, st as Fn, tt as In, ut as Ln, v as Rn, w as zn, x as Bn, y as Vn, z as Hn } from "./chunks/mjr-primevue-n1rsQYJg.js"; import { n as Un, r as Wn } from "./chunks/mjr-vue-vendor-D2GeV7Qd.js"; import { a as Gn, c as Kn, i as qn, n as Jn, o as Yn, r as Xn, s as Zn, t as Qn } from "./chunks/ratingUpdater-DD4Am3mA.js"; @@ -435,7 +435,7 @@ function Kr({ enabled: e = !0 } = {}) { return; } try { - let e = new URL("data:text/css;base64,LyoqCiAqIE1ham9vciBBc3NldHMgTWFuYWdlciAtIENvbWZ5LWxpa2UgdGhlbWUgbGF5ZXIKICoKICogUlVMRVM6CiAqIC0gRG8gTk9UIGhhcmRjb2RlIGEgY3VzdG9tIHBhbGV0dGU7IHVzZSBleGlzdGluZyBDb21meVVJIENTUyB2YXJpYWJsZXMgdmlhIHZhciguLi4pLgogKiAtIEtlZXAgZXZlcnl0aGluZyBzY29wZWQgdW5kZXIgYC5tanItYXNzZXRzLW1hbmFnZXJgIHRvIGF2b2lkIGxlYWtpbmcgc3R5bGVzIHRvIENvbWZ5VUkgKGV4Y2VwdCBgLm1qci1wb3BvdmVyKmAgd2hpY2ggY2FuIGJlIHBvcnRhbGVkIHRvIGBkb2N1bWVudC5ib2R5YCkuCiAqLwoKLm1qci1hc3NldHMtbWFuYWdlciB7CiAgICAvKiBUeXBvZ3JhcGh5ICovCiAgICBmb250LWZhbWlseTogdmFyKAogICAgICAgIC0tY29tZnktZm9udCwKICAgICAgICB2YXIoCiAgICAgICAgICAgIC0tZm9udC1pbnRlciwKICAgICAgICAgICAgdWktc2Fucy1zZXJpZiwKICAgICAgICAgICAgc3lzdGVtLXVpLAogICAgICAgICAgICAtYXBwbGUtc3lzdGVtLAogICAgICAgICAgICAiU2Vnb2UgVUkiLAogICAgICAgICAgICBSb2JvdG8sCiAgICAgICAgICAgIEFyaWFsLAogICAgICAgICAgICBzYW5zLXNlcmlmCiAgICAgICAgKQogICAgKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yLCB2YXIoLS1jb250ZW50LWZnLCB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKSkpOwoKICAgIC8qCiAgICAgKiBTdXJmYWNlcyAtIHByaW9yaXR5OiBDb21meVVJIHYxLjQyIGRlc2lnbi1zeXN0ZW0gdG9rZW4gLT4gbGVnYWN5IHRva2VuIC0+IGhhcmQgZmFsbGJhY2sKICAgICAqIE5ldyB0b2tlbnM6IC0taW50ZXJmYWNlLXBhbmVsLXN1cmZhY2UsIC0taW50ZXJmYWNlLW1lbnUtc3VyZmFjZSwgLS1pbnRlcmZhY2UtcGFuZWwtaG92ZXItc3VyZmFjZSwKICAgICAqICAgICAgICAgICAgIC0tbW9kYWwtY2FyZC1iYWNrZ3JvdW5kLCAtLWJ1dHRvbi1zdXJmYWNlLCAtLWJ1dHRvbi1ob3Zlci1zdXJmYWNlLAogICAgICogICAgICAgICAgICAgLS1pbnRlcmZhY2UtcGFuZWwtc2VsZWN0ZWQtc3VyZmFjZSwgLS1wcmltYXJ5LWJhY2tncm91bmQsIC0tbXV0ZWQtZm9yZWdyb3VuZCwKICAgICAqICAgICAgICAgICAgIC0tYm9yZGVyLWRlZmF1bHQsIC0tc3VjY2Vzcy1iYWNrZ3JvdW5kLCAtLXdhcm5pbmctYmFja2dyb3VuZCwgLS1kZXN0cnVjdGl2ZS1iYWNrZ3JvdW5kCiAgICAgKi8KICAgIC0tbWpyLXN1cmZhY2UtMDogdmFyKC0taW50ZXJmYWNlLXBhbmVsLXN1cmZhY2UsIHZhcigtLWNvbnRlbnQtYmcsICMxZTFlMWUpKTsKICAgIC0tbWpyLXN1cmZhY2UtMTogdmFyKC0taW50ZXJmYWNlLW1lbnUtc3VyZmFjZSwgdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSkpOwogICAgLS1tanItc3VyZmFjZS0yOiB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtaG92ZXItc3VyZmFjZSwgdmFyKC0tY29tZnktbWVudS1zZWNvbmRhcnktYmcsICMzMzMpKTsKICAgIC0tbWpyLXN1cmZhY2UtMzogdmFyKC0tbW9kYWwtY2FyZC1iYWNrZ3JvdW5kLCB2YXIoLS1jb21meS1tZW51LWJnLCAjMjIyKSk7CiAgICAtLW1qci1ib3JkZXI6IHZhcigtLWJvcmRlci1kZWZhdWx0LCB2YXIoLS1ib3JkZXItY29sb3IsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpKTsKICAgIC0tbWpyLW11dGVkOiB2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kLCB2YXIoLS1kZXNjcmlwLXRleHQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42NSkpKTsKICAgIC0tbWpyLWFjY2VudDogdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKTsKICAgIC0tbWpyLWFjY2VudC1ob3ZlcjogdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWhvdmVyLCB2YXIoLS1jb21meS1hY2NlbnQsICM3ZWM4ZmYpKTsKICAgIC0tbWpyLWJ0bi1zdXJmYWNlOiB2YXIoLS1idXR0b24tc3VyZmFjZSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgLS1tanItYnRuLWhvdmVyOiB2YXIoLS1idXR0b24taG92ZXItc3VyZmFjZSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgLS1tanItc2VsZWN0ZWQtc3VyZmFjZTogdmFyKC0taW50ZXJmYWNlLXBhbmVsLXNlbGVjdGVkLXN1cmZhY2UsIHJnYmEoOTUsIDE3OSwgMjU1LCAwLjE1KSk7CgogICAgLyogUmFkaWkgLSB1c2UgQ29tZnlVSSBkZXNpZ24tc3lzdGVtIHJhZGl1cyB0b2tlbnMgd2hlbiBhdmFpbGFibGUgKi8KICAgIC0tbWpyLXItc206IHZhcigtLXJhZGl1cy1zbSwgOHB4KTsKICAgIC0tbWpyLXItbWQ6IHZhcigtLXJhZGl1cy1tZCwgMTBweCk7CiAgICAtLW1qci1yLWxnOiB2YXIoLS1yYWRpdXMtbGcsIDEycHgpOwoKICAgIC8qIFNwYWNpbmcgKi8KICAgIC0tbWpyLXBhZC1zbTogOHB4OwogICAgLS1tanItcGFkLW1kOiAxMnB4OwogICAgLS1tanItcGFkLWxnOiAxNnB4OwoKICAgIC8qIFNlbWFudGljIFN0YXR1cyBDb2xvcnMgLSBwcmVmZXIgQ29tZnlVSSB2MS40MiBzZW1hbnRpYyB0b2tlbnMgKi8KICAgIC0tbWpyLXN0YXR1cy1zdWNjZXNzOiB2YXIoLS1zdWNjZXNzLWJhY2tncm91bmQsIHZhcigtLWNvbWZ5LXN0YXR1cy1zdWNjZXNzLCAjNGNhZjUwKSk7CiAgICAtLW1qci1zdGF0dXMtd2FybmluZzogdmFyKC0td2FybmluZy1iYWNrZ3JvdW5kLCB2YXIoLS1jb21meS1zdGF0dXMtd2FybmluZywgI2ZmYTcyNikpOwogICAgLS1tanItc3RhdHVzLWVycm9yOiB2YXIoLS1kZXN0cnVjdGl2ZS1iYWNrZ3JvdW5kLCB2YXIoLS1jb21meS1zdGF0dXMtZXJyb3IsICNmNDQzMzYpKTsKICAgIC0tbWpyLXN0YXR1cy1pbmZvOiB2YXIoLS1jb21meS1zdGF0dXMtaW5mbywgIzIxOTZmMyk7CiAgICAtLW1qci1zdGF0dXMtbmV1dHJhbDogdmFyKC0tY29tZnktc3RhdHVzLW5ldXRyYWwsICM5ZTllOWUpOwogICAgLS1tanItc3Rhci1hY3RpdmU6ICNmZmQ0NWE7CgogICAgLyogQmFkZ2UgY29sb3JzIChvdmVycmlkZGVuIGJ5IHNldHRpbmdzKSAqLwogICAgLS1tanItYmFkZ2UtaW1hZ2U6ICMyMTk2ZjM7CiAgICAtLW1qci1iYWRnZS12aWRlbzogIzljMjdiMDsKICAgIC0tbWpyLWJhZGdlLWF1ZGlvOiAjZmY5ODAwOwogICAgLS1tanItYmFkZ2UtbW9kZWwzZDogIzRjYWY1MDsKICAgIC0tbWpyLWNhcmQtaG92ZXItY29sb3I6IHZhcigtLWludGVyZmFjZS1wYW5lbC1ob3Zlci1zdXJmYWNlLCAjM2QzZDNkKTsKICAgIC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yOiB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtc2VsZWN0ZWQtc3VyZmFjZSwgIzRhOTBlMik7CiAgICAtLW1qci1yYXRpbmctY29sb3I6ICNmZjk1MDA7CiAgICAtLW1qci10YWctY29sb3I6ICM0YTkwZTI7Cn0KCi8qIE1ha2UgdGhlIHRoZW1lIHZpc2libHkgYXBwbHkgZXZlbiB3aXRoIGlubGluZSBzdHlsZXMgKi8KLm1qci1hc3NldHMtbWFuYWdlciAqIHsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIubWpyLWFtLWNvbnRhaW5lciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGhlaWdodDogMTAwJTsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1oZWFkZXIgewogICAgcGFkZGluZzogMTRweCAxNnB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSk7CiAgICBmbGV4OiAwIDAgYXV0bzsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDI7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1oZWFkZXItcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgbWluLWhlaWdodDogMjhweDsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGZsZXgtd3JhcDogd3JhcDsKICAgIHJvdy1nYXA6IDEwcHg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1oZWFkZXItbGVmdCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1oZWFkZXItYWN0aW9ucyB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBmbGV4OiAwIDAgYXV0bzsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGZsZXgtd3JhcDogd3JhcDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWhlYWRlci10b29scyB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGdhcDogOHB4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRhYnMgewogICAgLyogUXVldWUtbGlrZSB0YWJzIChhY3RpdmUgcGlsbCwgb3RoZXJzIGFzIHRleHQpICovCiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGJvcmRlcjogbm9uZTsKICAgIHBhZGRpbmc6IDA7CiAgICBnYXA6IDEwcHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBmbGV4OiAxIDEgYXV0bzsKICAgIG1pbi13aWR0aDogMDsKICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci10YWJzOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICB3aWR0aDogMDsKICAgIGhlaWdodDogMDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRhYiB7CiAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2RkZCkgNjUlLCB0cmFuc3BhcmVudCk7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIHRyYW5zZm9ybSAxMjBtcyBlYXNlLAogICAgICAgIGJhY2tncm91bmQtY29sb3IgMTIwbXMgZWFzZSwKICAgICAgICBjb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGFiOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHRyYW5zcGFyZW50KTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDcwJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGFiLmlzLWFjdGl2ZSB7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2ZmZik7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLCB0cmFuc3BhcmVudCk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4NSUsIHRyYW5zcGFyZW50KTsKICAgIGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjE4KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWljb24tYnRuIHsKICAgIHdpZHRoOiAyOHB4OwogICAgaGVpZ2h0OiAyOHB4OwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcsIDAuNXJlbSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTIpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgcGFkZGluZzogMDsKICAgIHRyYW5zaXRpb246CiAgICAgICAgdHJhbnNmb3JtIDEyMG1zIGVhc2UsCiAgICAgICAgYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaWNvbi1idG46aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNDUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLCB2YXIoLS1tanItYWNjZW50KSA4JSk7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pY29uLWJ0bi5tanItY29udGV4dC1hY3RpdmUgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgODUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTUlLCB2YXIoLS1tanItYWNjZW50KSAxMiUpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAzNSUsIHRyYW5zcGFyZW50KTsKfQoKLyogRmxvYXRpbmcgVmlld2VyIGJ1dHRvbiAtIHRlYWwgZ2xvdyB3aGVuIHZpZXdlciBpcyBvcGVuICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pY29uLWJ0bi5tanItbWZ2LWJ0bi1hY3RpdmUgewogICAgY29sb3I6ICM0ZGQ5YzA7CiAgICBib3JkZXItY29sb3I6IHJnYmEoNzcsIDIxNywgMTkyLCAwLjU1KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzcsIDIxNywgMTkyLCAwLjEpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHJnYmEoNzcsIDIxNywgMTkyLCAwLjI1KTsKfQoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaWNvbi1idG4ubWpyLW1mdi1idG4tYWN0aXZlIC5waSB7CiAgICBvcGFjaXR5OiAxOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaWNvbi1idG4ubWpyLW1lc3NhZ2UtYnRuIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG92ZXJmbG93OiB2aXNpYmxlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaWNvbi1idG4ubWpyLW1lc3NhZ2UtaGFzLXVucmVhZCB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA3NSUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA3MiUsIHZhcigtLW1qci1hY2NlbnQpIDExJSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1tZXNzYWdlLWJhZGdlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogLTVweDsKICAgIHJpZ2h0OiAtNnB4OwogICAgbWluLXdpZHRoOiAxNnB4OwogICAgaGVpZ2h0OiAxNnB4OwogICAgcGFkZGluZzogMCA0cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA1NSUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKSk7CiAgICBiYWNrZ3JvdW5kOiAjZWY1MzUwOwogICAgY29sb3I6ICNmZmY7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4zNSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pY29uLWJ0biAucGkgewogICAgZm9udC1zaXplOiAxM3B4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBvcGFjaXR5OiAwLjk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pY29uLWJ0bjpkaXNhYmxlZCwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFpLWNvbnRyb2w6ZGlzYWJsZWQgewogICAgb3BhY2l0eTogMC41OwogICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgIHRyYW5zZm9ybTogbm9uZTsKICAgIGZpbHRlcjogZ3JheXNjYWxlKDAuNDUpOwogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODglLCB0cmFuc3BhcmVudCkgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA5MiUsIHRyYW5zcGFyZW50KSAhaW1wb3J0YW50OwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpKSAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYWktZGlzYWJsZWQgLm1qci1haS1jb250cm9sOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYWktZGlzYWJsZWQtYmxvY2sgewogICAgb3BhY2l0eTogMC41ODsKICAgIGZpbHRlcjogZ3JheXNjYWxlKDAuNDUpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYWktZGlzYWJsZWQtYmxvY2sgLm1qci1haS1jb250cm9sLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYWktZGlzYWJsZWQtYmxvY2sgYnV0dG9uIHsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgovKiBQb3BvdmVycyBjYW4gYmUgbW92ZWQgdG8gYGRvY3VtZW50LmJvZHlgIChwb3J0YWwpIHRvIGF2b2lkIGJlaW5nIGNsaXBwZWQuICovCi5tanItcG9wb3ZlciB7CiAgICBmb250LWZhbWlseTogdmFyKAogICAgICAgIC0tY29tZnktZm9udCwKICAgICAgICB2YXIoCiAgICAgICAgICAgIC0tZm9udC1pbnRlciwKICAgICAgICAgICAgdWktc2Fucy1zZXJpZiwKICAgICAgICAgICAgc3lzdGVtLXVpLAogICAgICAgICAgICAtYXBwbGUtc3lzdGVtLAogICAgICAgICAgICAiU2Vnb2UgVUkiLAogICAgICAgICAgICBSb2JvdG8sCiAgICAgICAgICAgIEFyaWFsLAogICAgICAgICAgICBzYW5zLXNlcmlmCiAgICAgICAgKQogICAgKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yLCB2YXIoLS1jb250ZW50LWZnLCB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKSkpOwoKICAgIC8qIFByb3ZpZGUgZmFsbGJhY2tzIHdoZW4gb3V0c2lkZSBgLm1qci1hc3NldHMtbWFuYWdlcmAgc2NvcGUgKi8KICAgIC0tbWpyLXN1cmZhY2UtMTogdmFyKC0taW50ZXJmYWNlLW1lbnUtc3VyZmFjZSwgdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSkpOwogICAgLS1tanItYm9yZGVyOiB2YXIoLS1ib3JkZXItZGVmYXVsdCwgdmFyKC0tYm9yZGVyLWNvbG9yLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKSk7CiAgICAtLW1qci1tdXRlZDogdmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCwgdmFyKC0tZGVzY3JpcC10ZXh0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKSk7CiAgICAtLW1qci1hY2NlbnQ6IHZhcigtLXByaW1hcnktYmFja2dyb3VuZCwgdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKSk7CiAgICAtLW1qci1wb3BvdmVyLXotaW5kZXg6IDIxNDc0ODM2NDc7CgogICAgcG9zaXRpb246IGZpeGVkOwogICAgdG9wOiAwOwogICAgbGVmdDogMDsKICAgIG1pbi13aWR0aDogMDsKICAgIHdpZHRoOiBtaW4oMjgwcHgsIGNhbGMoMTAwdncgLSAyNHB4KSk7CiAgICBtYXgtd2lkdGg6IG1pbigzNjBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIHBhZGRpbmc6IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcsIDAuNXJlbSk7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xLCB2YXIoLS1jb21meS1tZW51LWJnLCAjMmEyYTJhKSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCB2YXIoLS1ib3JkZXItY29sb3IsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpKTsKICAgIGJveC1zaGFkb3c6IDAgMTJweCAyOHB4IHJnYmEoMCwgMCwgMCwgMC4zNSk7CiAgICB6LWluZGV4OiB2YXIoLS1tanItcG9wb3Zlci16LWluZGV4KTsKICAgIG1pbi1oZWlnaHQ6IDA7CiAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgIHRvdWNoLWFjdGlvbjogcGFuLXk7CiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47Cn0KCi5tanItcG9wb3Zlci0taGlkZGVuIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgewogICAgbWluLXdpZHRoOiAzNDBweDsKICAgIHdpZHRoOiBtaW4oMzYwcHgsIGNhbGMoMTAwdncgLSAyNHB4KSk7CiAgICBwYWRkaW5nOiAxMnB4Owp9CgoubWpyLXNvcnQtcG9wb3ZlciB7CiAgICBtaW4td2lkdGg6IDIyMHB4OwogICAgd2lkdGg6IG1pbigyNjBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIHBhZGRpbmc6IDEwcHg7Cn0KCi5tanItY29sbGVjdGlvbnMtcG9wb3ZlciB7CiAgICBtaW4td2lkdGg6IDI4MHB4OwogICAgd2lkdGg6IG1pbigzMjBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIHBhZGRpbmc6IDEwcHg7Cn0KCi5tanItcGlubmVkLWZvbGRlcnMtcG9wb3ZlciB7CiAgICBtaW4td2lkdGg6IDI4MHB4OwogICAgd2lkdGg6IG1pbigzNDBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIHBhZGRpbmc6IDEwcHg7Cn0KCi5tanItcGlubmVkLWZvbGRlcnMtcG9wb3ZlciAubWpyLXBpbm5lZC1mb2xkZXJzLW1lbnUgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogNnB4Owp9CgoubWpyLXBpbm5lZC1mb2xkZXJzLXBvcG92ZXIgLm1qci1waW5uZWQtZm9sZGVycy1lbXB0eSB7CiAgICBwYWRkaW5nOiAxMHB4IDEycHg7CiAgICBvcGFjaXR5OiAwLjc1Owp9CgoubWpyLXBpbm5lZC1mb2xkZXJzLXBvcG92ZXIgLm1qci1waW5uZWQtZm9sZGVyLXJvdyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICB3aWR0aDogMTAwJTsKfQoKLm1qci1waW5uZWQtZm9sZGVycy1wb3BvdmVyIC5tanItcGlubmVkLWZvbGRlci1vcGVuIHsKICAgIGZsZXg6IDE7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIHdpZHRoOiAxMDAlOwogICAgZ2FwOiAxMHB4OwogICAgcGFkZGluZzogOXB4IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDEyMCwgMTkwLCAyNTUsIDAuMTgpOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzKSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAxKSk7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGJhY2tncm91bmQgMTIwbXMgZWFzZTsKfQoKLm1qci1waW5uZWQtZm9sZGVycy1wb3BvdmVyIC5tanItcGlubmVkLWZvbGRlci1vcGVuOmhvdmVyLAoubWpyLXBpbm5lZC1mb2xkZXJzLXBvcG92ZXIgLm1qci1waW5uZWQtZm9sZGVyLW9wZW46Zm9jdXMtdmlzaWJsZSB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMTQ1LCAyMDUsIDI1NSwgMC40KTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHJnYmEoODAsIDE0MCwgMjU1LCAwLjE4KSwgcmdiYSgzMiwgMTAwLCAyMDAsIDAuMTQpKTsKfQoKLm1qci1waW5uZWQtZm9sZGVycy1wb3BvdmVyIC5tanItcGlubmVkLWZvbGRlci1sYWJlbCB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiB2YXIoLS1mZy1jb2xvciwgI2U2ZWRmNyk7Cn0KCi5tanItcGlubmVkLWZvbGRlcnMtcG9wb3ZlciAubWpyLXBpbm5lZC1mb2xkZXItcGF0aCB7CiAgICBmbGV4OiAwIDEgYXV0bzsKICAgIG1pbi13aWR0aDogMDsKICAgIG1heC13aWR0aDogMjIwcHg7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgb3BhY2l0eTogMC42ODsKICAgIGZvbnQtc2l6ZTogMTFweDsKfQoKLm1qci1waW5uZWQtZm9sZGVycy1wb3BvdmVyIC5tanItcGlubmVkLWZvbGRlci11bnBpbiB7CiAgICB3aWR0aDogNDJweDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgcGFkZGluZzogMDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCA5NSwgOTUsIDAuMzUpOwogICAgYm9yZGVyLXJhZGl1czogOXB4OwogICAgbWFyZ2luLWxlZnQ6IDZweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHJnYmEoMjU1LCA3MCwgNzAsIDAuMTYpLCByZ2JhKDE2MCwgMjAsIDIwLCAwLjEyKSk7Cn0KCi5tanItcGlubmVkLWZvbGRlcnMtcG9wb3ZlciAubWpyLXBpbm5lZC1mb2xkZXItdW5waW4gLnBpIHsKICAgIG9wYWNpdHk6IDAuODg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDEzMCwgMTMwLCAwLjk2KTsKfQoKLm1qci1tZXNzYWdlcy1wb3BvdmVyIHsKICAgIG1pbi13aWR0aDogMzIwcHg7CiAgICB3aWR0aDogbWluKDQ2MHB4LCBjYWxjKDEwMHZ3IC0gMjRweCkpOwogICAgcGFkZGluZzogMTBweDsKfQoKLm1qci1pbmxpbmUtZGlhbG9nLW1hc2sgewogICAgcG9zaXRpb246IHN0YXRpYyAhaW1wb3J0YW50OwogICAgaW5zZXQ6IGF1dG8gIWltcG9ydGFudDsKICAgIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7CiAgICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsKICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7CiAgICBwb2ludGVyLWV2ZW50czogYXV0byAhaW1wb3J0YW50Owp9CgoubWpyLWlubGluZS1kaWFsb2ctcm9vdCB7CiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogICAgd2lkdGg6IDEwMCU7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKfQoKLm1qci1pbmxpbmUtZGlhbG9nLWNvbnRlbnQgewogICAgcGFkZGluZzogMDsKfQoKLm1qci1tZXNzYWdlcy1oZWFkIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZ2FwOiA4cHg7CiAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICBtYXJnaW4tYm90dG9tOiA4cHg7Cn0KCi5tanItbWVzc2FnZXMtdGFicyB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDZweDsKICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgIHBhZGRpbmc6IDNweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDg4JSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDc0JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1lc3NhZ2VzLXRhYiB7CiAgICBhcHBlYXJhbmNlOiBub25lOwogICAgYm9yZGVyOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcsICNmMWYxZjEpIDc2JSwgdHJhbnNwYXJlbnQpOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGluZS1oZWlnaHQ6IDEuMjsKICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIGJhY2tncm91bmQtY29sb3IgMC4xNHMgZWFzZSwKICAgICAgICBjb2xvciAwLjE0cyBlYXNlLAogICAgICAgIHRyYW5zZm9ybSAwLjE0cyBlYXNlOwp9CgoubWpyLW1lc3NhZ2VzLXRhYjpob3ZlciwKLm1qci1tZXNzYWdlcy10YWI6Zm9jdXMtdmlzaWJsZSB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMTQlLCB0cmFuc3BhcmVudCk7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2YxZjFmMSk7CiAgICBvdXRsaW5lOiBub25lOwp9CgoubWpyLW1lc3NhZ2VzLXRhYi5pcy1hY3RpdmUgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDIyJSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNmZmYpOwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAzNCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1tZXNzYWdlcy1wYW5lbHMgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogOHB4OwogICAgbWF4LWhlaWdodDogbWluKDUydmgsIDQyMHB4KTsKfQoKLm1qci1tZXNzYWdlcy1saXN0LAoubWpyLW1lc3NhZ2VzLXNob3J0Y3V0cy1wYW5lbCB7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgIHNjcm9sbGJhci13aWR0aDogdGhpbjsKfQoKLm1qci10YWItY291bnQtYmFkZ2UgewogICAgbWluLXdpZHRoOiAxNnB4OwogICAgaGVpZ2h0OiAxNnB4OwogICAgcGFkZGluZzogMCA1cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZm9udC1zaXplOiA5cHg7CiAgICBmb250LXdlaWdodDogODAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDI4JSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZmZmKSA5MiUsIHRyYW5zcGFyZW50KTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNDglLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWVzc2FnZXMtdGl0bGUgewogICAgZmxleDogMSAxIGF1dG87CiAgICBtaW4td2lkdGg6IDA7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDNlbTsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcsICNkZGQpIDgyJSwgdmFyKC0tbWpyLW11dGVkKSk7Cn0KCi5tanItbWVzc2FnZXMtYWN0aW9ucyB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgZ2FwOiA2cHg7CiAgICBmbGV4LXdyYXA6IHdyYXA7Cn0KCi5tanItbWVzc2FnZXMtbWFyay1yZWFkLWJ0biB7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgbGluZS1oZWlnaHQ6IDEuMjsKfQoKLm1qci1tZXNzYWdlcy1zdGFyLWxpbmsgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgbGluZS1oZWlnaHQ6IDEuMjsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZjFmMWYxKTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsICNmM2M4NGIgNDIlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgI2YzYzg0YiAxMiUsIHZhcigtLW1qci1zdXJmYWNlLTIpKTsKfQoKLm1qci1tZXNzYWdlcy1zdGFyLWxpbms6aG92ZXIsCi5tanItbWVzc2FnZXMtc3Rhci1saW5rOmZvY3VzLXZpc2libGUgewogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9CgoubWpyLW1lc3NhZ2VzLXN0YXItaWNvbiB7CiAgICBjb2xvcjogI2YzYzg0YjsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgoubWpyLW1lc3NhZ2VzLXN0YXItbGFiZWwgewogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci1tZXNzYWdlcy1saXN0IHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDhweDsKfQoKLm1qci1tZXNzYWdlcy1lbXB0eSB7CiAgICBwYWRkaW5nOiA4cHggNnB4OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgb3BhY2l0eTogMC43MjsKfQoKLm1qci1tZXNzYWdlLWl0ZW0gewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogNXB4OwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4NiUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1OCUsIHRyYW5zcGFyZW50KTsKICAgIHBhZGRpbmc6IDhweDsKfQoKLm1qci1tZXNzYWdlLWl0ZW0tLXVucmVhZCB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1OCUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMjYlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWVzc2FnZS1pdGVtLS13YXJuaW5nIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsICNmMGI4NWEgNjIlLCB2YXIoLS1tanItYm9yZGVyKSk7Cn0KCi5tanItbWVzc2FnZS1pdGVtLS1lcnJvciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjZjM2YjZiIDYyJSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLW1lc3NhZ2UtaXRlbS0tc3VjY2VzcyB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjNThjMDdkIDYyJSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLW1lc3NhZ2UtaXRlbS1oZWFkIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZ2FwOiA4cHg7Cn0KCi5tanItbWVzc2FnZS1pdGVtLXRpdGxlLXdyYXAgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmbGV4OiAxIDEgYXV0bzsKfQoKLm1qci1tZXNzYWdlLWl0ZW0tZW1vamkgewogICAgZmxleDogMCAwIGF1dG87CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLm1qci1tZXNzYWdlLWl0ZW0tdGl0bGUgewogICAgbWluLXdpZHRoOiAwOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZjFmMWYxKTsKfQoKLm1qci1tZXNzYWdlLWl0ZW0tY2F0ZWdvcnkgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgcGFkZGluZzogMXB4IDZweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAzZW07CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMjAlLCB2YXIoLS1tanItc3VyZmFjZS0yKSk7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcsICNmZmYpIDg2JSwgdHJhbnNwYXJlbnQpOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci1tZXNzYWdlLWl0ZW0tbWV0YSB7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBvcGFjaXR5OiAwLjcyOwp9CgoubWpyLW1lc3NhZ2UtaXRlbS1ib2R5IHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIG9wYWNpdHk6IDAuOTI7CiAgICBsaW5lLWhlaWdodDogMS40NTsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7Cn0KCi5tanItbWVzc2FnZS1pdGVtLWFjdGlvbiB7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgY29sb3I6IHZhcigtLW1qci1hY2NlbnQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpOwogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgd2lkdGg6IGZpdC1jb250ZW50Owp9CgoubWpyLW1lc3NhZ2UtaXRlbS1hY3Rpb246aG92ZXIgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0KCi8qIFRvYXN0IEhpc3RvcnkgdGFiIC0gdW5yZWFkIGluZGljYXRvciBkb3QgKi8KLm1qci10YWItdW5yZWFkLWRvdCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB3aWR0aDogNnB4OwogICAgaGVpZ2h0OiA2cHg7CiAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKICAgIG1hcmdpbi1sZWZ0OiA1cHg7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgZmxleC1zaHJpbms6IDA7Cn0KCi8qIEhpc3RvcnkgcGFuZWwgKi8KLm1qci1tZXNzYWdlcy1oaXN0b3J5LXBhbmVsIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgbWluLWhlaWdodDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5tanItaGlzdG9yeS1oZWFkIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgcGFkZGluZzogNHB4IDAgNnB4OwogICAgZmxleC1zaHJpbms6IDA7Cn0KCi5tanItaGlzdG9yeS1oZWFkLWxhYmVsIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBvcGFjaXR5OiAwLjYyOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07Cn0KCi5tanItaGlzdG9yeS1jbGVhci1idG4gewogICAgZm9udC1zaXplOiAxMXB4OwogICAgcGFkZGluZzogMnB4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7CiAgICBjb2xvcjogaW5oZXJpdDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIG9wYWNpdHk6IDAuNzI7Cn0KCi5tanItaGlzdG9yeS1jbGVhci1idG46aG92ZXIgewogICAgb3BhY2l0eTogMTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAxMiUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1oaXN0b3J5LWxpc3QgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogNHB4OwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47Cn0KCi5tanItaGlzdG9yeS1pdGVtIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZzogNnB4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMiwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSk7CiAgICBmb250LXNpemU6IDEycHg7Cn0KCi5tanItaGlzdG9yeS1pdGVtLS1lcnJvciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjZjM2YjZiIDUwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLWhpc3RvcnktaXRlbS0td2FybmluZyB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjZjBiODVhIDUwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLWhpc3RvcnktaXRlbS0tc3VjY2VzcyB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjNThjMDdkIDUwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLWhpc3RvcnktaXRlbS1pY29uIHsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgZm9udC1zaXplOiAxNHB4OwogICAgbGluZS1oZWlnaHQ6IDEuNDsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tY29udGVudCB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA0cHg7Cn0KCi5tanItaGlzdG9yeS1pdGVtLW1zZyB7CiAgICBvcGFjaXR5OiAwLjkyOwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7CiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwp9CgoubWpyLWhpc3RvcnktaXRlbS10aXRsZSB7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgIG9wYWNpdHk6IDAuOTY7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tZGV0YWlsIHsKICAgIG9wYWNpdHk6IDAuODQ7CiAgICBsaW5lLWhlaWdodDogMS40NTsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlOwogICAgd29yZC1icmVhazogYnJlYWstd29yZDsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tbWV0YSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgZmxleC13cmFwOiB3cmFwOwp9CgoubWpyLWhpc3RvcnktaXRlbS10aW1lIHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIG9wYWNpdHk6IDAuNTI7Cn0KCi5tanItaGlzdG9yeS1pdGVtLWNoaXAgewogICAgZm9udC1zaXplOiAxMHB4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBwYWRkaW5nOiAycHggNnB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODIlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMywgdmFyKC0tbWpyLXN1cmZhY2UtMikpIDc4JSwgdHJhbnNwYXJlbnQpOwogICAgb3BhY2l0eTogMC43NjsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tYWN0aW9uIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIHdpZHRoOiBmaXQtY29udGVudDsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tYWN0aW9uOmhvdmVyIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9CgoubWpyLWhpc3RvcnktaXRlbS1wcm9ncmVzcyB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA0cHg7Cn0KCi5tanItaGlzdG9yeS1pdGVtLXByb2dyZXNzLXN1bW1hcnkgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgb3BhY2l0eTogMC43NDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7Cn0KCi5tanItaGlzdG9yeS1pdGVtLXByb2dyZXNzLWJhciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogNnB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc1JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWhpc3RvcnktaXRlbS1wcm9ncmVzcy1maWxsIHsKICAgIGhlaWdodDogMTAwJTsKICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgOTBkZWcsCiAgICAgICAgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZiksCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsICM1OGMwN2QgNzIlLCB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKSkKICAgICk7Cn0KCi5tanItc2hvcnRjdXQtZ3VpZGUgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogOHB4Owp9CgoubWpyLXNob3J0Y3V0LWd1aWRlLWludHJvIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ1OwogICAgb3BhY2l0eTogMC44NDsKfQoKLm1qci1zaG9ydGN1dC1zZWN0aW9uIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDZweDsKICAgIHBhZGRpbmc6IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODQlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMywgdmFyKC0tbWpyLXN1cmZhY2UtMikpIDcyJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLXNob3J0Y3V0LXNlY3Rpb24tdGl0bGUgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA0ZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZjFmMWYxKSA4OCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1zaG9ydGN1dC1saXN0IHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDZweDsKfQoKLm1qci1zaG9ydGN1dC1yb3cgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDEzMnB4LCAxNjBweCkgbWlubWF4KDAsIDFmcik7CiAgICBnYXA6IDhweDsKICAgIGFsaWduLWl0ZW1zOiBzdGFydDsKfQoKLm1qci1zaG9ydGN1dC1rZXkgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBtaW4taGVpZ2h0OiAyNHB4OwogICAgcGFkZGluZzogM3B4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDM4JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDEyJSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZmZmKSA5MCUsIHRyYW5zcGFyZW50KTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMS4yNTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7Cn0KCi5tanItc2hvcnRjdXQtZGVzYyB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsaW5lLWhlaWdodDogMS40OwogICAgb3BhY2l0eTogMC45MjsKfQoKQG1lZGlhIChtYXgtd2lkdGg6IDU2MHB4KSB7CiAgICAubWpyLXNob3J0Y3V0LXJvdyB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICB9CgogICAgLm1qci1zaG9ydGN1dC1rZXkgewogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgIH0KfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1oZWFkIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogMTBweDsKICAgIG1hcmdpbjogMCAwIDEwcHg7CiAgICBwYWRkaW5nOiA0cHggMnB4IDEwcHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDg1JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLWhlYWQtbGVmdCB7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXIta2lja2VyIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA4MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wOWVtOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZikgNjUlLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSk7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItc3VidGl0bGUgewogICAgbWFyZ2luLXRvcDogMnB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSA2MiUsIHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSkpOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLWhlYWQtYWN0aW9ucyB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIGZsZXg6IDAgMCBhdXRvOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLXN0YWNrIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiA4cHg7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItYWN0aXZlLWNvdW50IHsKICAgIG1pbi13aWR0aDogMjJweDsKICAgIGhlaWdodDogMjJweDsKICAgIHBhZGRpbmc6IDAgNnB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZikgNTUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZikgMTglLCB2YXIoLS1tanItc3VyZmFjZS0yKSk7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZmZmKTsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1jbGVhci1hbGwgewogICAgaGVpZ2h0OiAyNHB4OwogICAgcGFkZGluZzogMCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3NSUsIHRyYW5zcGFyZW50KTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1wb3BvdmVyLXJvdyB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICBnYXA6IDhweDsKICAgIGFsaWduLWl0ZW1zOiBzdGFydDsKICAgIG1hcmdpbi1ib3R0b206IDEwcHg7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1wb3BvdmVyLXJvdy0tM2NvbCB7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgwLCAxZnIpIG1pbm1heCgwLCAxZnIpOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItcG9wb3Zlci1yb3ctLTNjb2wgLm1qci1wb3BvdmVyLWxhYmVsIHsKICAgIGdyaWQtY29sdW1uOiAxIC8gLTE7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1wb3BvdmVyLWxhYmVsIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcsICNkZGQpIDcwJSwgdmFyKC0tbWpyLW11dGVkLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKSk7CiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItcG9wb3Zlci10b2dnbGUgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDZweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGNvbG9yOiB2YXIoLS1mZy1jb2xvciwgI2U2ZWRmNyk7CiAgICBwYWRkaW5nOiA2cHggOHB4OwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDgwJSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDY2JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItcG9wb3Zlci10b2dnbGUgaW5wdXRbdHlwZT0iY2hlY2tib3giXSB7CiAgICBhY2NlbnQtY29sb3I6IHZhcigtLW1qci1hY2NlbnQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLWdyb3VwIHsKICAgIC0tbWpyLWZpbHRlci1ncm91cC1hY2NlbnQ6IHZhcigtLW1qci1hY2NlbnQsICM3YWEyZmYpOwogICAgcGFkZGluZzogMTBweCAwIDhweDsKICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1ncm91cDpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgcGFkZGluZy1ib3R0b206IDJweDsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1ncm91cC0tY29yZSB7CiAgICAtLW1qci1maWx0ZXItZ3JvdXAtYWNjZW50OiAjNTZhOGZmOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLWdyb3VwLS1tZWRpYSB7CiAgICAtLW1qci1maWx0ZXItZ3JvdXAtYWNjZW50OiAjMzVkMDhiOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLWdyb3VwLS10aW1lIHsKICAgIC0tbWpyLWZpbHRlci1ncm91cC1hY2NlbnQ6ICNmMGI4NGY7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItZ3JvdXAtdG9nZ2xlIHsKICAgIHdpZHRoOiAxMDAlOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBnYXA6IDEwcHg7CiAgICBtYXJnaW46IDAgMCAxMHB4OwogICAgYm9yZGVyOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjb2xvcjogaW5oZXJpdDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBwYWRkaW5nOiAycHggNHB4Owp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLWdyb3VwLXRpdGxlIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItZmlsdGVyLWdyb3VwLWFjY2VudCkgNjIlLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItZ3JvdXAtdGl0bGU6OmJlZm9yZSB7CiAgICBjb250ZW50OiAiIjsKICAgIHdpZHRoOiA2cHg7CiAgICBoZWlnaHQ6IDZweDsKICAgIGZsZXg6IDAgMCA2cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1maWx0ZXItZ3JvdXAtYWNjZW50KTsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1ncm91cC1jaGV2cm9uIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItZmlsdGVyLWdyb3VwLWFjY2VudCkgNzglLCB2YXIoLS1tanItbXV0ZWQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42NSkpKTsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1ncm91cC1ib2R5IHsKICAgIHBhZGRpbmctdG9wOiA0cHg7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItY2FyZCB7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODglLCB0cmFuc3BhcmVudCk7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgcGFkZGluZzogMTBweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDg2JSwgdHJhbnNwYXJlbnQpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA4OCUsIHRyYW5zcGFyZW50KQogICAgKTsKICAgIG1hcmdpbi1ib3R0b206IDhweDsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1jYXJkOmxhc3QtY2hpbGQgewogICAgbWFyZ2luLWJvdHRvbTogMDsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1jYXJkLS1hZ2VuZGEgewogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDE4MGRlZywKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgI2YwYjg0ZiA5JSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA5MiUsIHRyYW5zcGFyZW50KQogICAgKTsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1ncm91cDpub3QoLmlzLW9wZW4pIHsKICAgIHBhZGRpbmctYm90dG9tOiA4cHg7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItZ3JvdXA6bm90KC5pcy1vcGVuKSAubWpyLWZpbHRlci1ncm91cC10b2dnbGUgewogICAgbWFyZ2luLWJvdHRvbTogMDsKfQoKQG1lZGlhIChtYXgtd2lkdGg6IDQ0MHB4KSB7CiAgICAubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLWhlYWQgewogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICB9CgogICAgLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1oZWFkLWFjdGlvbnMgewogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIH0KfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWhlYWRlci1pY29uIHsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBvcGFjaXR5OiAwLjk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1oZWFkZXItdGl0bGUgewogICAgbWFyZ2luOiAwOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAxZW07Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1jb250ZW50IHsKICAgIGZsZXg6IDE7CiAgICBwYWRkaW5nOiAxNnB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgbWluLWhlaWdodDogMDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWZvbGRlci1icmVhZGNydW1iIHsKICAgIC0tbWpyLWJyZWFkY3J1bWItYWNjZW50OiAjNTZhOGZmOwogICAgLS1tanItYnJlYWRjcnVtYi1jdXJyZW50OiAjMzVkMDhiOwogICAgZGlzcGxheTogbm9uZTsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDRweDsKICAgIHBhZGRpbmc6IDNweCA2cHg7CiAgICBtYXJnaW46IDFweCAwIDNweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIG9wYWNpdHk6IDAuNzg7CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJyZWFkY3J1bWItYWNjZW50KSAyMiUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYnJlYWRjcnVtYi1hY2NlbnQpIDklLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1mb2xkZXItYnJlYWRjcnVtYi5pcy12aXNpYmxlIHsKICAgIGRpc3BsYXk6IGZsZXg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1mb2xkZXItYnJlYWRjcnVtYi1hY3Rpb24gewogICAgcGFkZGluZzogMnB4IDhweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYnJlYWRjcnVtYi1hY2NlbnQpIDQyJSwgdHJhbnNwYXJlbnQpOwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1icmVhZGNydW1iLWFjY2VudCkgMTYlLCB0cmFuc3BhcmVudCk7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1icmVhZGNydW1iLWFjY2VudCkgNzglLCAjZmZmZmZmKTsKICAgIGZvbnQ6IGluaGVyaXQ7CiAgICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1mb2xkZXItYnJlYWRjcnVtYi1hY3Rpb246ZGlzYWJsZWQgewogICAgY3Vyc29yOiBkZWZhdWx0OwogICAgb3BhY2l0eTogMC41ODsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWZvbGRlci1icmVhZGNydW1iLWFjdGlvbjpub3QoOmRpc2FibGVkKTpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYnJlYWRjcnVtYi1hY2NlbnQpIDYyJSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1icmVhZGNydW1iLWFjY2VudCkgMjQlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1mb2xkZXItYnJlYWRjcnVtYi1zZWdtZW50IHsKICAgIG1heC13aWR0aDogMjIwcHg7CiAgICBtaW4td2lkdGg6IDA7CiAgICBwYWRkaW5nOiAxcHggNXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJyZWFkY3J1bWItYWNjZW50KSA4JSwgdHJhbnNwYXJlbnQpOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYnJlYWRjcnVtYi1hY2NlbnQpIDc2JSwgI2ZmZmZmZik7CiAgICBmb250OiBpbmhlcml0OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZm9sZGVyLWJyZWFkY3J1bWItc2VnbWVudDpub3QoOmRpc2FibGVkKTpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYnJlYWRjcnVtYi1hY2NlbnQpIDM4JSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1icmVhZGNydW1iLWFjY2VudCkgMTYlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1mb2xkZXItYnJlYWRjcnVtYi1zZWdtZW50LmlzLWN1cnJlbnQsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1mb2xkZXItYnJlYWRjcnVtYi1zZWdtZW50OmRpc2FibGVkIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1icmVhZGNydW1iLWN1cnJlbnQpIDM4JSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1icmVhZGNydW1iLWN1cnJlbnQpIDE0JSwgdHJhbnNwYXJlbnQpOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYnJlYWRjcnVtYi1jdXJyZW50KSA3NCUsICNmZmZmZmYpOwogICAgY3Vyc29yOiBkZWZhdWx0Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZm9sZGVyLWJyZWFkY3J1bWItc2VwYXJhdG9yIHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJyZWFkY3J1bWItYWNjZW50KSA1OCUsIHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYyKSkpOwogICAgb3BhY2l0eTogMC45Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWVkaWEtc2hvcnRjdXRzIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNHB4OwogICAgZmxleC13cmFwOiB3cmFwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWVkaWEtc2hvcnRjdXQtYnRuIHsKICAgIHdpZHRoOiAyNHB4OwogICAgaGVpZ2h0OiAyNHB4Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWVkaWEtc2hvcnRjdXQtYnRuIC5waSB7CiAgICBmb250LXNpemU6IDExcHg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1kdXAtYWxlcnQgewogICAgcGFkZGluZzogMnB4IDhweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvciwgIzU1NSk7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1tZW51LWJnLCAjMjIyKTsKICAgIGNvbG9yOiB2YXIoLS1pbnB1dC10ZXh0LCAjZWVlKTsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgY3Vyc29yOiBwb2ludGVyOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tYnJvd3NlIHsKICAgIGZsZXg6IDE7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNzUlLCB0cmFuc3BhcmVudCk7CiAgICBwYWRkaW5nLXRvcDogNHB4Owp9CgovKiBTY3JvbGxiYXJzIChtYXRjaCBDb21meVVJIGZlZWwpICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1ncmlkLXNjcm9sbCB7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgaGVpZ2h0OiAxMDAlOwogICAgb3ZlcmZsb3c6IGF1dG87CiAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgdG91Y2gtYWN0aW9uOiBwYW4teTsKICAgIHNjcm9sbGJhci13aWR0aDogdGhpbjsKICAgIHNjcm9sbGJhci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDg1JSwgdmFyKC0tY29udGVudC1mZywgI2RkZCkpIHRyYW5zcGFyZW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tZ3JpZC1zY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIHdpZHRoOiAxMHB4OwogICAgaGVpZ2h0OiAxMHB4Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tZ3JpZC1zY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tZ3JpZC1zY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHZhcigtLWNvbnRlbnQtZmcsICNkZGQpKTsKICAgIGJvcmRlcjogMnB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tZ3JpZC1zY3JvbGw6aG92ZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA3MCUsIHZhcigtLWNvbnRlbnQtZmcsICNkZGQpKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWdyaWQtc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXIgewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1jdXN0b20tY29udHJvbHMgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiAwOwogICAgZ2FwOiA4cHg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXNlYXJjaCB7CiAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXNlYXJjaCB7CiAgICBwYWRkaW5nLWJvdHRvbTogNnB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgbWFyZ2luLWJvdHRvbTogNnB4Owp9CgovKiBDYXJkIE1ldGFkYXRhIENvbG9ycyAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWV0YS1kdXJhdGlvbiB7CiAgICBjb2xvcjogI2ZmYTcyNjsgLyogT3JhbmdlIGZvciBkdXJhdGlvbiAqLwogICAgZm9udC13ZWlnaHQ6IDUwMDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1ldGEtcmVzIHsKICAgIGNvbG9yOiAjNGZjM2Y3OyAvKiBMaWdodCBCbHVlIGZvciByZXNvbHV0aW9uICovCiAgICBmb250LXdlaWdodDogNTAwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWV0YS1kYXRlIHsKICAgIGNvbG9yOiAjYjlmNmNhOyAvKiBQYWxlIEdyZWVuIGZvciBkYXRlICovCiAgICBmb250LXNpemU6IDAuOWVtOwogICAgZm9udC13ZWlnaHQ6IDUwMDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1ldGEtdGltZSB7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKTsKICAgIGZvbnQtc2l6ZTogMC45ZW07Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zdW1tYXJ5IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZ2FwOiAxMHB4OwogICAgbWFyZ2luOiAwIDAgNnB4IDA7CiAgICBwYWRkaW5nOiAwIDAgNHB4IDA7CiAgICBtaW4taGVpZ2h0OiAxNnB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSk7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDY1JSwgdHJhbnNwYXJlbnQpOwogICAgZmxleDogMCAwIGF1dG87Cn0KCi8qIFRvYXN0cyAoZ2xvYmFsOiBjYW4gYmUgbW91bnRlZCB1bmRlciBkb2N1bWVudC5ib2R5KSAqLwoubWpyLXRvYXN0LWNvbnRhaW5lciB7CiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICB0b3A6IDE2cHg7CiAgICBsZWZ0OiA1MCU7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICB6LWluZGV4OiAxMDAwMDAxOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5tanItdG9hc3QgewogICAgLS1tanItdG9hc3Qtc3RyaXA6IHZhcigtLW1qci1zdGF0dXMtaW5mbywgdmFyKC0tY29tZnktc3RhdHVzLWluZm8sICMyMTk2ZjMpKTsKICAgIC0tbWpyLXRvYXN0LWljb24tY29sb3I6IHZhcigtLW1qci1zdGF0dXMtaW5mbywgdmFyKC0tY29tZnktc3RhdHVzLWluZm8sICMyMTk2ZjMpKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yLCAjM2EzYTNhKTsKICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgdmFyKC0tbWpyLXRvYXN0LXN0cmlwKTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIHBhZGRpbmc6IDEycHggMTZweDsKICAgIGNvbG9yOiB2YXIoLS1mZy1jb2xvciwgI2VmZWZlZik7CiAgICBmb250LWZhbWlseTogdmFyKAogICAgICAgIC0tY29tZnktZm9udCwKICAgICAgICB1aS1zYW5zLXNlcmlmLAogICAgICAgIHN5c3RlbS11aSwKICAgICAgICAtYXBwbGUtc3lzdGVtLAogICAgICAgICJTZWdvZSBVSSIsCiAgICAgICAgUm9ib3RvLAogICAgICAgIEFyaWFsLAogICAgICAgIHNhbnMtc2VyaWYKICAgICk7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBib3gtc2hhZG93OiAwIDRweCAxNnB4IHJnYmEoMCwgMCwgMCwgMC41KTsKICAgIG9wYWNpdHk6IDA7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTE1cHgpOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBvcGFjaXR5IDAuMnMgZWFzZS1vdXQsCiAgICAgICAgdHJhbnNmb3JtIDAuMnMgZWFzZS1vdXQ7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMnB4OwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgd2lkdGg6IG1heC1jb250ZW50OwogICAgbWluLXdpZHRoOiBtaW4oMjUwcHgsIGNhbGMoMTAwdncgLSAyNHB4KSk7CiAgICBtYXgtd2lkdGg6IG1pbig0MDBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig0cHgpOwogICAgY3Vyc29yOiBkZWZhdWx0OwogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItdG9hc3QuaXMtdmlzaWJsZSB7CiAgICBvcGFjaXR5OiAxOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwp9CgoubWpyLXRvYXN0LXRleHQgewogICAgZmxleDogMTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7Cn0KCi8qIFRvYXN0IGljb24gc3R5bGluZyAqLwoubWpyLXRvYXN0LXRleHQ6OmJlZm9yZSB7CiAgICBjb250ZW50OiBhdHRyKGRhdGEtaWNvbik7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGNvbG9yOiB2YXIoLS1tanItdG9hc3QtaWNvbi1jb2xvcik7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIG1pbi13aWR0aDogMTZweDsKfQoKLm1qci10b2FzdC1zdWNjZXNzIHsKICAgIC0tbWpyLXRvYXN0LXN0cmlwOiB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MsIHZhcigtLWNvbWZ5LXN0YXR1cy1zdWNjZXNzLCAjNGNhZjUwKSk7CiAgICAtLW1qci10b2FzdC1pY29uLWNvbG9yOiB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MsIHZhcigtLWNvbWZ5LXN0YXR1cy1zdWNjZXNzLCAjNGNhZjUwKSk7Cn0KCi5tanItdG9hc3QtZXJyb3IgewogICAgLS1tanItdG9hc3Qtc3RyaXA6IHZhcigtLW1qci1zdGF0dXMtZXJyb3IsIHZhcigtLWNvbWZ5LXN0YXR1cy1lcnJvciwgI2Y0NDMzNikpOwogICAgLS1tanItdG9hc3QtaWNvbi1jb2xvcjogdmFyKC0tbWpyLXN0YXR1cy1lcnJvciwgdmFyKC0tY29tZnktc3RhdHVzLWVycm9yLCAjZjQ0MzM2KSk7Cn0KCi5tanItdG9hc3Qtd2FybmluZyB7CiAgICAtLW1qci10b2FzdC1zdHJpcDogdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCB2YXIoLS1jb21meS1zdGF0dXMtd2FybmluZywgI2ZmYTcyNikpOwogICAgLS1tanItdG9hc3QtaWNvbi1jb2xvcjogdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCB2YXIoLS1jb21meS1zdGF0dXMtd2FybmluZywgI2ZmYTcyNikpOwp9CgoubWpyLXRvYXN0LWluZm8gewogICAgLS1tanItdG9hc3Qtc3RyaXA6IHZhcigtLW1qci1zdGF0dXMtaW5mbywgdmFyKC0tY29tZnktc3RhdHVzLWluZm8sICMyMTk2ZjMpKTsKICAgIC0tbWpyLXRvYXN0LWljb24tY29sb3I6IHZhcigtLW1qci1zdGF0dXMtaW5mbywgdmFyKC0tY29tZnktc3RhdHVzLWluZm8sICMyMTk2ZjMpKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXN1bW1hcnktdGV4dCB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc3VtbWFyeS1yaWdodCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDZweDsKICAgIG1pbi13aWR0aDogMDsKICAgIGZsZXgtd3JhcDogd3JhcDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWNvbnRleHQtcGlsbHMgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA1cHg7CiAgICByb3ctZ2FwOiA0cHg7CiAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY29udGV4dC1waWxsIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgcGFkZGluZzogM3B4IDdweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDU1JSwgdmFyKC0tbWpyLWFjY2VudCkgMTAlKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMTglLCB0cmFuc3BhcmVudCk7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICBmb250LXNpemU6IDEwLjVweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgbWluLWhlaWdodDogMjJweDsKICAgIG1heC13aWR0aDogMjIwcHg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jb250ZXh0LXBpbGw6aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNzUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTAlLCB2YXIoLS1tanItYWNjZW50KSAxNCUpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY29udGV4dC1waWxsLXRleHQgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG9wYWNpdHk6IDAuOTI7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jb250ZXh0LXBpbGwteCB7CiAgICB3aWR0aDogMjBweDsKICAgIGhlaWdodDogMjBweDsKICAgIHBhZGRpbmc6IDA7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNzUlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSk7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIGJhY2tncm91bmQtY29sb3IgMTIwbXMgZWFzZSwKICAgICAgICBib3JkZXItY29sb3IgMTIwbXMgZWFzZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNvbnRleHQtcGlsbC14OmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDcwJSwgdmFyKC0tbWpyLWFjY2VudCkgMTAlKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZmZmKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXNlYXJjaC1waWxsIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgaGVpZ2h0OiAxLjc1cmVtOwogICAgcGFkZGluZzogMCAxMHB4OwogICAgd2lkdGg6IDEwMCU7CiAgICBtYXgtd2lkdGg6IG5vbmU7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcsIDAuNXJlbSk7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1pbnB1dC1iZywgcmdiYSgwLCAwLCAwLCAwLjI1KSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc2VhcmNoLXRvb2xzIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgZmxleDogMCAwIGF1dG87Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1wb3BvdmVyLWFuY2hvciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7Cn0KCi5tanItYWdlbmRhLWlucHV0IHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LWlucHV0LWJnLCByZ2JhKDAsIDAsIDAsIDAuMjUpKTsKICAgIGNvbG9yOiB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKTsKICAgIHRyYW5zaXRpb246CiAgICAgICAgYmFja2dyb3VuZC1jb2xvciAwLjJzIGVhc2UsCiAgICAgICAgY29sb3IgMC4ycyBlYXNlLAogICAgICAgIGJvcmRlci1jb2xvciAwLjJzIGVhc2U7Cn0KLm1qci1hZ2VuZGEtaW5wdXQubWpyLWFnZW5kYS1maWxsZWQgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KAogICAgICAgIGluIHNyZ2IsCiAgICAgICAgdmFyKC0tbWpyLWFjY2VudCwgdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKSkgNDAlLAogICAgICAgIHZhcigtLW1qci1zdXJmYWNlLTIpIDYwJQogICAgKTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KAogICAgICAgIGluIHNyZ2IsCiAgICAgICAgdmFyKC0tbWpyLWFjY2VudCwgdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKSkgODAlLAogICAgICAgIHZhcigtLW1qci1ib3JkZXIpCiAgICApOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNmZmYpOwp9Ci5tanItYWdlbmRhLWlucHV0Lm1qci1hZ2VuZGEtZW1wdHkgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDg1JSwgdHJhbnNwYXJlbnQgMTUlKTsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tbWpyLWJvcmRlcik7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKTsKfQoKLm1qci1hZ2VuZGEtY29udGFpbmVyIHsKICAgIHdpZHRoOiAxMDAlOwp9CgoubWpyLWFnZW5kYS1jYWxlbmRhciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogOHB4OwogICAgd2lkdGg6IDEwMCU7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItYWdlbmRhLWhlYWRlciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4Owp9CgoubWpyLWFnZW5kYS1tb250aCB7CiAgICBmbGV4OiAxOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIHVzZXItc2VsZWN0OiBub25lOwp9CgoubWpyLWFnZW5kYS1uYXYgewogICAgd2lkdGg6IDMycHg7CiAgICBoZWlnaHQ6IDI4cHg7CiAgICBwYWRkaW5nOiAwOwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKfQoKLm1qci1hZ2VuZGEtZ3JpZCB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoNywgbWlubWF4KDAsIDFmcikpOwogICAgZ2FwOiA2cHg7CiAgICB3aWR0aDogMTAwJTsKfQoKLm1qci1hZ2VuZGEtd2Vla2RheSB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKTsKICAgIHVzZXItc2VsZWN0OiBub25lOwp9CgoubWpyLWFnZW5kYS1kYXkgewogICAgaGVpZ2h0OiAzMHB4OwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDU1JSwgdHJhbnNwYXJlbnQpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBwYWRkaW5nOiAwOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIGJhY2tncm91bmQtY29sb3IgMTIwbXMgZWFzZSwKICAgICAgICBib3JkZXItY29sb3IgMTIwbXMgZWFzZSwKICAgICAgICB0cmFuc2Zvcm0gODBtcyBlYXNlOwp9CgoubWpyLWFnZW5kYS1kYXktYmFkZ2UgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAtNXB4OwogICAgcmlnaHQ6IC01cHg7CiAgICBtaW4td2lkdGg6IDE2cHg7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICBwYWRkaW5nOiAwIDRweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogI2U1MzkzNTsKICAgIGNvbG9yOiAjZmZmOwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsICNlNTM5MzUgNjUlLCAjZmZmZmZmIDM1JSk7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGluZS1oZWlnaHQ6IDE0cHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cn0KCi5tanItYWdlbmRhLWRheTpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peCgKICAgICAgICBpbiBzcmdiLAogICAgICAgIHZhcigtLW1qci1ib3JkZXIpIDU1JSwKICAgICAgICB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKSA0NSUKICAgICk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoCiAgICAgICAgaW4gc3JnYiwKICAgICAgICB2YXIoLS1tanItc3VyZmFjZS0yKSA0NSUsCiAgICAgICAgdmFyKC0tbWpyLWFjY2VudCwgdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKSkgMTAlCiAgICApOwp9CgoubWpyLWFnZW5kYS1kYXk6YWN0aXZlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxcHgpOwp9CgoubWpyLWFnZW5kYS1kYXktLWJsYW5rIHsKICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoubWpyLWFnZW5kYS1kYXktLWhhcy1hc3NldHMgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoCiAgICAgICAgaW4gc3JnYiwKICAgICAgICB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKSA4MCUsCiAgICAgICAgdmFyKC0tbWpyLWJvcmRlcikKICAgICk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoCiAgICAgICAgaW4gc3JnYiwKICAgICAgICB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKSAxOCUsCiAgICAgICAgdmFyKC0tbWpyLXN1cmZhY2UtMikgODIlCiAgICApOwp9CgoubWpyLWFnZW5kYS1kYXktLXNlbGVjdGVkIHsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tbWpyLWFjY2VudCwgdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHgKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCwgdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKSkgNTUlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItYWdlbmRhLWZvb3RlciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiA4cHg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47Cn0KCi5tanItYWdlbmRhLWNsZWFyLAoubWpyLWFnZW5kYS1yZWZyZXNoIHsKICAgIGZsZXg6IDE7Cn0KCi5tanItbWVudSwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lbnUgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDRweDsKfQoKLm1qci1wcmltZS1tZW51LWxpc3QsCi5tanItc29ydC1tZW51IFtkYXRhLXBjLXNlY3Rpb249Imxpc3QiXSB7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMDsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDZweDsKfQoKLm1qci1wcmltZS1tZW51IFtkYXRhLXBjLXNlY3Rpb249Iml0ZW0iXSwKLm1qci1wcmltZS1tZW51LWxpc3QgW2RhdGEtcGMtc2VjdGlvbj0iaXRlbSJdIHsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7Cn0KCi5tanItcHJpbWUtbWVudSBbZGF0YS1wYy1zZWN0aW9uPSJpdGVtY29udGVudCJdIHsKICAgIHdpZHRoOiAxMDAlOwp9CgoubWpyLW1lbnUtaXRlbSwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lbnUtaXRlbSB7CiAgICBhcHBlYXJhbmNlOiBub25lOwogICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBnYXA6IDEwcHg7CiAgICB3aWR0aDogMTAwJTsKICAgIHBhZGRpbmc6IDhweCAxMHB4OwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIGJhY2tncm91bmQtY29sb3IgMTIwbXMgZWFzZSwKICAgICAgICBib3JkZXItY29sb3IgMTIwbXMgZWFzZSwKICAgICAgICB0cmFuc2Zvcm0gODBtcyBlYXNlOwp9CgoubWpyLW1lbnUtaXRlbTpob3ZlciwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lbnUtaXRlbTpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4MCUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1tZW51LWl0ZW06YWN0aXZlLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWVudS1pdGVtOmFjdGl2ZSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTsKfQoKLm1qci1tZW51LWl0ZW0tbGFiZWwsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1tZW51LWl0ZW0tbGFiZWwgewogICAgZmxleDogMSAxIGF1dG87CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLW1lbnUtaXRlbS1jaGVjaywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lbnUtaXRlbS1jaGVjayB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICB3aWR0aDogMTZweDsKICAgIGZsZXg6IDAgMCAxNnB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgb3BhY2l0eTogMDsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNzIlLCB2YXIoLS1jb250ZW50LWZnKSk7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIG9wYWNpdHkgMTIwbXMgZWFzZSwKICAgICAgICBjb2xvciAxMjBtcyBlYXNlOwp9CgoubWpyLW1lbnUtaXRlbSAucGksCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1tZW51LWl0ZW0gLnBpIHsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIG9wYWNpdHk6IDAuOTsKfQoKLm1qci1jb2xsZWN0aW9ucy1tZW51IHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDZweDsKfQoKLm1qci1tZW51LWl0ZW0tbGFiZWwtLWljb24gewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICBmbGV4OiAxIDEgYXV0bzsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1tZW51LWl0ZW0tbGFiZWwtLWljb24gLnBpIHsKICAgIHdpZHRoOiAxNnB4OwogICAgZmxleDogMCAwIDE2cHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCi5tanItbWVudS1pdGVtLXJpZ2h0IHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgbWluLXdpZHRoOiAxNnB4OwogICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwp9CgoubWpyLW1lbnUtaXRlbS1oaW50IHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZykgNjIlLCB2YXIoLS1tanItbXV0ZWQpKTsKICAgIG9wYWNpdHk6IDAuNzI7CiAgICBmb250LXNpemU6IDExcHg7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoubWpyLW1lbnUtaXRlbS1jaGVjay0tdmlzaWJsZSwKLm1qci1tZW51LWl0ZW0uaXMtYWN0aXZlIC5tanItbWVudS1pdGVtLWNoZWNrIHsKICAgIG9wYWNpdHk6IDE7Cn0KCi5tanItbWVudS1kaXZpZGVyIHsKICAgIGhlaWdodDogMXB4OwogICAgbWFyZ2luOiA0cHggMDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4MCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1tdXRlZCB7CiAgICBwYWRkaW5nOiAxMHB4IDEycHg7CiAgICBvcGFjaXR5OiAwLjc1Owp9CgoubWpyLXN0YXRlLWJsb2NrIHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCk7CiAgICBib3JkZXI6IDFweCBkYXNoZWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDg1JSwgdHJhbnNwYXJlbnQpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItc20pOwogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBtYXJnaW46IDRweCAwOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDcwJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLXN0YXRlLWJsb2NrLmlzLWVycm9yLAoubWpyLWNvbnRleHQtbWVudS1ub3RlLmlzLWVycm9yIHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy1lcnJvcikgODIlLCB2YXIoLS1jb250ZW50LWZnKSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLWVycm9yKSA0NSUsIHZhcigtLW1qci1ib3JkZXIpKTsKfQoKLm1qci1jb2xsZWN0aW9uLXJvdyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICB3aWR0aDogMTAwJTsKICAgIG1pbi1oZWlnaHQ6IDQ4cHg7Cn0KCi5tanItY29sbGVjdGlvbnMtdmlydHVhbC1saXN0IHsKICAgIHdpZHRoOiAxMDAlOwogICAgb3ZlcmZsb3c6IGF1dG87CiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47Cn0KCi5tanItZGVsZXRlLWJ0biB7CiAgICB3aWR0aDogNDJweDsKICAgIGZsZXg6IDAgMCA0MnB4OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBwYWRkaW5nOiAwOwogICAgbWFyZ2luLWxlZnQ6IDZweDsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDY1JSwgdmFyKC0tbWpyLXN0YXR1cy1lcnJvcikgNDUlKTsKfQoKLm1qci1kZWxldGUtYnRuOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDQwJSwgdmFyKC0tbWpyLXN0YXR1cy1lcnJvcikgNjUlKTsKfQoKLm1qci1kZWxldGUtYnRuIC5waSB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtZXJyb3IpIDc4JSwgdmFyKC0tY29udGVudC1mZykpOwp9CgoubWpyLXNlY3Rpb24tdGl0bGUgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDZweDsKICAgIHBhZGRpbmc6IDZweCAxMHB4IDJweDsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC42cHg7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgb3BhY2l0eTogMC44ODsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZykgNzIlLCB2YXIoLS1tanItbXV0ZWQpKTsKfQoKLm1qci1zZWN0aW9uLXRpdGxlLS1jeWFuIHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgIzZmZDRmZiA3OCUsIHZhcigtLWNvbnRlbnQtZmcpKTsKfQoKLm1qci1zZWN0aW9uLXRpdGxlLS12aW9sZXQgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjYzQ4ZGZmIDc4JSwgdmFyKC0tY29udGVudC1mZykpOwp9CgoubWpyLXNlY3Rpb24taGludCB7CiAgICBwYWRkaW5nOiAwIDEwcHggNHB4OwogICAgZm9udC1zaXplOiAxMHB4OwogICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZykgNTUlLCB2YXIoLS1tanItbXV0ZWQpKTsKfQoKLm1qci1tZW51LWl0ZW0tLXNtYXJ0LAoubWpyLW1lbnUtaXRlbS0tY2x1c3RlciB7CiAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCi5tanItbWVudS1pdGVtLS1jbHVzdGVyIHsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcpOwp9CgoubWpyLW1lbnUtaXRlbS0tc21hcnQgLnBpIHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgIzZmZDRmZiA3NCUsIHZhcigtLWNvbnRlbnQtZmcpKTsKfQoKLm1qci1tZW51LWl0ZW0tLWNsdXN0ZXIgLnBpIHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgI2M0OGRmZiA3NCUsIHZhcigtLWNvbnRlbnQtZmcpKTsKfQoKLm1qci1tZW51LWl0ZW0tLXNtYXJ0OmhvdmVyOm5vdCg6ZGlzYWJsZWQpLAoubWpyLW1lbnUtaXRlbS0tY2x1c3Rlcjpob3Zlcjpub3QoOmRpc2FibGVkKSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4MCUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1jbHVzdGVyLXJvdyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgcGFkZGluZzogNnB4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLXNtKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDcwJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWNsdXN0ZXItdGh1bWJzIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBnYXA6IDNweDsKICAgIGZsZXgtc2hyaW5rOiAwOwp9CgoubWpyLWNsdXN0ZXItdGh1bWIgewogICAgd2lkdGg6IDI4cHg7CiAgICBoZWlnaHQ6IDI4cHg7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBvYmplY3QtZml0OiBjb3ZlcjsKICAgIG9wYWNpdHk6IDAuODU7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNjAlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItY2x1c3Rlci1pbmZvIHsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItY2x1c3Rlci1uYW1lIHsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcpOwp9CgoubWpyLWNsdXN0ZXItY291bnQgewogICAgZm9udC1zaXplOiAxMHB4OwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnKSA1OCUsIHZhcigtLW1qci1tdXRlZCkpOwp9CgoubWpyLWNsdXN0ZXItY3JlYXRlLWJ0biB7CiAgICBmbGV4LXNocmluazogMDsKICAgIHBhZGRpbmc6IDNweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHRyYW5zcGFyZW50KTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnKTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGJhY2tncm91bmQgMTIwbXMgZWFzZSwKICAgICAgICBvcGFjaXR5IDEyMG1zIGVhc2U7Cn0KCi5tanItY2x1c3Rlci1jcmVhdGUtYnRuOmRpc2FibGVkIHsKICAgIG9wYWNpdHk6IDAuNjI7CiAgICBjdXJzb3I6IGRlZmF1bHQ7Cn0KCi5tanItY2x1c3Rlci1jcmVhdGUtYnRuOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDgwJSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDYyJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc2VhcmNoLWljb24gewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXNlYXJjaC1pY29uIC5waSB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXNlYXJjaC1waWxsIC5tanItaW5wdXQgewogICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50OwogICAgZm9udC1zaXplOiAxMnB4ICFpbXBvcnRhbnQ7CiAgICBsaW5lLWhlaWdodDogMS4yICFpbXBvcnRhbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zZWFyY2gtcGlsbDpmb2N1cy13aXRoaW4gewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNjUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAycHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDE4JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tYnJvd3NlIHsKICAgIG1hcmdpbi10b3A6IDA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1ncmlkLXNjcm9sbCB7CiAgICBwYWRkaW5nLXJpZ2h0OiA0cHg7CiAgICBzY3JvbGxiYXItZ3V0dGVyOiBzdGFibGU7Cn0KCi8qIEdyaWQgbGF5b3V0ICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAvKiBBdm9pZCBvdmVyZmxvdyB3aGVuIHRoZSBwYW5lbCBiZWNvbWVzIG5hcnJvd2VyIHRoYW4gdGhlIG1pbiBjYXJkIHNpemUgKi8KICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KAogICAgICAgIGF1dG8tZmlsbCwKICAgICAgICBtaW5tYXgobWluKDEwMCUsIHZhcigtLW1qci1ncmlkLW1pbi1zaXplLCAxODBweCkpLCAxZnIpCiAgICApOwogICAgZ2FwOiB2YXIoLS1tanItZ3JpZC1nYXAsIDEwcHgpOwogICAgbWFyZ2luLXRvcDogNnB4OwogICAgbWluLWhlaWdodDogMDsKfQoKLyogQ2FyZCBzZWxlY3Rpb24gKyBmb2N1cyAoa2VlcHMgYSB2aXNpYmxlIGluZGljYXRvciB3aGVuIHNpZGViYXIgaXMgb3BlbikgKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgewogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQuaXMtc2VsZWN0ZWQgewogICAgYm94LXNoYWRvdzoKICAgICAgICAwIDAgMCAzcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1jYXJkLXNlbGVjdGlvbi1jb2xvcikgODAlLCB2YXIoLS1jb250ZW50LWZnKSksCiAgICAgICAgMCAwIDAgNnB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItY2FyZC1zZWxlY3Rpb24tY29sb3IpIDMwJSwgdHJhbnNwYXJlbnQpLAogICAgICAgIDAgMCAyMHB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItY2FyZC1zZWxlY3Rpb24tY29sb3IpIDQwJSwgdHJhbnNwYXJlbnQpLAogICAgICAgIDAgMTBweCAyOHB4IHJnYmEoMCwgMCwgMCwgMC4yOCk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1sZyk7CiAgICAvKiBzY2FsZSgwLjk3KSBpbnN0ZWFkIG9mIDAuOTI6IHN1YnRsZSBpbnNldCBmZWVsIHdpdGhvdXQgdGhlIGFnZ3Jlc3NpdmUKICAgICAgIHNocmluayB0aGF0IGNhdXNlZCBhIHZpc2libGUgYmxpbmsgb24gcmFwaWQgc2VsZWN0aW9uIGNoYW5nZXMuICovCiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTcpICFpbXBvcnRhbnQ7CiAgICB6LWluZGV4OiAxMDsKICAgIG91dGxpbmU6IDJweCBzb2xpZCB2YXIoLS1tanItY2FyZC1zZWxlY3Rpb24tY29sb3IpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZDpmb2N1cy12aXNpYmxlIHsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgMCAwIDAgM3B4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA4MCUsIHZhcigtLWNvbnRlbnQtZmcpKSwKICAgICAgICAwIDAgMCA2cHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDMwJSwgdHJhbnNwYXJlbnQpLAogICAgICAgIDAgMCAyMHB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA0MCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAwIDEwcHggMjhweCByZ2JhKDAsIDAsIDAsIDAuMjgpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbGcpOwogICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk3KSAhaW1wb3J0YW50OwogICAgei1pbmRleDogMTA7Cn0KCkBrZXlmcmFtZXMgbWpyLWxpdmUtcGxhY2Vob2xkZXItc2hlZW4gewogICAgMCUgewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTglKTsKICAgICAgICBvcGFjaXR5OiAwLjE4OwogICAgfQogICAgNTAlIHsKICAgICAgICBvcGFjaXR5OiAwLjM0OwogICAgfQogICAgMTAwJSB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDU4JSk7CiAgICAgICAgb3BhY2l0eTogMC4xODsKICAgIH0KfQoKQGtleWZyYW1lcyBtanItbGl2ZS1wbGFjZWhvbGRlci1wdWxzZSB7CiAgICAwJSwKICAgIDEwMCUgewogICAgICAgIGJveC1zaGFkb3c6CiAgICAgICAgICAgIDAgMCAwIDFweCByZ2JhKDExOCwgMjE0LCAyNTUsIDAuMzQpLAogICAgICAgICAgICAwIDEwcHggMjRweCByZ2JhKDAsIDAsIDAsIDAuMjQpOwogICAgfQogICAgNTAlIHsKICAgICAgICBib3gtc2hhZG93OgogICAgICAgICAgICAwIDAgMCAxcHggcmdiYSgxMTgsIDIxNCwgMjU1LCAwLjUyKSwKICAgICAgICAgICAgMCAwIDAgNHB4IHJnYmEoMTE4LCAyMTQsIDI1NSwgMC4xMiksCiAgICAgICAgICAgIDAgMTJweCAzMHB4IHJnYmEoMCwgMCwgMCwgMC4yOCk7CiAgICB9Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWxpdmUtcGxhY2Vob2xkZXI9InRydWUiXSB7CiAgICBhbmltYXRpb246IG1qci1saXZlLXBsYWNlaG9sZGVyLXB1bHNlIDEuOXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWxpdmUtcGxhY2Vob2xkZXI9InRydWUiXSAubWpyLXRodW1iIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1saXZlLXBsYWNlaG9sZGVyLXdhc2ggewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IC04JTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgei1pbmRleDogMTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxMTVkZWcsCiAgICAgICAgcmdiYSg5OCwgMTk5LCAyNTUsIDApIDAlLAogICAgICAgIHJnYmEoOTgsIDE5OSwgMjU1LCAwLjA4KSAzMCUsCiAgICAgICAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI0KSA1MCUsCiAgICAgICAgcmdiYSg5OCwgMTk5LCAyNTUsIDAuMTIpIDcwJSwKICAgICAgICByZ2JhKDk4LCAxOTksIDI1NSwgMCkgMTAwJQogICAgKTsKICAgIGFuaW1hdGlvbjogbWpyLWxpdmUtcGxhY2Vob2xkZXItc2hlZW4gMi4ycyBsaW5lYXIgaW5maW5pdGU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1saXZlLXBpbGwgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiA2cHg7CiAgICByaWdodDogNnB4OwogICAgei1pbmRleDogMTI7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDZweDsKICAgIG1pbi1oZWlnaHQ6IDI0cHg7CiAgICBwYWRkaW5nOiAwIDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgxMCwgMTQsIDIwLCAwLjc4KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTE4LCAyMTQsIDI1NSwgMC4zNCk7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk2KTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMWVtOwogICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4yNCk7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbGl2ZS1waWxsLWRvdCB7CiAgICB3aWR0aDogN3B4OwogICAgaGVpZ2h0OiA3cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6ICM3NmQ2ZmY7CiAgICBib3gtc2hhZG93OiAwIDAgMCA0cHggcmdiYSgxMTgsIDIxNCwgMjU1LCAwLjE2KTsKICAgIGZsZXg6IDAgMCBhdXRvOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1saXZlLXBsYWNlaG9sZGVyPSJ0cnVlIl0gLm1qci1hc3NldC1zdGF0dXMtZG90IHsKICAgIGFuaW1hdGlvbjogbWpyLWxpdmUtcGxhY2Vob2xkZXItcHVsc2UgMS45cyBlYXNlLWluLW91dCBpbmZpbml0ZTsKfQoKLyogR3JpZCBsb2FkaW5nIG92ZXJsYXkgKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQtbG9hZGluZy1vdmVybGF5IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCAjMDAwIDM1JSwgdHJhbnNwYXJlbnQpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNmZmYpOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgbGV0dGVyLXNwYWNpbmc6IDAuM3B4OwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbGcpOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMnB4KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQtc2tlbGV0b24tbGF5b3V0IHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgxMzJweCwgMWZyKSk7CiAgICBnYXA6IDEycHg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkLXNrZWxldG9uLWNhcmQgewogICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yMik7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDE5MiwgMTk4LCAyMDYsIDAuMik7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgLyogbWluLWhlaWdodCByZW1vdmVkOiBWdWUgc2tlbGV0b25DYXJkU3R5bGUgc2V0cyBhbiBleHBsaWNpdCBoZWlnaHQgZGVyaXZlZAogICAgICAgZnJvbSBlc3RpbWF0ZVJvd0hlaWdodC4gQSBjb25mbGljdGluZyBtaW4taGVpZ2h0IGNhdXNlZCBza2VsZXRvbiBjYXJkcyB0bwogICAgICAgYmUgdGFsbGVyIHRoYW4gdGhlIGFjdHVhbCBjYXJkcyB0aGV5IHJlcGxhY2UsIGNhdXNpbmcgYSBsYXlvdXQganVtcCB3aGVuCiAgICAgICBhc3NldHMgZmlyc3QgbG9hZC4gKi8KICAgIGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjI0KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQtc2tlbGV0b24tdGh1bWIgewogICAgYXNwZWN0LXJhdGlvOiAxIC8gMTsKICAgIHdpZHRoOiAxMDAlOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDkwZGVnLAogICAgICAgIHJnYmEoMTU2LCAxNjIsIDE3MSwgMC41MikgMCUsCiAgICAgICAgcmdiYSgyMjAsIDIyNSwgMjMyLCAwLjcyKSA0NSUsCiAgICAgICAgcmdiYSgxNTYsIDE2MiwgMTcxLCAwLjUyKSAxMDAlCiAgICApOwogICAgYmFja2dyb3VuZC1zaXplOiAyNDAlIDEwMCU7CiAgICBhbmltYXRpb246IG1qci1ncmlkLXNrZWxldG9uLXNoaW1tZXIgMS4ycyBsaW5lYXIgaW5maW5pdGU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkLXNrZWxldG9uLWxpbmUgewogICAgaGVpZ2h0OiAxMHB4OwogICAgbWFyZ2luOiA4cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICA5MGRlZywKICAgICAgICByZ2JhKDE2NCwgMTcwLCAxNzksIDAuNDgpIDAlLAogICAgICAgIHJnYmEoMjE0LCAyMTksIDIyNiwgMC43KSA0NSUsCiAgICAgICAgcmdiYSgxNjQsIDE3MCwgMTc5LCAwLjQ4KSAxMDAlCiAgICApOwogICAgYmFja2dyb3VuZC1zaXplOiAyNDAlIDEwMCU7CiAgICBhbmltYXRpb246IG1qci1ncmlkLXNrZWxldG9uLXNoaW1tZXIgMS4ycyBsaW5lYXIgaW5maW5pdGU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkLXNrZWxldG9uLWxpbmUtLXRpdGxlIHsKICAgIHdpZHRoOiA3MiU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkLXNrZWxldG9uLWxpbmUtLW1ldGEgewogICAgd2lkdGg6IDQ4JTsKICAgIG1hcmdpbi10b3A6IDJweDsKICAgIG1hcmdpbi1ib3R0b206IDEwcHg7Cn0KCkBrZXlmcmFtZXMgbWpyLXNrZWxldG9uLXNoaW1tZXIgewogICAgMCUgewogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IDEyMCUgMDsKICAgIH0KICAgIDEwMCUgewogICAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xMjAlIDA7CiAgICB9Cn0KCkBrZXlmcmFtZXMgbWpyLWdyaWQtc2tlbGV0b24tc2hpbW1lciB7CiAgICAwJSB7CiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMTAwJSAwOwogICAgfQogICAgMTAwJSB7CiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEwMCUgMDsKICAgIH0KfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQtc2tlbGV0b24tc2hpbW1lciB7CiAgICB3aWxsLWNoYW5nZTogYmFja2dyb3VuZC1wb3NpdGlvbjsKfQoKLyogR2VuZXJpYyBoZWFkaW5ncyBpbnNpZGUgcGFuZWwgKi8KLm1qci1hc3NldHMtbWFuYWdlciBoMywKLm1qci1hc3NldHMtbWFuYWdlciBoNCB7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAxZW07Cn0KCi8qIFBhbmVscyAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItcGFuZWwgewogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLWxnKTsKICAgIGJveC1zaGFkb3c6IHZhcigtLWludGVyZmFjZS1wYW5lbC1ib3gtc2hhZG93LCAwIDhweCAyNHB4IHJnYmEoMCwgMCwgMCwgMC4yNSkpOwp9CgovKiBUb29sYmFyICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci10b29sYmFyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgcGFkZGluZzogdmFyKC0tbWpyLXBhZC1tZCk7Cn0KCi8qIEJ1dHRvbnMgKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWJ0biB7CiAgICBhcHBlYXJhbmNlOiBub25lOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0yKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLW1kKTsKICAgIHBhZGRpbmc6IDdweCAxMHB4OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIHRyYW5zaXRpb246CiAgICAgICAgYmFja2dyb3VuZCAxMjBtcyBlYXNlLAogICAgICAgIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIHRyYW5zZm9ybSA4MG1zIGVhc2U7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1idG46aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNzAlLCB2YXIoLS1tanItYWNjZW50KSAxMCUpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYnRuOmFjdGl2ZSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWJ0bjpkaXNhYmxlZCB7CiAgICBvcGFjaXR5OiAwLjU1OwogICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWJ0bi5tanItcHJpbWFyeSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA2MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAxNCUsIHZhcigtLW1qci1zdXJmYWNlLTIpKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWJ0biB7CiAgICAvKiBPdmVycmlkZSBpbmxpbmUgc3R5bGVzIGlmIHByZXNlbnQgKi8KICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMik7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1tZCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1idG46aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNzAlLCB2YXIoLS1tanItYWNjZW50KSAxMCUpOwp9CgovKiBJbnB1dHMgLyBzZWxlY3RzICh1c2VkIGluc2lkZSBwb3J0YWxlZCBwb3BvdmVycyB0b28pICovCi5tanItaW5wdXQsCi5tanItc2VsZWN0LAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaW5wdXQsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1zZWxlY3QgewogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktaW5wdXQtYmcsIHJnYmEoMCwgMCwgMCwgMC4yNSkpOwogICAgY29sb3I6IHZhcigtLWlucHV0LXRleHQsICNkZGQpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbWQpOwogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBvdXRsaW5lOiBub25lOwogICAgd2lkdGg6IDEwMCU7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pbnB1dDo6cGxhY2Vob2xkZXIgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItbXV0ZWQpIDgwJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWlucHV0OmZvY3VzLAoubWpyLXNlbGVjdDpmb2N1cywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWlucHV0OmZvY3VzLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItc2VsZWN0OmZvY3VzIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDY1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAyMCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1pbnB1dCwKLm1qci1zZWxlY3QsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pbnB1dCwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXNlbGVjdCB7CiAgICAvKiBPdmVycmlkZSBpbmxpbmUgc3R5bGVzIGlmIHByZXNlbnQgKi8KICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktaW5wdXQtYmcsIHJnYmEoMCwgMCwgMCwgMC4yNSkpOwogICAgY29sb3I6IHZhcigtLWlucHV0LXRleHQsICNkZGQpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbWQpOwogICAgcGFkZGluZzogOHB4IDEwcHg7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItc2VsZWN0IHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogOHB4OwogICAgbWluLWhlaWdodDogMzRweDsKICAgIHBhZGRpbmc6IDAgOXB4OwogICAgbGluZS1oZWlnaHQ6IDEuMjsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1zZWxlY3RbZGF0YS1wLWRpc2FibGVkPSJ0cnVlIl0gewogICAgb3BhY2l0eTogMC41NTsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1zZWxlY3QgW2RhdGEtcGMtc2VjdGlvbj0ibGFiZWwiXSB7CiAgICBmbGV4OiAxIDEgYXV0bzsKICAgIG1pbi13aWR0aDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItc2VsZWN0IFtkYXRhLXBjLXNlY3Rpb249ImRyb3Bkb3duIl0gewogICAgZmxleDogMCAwIGF1dG87CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIHdpZHRoOiAxOHB4OwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgdmFyKC0tZGVzY3JpcC10ZXh0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKSk7Cn0KCi5tanItZmlsdGVyLXNlbGVjdC1wYW5lbCB7CiAgICBtaW4td2lkdGg6IHZhcigtLXAtc2VsZWN0LW92ZXJsYXktd2lkdGgsIDEycmVtKTsKICAgIG1heC13aWR0aDogbWluKDMyMHB4LCBjYWxjKDEwMHZ3IC0gMzJweCkpOwogICAgbWF4LWhlaWdodDogbWluKDMyMHB4LCBjYWxjKDEwMHZoIC0gMzJweCkpOwogICAgb3ZlcmZsb3c6IGF1dG87CiAgICBwYWRkaW5nOiA0cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLW1kKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEsIHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKSk7CiAgICBib3gtc2hhZG93OiAwIDEycHggMjhweCByZ2JhKDAsIDAsIDAsIDAuMzgpOwogICAgei1pbmRleDogY2FsYyh2YXIoLS1tanItcG9wb3Zlci16LWluZGV4LCAyMTQ3NDgzNjQ3KSArIDEpOwp9CgoubWpyLWZpbHRlci1zZWxlY3QtcGFuZWwgW2RhdGEtcGMtc2VjdGlvbj0ibGlzdCJdIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAycHg7CiAgICBwYWRkaW5nOiAwOwogICAgbWFyZ2luOiAwOwogICAgbGlzdC1zdHlsZTogbm9uZTsKfQoKLm1qci1maWx0ZXItc2VsZWN0LXBhbmVsIFtkYXRhLXBjLXNlY3Rpb249Im9wdGlvbiJdIHsKICAgIG1pbi1oZWlnaHQ6IDI4cHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDZweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiBjYWxjKHZhcigtLW1qci1yLW1kKSAtIDJweCk7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsaW5lLWhlaWdodDogMS4yNTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKSk7Cn0KCi5tanItZmlsdGVyLXNlbGVjdC1wYW5lbCBbZGF0YS1wYy1zZWN0aW9uPSJvcHRpb24iXTpob3ZlciwKLm1qci1maWx0ZXItc2VsZWN0LXBhbmVsIFtkYXRhLXAtaGlnaGxpZ2h0PSJ0cnVlIl0gewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDE4JSwgdHJhbnNwYXJlbnQpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNmZmYpOwp9CgovKiBUYWJzOiBvdmVycmlkZGVuIGFib3ZlIHdpdGggcXVldWUtbGlrZSBzdHlsZSAqLwoKLyogUmVtb3ZlZCByZWR1bmRhbnQgdGFiIGRlY2xhcmF0aW9ucyB0aGF0IHdlcmUgdXNpbmcgIWltcG9ydGFudCAqLwoKLyogTXV0ZWQgdGV4dCBoZWxwZXIgKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW11dGVkIHsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQpOwp9CgovKiBHcmlkICsgY2FyZHMgKG92ZXJyaWRlIGlubGluZSBzdHlsZXMgZnJvbSBDYXJkLmpzKSAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyICNtanItYXNzZXRzLWdyaWQgewogICAgZ2FwOiAxMHB4ICFpbXBvcnRhbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xKSAhaW1wb3J0YW50OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcikgIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLWxnKSAhaW1wb3J0YW50OwogICAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50OwogICAgbWluLXdpZHRoOiAwOwogICAgdHJhbnNpdGlvbjoKICAgICAgICB0cmFuc2Zvcm0gMTIwbXMgZWFzZSwKICAgICAgICBib3JkZXItY29sb3IgMTIwbXMgZWFzZSwKICAgICAgICBib3gtc2hhZG93IDEyMG1zIGVhc2UgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQ6aG92ZXIsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoCiAgICAgICAgaW4gc3JnYiwKICAgICAgICB2YXIoLS1tanItY2FyZC1zZWxlY3Rpb24tY29sb3IpIDU1JSwKICAgICAgICB2YXIoLS1tanItYm9yZGVyKQogICAgKSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tbWpyLWNhcmQtaG92ZXItY29sb3IpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiAwIDhweCAyMnB4IHJnYmEoMCwgMCwgMCwgMC4yNSkgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgaW1nLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCB2aWRlbywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRodW1iLW1lZGlhIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50OwogICAgb2JqZWN0LWZpdDogY292ZXIgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRodW1iIHsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgd2lkdGg6IDEwMCU7CiAgICBhc3BlY3QtcmF0aW86IDEgLyAxOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDgwJSwgdHJhbnNwYXJlbnQpOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWF1ZGlvLXRodW1iLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXVkaW8tdGh1bWIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogMTBweDsKICAgIHBhZGRpbmc6IDE0cHggMTJweCAxMnB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NCk7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAxOCUgMjAlLCByZ2JhKDc4LCAxODQsIDI1NSwgMC4zMiksIHRyYW5zcGFyZW50IDM4JSksCiAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4OCUgNzIlLCByZ2JhKDgyLCAyMjAsIDE1NiwgMC4yNCksIHRyYW5zcGFyZW50IDQyJSksCiAgICAgICAgbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgxOCwgMjYsIDM2LCAwLjk4KSwgcmdiYSg4LCAxMiwgMTgsIDAuOTgpKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWF1ZGlvLXRodW1iLmhhcy1wb3N0ZXIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hdWRpby10aHVtYi5oYXMtcG9zdGVyIHsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSg0LCA2LCAxMCwgMC4yOCksIHJnYmEoNCwgNiwgMTAsIDAuODYpKSwKICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDUwJSA0MiUsIHJnYmEoNzgsIDE4NCwgMjU1LCAwLjIpLCB0cmFuc3BhcmVudCA1NCUpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBzYXR1cmF0ZSgxLjEpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IHNhdHVyYXRlKDEuMSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hdWRpby10aHVtYi1oZWFkLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXVkaW8tdGh1bWItaGVhZCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogOHB4OwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXVkaW8tdGh1bWItaWNvbiwKLm1qci1ib3R0b20tZmVlZCAubWpyLWF1ZGlvLXRodW1iLWljb24gewogICAgd2lkdGg6IDI4cHg7CiAgICBoZWlnaHQ6IDI4cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xOCk7CiAgICBib3gtc2hhZG93OiAwIDhweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4yMik7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hdWRpby10aHVtYi1raW5kLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXVkaW8tdGh1bWIta2luZCB7CiAgICBtYXgtd2lkdGg6IDYycHg7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgcGFkZGluZzogM3B4IDdweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjI4KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMyk7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogODAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hdWRpby10aHVtYi13YXZlZm9ybSwKLm1qci1ib3R0b20tZmVlZCAubWpyLWF1ZGlvLXRodW1iLXdhdmVmb3JtIHsKICAgIGZsZXg6IDE7CiAgICBtaW4taGVpZ2h0OiA0MnB4OwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogY2xhbXAoMnB4LCAyLjIlLCA1cHgpOwogICAgcGFkZGluZzogNHB4IDA7CiAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgNHB4IDE0cHggcmdiYSgwLCAwLCAwLCAwLjM0KSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hdWRpby10aHVtYi13YXZlZm9ybSBzcGFuLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXVkaW8tdGh1bWItd2F2ZWZvcm0gc3BhbiB7CiAgICB3aWR0aDogM3B4OwogICAgbWluLXdpZHRoOiAycHg7CiAgICBtYXgtd2lkdGg6IDVweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk4KSwgcmdiYSgxNjAsIDIyNCwgMjU1LCAwLjcyKSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hdWRpby10aHVtYi1tZXRhLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXVkaW8tdGh1bWItbWV0YSB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMnB4OwogICAgdGV4dC1zaGFkb3c6IDAgMnB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjYyKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWF1ZGlvLXRodW1iLXRpdGxlLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXVkaW8tdGh1bWItdGl0bGUgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtd2VpZ2h0OiA4MDA7CiAgICBsaW5lLWhlaWdodDogMS4yOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXVkaW8tdGh1bWItc3VidGl0bGUsCi5tanItYm90dG9tLWZlZWQgLm1qci1hdWRpby10aHVtYi1zdWJ0aXRsZSB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA2NTA7CiAgICBsaW5lLWhlaWdodDogMS4yOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXdvcmtmbG93LXRodW1iLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLXdvcmtmbG93LXRodW1iIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDdweDsKICAgIHBhZGRpbmc6IDE0cHggMTJweDsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSg0NywgNTgsIDc2LCAwLjk0KSwgcmdiYSgxOCwgMjMsIDMyLCAwLjk4KSksCiAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAzMCUgMjUlLCByZ2JhKDc4LCAxODQsIDI1NSwgMC4yMiksIHRyYW5zcGFyZW50IDQyJSk7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgdGV4dC1zaGFkb3c6IDAgMXB4IDhweCByZ2JhKDAsIDAsIDAsIDAuNzIpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXRodW1iLm1qci10aHVtYi13b3JrZmxvdywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQgLm1qci10aHVtYi5tanItdGh1bWItd29ya2Zsb3cgewogICAgYXNwZWN0LXJhdGlvOiAxLjA4IC8gMTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci13b3JrZmxvdy1jYXJkLWFjdGlvbnMsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItd29ya2Zsb3ctY2FyZC1hY3Rpb25zIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogN3B4OwogICAgcmlnaHQ6IDdweDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgZ2FwOiA0cHg7CiAgICB6LWluZGV4OiAxMjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci13b3JrZmxvdy1hY3Rpb24tYnRuLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLXdvcmtmbG93LWFjdGlvbi1idG4gewogICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIHdpZHRoOiAyNHB4OwogICAgaGVpZ2h0OiAyNHB4OwogICAgbWluLXdpZHRoOiAyNHB4OwogICAgbWluLWhlaWdodDogMjRweDsKICAgIHBhZGRpbmc6IDA7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzQpOwogICAgYm9yZGVyLXJhZGl1czogN3B4OwogICAgYmFja2dyb3VuZDogcmdiYSg4LCAxMiwgMTgsIDAuNTgpOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45Mik7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDNweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cigzcHgpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXdvcmtmbG93LWFjdGlvbi1idG46aG92ZXIsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItd29ya2Zsb3ctYWN0aW9uLWJ0bjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI5LCA0MCwgNTgsIDAuNzgpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXdvcmtmbG93LWFjdGlvbi1idG4uaXMtYWN0aXZlLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLXdvcmtmbG93LWFjdGlvbi1idG4uaXMtYWN0aXZlIHsKICAgIGNvbG9yOiAjZmZkNDVhOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjEyLCA5MCwgMC43KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci13b3JrZmxvdy10aHVtYiAucGksCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItd29ya2Zsb3ctdGh1bWIgLnBpIHsKICAgIGZvbnQtc2l6ZTogMS43NXJlbTsKICAgIG9wYWNpdHk6IDAuNzI7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIC5tanItd29ya2Zsb3ctdGh1bWIuaGFzLXRodW1ibmFpbCwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQgLm1qci13b3JrZmxvdy10aHVtYi5oYXMtdGh1bWJuYWlsIHsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHRyYW5zcGFyZW50IDI0JSwgcmdiYSgwLCAwLCAwLCAwLjI4KSA1OCUsIHJnYmEoMCwgMCwgMCwgMC43OCkpLAogICAgICAgIGxpbmVhci1ncmFkaWVudCg5MGRlZywgcmdiYSgwLCAwLCAwLCAwLjM0KSwgdHJhbnNwYXJlbnQgMzQlLCB0cmFuc3BhcmVudCA2NiUsIHJnYmEoMCwgMCwgMCwgMC4zNCkpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXRodW1iLW1lZGlhLm1qci13b3JrZmxvdy1ncmFwaC1tYXAtcHJldmlldywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQgLm1qci10aHVtYi1tZWRpYS5tanItd29ya2Zsb3ctZ3JhcGgtbWFwLXByZXZpZXcgewogICAgb2JqZWN0LWZpdDogY292ZXIgIWltcG9ydGFudDsKICAgIG9wYWNpdHk6IDAuNDY7CiAgICBmaWx0ZXI6IHNhdHVyYXRlKDAuNzUpIGNvbnRyYXN0KDAuODIpIGJyaWdodG5lc3MoMC43KTsKICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wNik7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIC5tanItd29ya2Zsb3ctdGh1bWIuaGFzLWdyYXBoLW1hcCwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQgLm1qci13b3JrZmxvdy10aHVtYi5oYXMtZ3JhcGgtbWFwIHsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDgsIDEwLCAxNCwgMC4zKSwgcmdiYSg4LCAxMCwgMTQsIDAuODIpKSwKICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDUwJSA0MiUsIHJnYmEoMCwgMCwgMCwgMC4xOCksIHJnYmEoMCwgMCwgMCwgMC42OCkgNzIlKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci13b3JrZmxvdy10aHVtYi5oYXMtZ3JhcGgtbWFwIC5tanItd29ya2Zsb3ctdGh1bWItdGl0bGUsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItd29ya2Zsb3ctdGh1bWIuaGFzLWdyYXBoLW1hcCAubWpyLXdvcmtmbG93LXRodW1iLXRpdGxlIHsKICAgIHBhZGRpbmc6IDJweCA3cHg7CiAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMzYpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXdvcmtmbG93LXRodW1iLmhhcy10aHVtYm5haWwgLnBpLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLXdvcmtmbG93LXRodW1iLmhhcy10aHVtYm5haWwgLnBpIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIC5tanItd29ya2Zsb3ctdGh1bWIuaGFzLWdyYXBoLW1hcCAucGksCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItd29ya2Zsb3ctdGh1bWIuaGFzLWdyYXBoLW1hcCAucGkgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBtYXJnaW4tYm90dG9tOiAycHg7CiAgICBmb250LXNpemU6IDEuMTVyZW07CiAgICBvcGFjaXR5OiAwLjU1Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXdvcmtmbG93LXRodW1iLXRpdGxlLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLXdvcmtmbG93LXRodW1iLXRpdGxlIHsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXNpemU6IDAuODRyZW07CiAgICBmb250LXdlaWdodDogODAwOwogICAgbGluZS1oZWlnaHQ6IDEuMTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci13b3JrZmxvdy10aHVtYi1tZXRhLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLXdvcmtmbG93LXRodW1iLW1ldGEgewogICAgZGlzcGxheTogZmxleDsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIGZsZXgtd3JhcDogd3JhcDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBmb250LXNpemU6IDAuNjhyZW07Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIC5tanItd29ya2Zsb3ctdGh1bWItbWV0YSBzcGFuLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLXdvcmtmbG93LXRodW1iLW1ldGEgc3BhbiwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci1tZXRhLXdvcmtmbG93LXRhc2ssCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItbWV0YS13b3JrZmxvdy10YXNrLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLW1ldGEtd29ya2Zsb3ctc3ViZ3JhcGhzLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLW1ldGEtd29ya2Zsb3ctc3ViZ3JhcGhzIHsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7CiAgICBwYWRkaW5nOiAycHggNXB4OwogICAgbWF4LXdpZHRoOiAxMDAlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci13b3JrZmxvdy10aHVtYi1tZXRhIHNwYW46bnRoLWNoaWxkKG4gKyA0KSwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQgLm1qci13b3JrZmxvdy10aHVtYi1tZXRhIHNwYW46bnRoLWNoaWxkKG4gKyA0KSB7CiAgICBkaXNwbGF5OiBub25lOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLWNhcmQtbWV0YVtkYXRhLW1qci1raW5kPSJ3b3JrZmxvdyJdLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLWNhcmQtbWV0YVtkYXRhLW1qci1raW5kPSJ3b3JrZmxvdyJdIHsKICAgIHBhZGRpbmc6IDdweCA5cHggIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci1jYXJkLW1ldGFbZGF0YS1tanIta2luZD0id29ya2Zsb3ciXSAubWpyLWNhcmQtZmlsZW5hbWUsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItY2FyZC1tZXRhW2RhdGEtbWpyLWtpbmQ9IndvcmtmbG93Il0gLm1qci1jYXJkLWZpbGVuYW1lIHsKICAgIG1hcmdpbi1ib3R0b206IDNweCAhaW1wb3J0YW50OwogICAgZm9udC1zaXplOiAwLjc4cmVtICFpbXBvcnRhbnQ7CiAgICBsaW5lLWhlaWdodDogMS4xNSAhaW1wb3J0YW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLWNhcmQtbWV0YVtkYXRhLW1qci1raW5kPSJ3b3JrZmxvdyJdIC5tanItY2FyZC1tZXRhLXJvdywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQgLm1qci1jYXJkLW1ldGFbZGF0YS1tanIta2luZD0id29ya2Zsb3ciXSAubWpyLWNhcmQtbWV0YS1yb3cgewogICAgZm9udC1zaXplOiAwLjcycmVtICFpbXBvcnRhbnQ7CiAgICBvcGFjaXR5OiAwLjc0ICFpbXBvcnRhbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIC5tanItY2FyZC1tZXRhW2RhdGEtbWpyLWtpbmQ9IndvcmtmbG93Il0gLm1qci1jYXJkLW1ldGEtcm93IC5tanItbWV0YS13b3JrZmxvdy10YXNrLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLWNhcmQtbWV0YVtkYXRhLW1qci1raW5kPSJ3b3JrZmxvdyJdIC5tanItY2FyZC1tZXRhLXJvdyAubWpyLW1ldGEtd29ya2Zsb3ctdGFzayB7CiAgICBkaXNwbGF5OiBub25lOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXdvcmtmbG93LW1pc3NpbmctY2hpcCwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQgLm1qci13b3JrZmxvdy1taXNzaW5nLWNoaXAsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIC5tanItbWV0YS13b3JrZmxvdy1taXNzaW5nLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLW1ldGEtd29ya2Zsb3ctbWlzc2luZyB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMTkwLCA2NiwgMC4yOCk7CiAgICBjb2xvcjogcmdiYSgyNTUsIDIzNiwgMTgwLCAwLjk4KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyMDYsIDEwMSwgMC40NSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkIC5tanItZ3JpZC1ncm91cC1zZXBhcmF0b3IgewogICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgd2lkdGg6IDEwMCU7CiAgICBtaW4taGVpZ2h0OiAzMHB4OwogICAgbWFyZ2luOiAwIDAgOHB4OwogICAgcGFkZGluZzogNXB4IDlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEodmFyKC0tbWpyLXdvcmtmbG93LWdyb3VwLWFjY2VudC1yZ2IsIDk1LCAxNzksIDI1NSksIDAuNDIpOwogICAgYm9yZGVyLXJhZGl1czogN3B4OwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAgIDEzNWRlZywKICAgICAgICAgICAgcmdiYSh2YXIoLS1tanItd29ya2Zsb3ctZ3JvdXAtYWNjZW50LXJnYiwgOTUsIDE3OSwgMjU1KSwgMC4yMiksCiAgICAgICAgICAgIHJnYmEodmFyKC0tbWpyLXdvcmtmbG93LWdyb3VwLWFjY2VudC1yZ2IsIDk1LCAxNzksIDI1NSksIDAuMDgpCiAgICAgICAgKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNzglLCB0cmFuc3BhcmVudCk7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcsICNmZmYpIDkyJSwgdHJhbnNwYXJlbnQpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZm9udDogaW5oZXJpdDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQgLm1qci1ncmlkLWdyb3VwLXNlcGFyYXRvcjpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IHJnYmEodmFyKC0tbWpyLXdvcmtmbG93LWdyb3VwLWFjY2VudC1yZ2IsIDk1LCAxNzksIDI1NSksIDAuNjYpOwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAgIDEzNWRlZywKICAgICAgICAgICAgcmdiYSh2YXIoLS1tanItd29ya2Zsb3ctZ3JvdXAtYWNjZW50LXJnYiwgOTUsIDE3OSwgMjU1KSwgMC4zKSwKICAgICAgICAgICAgcmdiYSh2YXIoLS1tanItd29ya2Zsb3ctZ3JvdXAtYWNjZW50LXJnYiwgOTUsIDE3OSwgMjU1KSwgMC4xMikKICAgICAgICApLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4NCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQgLm1qci1ncmlkLWdyb3VwLXNlcGFyYXRvcjpmb2N1cy12aXNpYmxlIHsKICAgIG91dGxpbmU6IDJweCBzb2xpZCByZ2JhKHZhcigtLW1qci13b3JrZmxvdy1ncm91cC1hY2NlbnQtcmdiLCA5NSwgMTc5LCAyNTUpLCAwLjU1KTsKICAgIG91dGxpbmUtb2Zmc2V0OiAycHg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkIC5tanItZ3JpZC1ncm91cC1zZXBhcmF0b3ItLWFjY2VudC0wIHsKICAgIC0tbWpyLXdvcmtmbG93LWdyb3VwLWFjY2VudC1yZ2I6IDk1LCAxNzksIDI1NTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQgLm1qci1ncmlkLWdyb3VwLXNlcGFyYXRvci0tYWNjZW50LTEgewogICAgLS1tanItd29ya2Zsb3ctZ3JvdXAtYWNjZW50LXJnYjogNTUsIDIxMSwgMTU2Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZ3JpZCAubWpyLWdyaWQtZ3JvdXAtc2VwYXJhdG9yLS1hY2NlbnQtMiB7CiAgICAtLW1qci13b3JrZmxvdy1ncm91cC1hY2NlbnQtcmdiOiAyNDYsIDE3NywgNzU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkIC5tanItZ3JpZC1ncm91cC1zZXBhcmF0b3ItLWFjY2VudC0zIHsKICAgIC0tbWpyLXdvcmtmbG93LWdyb3VwLWFjY2VudC1yZ2I6IDIzOCwgMTA0LCAxMzY7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkIC5tanItZ3JpZC1ncm91cC1zZXBhcmF0b3ItLWFjY2VudC00IHsKICAgIC0tbWpyLXdvcmtmbG93LWdyb3VwLWFjY2VudC1yZ2I6IDE1NywgMTMyLCAyMzg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkIC5tanItZ3JpZC1ncm91cC1zZXBhcmF0b3ItLWFjY2VudC01IHsKICAgIC0tbWpyLXdvcmtmbG93LWdyb3VwLWFjY2VudC1yZ2I6IDcxLCAxOTcsIDIyMjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQgLm1qci1ncmlkLWdyb3VwLXNlcGFyYXRvci0tYWNjZW50LTYgewogICAgLS1tanItd29ya2Zsb3ctZ3JvdXAtYWNjZW50LXJnYjogMTQ5LCAyMDcsIDgxOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZ3JpZCAubWpyLWdyaWQtZ3JvdXAtc2VwYXJhdG9yLS1hY2NlbnQtNyB7CiAgICAtLW1qci13b3JrZmxvdy1ncm91cC1hY2NlbnQtcmdiOiAyNDIsIDEzMCwgNzg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkIC5tanItZ3JpZC1ncm91cC1zZXBhcmF0b3ItY2hldnJvbiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgd2lkdGg6IDE4cHg7CiAgICBoZWlnaHQ6IDE4cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGNvbG9yOiByZ2IodmFyKC0tbWpyLXdvcmtmbG93LWdyb3VwLWFjY2VudC1yZ2IsIDk1LCAxNzksIDI1NSkpOwogICAgYmFja2dyb3VuZDogcmdiYSh2YXIoLS1tanItd29ya2Zsb3ctZ3JvdXAtYWNjZW50LXJnYiwgOTUsIDE3OSwgMjU1KSwgMC4xNCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkIC5tanItZ3JpZC1ncm91cC1zZXBhcmF0b3ItY2hldnJvbiA+IC5waSB7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQgLm1qci1ncmlkLWdyb3VwLXNlcGFyYXRvci10aXRsZSB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDgwMDsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItYmFja2Ryb3AgewogICAgcG9zaXRpb246IGZpeGVkOwogICAgaW5zZXQ6IDA7CiAgICB6LWluZGV4OiA5OTk5OTk7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgcGFkZGluZzogMjRweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC41OCk7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Owp9CgoubWpyLXdvcmtmbG93LXBpY2tlci1kaWFsb2cgewogICAgd2lkdGg6IG1pbig5MjBweCwgOTZ2dyk7CiAgICBtYXgtaGVpZ2h0OiBtaW4oNzYwcHgsIDkydmgpOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCwgIzExMTQxOCkgOTYlLCAjMDAwKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZjVmNWY1KTsKICAgIGJveC1zaGFkb3c6IDAgMThweCA2MHB4IHJnYmEoMCwgMCwgMCwgMC40OCk7Cn0KCi5tanItd29ya2Zsb3ctaW5mby1kaWFsb2cgewogICAgd2lkdGg6IG1pbig1NjBweCwgOTZ2dyk7Cn0KCi5tanItd29ya2Zsb3ctaW5mby1mb3JtIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCBtaW5tYXgoMCwgMWZyKSk7CiAgICBnYXA6IDEycHg7CiAgICBwYWRkaW5nOiAxNHB4IDE4cHggNHB4Owp9CgoubWpyLXdvcmtmbG93LWluZm8tZm9ybSBsYWJlbCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogNnB4OwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXdvcmtmbG93LWluZm8tZm9ybSBsYWJlbC5pcy13aWRlIHsKICAgIGdyaWQtY29sdW1uOiAxIC8gLTE7Cn0KCi5tanItd29ya2Zsb3ctaW5mby1mb3JtIHNwYW4gewogICAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC42NCk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNzUwOwogICAgbGV0dGVyLXNwYWNpbmc6IC4wNGVtOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKfQoKLm1qci13b3JrZmxvdy1pbmZvLWZvcm0gaW5wdXQsCi5tanItd29ya2Zsb3ctaW5mby1mb3JtIHNlbGVjdCwKLm1qci13b3JrZmxvdy1pbmZvLWZvcm0gdGV4dGFyZWEgewogICAgd2lkdGg6IDEwMCU7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpOwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjI2KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuOTIpOwogICAgZm9udDogaW5oZXJpdDsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIHBhZGRpbmc6IDlweCAxMHB4OwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci13b3JrZmxvdy1pbmZvLWZvcm0gdGV4dGFyZWEgewogICAgcmVzaXplOiB2ZXJ0aWNhbDsKICAgIG1pbi1oZWlnaHQ6IDk2cHg7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWhlYWRlciwKLm1qci13b3JrZmxvdy1waWNrZXItZm9vdGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZ2FwOiAxMnB4OwogICAgcGFkZGluZzogMTJweCAxNHB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItZm9vdGVyIHsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgYm9yZGVyLWJvdHRvbTogMDsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItdGl0bGUgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA5cHg7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmb250LXNpemU6IDE1cHg7CiAgICBmb250LXdlaWdodDogODAwOwp9CgoubWpyLXdvcmtmbG93LXBpY2tlci1pY29uLWJ0biwKLm1qci13b3JrZmxvdy1waWNrZXItYnRuIHsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpOwogICAgYm9yZGVyLXJhZGl1czogN3B4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIsICMyNTI4MmQpIDg4JSwgdHJhbnNwYXJlbnQpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNmNWY1ZjUpOwogICAgY3Vyc29yOiBwb2ludGVyOwp9CgoubWpyLXdvcmtmbG93LXBpY2tlci1pY29uLWJ0biB7CiAgICB3aWR0aDogMzJweDsKICAgIGhlaWdodDogMzJweDsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItYnRuIHsKICAgIG1pbi1oZWlnaHQ6IDMycHg7CiAgICBwYWRkaW5nOiAwIDEycHg7CiAgICBmb250LXdlaWdodDogNzAwOwp9CgoubWpyLXdvcmtmbG93LXBpY2tlci1idG4uaXMtcHJpbWFyeSB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoNzcsIDE3MSwgMjQ3LCAwLjcpOwogICAgYmFja2dyb3VuZDogcmdiYSg3NywgMTcxLCAyNDcsIDAuMjIpOwp9CgoubWpyLXdvcmtmbG93LXBpY2tlci1idG46ZGlzYWJsZWQgewogICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgIG9wYWNpdHk6IDAuNDU7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLXNvdXJjZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nOiA4cHggMTRweDsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsICNhZWIzYmQpOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLXNvdXJjZSBzdHJvbmcgewogICAgbWluLXdpZHRoOiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZjVmNWY1KTsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItdG9vbGJhciB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMTgwcHgsIDFmcikgcmVwZWF0KDMsIG1pbm1heCgxMTBweCwgMTUwcHgpKTsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZzogMTJweCAxNHB4Owp9CgoubWpyLXdvcmtmbG93LXBpY2tlci1kaWFsb2cuaXMtYXNzZXQtbW9kZSAubWpyLXdvcmtmbG93LXBpY2tlci10b29sYmFyIHsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDE4MHB4LCAxZnIpOwp9CgoubWpyLXdvcmtmbG93LXBpY2tlci1zZWFyY2gsCi5tanItd29ya2Zsb3ctcGlja2VyLXRvb2xiYXIgc2VsZWN0IHsKICAgIG1pbi1oZWlnaHQ6IDM0cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpOwogICAgYm9yZGVyLXJhZGl1czogN3B4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEsICMxNzFhMWYpIDkyJSwgIzAwMCk7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2Y1ZjVmNSk7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLXNlYXJjaCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZzogMCAxMHB4Owp9CgoubWpyLXdvcmtmbG93LXBpY2tlci1zZWFyY2ggaW5wdXQgewogICAgd2lkdGg6IDEwMCU7CiAgICBtaW4td2lkdGg6IDA7CiAgICBib3JkZXI6IDA7CiAgICBvdXRsaW5lOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjb2xvcjogaW5oZXJpdDsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItdG9vbGJhciBzZWxlY3QgewogICAgcGFkZGluZzogMCA4cHg7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWJvZHkgewogICAgZmxleDogMSAxIGF1dG87CiAgICBtaW4taGVpZ2h0OiAyNjBweDsKICAgIG92ZXJmbG93OiBhdXRvOwogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDE4MHB4LCAxZnIpKTsKICAgIGFsaWduLWNvbnRlbnQ6IHN0YXJ0OwogICAgZ2FwOiAxMHB4OwogICAgcGFkZGluZzogMCAxNHB4IDE0cHg7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWNhcmQgewogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDY4cHggbWlubWF4KDAsIDFmcik7CiAgICBnYXA6IDEwcHg7CiAgICBtaW4taGVpZ2h0OiA4NHB4OwogICAgcGFkZGluZzogOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xLCAjMTcxYTFmKSA5MiUsIHRyYW5zcGFyZW50KTsKICAgIGNvbG9yOiBpbmhlcml0OwogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIGN1cnNvcjogcG9pbnRlcjsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItZGlhbG9nLmlzLWFzc2V0LW1vZGUgLm1qci13b3JrZmxvdy1waWNrZXItY2FyZCB7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDc2cHggbWlubWF4KDAsIDFmcik7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWNhcmQ6aG92ZXIsCi5tanItd29ya2Zsb3ctcGlja2VyLWNhcmQuaXMtc2VsZWN0ZWQgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDc3LCAxNzEsIDI0NywgMC43Mik7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDc3LCAxNzEsIDI0NywgMC4xMik7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLXRodW1iIHsKICAgIHdpZHRoOiA2OHB4OwogICAgYXNwZWN0LXJhdGlvOiAxIC8gMTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItdGh1bWIgaW1nIHsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgb2JqZWN0LWZpdDogY292ZXI7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWNhcmQtaW5mbyB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA0cHg7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWNhcmQtaW5mbyBzdHJvbmcsCi5tanItd29ya2Zsb3ctcGlja2VyLWNhcmQtaW5mbyBzcGFuLAoubWpyLXdvcmtmbG93LXBpY2tlci1jYXJkLWluZm8gc21hbGwgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItY2FyZC1pbmZvIHN0cm9uZyB7CiAgICBmb250LXNpemU6IDEzcHg7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWNhcmQtaW5mbyBzcGFuLAoubWpyLXdvcmtmbG93LXBpY2tlci1jYXJkLWluZm8gc21hbGwgewogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgI2FlYjNiZCk7CiAgICBmb250LXNpemU6IDExcHg7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWVtcHR5IHsKICAgIGdyaWQtY29sdW1uOiAxIC8gLTE7CiAgICBwYWRkaW5nOiAzMnB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgI2FlYjNiZCk7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWVtcHR5LmlzLWVycm9yIHsKICAgIGNvbG9yOiAjZmZiNGI0Owp9CgpAbWVkaWEgKG1heC13aWR0aDogNzIwcHgpIHsKICAgIC5tanItd29ya2Zsb3ctcGlja2VyLWJhY2tkcm9wIHsKICAgICAgICBwYWRkaW5nOiAxMHB4OwogICAgfQoKICAgIC5tanItd29ya2Zsb3ctcGlja2VyLXRvb2xiYXIgewogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsKICAgIH0KCiAgICAubWpyLXdvcmtmbG93LXBpY2tlci1zZWFyY2ggewogICAgICAgIGdyaWQtY29sdW1uOiAxIC8gLTE7CiAgICB9Cn0KCi8qIEtlZXAgZ2VuZXJhdGlvbi10aW1lIGJhZGdlIHBpbm5lZCB0byB0aGUgdGh1bWJuYWlsIGNvcm5lciBhY3Jvc3MgZ3JpZC9mZWVkIHZhcmlhbnRzLiAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGh1bWIgPiAubWpyLWdlbnRpbWUtYmFkZ2UsCi5tanItYm90dG9tLWZlZWQgLm1qci10aHVtYiA+IC5tanItZ2VudGltZS1iYWRnZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsKICAgIHJpZ2h0OiA2cHggIWltcG9ydGFudDsKICAgIGJvdHRvbTogNnB4ICFpbXBvcnRhbnQ7CiAgICBsZWZ0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICB0b3A6IGF1dG8gIWltcG9ydGFudDsKICAgIHotaW5kZXg6IDEwICFpbXBvcnRhbnQ7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBwYWRkaW5nOiAycHggNnB4ICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmFkaXVzOiA0cHggIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC41NSkgIWltcG9ydGFudDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikgIWltcG9ydGFudDsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA4MDAgIWltcG9ydGFudDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAxNWVtOwogICAgbGluZS1oZWlnaHQ6IDEuMTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgYm94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgIHRleHQtc2hhZG93OgogICAgICAgIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuOSksCiAgICAgICAgMCAwIDEwcHggY29sb3ItbWl4KGluIHNyZ2IsIGN1cnJlbnRDb2xvciAzNSUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigycHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoMnB4KTsKfQoKLyogS2VlcCByYXRpbmcvdGFncyBiYWRnZXMgYW5jaG9yZWQuIERvIG5vdCBmb3JjZSBkaXNwbGF5IGhlcmUgc28gZ3JpZCB2aXNpYmlsaXR5IHRvZ2dsZXMgc3RpbGwgY29udHJvbCBzaG93L2hpZGUuICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci10aHVtYiA+IC5tanItcmF0aW5nLWJhZGdlLAoubWpyLWJvdHRvbS1mZWVkIC5tanItdGh1bWIgPiAubWpyLXJhdGluZy1iYWRnZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsKICAgIHRvcDogNnB4ICFpbXBvcnRhbnQ7CiAgICByaWdodDogNnB4ICFpbXBvcnRhbnQ7CiAgICBsZWZ0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICBib3R0b206IGF1dG8gIWltcG9ydGFudDsKICAgIHotaW5kZXg6IDEwICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNTUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBsZXR0ZXItc3BhY2luZzogMXB4OwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjI1KTsKICAgIHRleHQtc2hhZG93OiAwIDJweCA2cHggcmdiYSgwLCAwLCAwLCAwLjYpOwogICAgYW5pbWF0aW9uOiBtanItZmFkZS1pbiAwLjJzIGVhc2Utb3V0Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGh1bWIgPiAubWpyLXRhZ3MtYmFkZ2UsCi5tanItYm90dG9tLWZlZWQgLm1qci10aHVtYiA+IC5tanItdGFncy1iYWRnZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDsKICAgIGxlZnQ6IDZweCAhaW1wb3J0YW50OwogICAgYm90dG9tOiA2cHggIWltcG9ydGFudDsKICAgIHJpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICB0b3A6IGF1dG8gIWltcG9ydGFudDsKICAgIHotaW5kZXg6IDEwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiAzcHggNnB4OwogICAgZm9udC1zaXplOiA5cHg7CiAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDU2cHgpOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpOwogICAgYm94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgIGFuaW1hdGlvbjogbWpyLWZhZGUtaW4gMC4ycyBlYXNlLW91dDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRodW1iLXBsYXkgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBkaXNwbGF5OiBncmlkOwogICAgcGxhY2UtaXRlbXM6IGNlbnRlcjsKICAgIGZvbnQtc2l6ZTogMjhweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CiAgICB0ZXh0LXNoYWRvdzogMCAwIDEwcHggcmdiYSgwLCAwLCAwLCAwLjcpOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDEyMG1zIGVhc2U7Cn0KCi8qIC0tLSBIb3ZlciBpbmZvIG92ZXJsYXkgKHBvc2l0aXZlIHByb21wdCArIGdlbiB0aW1lKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBTbGlkZXMgdXAgZnJvbSB0aGUgYm90dG9tIG9mIC5tanItdGh1bWIgb24gY2FyZCBob3Zlci4KICAgcG9pbnRlci1ldmVudHM6IG5vbmUgIC0+IG5ldmVyIGJsb2NrcyB2aWRlbyBtb3VzZWVudGVyIC8gcGxheS1vbi1ob3Zlci4KICAgei1pbmRleDogMiAgICAgICAgICAgLT4gc2l0cyBhYm92ZSB0aGUgdGh1bWJuYWlsIGltYWdlLCBiZWxvdyB0aGUgcGxheSBpY29uLgogICBDb250cm9sbGVkIGJ5IHRoZSAubWpyLXNob3ctaG92ZXItaW5mbyBjbGFzcyBvbiB0aGUgZ3JpZCBjb250YWluZXIsIHdoaWNoCiAgIGlzIHRvZ2dsZWQgdmlhIHRoZSAiU2hvdyBwcm9tcHQgb24gaG92ZXIiIHNldHRpbmcuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZC1ob3Zlci1pbmZvIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGJvdHRvbTogMDsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIHBhZGRpbmc6IDIycHggOHB4IDdweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHRyYW5zcGFyZW50IDAlLCByZ2JhKDAsIDAsIDAsIDAuNzgpIDEwMCUpOwogICAgY29sb3I6ICNmZmY7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBsaW5lLWhlaWdodDogMS40OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBvcGFjaXR5OiAwOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDVweCk7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIG9wYWNpdHkgMTUwbXMgZWFzZSwKICAgICAgICB0cmFuc2Zvcm0gMTUwbXMgZWFzZTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAzcHg7CiAgICB6LWluZGV4OiAyOwp9Ci8qIE9ubHkgcmV2ZWFsIG9uIGhvdmVyIHdoZW4gdGhlIHNldHRpbmcgaXMgZW5hYmxlZCAoY2xhc3Mgb24gZ3JpZCBjb250YWluZXIpICovCi5tanItZ3JpZC5tanItc2hvdy1ob3Zlci1pbmZvIC5tanItY2FyZDpob3ZlciAubWpyLWNhcmQtaG92ZXItaW5mbyB7CiAgICBvcGFjaXR5OiAxOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwp9Ci5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkLWhvdmVyLWluZm8gLm1qci1ob3Zlci1wcm9tcHQgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OwogICAgLXdlYmtpdC1saW5lLWNsYW1wOiAyOwogICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDsKICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7CiAgICBvcGFjaXR5OiAwLjk7CiAgICBmb250LXNpemU6IDkuNXB4Owp9Ci5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkLWhvdmVyLWluZm8gLm1qci1ob3Zlci1nZW50aW1lIHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjEwLCAxMjAsIDAuOTUpOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGZvbnQtc2l6ZTogOXB4OwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTsKfQpAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkgewogICAgLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQtaG92ZXItaW5mbyB7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwbXM7CiAgICAgICAgdHJhbnNmb3JtOiBub25lOwogICAgfQp9CgovKiAtLS0gQ2FyZCBkZXRhaWxzIHBhbmVsIHNob3cvaGlkZSB2aWEgZ3JpZCBjb250YWluZXIgY2xhc3MgLS0tLS0tLS0tLS0tLS0tLQogICAubWpyLXNob3ctZGV0YWlscyBpcyB0b2dnbGVkIGJ5IGFwcGx5R3JpZFNldHRpbmdzQ2xhc3NlcygpIHdoZW4gdGhlCiAgICJTaG93IG1ldGFkYXRhIHBhbmVsIiBzZXR0aW5nIGNoYW5nZXMuICBEZWZhdWx0ID0gT0ZGIOKGkiBwYW5lbCBoaWRkZW4uCiAgIEhpZGluZyBoZXJlIGtlZXBzIGFjdHVhbCByb3cgaGVpZ2h0ID0gZXN0aW1hdGVSb3dIZWlnaHQobWV0YUhlaWdodD0wKSwKICAgcHJldmVudGluZyB0aGUgdmlydHVhbGl6ZXIgZnJvbSByZXBvc2l0aW9uaW5nIGFsbCByb3dzIG9uIG1lYXN1cmUKICAgKHdoaWNoIHdhcyB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgInJlbG9hZCBpbXByZXNzaW9uIiBibGluaykuCiAgIE1hdGNoIHRoZSBib3R0b20tZmVlZCBwYXR0ZXJuIGF0IC5tanItYm90dG9tLWZlZWQgLm1qci1jYXJkLWluZm8uCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZ3JpZCAubWpyLWNhcmQtaW5mbyB7CiAgICBkaXNwbGF5OiBub25lOwp9Ci5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkLm1qci1zaG93LWRldGFpbHMgLm1qci1jYXJkLWluZm8gewogICAgZGlzcGxheTogYmxvY2s7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkLW1ldGEgewogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBmb250LXNpemU6IDExcHg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkLWZpbGVuYW1lIHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIG1pbi13aWR0aDogMDsKICAgIG1hcmdpbi1ib3R0b206IDJweDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQtZGV0YWlscyB7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICBvcGFjaXR5OiAwLjg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkLWZpbGVuYW1lLXRleHQgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG1pbi13aWR0aDogMDsKfQoKLyogUmF0aW5nICYgVGFncyBFZGl0b3JzICovCkBrZXlmcmFtZXMgZmFkZUluIHsKICAgIGZyb20gewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00cHgpOwogICAgfQogICAgdG8gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgfQp9Ci8qKgogKiBBcmNoaXZlZCBDU1MgU3R5bGVzIC0gUmF0aW5nIGFuZCBUYWdzCiAqIFRoZXNlIHN0eWxlcyB3ZXJlIHJlbW92ZWQgZnJvbSB0aGVtZS1jb21meS5jc3MKICovCgovKiBBbmltYXRpb25zICovCkBrZXlmcmFtZXMgc2xpZGVJblJpZ2h0IHsKICAgIGZyb20gewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgfQogICAgdG8gewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgfQp9CgovKiBQb3BvdmVycyAqLwoubWpyLXJhdGluZy1wb3BvdmVyLAoubWpyLXRhZ3MtcG9wb3ZlciB7CiAgICBhbmltYXRpb246IGZhZGVJbiAwLjJzIGVhc2U7Cn0KCi5tanItcmF0aW5nLXBvcG92ZXIsCi5tanItdGFncy1wb3BvdmVyIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZywgMC41cmVtKTsKICAgIGJveC1zaGFkb3c6IDAgMTJweCAyOHB4IHJnYmEoMCwgMCwgMCwgMC4zNSk7CiAgICBwYWRkaW5nOiA4cHg7Cn0KCi8qIFJhdGluZyBFZGl0b3IgKi8KLm1qci1yYXRpbmctZWRpdG9yIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNHB4OwogICAgcGFkZGluZzogMnB4Owp9CgoubWpyLXJhdGluZy1zdGFyIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBmb250LXNpemU6IDIwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBwYWRkaW5nOiA0cHggNnB4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2RkZCk7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIHRyYW5zZm9ybSAxMjBtcyBlYXNlLAogICAgICAgIGJhY2tncm91bmQtY29sb3IgMTIwbXMgZWFzZSwKICAgICAgICBib3JkZXItY29sb3IgMTIwbXMgZWFzZSwKICAgICAgICBjb2xvciAxMjBtcyBlYXNlOwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci1yYXRpbmctc3Rhcjpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpIDM1JSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbWZ5LW1lbnUtc2Vjb25kYXJ5LWJnLCAjMzMzKSA2NSUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1yYXRpbmctZWRpdG9yIC5tanItcmF0aW5nLXN0YXI6aG92ZXIgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjIpICFpbXBvcnRhbnQ7Cn0KCi5tanItcmF0aW5nLWVkaXRvciAubWpyLXJhdGluZy1zdGFyOmZvY3VzLXZpc2libGUgewogICAgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLWZvY3VzLW91dGxpbmUtY29sb3IsICM0ZGFiZjcpOwogICAgb3V0bGluZS1vZmZzZXQ6IDJweDsKICAgIGJvcmRlci1yYWRpdXM6IDJweDsKfQoKLm1qci1yYXRpbmctZWRpdG9yIC5tanItcmF0aW5nLXN0YXI6YWN0aXZlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NSkgIWltcG9ydGFudDsKfQoKLyogVGFncyBFZGl0b3IgKi8KLm1qci10YWdzLWVkaXRvciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZzogMTJweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEsIHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItc20pOwogICAgYm94LXNoYWRvdzogMCAxMnB4IDI4cHggcmdiYSgwLCAwLCAwLCAwLjQ1KTsKICAgIG1pbi13aWR0aDogMjUwcHg7CiAgICBtYXgtd2lkdGg6IG1pbigzNTBweCwgY2FsYygxMDB2dyAtIDIwcHgpKTsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0Owp9CgoubWpyLXRhZ3MtZWRpdG9yLmlzLWRpc2FibGVkIHsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgb3BhY2l0eTogMC43Owp9CgoubWpyLXRhZ3MtZGlzcGxheSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAgZ2FwOiA2cHg7CiAgICBtaW4taGVpZ2h0OiAzMnB4Owp9CgoubWpyLXRhZ3MtZW1wdHkgewogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCk7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7Cn0KCi5tanItdGFnLWNoaXAgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDI0JSwgdHJhbnNwYXJlbnQpOwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDQwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGNvbG9yOiB2YXIoLS1tanItdGFnLWNvbG9yKTsKICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7Cn0KCi5tanItdGFnLWNoaXAtcmVtb3ZlIHsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgYm9yZGVyOiAwOwogICAgYm9yZGVyLXJhZGl1czogMDsKICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICBjb2xvcjogaW5oZXJpdDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIG9wYWNpdHk6IDAuNzsKfQoKLm1qci10YWctY2hpcC1yZW1vdmU6ZGlzYWJsZWQgewogICAgY3Vyc29yOiBkZWZhdWx0Owp9CgoubWpyLXRhZ3MtaW5wdXQtd3JhcCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5tanItdGFnLWlucHV0IHsKICAgIHdpZHRoOiAxMDAlOwogICAgcGFkZGluZzogNnB4IDhweDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA3NSUsIHRyYW5zcGFyZW50KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcpOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci10YWctaW5wdXQ6Zm9jdXMgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDg4JSwgdHJhbnNwYXJlbnQpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHZhcigtLW1qci1hY2NlbnQpICFpbXBvcnRhbnQ7Cn0KCi5tanItdGFnLWNoaXA6aG92ZXIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDM0JSwgdHJhbnNwYXJlbnQpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItdGFnLWNvbG9yKSA2MCUsIHZhcigtLW1qci1ib3JkZXIpKSAhaW1wb3J0YW50Owp9CgoubWpyLXRhZ3MtZHJvcGRvd24gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAxMDAlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgbWFyZ2luLXRvcDogNHB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSwgdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSkpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBtYXgtaGVpZ2h0OiAxNTBweDsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICB6LWluZGV4OiAxMDAwOwp9CgoubWpyLXRhZ3MtZHJvcGRvd24gW2RhdGEtcGMtc2VjdGlvbj0ibGlzdCJdIHsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOiAwOwp9CgoubWpyLXRhZ3MtZHJvcGRvd24gW2RhdGEtcGMtc2VjdGlvbj0ib3B0aW9uIl0gewogICAgbGlzdC1zdHlsZTogbm9uZTsKfQoKLm1qci10YWctc3VnZ2VzdGlvbiB7CiAgICBwYWRkaW5nOiA2cHggOHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjb2xvcjogdmFyKC0tbWpyLXRhZy1jb2xvcik7CiAgICBmb250LXNpemU6IDEycHg7Cn0KCi5tanItdGFnLXN1Z2dlc3Rpb24uaXMtYWN0aXZlLAoubWpyLXRhZy1zdWdnZXN0aW9uOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItdGFnLWNvbG9yKSAyOCUsIHRyYW5zcGFyZW50KSAhaW1wb3J0YW50Owp9CgovKiBCYWRnZXMgSW50ZXJhY3RpdmUgKi8KLm1qci1yYXRpbmctYmFkZ2UsCi5tanItdGFncy1iYWRnZSB7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwp9CgoubWpyLXJhdGluZy1iYWRnZSB7CiAgICBjb2xvcjogdmFyKC0tbWpyLXJhdGluZy1jb2xvcikgIWltcG9ydGFudDsKfQoKLm1qci10YWdzLWJhZGdlIHsKICAgIGNvbG9yOiB2YXIoLS1tanItdGFnLWNvbG9yKSAhaW1wb3J0YW50Owp9CgoubWpyLXJhdGluZy1iYWRnZTpob3ZlciwKLm1qci10YWdzLWJhZGdlOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7CiAgICBib3gtc2hhZG93OiAwIDRweCA4cHggcmdiYSgwLCAwLCAwLCAwLjUpOwp9CgovKiBTY3JvbGxiYXIgZm9yIHRhZ3MgZHJvcGRvd24gKi8KLm1qci10YWdzLWRyb3Bkb3duOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICB3aWR0aDogNnB4Owp9CgoubWpyLXRhZ3MtZHJvcGRvd246Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA2NSUsIHRyYW5zcGFyZW50KTsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKfQoKLm1qci10YWdzLWRyb3Bkb3duOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXRhZy1jb2xvcikgNDglLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7Cn0KCi5tanItdGFncy1kcm9wZG93bjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDY1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgovKiBTaWRlYmFyIChjYW4gYmUgbGVmdCBvciByaWdodCkgKi8KLm1qci1zaWRlYmFyIHsKICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7Cn0KCi5tanItd29ya2Zsb3ctdHJlZS13cmFwIHsKICAgIG1hcmdpbjogMCAwIDEycHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODIlLCB0cmFuc3BhcmVudCk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1tZCwgOHB4KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA3MiUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci13b3JrZmxvdy10cmVlIHsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZWFlYWVhKTsKICAgIGZvbnQtc2l6ZTogMTJweDsKfQoKLm1qci13b3JrZmxvdy10cmVlLXNjcm9sbCB7CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIHBhZGRpbmc6IDJweCA0cHggNnB4Owp9CgoubWpyLXdvcmtmbG93LXRyZWUtbGlzdCB7CiAgICBsaXN0LXN0eWxlOiBub25lOwogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMDsKfQoKLm1qci13b3JrZmxvdy10cmVlLW5vZGUtY29udGVudCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgbWluLWhlaWdodDogMjhweDsKICAgIHBhZGRpbmc6IDRweCA2cHg7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1zbSwgNnB4KTsKfQoKLm1qci13b3JrZmxvdy10cmVlLW5vZGUtY29udGVudDpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTglLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItd29ya2Zsb3ctdHJlZS10b2dnbGUgewogICAgd2lkdGg6IDE0cHg7CiAgICBoZWlnaHQ6IDIwcHg7CiAgICBwYWRkaW5nOiAwOwogICAgYm9yZGVyOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjQpKTsKfQoKLm1qci13b3JrZmxvdy10cmVlLXRvZ2dsZVtkYXRhLXAtbGVhZj0idHJ1ZSJdIHsKICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKfQoKLm1qci13b3JrZmxvdy10cmVlLWljb24gewogICAgd2lkdGg6IDhweDsKICAgIGZsZXg6IDAgMCA4cHg7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDcwJSwgdmFyKC0tY29udGVudC1mZykpOwogICAgZm9udC1zaXplOiA3cHg7Cn0KCi5tanItd29ya2Zsb3ctdHJlZS1sYWJlbCB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmbGV4OiAxIDEgYXV0bzsKfQoKLm1qci13b3JrZmxvdy10cmVlLW5vZGUgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci13b3JrZmxvdy10cmVlLW5vZGUtbmFtZSB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoubWpyLXdvcmtmbG93LXRyZWUtbm9kZS10eXBlIHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLW11dGVkKSA3NSUsIHZhcigtLWNvbnRlbnQtZmcpKTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItc2lkZWJhci5pcy1vcGVuIHsKICAgIC8qIEJvcmRlciBpcyBzZXQgZHluYW1pY2FsbHkgYmFzZWQgb24gcG9zaXRpb24gKi8KfQoKLm1qci1zaWRlYmFyIC5tanItc2lkZWJhci1oZWFkZXIgewogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMiwgIzMzMyk7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7Cn0KCi5tanItc2lkZWJhciAubWpyLXNpZGViYXItY29udGVudCB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xLCAjMmEyYTJhKTsKfQoKLm1qci1zaWRlYmFyIC5tanItc2lkZWJhci1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhciB7CiAgICB3aWR0aDogOHB4Owp9CgoubWpyLXNpZGViYXIgLm1qci1zaWRlYmFyLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4zKTsKfQoKLm1qci1zaWRlYmFyIC5tanItc2lkZWJhci1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7Cn0KCi5tanItc2lkZWJhciAubWpyLXNpZGViYXItY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpOwp9CgovKiBDdXN0b20gUm9vdHMgUG9wb3ZlciBTdHlsaW5nICovCi5tanItY3VzdG9tLXBvcG92ZXIgewogICAgbWluLXdpZHRoOiAzMDBweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEsIHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHZhcigtLWJvcmRlci1jb2xvciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSkpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnLCAwLjVyZW0pOwogICAgYm94LXNoYWRvdzogMCAxMnB4IDI4cHggcmdiYSgwLCAwLCAwLCAwLjM1KTsKICAgIHotaW5kZXg6IHZhcigtLW1qci1wb3BvdmVyLXotaW5kZXgpOwogICAgcGFkZGluZzogMTJweDsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLXBvcG92ZXItcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgIGZsZXgtd3JhcDogd3JhcDsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLXBvcG92ZXItcm93Omxhc3QtY2hpbGQgewogICAgbWFyZ2luLWJvdHRvbTogMDsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLXBvcG92ZXItbGFiZWwgewogICAgd2lkdGg6IDYwcHg7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkLCB2YXIoLS1kZXNjcmlwLXRleHQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42NSkpKTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtd2VpZ2h0OiA1MDA7Cn0KCi5tanItY3VzdG9tLXBvcG92ZXIgLm1qci1zZWxlY3QgewogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLWJ0biB7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiAwOwogICAgbWFyZ2luLXJpZ2h0OiA1cHg7Cn0KCi5tanItY3VzdG9tLXBvcG92ZXIgLm1qci1idG46bGFzdC1jaGlsZCB7CiAgICBtYXJnaW4tcmlnaHQ6IDA7Cn0KCi5tanItY3VzdG9tLXBvcG92ZXIgLm1qci1idG4ubWpyLXByaW1hcnkgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDE4JSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNjAlLCB2YXIoLS1tanItYm9yZGVyKSk7Cn0KCi5tanItY3VzdG9tLXBvcG92ZXIgLm1qci1idG4ubWpyLXByaW1hcnk6aG92ZXIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDI1JSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgODAlLCB2YXIoLS1tanItYm9yZGVyKSk7Cn0KCi5tanItc2lkZWJhciAubWpyLXNpZGViYXItc2VjdGlvbiB7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwp9CgoubWpyLXNpZGViYXIgLm1qci1zaWRlYmFyLXNlY3Rpb246aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjMpICFpbXBvcnRhbnQ7Cn0KCi8qIElubGluZSBTaWRlYmFyICh3aWR0aC1iYXNlZCB0cmFuc2l0aW9ucyBsaWtlIGFyY2hpdmVkIHZlcnNpb24pICovCi5tanItaW5saW5lLXNpZGViYXIgewogICAgd2lkdGg6IDA7CiAgICBtaW4td2lkdGg6IDA7CiAgICBtYXgtd2lkdGg6IDQ4MHB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEsICMyYTJhMmEpOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICB0cmFuc2l0aW9uOgogICAgICAgIHdpZHRoIDAuM3MgZWFzZSwKICAgICAgICBtaW4td2lkdGggMC4zcyBlYXNlOwp9CgoubWpyLWlubGluZS1zaWRlYmFyLmlzLW9wZW4gewogICAgd2lkdGg6IDQwMHB4OwogICAgbWluLXdpZHRoOiAyNjBweDsKfQoKLyogU3BhY2UgYmV0d2VlbiBzaWRlYmFyIGFuZCBncmlkICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1icm93c2UgewogICAgZ2FwOiAwOwp9CgovKiBCb3JkZXIgYmFzZWQgb24gcG9zaXRpb24gKi8KLm1qci1pbmxpbmUtc2lkZWJhcltkYXRhLXBvc2l0aW9uPSJsZWZ0Il0gewogICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7Cn0KCi5tanItaW5saW5lLXNpZGViYXJbZGF0YS1wb3NpdGlvbj0icmlnaHQiXSB7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwp9CgovKiBTaWRlYmFyIHBsYWNlaG9sZGVyICovCi5tanItc2lkZWJhci1wbGFjZWhvbGRlciB7CiAgICBwYWRkaW5nOiAyMHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSk7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgovKiA9PT09PT09PT09IFZpZXdlciBDb21wb25lbnQgPT09PT09PT09PSAqLwoubWpyLXZpZXdlci1vdmVybGF5IHsKICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgIHRvcDogMDsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIGJvdHRvbTogMDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC45NSk7CiAgICAvKiBTaXQgYWJvdmUgTUZWICgxMDAwMCkgc28gdGhlIGZ1bGwgdmlld2VyIGFsd2F5cyBjb3ZlcnMgdGhlIGZsb2F0aW5nIHBhbmVsICovCiAgICB6LWluZGV4OiAxMDAwMTsKICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgZGlzcGxheTogbm9uZTsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47Cn0KLyogRmFkZS1pbjogYW5pbWF0aW9uIHJlLXRyaWdnZXJzIGVhY2ggdGltZSBKUyBzd2l0Y2hlcyBkaXNwbGF5IGJhY2sgdG8gZmxleCAqLwoubWpyLXZpZXdlci1vdmVybGF5W3N0eWxlKj0iZmxleCJdIHsKICAgIGFuaW1hdGlvbjogbWpyLWZhZGUtaW4gMC4xOHMgZWFzZS1vdXQ7Cn0KCkBrZXlmcmFtZXMgbWpyLWZhZGUtaW4gewogICAgZnJvbSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTk1KTsKICAgIH0KICAgIHRvIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICB9Cn0KCi5tanItdmlld2VyLWhlYWRlciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDEycHggMjBweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxNzBkZWcsIHJnYmEoMjQsIDI3LCAzMywgMC45NiksIHJnYmEoMTcsIDE5LCAyNSwgMC45NykpOwogICAgYm9yZGVyLWJvdHRvbTogMC44cHggc29saWQgcmdiYSgxOTYsIDIwMiwgMjEwLCAwLjIpOwogICAgY29sb3I6IHdoaXRlOwp9CgoubWpyLXZpZXdlci1maWxlbmFtZSB7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBmb250LXdlaWdodDogNTAwOwogICAgbWF4LXdpZHRoOiA0MDBweDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItdmlld2VyLW1vZGUtYnV0dG9ucyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiA2cHg7Cn0KCi5tanItdmlld2VyLW1vZGUtYnV0dG9ucyBidXR0b24gewogICAgcGFkZGluZzogNHB4IDEycHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIwNiwgMjExLCAyMTgsIDAuMSksIHJnYmEoMjA2LCAyMTEsIDIxOCwgMC4wMykpOwogICAgYm9yZGVyOiAwLjhweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMyk7CiAgICBjb2xvcjogcmdiYSgyMzAsIDIzMywgMjM4LCAwLjk1KTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIHRyYW5zaXRpb246IGFsbCAwLjE2czsKfQoKLm1qci12aWV3ZXItbW9kZS1idXR0b25zIGJ1dHRvbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIxMCwgMjE0LCAyMjAsIDAuMTQpLCByZ2JhKDIxMCwgMjE0LCAyMjAsIDAuMDYpKTsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMTQsIDIxOCwgMjI0LCAwLjQyKTsKfQoKLyogVmlld2VyIGNsb3NlIGJ1dHRvbiBwaW5uZWQgdG8gb3ZlcmxheSBjb3JuZXIgKi8KLm1qci12aWV3ZXItY2xvc2UsCi5tanItdmlld2VyLWZzIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgxOTYsIDIwMiwgMjEwLCAwLjI2KSAhaW1wb3J0YW50OwogICAgYm9yZGVyLXdpZHRoOiAwLjhweCAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIwNiwgMjExLCAyMTgsIDAuMDgpLCByZ2JhKDIwNiwgMjExLCAyMTgsIDAuMDIpKSwKICAgICAgICByZ2JhKDIwLCAyMywgMjksIDAuOTQpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItY2xvc2UgewogICAgY29sb3I6ICNmZmY0ZjQgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMDUsIDgyLCA4MiwgMC41KSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIwNSwgODIsIDgyLCAwLjMpLCByZ2JhKDIwNSwgODIsIDgyLCAwLjEyKSksCiAgICAgICAgcmdiYSg1OCwgMTgsIDE4LCAwLjk0KSAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyMTksIDIxOSwgMC4xNiksCiAgICAgICAgMCAwIDAgMXB4IHJnYmEoMjA1LCA4MiwgODIsIDAuMDgpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLWNsb3NlOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyMzUsIDExMCwgMTEwLCAwLjM4KSwgcmdiYSgyMzUsIDExMCwgMTEwLCAwLjE2KSksCiAgICAgICAgcmdiYSg3MCwgMTgsIDE4LCAwLjk3KSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIzNSwgMTM4LCAxMzgsIDAuNjQpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLWZzOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyMTAsIDIxNCwgMjIwLCAwLjE0KSwgcmdiYSgyMTAsIDIxNCwgMjIwLCAwLjA2KSksCiAgICAgICAgcmdiYSgyMywgMjYsIDMyLCAwLjk1KSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIxNCwgMjE4LCAyMjQsIDAuMzgpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLWNsb3NlIC5waSB7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLm1qci12aWV3ZXItY29udGVudCB7CiAgICBmbGV4OiAxOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Cn0KCi5tanItdmlld2VyLXNpbmdsZSwKLm1qci12aWV3ZXItYWIsCi5tanItdmlld2VyLXNpZGVieXNpZGUgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7Cn0KCi5tanItdmlld2VyLXNpbmdsZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwp9CgoubWpyLXZpZXdlci1zaW5nbGUgaW1nLAoubWpyLXZpZXdlci1zaW5nbGUgdmlkZW8gewogICAgbWF4LXdpZHRoOiAxMDAlOwogICAgbWF4LWhlaWdodDogMTAwJTsKICAgIG9iamVjdC1maXQ6IGNvbnRhaW47CiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yczsKfQoKLm1qci12aWV3ZXItYXVkaW8tc2hlbGwgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMTRweDsKICAgIHBhZGRpbmc6IDE4cHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgYmFja2dyb3VuZDoKICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDE4JSAyMiUsIHJnYmEoNzgsIDE4NCwgMjU1LCAwLjIpLCB0cmFuc3BhcmVudCAzMiUpLAogICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgODIlIDc0JSwgcmdiYSg4MiwgMjIwLCAxNTYsIDAuMTUpLCB0cmFuc3BhcmVudCAzNiUpLAogICAgICAgIGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHJnYmEoMTIsIDE4LCAyNiwgMC45OCksIHJnYmEoNCwgNywgMTEsIDAuOTkpKTsKfQoKLm1qci12aWV3ZXItYXVkaW8taGVhZGVyIHsKICAgIHdpZHRoOiBtaW4oMTA4MHB4LCA4OCUpOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogMTFweDsKICAgIG1pbi13aWR0aDogMDsKICAgIHBhZGRpbmc6IDAgOHB4Owp9CgoubWpyLXZpZXdlci1hdWRpby1pY29uIHsKICAgIHdpZHRoOiAzNHB4OwogICAgaGVpZ2h0OiAzNHB4OwogICAgZmxleDogMCAwIGF1dG87CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KTsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDIycHggcmdiYSgwLCAwLCAwLCAwLjI2KTsKfQoKLm1qci12aWV3ZXItYXVkaW8tdGl0bGUtd3JhcCB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMnB4Owp9CgoubWpyLXZpZXdlci1hdWRpby10aXRsZSB7CiAgICBtYXgtd2lkdGg6IG1pbig3NjBweCwgNzJ2dyk7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgZm9udC13ZWlnaHQ6IDgwMDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI1Owp9CgoubWpyLXZpZXdlci1hdWRpby1tZXRhIHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTgpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDgwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwOwp9CgoubWpyLXZpZXdlci1hdWRpby12aXogewogICAgd2lkdGg6IG1pbigxOTIwcHgsIDk2JSk7CiAgICBhc3BlY3QtcmF0aW86IDE2IC8gOTsKICAgIGhlaWdodDogYXV0bzsKICAgIG1heC1oZWlnaHQ6IG1pbigxMDgwcHgsIDY4dmgpOwogICAgbWluLWhlaWdodDogMjYwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDkpOwogICAgYm9yZGVyLXJhZGl1czogMTZweDsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAxKSksCiAgICAgICAgcmdiYSgyLCA1LCA5LCAwLjIyKTsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpLAogICAgICAgIDAgMThweCA3MHB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKfQoKLm1qci12aWV3ZXItYXVkaW8tc3JjIHsKICAgIHdpZHRoOiBtaW4oNjgwcHgsIDkwJSk7Cn0KCi5tanItdmlld2VyLWFiIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5tanItdmlld2VyLXNpZGVieXNpZGUgewogICAgZGlzcGxheTogbm9uZTsKICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICBnYXA6IDJweDsKfQoKLm1qci12aWV3ZXItc2lkZWJ5c2lkZSA+IGRpdiB7CiAgICBmbGV4OiAxOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7Cn0KCi5tanItdmlld2VyLXNpZGVieXNpZGUgaW1nLAoubWpyLXZpZXdlci1zaWRlYnlzaWRlIHZpZGVvIHsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIG1heC1oZWlnaHQ6IDEwMCU7CiAgICBvYmplY3QtZml0OiBjb250YWluOwp9CgoubWpyLXZpZXdlci1mb290ZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDEycHggMjBweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC44KTsKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICBjb2xvcjogd2hpdGU7CiAgICBnYXA6IDIwcHg7Cn0KCi5tanItdmlld2VyLWZvb3RlciBidXR0b24gewogICAgcGFkZGluZzogNnB4IDEycHg7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKTsKICAgIGNvbG9yOiB3aGl0ZTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOwp9CgoubWpyLXZpZXdlci1mb290ZXIgYnV0dG9uOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKfQoKLm1qci12aWV3ZXItbmF2IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxNHB4Owp9CgoubWpyLXZpZXdlci1uYXYtYnRuIHsKICAgIHdpZHRoOiA0MHB4ICFpbXBvcnRhbnQ7CiAgICBoZWlnaHQ6IDQwcHggIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHggIWltcG9ydGFudDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTk2LCAyMDIsIDIxMCwgMC40MikgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgxOTQsIDIwMCwgMjA4LCAwLjE4KSwgcmdiYSgxOTQsIDIwMCwgMjA4LCAwLjA3KSksCiAgICAgICAgcmdiYSgzNCwgMzgsIDQ0LCAwLjkyKSAhaW1wb3J0YW50OwogICAgY29sb3I6IHJnYmEoMjM0LCAyMzYsIDI0MCwgMC45NikgIWltcG9ydGFudDsKICAgIGZvbnQtc2l6ZTogMjBweCAhaW1wb3J0YW50OwogICAgZm9udC13ZWlnaHQ6IDcwMCAhaW1wb3J0YW50OwogICAgbGluZS1oZWlnaHQ6IDEgIWltcG9ydGFudDsKICAgIHRleHQtc2hhZG93OiBub25lOwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpOwogICAgdHJhbnNpdGlvbjoKICAgICAgICB0cmFuc2Zvcm0gMC4xNHMgZWFzZSwKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yIDAuMTRzIGVhc2UsCiAgICAgICAgYm9yZGVyLWNvbG9yIDAuMTRzIGVhc2UgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItbmF2LWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjE0LCAyMTgsIDIyNCwgMC41NikgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyMDcsIDIxMiwgMjE5LCAwLjIpLCByZ2JhKDIwNywgMjEyLCAyMTksIDAuMSkpLAogICAgICAgIHJnYmEoMzksIDQzLCA0OSwgMC45NCkgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwp9CgoubWpyLXZpZXdlci1uYXYtYnRuOmFjdGl2ZTpub3QoOmRpc2FibGVkKSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgc2NhbGUoMC45OCk7CiAgICBmaWx0ZXI6IG5vbmU7Cn0KCi5tanItdmlld2VyLW5hdi1idG46ZGlzYWJsZWQgewogICAgb3BhY2l0eTogMC4zNCAhaW1wb3J0YW50OwogICAgZmlsdGVyOiBncmF5c2NhbGUoMC4yNSk7CiAgICBib3gtc2hhZG93OiBub25lOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLWluZGV4IHsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIG1pbi13aWR0aDogNzRweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wNGVtOwogICAgY29sb3I6IHJnYmEoMjI2LCAyMjgsIDIzMywgMC45NCk7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDE5NywgMjAzLCAyMTEsIDAuMTUpLCByZ2JhKDE5NywgMjAzLCAyMTEsIDAuMDYpKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTk3LCAyMDMsIDIxMSwgMC4zNCk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIHBhZGRpbmc6IDVweCAxMXB4OwogICAgdGV4dC1zaGFkb3c6IG5vbmU7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xOCk7Cn0KCi5tanItdmlld2VyLXBsYXllcmJhciB7CiAgICBib3JkZXItcmFkaXVzOiAxOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxOTQsIDIwMCwgMjA4LCAwLjE2KTsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCB0b3AgbGVmdCwgcmdiYSg5MCwgMTUwLCAyNTUsIDAuMDgpLCB0cmFuc3BhcmVudCAzNiUpLAogICAgICAgIGxpbmVhci1ncmFkaWVudCgxNjBkZWcsIHJnYmEoMjAsIDI0LCAzMCwgMC45NCksIHJnYmEoMTIsIDE1LCAyMSwgMC45OCkpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSksCiAgICAgICAgMCAxNnB4IDM2cHggcmdiYSgwLCAwLCAwLCAwLjIyKTsKICAgIC8qIG92ZXJmbG93IG11c3Qgc3RheSB2aXNpYmxlIHNvIHRoZSBzZWVrIHJ1bGVyIHRpY2tzL2xhYmVscyAodG9wOi0xNnB4IC8gdG9wOi0zNHB4KQogICAgICAgdGhhdCBhcmUgYWJzb2x1dGVseSBwb3NpdGlvbmVkIGFib3ZlIHRoZSBzZWVrIGJhciBhcmUgbm90IGNsaXBwZWQuICovCiAgICBvdmVyZmxvdzogdmlzaWJsZTsKfQoKLm1qci12aWV3ZXItdG9vbHMgewogICAgYWxpZ24taXRlbXM6IHN0YXJ0OwogICAganVzdGlmeS1jb250ZW50OiBzdHJldGNoOwogICAgZ2FwOiA4cHg7Cn0KCi5tanItdmlld2VyLWhlYWRlciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5tanItdmlld2VyLWhlYWRlcjo6YWZ0ZXIgewogICAgY29udGVudDogIiI7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAxOHB4OwogICAgcmlnaHQ6IDE4cHg7CiAgICB0b3A6IDQ0cHg7CiAgICBoZWlnaHQ6IDFweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgdHJhbnNwYXJlbnQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCksIHRyYW5zcGFyZW50KTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgb3BhY2l0eTogMC43Owp9CgoubWpyLXZpZXdlci1oZWFkZXItbWV0YSB7CiAgICBtaW4taGVpZ2h0OiAzMHB4OwogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDM1KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7Cn0KCi5tanItdmlld2VyLWhlYWRlci10b3AgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHBhZGRpbmctcmlnaHQ6IDg0cHg7CiAgICBwYWRkaW5nLWxlZnQ6IDEycHg7Cn0KCi5tanItdmlld2VyLWhlYWRlci1hcmVhLS1sZWZ0IHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBmbGV4OiAxIDEgMDsKICAgIG1pbi13aWR0aDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5tanItdmlld2VyLWhlYWRlci1hcmVhLS1jZW50ZXIgewogICAgbWluLXdpZHRoOiAwOwogICAgZmxleDogMSAxIGF1dG87Cn0KCi5tanItdmlld2VyLWhlYWRlci1hcmVhLS1yaWdodCB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgZmxleDogMSAxIDA7CiAgICBtaW4td2lkdGg6IDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgoubWpyLXZpZXdlci10aXRsZS13cmFwIHsKICAgIHdpZHRoOiBhdXRvOwogICAgbWluLXdpZHRoOiAwOwogICAgbWF4LXdpZHRoOiBtaW4oMTAwJSwgY2FsYygxMDB2dyAtIDIyMHB4KSk7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiAxMnB4Owp9CgoubWpyLXZpZXdlci10aXRsZS1saW5lIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDZweDsKICAgIG1pbi13aWR0aDogMDsKICAgIGZsZXgtd3JhcDogbm93cmFwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm1qci12aWV3ZXItZmlsZW5hbWUgewogICAgZm9udC1zaXplOiAxM3B4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAxZW07CiAgICBkaXNwbGF5OiBibG9jazsKICAgIG1hcmdpbjogMCBhdXRvOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgoubWpyLXZpZXdlci1iYWRnZXMgewogICAgZ2FwOiA0cHg7Cn0KCi5tanItdmlld2VyLXRpdGxlLWxpbmUgLm1qci12aWV3ZXItYmFkZ2VzIHsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZmxleC13cmFwOiBub3dyYXA7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItdmlld2VyLWhlYWRlci1tZXRhLS1sZWZ0IHsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgIHdpZHRoOiBmaXQtY29udGVudDsKICAgIG1heC13aWR0aDogMTAwJTsKfQoKLm1qci12aWV3ZXItaGVhZGVyLW1ldGEtLWxlZnQ6ZW1wdHkgewogICAgZGlzcGxheTogbm9uZTsKfQoKLm1qci12aWV3ZXItaGVhZGVyLW1ldGEtLXJpZ2h0IHsKICAgIGp1c3RpZnktc2VsZjogZW5kOwogICAgd2lkdGg6IGZpdC1jb250ZW50OwogICAgbWF4LXdpZHRoOiAxMDAlOwp9CgoubWpyLXZpZXdlci1tb2RlLWJ1dHRvbnMgewogICAgZmxleDogMCAwIGF1dG87CiAgICBwYWRkaW5nOiAzcHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpOwp9CgoubWpyLXZpZXdlci10b29scy1kZWNrIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgIGdhcDogOHB4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIG1pbi13aWR0aDogMDsKICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47Cn0KCi5tanItdmlld2VyLXRvb2xzLXBhbmVsIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1pbi13aWR0aDogYXV0bzsKICAgIG1pbi1oZWlnaHQ6IDA7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAyKSksCiAgICAgICAgcmdiYSgxMCwgMTIsIDE2LCAwLjI0KTsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpLAogICAgICAgIDAgNnB4IDE2cHggcmdiYSgwLCAwLCAwLCAwLjEyKTsKICAgIHBhZGRpbmc6IDVweCA2cHg7CiAgICBmbGV4OiAwIDAgYXV0bzsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWw6OmJlZm9yZSB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwIDAgYXV0byAwOwogICAgaGVpZ2h0OiAxcHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHRyYW5zcGFyZW50LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpLCB0cmFuc3BhcmVudCk7CiAgICBvcGFjaXR5OiAwLjc7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtaGVhZCB7CiAgICBkaXNwbGF5OiBub25lOwp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbC1oZWFkaW5nIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAxcHg7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItdmlld2VyLXRvb2xzLXBhbmVsLWV5ZWJyb3cgewogICAgZm9udC1zaXplOiA5cHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMTRlbTsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQ2KTsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtdGl0bGUgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAxZW07CiAgICBjb2xvcjogcmdiYSgyNDgsIDI1MCwgMjUyLCAwLjk2KTsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtYm9keSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGZsZXgtd3JhcDogbm93cmFwOwogICAgZ2FwOiA2cHg7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItdmlld2VyLXRvb2xzLXBhbmVsW2RhdGEtcGFuZWw9ImdyYWRlIl0gLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtYm9keSB7CiAgICBkaXNwbGF5OiBmbGV4Owp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbFtkYXRhLXBhbmVsPSJvdmVybGF5Il0gLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtYm9keSB7CiAgICBkaXNwbGF5OiBmbGV4Owp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbFtkYXRhLXBhbmVsPSJpbnNwZWN0Il0gLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtYm9keSwKLm1qci12aWV3ZXItdG9vbHMtcGFuZWxbZGF0YS1wYW5lbD0iYWN0aW9ucyJdIC5tanItdmlld2VyLXRvb2xzLXBhbmVsLWJvZHksCi5tanItdmlld2VyLXRvb2xzLXBhbmVsW2RhdGEtcGFuZWw9ImluZm8iXSAubWpyLXZpZXdlci10b29scy1wYW5lbC1ib2R5IHsKICAgIGRpc3BsYXk6IGZsZXg7Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwIHsKICAgIHdpZHRoOiBhdXRvOwogICAgbWluLWhlaWdodDogMzBweDsKICAgIHBhZGRpbmc6IDVweCA3cHg7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICBnYXA6IDZweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTk2LCAyMDIsIDIxMCwgMC4xMik7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDM1KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAyKSksCiAgICAgICAgcmdiYSgxMCwgMTIsIDE2LCAwLjE4KTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzKTsKICAgIG1pbi13aWR0aDogZml0LWNvbnRlbnQ7Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwLWxhYmVsIHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzUpOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMTVweDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGZvbnQtc2l6ZTogMTBweDsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbc3R5bGUqPSItLW1qci1ncm91cC1hY2NlbnQiXSAubWpyLXZpZXdlci10b29scy1ncm91cC1sYWJlbCB7CiAgICBjb2xvcjogcmdiYSh2YXIoLS1tanItZ3JvdXAtYWNjZW50KSwgMC45KTsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbc3R5bGUqPSItLW1qci1ncm91cC1hY2NlbnQiXSB7CiAgICBib3JkZXItY29sb3I6IHJnYmEodmFyKC0tbWpyLWdyb3VwLWFjY2VudCksIDAuMzUpOwp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJjaGFubmVsIl0gLm1qci12aWV3ZXItdG9vbHMtZ3JvdXAtbGFiZWwsCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9ImFuYWx5c2lzIl0gLm1qci12aWV3ZXItdG9vbHMtZ3JvdXAtbGFiZWwsCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9Im92ZXJsYXktZ3VpZGVzIl0gLm1qci12aWV3ZXItdG9vbHMtZ3JvdXAtbGFiZWwsCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9Im92ZXJsYXktaW5zcGVjdCJdIC5tanItdmlld2VyLXRvb2xzLWdyb3VwLWxhYmVsIHsKICAgIG1pbi13aWR0aDogNDJweDsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWxbZGF0YS1wYW5lbD0ib3ZlcmxheSJdIC5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9Im92ZXJsYXktZ3VpZGVzIl0gewogICAgZmxleDogMCAwIGF1dG87Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9Im92ZXJsYXktZ3VpZGVzIl0sCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9Im92ZXJsYXktaW5zcGVjdCJdIHsKICAgIGZsZXgtd3JhcDogd3JhcDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9ImNoYW5uZWwiXSwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iZXhwb3N1cmUiXSwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iZ2FtbWEiXSwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iYW5hbHlzaXMiXSwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iY29tcGFyZSJdLAoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJhdWRpby12aXoiXSB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47Cn0KCi5tanItdmlld2VyLXRvb2xzLWFjdGlvbnMsCi5tanItdmlld2VyLXRvb2xzLW1ldGEgewogICAgd2lkdGg6IGF1dG87CiAgICBtaW4taGVpZ2h0OiAzMHB4OwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIHBhZGRpbmc6IDVweCA3cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMyk7Cn0KCi5tanItdmlld2VyLXRvb2xzLWFjdGlvbnMgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICBnYXA6IDZweDsKICAgIGZsZXgtd3JhcDogd3JhcDsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci12aWV3ZXItdG9vbHMtbWV0YSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogNnB4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXZpZXdlci10b29scy1hY3Rpb24tLXByaW1hcnkgewogICAgbWFyZ2luLWxlZnQ6IDA7Cn0KCi5tanItdmlld2VyLXRvb2xzLWFjdGlvbiArIC5tanItdmlld2VyLXRvb2xzLWFjdGlvbiB7CiAgICBtYXJnaW4tbGVmdDogNHB4Owp9CgoubWpyLXZpZXdlci10b29scy1zZWxlY3QgewogICAgbWluLWhlaWdodDogMjRweDsKfQoKLm1qci12aWV3ZXItdG9vbHMtcmFuZ2UtaW5wdXQgewogICAgd2lkdGg6IDkycHggIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtcmFuZ2Ugc3BhbiB7CiAgICBmb250LXNpemU6IDExcHg7Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiAxNDgwcHgpIHsKICAgIC5tanItdmlld2VyLXRvb2xzLWRlY2sgewogICAgICAgIGdhcDogNnB4OwogICAgfQp9CgpAbWVkaWEgKG1heC13aWR0aDogMTIyMHB4KSB7CiAgICAubWpyLXZpZXdlci1oZWFkZXItdG9wIHsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZy1yaWdodDogODRweDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7CiAgICB9CgogICAgLm1qci12aWV3ZXItaGVhZGVyLWFyZWEtLWNlbnRlciwKICAgIC5tanItdmlld2VyLWhlYWRlci1hcmVhLS1yaWdodCB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICB9CgogICAgLm1qci12aWV3ZXItaGVhZGVyLWFyZWEtLWNlbnRlciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZmxleDogMSAxIDEwMCU7CiAgICB9CgogICAgLm1qci12aWV3ZXItaGVhZGVyLWFyZWEtLXJpZ2h0IHsKICAgICAgICBwb3NpdGlvbjogc3RhdGljOwogICAgICAgIHRyYW5zZm9ybTogbm9uZTsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZmxleDogMSAxIDEwMCU7CiAgICB9CgogICAgLm1qci12aWV3ZXItaGVhZGVyLW1ldGEtLXJpZ2h0IHsKICAgICAgICBqdXN0aWZ5LXNlbGY6IGNlbnRlcjsKICAgIH0KCiAgICAubWpyLXZpZXdlci10b29scy1kZWNrIHsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgb3ZlcmZsb3cteDogdmlzaWJsZTsKICAgIH0KCiAgICAubWpyLXZpZXdlci10b29scy1wYW5lbCwKICAgIC5tanItdmlld2VyLXRvb2xzLWFjdGlvbnMsCiAgICAubWpyLXZpZXdlci10b29scy1tZXRhLAogICAgLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtYm9keSB7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgfQoKICAgIC5tanItdmlld2VyLXRvb2xzLW1ldGEgewogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgIH0KfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iY29tcGFyZSJdW2RhdGEtYWN0aXZlPSIxIl0gewogICAgYmFja2dyb3VuZDogcmdiYSh2YXIoLS1tanItZ3JvdXAtYWNjZW50KSwgMC4xKTsKICAgIGJvcmRlci1sZWZ0LWNvbG9yOiByZ2JhKHZhcigtLW1qci1ncm91cC1hY2NlbnQpLCAwLjYpOwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IHJnYmEodmFyKC0tbWpyLWdyb3VwLWFjY2VudCksIDAuMjIpOwp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJjb21wYXJlIl1bZGF0YS1hY3RpdmU9IjEiXSAubWpyLXZpZXdlci10b29scy1zZWxlY3QgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKHZhcigtLW1qci1ncm91cC1hY2NlbnQpLCAwLjYpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHJnYmEodmFyKC0tbWpyLWdyb3VwLWFjY2VudCksIDAuMTgpOwp9CgoubWpyLXZpZXdlci10b29scy1zZWxlY3Q6Zm9jdXMgewogICAgb3V0bGluZTogbm9uZTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCByZ2JhKDY0LCAxNjAsIDI1NSwgMC4yMik7Cn0KCi8qIE5hdGl2ZSBkcm9wZG93bnM6IGhpbnQgZGFyayBVSSBhbmQgc3R5bGUgb3B0aW9ucyB3aGVuIHRoZSBicm93c2VyIGFsbG93cyBpdC4gKi8KLm1qci12aWV3ZXItaGVhZGVyIHsKICAgIGNvbG9yLXNjaGVtZTogZGFyazsKfQoKLm1qci12aWV3ZXItdG9vbHMtc2VsZWN0IHsKICAgIG1pbi1oZWlnaHQ6IDI0cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNDYpICFpbXBvcnRhbnQ7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkyKSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmFkaXVzOiA4cHggIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtc2VsZWN0IG9wdGlvbiB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1tZW51LWJnLCAjMmEyYTJhKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKSk7Cn0KCi5tanItdmlld2VyLXRvb2xzLXJhbmdlLWlucHV0OmZvY3VzIHsKICAgIG91dGxpbmU6IG5vbmU7Cn0KCi5tanItdmlld2VyLXRvb2wtYnRuLS1yZXNldCB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yMikgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbC1idG4gewogICAgbWluLWhlaWdodDogMjRweCAhaW1wb3J0YW50OwogICAgYm9yZGVyLXJhZGl1czogOHB4ICFpbXBvcnRhbnQ7CiAgICBib3JkZXItd2lkdGg6IDFweCAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDE4MGRlZywKICAgICAgICByZ2JhKDIxMCwgMjE0LCAyMjAsIDAuMDc1KSwKICAgICAgICByZ2JhKDIxMCwgMjE0LCAyMjAsIDAuMDI1KQogICAgKSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMTYpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7CiAgICBmb250LXNpemU6IDExcHggIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDAgOHB4ICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLXRvb2wtYnRuOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMjAsIDIyNCwgMjMwLCAwLjI0KSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDE4MGRlZywKICAgICAgICByZ2JhKDIyMCwgMjI0LCAyMzAsIDAuMSksCiAgICAgICAgcmdiYSgyMjAsIDIyNCwgMjMwLCAwLjAzNSkKICAgICkgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iYW5hbHlzaXMiXSAubWpyLXZpZXdlci10b29sLWJ0bltkYXRhLWFjdGl2ZT0iMSJdIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgcmdiYSgyNTUsIDE2NiwgOTIsIDAuMjIpLAogICAgICAgIHJnYmEoMjU1LCAxMTYsIDY0LCAwLjA4KQogICAgKSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMTYwLCA5MiwgMC4zNCkgIWltcG9ydGFudDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjM2LCAyMjQsIDAuOTYpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9ImFuYWx5c2lzIl0gLm1qci12aWV3ZXItdG9vbC1idG5bZGF0YS1hY3RpdmU9IjEiXTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIHJnYmEoMjU1LCAxODAsIDEwOCwgMC4yOCksCiAgICAgICAgcmdiYSgyNTUsIDEyOCwgNzIsIDAuMTQpCiAgICApICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAxODQsIDExNiwgMC40NikgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1ndWlkZXMiXSAubWpyLXZpZXdlci10b29sLWJ0bltkYXRhLWFjdGl2ZT0iMSJdIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgcmdiYSg5MiwgMjE5LCAxODYsIDAuMjIpLAogICAgICAgIHJnYmEoNDQsIDE3MCwgMTQ0LCAwLjA4KQogICAgKSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDkyLCAyMTksIDE4NiwgMC4zNCkgIWltcG9ydGFudDsKICAgIGNvbG9yOiByZ2JhKDIyNCwgMjU1LCAyNDgsIDAuOTYpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9Im92ZXJsYXktZ3VpZGVzIl0gLm1qci12aWV3ZXItdG9vbC1idG5bZGF0YS1hY3RpdmU9IjEiXTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIHJnYmEoMTAyLCAyMzAsIDE5NiwgMC4yOCksCiAgICAgICAgcmdiYSg1MiwgMTgyLCAxNTYsIDAuMTQpCiAgICApICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMTEwLCAyMzYsIDIwMiwgMC40NikgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1pbnNwZWN0Il0gLm1qci12aWV3ZXItdG9vbC1idG5bZGF0YS1hY3RpdmU9IjEiXSB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIHJnYmEoMTI0LCAxNjYsIDI1NSwgMC4yMiksCiAgICAgICAgcmdiYSgxMDksIDg4LCAyMjIsIDAuMDgpCiAgICApICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMTMyLCAxNzAsIDI1NSwgMC4zNikgIWltcG9ydGFudDsKICAgIGNvbG9yOiByZ2JhKDIzNiwgMjQyLCAyNTUsIDAuOTcpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9Im92ZXJsYXktaW5zcGVjdCJdIC5tanItdmlld2VyLXRvb2wtYnRuW2RhdGEtYWN0aXZlPSIxIl06aG92ZXIgewogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDE4MGRlZywKICAgICAgICByZ2JhKDEzOCwgMTgwLCAyNTUsIDAuMyksCiAgICAgICAgcmdiYSgxMjQsIDEwMCwgMjMyLCAwLjE0KQogICAgKSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE0OCwgMTg4LCAyNTUsIDAuNDgpICFpbXBvcnRhbnQ7Cn0KCi5tanItdmlld2VyLXRvb2wtYnRuW2RhdGEtYWN0aXZlPSIxIl0gewogICAgZmlsdGVyOiBzYXR1cmF0ZSgxLjEyKSBicmlnaHRuZXNzKDEuMDQpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSwKICAgICAgICAwIDAgMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KSwKICAgICAgICAwIDhweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xNikgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItaGVscCB7CiAgICBib3JkZXItcmFkaXVzOiAxNHB4ICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDEzLCAxNywgMjIsIDAuOTYpLCByZ2JhKDgsIDExLCAxNiwgMC45OCkpICFpbXBvcnRhbnQ7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiAwIDE4cHggMzRweCByZ2JhKDAsIDAsIDAsIDAuMzQpICFpbXBvcnRhbnQ7Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiAxMjIwcHgpIHsKICAgIC5tanItdmlld2VyLXRvb2xzIHsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgIH0KCiAgICAubWpyLXZpZXdlci10b29scy1hY3Rpb25zIHsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICB9CgogICAgLm1qci12aWV3ZXItaGVhZGVyLXRvcCB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICAgICAganVzdGlmeS1pdGVtczogY2VudGVyOwogICAgfQoKICAgIC5tanItdmlld2VyLWhlYWRlci1hcmVhLS1sZWZ0LAogICAgLm1qci12aWV3ZXItaGVhZGVyLWFyZWEtLWNlbnRlciwKICAgIC5tanItdmlld2VyLWhlYWRlci1hcmVhLS1yaWdodCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICB9CgogICAgLm1qci12aWV3ZXItaGVhZGVyLW1ldGEtLWxlZnQsCiAgICAubWpyLXZpZXdlci1oZWFkZXItbWV0YS0tcmlnaHQgewogICAgICAgIGp1c3RpZnktc2VsZjogY2VudGVyOwogICAgfQoKICAgIC5tanItdmlld2VyLXRvb2xzLWJvZHkgewogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjIwcHgsIDFmcikpOwogICAgfQp9CgovKiA9PT09PT09PT09IEN1c3RvbSBWaWRlbyBDb250cm9scyAobm8gbmF0aXZlIGJhcikgPT09PT09PT09PSAqLwoubWpyLXZpZGVvLWhvc3QgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDEycHg7CiAgICByaWdodDogMTJweDsKICAgIGJvdHRvbTogMTJweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nOiA4cHggMTBweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC42KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCk7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpOwogICAgb3BhY2l0eTogMDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBlYXNlOwogICAgei1pbmRleDogNTsKfQoKLm1qci12aWRlby1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItdmlkZW8tcm93LS10b3AgewogICAgZ2FwOiAxMnB4OwogICAgZGlzcGxheTogZ3JpZDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gYXV0byAxZnIgYXV0byBhdXRvOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1yb3ctLXRvcCB7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gYXV0byAxZnIgYXV0byBhdXRvOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS1wcmV2aWV3IC5tanItdmlkZW8tcm93LS10b3AgewogICAgZGlzcGxheTogZmxleDsKfQoKLm1qci12aWRlby1yb3ctLWJvdHRvbSB7CiAgICBnYXA6IDhweDsKfQoKLm1qci12aWRlby1ncm91cCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDZweDsKICAgIG1pbi13aWR0aDogMDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODUpOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItdmlkZW8tbnVtIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSk7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBwYWRkaW5nOiA1cHggOHB4OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBvdXRsaW5lOiBub25lOwp9CgoubWpyLXZpZGVvLW51bTpmb2N1cyB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zOCk7Cn0KCi5tanItdmlkZW8tbnVtLS1mcHMuaXMtb3ZlcnJpZGRlbiB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjQ1LCAxNTgsIDExLCAwLjgyKTsKICAgIGNvbG9yOiAjZmJiZjI0OwogICAgYmFja2dyb3VuZDogcmdiYSgyNDUsIDE1OCwgMTEsIDAuMTQpOwp9CgoubWpyLXZpZGVvLW51bS0tZnBzLmlzLW92ZXJyaWRkZW46Zm9jdXMgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1MSwgMTkxLCAzNiwgMC45Nik7Cn0KCi5tanItdmlkZW8tbnVtLS1zcGVlZCB7CiAgICBjb2xvci1zY2hlbWU6IGRhcms7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNjIpOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSk7Cn0KCi5tanItdmlkZW8tbnVtLS1zcGVlZCBvcHRpb24gewogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSk7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7Cn0KCi5tanItdmlkZW8tZnJhbWUgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKICAgIG1pbi13aWR0aDogNTJweDsKICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItdmlkZW8tZnJhbWUuaXMtc3RlcCB7CiAgICBjb2xvcjogI2ZmZDI0ZDsKfQoKLm1qci12aWRlby1ib3R0b20gewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIG1pbi13aWR0aDogMDsKICAgIGZsZXg6IDE7Cn0KCi5tanItdmlkZW8tYm90dG9tLS1sZWZ0IHsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKfQoKLm1qci12aWRlby1ib3R0b20tLXJpZ2h0IHsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7Cn0KCi5tanItdmlkZW8tdHJhbnNwb3J0IHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICBmbGV4OiAwIDAgYXV0bzsKfQoKLyogU2hvdyBjb250cm9scyBvbiBob3Zlci9mb2N1cyAodmlld2VyKS4gKi8KLm1qci12aWRlby1ob3N0OmhvdmVyIC5tanItdmlkZW8tY29udHJvbHMsCi5tanItdmlkZW8tY29udHJvbHM6Zm9jdXMtd2l0aGluIHsKICAgIG9wYWNpdHk6IDE7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKfQoKLyogUHJldmlldzoga2VlcCBjb250cm9scyB2aXNpYmxlIGJlY2F1c2UgdGhlIGFyZWEgaXMgc21hbGwuICovCi5tanItdmlkZW8tY29udHJvbHMtLXByZXZpZXcgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogYXV0bzsKICAgIHJpZ2h0OiAxMHB4OwogICAgdG9wOiBhdXRvOwogICAgYm90dG9tOiAxMHB4OwogICAgb3BhY2l0eTogMTsKICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXI6IG5vbmU7CiAgICBwYWRkaW5nOiAwOwogICAgZGlzcGxheTogYmxvY2s7CiAgICB3aWR0aDogYXV0bzsKICAgIGhlaWdodDogYXV0bzsKICAgIGJhY2tkcm9wLWZpbHRlcjogbm9uZTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBub25lOwp9CgoubWpyLXZpZGVvLXByZXZpZXctYnRuIHsKICAgIHdpZHRoOiAzOHB4OwogICAgaGVpZ2h0OiAzOHB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjIpOwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjQyKTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTIpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Cn0KCi5tanItdmlkZW8tcHJldmlldy1idG46aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjUpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjgpOwp9CgoubWpyLXZpZGVvLXByZXZpZXctYnRuIC5waSB7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLm1qci12aWRlby1idG4gewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xOCk7CiAgICBjb2xvcjogI2ZmZjsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgbGluZS1oZWlnaHQ6IDE7Cn0KCi5tanItdmlkZW8tYnRuOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCk7Cn0KCi5tanItdmlkZW8tYnRuLmlzLW9uIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoNjQsIDE2MCwgMjU1LCAwLjI1KTsKICAgIGJvcmRlci1jb2xvcjogcmdiYSg2NCwgMTYwLCAyNTUsIDAuNTUpOwp9CgoubWpyLXZpZGVvLWJ0bi0taW4gewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDcwLCAyNTUsIDEyMCwgMC41NSk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDcwLCAyNTUsIDEyMCwgMC4xMik7Cn0KCi5tanItdmlkZW8tYnRuLS1pbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDcwLCAyNTUsIDEyMCwgMC4xOCk7Cn0KCi5tanItdmlkZW8tYnRuLS1vdXQgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgNzAsIDcwLCAwLjU1KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCA3MCwgNzAsIDAuMSk7Cn0KCi5tanItdmlkZW8tYnRuLS1vdXQ6aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDcwLCA3MCwgMC4xNik7Cn0KCi5tanItdmlkZW8tdGltZSB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgbWluLXdpZHRoOiA5MnB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItdmlkZW8tdGltZWdyb3VwIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICBnYXA6IDEwcHg7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItdmlkZW8tcmFuZ2UtY291bnQgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6IHJnYmEoNjQsIDE5MCwgMjU1LCAwLjkyKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoNjQsIDE5MCwgMjU1LCAwLjEpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSg2NCwgMTkwLCAyNTUsIDAuMjUpOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBwYWRkaW5nOiAxcHggOHB4OwogICAgbGluZS1oZWlnaHQ6IDE2cHg7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItdmlkZW8tcmFuZ2UgewogICAgYWNjZW50LWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7Cn0KCi5tanItdmlkZW8tcmFuZ2UtLXNlZWsgewogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogODBweDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDE7CiAgICAvKiBXZSBkcmF3IG91ciBvd24gcGxheWhlYWQvbWFya2VyczsgaGlkZSB0aGUgbmF0aXZlIHRodW1iICJkb3QiLiAqLwogICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgYXBwZWFyYW5jZTogbm9uZTsKfQoKLm1qci12aWRlby1yYW5nZS0tc2Vlazo6LXdlYmtpdC1zbGlkZXItdGh1bWIgewogICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIHdpZHRoOiAwOwogICAgaGVpZ2h0OiAwOwogICAgYm9yZGVyOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3gtc2hhZG93OiBub25lOwp9CgoubWpyLXZpZGVvLXJhbmdlLS1zZWVrOjotbW96LXJhbmdlLXRodW1iIHsKICAgIHdpZHRoOiAwOwogICAgaGVpZ2h0OiAwOwogICAgYm9yZGVyOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3gtc2hhZG93OiBub25lOwp9CgoubWpyLXZpZGVvLXNlZWstd3JhcCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtaW4td2lkdGg6IDgwcHg7CiAgICBmbGV4OiAxOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7Cn0KCi5tanItdmlkZW8tc2Vlay16b25lcyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICB0b3A6IDUwJTsKICAgIGhlaWdodDogMTBweDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgei1pbmRleDogMjsKfQoKLm1qci12aWRlby1zZWVrLXpvbmUgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAwOwogICAgYm90dG9tOiAwOwp9CgovKiAwLi5JbjogdHJpbW1lZC1vdXQgcmFuZ2UuICovCi5tanItdmlkZW8tc2Vlay16b25lLS1sZWZ0VHJpbSB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgNzAsIDcwLCAwLjE4KTsKfQoKLyogSW4uLk91dDogc2VsZWN0ZWQgcGxheWJhY2sgcmFuZ2UgaGlnaGxpZ2h0LiAqLwoubWpyLXZpZGVvLXNlZWstem9uZS0tc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogcmdiYSg2NCwgMTkwLCAyNTUsIDAuNTUpOwp9CgoubWpyLXZpZGVvLXNlZWstem9uZXMuaXMtZnVsbHJhbmdlIC5tanItdmlkZW8tc2Vlay16b25lLS1zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOwp9CgovKiBPdXQuLkVuZDogc2hvdyBvdXQtb2YtcmFuZ2UgZnJhbWVzIGFzIGEgZGlmZmVyZW50IGNvbG9yLiAqLwoubWpyLXZpZGVvLXNlZWstem9uZS0tcmlnaHRUcmltIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCA3MCwgNzAsIDAuMik7Cn0KCi5tanItdmlkZW8tc2Vlay1vdmVybGF5IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIHRvcDogNTAlOwogICAgaGVpZ2h0OiAwOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAzOwp9CgoubWpyLXZpZGVvLXNlZWstaGFuZGxlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNTAlOwogICAgd2lkdGg6IDE2cHg7CiAgICBoZWlnaHQ6IDMycHg7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICAgIGN1cnNvcjogZXctcmVzaXplOwogICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICB0b3VjaC1hY3Rpb246IG5vbmU7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIHotaW5kZXg6IDQ7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKICAgIGJveC1zaGFkb3c6IDAgNHB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjM1KTsKfQoKLm1qci12aWRlby1zZWVrLWhhbmRsZTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNCk7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLWluOjphZnRlciwKLm1qci12aWRlby1zZWVrLWhhbmRsZS0tb3V0OjphZnRlciB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDUwJTsKICAgIHRvcDogNTAlOwogICAgd2lkdGg6IDJweDsKICAgIGhlaWdodDogMThweDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDcwLCA3MCwgMC45NSk7CiAgICBib3JkZXItcmFkaXVzOiAycHg7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLWluOjphZnRlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDcwLCAyNTUsIDEyMCwgMC45NSk7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLWluOjpiZWZvcmUsCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLW91dDo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogNTAlOwogICAgd2lkdGg6IDA7CiAgICBoZWlnaHQ6IDA7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLWluOjpiZWZvcmUgewogICAgdG9wOiA0cHg7CiAgICBib3JkZXItbGVmdDogNXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYm9yZGVyLXJpZ2h0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItYm90dG9tOiA2cHggc29saWQgcmdiYSg3MCwgMjU1LCAxMjAsIDAuOTUpOwp9CgoubWpyLXZpZGVvLXNlZWstaGFuZGxlLS1vdXQ6OmJlZm9yZSB7CiAgICBib3R0b206IDRweDsKICAgIGJvcmRlci1sZWZ0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItcmlnaHQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJvcmRlci10b3A6IDZweCBzb2xpZCByZ2JhKDI1NSwgNzAsIDcwLCAwLjk1KTsKfQoKLm1qci12aWRlby1zZWVrLXRpY2tzIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIHRvcDogLTE2cHg7CiAgICBoZWlnaHQ6IDEycHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgb3BhY2l0eTogMC45Owp9CgoubWpyLXZpZGVvLXNlZWstbGFiZWxzIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIHRvcDogLTM0cHg7CiAgICBoZWlnaHQ6IDE0cHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGxpbmUtaGVpZ2h0OiAxNHB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43Mik7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjU1KTsKfQoKLm1qci12aWRlby1zZWVrLWxhYmVsIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItdmlkZW8tc2Vlay1wbGF5aGVhZC1sYWJlbCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDEycHg7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICBwYWRkaW5nOiAxcHggNnB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNTUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTIpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgbGluZS1oZWlnaHQ6IDE0cHg7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5tanItdmlkZW8tc2Vlay1tYXJrIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogLTEwcHg7CiAgICB3aWR0aDogMTRweDsKICAgIGhlaWdodDogMjBweDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgY3Vyc29yOiBldy1yZXNpemU7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIHRvdWNoLWFjdGlvbjogbm9uZTsKICAgIHotaW5kZXg6IDQ7CiAgICAtLW1qci1tYXJrLWNvbG9yOiByZ2JhKDI1NSwgNzAsIDcwLCAwLjk1KTsKfQoKLm1qci12aWRlby1zZWVrLW1hcmstLWluIHsKICAgIC0tbWpyLW1hcmstY29sb3I6IHJnYmEoNzAsIDI1NSwgMTIwLCAwLjk1KTsKfQoKLm1qci12aWRlby1zZWVrLW1hcms6OmJlZm9yZSB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDUwJTsKICAgIHRvcDogMDsKICAgIGJvdHRvbTogMDsKICAgIHdpZHRoOiAycHg7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItbWFyay1jb2xvcik7CiAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgwLCAwLCAwLCAwLjM1KTsKfQoKLm1qci12aWRlby1zZWVrLW1hcms6OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAtNXB4OwogICAgbGVmdDogNTAlOwogICAgd2lkdGg6IDA7CiAgICBoZWlnaHQ6IDA7CiAgICBib3JkZXItbGVmdDogNXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYm9yZGVyLXJpZ2h0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItYm90dG9tOiA2cHggc29saWQgdmFyKC0tbWpyLW1hcmstY29sb3IpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwp9CgoubWpyLXZpZGVvLXNlZWstbWFyay0taW46OmFmdGVyIHsKICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHZhcigtLW1qci1tYXJrLWNvbG9yKTsKfQoKLm1qci12aWRlby1zZWVrLW1hcmstLW91dDo6YWZ0ZXIgewogICAgdG9wOiBhdXRvOwogICAgYm90dG9tOiAtNXB4OwogICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKICAgIGJvcmRlci10b3A6IDZweCBzb2xpZCB2YXIoLS1tanItbWFyay1jb2xvcik7Cn0KCi5tanItdmlkZW8tc2Vlay1wbGF5aGVhZCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IC0xMnB4OwogICAgd2lkdGg6IDJweDsKICAgIGhlaWdodDogMjRweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyMDAsIDcwLCAwLjk1KTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCByZ2JhKDAsIDAsIDAsIDAuMzUpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xcHgpOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgewogICAgcG9zaXRpb246IHN0YXRpYzsKICAgIGxlZnQ6IGF1dG87CiAgICByaWdodDogYXV0bzsKICAgIGJvdHRvbTogYXV0bzsKICAgIG9wYWNpdHk6IDE7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIHdpZHRoOiAxMDAlOwogICAgbWF4LXdpZHRoOiBub25lOwogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMTRweDsKICAgIGJvcmRlci1yYWRpdXM6IDE4cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMTIpOwogICAgYmFja2dyb3VuZDoKICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IHRvcCBsZWZ0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDMpLCB0cmFuc3BhcmVudCAzNCUpLAogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMTk4LCAyMDMsIDIxMCwgMC4wMjUpLCByZ2JhKDE5OCwgMjAzLCAyMTAsIDAuMDA4KSksCiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE2NWRlZywgcmdiYSgxOCwgMjIsIDI4LCAwLjgyKSwgcmdiYSgxMiwgMTUsIDIxLCAwLjkpKTsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpLAogICAgICAgIDAgMTBweCAzMHB4IHJnYmEoMCwgMCwgMCwgMC4xNCk7CiAgICBiYWNrZHJvcC1maWx0ZXI6IG5vbmU7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogbm9uZTsKICAgIGdhcDogMTJweDsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYnRuIHsKICAgIG1pbi1oZWlnaHQ6IDM4cHg7CiAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIxMCwgMjE0LCAyMjAsIDAuMDcpLCByZ2JhKDIxMCwgMjE0LCAyMjAsIDAuMDIpKTsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgxOTQsIDIwMSwgMjA4LCAwLjE4KTsKICAgIGJvcmRlci13aWR0aDogMXB4OwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwogICAgdHJhbnNpdGlvbjoKICAgICAgICB0cmFuc2Zvcm0gMC4xMnMgZWFzZSwKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yIDAuMTJzIGVhc2UsCiAgICAgICAgYm9yZGVyLWNvbG9yIDAuMTJzIGVhc2UsCiAgICAgICAgYm94LXNoYWRvdyAwLjEycyBlYXNlOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1idG46aG92ZXIgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIyMCwgMjI0LCAyMzAsIDAuMjYpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCksCiAgICAgICAgMCA4cHggMThweCByZ2JhKDAsIDAsIDAsIDAuMTQpOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1idG4uaXMtb24gewogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgxMDAsIDE3MCwgMjU1LCAwLjIpLCByZ2JhKDEwMCwgMTcwLCAyNTUsIDAuMDgpKTsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgxMjAsIDE4NiwgMjU1LCAwLjQyKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCByZ2JhKDEyMCwgMTg2LCAyNTUsIDAuMTIpIGluc2V0Owp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1idG4gLnBpIHsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1iYXItaGVhZCwKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLWFjdGlvbnMgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDFmcikgYXV0byBtaW5tYXgoMCwgMWZyKTsKICAgIGdhcDogMTJweDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1zdGF0dXMsCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1zaWRlIHsKICAgIG1pbi13aWR0aDogMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgZmxleC13cmFwOiB3cmFwOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1iYXItY2VudGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1oZWFkIHsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDFmcik7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1zaWRlLS1yaWdodCB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1iYXItdGltZWxpbmUgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byBtaW5tYXgoMCwgMWZyKSBhdXRvOwogICAgZ2FwOiAxMnB4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyLm1qci12aWRlby1jb250cm9scy0tYXVkaW8gLm1qci12aWRlby1iYXItdGltZWxpbmUgewogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKSBhdXRvIGF1dG87Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhci5tanItdmlkZW8tY29udHJvbHMtLWF1ZGlvIC5tanItdmlkZW8tc2Vlay13cmFwIHsKICAgIGdyaWQtY29sdW1uOiAxIC8gLTE7CiAgICBncmlkLXJvdzogMTsKICAgIHdpZHRoOiAxMDAlOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIubWpyLXZpZGVvLWNvbnRyb2xzLS1hdWRpbyAubWpyLXZpZGVvLWdyb3VwLS1pbiwKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyLm1qci12aWRlby1jb250cm9scy0tYXVkaW8gLm1qci12aWRlby1ncm91cC0tb3V0IHsKICAgIGdyaWQtcm93OiAyOwogICAgd2lkdGg6IG1heC1jb250ZW50OwogICAgbWF4LXdpZHRoOiAxMDAlOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1tZWRpYS1iYWRnZSB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIG1pbi1oZWlnaHQ6IDI4cHg7CiAgICBwYWRkaW5nOiAwIDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzgsIDIyNCwgMTk2LCAwLjEyKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoNzgsIDIyNCwgMTk2LCAwLjIyKTsKICAgIGNvbG9yOiByZ2JhKDIyMCwgMjQ3LCAyNDEsIDAuOTYpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby10aW1lZ3JvdXAgewogICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nOiA1cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0NSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby10aW1lLAoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1mcmFtZSB7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgY29sb3I6IHJnYmEoMjI4LCAyMzAsIDIzNCwgMC45Mik7CiAgICB0ZXh0LXNoYWRvdzogbm9uZTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tZnJhbWUgewogICAgbWluLXdpZHRoOiA5NHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgcGFkZGluZzogNXB4IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNDUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tdGltZSB7CiAgICBtaW4td2lkdGg6IGF1dG87CiAgICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1yYW5nZS0tc2VlayB7CiAgICBoZWlnaHQ6IDIycHg7CiAgICBhY2NlbnQtY29sb3I6IHJnYmEoMjE0LCAyMTgsIDIyNCwgMC45Mik7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXJhbmdlLWNvdW50IHsKICAgIGNvbG9yOiByZ2JhKDIyMiwgMjI1LCAyMzAsIDAuOTUpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE5NCwgMjAxLCAyMDksIDAuMjYpOwogICAgYm9yZGVyLXdpZHRoOiAwLjhweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTk0LCAyMDEsIDIwOSwgMC4wOCk7CiAgICB0ZXh0LXNoYWRvdzogbm9uZTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tZ3JvdXAgewogICAgbWluLWhlaWdodDogMzZweDsKICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzNSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1ncm91cC0tYWRqdXN0LWxlZnQsCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWdyb3VwLS1hZGp1c3QtcmlnaHQsCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWdyb3VwLS1zcGVlZCB7CiAgICBnYXA6IDhweDsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tbnVtIHsKICAgIG1pbi1oZWlnaHQ6IDM0cHg7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYmFja2dyb3VuZDogcmdiYSg5LCAxMiwgMTYsIDAuNTUpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXRyYW5zcG9ydCB7CiAgICBnYXA6IDEwcHg7CiAgICBwYWRkaW5nOiA2cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNDUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYnRuLS1wbGF5IHsKICAgIG1pbi13aWR0aDogODhweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXNlZWstd3JhcCB7CiAgICBtaW4taGVpZ2h0OiA0NHB4Owp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1zZWVrLXpvbmVzIHsKICAgIGhlaWdodDogMTJweDsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tc2Vlay1oYW5kbGUgewogICAgd2lkdGg6IDE4cHg7CiAgICBoZWlnaHQ6IDM0cHg7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXZvbHVtZS13cmFwIHsKICAgIHBhZGRpbmc6IDAgNHB4Owp9CgoubWpyLXZpZGVvLXJhbmdlLS12b2x1bWUgewogICAgd2lkdGg6IDkwcHg7Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiA5ODBweCkgewogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLWhlYWQsCiAgICAubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1iYXItYWN0aW9ucywKICAgIC5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci10aW1lbGluZSB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICB9CgogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLWNlbnRlciwKICAgIC5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1zaWRlLS1yaWdodCB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICB9CgogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLXRpbWVsaW5lIHsKICAgICAgICBnYXA6IDEwcHg7CiAgICB9CgogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tdHJhbnNwb3J0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTZweDsKICAgIH0KfQoKLyogPT09PT09PT09PSBDb250ZXh0IE1lbnUgQ29tcG9uZW50ID09PT09PT09PT0gKi8KLm1qci1jb250ZXh0LW1lbnUgewogICAgcG9zaXRpb246IGZpeGVkOwogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktbWVudS1iZyk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpOwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICBtaW4td2lkdGg6IDIwMHB4OwogICAgLyogQWJvdmUgdmlld2VyIG92ZXJsYXkgKDEwMDAxKSBhbmQgTUZWIGRpYWxvZyAoMTAwMDApICovCiAgICB6LWluZGV4OiAxMDAwMjsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBwYWRkaW5nOiA0cHggMDsKICAgIGFuaW1hdGlvbjogbWpyLWNvbnRleHQtbWVudS1pbiAwLjE1cyBlYXNlLW91dDsKfQoKLm1qci1jb250ZXh0LW1lbnUsCi5tanItY29udGV4dC1tZW51ICogewogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKQGtleWZyYW1lcyBtanItY29udGV4dC1tZW51LWluIHsKICAgIGZyb20gewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01cHgpOwogICAgfQogICAgdG8gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgfQp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtIHsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICBwYWRkaW5nOiA4cHggMTRweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgd2lkdGg6IDEwMCU7CiAgICBib3JkZXI6IDA7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3gtc2hhZG93OiBub25lOwogICAgbWFyZ2luOiAwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgIGxldHRlci1zcGFjaW5nOiBub3JtYWw7CiAgICBsaW5lLWhlaWdodDogMS4zNTsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXM7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbTo6LW1vei1mb2N1cy1pbm5lciB7CiAgICBib3JkZXI6IDA7CiAgICBwYWRkaW5nOiAwOwp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtOmhvdmVyLAoubWpyLWNvbnRleHQtbWVudS1pdGVtOmZvY3VzLXZpc2libGUgewogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktaW5wdXQtYmcpOwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLWdyYXBoLW1hcCB7CiAgICBjb2xvcjogI2Y1YzU0MjsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLXJlbmFtZSB7CiAgICBjb2xvcjogIzVkYTlmZjsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLWRlbGV0ZSB7CiAgICBjb2xvcjogI2ZmNWY1ZjsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLWZsb2F0aW5nLXZpZXdlciB7CiAgICBjb2xvcjogIzVmZDM4ZDsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLWdyYXBoLW1hcDpob3ZlciwKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLWdyYXBoLW1hcDpmb2N1cy12aXNpYmxlIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjQ1LCAxOTcsIDY2LCAwLjE0KTsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLXJlbmFtZTpob3ZlciwKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLXJlbmFtZTpmb2N1cy12aXNpYmxlIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoOTMsIDE2OSwgMjU1LCAwLjE0KTsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLWRlbGV0ZTpob3ZlciwKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy10b25lLWRlbGV0ZTpmb2N1cy12aXNpYmxlIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCA5NSwgOTUsIDAuMTQpOwp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtLmlzLXRvbmUtZmxvYXRpbmctdmlld2VyOmhvdmVyLAoubWpyLWNvbnRleHQtbWVudS1pdGVtLmlzLXRvbmUtZmxvYXRpbmctdmlld2VyOmZvY3VzLXZpc2libGUgewogICAgYmFja2dyb3VuZDogcmdiYSg5NSwgMjExLCAxNDEsIDAuMTQpOwp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtLmlzLWRpc2FibGVkIHsKICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIG9wYWNpdHk6IDAuNDU7Cn0KCi5tanItY29udGV4dC1tZW51LWl0ZW0uaXMtZGlzYWJsZWQ6aG92ZXIsCi5tanItY29udGV4dC1tZW51LWl0ZW0uaXMtZGlzYWJsZWQ6Zm9jdXMtdmlzaWJsZSB7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKfQoKLm1qci1jb250ZXh0LW1lbnUtc2VwYXJhdG9yIHsKICAgIGhlaWdodDogMXB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tYm9yZGVyLWNvbG9yKTsKICAgIG1hcmdpbjogNHB4IDA7Cn0KCi5tanItY29udGV4dC1tZW51LWl0ZW0tbGVmdCwKLm1qci1jb250ZXh0LW1lbnUtaXRlbS1yaWdodCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7Cn0KCi5tanItY29udGV4dC1tZW51LWl0ZW0tbGVmdCB7CiAgICBmbGV4OiAxIDEgYXV0bzsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS1yaWdodCB7CiAgICBmbGV4OiAwIDAgYXV0bzsKICAgIG1hcmdpbi1sZWZ0OiAxNnB4Owp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtLWxlZnQgaSB7CiAgICB3aWR0aDogMTZweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG9wYWNpdHk6IDAuODI7Cn0KCi5tanItY29udGV4dC1tZW51LWhpbnQgewogICAgb3BhY2l0eTogMC41ODsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItY29udGV4dC1tZW51LXN1Ym1lbnUtYXJyb3cgewogICAgb3BhY2l0eTogMC43MjsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgoubWpyLWFkZC10by1jb2xsZWN0aW9uLW1lbnUgewogICAgbWluLXdpZHRoOiAyNjBweDsKICAgIG1heC13aWR0aDogbWluKDM2MHB4LCBjYWxjKDEwMHZ3IC0gMTZweCkpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEycHgpOwp9CgoubWpyLWNvbnRleHQtbWVudS10aXRsZSB7CiAgICBwYWRkaW5nOiA4cHggMTRweCAxMHB4OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGNvbG9yOiB2YXIoLS1mZy1jb2xvcik7CiAgICBvcGFjaXR5OiAwLjkyOwp9CgoubWpyLWNvbnRleHQtbWVudS1ub3RlIHsKICAgIHBhZGRpbmc6IDEwcHggMTRweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZykgNzIlLCB2YXIoLS1tanItbXV0ZWQpKTsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ1Owp9CgoubWpyLWdyaWQtcG9wb3ZlciwKLm1qci12aWV3ZXItcG9wb3ZlciB7CiAgICBtaW4td2lkdGg6IDI1MHB4OwogICAgbWF4LXdpZHRoOiBtaW4oMzYwcHgsIGNhbGMoMTAwdncgLSAxNnB4KSk7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItc20pOwogICAgYm94LXNoYWRvdzogMCAxMnB4IDI4cHggcmdiYSgwLCAwLCAwLCAwLjM1KTsKfQoKQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHsKICAgIC5tanItdmlld2VyLW92ZXJsYXkgKiwKICAgIC5tanItdmlkZW8tY29udHJvbHMsCiAgICAubWpyLWNvbnRleHQtbWVudSB7CiAgICAgICAgYW5pbWF0aW9uOiBub25lICFpbXBvcnRhbnQ7CiAgICAgICAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50OwogICAgICAgIHNjcm9sbC1iZWhhdmlvcjogYXV0byAhaW1wb3J0YW50OwogICAgfQp9CgovKiBIaWRlIGhlYWRlciAodG9vbGJhcikgd2hlbiB2aWV3ZXIgb3ZlcmxheSBpcyBpbiBmdWxsc2NyZWVuICovCi5tanItdmlld2VyLW92ZXJsYXk6ZnVsbHNjcmVlbiAubWpyLXZpZXdlci1oZWFkZXIgewogICAgZGlzcGxheTogbm9uZTsKfQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgTWFqb29yIEZsb2F0aW5nIFZpZXdlciAoTUZWKSAtIHBvcnRhbGVkIHRvIGRvY3VtZW50LmJvZHkKICAgUmVkZWNsYXJlcyBDU1MgdmFyaWFibGVzIHNvIHRoZSBwYW5lbCB3b3JrcyBvdXRzaWRlIC5tanItYXNzZXRzLW1hbmFnZXIKICAgKHNhbWUgcGF0dGVybiBhcyAubWpyLXBvcG92ZXIpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgoubWpyLW1mdiB7CiAgICAtLW1qci1zdXJmYWNlLTA6IHZhcigtLWNvbnRlbnQtYmcsICMxZTFlMWUpOwogICAgLS1tanItc3VyZmFjZS0xOiB2YXIoLS1jb21meS1tZW51LWJnLCAjMmEyYTJhKTsKICAgIC0tbWpyLXN1cmZhY2UtMjogdmFyKC0tY29tZnktbWVudS1zZWNvbmRhcnktYmcsICMzMzMpOwogICAgLS1tanItYm9yZGVyOiB2YXIoLS1ib3JkZXItY29sb3IsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwogICAgLS1tanItbXV0ZWQ6IHZhcigtLWRlc2NyaXAtdGV4dCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSk7CiAgICAtLW1qci1hY2NlbnQ6IHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZik7CiAgICAtLW1qci1zdGF0dXMtc3VjY2VzczogdmFyKC0tY29tZnktc3RhdHVzLXN1Y2Nlc3MsICM0Y2FmNTApOwoKICAgIGZvbnQtZmFtaWx5OiB2YXIoCiAgICAgICAgLS1jb21meS1mb250LAogICAgICAgIHVpLXNhbnMtc2VyaWYsCiAgICAgICAgc3lzdGVtLXVpLAogICAgICAgIC1hcHBsZS1zeXN0ZW0sCiAgICAgICAgIlNlZ29lIFVJIiwKICAgICAgICBSb2JvdG8sCiAgICAgICAgQXJpYWwsCiAgICAgICAgc2Fucy1zZXJpZgogICAgKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsIHZhcigtLWlucHV0LXRleHQsICNkZGQpKTsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CgogICAgLyogVmlzdWFsIGNocm9tZSAqLwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgMCA4cHggMzJweCByZ2JhKDAsIDAsIDAsIDAuNTUpLAogICAgICAgIDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMyk7Cn0KCi5tanItbWZ2ICogewogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKaHRtbC5tanItbWZ2LXBvcG91dC1kb2N1bWVudCB7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIHJhZGlhbC1ncmFkaWVudCgKICAgICAgICAgICAgMTIwMHB4IDQyMHB4IGF0IDUwJSAwJSwKICAgICAgICAgICAgY29sb3ItbWl4KAogICAgICAgICAgICAgICAgaW4gc3JnYiwKICAgICAgICAgICAgICAgIHZhcigtLXByaW1hcnktYmFja2dyb3VuZCwgdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKSkgMTAlLAogICAgICAgICAgICAgICAgdHJhbnNwYXJlbnQKICAgICAgICAgICAgKSwKICAgICAgICAgICAgdHJhbnNwYXJlbnQgNjIlCiAgICAgICAgKSwKICAgICAgICBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgICAgIDE4MGRlZywKICAgICAgICAgICAgY29sb3ItbWl4KAogICAgICAgICAgICAgICAgaW4gc3JnYiwKICAgICAgICAgICAgICAgIHZhcigtLWludGVyZmFjZS1wYW5lbC1zdXJmYWNlLCB2YXIoLS1jb250ZW50LWJnLCAjMTYxOTFmKSkgODIlLAogICAgICAgICAgICAgICAgIzAwMCAxOCUKICAgICAgICAgICAgKSwKICAgICAgICAgICAgY29sb3ItbWl4KAogICAgICAgICAgICAgICAgaW4gc3JnYiwKICAgICAgICAgICAgICAgIHZhcigtLWludGVyZmFjZS1tZW51LXN1cmZhY2UsIHZhcigtLWNvbWZ5LW1lbnUtYmcsICMxZjIyMjcpKSA4NCUsCiAgICAgICAgICAgICAgICAjMDAwIDE2JQogICAgICAgICAgICApCiAgICAgICAgKTsKfQoKYm9keS5tanItbWZ2LXBvcG91dC1ib2R5IHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9CgojbWpyLW1mdi1wb3BvdXQtcm9vdCwKLm1qci1tZnYtcG9wb3V0LXJvb3QgewogICAgaXNvbGF0aW9uOiBpc29sYXRlOwp9CgovKiAtLSBIZWFkZXIgKGRyYWcgaGFuZGxlKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoubWpyLW1mdi1oZWFkZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEpOwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgY3Vyc29yOiBtb3ZlOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICBmbGV4LXNocmluazogMDsKICAgIGdhcDogNnB4OwogICAgbWluLWhlaWdodDogMzRweDsKfQoKLm1qci1tZnYtaGVhZGVyLXRpdGxlIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBvcGFjaXR5OiAwLjc4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgZmxleDogMTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjI4cHg7Cn0KCi8qIC0tIFRvb2xiYXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLm1qci1tZnYtdG9vbGJhciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNHB4OwogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA1MCUsIHZhcigtLW1qci1zdXJmYWNlLTEpIDUwJSk7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBmbGV4LXNocmluazogMDsKICAgIG1pbi1oZWlnaHQ6IDM2cHg7CiAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7Cn0KLm1qci1tZnYtdG9vbGJhcjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgZGlzcGxheTogbm9uZTsKfQoKLm1qci1tZnYtdG9vbGJhci1zZXAgewogICAgd2lkdGg6IDFweDsKICAgIGhlaWdodDogMThweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1ib3JkZXIpOwogICAgbWFyZ2luOiAwIDNweDsKICAgIGZsZXgtc2hyaW5rOiAwOwp9CgoubWpyLW1mdi1wcm9ncmVzcyB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgaGVpZ2h0OiAyMnB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDcyJSwgIzAwMCAyOCUpOwogICAgZmxleC1zaHJpbms6IDA7CiAgICBjdXJzb3I6IGRlZmF1bHQ7Cn0KCi5tanItbWZ2LXByb2dyZXNzLmlzLWNsaWNrYWJsZSB7CiAgICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi5tanItbWZ2LXByb2dyZXNzLmlzLWNsaWNrYWJsZTpob3ZlciB7CiAgICBmaWx0ZXI6IGJyaWdodG5lc3MoMS4wMyk7Cn0KCi5tanItbWZ2LXByb2dyZXNzLWJhciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAwOwogICAgd2lkdGg6IDAlOwogICAgdHJhbnNpdGlvbjogd2lkdGggNzBtcyBlYXNlLWluLW91dDsKfQoKLm1qci1tZnYtcHJvZ3Jlc3MtYmFyLS1ub2RlcyB7CiAgICB0b3A6IDA7CiAgICBoZWlnaHQ6IDUwJTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MpIDY4JSwgIzBiMzUxMyAzMiUpOwp9CgoubWpyLW1mdi1wcm9ncmVzcy1iYXItLXN0ZXBzIHsKICAgIHRvcDogNTAlOwogICAgaGVpZ2h0OiA1MCU7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNjQlLCAjMGIyMzQwIDM2JSk7Cn0KCi5tanItbWZ2LXByb2dyZXNzLmlzLWVycm9yIC5tanItbWZ2LXByb2dyZXNzLWJhci0tbm9kZXMsCi5tanItbWZ2LXByb2dyZXNzLmlzLWVycm9yIC5tanItbWZ2LXByb2dyZXNzLWJhci0tc3RlcHMgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsICNkOTUzNGYgNzglLCAjNGExNDE0IDIyJSk7Cn0KCi5tanItbWZ2LXByb2dyZXNzLW92ZXJsYXkgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpLCByZ2JhKDAsIDAsIDAsIDAuMTgpKTsKICAgIG1peC1ibGVuZC1tb2RlOiBzY3JlZW47CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLm1qci1tZnYtcHJvZ3Jlc3MtdGV4dCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB6LWluZGV4OiAyOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBwYWRkaW5nOiAwIDhweDsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICB0ZXh0LXNoYWRvdzogMCAwIDJweCByZ2JhKDAsIDAsIDAsIDAuOSk7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwp9CgoubWpyLW1mdi1waW4tZ3JvdXAgewogICAgZGlzcGxheTogZmxleDsKICAgIGdhcDogMnB4OwogICAgZmxleC1zaHJpbms6IDA7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwp9Ci5tanItbWZ2LXBpbi1idG4gewogICAgd2lkdGg6IDI2cHg7CiAgICBoZWlnaHQ6IDI2cHg7CiAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTIpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHBhZGRpbmc6IDA7CiAgICBsaW5lLWhlaWdodDogMjRweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHRyYW5zaXRpb246CiAgICAgICAgYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGNvbG9yIDEyMG1zIGVhc2UsCiAgICAgICAgYm94LXNoYWRvdyAxMjBtcyBlYXNlOwp9Ci5tanItbWZ2LXBpbi1idG46aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNDUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLCB2YXIoLS1tanItYWNjZW50KSA4JSk7Cn0KLm1qci1tZnYtcGluLWJ0bi5pcy1waW5uZWQgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTglLCAjZmZmZmZmIDEyJSk7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNDIlLCB2YXIoLS1tanItYWNjZW50KSA1OCUpOwogICAgY29sb3I6ICNlZWY3ZmY7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDI0JSwgdHJhbnNwYXJlbnQpOwp9CgovKiAtLSBQaW4gZ3JvdXA6IG5vdyBhIGRyb3Bkb3duIG1lbnUgKGRpc3BsYXk6bm9uZSBieSBkZWZhdWx0LCBmbGV4IHdoZW4gLmlzLW9wZW4pIC0tICovCi5tanItbWZ2LXBpbi1ncm91cCB7CiAgICBkaXNwbGF5OiBub25lOwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMnB4OwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiBjYWxjKDEwMCUgKyA0cHgpOwogICAgbGVmdDogMDsKICAgIHotaW5kZXg6IDEwMDEwOwogICAgbWluLXdpZHRoOiA3MHB4OwogICAgcGFkZGluZzogNHB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDI0cHggcmdiYSgwLCAwLCAwLCAwLjU1KTsKfQoubWpyLW1mdi1waW4tZ3JvdXAuaXMtb3BlbiB7CiAgICBkaXNwbGF5OiBmbGV4Owp9Ci5tanItbWZ2LXBpbi1idG4gewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAzMHB4OwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHBhZGRpbmc6IDAgMTBweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHRyYW5zaXRpb246CiAgICAgICAgYmFja2dyb3VuZCAxMjBtcyBlYXNlLAogICAgICAgIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGNvbG9yIDEyMG1zIGVhc2U7Cn0KLm1qci1tZnYtcGluLWJ0bjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMzUlLCB0cmFuc3BhcmVudCk7Cn0KLm1qci1tZnYtcGluLWJ0bi5pcy1waW5uZWQgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTglLCAjZmZmZmZmIDEyJSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMiwgIzMzMykgNDIlLCB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKSA1OCUpOwogICAgY29sb3I6ICNlZWY3ZmY7Cn0KCi8qIC0tIEljb24gRHJvcGRvd24gY29tcG9uZW50ICgubWpyLW1mdi1pZHJvcCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5tanItbWZ2LWlkcm9wIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGZsZXgtc2hyaW5rOiAwOwp9CgoubWpyLW1mdi1pZHJvcC1tZW51IHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAycHg7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB6LWluZGV4OiAxMDAxMDsKICAgIG1pbi13aWR0aDogMTEwcHg7CiAgICBwYWRkaW5nOiA0cHg7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1tZW51LWJnLCAjMmEyYTJhKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgYm94LXNoYWRvdzogMCA4cHggMjRweCByZ2JhKDAsIDAsIDAsIDAuNTUpOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoubWpyLW1mdi1pZHJvcC1tZW51LmlzLW9wZW4gewogICAgZGlzcGxheTogZmxleDsKfQoKLm1qci1tZnYtaWRyb3AtaXRlbSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgd2lkdGg6IDEwMCU7CiAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICBib3JkZXI6IG5vbmU7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2RkZCk7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzIGVhc2U7Cn0KLm1qci1tZnYtaWRyb3AtaXRlbTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwp9Ci5tanItbWZ2LWlkcm9wLWl0ZW0uaXMtc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogcmdiYSg5NSwgMTc5LCAyNTUsIDAuMTYpOwogICAgY29sb3I6ICNhOGQ4ZmY7Cn0KLm1qci1tZnYtaWRyb3AtdHJpZ2dlclthcmlhLWV4cGFuZGVkPSJ0cnVlIl0gewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSAhaW1wb3J0YW50Owp9Ci8qIENoYW5uZWwgdHJpZ2dlcjogc2xpZ2h0bHkgd2lkZXIgdG8gZml0ICJSR0IiICovCi5tanItbWZ2LWNoLWxhYmVsIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA0ZW07CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLyogVG9vbGJhciBpY29uLWJ1dHRvbiBwb3BvdmVycyAoY2hhbm5lbCwgZ3VpZGVzLCBwaW4sIGZvcm1hdCAtIHNvcnQtc3R5bGUgY29udGV4dCBtZW51cykgKi8KLm1qci1tZnYtY2gtcG9wb3ZlciwKLm1qci1tZnYtZ3VpZGVzLXBvcG92ZXIsCi5tanItbWZ2LXBpbi1wb3BvdmVyLAoubWpyLW1mdi1mb3JtYXQtcG9wb3ZlciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBtaW4td2lkdGg6IDEyMHB4OwogICAgcGFkZGluZzogNnB4OwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnLCAwLjVyZW0pOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSwgdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSkpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7CiAgICBib3gtc2hhZG93OiAwIDhweCAyNHB4IHJnYmEoMCwgMCwgMCwgMC41NSk7CiAgICB6LWluZGV4OiAxMDAxMDsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KLm1qci1tZnYtY2gtcG9wb3Zlci5pcy1vcGVuLAoubWpyLW1mdi1ndWlkZXMtcG9wb3Zlci5pcy1vcGVuLAoubWpyLW1mdi1waW4tcG9wb3Zlci5pcy1vcGVuLAoubWpyLW1mdi1mb3JtYXQtcG9wb3Zlci5pcy1vcGVuIHsKICAgIGRpc3BsYXk6IGJsb2NrOwp9Ci8qIFRvb2xiYXIgaWNvbiBpbWFnZXMgLSBjaCBpY29uIGlzIGJsYWNrIChpbnZlcnRlZCksIGd1aWRlcyBpY29uIGlzIG5hdGl2ZSB3aGl0ZSAqLwoubWpyLW1mdi1jaC1pY29uIHsKICAgIHdpZHRoOiAxOHB4OwogICAgaGVpZ2h0OiAxOHB4OwogICAgZmlsdGVyOiBpbnZlcnQoMSk7CiAgICBvcGFjaXR5OiAwLjg1OwogICAgZGlzcGxheTogYmxvY2s7Cn0KLm1qci1tZnYtZ3VpZGVzLWljb24gewogICAgd2lkdGg6IDE4cHg7CiAgICBoZWlnaHQ6IDE4cHg7CiAgICBvcGFjaXR5OiAwLjg1OwogICAgZGlzcGxheTogYmxvY2s7Cn0KLm1qci1tZnYtY2gtdHJpZ2dlclthcmlhLWV4cGFuZGVkPSJ0cnVlIl0sCi5tanItbWZ2LWd1aWRlcy10cmlnZ2VyW2FyaWEtZXhwYW5kZWQ9InRydWUiXSwKLm1qci1tZnYtcGluLXRyaWdnZXJbYXJpYS1leHBhbmRlZD0idHJ1ZSJdLAoubWpyLW1mdi1mb3JtYXQtdHJpZ2dlclthcmlhLWV4cGFuZGVkPSJ0cnVlIl0gewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSAhaW1wb3J0YW50Owp9Ci8qIFBpbiBzbG90IGFjdGl2ZSBzdGF0ZSAqLwoubWpyLW1mdi1waW4tcG9wb3ZlciAubWpyLW1lbnUtaXRlbS5pcy1waW5uZWQgewogICAgYmFja2dyb3VuZDogcmdiYSg5NSwgMTc5LCAyNTUsIDAuMTYpOwogICAgY29sb3I6ICNhOGQ4ZmY7Cn0KLm1qci1tZnYtcGluLXBvcG92ZXIgLm1qci1tZW51LWl0ZW0uaXMtcGlubmVkIC5tanItbWVudS1pdGVtLWNoZWNrIHsKICAgIG9wYWNpdHk6IDEgIWltcG9ydGFudDsKfQovKiBGb3JtYXQgcG9wb3Zlcjogc2VwYXJhdG9yICsgb3BhY2l0eSBzbGlkZXIgcm93ICovCi5tanItbWZ2LWZvcm1hdC1zZXAgewogICAgaGVpZ2h0OiAxcHg7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkpOwogICAgbWFyZ2luOiA0cHggMnB4Owp9Ci5tanItbWZ2LWZvcm1hdC1zbGlkZXItcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBwYWRkaW5nOiA0cHggOHB4IDJweDsKfQoubWpyLW1mdi1mb3JtYXQtc2xpZGVyLWxhYmVsIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGNvbG9yOiB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKTsKICAgIG9wYWNpdHk6IDAuNjU7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZmxleC1zaHJpbms6IDA7Cn0KLm1qci1tZnYtZm9ybWF0LXBvcG92ZXIgaW5wdXRbdHlwZT0icmFuZ2UiXSB7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiA3MHB4OwogICAgYWNjZW50LWNvbG9yOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKfQoubWpyLW1mdi1mb3JtYXQtcG9wb3ZlciAubWpyLW1mdi10b29sYmFyLXJhbmdlLW91dCB7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2RkZCk7CiAgICBvcGFjaXR5OiAwLjY1OwogICAgbWluLXdpZHRoOiAzMHB4OwogICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICBmbGV4LXNocmluazogMDsKfQoKLm1qci1tZnYgLm1qci1pY29uLWJ0biB7CiAgICB3aWR0aDogMzBweDsKICAgIGhlaWdodDogMzBweDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYm9yZGVyLXJhZGl1czogN3B4OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0yKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHBhZGRpbmc6IDA7CiAgICBmbGV4LXNocmluazogMDsKICAgIHRyYW5zaXRpb246CiAgICAgICAgdHJhbnNmb3JtIDEyMG1zIGVhc2UsCiAgICAgICAgYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGNvbG9yIDEyMG1zIGVhc2UsCiAgICAgICAgYm94LXNoYWRvdyAxMjBtcyBlYXNlOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDQ1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDgwJSwgdmFyKC0tbWpyLWFjY2VudCkgOCUpOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuOmZvY3VzLXZpc2libGUgewogICAgb3V0bGluZTogbm9uZTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU4JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAyNCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1tZnYgLm1qci1pY29uLWJ0biAucGkgewogICAgZm9udC1zaXplOiAxM3B4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBvcGFjaXR5OiAwLjk7Cn0KCi8qIFVuaXZlcnNhbCBhY3RpdmUgaGlnaGxpZ2h0IC0gYW55IGFyaWEtcHJlc3NlZD0idHJ1ZSIgYnV0dG9uIGdldHMgYWNjZW50IGdsb3cuCiAgIFBsYWNlZCBiZWZvcmUgdGhlIGNvbG9yZWQgYWN0aXZlIGNsYXNzZXMgc28gdGhleSBjYW4gb3ZlcnJpZGUgd2l0aCB0aGVpciBvd24gY29sb3IuICovCi5tanItbWZ2IC5tanItaWNvbi1idG5bYXJpYS1wcmVzc2VkPSJ0cnVlIl0gewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDk1LCAxNzksIDI1NSwgMC41NSk7CiAgICBjb2xvcjogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMiwgIzMzMykgODAlLCB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKSAxNSUpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKSAyNSUsIHRyYW5zcGFyZW50KTsKfQoubWpyLW1mdiAubWpyLWljb24tYnRuW2FyaWEtcHJlc3NlZD0idHJ1ZSJdIC5waSB7CiAgICBvcGFjaXR5OiAxOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuLm1qci1saXZlLWFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MpIDYwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgY29sb3I6IHZhcigtLW1qci1zdGF0dXMtc3VjY2Vzcyk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLCB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MpIDEyJSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcykgMjUlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWZ2IC5tanItaWNvbi1idG4ubWpyLWxpdmUtYWN0aXZlIC5waSB7CiAgICBvcGFjaXR5OiAxOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuLm1qci1wcmV2aWV3LWFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA2MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4MCUsIHZhcigtLW1qci1hY2NlbnQpIDEyJSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDI1JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuLm1qci1wcmV2aWV3LWFjdGl2ZSAucGkgewogICAgb3BhY2l0eTogMTsKfQoKLm1qci1tZnYgLm1qci1pY29uLWJ0bi5tanItbm9kZXN0cmVhbS1hY3RpdmUgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCAjZmY5ODAwKSA2MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGNvbG9yOiB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZjk4MDApOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KAogICAgICAgIGluIHNyZ2IsCiAgICAgICAgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLAogICAgICAgIHZhcigtLW1qci1zdGF0dXMtd2FybmluZywgI2ZmOTgwMCkgMTIlCiAgICApOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZjk4MDApIDI1JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuLm1qci1ub2Rlc3RyZWFtLWFjdGl2ZSAucGkgewogICAgb3BhY2l0eTogMTsKfQoKLyogUG9wLWluIG1vZGUgKHZpZXdlciBwb3BwZWQgb3V0KTogcmFpc2UgYnV0dG9uIGNvbnRyYXN0L2JyaWdodG5lc3MgKi8KLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDkyJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSksCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDkyJSwgcmdiYSgwLCAwLCAwLCAwLjE4KSkKICAgICk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3NCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xOCkpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSksCiAgICAgICAgMCAyNHB4IDU2cHggcmdiYSgwLCAwLCAwLCAwLjQyKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItbWZ2LWhlYWRlciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4OCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA5MCUsIHJnYmEoMCwgMCwgMCwgMC4yNCkpCiAgICApOwogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc4JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KSk7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1oZWFkZXItdGl0bGUgewogICAgb3BhY2l0eTogMC45ODsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2VlZjRmZikgOTQlLCAjZmZmZmZmIDYlKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItbWZ2LXRvb2xiYXIgewogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDE4MGRlZywKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgODglLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgOTAlLCByZ2JhKDAsIDAsIDAsIDAuMjQpKQogICAgKTsKICAgIGJvcmRlci1ib3R0b20tY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3OCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCkpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1tZnYtdG9vbGJhci1zZXAgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc4JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1wcm9ncmVzcyB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA4MiUsICMwYTExMTggMTglKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgOTIlLCAjMDAwIDglKQogICAgKTsKICAgIGJvcmRlci1ib3R0b20tY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3OCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCkpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1tZnYtcHJvZ3Jlc3MtdGV4dCB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcsICNlZWY0ZmYpIDk0JSwgI2ZmZmZmZiA2JSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1jb250ZW50IHsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgcmFkaWFsLWdyYWRpZW50KAogICAgICAgICAgICBjaXJjbGUgYXQgdG9wLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMTAlLCB0cmFuc3BhcmVudCkgMCUsCiAgICAgICAgICAgIHRyYW5zcGFyZW50IDQyJQogICAgICAgICksCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDgyJSwgIzAwMCAxOCUpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1pY29uLWJ0biB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3NiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNikpOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDE4MGRlZywKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODYlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgOTIlLCByZ2JhKDAsIDAsIDAsIDAuMTgpKQogICAgKTsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2RkZCkgOTIlLCAjZmZmZmZmIDglKSAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSksCiAgICAgICAgMCA4cHggMThweCByZ2JhKDAsIDAsIDAsIDAuMTgpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1pY29uLWJ0bjpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1MiUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDU4JSwgdmFyKC0tbWpyLWFjY2VudCkgNDIlKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgNjIlLCB2YXIoLS1tanItYWNjZW50KSAzOCUpCiAgICApOwogICAgY29sb3I6ICNmNGY4ZmYgIWltcG9ydGFudDsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItaWNvbi1idG4gLnBpIHsKICAgIG9wYWNpdHk6IDE7CiAgICBjb2xvcjogaW5oZXJpdCAhaW1wb3J0YW50Owp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1pY29uLWJ0bi5tanItbGl2ZS1hY3RpdmUgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy1zdWNjZXNzKSA2MCUsICNmZmZmZmYgNDAlKTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcykgNjIlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy1zdWNjZXNzKSAzNiUsIHZhcigtLW1qci1zdXJmYWNlLTEpIDY0JSkKICAgICk7CiAgICBjb2xvcjogI2ZmZmZmZiAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiksCiAgICAgICAgMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MpIDI0JSwgdHJhbnNwYXJlbnQpLAogICAgICAgIDAgMCAxOHB4IHJnYmEoNzYsIDE3NSwgODAsIDAuMTgpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1pY29uLWJ0bi5tanItcHJldmlldy1hY3RpdmUgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTglLCAjZmZmZmZmIDQyJSk7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA2MiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAzNiUsIHZhcigtLW1qci1zdXJmYWNlLTEpIDY0JSkKICAgICk7CiAgICBjb2xvcjogI2ZmZmZmZiAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiksCiAgICAgICAgMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAyNCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAwIDAgMThweCByZ2JhKDk1LCAxNzksIDI1NSwgMC4xOCk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLWljb24tYnRuLm1qci1ub2Rlc3RyZWFtLWFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZjk4MDApIDU4JSwgI2ZmZmZmZiA0MiUpOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDE4MGRlZywKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCAjZmY5ODAwKSA2MiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZjk4MDApIDM2JSwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgNjQlKQogICAgKTsKICAgIGNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSwKICAgICAgICAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtd2FybmluZywgI2ZmOTgwMCkgMjQlLCB0cmFuc3BhcmVudCksCiAgICAgICAgMCAwIDE4cHggcmdiYSgyNTUsIDE1MiwgMCwgMC4xOCk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1waW4tYnRuIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc2JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KSk7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4NCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA5MiUsIHJnYmEoMCwgMCwgMCwgMC4xOCkpCiAgICApOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSA5MiUsICNmZmZmZmYgOCUpOwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1tZnYtcGluLWJ0bjpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1MiUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDU2JSwgdmFyKC0tbWpyLWFjY2VudCkgNDQlKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgNjQlLCB2YXIoLS1tanItYWNjZW50KSAzNiUpCiAgICApOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1tZnYtcGluLWJ0bi5pcy1waW5uZWQgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTglLCAjZmZmZmZmIDQyJSk7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA2MiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAzNiUsIHZhcigtLW1qci1zdXJmYWNlLTEpIDY0JSkKICAgICk7CiAgICBjb2xvcjogI2ZmZmZmZjsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItd3Mtc2lkZWJhciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA5NCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCkpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA5NCUsIHJnYmEoMCwgMCwgMCwgMC4xOCkpCiAgICApOwogICAgYm9yZGVyLWxlZnQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3OCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNikpOwogICAgYm94LXNoYWRvdzogaW5zZXQgMXB4IDAgMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDMpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImxlZnQiXSAubWpyLXdzLXNpZGViYXIgewogICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNzglLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItd3Mtc2lkZWJhci1oZWFkZXIgewogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDE4MGRlZywKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODQlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgOTIlLCByZ2JhKDAsIDAsIDAsIDAuMTgpKQogICAgKTsKICAgIGJvcmRlci1ib3R0b20tY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3NiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCkpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy1zaWRlYmFyLXRpdGxlIHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2VlZjRmZikgODIlLCB2YXIoLS1tanItbXV0ZWQpIDE4JSk7CiAgICBvcGFjaXR5OiAwLjg4Owp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy1ub2RlIHsKICAgIGJvcmRlci1ib3R0b20tY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3MiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy1ub2RlLWhlYWRlciB7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMCkpLAogICAgICAgIGxpbmVhci1ncmFkaWVudCgKICAgICAgICAgICAgMTgwZGVnLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgODYlLCB2YXIoLS1tanItYWNjZW50KSAxNCUpLAogICAgICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgODYlLCByZ2JhKDAsIDAsIDAsIDAuMTQpKQogICAgICAgICk7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLW5vZGUtdGl0bGUgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZWVmNGZmKSA5NCUsICNmZmZmZmYgNiUpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy13aWRnZXQtbGFiZWwsCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLXNpZGViYXItZW1wdHksCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLW5vZGUtZW1wdHkgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItbXV0ZWQpIDg0JSwgI2ZmZmZmZiAxNiUpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy1pbnB1dCB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgNzQlLCAjMDUwNzBhIDI2JSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3NCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xOCkpOwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy1pbnB1dDpmb2N1cyB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1OCUsICNmZmZmZmYgMTAlKTsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpLAogICAgICAgIDAgMCAwIDJweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMTglLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWZ2IC5tanItaWNvbi1idG4ubWpyLXBvcGluLWFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1OCUsICNmZmZmZmYgNDIlKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA0NSUsIHZhcigtLW1qci1hY2NlbnQpIDU1JSk7CiAgICBjb2xvcjogI2VlZjdmZjsKfQoKLyogLS0gQ29udGVudCB3cmFwcGVyIChob3Jpem9udGFsIGZsZXg6IGNvbnRlbnQgKyBzaWRlYmFyKSAtLS0tLS0tLS0tLS0tLSAqLwoubWpyLW1mdi1jb250ZW50LXdyYXBwZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXg6IDE7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLyogLS0gU2lkZWJhciBwb3NpdGlvbiB2YXJpYW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJsZWZ0Il0gewogICAgZmxleC1kaXJlY3Rpb246IHJvdzsKfQoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0ibGVmdCJdIC5tanItd3Mtc2lkZWJhciB7CiAgICBib3JkZXItbGVmdDogbm9uZTsKICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwp9Ci5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSB7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwp9Ci5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLXdzLXNpZGViYXIgewogICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMDsKICAgIHRyYW5zaXRpb246CiAgICAgICAgaGVpZ2h0IDAuMnMgZWFzZSwKICAgICAgICB3aWR0aCAwczsKfQoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci13cy1zaWRlYmFyLm9wZW4gewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDIyMHB4OwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIG1pbi1oZWlnaHQ6IDEyMHB4OwogICAgbWF4LWhlaWdodDogNjUlOwp9CgovKiAtLSBDb250ZW50IGFyZWEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5tanItbWZ2LWNvbnRlbnQgewogICAgZmxleDogMTsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBiYWNrZ3JvdW5kOiAjMGQwZDBkOwogICAgbWluLWhlaWdodDogMDsKfQoKLm1qci1tZnYtZ2VuLXNpZGViYXIgewogICAgZGlzcGxheTogbm9uZTsKICAgIGZsZXg6IDAgMCAzMjBweDsKICAgIHdpZHRoOiAzMjBweDsKICAgIG1pbi13aWR0aDogMjEwcHg7CiAgICBtYXgtd2lkdGg6IG1pbig0MiUsIDQyMHB4KTsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICBwYWRkaW5nOiAxMHB4OwogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTgsIDE4LCAyMCwgMC45Nik7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg4KTsKfQoKLm1qci1tZnYtZ2VuLXNpZGViYXIub3BlbiB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMTBweDsKfQoKLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImxlZnQiXSAubWpyLW1mdi1nZW4tc2lkZWJhciB7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwogICAgYm9yZGVyLXJpZ2h0OiBub25lOwp9CgoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0iYm90dG9tIl0gLm1qci1tZnYtZ2VuLXNpZGViYXIgewogICAgZmxleDogMCAwIDE4MHB4OwogICAgd2lkdGg6IDEwMCU7CiAgICBtYXgtd2lkdGg6IG5vbmU7CiAgICBtaW4td2lkdGg6IDA7CiAgICBtYXgtaGVpZ2h0OiA0MCU7CiAgICBib3JkZXItbGVmdDogbm9uZTsKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKfQoKLm1qci1tZnYtZ2VuLXNpZGViYXItdGl0bGUgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NCk7Cn0KCi5tanItbWZ2LWdlbi1zaWRlYmFyLXNlY3Rpb24gewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDZweDsKICAgIHBhZGRpbmctdG9wOiA4cHg7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwp9CgoubWpyLW1mdi1nZW4tc2lkZWJhci1zZWN0aW9uOmZpcnN0LW9mLXR5cGUgewogICAgcGFkZGluZy10b3A6IDA7CiAgICBib3JkZXItdG9wOiBub25lOwp9CgoubWpyLW1mdi1nZW4tc2lkZWJhci1oZWFkaW5nIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcyKTsKfQoKLm1qci1tZnYtZ2VuLXNpZGViYXItYm9keSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMTBweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ1OwogICAgd29yZC1icmVhazogYnJlYWstd29yZDsKfQoKLm1qci1tZnYtZ2VuLXRpbWUtYmFkZ2UgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBnYXA6IDEycHg7CiAgICBwYWRkaW5nOiA4cHggMTBweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjI0LCAyNTUsIDEyMiwgMC40Mik7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHJnYmEoMjI0LCAyNTUsIDEyMiwgMC4xNiksIHJnYmEoNzYsIDE3NSwgODAsIDAuMSkpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHJnYmEoMjI0LCAyNTUsIDEyMiwgMC4xMikgaW5zZXQ7CiAgICBjdXJzb3I6IGNvcHk7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIGJhY2tncm91bmQgMC4xNnMgZWFzZSwKICAgICAgICBib3JkZXItY29sb3IgMC4xNnMgZWFzZSwKICAgICAgICBib3gtc2hhZG93IDAuMTZzIGVhc2U7Cn0KCi5tanItbWZ2LWdlbi10aW1lLWxhYmVsIHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzIpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7Cn0KCi5tanItbWZ2LWdlbi10aW1lLXZhbHVlIHsKICAgIGNvbG9yOiAjZTBmZjdhOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgZm9udC13ZWlnaHQ6IDgwMDsKICAgIGZvbnQtZmFtaWx5OiBDb25zb2xhcywgTW9uYWNvLCBtb25vc3BhY2U7Cn0KCi5tanItbWZ2LWdlbi1jYXJkIHsKICAgIC0tbWpyLW1mdi1nZW4tYWNjZW50OiAjMjE5NmYzOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDhweDsKICAgIHBhZGRpbmc6IDEycHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLW1mdi1nZW4tYWNjZW50KSA0NSUsIHRyYW5zcGFyZW50KTsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxMzVkZWcsCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1tZnYtZ2VuLWFjY2VudCkgMTYlLCB0cmFuc3BhcmVudCkgMCUsCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1tZnYtZ2VuLWFjY2VudCkgOCUsIHRyYW5zcGFyZW50KSAxMDAlCiAgICApOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItbWZ2LWdlbi1hY2NlbnQpIDE0JSwgdHJhbnNwYXJlbnQpIGluc2V0OwogICAgY3Vyc29yOiBjb3B5OwogICAgdHJhbnNpdGlvbjoKICAgICAgICBiYWNrZ3JvdW5kIDAuMTZzIGVhc2UsCiAgICAgICAgYm9yZGVyLWNvbG9yIDAuMTZzIGVhc2UsCiAgICAgICAgYm94LXNoYWRvdyAwLjE2cyBlYXNlOwp9CgoubWpyLW1mdi1nZW4tY2FyZC0tc2VlZCB7CiAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGJvcmRlci13aWR0aDogMnB4Owp9CgoubWpyLW1mdi1nZW4tY2FyZC0tY29tcGFjdCB7CiAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogMTJweDsKfQoKLm1qci1tZnYtZ2VuLWNhcmQtLWNvbXBhY3QgLm1qci1tZnYtZ2VuLWNhcmQtdGl0bGUsCi5tanItbWZ2LWdlbi1jYXJkLS1jb21wYWN0IC5tanItbWZ2LWdlbi1jYXJkLXZhbHVlIHsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItbWZ2LWdlbi1jYXJkOmhvdmVyLAoubWpyLW1mdi1nZW4tdGltZS1iYWRnZTpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItbWZ2LWdlbi1hY2NlbnQsICNlMGZmN2EpIDcwJSwgdHJhbnNwYXJlbnQpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItbWZ2LWdlbi1hY2NlbnQsICNlMGZmN2EpIDI0JSwgdHJhbnNwYXJlbnQpCiAgICAgICAgaW5zZXQ7Cn0KCi5tanItbWZ2LWdlbi1jb3B5LWZsYXNoIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzYsIDE3NSwgODAsIDAuMjgpICFpbXBvcnRhbnQ7Cn0KCi5tanItbWZ2LWdlbi1jYXJkLXRpdGxlIHsKICAgIGNvbG9yOiB2YXIoLS1tanItbWZ2LWdlbi1hY2NlbnQpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7Cn0KCi5tanItbWZ2LWdlbi1jYXJkLXZhbHVlIHsKICAgIGNvbG9yOiB2YXIoLS1mZy1jb2xvciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkyKSk7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBtaW4td2lkdGg6IDA7CiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwp9CgoubWpyLW1mdi1nZW4tY2FyZC12YWx1ZS5pcy1jb21wYWN0IHsKICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKfQoKLm1qci1tZnYtZ2VuLWNhcmQtdmFsdWUuaXMtbXVsdGlsaW5lIHsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKfQoKLm1qci1tZnYtZ2VuLWNhcmQtLXNlZWQgLm1qci1tZnYtZ2VuLWNhcmQtdmFsdWUgewogICAgZm9udC1zaXplOiAxOHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGZvbnQtZmFtaWx5OiBDb25zb2xhcywgTW9uYWNvLCBtb25vc3BhY2U7CiAgICBsZXR0ZXItc3BhY2luZzogMXB4OwogICAgY29sb3I6ICNmZmY7Cn0KCi5tanItbWZ2LWdlbi1jYXJkLXZhbHVlLmlzLWZpZWxkcyB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICBnYXA6IDhweDsKfQoKLm1qci1tZnYtZ2VuLWZpZWxkIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCg3OHB4LCBhdXRvKSAxZnI7CiAgICBnYXA6IDEwcHg7CiAgICBhbGlnbi1pdGVtczogc3RhcnQ7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItbWZ2LWdlbi1maWVsZC1sYWJlbCB7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkLCByZ2JhKDE4MCwgMTgwLCAxODAsIDAuNzIpKTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCi5tanItbWZ2LWdlbi1maWVsZC12YWx1ZSB7CiAgICBjb2xvcjogdmFyKC0tZmctY29sb3IsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSkpOwogICAgbWluLXdpZHRoOiAwOwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgd29yZC1icmVhazogYnJlYWstd29yZDsKfQoKLm1qci1tZnYtZ2VuLXNpZGViYXItYm9keSBzdHJvbmcgewogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIG1hcmdpbi1yaWdodDogNHB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSk7Cn0KCi5tanItbWZ2LWdlbi1zaWRlYmFyLWJvZHkgW2RhdGEtZmllbGQ9InByb21wdCJdIHN0cm9uZyB7CiAgICBjb2xvcjogIzdlYzhmZjsKfQoubWpyLW1mdi1nZW4tc2lkZWJhci1ib2R5IFtkYXRhLWZpZWxkPSJzZWVkIl0gc3Ryb25nIHsKICAgIGNvbG9yOiAjZmZkNDdhOwp9Ci5tanItbWZ2LWdlbi1zaWRlYmFyLWJvZHkgW2RhdGEtZmllbGQ9Im1vZGVsIl0gc3Ryb25nIHsKICAgIGNvbG9yOiAjN2RkYThhOwp9Ci5tanItbWZ2LWdlbi1zaWRlYmFyLWJvZHkgW2RhdGEtZmllbGQ9ImxvcmEiXSBzdHJvbmcgewogICAgY29sb3I6ICNkNDhjZmY7Cn0KLm1qci1tZnYtZ2VuLXNpZGViYXItYm9keSBbZGF0YS1maWVsZD0ic2FtcGxlciJdIHN0cm9uZyB7CiAgICBjb2xvcjogI2ZmOWY3YTsKfQoubWpyLW1mdi1nZW4tc2lkZWJhci1ib2R5IFtkYXRhLWZpZWxkPSJzY2hlZHVsZXIiXSBzdHJvbmcgewogICAgY29sb3I6ICNmZjdhOWY7Cn0KLm1qci1tZnYtZ2VuLXNpZGViYXItYm9keSBbZGF0YS1maWVsZD0iY2ZnIl0gc3Ryb25nIHsKICAgIGNvbG9yOiAjN2E5ZmZmOwp9Ci5tanItbWZ2LWdlbi1zaWRlYmFyLWJvZHkgW2RhdGEtZmllbGQ9InN0ZXAiXSBzdHJvbmcgewogICAgY29sb3I6ICM3YWZmZDQ7Cn0KLm1qci1tZnYtZ2VuLXNpZGViYXItYm9keSBbZGF0YS1maWVsZD0iZ2VuVGltZSJdIHN0cm9uZyB7CiAgICBjb2xvcjogI2UwZmY3YTsKfQoKLm1qci1tZnYtZ2VuLXNpZGViYXItYm9keSBkaXYgewogICAgbWFyZ2luLWJvdHRvbTogNXB4Owp9CgoubWpyLW1mdi1nZW4tc2lkZWJhci1ib2R5IGRpdjpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1ib3R0b206IDA7Cn0KCi5tanItbWZ2LW92ZXJsYXktY2FudmFzIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDEyOwp9CgoubWpyLW1mdi10b29sYmFyLXNlbGVjdCB7CiAgICBoZWlnaHQ6IDI0cHg7CiAgICBwYWRkaW5nOiAwIDZweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJvcmRlcjogMC44cHggc29saWQgcmdiYSgxOTYsIDIwMiwgMjEwLCAwLjI0KTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjEwLCAyMTQsIDIyMCwgMC4wNiksIHJnYmEoMjEwLCAyMTQsIDIyMCwgMC4wMikpOwogICAgY29sb3I6IHJnYmEoMjMwLCAyMzMsIDIzOCwgMC45Mik7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBvdXRsaW5lOiBub25lOwp9CgoubWpyLW1mdi10b29sYmFyLXJhbmdlIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4Owp9CgoubWpyLW1mdi10b29sYmFyLXJhbmdlIGlucHV0W3R5cGU9InJhbmdlIl0gewogICAgd2lkdGg6IDcycHg7CiAgICBhY2NlbnQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44NSk7Cn0KCi5tanItbWZ2LXRvb2xiYXItcmFuZ2Utb3V0IHsKICAgIG1pbi13aWR0aDogMzBweDsKICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKfQoKLyogRVYgc2xpZGVyIGFjdGl2ZSBzdGF0ZSAodmFsdWUgIT0gMCkgKi8KLm1qci1tZnYtdG9vbGJhci1yYW5nZS5pcy1hY3RpdmUgaW5wdXRbdHlwZT0icmFuZ2UiXSB7CiAgICBhY2NlbnQtY29sb3I6ICNmNWM4NDI7Cn0KLm1qci1tZnYtdG9vbGJhci1yYW5nZS5pcy1hY3RpdmUgLm1qci1tZnYtdG9vbGJhci1yYW5nZS1vdXQgewogICAgY29sb3I6ICNmNWM4NDI7CiAgICBmb250LXdlaWdodDogNjAwOwp9CgoubWpyLW1mdi1tZWRpYS1wcm9ncmVzcyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDEwcHg7CiAgICBsZWZ0OiAxMHB4OwogICAgei1pbmRleDogNjsKICAgIG1heC13aWR0aDogY2FsYygxMDAlIC0gMjBweCk7CiAgICBwYWRkaW5nOiA1cHggOXB4OwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm9yZGVyOiAxcHggc29saWQKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KSkgODglLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgcmdiYSg1LCA4LCAxNCwgMC44NikgODYlLCB2YXIoLS1tanItc3VyZmFjZS0wLCAjMTExKSAxNCUpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNmNWY3ZmEpOwogICAgYm94LXNoYWRvdzogMCAycHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMjgpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBvcGFjaXR5OiAwOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00cHgpOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBvcGFjaXR5IDAuMTZzIGVhc2UsCiAgICAgICAgdHJhbnNmb3JtIDAuMTZzIGVhc2U7Cn0KCi5tanItbWZ2LW1lZGlhLXByb2dyZXNzLmlzLXZpc2libGUgewogICAgb3BhY2l0eTogMTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKfQoKLm1qci1tZnYtbWVkaWEtcHJvZ3Jlc3MuaXMtZXJyb3IgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy1lcnJvciwgI2ZmNWM3YSkgNzIlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgcmdiYSg2MCwgMTAsIDE4LCAwLjkpIDgyJSwgdmFyKC0tbWpyLXN1cmZhY2UtMCwgIzExMSkgMTglKTsKfQoKLm1qci1tZnYtbWVkaWEtcHJvZ3Jlc3MtdGV4dCB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGluZS1oZWlnaHQ6IDEuMjsKfQoKLyogLS0gV29ya2Zsb3cgU2lkZWJhciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoubWpyLXdzLXNpZGViYXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICB3aWR0aDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xLCAjMmEyYTJhKTsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7CiAgICB0cmFuc2l0aW9uOiB3aWR0aCAwLjJzIGVhc2U7CiAgICBmbGV4LXNocmluazogMDsKfQoKLm1qci13cy1zaWRlYmFyLm9wZW4gewogICAgd2lkdGg6IDI2MHB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIG1pbi13aWR0aDogMTgwcHg7CiAgICBtYXgtd2lkdGg6IDY1JTsKICAgIHRyYW5zaXRpb246IG5vbmU7Cn0KCi5tanItd3Mtc2lkZWJhci1oZWFkZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBwYWRkaW5nOiA2cHggMTBweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgbWluLWhlaWdodDogMzRweDsKfQoubWpyLXdzLXNpZGViYXItdGl0bGUgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7CiAgICBvcGFjaXR5OiAwLjY1Owp9Ci5tanItd3Mtc2lkZWJhci1ib2R5IHsKICAgIGZsZXg6IDE7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIHBhZGRpbmc6IDA7Cn0KLm1qci13cy1zaWRlYmFyLWVtcHR5IHsKICAgIHBhZGRpbmc6IDI0cHggMTZweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgbGluZS1oZWlnaHQ6IDEuNTsKfQoKLyogLS0gVGFiIGJhciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLm1qci13cy10YWItYmFyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LXNocmluazogMDsKICAgIGdhcDogMnB4OwogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4xOCk7Cn0KCi5tanItd3MtdGFiIHsKICAgIGZsZXg6IDE7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA1cHg7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgYm9yZGVyOiBub25lOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQ1KTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIGJhY2tncm91bmQgMC4xNXMsCiAgICAgICAgY29sb3IgMC4xNXM7Cn0KCi5tanItd3MtdGFiOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNyk7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc1KTsKfQoKLm1qci13cy10YWIuaXMtYWN0aXZlIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoOTksIDE1NSwgMjU1LCAwLjE1KTsKICAgIGNvbG9yOiAjNjM5YmZmOwp9CgovKiAtLSBOb2RlcyB0YWIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoubWpyLXdzLW5vZGVzLXRhYiB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGZsZXg6IDE7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLyogR3JhcGggTWFwIHRhYiAqLwoubWpyLXdnbSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIG1pbi1oZWlnaHQ6IDEwMCU7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgyKTsKfQoKLm1qci13Z20tbWFwLXdyYXAgewogICAgaGVpZ2h0OiAxOTBweDsKICAgIG1pbi1oZWlnaHQ6IDE1MHB4OwogICAgbWFyZ2luOiA4cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yMik7Cn0KCi5tanItd2dtLXByZXZpZXcgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjMyKTsKfQoKLm1qci13Z20tcHJldmlldyAubWpyLW1mdi1tZWRpYSwKLm1qci13Z20tcHJldmlldyAubWpyLW1mdi1wbGF5ZXItaG9zdCwKLm1qci13Z20tcHJldmlldyAubWpyLW1vZGVsM2QtaG9zdCwKLm1qci13Z20tcHJldmlldy1tZWRpYSB7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBtYXgtaGVpZ2h0OiAxMDAlOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBvYmplY3QtZml0OiBjb250YWluOwp9CgoubWpyLXdnbS1wcmV2aWV3LWVtcHR5IHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzQpOwogICAgZm9udC1zaXplOiAxMXB4Owp9CgoubWpyLXdnbS1jYW52YXMgewogICAgZGlzcGxheTogYmxvY2s7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGN1cnNvcjogZ3JhYjsKICAgIHRvdWNoLWFjdGlvbjogbm9uZTsKfQoKLm1qci13Z20tY2FudmFzOmFjdGl2ZSB7CiAgICBjdXJzb3I6IGdyYWJiaW5nOwp9CgoubWpyLXdnbS0tbGFyZ2UgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjE4KTsKfQoKLm1qci13Z20tLWxhcmdlIC5tanItd2dtLW1hcC13cmFwIHsKICAgIGZsZXg6IDE7CiAgICBoZWlnaHQ6IGF1dG87CiAgICBtaW4taGVpZ2h0OiAwOwogICAgbWFyZ2luOiAwOwogICAgYm9yZGVyOiBub25lOwogICAgYm9yZGVyLXJhZGl1czogMDsKfQoKLm1qci13Z20tLWxhcmdlIC5tanItd2dtLXN0YXR1cyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAxMHB4OwogICAgdG9wOiAxMHB4OwogICAgei1pbmRleDogMjsKICAgIG1heC13aWR0aDogbWluKDQyMHB4LCBjYWxjKDEwMCUgLSAyMHB4KSk7CiAgICBwYWRkaW5nOiA1cHggOHB4OwogICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC41Mik7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc0KTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig4cHgpOwp9CgoubWpyLXdnbS10b29sYmFyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDEwcHg7CiAgICB0b3A6IDQ2cHg7CiAgICB6LWluZGV4OiAyOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBnYXA6IDZweDsKICAgIG1heC13aWR0aDogbWluKDQyMHB4LCBjYWxjKDEwMCUgLSAyMHB4KSk7Cn0KCi5tanItd2dtLW1vZGUgewogICAgbWluLWhlaWdodDogMjZweDsKICAgIHBhZGRpbmc6IDNweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNSk7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcyKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKfQoKLm1qci13Z20tbW9kZTpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMTQ5LCAxODMsIDI1NSwgMC40NSk7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwp9CgoubWpyLXdnbS1tb2RlLmlzLWFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMTI0LCAxODYsIDI1NSwgMC42Mik7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDc5LCAxMjMsIDIxNCwgMC4yNik7CiAgICBjb2xvcjogcmdiYSgyMzUsIDI0NSwgMjU1LCAwLjk2KTsKfQoKLm1qci13Z20tLWxhcmdlIC5tanItd2dtLWRldGFpbHMgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgcmlnaHQ6IDEwcHg7CiAgICB0b3A6IDEwcHg7CiAgICBib3R0b206IDEwcHg7CiAgICB6LWluZGV4OiAyOwogICAgd2lkdGg6IG1pbigzMjBweCwgMzglKTsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICBwYWRkaW5nOiAxMHB4OwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTgsIDIwLCAyNiwgMC44NCk7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7Cn0KCi5tanItd2dtLS1sYXJnZSAubWpyLXdnbS1hY3Rpb24gewogICAgbWluLWhlaWdodDogMzBweDsKfQoKLm1qci13Z20tLWxhcmdlIC5tanItd2dtLXBhcmFtIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKfQoKLm1qci13Z20tc3RhdHVzIHsKICAgIHBhZGRpbmc6IDAgMTBweCA4cHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQyKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1Owp9CgoubWpyLXdnbS1kZXRhaWxzIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiA2cHg7CiAgICBwYWRkaW5nOiAwIDhweCAxMHB4Owp9CgoubWpyLXdnbS1ub2RlLXRpdGxlIHsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKfQoKLm1qci13Z20tbm9kZS1tZXRhIHsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBtYXJnaW4tdG9wOiAtNHB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40Mik7CiAgICBmb250LXNpemU6IDEwcHg7Cn0KCi5tanItd2dtLWFjdGlvbnMgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgZ2FwOiA0cHg7Cn0KCi5tanItd2dtLWFjdGlvbiB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogN3B4OwogICAgbWluLWhlaWdodDogMjhweDsKICAgIHBhZGRpbmc6IDVweCA4cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOwogICAgYm9yZGVyLXJhZGl1czogNXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzYpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY3Vyc29yOiBwb2ludGVyOwp9CgoubWpyLXdnbS1hY3Rpb246aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDk5LCAxNTUsIDI1NSwgMC40NSk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDk5LCAxNTUsIDI1NSwgMC4xMik7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkyKTsKfQoKLm1qci13Z20tYWN0aW9uLmlzLW9rIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSg3NiwgMTc1LCA4MCwgMC41NSk7CiAgICBjb2xvcjogcmdiYSgxOTAsIDI1NSwgMTk2LCAwLjk2KTsKfQoKLm1qci13Z20tcGFyYW1zIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDRweDsKICAgIG1hcmdpbi10b3A6IDJweDsKfQoKLm1qci13Z20tcGFyYW0gewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDY0cHgsIDAuNDJmcikgbWlubWF4KDAsIDFmcik7CiAgICBnYXA6IDhweDsKICAgIHBhZGRpbmc6IDVweCA3cHg7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMTgpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgbGluZS1oZWlnaHQ6IDEuMzU7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIHRyYW5zaXRpb246CiAgICAgICAgYmFja2dyb3VuZCAxMjBtcyBlYXNlLAogICAgICAgIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlOwp9CgoubWpyLXdnbS1wYXJhbTpob3ZlciwKLm1qci13Z20tcGFyYW06Zm9jdXMtdmlzaWJsZSB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpOwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci13Z20tcGFyYW0uaXMtb2sgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDc5LCAyMTAsIDEyNSwgMC43KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzksIDIxMCwgMTI1LCAwLjE2KTsKfQoKLm1qci13Z20tcGFyYW0uaXMtZXJyb3IgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgOTAsIDkwLCAwLjcpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDkwLCA5MCwgMC4xNik7Cn0KCi5tanItd2dtLXBhcmFtLWtleSB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40OCk7Cn0KCi5tanItd2dtLXBhcmFtLXZhbHVlIHsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgyKTsKfQoKLm1qci13Z20tbm9kZS12aXN1YWwgewogICAgLS1tanItd2dtLW5vZGUtYWNjZW50OiByZ2JhKDExNSwgMTU1LCAyNTUsIDAuODgpOwogICAgLS1tanItd2dtLW5vZGUtYWNjZW50LXNvZnQ6IHJnYmEoMTE1LCAxNTUsIDI1NSwgMC4yMik7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA4cHg7CiAgICBtYXJnaW4tdG9wOiAycHg7CiAgICBwYWRkaW5nOiA4cHg7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXdnbS1ub2RlLWFjY2VudCkgMzQlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCksCiAgICAgICAgMCAxMHB4IDI0cHggcmdiYSgwLCAwLCAwLCAwLjI0KTsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci13Z20tbm9kZS1hY2NlbnQtc29mdCkgMTAwJSwgdHJhbnNwYXJlbnQpLCByZ2JhKDQ0LCA1NiwgODgsIDAuMikpLAogICAgICAgIHJnYmEoMTMsIDE2LCAyNCwgMC44NSk7Cn0KCi5tanItd2dtLW5vZGUtdmlzdWFsOjpiZWZvcmUgewogICAgY29udGVudDogIiI7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGhlaWdodDogMnB4OwogICAgbWFyZ2luOiAtOHB4IC04cHggNnB4OwogICAgYm9yZGVyLXJhZGl1czogNnB4IDZweCAwIDA7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHZhcigtLW1qci13Z20tbm9kZS1hY2NlbnQpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKfQoKLm1qci13Z20tbm9kZS12aXN1YWwuaXMtbW9kZWwgewogICAgLS1tanItd2dtLW5vZGUtYWNjZW50OiByZ2JhKDEyNCwgMTg2LCAyNTUsIDAuOSk7CiAgICAtLW1qci13Z20tbm9kZS1hY2NlbnQtc29mdDogcmdiYSg3MCwgMTIzLCAxODEsIDAuMzQpOwp9CgoubWpyLXdnbS1ub2RlLXZpc3VhbC5pcy1zYW1wbGVyIHsKICAgIC0tbWpyLXdnbS1ub2RlLWFjY2VudDogcmdiYSgxNDMsIDIyOCwgMTY3LCAwLjkpOwogICAgLS1tanItd2dtLW5vZGUtYWNjZW50LXNvZnQ6IHJnYmEoNjQsIDEzMywgODgsIDAuMzQpOwp9CgoubWpyLXdnbS1ub2RlLXZpc3VhbC5pcy10ZXh0IHsKICAgIC0tbWpyLXdnbS1ub2RlLWFjY2VudDogcmdiYSgyNTUsIDE5MiwgMTE0LCAwLjkpOwogICAgLS1tanItd2dtLW5vZGUtYWNjZW50LXNvZnQ6IHJnYmEoMTU0LCAxMDIsIDQ5LCAwLjM0KTsKfQoKLm1qci13Z20tbm9kZS12aXN1YWwuaXMtbWVkaWEgewogICAgLS1tanItd2dtLW5vZGUtYWNjZW50OiByZ2JhKDE1NCwgMTcwLCAyNTUsIDAuOSk7CiAgICAtLW1qci13Z20tbm9kZS1hY2NlbnQtc29mdDogcmdiYSg4MywgOTMsIDE2NSwgMC4zNCk7Cn0KCi5tanItd2dtLW5vZGUtdmlzdWFsLmlzLWNvbnRyb2wgewogICAgLS1tanItd2dtLW5vZGUtYWNjZW50OiByZ2JhKDI1NSwgMTM5LCAxNjksIDAuOSk7CiAgICAtLW1qci13Z20tbm9kZS1hY2NlbnQtc29mdDogcmdiYSgxNDUsIDcwLCA5NSwgMC4zNCk7Cn0KCi5tanItd2dtLW5vZGUtdmlzdWFsLmlzLWxvZ2ljIHsKICAgIC0tbWpyLXdnbS1ub2RlLWFjY2VudDogcmdiYSgxODgsIDE2OCwgMjU1LCAwLjkpOwogICAgLS1tanItd2dtLW5vZGUtYWNjZW50LXNvZnQ6IHJnYmEoMTA1LCA4NiwgMTUzLCAwLjM0KTsKfQoKLm1qci13Z20tbm9kZS12aXN1YWwtaGVhZGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nLWJvdHRvbTogNnB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItd2dtLW5vZGUtYWNjZW50KSAyNSUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCkpOwp9CgoubWpyLXdnbS1ub2RlLXZpc3VhbC10eXBlIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBjb2xvcjogcmdiYSgyMzYsIDI0NCwgMjU1LCAwLjk0KTsKICAgIHRleHQtc2hhZG93OiAwIDFweCAwIHJnYmEoMCwgMCwgMCwgMC4zNSk7Cn0KCi5tanItd2dtLW5vZGUtdmlzdWFsLWlkIHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGNvbG9yOiByZ2JhKDE5NCwgMjEzLCAyNTUsIDAuNzgpOwp9CgoubWpyLXdnbS1ub2RlLXBvcnRzIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7CiAgICBnYXA6IDhweDsKfQoKLm1qci13Z20tbm9kZS1wb3J0cy1jb2wgewogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXdnbS1ub2RlLXBvcnRzLXRpdGxlIHsKICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAyZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40NSk7Cn0KCi5tanItd2dtLW5vZGUtcG9ydHMtbGlzdCB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiAzcHg7Cn0KCi5tanItd2dtLW5vZGUtcG9ydCwKLm1qci13Z20tbm9kZS1wb3J0LWVtcHR5IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBtaW4taGVpZ2h0OiAxOHB4OwogICAgcGFkZGluZzogMnB4IDZweDsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMjQpOwp9CgoubWpyLXdnbS1ub2RlLXBvcnQtZW1wdHkgewogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNik7Cn0KCi5tanItd2dtLW5vZGUtcG9ydC1kb3QgewogICAgd2lkdGg6IDhweDsKICAgIGhlaWdodDogOHB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBmbGV4OiAwIDAgYXV0bzsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpIGluc2V0Owp9CgoubWpyLXdnbS1ub2RlLXBvcnQtZG90LmlzLWluIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTM1LCAxOTYsIDI1NSwgMC45KTsKfQoKLm1qci13Z20tbm9kZS1wb3J0LWRvdC5pcy1vdXQgewogICAgYmFja2dyb3VuZDogcmdiYSgxNDQsIDIzOCwgMTc0LCAwLjkpOwp9CgoubWpyLXdnbS1ub2RlLXBvcnQtbmFtZSB7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzgpOwp9CgoubWpyLXdnbS1ub2RlLXBvcnQtdHlwZSB7CiAgICBmbGV4OiAwIDAgYXV0bzsKICAgIG1heC13aWR0aDogNDUlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGZvbnQtc2l6ZTogOXB4OwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBwYWRkaW5nOiAxcHggNXB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKICAgIGNvbG9yOiByZ2JhKDIyNCwgMjM2LCAyNTUsIDAuOSk7Cn0KCi5tanItd2dtLW5vZGUtd2lkZ2V0cyB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA0cHg7Cn0KCi5tanItd2dtLW5vZGUtd2lkZ2V0cy10aXRsZSB7CiAgICBtYXJnaW4tYm90dG9tOiAycHg7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMmVtOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNDUpOwp9CgoubWpyLXdnbS1ub2RlLXdpZGdldCwKLm1qci13Z20tbm9kZS13aWRnZXQtZW1wdHkgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDcwcHgsIDAuNDJmcikgbWlubWF4KDAsIDFmcik7CiAgICBnYXA6IDhweDsKICAgIHBhZGRpbmc6IDRweCA2cHg7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOwp9CgoubWpyLXdnbS1ub2RlLXdpZGdldCB7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIGJhY2tncm91bmQgMTIwbXMgZWFzZSwKICAgICAgICBib3JkZXItY29sb3IgMTIwbXMgZWFzZTsKfQoKLm1qci13Z20tbm9kZS13aWRnZXQ6aG92ZXIsCi5tanItd2dtLW5vZGUtd2lkZ2V0OmZvY3VzLXZpc2libGUgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA5KTsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci13Z20tbm9kZS13aWRnZXQuaXMtb2sgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDc5LCAyMTAsIDEyNSwgMC43KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzksIDIxMCwgMTI1LCAwLjE2KTsKfQoKLm1qci13Z20tbm9kZS13aWRnZXQuaXMtZXJyb3IgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgOTAsIDkwLCAwLjcpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDkwLCA5MCwgMC4xNik7Cn0KCi5tanItd2dtLW5vZGUtd2lkZ2V0LWVtcHR5IHsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zNCk7Cn0KCi5tanItd2dtLW5vZGUtd2lkZ2V0LWtleSB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41Mik7Cn0KCi5tanItd2dtLW5vZGUtd2lkZ2V0LXZhbHVlIHsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg4KTsKfQoKLm1qci13Z20tbm9kZS13aWRnZXQuaXMtbXVsdGlsaW5lIHsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgYWxpZ24taXRlbXM6IHN0YXJ0OwogICAgZ2FwOiA0cHg7Cn0KCi5tanItd2dtLW5vZGUtd2lkZ2V0LmlzLW11bHRpbGluZSAubWpyLXdnbS1ub2RlLXdpZGdldC1rZXkgewogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci13Z20tbm9kZS13aWRnZXQuaXMtbXVsdGlsaW5lIC5tanItd2dtLW5vZGUtd2lkZ2V0LXZhbHVlIHsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7CiAgICBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgbWF4LWhlaWdodDogOS4yZW07CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgcGFkZGluZy1yaWdodDogMnB4Owp9CgoubWpyLXdnbS1ub2RlLXdpZGdldC5pcy1tdWx0aWxpbmUuaXMtdGV4dC1maWVsZCAubWpyLXdnbS1ub2RlLXdpZGdldC12YWx1ZSB7CiAgICBtYXgtaGVpZ2h0OiAxNmVtOwogICAgbGluZS1oZWlnaHQ6IDEuNDsKfQoKLm1qci13Z20tbm9kZS13aWRnZXQtbW9yZSB7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQ2KTsKICAgIHRleHQtYWxpZ246IHJpZ2h0Owp9CgpAbWVkaWEgKG1heC13aWR0aDogODIwcHgpIHsKICAgIC5tanItd2dtLS1sYXJnZSAubWpyLXdnbS1kZXRhaWxzIHsKICAgICAgICB3aWR0aDogbWluKDM4MHB4LCBjYWxjKDEwMCUgLSAyMHB4KSk7CiAgICB9CgogICAgLm1qci13Z20tbm9kZS1wb3J0cyB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICB9Cn0KCi5tanItd3Mtc2VhcmNoLXdyYXAgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBmbGV4LXNocmluazogMDsKICAgIHBhZGRpbmc6IDZweCA4cHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7Cn0KCi5tanItd3Mtc2VhcmNoLWljb24gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMTZweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLm1qci13cy1zZWFyY2ggewogICAgZmxleDogMTsKICAgIHBhZGRpbmc6IDRweCAyOHB4IDRweCAyNnB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjM1KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg1KTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIG91dGxpbmU6IG5vbmU7Cn0KCi5tanItd3Mtc2VhcmNoOjpwbGFjZWhvbGRlciB7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI4KTsKfQoKLm1qci13cy1zZWFyY2g6Zm9jdXMgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDk5LCAxNTUsIDI1NSwgMC41KTsKfQoKLm1qci13cy1zZWFyY2gtY2xlYXIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgcmlnaHQ6IDE0cHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgd2lkdGg6IDE4cHg7CiAgICBoZWlnaHQ6IDE4cHg7CiAgICBwYWRkaW5nOiAwOwogICAgYm9yZGVyOiBub25lOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgYm9yZGVyLXJhZGl1czogM3B4Owp9CgoubWpyLXdzLXNlYXJjaC1jbGVhcjpob3ZlciB7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKfQoKLm1qci13cy1ub2Rlcy1saXN0IHsKICAgIGZsZXg6IDE7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgcGFkZGluZzogNHB4IDA7Cn0KCi5tanItd3Mtbm9kZS1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDZweDsKICAgIHBhZGRpbmc6IDVweCAxMHB4IDVweCAxMnB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7CiAgICBtaW4taGVpZ2h0OiAzMnB4OwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzOwp9CgoubWpyLXdzLW5vZGUtcm93OmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7Cn0KCi5tanItd3Mtbm9kZS1yb3ctdHlwZSB7CiAgICBmbGV4OiAxOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43OCk7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwp9CgoubWpyLXdzLW5vZGUtcm93LXRpdGxlIHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNCk7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgbWF4LXdpZHRoOiA4MHB4OwogICAgZmxleC1zaHJpbms6IDA7Cn0KCi5tanItd3Mtbm9kZS1sb2NhdGUgewogICAgZmxleC1zaHJpbms6IDA7CiAgICB3aWR0aDogMjJweDsKICAgIGhlaWdodDogMjJweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBwYWRkaW5nOiAwOwogICAgYm9yZGVyOiBub25lOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgb3BhY2l0eTogMDsKICAgIHRyYW5zaXRpb246CiAgICAgICAgb3BhY2l0eSAwLjFzLAogICAgICAgIGNvbG9yIDAuMXMsCiAgICAgICAgYmFja2dyb3VuZCAwLjFzOwp9CgoubWpyLXdzLW5vZGUtcm93OmhvdmVyIC5tanItd3Mtbm9kZS1sb2NhdGUgewogICAgb3BhY2l0eTogMTsKfQoKLm1qci13cy1ub2RlLWxvY2F0ZTpob3ZlciB7CiAgICBjb2xvcjogIzYzOWJmZjsKICAgIGJhY2tncm91bmQ6IHJnYmEoOTksIDE1NSwgMjU1LCAwLjE1KTsKfQoKLyogLS0gTm9kZSBzZWN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLm1qci13cy10cmVlLWl0ZW0gewogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwp9Ci5tanItd3MtdHJlZS1pdGVtID4gLm1qci13cy1ub2RlIHsKICAgIGJvcmRlci1ib3R0b206IG5vbmU7Cn0KLm1qci13cy10cmVlLWl0ZW0tLXN1YmdyYXBoIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCAjNWI4YWYwKSA0JSwgdHJhbnNwYXJlbnQgOTYlKTsKfQoubWpyLXdzLW5vZGUgewogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwp9Ci8qIFN1YnRsZSBoaWdobGlnaHQgd2hlbiB0aGlzIG5vZGUgbWF0Y2hlcyB0aGUgY3VycmVudCBncmFwaCBzZWxlY3Rpb24uICovCi5tanItd3Mtbm9kZS5pcy1zZWxlY3RlZC1mcm9tLWdyYXBoIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyMTAsIDkwLCAwLjA4KTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDJweCAwIDAgMCByZ2JhKDI1NSwgMjEwLCA5MCwgMC43NSk7Cn0KLm1qci13cy1ub2RlLmlzLXNlbGVjdGVkLWZyb20tZ3JhcGggLm1qci13cy1ub2RlLWhlYWRlciB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgI2ZmZDQ1YSAxOCUsIHZhcigtLW1qci1zdXJmYWNlLTEsICMyYTJhMmEpIDgyJSk7Cn0KLm1qci13cy1ub2RlLmlzLXNlbGVjdGVkLWZyb20tZ3JhcGggLm1qci13cy1ub2RlLXR5cGUgewogICAgY29sb3I6ICNmZmQ0NWE7Cn0KLm1qci13cy1ub2RlLmlzLXNlbGVjdGVkLWZyb20tZ3JhcGggLm1qci13cy1ub2RlLXRpdGxlIHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjI0LCAxMzAsIDAuODgpOwp9Ci5tanItd3Mtbm9kZS5pcy1zZWxlY3RlZC1mcm9tLWdyYXBoIC5tanItd3Mtbm9kZS10b2dnbGUsCi5tanItd3Mtbm9kZS5pcy1zZWxlY3RlZC1mcm9tLWdyYXBoIC5tanItd3MtbG9jYXRlLAoubWpyLXdzLW5vZGUuaXMtc2VsZWN0ZWQtZnJvbS1ncmFwaCAubWpyLXdzLW5vZGUta2luZCB7CiAgICBjb2xvcjogI2ZmZDQ1YTsKfQoubWpyLXdzLXNpZGViYXItcmVzaXplciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDA7CiAgICBib3R0b206IDA7CiAgICB3aWR0aDogMTRweDsKICAgIHotaW5kZXg6IDI7CiAgICBjdXJzb3I6IGV3LXJlc2l6ZTsKICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwp9CgoubWpyLXdzLXNpZGViYXItcmVzaXplcjo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiA1MCU7CiAgICBsZWZ0OiA1MCU7CiAgICB3aWR0aDogNHB4OwogICAgaGVpZ2h0OiA1NnB4OwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xOCk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKICAgIG9wYWNpdHk6IDA7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIG9wYWNpdHkgMC4xNXMgZWFzZSwKICAgICAgICBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7Cn0KCi5tanItd3Mtc2lkZWJhci5vcGVuOmhvdmVyIC5tanItd3Mtc2lkZWJhci1yZXNpemVyOjpiZWZvcmUsCi5tanItd3Mtc2lkZWJhci5pcy1yZXNpemluZyAubWpyLXdzLXNpZGViYXItcmVzaXplcjo6YmVmb3JlLAoubWpyLXdzLXNpZGViYXItcmVzaXplci5pcy1kcmFnZ2luZzo6YmVmb3JlIHsKICAgIG9wYWNpdHk6IDE7Cn0KCi5tanItd3Mtc2lkZWJhci5pcy1yZXNpemluZyAubWpyLXdzLXNpZGViYXItcmVzaXplcjo6YmVmb3JlLAoubWpyLXdzLXNpZGViYXItcmVzaXplcjpob3Zlcjo6YmVmb3JlLAoubWpyLXdzLXNpZGViYXItcmVzaXplci5pcy1kcmFnZ2luZzo6YmVmb3JlIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zNCk7Cn0KCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJyaWdodCJdIC5tanItd3Mtc2lkZWJhci1yZXNpemVyIHsKICAgIHJpZ2h0OiAwOwp9CgoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0ibGVmdCJdIC5tanItd3Mtc2lkZWJhci1yZXNpemVyIHsKICAgIGxlZnQ6IDA7Cn0KCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLXdzLXNpZGViYXItcmVzaXplciB7CiAgICBkaXNwbGF5OiBub25lOwp9Ci5tanItd3Mtbm9kZS1oZWFkZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KAogICAgICAgIGluIHNyZ2IsCiAgICAgICAgdmFyKC0tbWpyLXN1cmZhY2UtMCwgIzFlMWUxZSkgNDAlLAogICAgICAgIHZhcigtLW1qci1zdXJmYWNlLTEsICMyYTJhMmEpIDYwJQogICAgKTsKICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjEycyBlYXNlOwp9Ci5tanItd3Mtbm9kZS5pcy1jb2xsYXBzaWJsZSAubWpyLXdzLW5vZGUtaGVhZGVyIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKfQoubWpyLXdzLW5vZGUuaXMtY29sbGFwc2libGUgLm1qci13cy1ub2RlLWhlYWRlcjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoCiAgICAgICAgaW4gc3JnYiwKICAgICAgICB2YXIoLS1tanItc3VyZmFjZS0wLCAjMWUxZTFlKSAyOCUsCiAgICAgICAgdmFyKC0tbWpyLXN1cmZhY2UtMSwgIzJhMmEyYSkgNzIlCiAgICApOwp9Ci5tanItd3Mtbm9kZS5pcy1jb2xsYXBzaWJsZS5pcy1jb2xsYXBzZWQgLm1qci13cy1ub2RlLWhlYWRlcjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoCiAgICAgICAgaW4gc3JnYiwKICAgICAgICB2YXIoLS1tanItYWNjZW50LCAjNWI4YWYwKSA4JSwKICAgICAgICB2YXIoLS1tanItc3VyZmFjZS0xLCAjMmEyYTJhKSA5MiUKICAgICk7Cn0KLm1qci13cy1ub2RlLXRvZ2dsZSB7CiAgICBmbGV4OiAwIDAgYXV0bzsKfQoubWpyLXdzLW5vZGUtdGl0bGUtd3JhcCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDFweDsKfQoubWpyLXdzLW5vZGUtdHlwZSB7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKfQoubWpyLXdzLW5vZGUtdGl0bGUgewogICAgZm9udC1zaXplOiAxMHB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40OCk7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwp9Ci5tanItd3Mtbm9kZS1raW5kIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNHB4OwogICAgZmxleDogMCAwIGF1dG87CiAgICBtYXgtd2lkdGg6IDExMHB4OwogICAgcGFkZGluZzogMnB4IDZweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCAjNWI4YWYwKSAzOCUsIHRyYW5zcGFyZW50IDYyJSk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCAjNWI4YWYwKSAxMiUsIHRyYW5zcGFyZW50IDg4JSk7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsICM1YjhhZjApIDc4JSwgI2ZmZmZmZiAyMiUpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9Ci5tanItd3Mtbm9kZS1raW5kIC5waSB7CiAgICBmb250LXNpemU6IDEwcHg7Cn0KLm1qci13cy1ub2RlLWtpbmQtY291bnQgewogICAgbWluLXdpZHRoOiAxNHB4OwogICAgcGFkZGluZzogMCAzcHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgyKTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoubWpyLXdzLW5vZGUuaXMtY29sbGFwc2VkIC5tanItd3Mtbm9kZS1ib2R5IHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KLm1qci13cy1ub2RlLWJvZHkgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDRweDsKICAgIHBhZGRpbmc6IDZweCAxMHB4Owp9Ci5tanItd3Mtbm9kZS1lbXB0eSB7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpOwogICAgcGFkZGluZzogNHB4IDA7Cn0KCi8qIC0tIE5lc3RlZCBub2RlcyAoaW5zaWRlIHN1YmdyYXBocykgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLm1qci13cy1ub2RlLS1uZXN0ZWQgewogICAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCByZ2JhKDkxLCAxMzgsIDI0MCwgMC4zNSk7Cn0KLm1qci13cy1ub2RlLS1uZXN0ZWQgLm1qci13cy1ub2RlLWhlYWRlciB7CiAgICBwYWRkaW5nLWxlZnQ6IDE2cHg7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoCiAgICAgICAgaW4gc3JnYiwKICAgICAgICB2YXIoLS1tanItYWNjZW50LCAjNWI4YWYwKSA1JSwKICAgICAgICB2YXIoLS1tanItc3VyZmFjZS0xLCAjMmEyYTJhKSA5NSUKICAgICk7Cn0KLm1qci13cy1ub2RlLS1uZXN0ZWQuaXMtY29sbGFwc2libGUgLm1qci13cy1ub2RlLWhlYWRlcjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoCiAgICAgICAgaW4gc3JnYiwKICAgICAgICB2YXIoLS1tanItYWNjZW50LCAjNWI4YWYwKSAxMCUsCiAgICAgICAgdmFyKC0tbWpyLXN1cmZhY2UtMSwgIzJhMmEyYSkgOTAlCiAgICApOwp9CgovKiAtLSBTdWJncmFwaCBjaGlsZHJlbiBncm91cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoubWpyLXdzLWNoaWxkcmVuLXRvZ2dsZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgd2lkdGg6IDEwMCU7CiAgICBwYWRkaW5nOiA1cHggMTBweCA1cHggMjBweDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peCgKICAgICAgICBpbiBzcmdiLAogICAgICAgIHZhcigtLW1qci1hY2NlbnQsICM1YjhhZjApIDYlLAogICAgICAgIHZhcigtLW1qci1zdXJmYWNlLTAsICMxZTFlMWUpIDk0JQogICAgKTsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50LCAjNWI4YWYwKTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBvcGFjaXR5OiAwLjg7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIG9wYWNpdHkgMC4xcyBlYXNlLAogICAgICAgIGJhY2tncm91bmQgMC4xcyBlYXNlOwp9Ci5tanItd3MtY2hpbGRyZW4tdG9nZ2xlLS1uZXN0ZWQgewogICAgcGFkZGluZy1sZWZ0OiAyOHB4Owp9Ci5tanItd3MtY2hpbGRyZW4tdG9nZ2xlOmhvdmVyIHsKICAgIG9wYWNpdHk6IDE7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoCiAgICAgICAgaW4gc3JnYiwKICAgICAgICB2YXIoLS1tanItYWNjZW50LCAjNWI4YWYwKSAxMiUsCiAgICAgICAgdmFyKC0tbWpyLXN1cmZhY2UtMCwgIzFlMWUxZSkgODglCiAgICApOwp9Ci5tanItd3MtY2hpbGRyZW4tdG9nZ2xlW2FyaWEtZXhwYW5kZWQ9InRydWUiXSB7CiAgICBvcGFjaXR5OiAxOwp9Ci5tanItd3MtY2hpbGRyZW4gewogICAgYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCByZ2JhKDkxLCAxMzgsIDI0MCwgMC4yNSk7CiAgICBtYXJnaW4tbGVmdDogNnB4OwogICAgcGFkZGluZy1sZWZ0OiA2cHg7Cn0KCi5tanItd3Mtd2lkZ2V0LXJvdyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICBnYXA6IDhweDsKfQoubWpyLXdzLXdpZGdldC1yb3ctLWJsb2NrIHsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDJweDsKfQoubWpyLXdzLXdpZGdldC1yb3ctLWJsb2NrIC5tanItd3Mtd2lkZ2V0LWxhYmVsIHsKICAgIGZsZXg6IG5vbmU7CiAgICBwYWRkaW5nLXRvcDogMDsKfQoubWpyLXdzLXdpZGdldC1yb3ctLWJsb2NrIC5tanItd3Mtd2lkZ2V0LWlucHV0IHsKICAgIHdpZHRoOiAxMDAlOwp9Ci5tanItd3Mtd2lkZ2V0LWxhYmVsIHsKICAgIGZsZXg6IDAgMCA4MHB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHZhcigtLWRlc2NyaXAtdGV4dCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjU1KSk7CiAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKfQoubWpyLXdzLXdpZGdldC1pbnB1dCB7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiAwOwp9Ci5tanItd3MtaW5wdXQgewogICAgd2lkdGg6IDEwMCU7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1pbnB1dC1iZywgIzIyMik7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2RkZCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIHBhZGRpbmc6IDRweCA2cHg7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgIG91dGxpbmU6IG5vbmU7CiAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMTIwbXMgZWFzZTsKfQoubWpyLXdzLWlucHV0OmZvY3VzIHsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7Cn0KLm1qci13cy10ZXh0YXJlYSB7CiAgICByZXNpemU6IG5vbmU7CiAgICBtaW4taGVpZ2h0OiAyOHB4OwogICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgIG92ZXJmbG93LXk6IGhpZGRlbjsKfQoubWpyLXdzLXRleHQtd3JhcHBlciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMnB4OwogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMDsKfQoubWpyLXdzLXRleHQtd3JhcHBlciAubWpyLXdzLXRleHRhcmVhIHsKICAgIHdpZHRoOiAxMDAlOwp9Ci5tanItd3MtZXhwYW5kLWJ0biB7CiAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDsKICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICBib3JkZXI6IG5vbmU7CiAgICBjb2xvcjogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBwYWRkaW5nOiAwIDRweDsKICAgIG9wYWNpdHk6IDAuODsKfQoubWpyLXdzLWV4cGFuZC1idG46aG92ZXIgewogICAgb3BhY2l0eTogMTsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9Ci5tanItd3MtcmVhZG9ubHkgewogICAgb3BhY2l0eTogMC41OwogICAgY3Vyc29yOiBkZWZhdWx0Owp9Ci5tanItd3MtY2hlY2tib3ggewogICAgYWNjZW50LWNvbG9yOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKICAgIHdpZHRoOiAxNnB4OwogICAgaGVpZ2h0OiAxNnB4OwogICAgbWFyZ2luLXRvcDogNHB4Owp9Ci5tanItd3MtdG9nZ2xlLWxhYmVsIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwp9CgovKiAtLSBMb2NhdGUgYnV0dG9uIGluc2lkZSBub2RlIGhlYWRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoubWpyLXdzLWxvY2F0ZSB7CiAgICB3aWR0aDogMjRweCAhaW1wb3J0YW50OwogICAgaGVpZ2h0OiAyNHB4ICFpbXBvcnRhbnQ7CiAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICBvcGFjaXR5OiAwLjU7Cn0KLm1qci13cy1sb2NhdGU6aG92ZXIgewogICAgb3BhY2l0eTogMTsKfQoKLyogLS0gUnVuIGJ1dHRvbiBzdGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLm1qci1tZnYtcnVuLWNvbnRyb2xzIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNHB4Owp9Ci5tanItbWZ2LXJ1bi1idG4gLnBpIHsKICAgIGNvbG9yOiB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MsICM0Y2FmNTApOwp9Ci5tanItbWZ2LXJ1bi1idG4ucnVubmluZyAucGkgewogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSk7Cn0KLm1qci1tZnYtcnVuLWJ0bi5zdG9wcGluZyAucGkgewogICAgY29sb3I6IHZhcigtLW1qci1zdGF0dXMtd2FybmluZywgI2ZmYTcyNik7Cn0KLm1qci1tZnYtcnVuLWJ0bi5lcnJvciAucGkgewogICAgY29sb3I6ICNmNDQzMzY7Cn0KCi5tanItbWZ2LXN0b3AtYnRuIC5waSB7CiAgICBjb2xvcjogI2VmNTM1MDsKfQoubWpyLW1mdi1zdG9wLWJ0bi5hY3RpdmUgLnBpIHsKICAgIGNvbG9yOiAjZmY4YTY1Owp9Ci5tanItbWZ2LXN0b3AtYnRuLnN0b3BwaW5nIC5waSB7CiAgICBjb2xvcjogdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCAjZmZhNzI2KTsKfQoKLyogLS0gRmxvYXRpbmcgVmlld2VyIHNpbXBsZSB2aWRlbyBwbGF5ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoubWpyLW1mdi1zaW1wbGUtcGxheWVyIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXIuaXMtYXVkaW8gewogICAgYmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAyMCUgMjAlLCByZ2JhKDk1LCAxNzksIDI1NSwgMC4yKSwgcmdiYSgxOCwgMjAsIDI4LCAwLjk1KSk7Cn0KCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItYXVkaW8tYmFja2Ryb3AgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC4ycHg7CiAgICB0ZXh0LXNoYWRvdzogMCAycHggMTJweCByZ2JhKDAsIDAsIDAsIDAuNDUpOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBwYWRkaW5nOiAxOHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLWNvbnRyb2xzIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDEycHg7CiAgICByaWdodDogMTJweDsKICAgIGJvdHRvbTogMTJweDsKICAgIHotaW5kZXg6IDMwOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDhweDsKICAgIHBhZGRpbmc6IDlweCAxMHB4OwogICAgYm9yZGVyLXJhZGl1czogMTRweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNik7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gdG9wLCByZ2JhKDEwLCAxMCwgMTQsIDAuNzYpLCByZ2JhKDE2LCAxNiwgMjQsIDAuNTUpKTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpOwogICAgcG9pbnRlci1ldmVudHM6IGF1dG87Cn0KCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItcm93IHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4Owp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLXNlZWsgewogICAgLS1tanItc2Vlay1wY3Q6IDAlOwogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiA2cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIG91dGxpbmU6IG5vbmU7CiAgICBib3JkZXI6IG5vbmU7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgdG8gcmlnaHQsCiAgICAgICAgI2ZmMmY1MiAwJSwKICAgICAgICAjZmYyZjUyIHZhcigtLW1qci1zZWVrLXBjdCksCiAgICAgICAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI0KSB2YXIoLS1tanItc2Vlay1wY3QpLAogICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNCkgMTAwJQogICAgKTsKICAgIGN1cnNvcjogcG9pbnRlcjsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci1zZWVrOjotd2Via2l0LXNsaWRlci10aHVtYiB7CiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICB3aWR0aDogMTJweDsKICAgIGhlaWdodDogMTJweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjM1KTsKICAgIGJhY2tncm91bmQ6ICNmZjJmNTI7Cn0KCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItc2Vlazo6LW1vei1yYW5nZS10aHVtYiB7CiAgICB3aWR0aDogMTJweDsKICAgIGhlaWdodDogMTJweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjM1KTsKICAgIGJhY2tncm91bmQ6ICNmZjJmNTI7Cn0KCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItYnRuIHsKICAgIHdpZHRoOiAzMHB4OwogICAgaGVpZ2h0OiAzMHB4OwogICAgbWluLXdpZHRoOiAzMHB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjIpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci1idG4gLnBpIHsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLWJ0bi5pcy1kaXNhYmxlZCwKLm1qci1tZnYtc2ltcGxlLXBsYXllci1zZWVrLmlzLWRpc2FibGVkIHsKICAgIG9wYWNpdHk6IDAuNDU7CiAgICBjdXJzb3I6IGRlZmF1bHQ7Cn0KCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItdGltZSB7CiAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTIpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci1mcmFtZSB7CiAgICBtYXJnaW4tcmlnaHQ6IDJweDsKICAgIHBhZGRpbmc6IDNweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNik7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBjb250YWluZXItdHlwZTogaW5saW5lLXNpemU7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHMgewogICAgei1pbmRleDogMzA7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0sCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0gewogICAgbGVmdDogOHB4OwogICAgcmlnaHQ6IDhweDsKICAgIGJvdHRvbTogOHB4OwogICAgcGFkZGluZzogOHB4OwogICAgZ2FwOiA2cHg7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0gLm1qci12aWRlby1yb3ctLXRvcCwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLXJvdy0tdG9wIHsKICAgIGdhcDogOHB4Owp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0iY29tcGFjdCJdIC5tanItdmlkZW8tdGltZWdyb3VwLAoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0ic3RhY2tlZCJdIC5tanItdmlkZW8tdGltZWdyb3VwIHsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgIGdhcDogNnB4Owp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0iY29tcGFjdCJdIC5tanItdmlkZW8tcm93LS1ib3R0b20sCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0gLm1qci12aWRlby1yb3ctLWJvdHRvbSB7CiAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBnYXA6IDZweDsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXSAubWpyLXZpZGVvLWJvdHRvbSwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLWJvdHRvbSB7CiAgICBmbGV4LXNocmluazogMTsKICAgIGZsZXgtd3JhcDogbm93cmFwOwp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0iY29tcGFjdCJdIC5tanItdmlkZW8tdHJhbnNwb3J0LAoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0ic3RhY2tlZCJdIC5tanItdmlkZW8tdHJhbnNwb3J0IHsKICAgIGZsZXgtd3JhcDogbm93cmFwOwp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0iY29tcGFjdCJdIC5tanItdmlkZW8tZ3JvdXAsCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0gLm1qci12aWRlby1ncm91cCB7CiAgICBmbGV4LXdyYXA6IG5vd3JhcDsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXSAubWpyLXZpZGVvLXNlZWstd3JhcCwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLXNlZWstd3JhcCB7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi8qIFRoZSBNRlYgdXNlcyB0aGUgIi0tdmlld2VyIiBjb250cm9sIHZhcmlhbnQsIHdoaWNoICh1bmxpa2UgIi0tdmlld2VyYmFyIikKICAgZG9lcyBub3Qgc2l6ZSB0aGUgbmF0aXZlIHNlZWsgaW5wdXQgYW5kIHBhY2tzIGZyYW1lL2luL3NlZWsvb3V0L3RpbWUgaW50byBhCiAgIHNpbmdsZSByb3cuIEluIHRoZSBuYXJyb3cgTUZWIHRoZSBzZWVrIHdyYXAgdGhlbiBjb2xsYXBzZXMgdG8gfjBweCB3aWRlIGFuZAogICB0aGUgbmF0aXZlIGlucHV0IHRvIDBweCB0YWxsLCBsZWF2aW5nIGFsbW9zdCBubyBjbGljayAvIGRyYWcgdGFyZ2V0IGZvcgogICBzY3J1YmJpbmcuIEdpdmUgdGhlIHNlZWsgaXRzIG93biBmdWxsLXdpZHRoIHJvdyB3aXRoIGEgdXNhYmxlIGhpdCBhcmVhLiAqLwoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXIgLm1qci12aWRlby1yb3ctLXRvcCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHJvdy1nYXA6IDQycHg7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlciAubWpyLXZpZGVvLXJvdy0tdG9wIC5tanItdmlkZW8tc2Vlay13cmFwIHsKICAgIG9yZGVyOiAxMDsKICAgIGZsZXg6IDEgMSAxMDAlOwogICAgd2lkdGg6IDEwMCU7CiAgICBtaW4td2lkdGg6IDA7CiAgICBtaW4taGVpZ2h0OiA0MnB4OwogICAgcGFkZGluZy10b3A6IDZweDsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyIC5tanItdmlkZW8tcmFuZ2UtLXNlZWsgewogICAgaGVpZ2h0OiAyMHB4OwogICAgYWNjZW50LWNvbG9yOiByZ2JhKDIxNCwgMjE4LCAyMjQsIDAuOTIpOwp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXIgLm1qci12aWRlby1zZWVrLXpvbmVzIHsKICAgIGhlaWdodDogMTBweDsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyIC5tanItdmlkZW8tc2Vlay1oYW5kbGUgewogICAgd2lkdGg6IDE2cHg7CiAgICBoZWlnaHQ6IDI4cHg7CiAgICB0b3A6IDIwcHg7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0gLm1qci12aWRlby1iYXItdGltZWxpbmUsCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0gLm1qci12aWRlby1iYXItdGltZWxpbmUgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtd3JhcDogd3JhcDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0CiAgICAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0iY29tcGFjdCJdCiAgICAubWpyLXZpZGVvLWJhci10aW1lbGluZQogICAgLm1qci12aWRlby1zZWVrLXdyYXAsCi5tanItbWZ2LXBsYXllci1ob3N0CiAgICAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0ic3RhY2tlZCJdCiAgICAubWpyLXZpZGVvLWJhci10aW1lbGluZQogICAgLm1qci12aWRlby1zZWVrLXdyYXAgewogICAgb3JkZXI6IC0xOwogICAgZmxleDogMSAxIDEwMCU7CiAgICB3aWR0aDogMTAwJTsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QKICAgIC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0KICAgIC5tanItdmlkZW8tYmFyLXRpbWVsaW5lCiAgICAubWpyLXZpZGVvLWdyb3VwLS1pbiwKLm1qci1tZnYtcGxheWVyLWhvc3QKICAgIC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0KICAgIC5tanItdmlkZW8tYmFyLXRpbWVsaW5lCiAgICAubWpyLXZpZGVvLWdyb3VwLS1vdXQsCi5tanItbWZ2LXBsYXllci1ob3N0CiAgICAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0ic3RhY2tlZCJdCiAgICAubWpyLXZpZGVvLWJhci10aW1lbGluZQogICAgLm1qci12aWRlby1ncm91cC0taW4sCi5tanItbWZ2LXBsYXllci1ob3N0CiAgICAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0ic3RhY2tlZCJdCiAgICAubWpyLXZpZGVvLWJhci10aW1lbGluZQogICAgLm1qci12aWRlby1ncm91cC0tb3V0IHsKICAgIGZsZXg6IDAgMSBhdXRvOwp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0iY29tcGFjdCJdIC5tanItdmlkZW8tcmFuZ2UtY291bnQsCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0gLm1qci12aWRlby1mcmFtZSB7CiAgICBtaW4td2lkdGg6IGF1dG87Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0gLm1qci12aWRlby1yYW5nZS1jb3VudCB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0gLm1qci12aWRlby1mcmFtZSB7CiAgICBtaW4td2lkdGg6IGF1dG87CiAgICBwYWRkaW5nOiAzcHggNnB4Owp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0ic3RhY2tlZCJdIC5tanItdmlkZW8tYnRuLS1pbiwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLWJ0bi0tb3V0LAoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0ic3RhY2tlZCJdIC5tanItdmlkZW8tYnRuLS1tYXJrIHsKICAgIG1pbi13aWR0aDogMzJweDsKfQoKQGNvbnRhaW5lciAobWF4LXdpZHRoOiA5MDBweCkgewogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9scyB7CiAgICAgICAgbGVmdDogOHB4OwogICAgICAgIHJpZ2h0OiA4cHg7CiAgICAgICAgYm90dG9tOiA4cHg7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIGdhcDogNnB4OwogICAgfQoKICAgIC5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tcm93LS10b3AgewogICAgICAgIGdhcDogOHB4OwogICAgfQoKICAgIC5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tdGltZWdyb3VwIHsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICAgICAgZ2FwOiA2cHg7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1yb3ctLWJvdHRvbSB7CiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBnYXA6IDZweDsKICAgIH0KCiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWJvdHRvbSB7CiAgICAgICAgZmxleC1zaHJpbms6IDE7CiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby10cmFuc3BvcnQgewogICAgICAgIGZsZXgtd3JhcDogbm93cmFwOwogICAgfQoKICAgIC5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tZ3JvdXAgewogICAgICAgIGZsZXgtd3JhcDogbm93cmFwOwogICAgfQoKICAgIC5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tc2Vlay13cmFwIHsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLXRpbWVsaW5lIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgfQoKICAgIC5tanItbWZ2LXBsYXllci1ob3N0CiAgICAgICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyCiAgICAgICAgLm1qci12aWRlby1iYXItdGltZWxpbmUKICAgICAgICAubWpyLXZpZGVvLXNlZWstd3JhcCB7CiAgICAgICAgb3JkZXI6IC0xOwogICAgICAgIGZsZXg6IDEgMSAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgfQp9CgpAY29udGFpbmVyIChtYXgtd2lkdGg6IDY4MHB4KSB7CiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzIHsKICAgICAgICBwYWRkaW5nOiA2cHg7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1idG4gewogICAgICAgIHBhZGRpbmc6IDVweCA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgfQoKICAgIC5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tbnVtIHsKICAgICAgICBwYWRkaW5nOiA0cHggNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIH0KCiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLXRpbWUsCiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWZyYW1lLAogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1yYW5nZS1jb3VudCB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgfQp9CgovKiAtLSBTZXR0aW5ncyBidXR0b24gYWN0aXZlIHN0YXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoubWpyLW1mdi1zZXR0aW5ncy1idG4uYWN0aXZlIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KAogICAgICAgIGluIHNyZ2IsCiAgICAgICAgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZikgNTUlLAogICAgICAgIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpCiAgICApOwogICAgYmFja2dyb3VuZC1jb2xvcjogY29sb3ItbWl4KAogICAgICAgIGluIHNyZ2IsCiAgICAgICAgdmFyKC0tbWpyLXN1cmZhY2UtMiwgIzMzMykgNzAlLAogICAgICAgIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpIDE4JQogICAgKTsKfQoubWpyLW1mdi1zZXR0aW5ncy1idG4uYWN0aXZlIC5waSB7CiAgICBjb2xvcjogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7Cn0KCi8qIC0tIENsb3NlIGJ1dHRvbiAocmVkKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLm1qci1tZnYgLm1qci1tZnYtY2xvc2UtYnRuIHsKICAgIGNvbG9yOiAjZTg1MDUwOwp9Ci5tanItbWZ2IC5tanItbWZ2LWNsb3NlLWJ0bjpob3ZlciB7CiAgICBjb2xvcjogI2ZmNmI2YjsKICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjMyLCA4MCwgODAsIDAuMTUpOwp9CgovKiAtLSBFbXB0eSBzdGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5tanItbWZ2LWVtcHR5IHsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjUpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBwYWRkaW5nOiAxMnB4Owp9CgovKiAtLSBDb21wYXJlIGxhYmVscyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5tanItbWZ2LWxhYmVsIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogOHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjU4KTsKICAgIGNvbG9yOiAjZmZmOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIHBhZGRpbmc6IDJweCA3cHg7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDIwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuNHB4Owp9CgoubWpyLW1mdi1sYWJlbC5sYWJlbC1sZWZ0IHsKICAgIGxlZnQ6IDhweDsKfQoubWpyLW1mdi1sYWJlbC5sYWJlbC1yaWdodCB7CiAgICByaWdodDogOHB4Owp9CgovKiAtLSBBQiBkaXZpZGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5tanItbWZ2LWFiLWRpdmlkZXIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAwOwogICAgYm90dG9tOiAwOwogICAgd2lkdGg6IDAuNXB4OwogICAgY3Vyc29yOiBjb2wtcmVzaXplOwogICAgei1pbmRleDogMTA7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODgpOwogICAgYm94LXNoYWRvdzoKICAgICAgICAwIDAgMCAwLjVweCByZ2JhKDAsIDAsIDAsIDAuNCksCiAgICAgICAgMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMTAwbXMgZWFzZTsKfQoKLm1qci1tZnYtYWItZGl2aWRlcjo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAwOwogICAgYm90dG9tOiAwOwogICAgbGVmdDogNTAlOwogICAgd2lkdGg6IDEycHg7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7Cn0KCi5tanItbWZ2LWFiLWRpdmlkZXI6aG92ZXIsCi5tanItbWZ2LWFiLWRpdmlkZXI6YWN0aXZlIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpOwp9CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBNRlYgR2VvbWV0cnkgJiBMYXlvdXQgQ2xhc3NlcyAocmVwbGFjZXMgaW5saW5lIHN0eWxlcyBpbiBGbG9hdGluZ1ZpZXdlci5qcykKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCi8qIE1haW4gTUZWIGNvbnRhaW5lciBnZW9tZXRyeSAqLwoubWpyLW1mdiB7CiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICB0b3A6IHZhcigtLW1qci1tZnYtdG9wLW9mZnNldCwgNjBweCk7CiAgICByaWdodDogMjBweDsKICAgIHdpZHRoOiA2NDBweDsKICAgIGhlaWdodDogMzYwcHg7CiAgICBtaW4td2lkdGg6IDIyMHB4OwogICAgbWluLWhlaWdodDogMTYwcHg7CiAgICAvKiBBbHdheXMgZmxleDsgdmlzaWJpbGl0eSArIG9wYWNpdHkgY29udHJvbCBzaG93L2hpZGUgc28gQ1NTIHRyYW5zaXRpb25zIHdvcmsuCiAgICAgICBwb2ludGVyLWV2ZW50czpub25lIHdoaWxlIGhpZGRlbiBwcmV2ZW50cyBhY2NpZGVudGFsIGludGVyYWN0aW9uLiAqLwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICByZXNpemU6IGJvdGg7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgei1pbmRleDogMTAwMDA7CiAgICAvKiBIaWRkZW4gc3RhdGUgKi8KICAgIG9wYWNpdHk6IDA7CiAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNnB4KSBzY2FsZSgwLjk4KTsKICAgIHRyYW5zZm9ybS1vcmlnaW46IHRvcCByaWdodDsKICAgIHRyYW5zaXRpb246CiAgICAgICAgb3BhY2l0eSAwLjE4cyBlYXNlLW91dCwKICAgICAgICB0cmFuc2Zvcm0gMC4xOHMgZWFzZS1vdXQsCiAgICAgICAgdmlzaWJpbGl0eSAwcyBsaW5lYXIgMC4xOHM7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXJlc2l6aW5nIHsKICAgIHVzZXItc2VsZWN0OiBub25lOwp9CgoubWpyLW1mdi5pcy12aXNpYmxlIHsKICAgIG9wYWNpdHk6IDE7CiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlOwogICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgc2NhbGUoMSk7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIG9wYWNpdHkgMC4xOHMgZWFzZS1vdXQsCiAgICAgICAgdHJhbnNmb3JtIDAuMThzIGVhc2Utb3V0LAogICAgICAgIHZpc2liaWxpdHkgMHMgbGluZWFyIDBzOwp9CgovKiBNZWRpYSBlbGVtZW50cyAoaW1nL3ZpZGVvKSBzaXppbmcgdmFyaWFudHMgKi8KLm1qci1tZnYtbWVkaWEgewogICAgZGlzcGxheTogYmxvY2s7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIG1heC1oZWlnaHQ6IDEwMCU7CiAgICBvYmplY3QtZml0OiBjb250YWluOwogICAgb2JqZWN0LXBvc2l0aW9uOiBjZW50ZXI7Cn0KCi5tanItbWZ2LW1lZGlhLS1maXQtaGVpZ2h0IHsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgbWF4LXdpZHRoOiAxMDAlOwogICAgbWF4LWhlaWdodDogMTAwJTsKICAgIG9iamVjdC1maXQ6IGNvbnRhaW47CiAgICBvYmplY3QtcG9zaXRpb246IGNlbnRlcjsKfQoKLm1qci1tZnYtbWVkaWEtLWZpbGwgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBtYXgtaGVpZ2h0OiAxMDAlOwogICAgb2JqZWN0LWZpdDogY29udGFpbjsKICAgIG9iamVjdC1wb3NpdGlvbjogY2VudGVyOwogICAgZGlzcGxheTogYmxvY2s7Cn0KCi8qIEF1ZGlvIGNhcmQgaW5zaWRlIE1GViAqLwoubWpyLW1mdi1hdWRpby1jYXJkIHsKICAgIHdpZHRoOiBtaW4oOTIlLCA1NjBweCk7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMTBweDsKICAgIHBhZGRpbmc6IDEycHg7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxNjBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNiksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMikpOwogICAgYm94LXNoYWRvdzogMCA2cHggMTZweCByZ2JhKDAsIDAsIDAsIDAuMzUpOwp9CgoubWpyLW1mdi1hdWRpby1oZWFkIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItbWZ2LWF1ZGlvLWljb24gewogICAgY29sb3I6IHZhcigtLW1qci1iYWRnZS1hdWRpbywgI2ZmOTgwMCk7CiAgICBvcGFjaXR5OiAwLjk1Owp9CgoubWpyLW1mdi1hdWRpby10aXRsZSB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKfQoKLm1qci1tZnYtYXVkaW8tcGxheWVyIHsKICAgIHdpZHRoOiAxMDAlOwp9CgoubWpyLW1mdi1zaWRlLXBhbmVsIC5tanItbWZ2LWF1ZGlvLWNhcmQsCi5tanItbWZ2LWFiLWxheWVyIC5tanItbWZ2LWF1ZGlvLWNhcmQsCi5tanItbWZ2LWdyaWQtY2VsbCAubWpyLW1mdi1hdWRpby1jYXJkIHsKICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4KTsKfQoKLyogVmlkZW8gZWxlbWVudCBzcGVjaWZpYyBzdHlsZXMgKi8KLm1qci1tZnYtbWVkaWEtdmlkZW8gewogICAgLyogSW5oZXJpdHMgZnJvbSAubWpyLW1mdi1tZWRpYSBvciAubWpyLW1mdi1tZWRpYS0tZmlsbCAqLwp9CgovKiBOb2RlIFN0cmVhbSAtIGN1cnJlbnRseS1zdHJlYW1lZCBub2RlIGJhZGdlICh0b3AtbGVmdCBvZiBjb250ZW50IGFyZWEsCiAgIGZvbGxvd2luZyB0aGUgc2FtZSBvdmVybGF5IHBhdHRlcm4gYXMgLm1qci1tZnYtZ2VuaW5mbykuICovCi5tanItbWZ2LW5vZGUtb3ZlcmxheSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDhweDsKICAgIGxlZnQ6IDhweDsKICAgIHotaW5kZXg6IDEyOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM7CiAgICBjb2xvcjogI2U2ZjNmZjsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC42NSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDEyMCwgMTcwLCAyNDAsIDAuNDUpOwogICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC40KTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIG1heC13aWR0aDogY2FsYygxMDAlIC0gMTZweCk7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwp9Ci8qIEdlbiBpbmZvIG92ZXJsYXkgLSBhbGwgbW9kZXMgc2hhcmUgYmFzZSBsYXlvdXQgKi8KLm1qci1tZnYtZ2VuaW5mbywKLm1qci1tZnYtZ2VuaW5mby1hLAoubWpyLW1mdi1nZW5pbmZvLWIgewogICAgZGlzcGxheTogbm9uZTsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDhweDsKICAgIHJpZ2h0OiA4cHg7CiAgICBib3R0b206IDhweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC42NSk7CiAgICBjb2xvcjogI2ZmZjsKICAgIHBhZGRpbmc6IDhweCAxMHB4OwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgbWF4LWhlaWdodDogNDAlOwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgIG92ZXJzY3JvbGwtYmVoYXZpb3IteTogY29udGFpbjsKICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgIHRvdWNoLWFjdGlvbjogcGFuLXk7CiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuNCk7Cn0KCi8qIEtlZXAgR2VuIEluZm8gYWJvdmUgY3VzdG9tIHNpbXBsZS1wbGF5ZXIgY29udHJvbHMgd2hlbiBwcmVzZW50LiAqLwoubWpyLW1mdi1nZW5pbmZvLm1qci1tZnYtZ2VuaW5mby0tYWJvdmUtcGxheWVyLAoubWpyLW1mdi1nZW5pbmZvLWEubWpyLW1mdi1nZW5pbmZvLS1hYm92ZS1wbGF5ZXIsCi5tanItbWZ2LWdlbmluZm8tYi5tanItbWZ2LWdlbmluZm8tLWFib3ZlLXBsYXllciB7CiAgICB0b3A6IDhweDsKICAgIGJvdHRvbTogYXV0bzsKICAgIG1heC1oZWlnaHQ6IG1pbig0NSUsIGNhbGMoMTAwJSAtIDEyNHB4KSk7Cn0KCi8qIEZhbGxiYWNrOiB3aGVuIHNpbXBsZS1wbGF5ZXIgaXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSBnZW5pbmZvIG92ZXJsYXksCiAgIG1vdmUgaXQgdXAgZXZlbiBpZiB0aGUgbW9kaWZpZXIgY2xhc3Mgd2FzIG5vdCBhdHRhY2hlZC4gKi8KLm1qci1tZnYtc2ltcGxlLXBsYXllciArIC5tanItbWZ2LWdlbmluZm8sCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXIgKyAubWpyLW1mdi1nZW5pbmZvLWEsCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXIgKyAubWpyLW1mdi1nZW5pbmZvLWIgewogICAgdG9wOiA4cHg7CiAgICBib3R0b206IGF1dG87CiAgICBtYXgtaGVpZ2h0OiBtaW4oNDUlLCBjYWxjKDEwMCUgLSAxMjRweCkpOwp9CgovKiBBQiBtb2RlIG92ZXJsYXlzIGFyZSBhdHRhY2hlZCBhdCBjb250YWluZXIgbGV2ZWw7IHNoaWZ0IHRoZW0gd2hlbiBBQiBsYXllcnMgdXNlIHNpbXBsZS1wbGF5ZXIuICovCi5tanItbWZ2LWFiLWNvbnRhaW5lcjpoYXMoLm1qci1tZnYtYWItbGF5ZXIgLm1qci1tZnYtc2ltcGxlLXBsYXllcikgLm1qci1tZnYtZ2VuaW5mby1hLAoubWpyLW1mdi1hYi1jb250YWluZXI6aGFzKC5tanItbWZ2LWFiLWxheWVyIC5tanItbWZ2LXNpbXBsZS1wbGF5ZXIpIC5tanItbWZ2LWdlbmluZm8tYiB7CiAgICB0b3A6IDhweDsKICAgIGJvdHRvbTogYXV0bzsKICAgIG1heC1oZWlnaHQ6IG1pbig0NSUsIGNhbGMoMTAwJSAtIDEyNHB4KSk7Cn0KCi8qIFNoYXJlZCBzdHlsZSBmb3IgYWxsIGdlbiBpbmZvIG92ZXJsYXkgdmFyaWFudHMgKi8KLm1qci1tZnYtZ2VuaW5mbyBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYiBzdHJvbmcgewogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIG1hcmdpbi1yaWdodDogNHB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSk7IC8qIGRlZmF1bHQgLSBvdmVycmlkZGVuIHBlciBmaWVsZCBiZWxvdyAqLwp9CgovKiBQZXItZmllbGQgbGFiZWwgY29sb3JzICovCi5tanItbWZ2LWdlbmluZm8gW2RhdGEtZmllbGQ9InByb21wdCJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1hIFtkYXRhLWZpZWxkPSJwcm9tcHQiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYiBbZGF0YS1maWVsZD0icHJvbXB0Il0gc3Ryb25nIHsKICAgIGNvbG9yOiAjN2VjOGZmOwp9IC8qIGJsdWUgICAtIFByb21wdCAqLwoKLm1qci1tZnYtZ2VuaW5mbyBbZGF0YS1maWVsZD0ic2VlZCJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1hIFtkYXRhLWZpZWxkPSJzZWVkIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgW2RhdGEtZmllbGQ9InNlZWQiXSBzdHJvbmcgewogICAgY29sb3I6ICNmZmQ0N2E7Cn0gLyogYW1iZXIgIC0gU2VlZCAgICovCgoubWpyLW1mdi1nZW5pbmZvIFtkYXRhLWZpZWxkPSJtb2RlbCJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1hIFtkYXRhLWZpZWxkPSJtb2RlbCJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1iIFtkYXRhLWZpZWxkPSJtb2RlbCJdIHN0cm9uZyB7CiAgICBjb2xvcjogIzdkZGE4YTsKfSAvKiBncmVlbiAgLSBNb2RlbCAgKi8KCi5tanItbWZ2LWdlbmluZm8gW2RhdGEtZmllbGQ9ImxvcmEiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYSBbZGF0YS1maWVsZD0ibG9yYSJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1iIFtkYXRhLWZpZWxkPSJsb3JhIl0gc3Ryb25nIHsKICAgIGNvbG9yOiAjZDQ4Y2ZmOwp9IC8qIHZpb2xldCAtIExvUkEgICAqLwoKLm1qci1tZnYtZ2VuaW5mbyBbZGF0YS1maWVsZD0ic2FtcGxlciJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1hIFtkYXRhLWZpZWxkPSJzYW1wbGVyIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgW2RhdGEtZmllbGQ9InNhbXBsZXIiXSBzdHJvbmcgewogICAgY29sb3I6ICNmZjlmN2E7Cn0gLyogb3JhbmdlIC0gU2FtcGxlciAqLwoKLm1qci1tZnYtZ2VuaW5mbyBbZGF0YS1maWVsZD0ic2NoZWR1bGVyIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWEgW2RhdGEtZmllbGQ9InNjaGVkdWxlciJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1iIFtkYXRhLWZpZWxkPSJzY2hlZHVsZXIiXSBzdHJvbmcgewogICAgY29sb3I6ICNmZjdhOWY7Cn0gLyogcGluayAgIC0gU2NoZWR1bGVyICovCgoubWpyLW1mdi1nZW5pbmZvIFtkYXRhLWZpZWxkPSJjZmciXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYSBbZGF0YS1maWVsZD0iY2ZnIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgW2RhdGEtZmllbGQ9ImNmZyJdIHN0cm9uZyB7CiAgICBjb2xvcjogIzdhOWZmZjsKfSAvKiBpbmRpZ28gLSBDRkcgKi8KCi5tanItbWZ2LWdlbmluZm8gW2RhdGEtZmllbGQ9InN0ZXAiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYSBbZGF0YS1maWVsZD0ic3RlcCJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1iIFtkYXRhLWZpZWxkPSJzdGVwIl0gc3Ryb25nIHsKICAgIGNvbG9yOiAjN2FmZmQ0Owp9IC8qIHRlYWwgICAtIFN0ZXAgKi8KCi5tanItbWZ2LWdlbmluZm8gW2RhdGEtZmllbGQ9ImdlblRpbWUiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYSBbZGF0YS1maWVsZD0iZ2VuVGltZSJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1iIFtkYXRhLWZpZWxkPSJnZW5UaW1lIl0gc3Ryb25nIHsKICAgIGNvbG9yOiAjZTBmZjdhOwp9IC8qIGxpbWUgICAtIEdlbiBUaW1lICovCgoubWpyLW1mdi1nZW5pbmZvIGRpdiwKLm1qci1tZnYtZ2VuaW5mby1hIGRpdiwKLm1qci1tZnYtZ2VuaW5mby1iIGRpdiB7CiAgICBsaW5lLWhlaWdodDogMS4zNTsKICAgIG1hcmdpbi1ib3R0b206IDNweDsKfQoKLm1qci1tZnYtZ2VuaW5mbyBkaXY6bGFzdC1jaGlsZCwKLm1qci1tZnYtZ2VuaW5mby1hIGRpdjpsYXN0LWNoaWxkLAoubWpyLW1mdi1nZW5pbmZvLWIgZGl2Omxhc3QtY2hpbGQgewogICAgbWFyZ2luLWJvdHRvbTogMDsKfQoKLyogU2ltcGxlIG1vZGUgY29udGFpbmVyICovCi5tanItbWZ2LXNpbXBsZS1jb250YWluZXIgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLyogQUIgbW9kZSBjb250YWluZXIgKi8KLm1qci1tZnYtYWItY29udGFpbmVyIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJhY2tncm91bmQ6ICMwMDA7Cn0KCi8qIEFCIG1vZGUgbGF5ZXJzICovCi5tanItbWZ2LWFiLWxheWVyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKfQoKLm1qci1tZnYtYWItbGF5ZXItLWIgewogICAgLyogY2xpcC1wYXRoIGFwcGxpZWQgaW5saW5lIGZvciBkeW5hbWljIGRpdmlkZXIgcG9zaXRpb24gKi8KfQoKLyogU2lkZS1ieS1zaWRlIG1vZGUgY29udGFpbmVyICovCi5tanItbWZ2LXNpZGUtY29udGFpbmVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGdhcDogMnB4OwogICAgYmFja2dyb3VuZDogIzExMTsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi8qIFNpZGUtYnktc2lkZSBoYWxmIHBhbmVscyAqLwoubWpyLW1mdi1zaWRlLXBhbmVsIHsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGJhY2tncm91bmQ6ICMwZDBkMGQ7Cn0KCi8qIEdyaWQgY29tcGFyZSAoMi0yKSBjb250YWluZXIgKi8KLm1qci1tZnYtZ3JpZC1jb250YWluZXIgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsKICAgIGdyaWQtdGVtcGxhdGUtcm93czogMWZyIDFmcjsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgZ2FwOiAycHg7CiAgICBiYWNrZ3JvdW5kOiAjMTExOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLyogR3JpZCBjZWxscyAqLwoubWpyLW1mdi1ncmlkLWNlbGwgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBiYWNrZ3JvdW5kOiAjMGQwZDBkOwogICAgbWluLXdpZHRoOiAwOwogICAgbWluLWhlaWdodDogMDsKfQoKLyogR2VuIGluZm8gb3ZlcmxheXMgZm9yIGdyaWQgY2VsbHMgQyBhbmQgRCAqLwoubWpyLW1mdi1nZW5pbmZvLWMsCi5tanItbWZ2LWdlbmluZm8tZCB7CiAgICBkaXNwbGF5OiBub25lOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogOHB4OwogICAgcmlnaHQ6IDhweDsKICAgIGJvdHRvbTogOHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjY1KTsKICAgIGNvbG9yOiAjZmZmOwogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBtYXgtaGVpZ2h0OiA0MCU7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgb3ZlcnNjcm9sbC1iZWhhdmlvci15OiBjb250YWluOwogICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgdG91Y2gtYWN0aW9uOiBwYW4teTsKICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOwogICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC40KTsKfQoKLm1qci1tZnYtZ2VuaW5mby1jIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1kIHN0cm9uZyB7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbWFyZ2luLXJpZ2h0OiA0cHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk1KTsKfQoKLyogUGVyLWZpZWxkIGxhYmVsIGNvbG9ycyBmb3IgQy9EIGdlbiBpbmZvIG92ZXJsYXlzICovCi5tanItbWZ2LWdlbmluZm8tYyBbZGF0YS1maWVsZD0icHJvbXB0Il0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgW2RhdGEtZmllbGQ9InByb21wdCJdIHN0cm9uZyB7CiAgICBjb2xvcjogIzdlYzhmZjsKfQoubWpyLW1mdi1nZW5pbmZvLWMgW2RhdGEtZmllbGQ9InNlZWQiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tZCBbZGF0YS1maWVsZD0ic2VlZCJdIHN0cm9uZyB7CiAgICBjb2xvcjogI2ZmZDQ3YTsKfQoubWpyLW1mdi1nZW5pbmZvLWMgW2RhdGEtZmllbGQ9Im1vZGVsIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgW2RhdGEtZmllbGQ9Im1vZGVsIl0gc3Ryb25nIHsKICAgIGNvbG9yOiAjN2RkYThhOwp9Ci5tanItbWZ2LWdlbmluZm8tYyBbZGF0YS1maWVsZD0ibG9yYSJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1kIFtkYXRhLWZpZWxkPSJsb3JhIl0gc3Ryb25nIHsKICAgIGNvbG9yOiAjZDQ4Y2ZmOwp9Ci5tanItbWZ2LWdlbmluZm8tYyBbZGF0YS1maWVsZD0ic2FtcGxlciJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1kIFtkYXRhLWZpZWxkPSJzYW1wbGVyIl0gc3Ryb25nIHsKICAgIGNvbG9yOiAjZmY5ZjdhOwp9Ci5tanItbWZ2LWdlbmluZm8tYyBbZGF0YS1maWVsZD0ic2NoZWR1bGVyIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgW2RhdGEtZmllbGQ9InNjaGVkdWxlciJdIHN0cm9uZyB7CiAgICBjb2xvcjogI2ZmN2E5ZjsKfQoubWpyLW1mdi1nZW5pbmZvLWMgW2RhdGEtZmllbGQ9ImNmZyJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1kIFtkYXRhLWZpZWxkPSJjZmciXSBzdHJvbmcgewogICAgY29sb3I6ICM3YTlmZmY7Cn0KLm1qci1tZnYtZ2VuaW5mby1jIFtkYXRhLWZpZWxkPSJzdGVwIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgW2RhdGEtZmllbGQ9InN0ZXAiXSBzdHJvbmcgewogICAgY29sb3I6ICM3YWZmZDQ7Cn0KCi8qIEdlbiBpbmZvIGFjdGl2ZSBzdGF0ZSAtIGJ1dHRvbiBnbG93cyB3aGVuIGF0IGxlYXN0IG9uZSBmaWVsZCBpcyBzZWxlY3RlZCAqLwoubWpyLW1mdiAubWpyLWljb24tYnRuLmlzLW9uIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSh2YXIoLS1tanItZ3JvdXAtYWNjZW50LCA5NSwgMTc5LCAyNTUpLCAwLjU1KTsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yLCAjMzMzKSA4MCUsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpIDE1JSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpIDI1JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuLmlzLW9wZW4gewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZikgNjIlLCAjZmZmZmZmIDEyJSk7CiAgICBjb2xvcjogI2VlZjdmZjsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoOTUsIDE3OSwgMjU1LCAwLjI4KSwgcmdiYSg5NSwgMTc5LCAyNTUsIDAuMTQpKTsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAwIDAgMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCksCiAgICAgICAgMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKSAyNiUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItaWNvbi1idG4uaXMtb3BlbiB7CiAgICBjb2xvcjogI2ZmZmZmZiAhaW1wb3J0YW50Owp9CgovKiBHZW4gaW5mbyBkcm9wZG93biBwYW5lbCAqLwoubWpyLW1mdi1nZW4tZHJvcGRvd24gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgei1pbmRleDogMTAwMDE7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSwgIzJhMmEyYSkgOTYlLCB0cmFuc3BhcmVudCk7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICBwYWRkaW5nOiA2cHggNHB4OwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxOTYsIDIwMiwgMjEwLCAwLjE4KTsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgMCA4cHggMjRweCByZ2JhKDAsIDAsIDAsIDAuNTUpLAogICAgICAgIDAgMnB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICBkaXNwbGF5OiBub25lOwogICAgbWluLXdpZHRoOiAxNTBweDsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig4cHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoOHB4KTsKfQoKLm1qci1tZnYtZ2VuLWRyb3Bkb3duOjpiZWZvcmUgewogICAgY29udGVudDogIkdFTiBJTkZPIjsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgZm9udC1zaXplOiA5cHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuOHB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zNSk7CiAgICBwYWRkaW5nOiAycHggMTBweCA2cHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgxOTYsIDIwMiwgMjEwLCAwLjEpOwogICAgbWFyZ2luLWJvdHRvbTogNHB4Owp9CgoubWpyLW1mdi1nZW4tZHJvcGRvd24uaXMtdmlzaWJsZSB7CiAgICBkaXNwbGF5OiBibG9jazsKfQoKLm1qci1tZnYtZ2VuLWRyb3Bkb3duLXJvdyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgcGFkZGluZzogNXB4IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDEwMG1zIGVhc2U7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLm1qci1tZnYtZ2VuLWRyb3Bkb3duLXJvdzpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDcpOwp9CgoubWpyLW1mdi1nZW4tZHJvcGRvd24tcm93IGlucHV0W3R5cGU9ImNoZWNrYm94Il0gewogICAgd2lkdGg6IDEzcHg7CiAgICBoZWlnaHQ6IDEzcHg7CiAgICBhY2NlbnQtY29sb3I6IHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZmxleC1zaHJpbms6IDA7Cn0KCi8qIFRyYW5zZm9ybSBmb3IgcGFuL3pvb20gLSBhcHBsaWVkIGlubGluZSBmb3IgZHluYW1pYyB2YWx1ZXMgKi8KLm1qci1tZnYtbWVkaWEtLXRyYW5zZm9ybSB7CiAgICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7Cn0KCi8qIEN1cnNvciBmZWVkYmFjayBmb3IgcGFuL3pvb20gaW50ZXJhY3Rpb25zICovCi5tanItbWZ2LWNvbnRlbnQtLWdyYWIgewogICAgY3Vyc29yOiBncmFiOwp9CgoubWpyLW1mdi1jb250ZW50LS1ncmFiYmluZyB7CiAgICBjdXJzb3I6IGdyYWJiaW5nOwp9CgovKiBTaWRlYmFyIHRhYiBidXR0b246IGFsbG93IDItbGluZSBsYWJlbCB2aWEgXG4gaW4gbGFiZWwgc3RyaW5nICovCi5tYWpvb3ItYXNzZXRzLXRhYi1idXR0b24gLnNpZGUtYmFyLWJ1dHRvbi1sYWJlbCB7CiAgICB3aGl0ZS1zcGFjZTogcHJlLWxpbmU7Cn0KCi8qIEJvdHRvbS1wYW5lbCBnZW5lcmF0ZWQgZmVlZDogY29tcGFjdCBjYXJkcyB3aXRoIG9ubHkgdGhlIGdlbmVyYXRpb24tdGltZSBwaWxsICovCi5tanItYm90dG9tLWZlZWQgewogICAgbWluLWhlaWdodDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5tanItYm90dG9tLWZlZWQgLm1qci1hbS1ncmlkLXNjcm9sbCB7CiAgICBmbGV4OiAxIDEgYXV0bzsKICAgIG1pbi1oZWlnaHQ6IDA7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIHNjcm9sbGJhci1ndXR0ZXI6IHN0YWJsZTsKICAgIG92ZXJzY3JvbGwtYmVoYXZpb3IteTogY29udGFpbjsKICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgIHRvdWNoLWFjdGlvbjogcGFuLXk7CiAgICBzY3JvbGwtYmVoYXZpb3I6IHNtb290aDsKICAgIHNjcm9sbGJhci13aWR0aDogdGhpbjsKICAgIHNjcm9sbGJhci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIsICMyZjM1NDApIDcwJSwgIzdmOGVhMyAzMCUpCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTAsICMxNjE5MWYpIDg4JSwgIzAwMCAxMiUpOwp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItYW0tZ3JpZC1zY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyLAoubWpyLWZlZWQtZ3JvdXAtcG9wb3Zlci1ncmlkOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICB3aWR0aDogMTBweDsKICAgIGhlaWdodDogMTBweDsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWFtLWdyaWQtc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiwKLm1qci1mZWVkLWdyb3VwLXBvcG92ZXItZ3JpZDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIsICMyZjM1NDApIDcwJSwgIzdmOGVhMyAzMCUpOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7Cn0KCi5tanItYm90dG9tLWZlZWQgLm1qci1hbS1ncmlkLXNjcm9sbDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2ssCi5tanItZmVlZC1ncm91cC1wb3BvdmVyLWdyaWQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wLCAjMTYxOTFmKSA4OCUsICMwMDAgMTIlKTsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4Owp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZCB7CiAgICBnYXA6IDZweCAhaW1wb3J0YW50OwogICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50OwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgobWluKDEwMCUsIDEzMnB4KSwgMWZyKSkgIWltcG9ydGFudDsKICAgIG1pbi1oZWlnaHQ6IDA7CiAgICBoZWlnaHQ6IGF1dG87CiAgICBhbGlnbi1jb250ZW50OiBzdGFydDsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWNhcmQsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkIHsKICAgIGJvcmRlci1yYWRpdXM6IDEycHggIWltcG9ydGFudDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgOTIlLCAjMDAwIDglKSAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzogMCA2cHggMThweCByZ2JhKDAsIDAsIDAsIDAuMjIpICFpbXBvcnRhbnQ7CiAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWNhcmQ6aG92ZXIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KSAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzogMCAxMHB4IDI0cHggcmdiYSgwLCAwLCAwLCAwLjI4KSAhaW1wb3J0YW50OwoKICAgIC5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkLmlzLXNlbGVjdGVkIHsKICAgICAgICBib3gtc2hhZG93OgogICAgICAgICAgICAwIDAgMCAzcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1jYXJkLXNlbGVjdGlvbi1jb2xvcikgODAlLCB2YXIoLS1jb250ZW50LWZnKSksCiAgICAgICAgICAgIDAgMCAwIDZweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKSAzMCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAgICAgMCAwIDIwcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1jYXJkLXNlbGVjdGlvbi1jb2xvcikgNDAlLCB0cmFuc3BhcmVudCksCiAgICAgICAgICAgIDAgMTBweCAyOHB4IHJnYmEoMCwgMCwgMCwgMC4yOCkgIWltcG9ydGFudDsKICAgICAgICBvdXRsaW5lOiAycHggc29saWQgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKSAhaW1wb3J0YW50OwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7CiAgICB9Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIHsKICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci10aHVtYiB7CiAgICBvdmVyZmxvdzogdmlzaWJsZSAhaW1wb3J0YW50OwogICAgaXNvbGF0aW9uOiBpc29sYXRlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci10aHVtYjo6YmVmb3JlLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci10aHVtYjo6YWZ0ZXIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iOjpiZWZvcmUsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iOjphZnRlciB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgei1pbmRleDogLTE7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIHRyYW5zZm9ybSAxNDBtcyBlYXNlLAogICAgICAgIG9wYWNpdHkgMTQwbXMgZWFzZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIC5tanItdGh1bWI6OmJlZm9yZSwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIC5tanItdGh1bWI6OmJlZm9yZSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg1cHgsIDVweCkgc2NhbGUoMC45ODUpOwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMykpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xLCAjMjAyNDJiKSA4NCUsICMwMDAgMTYlKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7CiAgICBib3gtc2hhZG93OiAwIDhweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xNik7CiAgICBvcGFjaXR5OiAwLjk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iOjphZnRlciwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIC5tanItdGh1bWI6OmFmdGVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDEwcHgsIDEwcHgpIHNjYWxlKDAuOTcpOwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDIpKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCwgIzE2MTkxZikgODIlLCAjMDAwIDE4JSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwogICAgYm94LXNoYWRvdzogMCAxMnB4IDIycHggcmdiYSgwLCAwLCAwLCAwLjE0KTsKICAgIG9wYWNpdHk6IDAuNzU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTpob3ZlciAubWpyLXRodW1iOjpiZWZvcmUsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTpob3ZlciAubWpyLXRodW1iOjpiZWZvcmUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoNnB4LCA2cHgpIHNjYWxlKDAuOTg1KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOmhvdmVyIC5tanItdGh1bWI6OmFmdGVyLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl06aG92ZXIgLm1qci10aHVtYjo6YWZ0ZXIgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTJweCwgMTJweCkgc2NhbGUoMC45Nyk7Cn0KCi5tanItYm90dG9tLWZlZWQgLm1qci10aHVtYiB7CiAgICBhc3BlY3QtcmF0aW86IDAuOTUgLyAxICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgNzIlLCAjMDAwIDI4JSkgIWltcG9ydGFudDsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLXRodW1iLXBsYXkgewogICAgYmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KAogICAgICAgIGNpcmNsZSBhdCBjZW50ZXIsCiAgICAgICAgcmdiYSgwLCAwLCAwLCAwLjE4KSwKICAgICAgICByZ2JhKDAsIDAsIDAsIDAuMDQpIDM4JSwKICAgICAgICB0cmFuc3BhcmVudCA3MCUKICAgICk7Cn0KCi5tanItYm90dG9tLWZlZWQgLm1qci1iYWRnZS1leHQsCi5tanItYm90dG9tLWZlZWQgLm1qci1iYWRnZS1yYXRpbmcsCi5tanItYm90dG9tLWZlZWQgLm1qci1iYWRnZS10YWdzIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC45Mik7CiAgICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgbGVmdDsKfQoKLyogLS0gRmVlZCBjYXJkIGluZm86IGRlZmF1bHQgaGlkZGVuLCB0b2dnbGVkIHZpYSBtanItZmVlZC1zaG93LSogY2xhc3NlcyBvbiAubWpyLWdyaWQgLS0gKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLWNhcmQtaW5mbyB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nOiA0cHggNnB4ICFpbXBvcnRhbnQ7CiAgICBtaW4td2lkdGg6IDA7Cn0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1pbmZvIC5tanItY2FyZC1pbmZvIHsKICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7Cn0KCi8qIEZlZWQgZmlsZW5hbWUgKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLWNhcmQtZmlsZW5hbWUgewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9Ci5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctZmlsZW5hbWUgLm1qci1jYXJkLWZpbGVuYW1lIHsKICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7Cn0KCi8qIEZlZWQgZGltZW5zaW9ucyAvIGR1cmF0aW9uICovCi5tanItYm90dG9tLWZlZWQgLm1qci1tZXRhLXJlcywKLm1qci1ib3R0b20tZmVlZCAubWpyLW1ldGEtZHVyYXRpb24gewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9Ci5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctZGltZW5zaW9ucyAubWpyLW1ldGEtcmVzLAoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZC5tanItZmVlZC1zaG93LWRpbWVuc2lvbnMgLm1qci1tZXRhLWR1cmF0aW9uIHsKICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50Owp9CgovKiBGZWVkIGRhdGUvdGltZSAqLwoubWpyLWJvdHRvbS1mZWVkIC5tanItbWV0YS1kYXRlLAoubWpyLWJvdHRvbS1mZWVkIC5tanItbWV0YS10aW1lLXZhbCB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1kYXRlIC5tanItbWV0YS1kYXRlLAoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZC5tanItZmVlZC1zaG93LWRhdGUgLm1qci1tZXRhLXRpbWUtdmFsIHsKICAgIGRpc3BsYXk6IGlubGluZSAhaW1wb3J0YW50Owp9CgovKiBGZWVkIGdlbmVyYXRpb24gdGltZSBiYWRnZSAqLwoubWpyLWJvdHRvbS1mZWVkIC5tanItbWV0YS1nZW50aW1lIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZC5tanItZmVlZC1zaG93LWdlbnRpbWUgLm1qci1tZXRhLWdlbnRpbWUgewogICAgZGlzcGxheTogaW5saW5lLWZsZXggIWltcG9ydGFudDsKfQoKLyogRmVlZCB3b3JrZmxvdyBkb3QgKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLWNhcmQtZG90LXdyYXBwZXIgewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9Ci5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctZG90IC5tanItY2FyZC1kb3Qtd3JhcHBlciB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleCAhaW1wb3J0YW50Owp9CgovKiBGZWVkIGJhZGdlcyAqLwoubWpyLWJvdHRvbS1mZWVkIC5tanItYmFkZ2UtZXh0IHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZC5tanItZmVlZC1zaG93LWJhZGdlcy1leHQgLm1qci1iYWRnZS1leHQgewogICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50Owp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItYmFkZ2UtcmF0aW5nIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZC5tanItZmVlZC1zaG93LWJhZGdlcy1yYXRpbmcgLm1qci1iYWRnZS1yYXRpbmcgewogICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50Owp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItYmFkZ2UtdGFncyB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1iYWRnZXMtdGFncyAubWpyLWJhZGdlLXRhZ3MgewogICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50Owp9CgovKiBGZWVkIG1ldGEgcm93IHN0eWxpbmcgLSBmbGV4IGxheW91dCBzbyB2aXNpYmxlIGl0ZW1zIHN0YXkgc2VwYXJhdGVkICovCi5tanItYm90dG9tLWZlZWQgLm1qci1jYXJkLW1ldGEtcm93IHsKICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsKICAgIGZsZXgtd3JhcDogbm93cmFwICFpbXBvcnRhbnQ7CiAgICBhbGlnbi1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7CiAgICBnYXA6IDVweCAhaW1wb3J0YW50OwogICAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50OwogICAgbWluLXdpZHRoOiAwICFpbXBvcnRhbnQ7CiAgICBwYWRkaW5nLXJpZ2h0OiAwICFpbXBvcnRhbnQ7CiAgICBsaW5lLWhlaWdodDogMS4zICFpbXBvcnRhbnQ7CiAgICBvcGFjaXR5OiAwLjc4ICFpbXBvcnRhbnQ7CiAgICBmb250LXNpemU6IDAuOGVtICFpbXBvcnRhbnQ7CiAgICAvKiB0ZXh0LW92ZXJmbG93IGVsbGlwc2lzIGRvZXNuJ3QgYXBwbHkgb24gYSBmbGV4IGNvbnRhaW5lciBpdHNlbGYgKi8KfQovKiBFYWNoIG1ldGEgc3BhbiB0cnVuY2F0ZXMgaW5kaXZpZHVhbGx5IGlmIHRvbyBsb25nICovCi5tanItYm90dG9tLWZlZWQgLm1qci1jYXJkLW1ldGEtcm93ID4gc3BhbiB7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgbWluLXdpZHRoOiAwOwogICAgZmxleC1zaHJpbms6IDE7Cn0KLyogR2VudGltZSBiYWRnZSBhbmQgdGltZSB2YWx1ZSBzaG91bGQgc3RheSB2aXNpYmxlIChkb24ndCBzaHJpbmsgYXdheSkgKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLWNhcmQtbWV0YS1yb3cgPiAubWpyLW1ldGEtZ2VudGltZSwKLm1qci1ib3R0b20tZmVlZCAubWpyLWNhcmQtbWV0YS1yb3cgPiAubWpyLW1ldGEtdGltZS12YWwgewogICAgZmxleC1zaHJpbms6IDA7Cn0KCi5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctZ2VudGltZSAubWpyLW1ldGEtZ2VudGltZSB7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAzcHg7CiAgICBwYWRkaW5nOiAzcHggN3B4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDEwLCAxNCwgMjAsIDAuNzQpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMjIpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDgwMCAhaW1wb3J0YW50OwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDE1ZW07CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk4KTsKICAgIHRleHQtc2hhZG93OgogICAgICAgIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuOSksCiAgICAgICAgMCAwIDEwcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKfQoKLyogLS0gQXVkaW8gLyAzRCBwbGFjZWhvbGRlciB0aHVtYm5haWxzIGluIHRoZSBmZWVkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCi8qIEF1ZGlvIGNhcmRzIHNob3cgdGhlIHdhdmVmb3JtIHNwcml0ZTsgZ2l2ZSBpdCBhIGRpc3RpbmN0IGJhY2tncm91bmQgc28gaXQKICAgZG9lc24ndCBsb29rIGxpa2UgYSBicm9rZW4gaW1hZ2UgcGxhY2Vob2xkZXIgaW4gdGhlIGZlZWQuICovCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWtpbmQ9ImF1ZGlvIl0gLm1qci10aHVtYiwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZXh0PSJtcDMiXSAubWpyLXRodW1iLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1leHQ9IndhdiJdIC5tanItdGh1bWIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWV4dD0ib2dnIl0gLm1qci10aHVtYiwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZXh0PSJmbGFjIl0gLm1qci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgNjAlLCAjMWExZjJiIDQwJSkgIWltcG9ydGFudDsKfQoKLyogM0QgbW9kZWwgY2FyZHMgdXNlIGFuIGljb24gcGxhY2Vob2xkZXIgLSBhZGQgYSBzdWJ0bGUgZ3JhZGllbnQgc28gdGhleSByZWFkCiAgIGFzIGludGVudGlvbmFsIHJhdGhlciB0aGFuIG1pc3NpbmcuICovCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWtpbmQ9Im1vZGVsM2QiXSAubWpyLXRodW1iLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1leHQ9ImdsYiJdIC5tanItdGh1bWIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWV4dD0iZ2x0ZiJdIC5tanItdGh1bWIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWV4dD0ib2JqIl0gLm1qci10aHVtYiwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZXh0PSJmYngiXSAubWpyLXRodW1iIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA1MCUsICMwZDExMTcgNTAlKSAhaW1wb3J0YW50Owp9CgovKiAtLSBGZWVkIGdyb3VwIGJ1dHRvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCi5tanItYm90dG9tLWZlZWQgLm1qci1mZWVkLWdyb3VwLWJ1dHRvbiB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDM0cHg7CiAgICByaWdodDogNnB4OwogICAgei1pbmRleDogMTE7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogNHB4OwogICAgbWluLXdpZHRoOiAyOHB4OwogICAgbWluLWhlaWdodDogMjhweDsKICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDEwLCAxNCwgMjAsIDAuNzQpOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45Nik7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjI0KTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBiYWNrZ3JvdW5kIDEyMG1zIGVhc2UsCiAgICAgICAgdHJhbnNmb3JtIDgwbXMgZWFzZTsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWZlZWQtZ3JvdXAtYnV0dG9uOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTgsIDI0LCAzNCwgMC45KTsKfQoKLm1qci1mZWVkLWdyb3VwLWJ1dHRvbi1pY29uIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIG9wYWNpdHk6IDAuOTsKfQoKLm1qci1mZWVkLWdyb3VwLWJ1dHRvbi1jb3VudCB7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGluZS1oZWlnaHQ6IDE7Cn0KCi8qIC0tIEZlZWQgZ3JvdXAgcG9wb3ZlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKLm1qci1mZWVkLWdyb3VwLXBvcG92ZXIgewogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktbWVudS1iZywgIzIyMik7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IsICMzYTNhM2EpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbGcsIDhweCk7CiAgICBib3gtc2hhZG93OiAwIDhweCAyOHB4IHJnYmEoMCwgMCwgMCwgMC40NSk7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgoubWpyLWZlZWQtZ3JvdXAtcG9wb3Zlci10aXRsZSB7CiAgICBwYWRkaW5nOiA4cHggMTBweCA0cHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKICAgIG1hcmdpbi1ib3R0b206IDhweDsKfQoKLm1qci1mZWVkLWdyb3VwLXBvcG92ZXItZ3JpZCB7CiAgICBwYWRkaW5nOiA0cHggOHB4IDEwcHg7CiAgICBtYXgtaGVpZ2h0OiAzNjBweDsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgc2Nyb2xsYmFyLWd1dHRlcjogc3RhYmxlOwogICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluOwogICAgc2Nyb2xsYmFyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMiwgIzJmMzU0MCkgNzAlLCAjN2Y4ZWEzIDMwJSkKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCwgIzE2MTkxZikgODglLCAjMDAwIDEyJSk7Cn0KCi5tanItZmVlZC1ncm91cC1idXR0b24taWNvbiwKLm1qci1mZWVkLWdyb3VwLWJ1dHRvbi1jb3VudCB7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLm1qci1mZWVkLWdyb3VwLW1lbWJlci1jYXJkIHsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1mZWVkLWdyb3VwLW1lbWJlci1jYXJkIC5tanItdGh1bWIgewogICAgYXNwZWN0LXJhdGlvOiAxIC8gMSAhaW1wb3J0YW50Owp9CgoubWpyLWZlZWQtZ3JvdXAtbWVtYmVyLWNhcmQgLm1qci1jYXJkLWluZm8gewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItc3RhY2stZ3JvdXAtYnV0dG9uIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMzRweDsKICAgIHJpZ2h0OiA2cHg7CiAgICB6LWluZGV4OiAxMTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBtaW4td2lkdGg6IDI4cHg7CiAgICBtaW4taGVpZ2h0OiAyOHB4OwogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTAsIDE0LCAyMCwgMC43NCk7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk2KTsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4yNCk7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKICAgIHRyYW5zaXRpb246CiAgICAgICAgYmFja2dyb3VuZCAxMjBtcyBlYXNlLAogICAgICAgIHRyYW5zZm9ybSA4MG1zIGVhc2U7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1zdGFjay1ncm91cC1idXR0b246aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgxOCwgMjQsIDM0LCAwLjkpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItc3RhY2stZ3JvdXAtYnV0dG9uID4gKiB7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLm1qci1maWxtc3RyaXA6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIHdpZHRoOiA0cHg7CiAgICBoZWlnaHQ6IDRweDsKfQoKLm1qci1maWxtc3RyaXA6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9CgoubWpyLWZpbG1zdHJpcDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpOwp9CgoubWpyLWZpbG1zdHJpcDpob3Zlcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIyKTsKfQoKLm1qci1maWxtc3RyaXAtYXVkaW8tdGh1bWIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogNXB4OwogICAgcGFkZGluZzogN3B4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44Mik7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAyNCUgMjQlLCByZ2JhKDc4LCAxODQsIDI1NSwgMC4yOCksIHRyYW5zcGFyZW50IDQyJSksCiAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4NCUgNzAlLCByZ2JhKDgyLCAyMjAsIDE1NiwgMC4xOCksIHRyYW5zcGFyZW50IDQwJSksCiAgICAgICAgbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgxOCwgMjUsIDM1LCAwLjk2KSwgcmdiYSg3LCAxMCwgMTUsIDAuOTgpKTsKfQoKLm1qci1maWxtc3RyaXAtYXVkaW8td2F2ZWZvcm0gewogICAgd2lkdGg6IDc2JTsKICAgIGhlaWdodDogMjRweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDJweDsKfQoKLm1qci1maWxtc3RyaXAtYXVkaW8td2F2ZWZvcm0gc3BhbiB7CiAgICB3aWR0aDogMnB4OwogICAgbWluLWhlaWdodDogNHB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTQpLCByZ2JhKDE0OCwgMjE4LCAyNTUsIDAuNjgpKTsKfQoKLm1qci1maWxtc3RyaXAtYXVkaW8tbGFiZWwgewogICAgbWF4LXdpZHRoOiAxMDAlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIHBhZGRpbmc6IDJweCA1cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yOCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICBmb250LXNpemU6IDdweDsKICAgIGZvbnQtd2VpZ2h0OiA4MDA7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXN0YWNrLWdyb3VwLWJ1dHRvbi1jb3VudCB7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGluZS1oZWlnaHQ6IDE7Cn0KCi8qIC0tIER1cGxpY2F0ZSBzdGFjayBidXR0b24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qIFNob3dzIG9uIHRoZSBwcmltYXJ5IGNhcmQgd2hlbiBzYW1lLWZpbGVuYW1lIGR1cGxpY2F0ZXMgZXhpc3QuICAgICAgICAgICAgICovCi8qIFBvc2l0aW9uZWQgYXQgYm90dG9tLXJpZ2h0IHRvIG5vdCBvdmVybGFwIHRoZSBzdGFjay1ncm91cCBidXR0b24gKHRvcC1yaWdodCkuICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1kdXAtc3RhY2stYnV0dG9uIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGJvdHRvbTogMzBweDsKICAgIHJpZ2h0OiA2cHg7CiAgICB6LWluZGV4OiAxMTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBtaW4td2lkdGg6IDI4cHg7CiAgICBtaW4taGVpZ2h0OiAyOHB4OwogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAxODAsIDAsIDAuMzgpOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDMwLCAxOCwgMCwgMC44Mik7CiAgICBjb2xvcjogcmdiYSgyNTUsIDIwMCwgNjAsIDAuOTYpOwogICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4zMik7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBiYWNrZ3JvdW5kIDAuMTVzLAogICAgICAgIHRyYW5zZm9ybSA4MG1zIGVhc2U7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1kdXAtc3RhY2stYnV0dG9uOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoNTAsIDMwLCAwLCAwLjk0KTsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDE4MCwgMCwgMC42KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWR1cC1zdGFjay1idXR0b24gPiAqIHsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZHVwLXN0YWNrLWNvdW50IHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZHVwLXN0YWNrZWQ9InRydWUiXSAubWpyLWR1cC1zdGFjay1idXR0b24gewogICAgYm94LXNoYWRvdzoKICAgICAgICAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjMyKSwKICAgICAgICAwIDAgMCAxcHggcmdiYSgyNTUsIDE4MCwgMCwgMC4yKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIC5tanItc3RhY2stZ3JvdXAtYnV0dG9uLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci1mZWVkLWdyb3VwLWJ1dHRvbiB7CiAgICBib3gtc2hhZG93OgogICAgICAgIDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMjQpLAogICAgICAgIDAgMCAwIDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl06aG92ZXIsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWR1cC1zdGFja2VkPSJ0cnVlIl06aG92ZXIgewogICAgdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7Cn0KCi8qIC0tIFZpc3VhbCBzdGFja2luZyBlZmZlY3QgLSBsYXllcmVkIGNhcmRzIGJlaGluZCB0aGUgbWFpbiBjYXJkIC0tLS0tLS0tLS0tLSAqLwovKiBDcmVhdGVzIHBzZXVkby1lbGVtZW50ICJjYXJkcyIgb2Zmc2V0IGJlaGluZCB0aGUgcHJpbWFyeSBjYXJkIHRvIHZpc3VhbGx5ICAgICovCi8qIGNvbW11bmljYXRlIHRoYXQgdGhpcyBjYXJkIHJlcHJlc2VudHMgYSBncm91cCBvZiBtdWx0aXBsZSBpbWFnZXMuICAgICAgICAgICAgKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDE7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTo6YmVmb3JlLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl06OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0OwogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktbWVudS1iZywgIzFhMWEyZSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAtMTsKICAgIHRyYW5zaXRpb246CiAgICAgICAgdHJhbnNmb3JtIDE4MG1zIGVhc2UsCiAgICAgICAgb3BhY2l0eSAxODBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl06OmJlZm9yZSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgzcHgsIDNweCkgcm90YXRlKDFkZWcpOwogICAgb3BhY2l0eTogMC40NTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOjphZnRlciB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg2cHgsIDZweCkgcm90YXRlKDIuMmRlZyk7CiAgICBvcGFjaXR5OiAwLjI1Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl06aG92ZXI6OmJlZm9yZSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg0cHgsIDRweCkgcm90YXRlKDEuNWRlZyk7CiAgICBvcGFjaXR5OiAwLjU1Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl06aG92ZXI6OmFmdGVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDhweCwgOHB4KSByb3RhdGUoM2RlZyk7CiAgICBvcGFjaXR5OiAwLjM1Owp9CgoubWpyLXN0YWNrLWdyb3VwLXBvcG92ZXIgewogICAgd2lkdGg6IG1pbig0NDBweCwgOTJ2dyk7Cn0KCi5tanItc3RhY2stZ3JvdXAtbWVtYmVyLWNhcmQgewogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXN0YWNrLWdyb3VwLW1lbWJlci1jYXJkIC5tanItdGh1bWIgewogICAgYXNwZWN0LXJhdGlvOiAxIC8gMSAhaW1wb3J0YW50Owp9CgoubWpyLXN0YWNrLWdyb3VwLW1lbWJlci1jYXJkIC5tanItY2FyZC1pbmZvIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqIExpZ2h0IG1vZGUgb3ZlcnJpZGVzIChDb21meVVJIHYxLjQyKyBpbXByb3ZlZCBsaWdodCB0aGVtZSkKICogVXNlcyBDb21meVVJIGRhdGEtdGhlbWUgYXR0cmlidXRlIHdoZW4gc2V0LCB3aXRoCiAqIHByZWZlcnMtY29sb3Itc2NoZW1lIGFzIGEgZmFsbGJhY2sgZm9yIG9sZGVyIHZlcnNpb25zLgogKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KCi8qIENvbWZ5VUkgc2V0cyBkYXRhLXRoZW1lPSJsaWdodCIgb24gPGh0bWw+IG9yIDxib2R5PiAqLwo6aXMoW2RhdGEtdGhlbWU9ImxpZ2h0Il0sIFtkYXRhLWNvbG9yLXNjaGVtZT0ibGlnaHQiXSkgLm1qci1hc3NldHMtbWFuYWdlciwKOmlzKFtkYXRhLXRoZW1lPSJsaWdodCJdLCBbZGF0YS1jb2xvci1zY2hlbWU9ImxpZ2h0Il0pIC5tanItcG9wb3ZlciB7CiAgICAtLW1qci1zdXJmYWNlLTA6IHZhcigtLWludGVyZmFjZS1wYW5lbC1zdXJmYWNlLCAjZjBmMGYwKTsKICAgIC0tbWpyLXN1cmZhY2UtMTogdmFyKC0taW50ZXJmYWNlLW1lbnUtc3VyZmFjZSwgI2ZhZmFmYSk7CiAgICAtLW1qci1zdXJmYWNlLTI6IHZhcigtLWludGVyZmFjZS1wYW5lbC1ob3Zlci1zdXJmYWNlLCAjZThlOGU4KTsKICAgIC0tbWpyLXN1cmZhY2UtMzogdmFyKC0tbW9kYWwtY2FyZC1iYWNrZ3JvdW5kLCAjZmZmZmZmKTsKICAgIC0tbWpyLWJvcmRlcjogdmFyKC0tYm9yZGVyLWRlZmF1bHQsIHJnYmEoMCwgMCwgMCwgMC4xNCkpOwogICAgLS1tanItbXV0ZWQ6IHZhcigtLW11dGVkLWZvcmVncm91bmQsIHJnYmEoMCwgMCwgMCwgMC41NSkpOwogICAgLS1tanItY2FyZC1ob3Zlci1jb2xvcjogdmFyKC0taW50ZXJmYWNlLXBhbmVsLWhvdmVyLXN1cmZhY2UsICNlMGUwZTApOwp9CgpAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkgewogICAgLyogRmFsbGJhY2s6IG9ubHkgYXBwbHkgaWYgQ29tZnlVSSBoYXNuJ3Qgc2V0IGFuIGV4cGxpY2l0IGRhdGEtdGhlbWUgKi8KICAgIC5tanItYXNzZXRzLW1hbmFnZXI6bm90KFtkYXRhLXRoZW1lLWFwcGxpZWRdKSwKICAgIC5tanItcG9wb3Zlcjpub3QoW2RhdGEtdGhlbWUtYXBwbGllZF0pIHsKICAgICAgICAtLW1qci1zdXJmYWNlLTA6IHZhcigtLWludGVyZmFjZS1wYW5lbC1zdXJmYWNlLCAjZjBmMGYwKTsKICAgICAgICAtLW1qci1zdXJmYWNlLTE6IHZhcigtLWludGVyZmFjZS1tZW51LXN1cmZhY2UsICNmYWZhZmEpOwogICAgICAgIC0tbWpyLXN1cmZhY2UtMjogdmFyKC0taW50ZXJmYWNlLXBhbmVsLWhvdmVyLXN1cmZhY2UsICNlOGU4ZTgpOwogICAgICAgIC0tbWpyLXN1cmZhY2UtMzogdmFyKC0tbW9kYWwtY2FyZC1iYWNrZ3JvdW5kLCAjZmZmZmZmKTsKICAgICAgICAtLW1qci1ib3JkZXI6IHZhcigtLWJvcmRlci1kZWZhdWx0LCByZ2JhKDAsIDAsIDAsIDAuMTQpKTsKICAgICAgICAtLW1qci1tdXRlZDogdmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjU1KSk7CiAgICAgICAgLS1tanItY2FyZC1ob3Zlci1jb2xvcjogdmFyKC0taW50ZXJmYWNlLXBhbmVsLWhvdmVyLXN1cmZhY2UsICNlMGUwZTApOwogICAgfQp9CgovKiAtLS0gU2tlbGV0b24gbG9hZGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKLm1qci1jYXJkLXNrZWxldG9uIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEsICMyYTJhMmEpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgIzNhM2EzYSk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1sZywgOHB4KTsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAvKiBNYXRjaCAubWpyLXRodW1iIGFzcGVjdCByYXRpbyBzbyBza2VsZXRvbnMgaGF2ZSB0aGUgc2FtZSBmb290cHJpbnQgYXMgcmVhbCBjYXJkcy4gKi8KICAgIGFzcGVjdC1yYXRpbzogMSAvIDE7Cn0KCi8qIFNoaW1tZXIgc3dlZXAgKi8KLm1qci1jYXJkLXNrZWxldG9uOjphZnRlciB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGluc2V0OiAwOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDkwZGVnLAogICAgICAgIHRyYW5zcGFyZW50IDAlLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yLCAjM2EzYTNhKSA4MCUsIHRyYW5zcGFyZW50KSA1MCUsCiAgICAgICAgdHJhbnNwYXJlbnQgMTAwJQogICAgKTsKICAgIGFuaW1hdGlvbjogbWpyLXNoaW1tZXIgMS40cyBlYXNlLWluLW91dCBpbmZpbml0ZTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMTAwJSk7Cn0KCkBrZXlmcmFtZXMgbWpyLXNoaW1tZXIgewogICAgZnJvbSB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTsKICAgIH0KICAgIHRvIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7CiAgICB9Cn0KCkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7CiAgICAubWpyLWNhcmQtc2tlbGV0b246OmFmdGVyIHsKICAgICAgICBhbmltYXRpb246IG5vbmU7CiAgICB9Cn0KCi8qIC0tLSBSZXNwb25zaXZlIHN1bW1hcnkgYmFyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgovKgogKiBFbmFibGUgY29udGFpbmVyIHF1ZXJpZXMgb24gdGhlIHN1bW1hcnkgYmFyIHNvIGNoaWxkcmVuIGNhbiByZXNwb25kIHRvIGl0cwogKiBhY3R1YWwgcmVuZGVyZWQgd2lkdGggKGUuZy4gd2hlbiB0aGUgcGFuZWwgaXMgZG9ja2VkIGluIGEgbmFycm93IHNpZGViYXIpLgogKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXN1bW1hcnkgewogICAgY29udGFpbmVyLXR5cGU6IGlubGluZS1zaXplOwogICAgY29udGFpbmVyLW5hbWU6IG1qci1zdW1tYXJ5LWJhcjsKfQoKLyogQmVsb3cgfjM4MCBweDogaGlkZSB0aGUgcGlsbHMvcmlnaHQgc2VjdGlvbiB0byBwcmV2ZW50IG92ZXJmbG93LiAqLwpAY29udGFpbmVyIG1qci1zdW1tYXJ5LWJhciAobWF4LXdpZHRoOiAzODBweCkgewogICAgLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXN1bW1hcnktcmlnaHQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CiAgICAubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc3VtbWFyeS10ZXh0IHsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICB9Cn0K", "" + import.meta.url).toString(), n = document.createElement("link"); + let e = new URL("data:text/css;base64,LyoqCiAqIE1ham9vciBBc3NldHMgTWFuYWdlciAtIENvbWZ5LWxpa2UgdGhlbWUgbGF5ZXIKICoKICogUlVMRVM6CiAqIC0gRG8gTk9UIGhhcmRjb2RlIGEgY3VzdG9tIHBhbGV0dGU7IHVzZSBleGlzdGluZyBDb21meVVJIENTUyB2YXJpYWJsZXMgdmlhIHZhciguLi4pLgogKiAtIEtlZXAgZXZlcnl0aGluZyBzY29wZWQgdW5kZXIgYC5tanItYXNzZXRzLW1hbmFnZXJgIHRvIGF2b2lkIGxlYWtpbmcgc3R5bGVzIHRvIENvbWZ5VUkgKGV4Y2VwdCBgLm1qci1wb3BvdmVyKmAgd2hpY2ggY2FuIGJlIHBvcnRhbGVkIHRvIGBkb2N1bWVudC5ib2R5YCkuCiAqLwoKLm1qci1hc3NldHMtbWFuYWdlciB7CiAgICAvKiBUeXBvZ3JhcGh5ICovCiAgICBmb250LWZhbWlseTogdmFyKAogICAgICAgIC0tY29tZnktZm9udCwKICAgICAgICB2YXIoCiAgICAgICAgICAgIC0tZm9udC1pbnRlciwKICAgICAgICAgICAgdWktc2Fucy1zZXJpZiwKICAgICAgICAgICAgc3lzdGVtLXVpLAogICAgICAgICAgICAtYXBwbGUtc3lzdGVtLAogICAgICAgICAgICAiU2Vnb2UgVUkiLAogICAgICAgICAgICBSb2JvdG8sCiAgICAgICAgICAgIEFyaWFsLAogICAgICAgICAgICBzYW5zLXNlcmlmCiAgICAgICAgKQogICAgKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yLCB2YXIoLS1jb250ZW50LWZnLCB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKSkpOwoKICAgIC8qCiAgICAgKiBTdXJmYWNlcyAtIHByaW9yaXR5OiBDb21meVVJIHYxLjQyIGRlc2lnbi1zeXN0ZW0gdG9rZW4gLT4gbGVnYWN5IHRva2VuIC0+IGhhcmQgZmFsbGJhY2sKICAgICAqIE5ldyB0b2tlbnM6IC0taW50ZXJmYWNlLXBhbmVsLXN1cmZhY2UsIC0taW50ZXJmYWNlLW1lbnUtc3VyZmFjZSwgLS1pbnRlcmZhY2UtcGFuZWwtaG92ZXItc3VyZmFjZSwKICAgICAqICAgICAgICAgICAgIC0tbW9kYWwtY2FyZC1iYWNrZ3JvdW5kLCAtLWJ1dHRvbi1zdXJmYWNlLCAtLWJ1dHRvbi1ob3Zlci1zdXJmYWNlLAogICAgICogICAgICAgICAgICAgLS1pbnRlcmZhY2UtcGFuZWwtc2VsZWN0ZWQtc3VyZmFjZSwgLS1wcmltYXJ5LWJhY2tncm91bmQsIC0tbXV0ZWQtZm9yZWdyb3VuZCwKICAgICAqICAgICAgICAgICAgIC0tYm9yZGVyLWRlZmF1bHQsIC0tc3VjY2Vzcy1iYWNrZ3JvdW5kLCAtLXdhcm5pbmctYmFja2dyb3VuZCwgLS1kZXN0cnVjdGl2ZS1iYWNrZ3JvdW5kCiAgICAgKi8KICAgIC0tbWpyLXN1cmZhY2UtMDogdmFyKC0taW50ZXJmYWNlLXBhbmVsLXN1cmZhY2UsIHZhcigtLWNvbnRlbnQtYmcsICMxZTFlMWUpKTsKICAgIC0tbWpyLXN1cmZhY2UtMTogdmFyKC0taW50ZXJmYWNlLW1lbnUtc3VyZmFjZSwgdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSkpOwogICAgLS1tanItc3VyZmFjZS0yOiB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtaG92ZXItc3VyZmFjZSwgdmFyKC0tY29tZnktbWVudS1zZWNvbmRhcnktYmcsICMzMzMpKTsKICAgIC0tbWpyLXN1cmZhY2UtMzogdmFyKC0tbW9kYWwtY2FyZC1iYWNrZ3JvdW5kLCB2YXIoLS1jb21meS1tZW51LWJnLCAjMjIyKSk7CiAgICAtLW1qci1ib3JkZXI6IHZhcigtLWJvcmRlci1kZWZhdWx0LCB2YXIoLS1ib3JkZXItY29sb3IsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpKTsKICAgIC0tbWpyLW11dGVkOiB2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kLCB2YXIoLS1kZXNjcmlwLXRleHQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42NSkpKTsKICAgIC0tbWpyLWFjY2VudDogdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKTsKICAgIC0tbWpyLWFjY2VudC1ob3ZlcjogdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLWhvdmVyLCB2YXIoLS1jb21meS1hY2NlbnQsICM3ZWM4ZmYpKTsKICAgIC0tbWpyLWJ0bi1zdXJmYWNlOiB2YXIoLS1idXR0b24tc3VyZmFjZSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgLS1tanItYnRuLWhvdmVyOiB2YXIoLS1idXR0b24taG92ZXItc3VyZmFjZSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgLS1tanItc2VsZWN0ZWQtc3VyZmFjZTogdmFyKC0taW50ZXJmYWNlLXBhbmVsLXNlbGVjdGVkLXN1cmZhY2UsIHJnYmEoOTUsIDE3OSwgMjU1LCAwLjE1KSk7CgogICAgLyogUmFkaWkgLSB1c2UgQ29tZnlVSSBkZXNpZ24tc3lzdGVtIHJhZGl1cyB0b2tlbnMgd2hlbiBhdmFpbGFibGUgKi8KICAgIC0tbWpyLXItc206IHZhcigtLXJhZGl1cy1zbSwgOHB4KTsKICAgIC0tbWpyLXItbWQ6IHZhcigtLXJhZGl1cy1tZCwgMTBweCk7CiAgICAtLW1qci1yLWxnOiB2YXIoLS1yYWRpdXMtbGcsIDEycHgpOwoKICAgIC8qIFNwYWNpbmcgKi8KICAgIC0tbWpyLXBhZC1zbTogOHB4OwogICAgLS1tanItcGFkLW1kOiAxMnB4OwogICAgLS1tanItcGFkLWxnOiAxNnB4OwoKICAgIC8qIFNlbWFudGljIFN0YXR1cyBDb2xvcnMgLSBwcmVmZXIgQ29tZnlVSSB2MS40MiBzZW1hbnRpYyB0b2tlbnMgKi8KICAgIC0tbWpyLXN0YXR1cy1zdWNjZXNzOiB2YXIoLS1zdWNjZXNzLWJhY2tncm91bmQsIHZhcigtLWNvbWZ5LXN0YXR1cy1zdWNjZXNzLCAjNGNhZjUwKSk7CiAgICAtLW1qci1zdGF0dXMtd2FybmluZzogdmFyKC0td2FybmluZy1iYWNrZ3JvdW5kLCB2YXIoLS1jb21meS1zdGF0dXMtd2FybmluZywgI2ZmYTcyNikpOwogICAgLS1tanItc3RhdHVzLWVycm9yOiB2YXIoLS1kZXN0cnVjdGl2ZS1iYWNrZ3JvdW5kLCB2YXIoLS1jb21meS1zdGF0dXMtZXJyb3IsICNmNDQzMzYpKTsKICAgIC0tbWpyLXN0YXR1cy1pbmZvOiB2YXIoLS1jb21meS1zdGF0dXMtaW5mbywgIzIxOTZmMyk7CiAgICAtLW1qci1zdGF0dXMtbmV1dHJhbDogdmFyKC0tY29tZnktc3RhdHVzLW5ldXRyYWwsICM5ZTllOWUpOwogICAgLS1tanItc3Rhci1hY3RpdmU6ICNmZmQ0NWE7CgogICAgLyogQmFkZ2UgY29sb3JzIChvdmVycmlkZGVuIGJ5IHNldHRpbmdzKSAqLwogICAgLS1tanItYmFkZ2UtaW1hZ2U6ICMyMTk2ZjM7CiAgICAtLW1qci1iYWRnZS12aWRlbzogIzljMjdiMDsKICAgIC0tbWpyLWJhZGdlLWF1ZGlvOiAjZmY5ODAwOwogICAgLS1tanItYmFkZ2UtbW9kZWwzZDogIzRjYWY1MDsKICAgIC0tbWpyLWNhcmQtaG92ZXItY29sb3I6IHZhcigtLWludGVyZmFjZS1wYW5lbC1ob3Zlci1zdXJmYWNlLCAjM2QzZDNkKTsKICAgIC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yOiB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtc2VsZWN0ZWQtc3VyZmFjZSwgIzRhOTBlMik7CiAgICAtLW1qci1yYXRpbmctY29sb3I6ICNmZjk1MDA7CiAgICAtLW1qci10YWctY29sb3I6ICM0YTkwZTI7Cn0KCi8qIE1ha2UgdGhlIHRoZW1lIHZpc2libHkgYXBwbHkgZXZlbiB3aXRoIGlubGluZSBzdHlsZXMgKi8KLm1qci1hc3NldHMtbWFuYWdlciAqIHsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIubWpyLWFtLWNvbnRhaW5lciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGhlaWdodDogMTAwJTsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1oZWFkZXIgewogICAgcGFkZGluZzogMTRweCAxNnB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSk7CiAgICBmbGV4OiAwIDAgYXV0bzsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDI7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1oZWFkZXItcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgbWluLWhlaWdodDogMjhweDsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGZsZXgtd3JhcDogd3JhcDsKICAgIHJvdy1nYXA6IDEwcHg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1oZWFkZXItbGVmdCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1oZWFkZXItYWN0aW9ucyB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBmbGV4OiAwIDAgYXV0bzsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGZsZXgtd3JhcDogd3JhcDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWhlYWRlci10b29scyB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGdhcDogOHB4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRhYnMgewogICAgLyogUXVldWUtbGlrZSB0YWJzIChhY3RpdmUgcGlsbCwgb3RoZXJzIGFzIHRleHQpICovCiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGJvcmRlcjogbm9uZTsKICAgIHBhZGRpbmc6IDA7CiAgICBnYXA6IDEwcHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBmbGV4OiAxIDEgYXV0bzsKICAgIG1pbi13aWR0aDogMDsKICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci10YWJzOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICB3aWR0aDogMDsKICAgIGhlaWdodDogMDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRhYiB7CiAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2RkZCkgNjUlLCB0cmFuc3BhcmVudCk7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIHRyYW5zZm9ybSAxMjBtcyBlYXNlLAogICAgICAgIGJhY2tncm91bmQtY29sb3IgMTIwbXMgZWFzZSwKICAgICAgICBjb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGFiOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1NSUsIHRyYW5zcGFyZW50KTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDcwJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGFiLmlzLWFjdGl2ZSB7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2ZmZik7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLCB0cmFuc3BhcmVudCk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4NSUsIHRyYW5zcGFyZW50KTsKICAgIGJveC1zaGFkb3c6IDAgNnB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjE4KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWljb24tYnRuIHsKICAgIHdpZHRoOiAyOHB4OwogICAgaGVpZ2h0OiAyOHB4OwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcsIDAuNXJlbSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTIpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgcGFkZGluZzogMDsKICAgIHRyYW5zaXRpb246CiAgICAgICAgdHJhbnNmb3JtIDEyMG1zIGVhc2UsCiAgICAgICAgYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaWNvbi1idG46aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNDUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLCB2YXIoLS1tanItYWNjZW50KSA4JSk7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pY29uLWJ0bi5tanItY29udGV4dC1hY3RpdmUgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgODUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTUlLCB2YXIoLS1tanItYWNjZW50KSAxMiUpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAzNSUsIHRyYW5zcGFyZW50KTsKfQoKLyogRmxvYXRpbmcgVmlld2VyIGJ1dHRvbiAtIHRlYWwgZ2xvdyB3aGVuIHZpZXdlciBpcyBvcGVuICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pY29uLWJ0bi5tanItbWZ2LWJ0bi1hY3RpdmUgewogICAgY29sb3I6ICM0ZGQ5YzA7CiAgICBib3JkZXItY29sb3I6IHJnYmEoNzcsIDIxNywgMTkyLCAwLjU1KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzcsIDIxNywgMTkyLCAwLjEpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHJnYmEoNzcsIDIxNywgMTkyLCAwLjI1KTsKfQoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaWNvbi1idG4ubWpyLW1mdi1idG4tYWN0aXZlIC5waSB7CiAgICBvcGFjaXR5OiAxOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaWNvbi1idG4ubWpyLW1lc3NhZ2UtYnRuIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG92ZXJmbG93OiB2aXNpYmxlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaWNvbi1idG4ubWpyLW1lc3NhZ2UtaGFzLXVucmVhZCB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA3NSUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA3MiUsIHZhcigtLW1qci1hY2NlbnQpIDExJSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1tZXNzYWdlLWJhZGdlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogLTVweDsKICAgIHJpZ2h0OiAtNnB4OwogICAgbWluLXdpZHRoOiAxNnB4OwogICAgaGVpZ2h0OiAxNnB4OwogICAgcGFkZGluZzogMCA0cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA1NSUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKSk7CiAgICBiYWNrZ3JvdW5kOiAjZWY1MzUwOwogICAgY29sb3I6ICNmZmY7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4zNSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pY29uLWJ0biAucGkgewogICAgZm9udC1zaXplOiAxM3B4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBvcGFjaXR5OiAwLjk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pY29uLWJ0bjpkaXNhYmxlZCwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFpLWNvbnRyb2w6ZGlzYWJsZWQgewogICAgb3BhY2l0eTogMC41OwogICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgIHRyYW5zZm9ybTogbm9uZTsKICAgIGZpbHRlcjogZ3JheXNjYWxlKDAuNDUpOwogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODglLCB0cmFuc3BhcmVudCkgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA5MiUsIHRyYW5zcGFyZW50KSAhaW1wb3J0YW50OwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYpKSAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYWktZGlzYWJsZWQgLm1qci1haS1jb250cm9sOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYWktZGlzYWJsZWQtYmxvY2sgewogICAgb3BhY2l0eTogMC41ODsKICAgIGZpbHRlcjogZ3JheXNjYWxlKDAuNDUpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYWktZGlzYWJsZWQtYmxvY2sgLm1qci1haS1jb250cm9sLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYWktZGlzYWJsZWQtYmxvY2sgYnV0dG9uIHsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgovKiBQb3BvdmVycyBjYW4gYmUgbW92ZWQgdG8gYGRvY3VtZW50LmJvZHlgIChwb3J0YWwpIHRvIGF2b2lkIGJlaW5nIGNsaXBwZWQuICovCi5tanItcG9wb3ZlciB7CiAgICBmb250LWZhbWlseTogdmFyKAogICAgICAgIC0tY29tZnktZm9udCwKICAgICAgICB2YXIoCiAgICAgICAgICAgIC0tZm9udC1pbnRlciwKICAgICAgICAgICAgdWktc2Fucy1zZXJpZiwKICAgICAgICAgICAgc3lzdGVtLXVpLAogICAgICAgICAgICAtYXBwbGUtc3lzdGVtLAogICAgICAgICAgICAiU2Vnb2UgVUkiLAogICAgICAgICAgICBSb2JvdG8sCiAgICAgICAgICAgIEFyaWFsLAogICAgICAgICAgICBzYW5zLXNlcmlmCiAgICAgICAgKQogICAgKTsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yLCB2YXIoLS1jb250ZW50LWZnLCB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKSkpOwoKICAgIC8qIFByb3ZpZGUgZmFsbGJhY2tzIHdoZW4gb3V0c2lkZSBgLm1qci1hc3NldHMtbWFuYWdlcmAgc2NvcGUgKi8KICAgIC0tbWpyLXN1cmZhY2UtMTogdmFyKC0taW50ZXJmYWNlLW1lbnUtc3VyZmFjZSwgdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSkpOwogICAgLS1tanItYm9yZGVyOiB2YXIoLS1ib3JkZXItZGVmYXVsdCwgdmFyKC0tYm9yZGVyLWNvbG9yLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKSk7CiAgICAtLW1qci1tdXRlZDogdmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCwgdmFyKC0tZGVzY3JpcC10ZXh0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKSk7CiAgICAtLW1qci1hY2NlbnQ6IHZhcigtLXByaW1hcnktYmFja2dyb3VuZCwgdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKSk7CiAgICAtLW1qci1wb3BvdmVyLXotaW5kZXg6IDIxNDc0ODM2NDc7CgogICAgcG9zaXRpb246IGZpeGVkOwogICAgdG9wOiAwOwogICAgbGVmdDogMDsKICAgIG1pbi13aWR0aDogMDsKICAgIHdpZHRoOiBtaW4oMjgwcHgsIGNhbGMoMTAwdncgLSAyNHB4KSk7CiAgICBtYXgtd2lkdGg6IG1pbigzNjBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIHBhZGRpbmc6IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcsIDAuNXJlbSk7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xLCB2YXIoLS1jb21meS1tZW51LWJnLCAjMmEyYTJhKSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCB2YXIoLS1ib3JkZXItY29sb3IsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpKTsKICAgIGJveC1zaGFkb3c6IDAgMTJweCAyOHB4IHJnYmEoMCwgMCwgMCwgMC4zNSk7CiAgICB6LWluZGV4OiB2YXIoLS1tanItcG9wb3Zlci16LWluZGV4KTsKICAgIG1pbi1oZWlnaHQ6IDA7CiAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgIC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsKICAgIHRvdWNoLWFjdGlvbjogcGFuLXk7CiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47Cn0KCi5tanItcG9wb3Zlci0taGlkZGVuIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgewogICAgbWluLXdpZHRoOiAzNDBweDsKICAgIHdpZHRoOiBtaW4oMzYwcHgsIGNhbGMoMTAwdncgLSAyNHB4KSk7CiAgICBwYWRkaW5nOiAxMnB4Owp9CgoubWpyLXNvcnQtcG9wb3ZlciB7CiAgICBtaW4td2lkdGg6IDIyMHB4OwogICAgd2lkdGg6IG1pbigyNjBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIHBhZGRpbmc6IDEwcHg7Cn0KCi5tanItY29sbGVjdGlvbnMtcG9wb3ZlciB7CiAgICBtaW4td2lkdGg6IDI4MHB4OwogICAgd2lkdGg6IG1pbigzMjBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIHBhZGRpbmc6IDEwcHg7Cn0KCi5tanItcGlubmVkLWZvbGRlcnMtcG9wb3ZlciB7CiAgICBtaW4td2lkdGg6IDI4MHB4OwogICAgd2lkdGg6IG1pbigzNDBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIHBhZGRpbmc6IDEwcHg7Cn0KCi5tanItcGlubmVkLWZvbGRlcnMtcG9wb3ZlciAubWpyLXBpbm5lZC1mb2xkZXJzLW1lbnUgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogNnB4Owp9CgoubWpyLXBpbm5lZC1mb2xkZXJzLXBvcG92ZXIgLm1qci1waW5uZWQtZm9sZGVycy1lbXB0eSB7CiAgICBwYWRkaW5nOiAxMHB4IDEycHg7CiAgICBvcGFjaXR5OiAwLjc1Owp9CgoubWpyLXBpbm5lZC1mb2xkZXJzLXBvcG92ZXIgLm1qci1waW5uZWQtZm9sZGVyLXJvdyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICB3aWR0aDogMTAwJTsKfQoKLm1qci1waW5uZWQtZm9sZGVycy1wb3BvdmVyIC5tanItcGlubmVkLWZvbGRlci1vcGVuIHsKICAgIGZsZXg6IDE7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIHdpZHRoOiAxMDAlOwogICAgZ2FwOiAxMHB4OwogICAgcGFkZGluZzogOXB4IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDEyMCwgMTkwLCAyNTUsIDAuMTgpOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzKSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAxKSk7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGJhY2tncm91bmQgMTIwbXMgZWFzZTsKfQoKLm1qci1waW5uZWQtZm9sZGVycy1wb3BvdmVyIC5tanItcGlubmVkLWZvbGRlci1vcGVuOmhvdmVyLAoubWpyLXBpbm5lZC1mb2xkZXJzLXBvcG92ZXIgLm1qci1waW5uZWQtZm9sZGVyLW9wZW46Zm9jdXMtdmlzaWJsZSB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMTQ1LCAyMDUsIDI1NSwgMC40KTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHJnYmEoODAsIDE0MCwgMjU1LCAwLjE4KSwgcmdiYSgzMiwgMTAwLCAyMDAsIDAuMTQpKTsKfQoKLm1qci1waW5uZWQtZm9sZGVycy1wb3BvdmVyIC5tanItcGlubmVkLWZvbGRlci1sYWJlbCB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiB2YXIoLS1mZy1jb2xvciwgI2U2ZWRmNyk7Cn0KCi5tanItcGlubmVkLWZvbGRlcnMtcG9wb3ZlciAubWpyLXBpbm5lZC1mb2xkZXItcGF0aCB7CiAgICBmbGV4OiAwIDEgYXV0bzsKICAgIG1pbi13aWR0aDogMDsKICAgIG1heC13aWR0aDogMjIwcHg7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgb3BhY2l0eTogMC42ODsKICAgIGZvbnQtc2l6ZTogMTFweDsKfQoKLm1qci1waW5uZWQtZm9sZGVycy1wb3BvdmVyIC5tanItcGlubmVkLWZvbGRlci11bnBpbiB7CiAgICB3aWR0aDogNDJweDsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgcGFkZGluZzogMDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCA5NSwgOTUsIDAuMzUpOwogICAgYm9yZGVyLXJhZGl1czogOXB4OwogICAgbWFyZ2luLWxlZnQ6IDZweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHJnYmEoMjU1LCA3MCwgNzAsIDAuMTYpLCByZ2JhKDE2MCwgMjAsIDIwLCAwLjEyKSk7Cn0KCi5tanItcGlubmVkLWZvbGRlcnMtcG9wb3ZlciAubWpyLXBpbm5lZC1mb2xkZXItdW5waW4gLnBpIHsKICAgIG9wYWNpdHk6IDAuODg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDEzMCwgMTMwLCAwLjk2KTsKfQoKLm1qci1tZXNzYWdlcy1wb3BvdmVyIHsKICAgIG1pbi13aWR0aDogMzIwcHg7CiAgICB3aWR0aDogbWluKDQ2MHB4LCBjYWxjKDEwMHZ3IC0gMjRweCkpOwogICAgcGFkZGluZzogMTBweDsKfQoKLm1qci1pbmxpbmUtZGlhbG9nLW1hc2sgewogICAgcG9zaXRpb246IHN0YXRpYyAhaW1wb3J0YW50OwogICAgaW5zZXQ6IGF1dG8gIWltcG9ydGFudDsKICAgIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7CiAgICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsKICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7CiAgICBwb2ludGVyLWV2ZW50czogYXV0byAhaW1wb3J0YW50Owp9CgoubWpyLWlubGluZS1kaWFsb2ctcm9vdCB7CiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50OwogICAgd2lkdGg6IDEwMCU7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKfQoKLm1qci1pbmxpbmUtZGlhbG9nLWNvbnRlbnQgewogICAgcGFkZGluZzogMDsKfQoKLm1qci1tZXNzYWdlcy1oZWFkIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZ2FwOiA4cHg7CiAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICBtYXJnaW4tYm90dG9tOiA4cHg7Cn0KCi5tanItbWVzc2FnZXMtdGFicyB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDZweDsKICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgIHBhZGRpbmc6IDNweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDg4JSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDc0JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1lc3NhZ2VzLXRhYiB7CiAgICBhcHBlYXJhbmNlOiBub25lOwogICAgYm9yZGVyOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcsICNmMWYxZjEpIDc2JSwgdHJhbnNwYXJlbnQpOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGluZS1oZWlnaHQ6IDEuMjsKICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIGJhY2tncm91bmQtY29sb3IgMC4xNHMgZWFzZSwKICAgICAgICBjb2xvciAwLjE0cyBlYXNlLAogICAgICAgIHRyYW5zZm9ybSAwLjE0cyBlYXNlOwp9CgoubWpyLW1lc3NhZ2VzLXRhYjpob3ZlciwKLm1qci1tZXNzYWdlcy10YWI6Zm9jdXMtdmlzaWJsZSB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMTQlLCB0cmFuc3BhcmVudCk7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2YxZjFmMSk7CiAgICBvdXRsaW5lOiBub25lOwp9CgoubWpyLW1lc3NhZ2VzLXRhYi5pcy1hY3RpdmUgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDIyJSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNmZmYpOwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAzNCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1tZXNzYWdlcy1wYW5lbHMgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogOHB4OwogICAgbWF4LWhlaWdodDogbWluKDUydmgsIDQyMHB4KTsKfQoKLm1qci1tZXNzYWdlcy1saXN0LAoubWpyLW1lc3NhZ2VzLXNob3J0Y3V0cy1wYW5lbCB7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgIHNjcm9sbGJhci13aWR0aDogdGhpbjsKfQoKLm1qci10YWItY291bnQtYmFkZ2UgewogICAgbWluLXdpZHRoOiAxNnB4OwogICAgaGVpZ2h0OiAxNnB4OwogICAgcGFkZGluZzogMCA1cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZm9udC1zaXplOiA5cHg7CiAgICBmb250LXdlaWdodDogODAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDI4JSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZmZmKSA5MiUsIHRyYW5zcGFyZW50KTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNDglLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWVzc2FnZXMtdGl0bGUgewogICAgZmxleDogMSAxIGF1dG87CiAgICBtaW4td2lkdGg6IDA7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDNlbTsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcsICNkZGQpIDgyJSwgdmFyKC0tbWpyLW11dGVkKSk7Cn0KCi5tanItbWVzc2FnZXMtYWN0aW9ucyB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgZ2FwOiA2cHg7CiAgICBmbGV4LXdyYXA6IHdyYXA7Cn0KCi5tanItbWVzc2FnZXMtbWFyay1yZWFkLWJ0biB7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgbGluZS1oZWlnaHQ6IDEuMjsKfQoKLm1qci1tZXNzYWdlcy1zdGFyLWxpbmsgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgbGluZS1oZWlnaHQ6IDEuMjsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZjFmMWYxKTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsICNmM2M4NGIgNDIlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgI2YzYzg0YiAxMiUsIHZhcigtLW1qci1zdXJmYWNlLTIpKTsKfQoKLm1qci1tZXNzYWdlcy1zdGFyLWxpbms6aG92ZXIsCi5tanItbWVzc2FnZXMtc3Rhci1saW5rOmZvY3VzLXZpc2libGUgewogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9CgoubWpyLW1lc3NhZ2VzLXN0YXItaWNvbiB7CiAgICBjb2xvcjogI2YzYzg0YjsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgoubWpyLW1lc3NhZ2VzLXN0YXItbGFiZWwgewogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci1tZXNzYWdlcy1saXN0IHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDhweDsKfQoKLm1qci1tZXNzYWdlcy1lbXB0eSB7CiAgICBwYWRkaW5nOiA4cHggNnB4OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgb3BhY2l0eTogMC43MjsKfQoKLm1qci1tZXNzYWdlLWl0ZW0gewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogNXB4OwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4NiUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1OCUsIHRyYW5zcGFyZW50KTsKICAgIHBhZGRpbmc6IDhweDsKfQoKLm1qci1tZXNzYWdlLWl0ZW0tLXVucmVhZCB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1OCUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMjYlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWVzc2FnZS1pdGVtLS13YXJuaW5nIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsICNmMGI4NWEgNjIlLCB2YXIoLS1tanItYm9yZGVyKSk7Cn0KCi5tanItbWVzc2FnZS1pdGVtLS1lcnJvciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjZjM2YjZiIDYyJSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLW1lc3NhZ2UtaXRlbS0tc3VjY2VzcyB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjNThjMDdkIDYyJSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLW1lc3NhZ2UtaXRlbS1oZWFkIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZ2FwOiA4cHg7Cn0KCi5tanItbWVzc2FnZS1pdGVtLXRpdGxlLXdyYXAgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmbGV4OiAxIDEgYXV0bzsKfQoKLm1qci1tZXNzYWdlLWl0ZW0tZW1vamkgewogICAgZmxleDogMCAwIGF1dG87CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLm1qci1tZXNzYWdlLWl0ZW0tdGl0bGUgewogICAgbWluLXdpZHRoOiAwOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZjFmMWYxKTsKfQoKLm1qci1tZXNzYWdlLWl0ZW0tY2F0ZWdvcnkgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgcGFkZGluZzogMXB4IDZweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAzZW07CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMjAlLCB2YXIoLS1tanItc3VyZmFjZS0yKSk7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcsICNmZmYpIDg2JSwgdHJhbnNwYXJlbnQpOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci1tZXNzYWdlLWl0ZW0tbWV0YSB7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBvcGFjaXR5OiAwLjcyOwp9CgoubWpyLW1lc3NhZ2UtaXRlbS1ib2R5IHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIG9wYWNpdHk6IDAuOTI7CiAgICBsaW5lLWhlaWdodDogMS40NTsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7Cn0KCi5tanItbWVzc2FnZS1pdGVtLWFjdGlvbiB7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgY29sb3I6IHZhcigtLW1qci1hY2NlbnQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpOwogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgd2lkdGg6IGZpdC1jb250ZW50Owp9CgoubWpyLW1lc3NhZ2UtaXRlbS1hY3Rpb246aG92ZXIgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0KCi8qIFRvYXN0IEhpc3RvcnkgdGFiIC0gdW5yZWFkIGluZGljYXRvciBkb3QgKi8KLm1qci10YWItdW5yZWFkLWRvdCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB3aWR0aDogNnB4OwogICAgaGVpZ2h0OiA2cHg7CiAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKICAgIG1hcmdpbi1sZWZ0OiA1cHg7CiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgZmxleC1zaHJpbms6IDA7Cn0KCi8qIEhpc3RvcnkgcGFuZWwgKi8KLm1qci1tZXNzYWdlcy1oaXN0b3J5LXBhbmVsIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgbWluLWhlaWdodDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5tanItaGlzdG9yeS1oZWFkIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgcGFkZGluZzogNHB4IDAgNnB4OwogICAgZmxleC1zaHJpbms6IDA7Cn0KCi5tanItaGlzdG9yeS1oZWFkLWxhYmVsIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBvcGFjaXR5OiAwLjYyOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07Cn0KCi5tanItaGlzdG9yeS1jbGVhci1idG4gewogICAgZm9udC1zaXplOiAxMXB4OwogICAgcGFkZGluZzogMnB4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7CiAgICBjb2xvcjogaW5oZXJpdDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIG9wYWNpdHk6IDAuNzI7Cn0KCi5tanItaGlzdG9yeS1jbGVhci1idG46aG92ZXIgewogICAgb3BhY2l0eTogMTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAxMiUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1oaXN0b3J5LWxpc3QgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogNHB4OwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47Cn0KCi5tanItaGlzdG9yeS1pdGVtIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZzogNnB4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMiwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSk7CiAgICBmb250LXNpemU6IDEycHg7Cn0KCi5tanItaGlzdG9yeS1pdGVtLS1lcnJvciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjZjM2YjZiIDUwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLWhpc3RvcnktaXRlbS0td2FybmluZyB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjZjBiODVhIDUwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLWhpc3RvcnktaXRlbS0tc3VjY2VzcyB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjNThjMDdkIDUwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLWhpc3RvcnktaXRlbS1pY29uIHsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgZm9udC1zaXplOiAxNHB4OwogICAgbGluZS1oZWlnaHQ6IDEuNDsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tY29udGVudCB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA0cHg7Cn0KCi5tanItaGlzdG9yeS1pdGVtLW1zZyB7CiAgICBvcGFjaXR5OiAwLjkyOwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7CiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwp9CgoubWpyLWhpc3RvcnktaXRlbS10aXRsZSB7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgIG9wYWNpdHk6IDAuOTY7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tZGV0YWlsIHsKICAgIG9wYWNpdHk6IDAuODQ7CiAgICBsaW5lLWhlaWdodDogMS40NTsKICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlOwogICAgd29yZC1icmVhazogYnJlYWstd29yZDsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tbWV0YSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgZmxleC13cmFwOiB3cmFwOwp9CgoubWpyLWhpc3RvcnktaXRlbS10aW1lIHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIG9wYWNpdHk6IDAuNTI7Cn0KCi5tanItaGlzdG9yeS1pdGVtLWNoaXAgewogICAgZm9udC1zaXplOiAxMHB4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBwYWRkaW5nOiAycHggNnB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODIlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMywgdmFyKC0tbWpyLXN1cmZhY2UtMikpIDc4JSwgdHJhbnNwYXJlbnQpOwogICAgb3BhY2l0eTogMC43NjsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tYWN0aW9uIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIHdpZHRoOiBmaXQtY29udGVudDsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKfQoKLm1qci1oaXN0b3J5LWl0ZW0tYWN0aW9uOmhvdmVyIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9CgoubWpyLWhpc3RvcnktaXRlbS1wcm9ncmVzcyB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiA0cHg7Cn0KCi5tanItaGlzdG9yeS1pdGVtLXByb2dyZXNzLXN1bW1hcnkgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgb3BhY2l0eTogMC43NDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7Cn0KCi5tanItaGlzdG9yeS1pdGVtLXByb2dyZXNzLWJhciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogNnB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc1JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWhpc3RvcnktaXRlbS1wcm9ncmVzcy1maWxsIHsKICAgIGhlaWdodDogMTAwJTsKICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgOTBkZWcsCiAgICAgICAgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZiksCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsICM1OGMwN2QgNzIlLCB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKSkKICAgICk7Cn0KCi5tanItc2hvcnRjdXQtZ3VpZGUgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogOHB4Owp9CgoubWpyLXNob3J0Y3V0LWd1aWRlLWludHJvIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ1OwogICAgb3BhY2l0eTogMC44NDsKfQoKLm1qci1zaG9ydGN1dC1zZWN0aW9uIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDZweDsKICAgIHBhZGRpbmc6IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODQlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMywgdmFyKC0tbWpyLXN1cmZhY2UtMikpIDcyJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLXNob3J0Y3V0LXNlY3Rpb24tdGl0bGUgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA0ZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZjFmMWYxKSA4OCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1zaG9ydGN1dC1saXN0IHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDZweDsKfQoKLm1qci1zaG9ydGN1dC1yb3cgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDEzMnB4LCAxNjBweCkgbWlubWF4KDAsIDFmcik7CiAgICBnYXA6IDhweDsKICAgIGFsaWduLWl0ZW1zOiBzdGFydDsKfQoKLm1qci1zaG9ydGN1dC1rZXkgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBtaW4taGVpZ2h0OiAyNHB4OwogICAgcGFkZGluZzogM3B4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDM4JSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDEyJSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZmZmKSA5MCUsIHRyYW5zcGFyZW50KTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMS4yNTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7Cn0KCi5tanItc2hvcnRjdXQtZGVzYyB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsaW5lLWhlaWdodDogMS40OwogICAgb3BhY2l0eTogMC45MjsKfQoKQG1lZGlhIChtYXgtd2lkdGg6IDU2MHB4KSB7CiAgICAubWpyLXNob3J0Y3V0LXJvdyB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICB9CgogICAgLm1qci1zaG9ydGN1dC1rZXkgewogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgIH0KfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1oZWFkIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogMTBweDsKICAgIG1hcmdpbjogMCAwIDEwcHg7CiAgICBwYWRkaW5nOiA0cHggMnB4IDEwcHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDg1JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLWhlYWQtbGVmdCB7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXIta2lja2VyIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA4MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wOWVtOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZikgNjUlLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSk7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItc3VidGl0bGUgewogICAgbWFyZ2luLXRvcDogMnB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSA2MiUsIHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSkpOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLWhlYWQtYWN0aW9ucyB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIGZsZXg6IDAgMCBhdXRvOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLXN0YWNrIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiA4cHg7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItYWN0aXZlLWNvdW50IHsKICAgIG1pbi13aWR0aDogMjJweDsKICAgIGhlaWdodDogMjJweDsKICAgIHBhZGRpbmc6IDAgNnB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZikgNTUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZikgMTglLCB2YXIoLS1tanItc3VyZmFjZS0yKSk7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZmZmKTsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1jbGVhci1hbGwgewogICAgaGVpZ2h0OiAyNHB4OwogICAgcGFkZGluZzogMCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3NSUsIHRyYW5zcGFyZW50KTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1wb3BvdmVyLXJvdyB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICBnYXA6IDhweDsKICAgIGFsaWduLWl0ZW1zOiBzdGFydDsKICAgIG1hcmdpbi1ib3R0b206IDEwcHg7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1wb3BvdmVyLXJvdy0tM2NvbCB7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgwLCAxZnIpIG1pbm1heCgwLCAxZnIpOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItcG9wb3Zlci1yb3ctLTNjb2wgLm1qci1wb3BvdmVyLWxhYmVsIHsKICAgIGdyaWQtY29sdW1uOiAxIC8gLTE7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1wb3BvdmVyLWxhYmVsIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcsICNkZGQpIDcwJSwgdmFyKC0tbWpyLW11dGVkLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKSk7CiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItcG9wb3Zlci10b2dnbGUgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDZweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGNvbG9yOiB2YXIoLS1mZy1jb2xvciwgI2U2ZWRmNyk7CiAgICBwYWRkaW5nOiA2cHggOHB4OwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDgwJSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDY2JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItcG9wb3Zlci10b2dnbGUgaW5wdXRbdHlwZT0iY2hlY2tib3giXSB7CiAgICBhY2NlbnQtY29sb3I6IHZhcigtLW1qci1hY2NlbnQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLWdyb3VwIHsKICAgIC0tbWpyLWZpbHRlci1ncm91cC1hY2NlbnQ6IHZhcigtLW1qci1hY2NlbnQsICM3YWEyZmYpOwogICAgcGFkZGluZzogMTBweCAwIDhweDsKICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1ncm91cDpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgcGFkZGluZy1ib3R0b206IDJweDsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1ncm91cC0tY29yZSB7CiAgICAtLW1qci1maWx0ZXItZ3JvdXAtYWNjZW50OiAjNTZhOGZmOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLWdyb3VwLS1tZWRpYSB7CiAgICAtLW1qci1maWx0ZXItZ3JvdXAtYWNjZW50OiAjMzVkMDhiOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLWdyb3VwLS10aW1lIHsKICAgIC0tbWpyLWZpbHRlci1ncm91cC1hY2NlbnQ6ICNmMGI4NGY7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItZ3JvdXAtdG9nZ2xlIHsKICAgIHdpZHRoOiAxMDAlOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBnYXA6IDEwcHg7CiAgICBtYXJnaW46IDAgMCAxMHB4OwogICAgYm9yZGVyOiAwOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjb2xvcjogaW5oZXJpdDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBwYWRkaW5nOiAycHggNHB4Owp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLWdyb3VwLXRpdGxlIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItZmlsdGVyLWdyb3VwLWFjY2VudCkgNjIlLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItZ3JvdXAtdGl0bGU6OmJlZm9yZSB7CiAgICBjb250ZW50OiAiIjsKICAgIHdpZHRoOiA2cHg7CiAgICBoZWlnaHQ6IDZweDsKICAgIGZsZXg6IDAgMCA2cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1maWx0ZXItZ3JvdXAtYWNjZW50KTsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1ncm91cC1jaGV2cm9uIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItZmlsdGVyLWdyb3VwLWFjY2VudCkgNzglLCB2YXIoLS1tanItbXV0ZWQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42NSkpKTsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1ncm91cC1ib2R5IHsKICAgIHBhZGRpbmctdG9wOiA0cHg7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItY2FyZCB7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODglLCB0cmFuc3BhcmVudCk7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgcGFkZGluZzogMTBweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDg2JSwgdHJhbnNwYXJlbnQpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA4OCUsIHRyYW5zcGFyZW50KQogICAgKTsKICAgIG1hcmdpbi1ib3R0b206IDhweDsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1jYXJkOmxhc3QtY2hpbGQgewogICAgbWFyZ2luLWJvdHRvbTogMDsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1jYXJkLS1hZ2VuZGEgewogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDE4MGRlZywKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgI2YwYjg0ZiA5JSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA5MiUsIHRyYW5zcGFyZW50KQogICAgKTsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1ncm91cDpub3QoLmlzLW9wZW4pIHsKICAgIHBhZGRpbmctYm90dG9tOiA4cHg7Cn0KCi5tanItZmlsdGVyLXBvcG92ZXIgLm1qci1maWx0ZXItZ3JvdXA6bm90KC5pcy1vcGVuKSAubWpyLWZpbHRlci1ncm91cC10b2dnbGUgewogICAgbWFyZ2luLWJvdHRvbTogMDsKfQoKQG1lZGlhIChtYXgtd2lkdGg6IDQ0MHB4KSB7CiAgICAubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLWhlYWQgewogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICB9CgogICAgLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1oZWFkLWFjdGlvbnMgewogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIH0KfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWhlYWRlci1pY29uIHsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBvcGFjaXR5OiAwLjk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1oZWFkZXItdGl0bGUgewogICAgbWFyZ2luOiAwOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAxZW07Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1jb250ZW50IHsKICAgIGZsZXg6IDE7CiAgICBwYWRkaW5nOiAxNnB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgbWluLWhlaWdodDogMDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWZvbGRlci1icmVhZGNydW1iIHsKICAgIC0tbWpyLWJyZWFkY3J1bWItYWNjZW50OiAjNTZhOGZmOwogICAgLS1tanItYnJlYWRjcnVtYi1jdXJyZW50OiAjMzVkMDhiOwogICAgZGlzcGxheTogbm9uZTsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDRweDsKICAgIHBhZGRpbmc6IDNweCA2cHg7CiAgICBtYXJnaW46IDFweCAwIDNweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIG9wYWNpdHk6IDAuNzg7CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJyZWFkY3J1bWItYWNjZW50KSAyMiUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYnJlYWRjcnVtYi1hY2NlbnQpIDklLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1mb2xkZXItYnJlYWRjcnVtYi5pcy12aXNpYmxlIHsKICAgIGRpc3BsYXk6IGZsZXg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1mb2xkZXItYnJlYWRjcnVtYi1hY3Rpb24gewogICAgcGFkZGluZzogMnB4IDhweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYnJlYWRjcnVtYi1hY2NlbnQpIDQyJSwgdHJhbnNwYXJlbnQpOwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1icmVhZGNydW1iLWFjY2VudCkgMTYlLCB0cmFuc3BhcmVudCk7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1icmVhZGNydW1iLWFjY2VudCkgNzglLCAjZmZmZmZmKTsKICAgIGZvbnQ6IGluaGVyaXQ7CiAgICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1mb2xkZXItYnJlYWRjcnVtYi1hY3Rpb246ZGlzYWJsZWQgewogICAgY3Vyc29yOiBkZWZhdWx0OwogICAgb3BhY2l0eTogMC41ODsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWZvbGRlci1icmVhZGNydW1iLWFjdGlvbjpub3QoOmRpc2FibGVkKTpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYnJlYWRjcnVtYi1hY2NlbnQpIDYyJSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1icmVhZGNydW1iLWFjY2VudCkgMjQlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1mb2xkZXItYnJlYWRjcnVtYi1zZWdtZW50IHsKICAgIG1heC13aWR0aDogMjIwcHg7CiAgICBtaW4td2lkdGg6IDA7CiAgICBwYWRkaW5nOiAxcHggNXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJyZWFkY3J1bWItYWNjZW50KSA4JSwgdHJhbnNwYXJlbnQpOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYnJlYWRjcnVtYi1hY2NlbnQpIDc2JSwgI2ZmZmZmZik7CiAgICBmb250OiBpbmhlcml0OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZm9sZGVyLWJyZWFkY3J1bWItc2VnbWVudDpub3QoOmRpc2FibGVkKTpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYnJlYWRjcnVtYi1hY2NlbnQpIDM4JSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1icmVhZGNydW1iLWFjY2VudCkgMTYlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1mb2xkZXItYnJlYWRjcnVtYi1zZWdtZW50LmlzLWN1cnJlbnQsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1mb2xkZXItYnJlYWRjcnVtYi1zZWdtZW50OmRpc2FibGVkIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1icmVhZGNydW1iLWN1cnJlbnQpIDM4JSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1icmVhZGNydW1iLWN1cnJlbnQpIDE0JSwgdHJhbnNwYXJlbnQpOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYnJlYWRjcnVtYi1jdXJyZW50KSA3NCUsICNmZmZmZmYpOwogICAgY3Vyc29yOiBkZWZhdWx0Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZm9sZGVyLWJyZWFkY3J1bWItc2VwYXJhdG9yIHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJyZWFkY3J1bWItYWNjZW50KSA1OCUsIHZhcigtLW1qci1tdXRlZCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYyKSkpOwogICAgb3BhY2l0eTogMC45Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWVkaWEtc2hvcnRjdXRzIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNHB4OwogICAgZmxleC13cmFwOiB3cmFwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWVkaWEtc2hvcnRjdXQtYnRuIHsKICAgIHdpZHRoOiAyNHB4OwogICAgaGVpZ2h0OiAyNHB4Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWVkaWEtc2hvcnRjdXQtYnRuIC5waSB7CiAgICBmb250LXNpemU6IDExcHg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1kdXAtYWxlcnQgewogICAgcGFkZGluZzogMnB4IDhweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvciwgIzU1NSk7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1tZW51LWJnLCAjMjIyKTsKICAgIGNvbG9yOiB2YXIoLS1pbnB1dC10ZXh0LCAjZWVlKTsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgY3Vyc29yOiBwb2ludGVyOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tYnJvd3NlIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDsKICAgIGZsZXg6IDE7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgbWluLXdpZHRoOiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNzUlLCB0cmFuc3BhcmVudCk7CiAgICBwYWRkaW5nLXRvcDogNHB4Owp9CgovKiBTY3JvbGxiYXJzIChtYXRjaCBDb21meVVJIGZlZWwpICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1ncmlkLXNjcm9sbCB7CiAgICBmbGV4OiAxIDEgYXV0bzsKICAgIG1pbi13aWR0aDogMDsKICAgIG1pbi1oZWlnaHQ6IDA7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICB0b3VjaC1hY3Rpb246IHBhbi15OwogICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluOwogICAgc2Nyb2xsYmFyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODUlLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSkgdHJhbnNwYXJlbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1ncmlkLXNjcm9sbDo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgd2lkdGg6IDEwcHg7CiAgICBoZWlnaHQ6IDEwcHg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1ncmlkLXNjcm9sbDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1ncmlkLXNjcm9sbDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDU1JSwgdmFyKC0tY29udGVudC1mZywgI2RkZCkpOwogICAgYm9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1ncmlkLXNjcm9sbDpob3Zlcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDcwJSwgdmFyKC0tY29udGVudC1mZywgI2RkZCkpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tZ3JpZC1zY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciB7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWN1c3RvbS1jb250cm9scyB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDA7CiAgICBnYXA6IDhweDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc2VhcmNoIHsKICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc2VhcmNoIHsKICAgIHBhZGRpbmctYm90dG9tOiA2cHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBtYXJnaW4tYm90dG9tOiA2cHg7Cn0KCi8qIENhcmQgTWV0YWRhdGEgQ29sb3JzICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1tZXRhLWR1cmF0aW9uIHsKICAgIGNvbG9yOiAjZmZhNzI2OyAvKiBPcmFuZ2UgZm9yIGR1cmF0aW9uICovCiAgICBmb250LXdlaWdodDogNTAwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWV0YS1yZXMgewogICAgY29sb3I6ICM0ZmMzZjc7IC8qIExpZ2h0IEJsdWUgZm9yIHJlc29sdXRpb24gKi8KICAgIGZvbnQtd2VpZ2h0OiA1MDA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1tZXRhLWRhdGUgewogICAgY29sb3I6ICNiOWY2Y2E7IC8qIFBhbGUgR3JlZW4gZm9yIGRhdGUgKi8KICAgIGZvbnQtc2l6ZTogMC45ZW07CiAgICBmb250LXdlaWdodDogNTAwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWV0YS10aW1lIHsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42NSkpOwogICAgZm9udC1zaXplOiAwLjllbTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXN1bW1hcnkgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBnYXA6IDEwcHg7CiAgICBtYXJnaW46IDAgMCA2cHggMDsKICAgIHBhZGRpbmc6IDAgMCA0cHggMDsKICAgIG1pbi1oZWlnaHQ6IDE2cHg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKTsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNjUlLCB0cmFuc3BhcmVudCk7CiAgICBmbGV4OiAwIDAgYXV0bzsKfQoKLyogVG9hc3RzIChnbG9iYWw6IGNhbiBiZSBtb3VudGVkIHVuZGVyIGRvY3VtZW50LmJvZHkpICovCi5tanItdG9hc3QtY29udGFpbmVyIHsKICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgIHRvcDogMTZweDsKICAgIGxlZnQ6IDUwJTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIHotaW5kZXg6IDEwMDAwMDE7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLm1qci10b2FzdCB7CiAgICAtLW1qci10b2FzdC1zdHJpcDogdmFyKC0tbWpyLXN0YXR1cy1pbmZvLCB2YXIoLS1jb21meS1zdGF0dXMtaW5mbywgIzIxOTZmMykpOwogICAgLS1tanItdG9hc3QtaWNvbi1jb2xvcjogdmFyKC0tbWpyLXN0YXR1cy1pbmZvLCB2YXIoLS1jb21meS1zdGF0dXMtaW5mbywgIzIxOTZmMykpOwogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IsICMzYTNhM2EpOwogICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB2YXIoLS1tanItdG9hc3Qtc3RyaXApOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yLCAjZWZlZmVmKTsKICAgIGZvbnQtZmFtaWx5OiB2YXIoCiAgICAgICAgLS1jb21meS1mb250LAogICAgICAgIHVpLXNhbnMtc2VyaWYsCiAgICAgICAgc3lzdGVtLXVpLAogICAgICAgIC1hcHBsZS1zeXN0ZW0sCiAgICAgICAgIlNlZ29lIFVJIiwKICAgICAgICBSb2JvdG8sCiAgICAgICAgQXJpYWwsCiAgICAgICAgc2Fucy1zZXJpZgogICAgKTsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGJveC1zaGFkb3c6IDAgNHB4IDE2cHggcmdiYSgwLCAwLCAwLCAwLjUpOwogICAgb3BhY2l0eTogMDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTVweCk7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIG9wYWNpdHkgMC4ycyBlYXNlLW91dCwKICAgICAgICB0cmFuc2Zvcm0gMC4ycyBlYXNlLW91dDsKICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEycHg7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICB3aWR0aDogbWF4LWNvbnRlbnQ7CiAgICBtaW4td2lkdGg6IG1pbigyNTBweCwgY2FsYygxMDB2dyAtIDI0cHgpKTsKICAgIG1heC13aWR0aDogbWluKDQwMHB4LCBjYWxjKDEwMHZ3IC0gMjRweCkpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDRweCk7CiAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLm1qci10b2FzdC5pcy12aXNpYmxlIHsKICAgIG9wYWNpdHk6IDE7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7Cn0KCi5tanItdG9hc3QtdGV4dCB7CiAgICBmbGV4OiAxOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKfQoKLyogVG9hc3QgaWNvbiBzdHlsaW5nICovCi5tanItdG9hc3QtdGV4dDo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6IGF0dHIoZGF0YS1pY29uKTsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgY29sb3I6IHZhcigtLW1qci10b2FzdC1pY29uLWNvbG9yKTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgbWluLXdpZHRoOiAxNnB4Owp9CgoubWpyLXRvYXN0LXN1Y2Nlc3MgewogICAgLS1tanItdG9hc3Qtc3RyaXA6IHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcywgdmFyKC0tY29tZnktc3RhdHVzLXN1Y2Nlc3MsICM0Y2FmNTApKTsKICAgIC0tbWpyLXRvYXN0LWljb24tY29sb3I6IHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcywgdmFyKC0tY29tZnktc3RhdHVzLXN1Y2Nlc3MsICM0Y2FmNTApKTsKfQoKLm1qci10b2FzdC1lcnJvciB7CiAgICAtLW1qci10b2FzdC1zdHJpcDogdmFyKC0tbWpyLXN0YXR1cy1lcnJvciwgdmFyKC0tY29tZnktc3RhdHVzLWVycm9yLCAjZjQ0MzM2KSk7CiAgICAtLW1qci10b2FzdC1pY29uLWNvbG9yOiB2YXIoLS1tanItc3RhdHVzLWVycm9yLCB2YXIoLS1jb21meS1zdGF0dXMtZXJyb3IsICNmNDQzMzYpKTsKfQoKLm1qci10b2FzdC13YXJuaW5nIHsKICAgIC0tbWpyLXRvYXN0LXN0cmlwOiB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsIHZhcigtLWNvbWZ5LXN0YXR1cy13YXJuaW5nLCAjZmZhNzI2KSk7CiAgICAtLW1qci10b2FzdC1pY29uLWNvbG9yOiB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsIHZhcigtLWNvbWZ5LXN0YXR1cy13YXJuaW5nLCAjZmZhNzI2KSk7Cn0KCi5tanItdG9hc3QtaW5mbyB7CiAgICAtLW1qci10b2FzdC1zdHJpcDogdmFyKC0tbWpyLXN0YXR1cy1pbmZvLCB2YXIoLS1jb21meS1zdGF0dXMtaW5mbywgIzIxOTZmMykpOwogICAgLS1tanItdG9hc3QtaWNvbi1jb2xvcjogdmFyKC0tbWpyLXN0YXR1cy1pbmZvLCB2YXIoLS1jb21meS1zdGF0dXMtaW5mbywgIzIxOTZmMykpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc3VtbWFyeS10ZXh0IHsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zdW1tYXJ5LXJpZ2h0IHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgbWluLXdpZHRoOiAwOwogICAgZmxleC13cmFwOiB3cmFwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tY29udGV4dC1waWxscyB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDVweDsKICAgIHJvdy1nYXA6IDRweDsKICAgIGZsZXgtd3JhcDogd3JhcDsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jb250ZXh0LXBpbGwgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBwYWRkaW5nOiAzcHggN3B4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTUlLCB2YXIoLS1tanItYWNjZW50KSAxMCUpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAxOCUsIHRyYW5zcGFyZW50KTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIGZvbnQtc2l6ZTogMTAuNXB4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBtaW4taGVpZ2h0OiAyMnB4OwogICAgbWF4LXdpZHRoOiAyMjBweDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNvbnRleHQtcGlsbDpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA3NSUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1MCUsIHZhcigtLW1qci1hY2NlbnQpIDE0JSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jb250ZXh0LXBpbGwtdGV4dCB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgb3BhY2l0eTogMC45MjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNvbnRleHQtcGlsbC14IHsKICAgIHdpZHRoOiAyMHB4OwogICAgaGVpZ2h0OiAyMHB4OwogICAgcGFkZGluZzogMDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3NSUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgZm9udC1zaXplOiAxNHB4OwogICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIHRyYW5zaXRpb246CiAgICAgICAgYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY29udGV4dC1waWxsLXg6aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNzAlLCB2YXIoLS1tanItYWNjZW50KSAxMCUpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNmZmYpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc2VhcmNoLXBpbGwgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBoZWlnaHQ6IDEuNzVyZW07CiAgICBwYWRkaW5nOiAwIDEwcHg7CiAgICB3aWR0aDogMTAwJTsKICAgIG1heC13aWR0aDogbm9uZTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1sZywgMC41cmVtKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LWlucHV0LWJnLCByZ2JhKDAsIDAsIDAsIDAuMjUpKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgZmxleDogMSAxIGF1dG87CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zZWFyY2gtdG9vbHMgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICBmbGV4OiAwIDAgYXV0bzsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXBvcG92ZXItYW5jaG9yIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKfQoKLm1qci1hZ2VuZGEtaW5wdXQgewogICAgZGlzcGxheTogbm9uZTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktaW5wdXQtYmcsIHJnYmEoMCwgMCwgMCwgMC4yNSkpOwogICAgY29sb3I6IHZhcigtLWlucHV0LXRleHQsICNkZGQpOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yIDAuMnMgZWFzZSwKICAgICAgICBjb2xvciAwLjJzIGVhc2UsCiAgICAgICAgYm9yZGVyLWNvbG9yIDAuMnMgZWFzZTsKfQoubWpyLWFnZW5kYS1pbnB1dC5tanItYWdlbmRhLWZpbGxlZCB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoCiAgICAgICAgaW4gc3JnYiwKICAgICAgICB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKSA0MCUsCiAgICAgICAgdmFyKC0tbWpyLXN1cmZhY2UtMikgNjAlCiAgICApOwogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoCiAgICAgICAgaW4gc3JnYiwKICAgICAgICB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKSA4MCUsCiAgICAgICAgdmFyKC0tbWpyLWJvcmRlcikKICAgICk7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2ZmZik7Cn0KLm1qci1hZ2VuZGEtaW5wdXQubWpyLWFnZW5kYS1lbXB0eSB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODUlLCB0cmFuc3BhcmVudCAxNSUpOwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1tanItYm9yZGVyKTsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42NSkpOwp9CgoubWpyLWFnZW5kYS1jb250YWluZXIgewogICAgd2lkdGg6IDEwMCU7Cn0KCi5tanItYWdlbmRhLWNhbGVuZGFyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiA4cHg7CiAgICB3aWR0aDogMTAwJTsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1hZ2VuZGEtaGVhZGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7Cn0KCi5tanItYWdlbmRhLW1vbnRoIHsKICAgIGZsZXg6IDE7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItYWdlbmRhLW5hdiB7CiAgICB3aWR0aDogMzJweDsKICAgIGhlaWdodDogMjhweDsKICAgIHBhZGRpbmc6IDA7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4Owp9CgoubWpyLWFnZW5kYS1ncmlkIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg3LCBtaW5tYXgoMCwgMWZyKSk7CiAgICBnYXA6IDZweDsKICAgIHdpZHRoOiAxMDAlOwp9CgoubWpyLWFnZW5kYS13ZWVrZGF5IHsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42NSkpOwogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItYWdlbmRhLWRheSB7CiAgICBoZWlnaHQ6IDMwcHg7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTUlLCB0cmFuc3BhcmVudCk7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIHBhZGRpbmc6IDA7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHRyYW5zaXRpb246CiAgICAgICAgYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIHRyYW5zZm9ybSA4MG1zIGVhc2U7Cn0KCi5tanItYWdlbmRhLWRheS1iYWRnZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IC01cHg7CiAgICByaWdodDogLTVweDsKICAgIG1pbi13aWR0aDogMTZweDsKICAgIGhlaWdodDogMTZweDsKICAgIHBhZGRpbmc6IDAgNHB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiAjZTUzOTM1OwogICAgY29sb3I6ICNmZmY7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgI2U1MzkzNSA2NSUsICNmZmZmZmYgMzUlKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMTRweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKfQoKLm1qci1hZ2VuZGEtZGF5OmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KAogICAgICAgIGluIHNyZ2IsCiAgICAgICAgdmFyKC0tbWpyLWJvcmRlcikgNTUlLAogICAgICAgIHZhcigtLW1qci1hY2NlbnQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpIDQ1JQogICAgKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peCgKICAgICAgICBpbiBzcmdiLAogICAgICAgIHZhcigtLW1qci1zdXJmYWNlLTIpIDQ1JSwKICAgICAgICB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKSAxMCUKICAgICk7Cn0KCi5tanItYWdlbmRhLWRheTphY3RpdmUgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDFweCk7Cn0KCi5tanItYWdlbmRhLWRheS0tYmxhbmsgewogICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5tanItYWdlbmRhLWRheS0taGFzLWFzc2V0cyB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peCgKICAgICAgICBpbiBzcmdiLAogICAgICAgIHZhcigtLW1qci1hY2NlbnQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpIDgwJSwKICAgICAgICB2YXIoLS1tanItYm9yZGVyKQogICAgKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peCgKICAgICAgICBpbiBzcmdiLAogICAgICAgIHZhcigtLW1qci1hY2NlbnQsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikpIDE4JSwKICAgICAgICB2YXIoLS1tanItc3VyZmFjZS0yKSA4MiUKICAgICk7Cn0KCi5tanItYWdlbmRhLWRheS0tc2VsZWN0ZWQgewogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKSA1NSUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1hZ2VuZGEtZm9vdGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBnYXA6IDhweDsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKfQoKLm1qci1hZ2VuZGEtY2xlYXIsCi5tanItYWdlbmRhLXJlZnJlc2ggewogICAgZmxleDogMTsKfQoKLm1qci1tZW51LAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWVudSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogNHB4Owp9CgoubWpyLXByaW1lLW1lbnUtbGlzdCwKLm1qci1zb3J0LW1lbnUgW2RhdGEtcGMtc2VjdGlvbj0ibGlzdCJdIHsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOiAwOwogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogNnB4Owp9CgoubWpyLXByaW1lLW1lbnUgW2RhdGEtcGMtc2VjdGlvbj0iaXRlbSJdLAoubWpyLXByaW1lLW1lbnUtbGlzdCBbZGF0YS1wYy1zZWN0aW9uPSJpdGVtIl0gewogICAgbGlzdC1zdHlsZTogbm9uZTsKfQoKLm1qci1wcmltZS1tZW51IFtkYXRhLXBjLXNlY3Rpb249Iml0ZW1jb250ZW50Il0gewogICAgd2lkdGg6IDEwMCU7Cn0KCi5tanItbWVudS1pdGVtLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWVudS1pdGVtIHsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogMTBweDsKICAgIHdpZHRoOiAxMDAlOwogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRyYW5zaXRpb246CiAgICAgICAgYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIHRyYW5zZm9ybSA4MG1zIGVhc2U7Cn0KCi5tanItbWVudS1pdGVtOmhvdmVyLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWVudS1pdGVtOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDgwJSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDU1JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1lbnUtaXRlbTphY3RpdmUsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1tZW51LWl0ZW06YWN0aXZlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxcHgpOwp9CgoubWpyLW1lbnUtaXRlbS1sYWJlbCwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lbnUtaXRlbS1sYWJlbCB7CiAgICBmbGV4OiAxIDEgYXV0bzsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItbWVudS1pdGVtLWNoZWNrLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbWVudS1pdGVtLWNoZWNrIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIHdpZHRoOiAxNnB4OwogICAgZmxleDogMCAwIDE2cHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBvcGFjaXR5OiAwOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA3MiUsIHZhcigtLWNvbnRlbnQtZmcpKTsKICAgIHRyYW5zaXRpb246CiAgICAgICAgb3BhY2l0eSAxMjBtcyBlYXNlLAogICAgICAgIGNvbG9yIDEyMG1zIGVhc2U7Cn0KCi5tanItbWVudS1pdGVtIC5waSwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLW1lbnUtaXRlbSAucGkgewogICAgZm9udC1zaXplOiAxM3B4OwogICAgb3BhY2l0eTogMC45Owp9CgoubWpyLWNvbGxlY3Rpb25zLW1lbnUgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogNnB4Owp9CgoubWpyLW1lbnUtaXRlbS1sYWJlbC0taWNvbiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLW1lbnUtaXRlbS1sYWJlbC0taWNvbiAucGkgewogICAgd2lkdGg6IDE2cHg7CiAgICBmbGV4OiAwIDAgMTZweDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLm1qci1tZW51LWl0ZW0tcmlnaHQgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgZmxleDogMCAwIGF1dG87CiAgICBtaW4td2lkdGg6IDE2cHg7CiAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7Cn0KCi5tanItbWVudS1pdGVtLWhpbnQgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnKSA2MiUsIHZhcigtLW1qci1tdXRlZCkpOwogICAgb3BhY2l0eTogMC43MjsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItbWVudS1pdGVtLWNoZWNrLS12aXNpYmxlLAoubWpyLW1lbnUtaXRlbS5pcy1hY3RpdmUgLm1qci1tZW51LWl0ZW0tY2hlY2sgewogICAgb3BhY2l0eTogMTsKfQoKLm1qci1tZW51LWRpdmlkZXIgewogICAgaGVpZ2h0OiAxcHg7CiAgICBtYXJnaW46IDRweCAwOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDgwJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW11dGVkIHsKICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgIG9wYWNpdHk6IDAuNzU7Cn0KCi5tanItc3RhdGUtYmxvY2sgewogICAgZm9udC1zaXplOiAxMHB4OwogICAgbGluZS1oZWlnaHQ6IDEuMzU7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkKTsKICAgIGJvcmRlcjogMXB4IGRhc2hlZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODUlLCB0cmFuc3BhcmVudCk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1zbSk7CiAgICBwYWRkaW5nOiA4cHggMTBweDsKICAgIG1hcmdpbjogNHB4IDA7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgNzAlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItc3RhdGUtYmxvY2suaXMtZXJyb3IsCi5tanItY29udGV4dC1tZW51LW5vdGUuaXMtZXJyb3IgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLWVycm9yKSA4MiUsIHZhcigtLWNvbnRlbnQtZmcpKTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtZXJyb3IpIDQ1JSwgdmFyKC0tbWpyLWJvcmRlcikpOwp9CgoubWpyLWNvbGxlY3Rpb24tcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDsKICAgIHdpZHRoOiAxMDAlOwogICAgbWluLWhlaWdodDogNDhweDsKfQoKLm1qci1jb2xsZWN0aW9ucy12aXJ0dWFsLWxpc3QgewogICAgd2lkdGg6IDEwMCU7CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIHNjcm9sbGJhci13aWR0aDogdGhpbjsKfQoKLm1qci1kZWxldGUtYnRuIHsKICAgIHdpZHRoOiA0MnB4OwogICAgZmxleDogMCAwIDQycHg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDA7CiAgICBtYXJnaW4tbGVmdDogNnB4OwogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNjUlLCB2YXIoLS1tanItc3RhdHVzLWVycm9yKSA0NSUpOwp9CgoubWpyLWRlbGV0ZS1idG46aG92ZXI6bm90KDpkaXNhYmxlZCkgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNDAlLCB2YXIoLS1tanItc3RhdHVzLWVycm9yKSA2NSUpOwp9CgoubWpyLWRlbGV0ZS1idG4gLnBpIHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy1lcnJvcikgNzglLCB2YXIoLS1jb250ZW50LWZnKSk7Cn0KCi5tanItc2VjdGlvbi10aXRsZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgcGFkZGluZzogNnB4IDEwcHggMnB4OwogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjZweDsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBvcGFjaXR5OiAwLjg4OwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnKSA3MiUsIHZhcigtLW1qci1tdXRlZCkpOwp9CgoubWpyLXNlY3Rpb24tdGl0bGUtLWN5YW4gewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjNmZkNGZmIDc4JSwgdmFyKC0tY29udGVudC1mZykpOwp9CgoubWpyLXNlY3Rpb24tdGl0bGUtLXZpb2xldCB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsICNjNDhkZmYgNzglLCB2YXIoLS1jb250ZW50LWZnKSk7Cn0KCi5tanItc2VjdGlvbi1oaW50IHsKICAgIHBhZGRpbmc6IDAgMTBweCA0cHg7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBsaW5lLWhlaWdodDogMS40OwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnKSA1NSUsIHZhcigtLW1qci1tdXRlZCkpOwp9CgoubWpyLW1lbnUtaXRlbS0tc21hcnQsCi5tanItbWVudS1pdGVtLS1jbHVzdGVyIHsKICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKfQoKLm1qci1tZW51LWl0ZW0tLWNsdXN0ZXIgewogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZyk7Cn0KCi5tanItbWVudS1pdGVtLS1zbWFydCAucGkgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjNmZkNGZmIDc0JSwgdmFyKC0tY29udGVudC1mZykpOwp9CgoubWpyLW1lbnUtaXRlbS0tY2x1c3RlciAucGkgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCAjYzQ4ZGZmIDc0JSwgdmFyKC0tY29udGVudC1mZykpOwp9CgoubWpyLW1lbnUtaXRlbS0tc21hcnQ6aG92ZXI6bm90KDpkaXNhYmxlZCksCi5tanItbWVudS1pdGVtLS1jbHVzdGVyOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDgwJSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDU1JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWNsdXN0ZXItcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICBtYXJnaW4tYm90dG9tOiA0cHg7CiAgICBwYWRkaW5nOiA2cHggOHB4OwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItc20pOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgNzAlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItY2x1c3Rlci10aHVtYnMgewogICAgZGlzcGxheTogZmxleDsKICAgIGdhcDogM3B4OwogICAgZmxleC1zaHJpbms6IDA7Cn0KCi5tanItY2x1c3Rlci10aHVtYiB7CiAgICB3aWR0aDogMjhweDsKICAgIGhlaWdodDogMjhweDsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIG9iamVjdC1maXQ6IGNvdmVyOwogICAgb3BhY2l0eTogMC44NTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA2MCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1jbHVzdGVyLWluZm8gewogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1jbHVzdGVyLW5hbWUgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZyk7Cn0KCi5tanItY2x1c3Rlci1jb3VudCB7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcpIDU4JSwgdmFyKC0tbWpyLW11dGVkKSk7Cn0KCi5tanItY2x1c3Rlci1jcmVhdGUtYnRuIHsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgcGFkZGluZzogM3B4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDU1JSwgdHJhbnNwYXJlbnQpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRyYW5zaXRpb246CiAgICAgICAgYm9yZGVyLWNvbG9yIDEyMG1zIGVhc2UsCiAgICAgICAgYmFja2dyb3VuZCAxMjBtcyBlYXNlLAogICAgICAgIG9wYWNpdHkgMTIwbXMgZWFzZTsKfQoKLm1qci1jbHVzdGVyLWNyZWF0ZS1idG46ZGlzYWJsZWQgewogICAgb3BhY2l0eTogMC42MjsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKLm1qci1jbHVzdGVyLWNyZWF0ZS1idG46aG92ZXI6bm90KDpkaXNhYmxlZCkgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgODAlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNjIlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zZWFyY2gtaWNvbiB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc2VhcmNoLWljb24gLnBpIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc2VhcmNoLXBpbGwgLm1qci1pbnB1dCB7CiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7CiAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7CiAgICBmb250LXNpemU6IDEycHggIWltcG9ydGFudDsKICAgIGxpbmUtaGVpZ2h0OiAxLjIgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLXNlYXJjaC1waWxsOmZvY3VzLXdpdGhpbiB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA2NSUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMTglLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1icm93c2UgewogICAgbWFyZ2luLXRvcDogMDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWdyaWQtc2Nyb2xsIHsKICAgIHBhZGRpbmctcmlnaHQ6IDRweDsKICAgIHNjcm9sbGJhci1ndXR0ZXI6IHN0YWJsZTsKfQoKLyogR3JpZCBsYXlvdXQgKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQgewogICAgZGlzcGxheTogZ3JpZDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIC8qIEF2b2lkIG92ZXJmbG93IHdoZW4gdGhlIHBhbmVsIGJlY29tZXMgbmFycm93ZXIgdGhhbiB0aGUgbWluIGNhcmQgc2l6ZSAqLwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoCiAgICAgICAgYXV0by1maWxsLAogICAgICAgIG1pbm1heChtaW4oMTAwJSwgdmFyKC0tbWpyLWdyaWQtbWluLXNpemUsIDE4MHB4KSksIDFmcikKICAgICk7CiAgICBnYXA6IHZhcigtLW1qci1ncmlkLWdhcCwgMTBweCk7CiAgICBtYXJnaW4tdG9wOiA2cHg7CiAgICBtaW4taGVpZ2h0OiAwOwp9CgovKiBDYXJkIHNlbGVjdGlvbiArIGZvY3VzIChrZWVwcyBhIHZpc2libGUgaW5kaWNhdG9yIHdoZW4gc2lkZWJhciBpcyBvcGVuKSAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCB7CiAgICBvdXRsaW5lOiBub25lOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZC5pcy1zZWxlY3RlZCB7CiAgICBib3gtc2hhZG93OgogICAgICAgIDAgMCAwIDNweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKSA4MCUsIHZhcigtLWNvbnRlbnQtZmcpKSwKICAgICAgICAwIDAgMCA2cHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1jYXJkLXNlbGVjdGlvbi1jb2xvcikgMzAlLCB0cmFuc3BhcmVudCksCiAgICAgICAgMCAwIDIwcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1jYXJkLXNlbGVjdGlvbi1jb2xvcikgNDAlLCB0cmFuc3BhcmVudCksCiAgICAgICAgMCAxMHB4IDI4cHggcmdiYSgwLCAwLCAwLCAwLjI4KTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLWxnKTsKICAgIC8qIHNjYWxlKDAuOTcpIGluc3RlYWQgb2YgMC45Mjogc3VidGxlIGluc2V0IGZlZWwgd2l0aG91dCB0aGUgYWdncmVzc2l2ZQogICAgICAgc2hyaW5rIHRoYXQgY2F1c2VkIGEgdmlzaWJsZSBibGluayBvbiByYXBpZCBzZWxlY3Rpb24gY2hhbmdlcy4gKi8KICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NykgIWltcG9ydGFudDsKICAgIHotaW5kZXg6IDEwOwogICAgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLW1qci1jYXJkLXNlbGVjdGlvbi1jb2xvcik7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkOmZvY3VzLXZpc2libGUgewogICAgYm94LXNoYWRvdzoKICAgICAgICAwIDAgMCAzcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDgwJSwgdmFyKC0tY29udGVudC1mZykpLAogICAgICAgIDAgMCAwIDZweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMzAlLCB0cmFuc3BhcmVudCksCiAgICAgICAgMCAwIDIwcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDQwJSwgdHJhbnNwYXJlbnQpLAogICAgICAgIDAgMTBweCAyOHB4IHJnYmEoMCwgMCwgMCwgMC4yOCk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1sZyk7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTcpICFpbXBvcnRhbnQ7CiAgICB6LWluZGV4OiAxMDsKfQoKQGtleWZyYW1lcyBtanItbGl2ZS1wbGFjZWhvbGRlci1zaGVlbiB7CiAgICAwJSB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01OCUpOwogICAgICAgIG9wYWNpdHk6IDAuMTg7CiAgICB9CiAgICA1MCUgewogICAgICAgIG9wYWNpdHk6IDAuMzQ7CiAgICB9CiAgICAxMDAlIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoNTglKTsKICAgICAgICBvcGFjaXR5OiAwLjE4OwogICAgfQp9CgpAa2V5ZnJhbWVzIG1qci1saXZlLXBsYWNlaG9sZGVyLXB1bHNlIHsKICAgIDAlLAogICAgMTAwJSB7CiAgICAgICAgYm94LXNoYWRvdzoKICAgICAgICAgICAgMCAwIDAgMXB4IHJnYmEoMTE4LCAyMTQsIDI1NSwgMC4zNCksCiAgICAgICAgICAgIDAgMTBweCAyNHB4IHJnYmEoMCwgMCwgMCwgMC4yNCk7CiAgICB9CiAgICA1MCUgewogICAgICAgIGJveC1zaGFkb3c6CiAgICAgICAgICAgIDAgMCAwIDFweCByZ2JhKDExOCwgMjE0LCAyNTUsIDAuNTIpLAogICAgICAgICAgICAwIDAgMCA0cHggcmdiYSgxMTgsIDIxNCwgMjU1LCAwLjEyKSwKICAgICAgICAgICAgMCAxMnB4IDMwcHggcmdiYSgwLCAwLCAwLCAwLjI4KTsKICAgIH0KfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItbGl2ZS1wbGFjZWhvbGRlcj0idHJ1ZSJdIHsKICAgIGFuaW1hdGlvbjogbWpyLWxpdmUtcGxhY2Vob2xkZXItcHVsc2UgMS45cyBlYXNlLWluLW91dCBpbmZpbml0ZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItbGl2ZS1wbGFjZWhvbGRlcj0idHJ1ZSJdIC5tanItdGh1bWIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWxpdmUtcGxhY2Vob2xkZXItd2FzaCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogLTglOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAxOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDExNWRlZywKICAgICAgICByZ2JhKDk4LCAxOTksIDI1NSwgMCkgMCUsCiAgICAgICAgcmdiYSg5OCwgMTk5LCAyNTUsIDAuMDgpIDMwJSwKICAgICAgICByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjQpIDUwJSwKICAgICAgICByZ2JhKDk4LCAxOTksIDI1NSwgMC4xMikgNzAlLAogICAgICAgIHJnYmEoOTgsIDE5OSwgMjU1LCAwKSAxMDAlCiAgICApOwogICAgYW5pbWF0aW9uOiBtanItbGl2ZS1wbGFjZWhvbGRlci1zaGVlbiAyLjJzIGxpbmVhciBpbmZpbml0ZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWxpdmUtcGlsbCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDZweDsKICAgIHJpZ2h0OiA2cHg7CiAgICB6LWluZGV4OiAxMjsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgbWluLWhlaWdodDogMjRweDsKICAgIHBhZGRpbmc6IDAgOHB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDEwLCAxNCwgMjAsIDAuNzgpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxMTgsIDIxNCwgMjU1LCAwLjM0KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTYpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAxZW07CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjI0KTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1saXZlLXBpbGwtZG90IHsKICAgIHdpZHRoOiA3cHg7CiAgICBoZWlnaHQ6IDdweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogIzc2ZDZmZjsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDRweCByZ2JhKDExOCwgMjE0LCAyNTUsIDAuMTYpOwogICAgZmxleDogMCAwIGF1dG87Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWxpdmUtcGxhY2Vob2xkZXI9InRydWUiXSAubWpyLWFzc2V0LXN0YXR1cy1kb3QgewogICAgYW5pbWF0aW9uOiBtanItbGl2ZS1wbGFjZWhvbGRlci1wdWxzZSAxLjlzIGVhc2UtaW4tb3V0IGluZmluaXRlOwp9CgovKiBHcmlkIGxvYWRpbmcgb3ZlcmxheSAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZ3JpZC1sb2FkaW5nLW92ZXJsYXkgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsICMwMDAgMzUlLCB0cmFuc3BhcmVudCk7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2ZmZik7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBsZXR0ZXItc3BhY2luZzogMC4zcHg7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1sZyk7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigycHgpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZ3JpZC1za2VsZXRvbi1sYXlvdXQgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDEzMnB4LCAxZnIpKTsKICAgIGdhcDogMTJweDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQtc2tlbGV0b24tY2FyZCB7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIyKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTkyLCAxOTgsIDIwNiwgMC4yKTsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAvKiBtaW4taGVpZ2h0IHJlbW92ZWQ6IFZ1ZSBza2VsZXRvbkNhcmRTdHlsZSBzZXRzIGFuIGV4cGxpY2l0IGhlaWdodCBkZXJpdmVkCiAgICAgICBmcm9tIGVzdGltYXRlUm93SGVpZ2h0LiBBIGNvbmZsaWN0aW5nIG1pbi1oZWlnaHQgY2F1c2VkIHNrZWxldG9uIGNhcmRzIHRvCiAgICAgICBiZSB0YWxsZXIgdGhhbiB0aGUgYWN0dWFsIGNhcmRzIHRoZXkgcmVwbGFjZSwgY2F1c2luZyBhIGxheW91dCBqdW1wIHdoZW4KICAgICAgIGFzc2V0cyBmaXJzdCBsb2FkLiAqLwogICAgYm94LXNoYWRvdzogMCA2cHggMThweCByZ2JhKDAsIDAsIDAsIDAuMjQpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZ3JpZC1za2VsZXRvbi10aHVtYiB7CiAgICBhc3BlY3QtcmF0aW86IDEgLyAxOwogICAgd2lkdGg6IDEwMCU7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgOTBkZWcsCiAgICAgICAgcmdiYSgxNTYsIDE2MiwgMTcxLCAwLjUyKSAwJSwKICAgICAgICByZ2JhKDIyMCwgMjI1LCAyMzIsIDAuNzIpIDQ1JSwKICAgICAgICByZ2JhKDE1NiwgMTYyLCAxNzEsIDAuNTIpIDEwMCUKICAgICk7CiAgICBiYWNrZ3JvdW5kLXNpemU6IDI0MCUgMTAwJTsKICAgIGFuaW1hdGlvbjogbWpyLWdyaWQtc2tlbGV0b24tc2hpbW1lciAxLjJzIGxpbmVhciBpbmZpbml0ZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQtc2tlbGV0b24tbGluZSB7CiAgICBoZWlnaHQ6IDEwcHg7CiAgICBtYXJnaW46IDhweCAxMHB4OwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDkwZGVnLAogICAgICAgIHJnYmEoMTY0LCAxNzAsIDE3OSwgMC40OCkgMCUsCiAgICAgICAgcmdiYSgyMTQsIDIxOSwgMjI2LCAwLjcpIDQ1JSwKICAgICAgICByZ2JhKDE2NCwgMTcwLCAxNzksIDAuNDgpIDEwMCUKICAgICk7CiAgICBiYWNrZ3JvdW5kLXNpemU6IDI0MCUgMTAwJTsKICAgIGFuaW1hdGlvbjogbWpyLWdyaWQtc2tlbGV0b24tc2hpbW1lciAxLjJzIGxpbmVhciBpbmZpbml0ZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQtc2tlbGV0b24tbGluZS0tdGl0bGUgewogICAgd2lkdGg6IDcyJTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQtc2tlbGV0b24tbGluZS0tbWV0YSB7CiAgICB3aWR0aDogNDglOwogICAgbWFyZ2luLXRvcDogMnB4OwogICAgbWFyZ2luLWJvdHRvbTogMTBweDsKfQoKQGtleWZyYW1lcyBtanItc2tlbGV0b24tc2hpbW1lciB7CiAgICAwJSB7CiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMTIwJSAwOwogICAgfQogICAgMTAwJSB7CiAgICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyMCUgMDsKICAgIH0KfQoKQGtleWZyYW1lcyBtanItZ3JpZC1za2VsZXRvbi1zaGltbWVyIHsKICAgIDAlIHsKICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAxMDAlIDA7CiAgICB9CiAgICAxMDAlIHsKICAgICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTAwJSAwOwogICAgfQp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZ3JpZC1za2VsZXRvbi1zaGltbWVyIHsKICAgIHdpbGwtY2hhbmdlOiBiYWNrZ3JvdW5kLXBvc2l0aW9uOwp9CgovKiBHZW5lcmljIGhlYWRpbmdzIGluc2lkZSBwYW5lbCAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIGgzLAoubWpyLWFzc2V0cy1tYW5hZ2VyIGg0IHsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDFlbTsKfQoKLyogUGFuZWxzICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1wYW5lbCB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbGcpOwogICAgYm94LXNoYWRvdzogdmFyKC0taW50ZXJmYWNlLXBhbmVsLWJveC1zaGFkb3csIDAgOHB4IDI0cHggcmdiYSgwLCAwLCAwLCAwLjI1KSk7Cn0KCi8qIFRvb2xiYXIgKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRvb2xiYXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBwYWRkaW5nOiB2YXIoLS1tanItcGFkLW1kKTsKfQoKLyogQnV0dG9ucyAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYnRuIHsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTIpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbWQpOwogICAgcGFkZGluZzogN3B4IDEwcHg7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBiYWNrZ3JvdW5kIDEyMG1zIGVhc2UsCiAgICAgICAgYm9yZGVyLWNvbG9yIDEyMG1zIGVhc2UsCiAgICAgICAgdHJhbnNmb3JtIDgwbXMgZWFzZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWJ0bjpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1NSUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA3MCUsIHZhcigtLW1qci1hY2NlbnQpIDEwJSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1idG46YWN0aXZlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxcHgpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYnRuOmRpc2FibGVkIHsKICAgIG9wYWNpdHk6IDAuNTU7CiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYnRuLm1qci1wcmltYXJ5IHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDYwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDE0JSwgdmFyKC0tbWpyLXN1cmZhY2UtMikpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYnRuIHsKICAgIC8qIE92ZXJyaWRlIGlubGluZSBzdHlsZXMgaWYgcHJlc2VudCAqLwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0yKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLW1kKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWJ0bjpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1NSUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA3MCUsIHZhcigtLW1qci1hY2NlbnQpIDEwJSk7Cn0KCi8qIElucHV0cyAvIHNlbGVjdHMgKHVzZWQgaW5zaWRlIHBvcnRhbGVkIHBvcG92ZXJzIHRvbykgKi8KLm1qci1pbnB1dCwKLm1qci1zZWxlY3QsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1pbnB1dCwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXNlbGVjdCB7CiAgICBhcHBlYXJhbmNlOiBub25lOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1pbnB1dC1iZywgcmdiYSgwLCAwLCAwLCAwLjI1KSk7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2RkZCk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1tZCk7CiAgICBwYWRkaW5nOiA4cHggMTBweDsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIG91dGxpbmU6IG5vbmU7CiAgICB3aWR0aDogMTAwJTsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWlucHV0OjpwbGFjZWhvbGRlciB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1tdXRlZCkgODAlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItaW5wdXQ6Zm9jdXMsCi5tanItc2VsZWN0OmZvY3VzLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItaW5wdXQ6Zm9jdXMsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1zZWxlY3Q6Zm9jdXMgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNjUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAycHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDIwJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWlucHV0LAoubWpyLXNlbGVjdCwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWlucHV0LAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItc2VsZWN0IHsKICAgIC8qIE92ZXJyaWRlIGlubGluZSBzdHlsZXMgaWYgcHJlc2VudCAqLwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1pbnB1dC1iZywgcmdiYSgwLCAwLCAwLCAwLjI1KSk7CiAgICBjb2xvcjogdmFyKC0taW5wdXQtdGV4dCwgI2RkZCk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1tZCk7CiAgICBwYWRkaW5nOiA4cHggMTBweDsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1zZWxlY3QgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZ2FwOiA4cHg7CiAgICBtaW4taGVpZ2h0OiAzNHB4OwogICAgcGFkZGluZzogMCA5cHg7CiAgICBsaW5lLWhlaWdodDogMS4yOwp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLXNlbGVjdFtkYXRhLXAtZGlzYWJsZWQ9InRydWUiXSB7CiAgICBvcGFjaXR5OiAwLjU1OwogICAgY3Vyc29yOiBkZWZhdWx0Owp9CgoubWpyLWZpbHRlci1wb3BvdmVyIC5tanItZmlsdGVyLXNlbGVjdCBbZGF0YS1wYy1zZWN0aW9uPSJsYWJlbCJdIHsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgbWluLXdpZHRoOiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci1maWx0ZXItcG9wb3ZlciAubWpyLWZpbHRlci1zZWxlY3QgW2RhdGEtcGMtc2VjdGlvbj0iZHJvcGRvd24iXSB7CiAgICBmbGV4OiAwIDAgYXV0bzsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgd2lkdGg6IDE4cHg7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkLCB2YXIoLS1kZXNjcmlwLXRleHQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42NSkpKTsKfQoKLm1qci1maWx0ZXItc2VsZWN0LXBhbmVsIHsKICAgIG1pbi13aWR0aDogdmFyKC0tcC1zZWxlY3Qtb3ZlcmxheS13aWR0aCwgMTJyZW0pOwogICAgbWF4LXdpZHRoOiBtaW4oMzIwcHgsIGNhbGMoMTAwdncgLSAzMnB4KSk7CiAgICBtYXgtaGVpZ2h0OiBtaW4oMzIwcHgsIGNhbGMoMTAwdmggLSAzMnB4KSk7CiAgICBvdmVyZmxvdzogYXV0bzsKICAgIHBhZGRpbmc6IDRweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbWQpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSwgdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSkpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsIHZhcigtLWlucHV0LXRleHQsICNkZGQpKTsKICAgIGJveC1zaGFkb3c6IDAgMTJweCAyOHB4IHJnYmEoMCwgMCwgMCwgMC4zOCk7CiAgICB6LWluZGV4OiBjYWxjKHZhcigtLW1qci1wb3BvdmVyLXotaW5kZXgsIDIxNDc0ODM2NDcpICsgMSk7Cn0KCi5tanItZmlsdGVyLXNlbGVjdC1wYW5lbCBbZGF0YS1wYy1zZWN0aW9uPSJsaXN0Il0gewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDJweDsKICAgIHBhZGRpbmc6IDA7CiAgICBtYXJnaW46IDA7CiAgICBsaXN0LXN0eWxlOiBub25lOwp9CgoubWpyLWZpbHRlci1zZWxlY3QtcGFuZWwgW2RhdGEtcGMtc2VjdGlvbj0ib3B0aW9uIl0gewogICAgbWluLWhlaWdodDogMjhweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgcGFkZGluZzogNnB4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IGNhbGModmFyKC0tbWpyLXItbWQpIC0gMnB4KTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI1OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsIHZhcigtLWlucHV0LXRleHQsICNkZGQpKTsKfQoKLm1qci1maWx0ZXItc2VsZWN0LXBhbmVsIFtkYXRhLXBjLXNlY3Rpb249Im9wdGlvbiJdOmhvdmVyLAoubWpyLWZpbHRlci1zZWxlY3QtcGFuZWwgW2RhdGEtcC1oaWdobGlnaHQ9InRydWUiXSB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMTglLCB0cmFuc3BhcmVudCk7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2ZmZik7Cn0KCi8qIFRhYnM6IG92ZXJyaWRkZW4gYWJvdmUgd2l0aCBxdWV1ZS1saWtlIHN0eWxlICovCgovKiBSZW1vdmVkIHJlZHVuZGFudCB0YWIgZGVjbGFyYXRpb25zIHRoYXQgd2VyZSB1c2luZyAhaW1wb3J0YW50ICovCgovKiBNdXRlZCB0ZXh0IGhlbHBlciAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItbXV0ZWQgewogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCk7Cn0KCi8qIEdyaWQgKyBjYXJkcyAob3ZlcnJpZGUgaW5saW5lIHN0eWxlcyBmcm9tIENhcmQuanMpICovCi5tanItYXNzZXRzLW1hbmFnZXIgI21qci1hc3NldHMtZ3JpZCB7CiAgICBnYXA6IDEwcHggIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEpICFpbXBvcnRhbnQ7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKSAhaW1wb3J0YW50OwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tbWpyLXItbGcpICFpbXBvcnRhbnQ7CiAgICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICBtaW4td2lkdGg6IDA7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIHRyYW5zZm9ybSAxMjBtcyBlYXNlLAogICAgICAgIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGJveC1zaGFkb3cgMTIwbXMgZWFzZSAhaW1wb3J0YW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZDpob3ZlciwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQ6aG92ZXIgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peCgKICAgICAgICBpbiBzcmdiLAogICAgICAgIHZhcigtLW1qci1jYXJkLXNlbGVjdGlvbi1jb2xvcikgNTUlLAogICAgICAgIHZhcigtLW1qci1ib3JkZXIpCiAgICApICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1tanItY2FyZC1ob3Zlci1jb2xvcikgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDIycHggcmdiYSgwLCAwLCAwLCAwLjI1KSAhaW1wb3J0YW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCBpbWcsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIHZpZGVvLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGh1bWItbWVkaWEgewogICAgZGlzcGxheTogYmxvY2s7CiAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50OwogICAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7CiAgICBvYmplY3QtZml0OiBjb3ZlciAhaW1wb3J0YW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGh1bWIgewogICAgZmxleDogMCAwIGF1dG87CiAgICB3aWR0aDogMTAwJTsKICAgIGFzcGVjdC1yYXRpbzogMSAvIDE7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgODAlLCB0cmFuc3BhcmVudCk7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXVkaW8tdGh1bWIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hdWRpby10aHVtYiB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZ2FwOiAxMHB4OwogICAgcGFkZGluZzogMTRweCAxMnB4IDEycHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk0KTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgYmFja2dyb3VuZDoKICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDE4JSAyMCUsIHJnYmEoNzgsIDE4NCwgMjU1LCAwLjMyKSwgdHJhbnNwYXJlbnQgMzglKSwKICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDg4JSA3MiUsIHJnYmEoODIsIDIyMCwgMTU2LCAwLjI0KSwgdHJhbnNwYXJlbnQgNDIlKSwKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDE4LCAyNiwgMzYsIDAuOTgpLCByZ2JhKDgsIDEyLCAxOCwgMC45OCkpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXVkaW8tdGh1bWIuaGFzLXBvc3RlciwKLm1qci1ib3R0b20tZmVlZCAubWpyLWF1ZGlvLXRodW1iLmhhcy1wb3N0ZXIgewogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDQsIDYsIDEwLCAwLjI4KSwgcmdiYSg0LCA2LCAxMCwgMC44NikpLAogICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgNTAlIDQyJSwgcmdiYSg3OCwgMTg0LCAyNTUsIDAuMiksIHRyYW5zcGFyZW50IDU0JSk7CiAgICBiYWNrZHJvcC1maWx0ZXI6IHNhdHVyYXRlKDEuMSk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogc2F0dXJhdGUoMS4xKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWF1ZGlvLXRodW1iLWhlYWQsCi5tanItYm90dG9tLWZlZWQgLm1qci1hdWRpby10aHVtYi1oZWFkIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZ2FwOiA4cHg7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hdWRpby10aHVtYi1pY29uLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXVkaW8tdGh1bWItaWNvbiB7CiAgICB3aWR0aDogMjhweDsKICAgIGhlaWdodDogMjhweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KTsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjIyKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWF1ZGlvLXRodW1iLWtpbmQsCi5tanItYm90dG9tLWZlZWQgLm1qci1hdWRpby10aHVtYi1raW5kIHsKICAgIG1heC13aWR0aDogNjJweDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBwYWRkaW5nOiAzcHggN3B4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMjgpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEzKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA4MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWF1ZGlvLXRodW1iLXdhdmVmb3JtLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXVkaW8tdGh1bWItd2F2ZWZvcm0gewogICAgZmxleDogMTsKICAgIG1pbi1oZWlnaHQ6IDQycHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiBjbGFtcCgycHgsIDIuMiUsIDVweCk7CiAgICBwYWRkaW5nOiA0cHggMDsKICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMCA0cHggMTRweCByZ2JhKDAsIDAsIDAsIDAuMzQpKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWF1ZGlvLXRodW1iLXdhdmVmb3JtIHNwYW4sCi5tanItYm90dG9tLWZlZWQgLm1qci1hdWRpby10aHVtYi13YXZlZm9ybSBzcGFuIHsKICAgIHdpZHRoOiAzcHg7CiAgICBtaW4td2lkdGg6IDJweDsKICAgIG1heC13aWR0aDogNXB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTgpLCByZ2JhKDE2MCwgMjI0LCAyNTUsIDAuNzIpKTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWF1ZGlvLXRodW1iLW1ldGEsCi5tanItYm90dG9tLWZlZWQgLm1qci1hdWRpby10aHVtYi1tZXRhIHsKICAgIG1pbi13aWR0aDogMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAycHg7CiAgICB0ZXh0LXNoYWRvdzogMCAycHggMTJweCByZ2JhKDAsIDAsIDAsIDAuNjIpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXVkaW8tdGh1bWItdGl0bGUsCi5tanItYm90dG9tLWZlZWQgLm1qci1hdWRpby10aHVtYi10aXRsZSB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDgwMDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hdWRpby10aHVtYi1zdWJ0aXRsZSwKLm1qci1ib3R0b20tZmVlZCAubWpyLWF1ZGlvLXRodW1iLXN1YnRpdGxlIHsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDY1MDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIC5tanItd29ya2Zsb3ctdGh1bWIsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItd29ya2Zsb3ctdGh1bWIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogN3B4OwogICAgcGFkZGluZzogMTRweCAxMnB4OwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDQ3LCA1OCwgNzYsIDAuOTQpLCByZ2JhKDE4LCAyMywgMzIsIDAuOTgpKSwKICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDMwJSAyNSUsIHJnYmEoNzgsIDE4NCwgMjU1LCAwLjIyKSwgdHJhbnNwYXJlbnQgNDIlKTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB0ZXh0LXNoYWRvdzogMCAxcHggOHB4IHJnYmEoMCwgMCwgMCwgMC43Mik7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIC5tanItdGh1bWIubWpyLXRodW1iLXdvcmtmbG93LAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLXRodW1iLm1qci10aHVtYi13b3JrZmxvdyB7CiAgICBhc3BlY3QtcmF0aW86IDEuMDggLyAxOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXdvcmtmbG93LWNhcmQtYWN0aW9ucywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQgLm1qci13b3JrZmxvdy1jYXJkLWFjdGlvbnMgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiA3cHg7CiAgICByaWdodDogN3B4OwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBnYXA6IDRweDsKICAgIHotaW5kZXg6IDEyOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXdvcmtmbG93LWFjdGlvbi1idG4sCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItd29ya2Zsb3ctYWN0aW9uLWJ0biB7CiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICBhcHBlYXJhbmNlOiBub25lOwogICAgd2lkdGg6IDI0cHg7CiAgICBoZWlnaHQ6IDI0cHg7CiAgICBtaW4td2lkdGg6IDI0cHg7CiAgICBtaW4taGVpZ2h0OiAyNHB4OwogICAgcGFkZGluZzogMDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zNCk7CiAgICBib3JkZXItcmFkaXVzOiA3cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDgsIDEyLCAxOCwgMC41OCk7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkyKTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoM3B4KTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDNweCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIC5tanItd29ya2Zsb3ctYWN0aW9uLWJ0bjpob3ZlciwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQgLm1qci13b3JrZmxvdy1hY3Rpb24tYnRuOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjksIDQwLCA1OCwgMC43OCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIC5tanItd29ya2Zsb3ctYWN0aW9uLWJ0bi5pcy1hY3RpdmUsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItd29ya2Zsb3ctYWN0aW9uLWJ0bi5pcy1hY3RpdmUgewogICAgY29sb3I6ICNmZmQ0NWE7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyMTIsIDkwLCAwLjcpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXdvcmtmbG93LXRodW1iIC5waSwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQgLm1qci13b3JrZmxvdy10aHVtYiAucGkgewogICAgZm9udC1zaXplOiAxLjc1cmVtOwogICAgb3BhY2l0eTogMC43MjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci13b3JrZmxvdy10aHVtYi5oYXMtdGh1bWJuYWlsLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLXdvcmtmbG93LXRodW1iLmhhcy10aHVtYm5haWwgewogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgdHJhbnNwYXJlbnQgMjQlLCByZ2JhKDAsIDAsIDAsIDAuMjgpIDU4JSwgcmdiYSgwLCAwLCAwLCAwLjc4KSksCiAgICAgICAgbGluZWFyLWdyYWRpZW50KDkwZGVnLCByZ2JhKDAsIDAsIDAsIDAuMzQpLCB0cmFuc3BhcmVudCAzNCUsIHRyYW5zcGFyZW50IDY2JSwgcmdiYSgwLCAwLCAwLCAwLjM0KSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIC5tanItdGh1bWItbWVkaWEubWpyLXdvcmtmbG93LWdyYXBoLW1hcC1wcmV2aWV3LAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLXRodW1iLW1lZGlhLm1qci13b3JrZmxvdy1ncmFwaC1tYXAtcHJldmlldyB7CiAgICBvYmplY3QtZml0OiBjb3ZlciAhaW1wb3J0YW50OwogICAgb3BhY2l0eTogMC40NjsKICAgIGZpbHRlcjogc2F0dXJhdGUoMC43NSkgY29udHJhc3QoMC44MikgYnJpZ2h0bmVzcygwLjcpOwogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA2KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci13b3JrZmxvdy10aHVtYi5oYXMtZ3JhcGgtbWFwLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLXdvcmtmbG93LXRodW1iLmhhcy1ncmFwaC1tYXAgewogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoOCwgMTAsIDE0LCAwLjMpLCByZ2JhKDgsIDEwLCAxNCwgMC44MikpLAogICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgNTAlIDQyJSwgcmdiYSgwLCAwLCAwLCAwLjE4KSwgcmdiYSgwLCAwLCAwLCAwLjY4KSA3MiUpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXdvcmtmbG93LXRodW1iLmhhcy1ncmFwaC1tYXAgLm1qci13b3JrZmxvdy10aHVtYi10aXRsZSwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQgLm1qci13b3JrZmxvdy10aHVtYi5oYXMtZ3JhcGgtbWFwIC5tanItd29ya2Zsb3ctdGh1bWItdGl0bGUgewogICAgcGFkZGluZzogMnB4IDdweDsKICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4zNik7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIC5tanItd29ya2Zsb3ctdGh1bWIuaGFzLXRodW1ibmFpbCAucGksCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItd29ya2Zsb3ctdGh1bWIuaGFzLXRodW1ibmFpbCAucGkgewogICAgZGlzcGxheTogbm9uZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci13b3JrZmxvdy10aHVtYi5oYXMtZ3JhcGgtbWFwIC5waSwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQgLm1qci13b3JrZmxvdy10aHVtYi5oYXMtZ3JhcGgtbWFwIC5waSB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIG1hcmdpbi1ib3R0b206IDJweDsKICAgIGZvbnQtc2l6ZTogMS4xNXJlbTsKICAgIG9wYWNpdHk6IDAuNTU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIC5tanItd29ya2Zsb3ctdGh1bWItdGl0bGUsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItd29ya2Zsb3ctdGh1bWItdGl0bGUgewogICAgbWF4LXdpZHRoOiAxMDAlOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGZvbnQtc2l6ZTogMC44NHJlbTsKICAgIGZvbnQtd2VpZ2h0OiA4MDA7CiAgICBsaW5lLWhlaWdodDogMS4xOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXdvcmtmbG93LXRodW1iLW1ldGEsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItd29ya2Zsb3ctdGh1bWItbWV0YSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgbWF4LXdpZHRoOiAxMDAlOwogICAgZmxleC13cmFwOiB3cmFwOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDRweDsKICAgIGZvbnQtc2l6ZTogMC42OHJlbTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci13b3JrZmxvdy10aHVtYi1tZXRhIHNwYW4sCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItd29ya2Zsb3ctdGh1bWItbWV0YSBzcGFuLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLW1ldGEtd29ya2Zsb3ctdGFzaywKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQgLm1qci1tZXRhLXdvcmtmbG93LXRhc2ssCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIC5tanItbWV0YS13b3JrZmxvdy1zdWJncmFwaHMsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItbWV0YS13b3JrZmxvdy1zdWJncmFwaHMgewogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIHBhZGRpbmc6IDJweCA1cHg7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLXdvcmtmbG93LXRodW1iLW1ldGEgc3BhbjpudGgtY2hpbGQobiArIDQpLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLXdvcmtmbG93LXRodW1iLW1ldGEgc3BhbjpudGgtY2hpbGQobiArIDQpIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIC5tanItY2FyZC1tZXRhW2RhdGEtbWpyLWtpbmQ9IndvcmtmbG93Il0sCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItY2FyZC1tZXRhW2RhdGEtbWpyLWtpbmQ9IndvcmtmbG93Il0gewogICAgcGFkZGluZzogN3B4IDlweCAhaW1wb3J0YW50Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZCAubWpyLWNhcmQtbWV0YVtkYXRhLW1qci1raW5kPSJ3b3JrZmxvdyJdIC5tanItY2FyZC1maWxlbmFtZSwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQgLm1qci1jYXJkLW1ldGFbZGF0YS1tanIta2luZD0id29ya2Zsb3ciXSAubWpyLWNhcmQtZmlsZW5hbWUgewogICAgbWFyZ2luLWJvdHRvbTogM3B4ICFpbXBvcnRhbnQ7CiAgICBmb250LXNpemU6IDAuNzhyZW0gIWltcG9ydGFudDsKICAgIGxpbmUtaGVpZ2h0OiAxLjE1ICFpbXBvcnRhbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIC5tanItY2FyZC1tZXRhW2RhdGEtbWpyLWtpbmQ9IndvcmtmbG93Il0gLm1qci1jYXJkLW1ldGEtcm93LAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLWNhcmQtbWV0YVtkYXRhLW1qci1raW5kPSJ3b3JrZmxvdyJdIC5tanItY2FyZC1tZXRhLXJvdyB7CiAgICBmb250LXNpemU6IDAuNzJyZW0gIWltcG9ydGFudDsKICAgIG9wYWNpdHk6IDAuNzQgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci1jYXJkLW1ldGFbZGF0YS1tanIta2luZD0id29ya2Zsb3ciXSAubWpyLWNhcmQtbWV0YS1yb3cgLm1qci1tZXRhLXdvcmtmbG93LXRhc2ssCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItY2FyZC1tZXRhW2RhdGEtbWpyLWtpbmQ9IndvcmtmbG93Il0gLm1qci1jYXJkLW1ldGEtcm93IC5tanItbWV0YS13b3JrZmxvdy10YXNrIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkIC5tanItd29ya2Zsb3ctbWlzc2luZy1jaGlwLAoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZCAubWpyLXdvcmtmbG93LW1pc3NpbmctY2hpcCwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmQgLm1qci1tZXRhLXdvcmtmbG93LW1pc3NpbmcsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkIC5tanItbWV0YS13b3JrZmxvdy1taXNzaW5nIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAxOTAsIDY2LCAwLjI4KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjM2LCAxODAsIDAuOTgpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDIwNiwgMTAxLCAwLjQ1KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQgLm1qci1ncmlkLWdyb3VwLXNlcGFyYXRvciB7CiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICBhcHBlYXJhbmNlOiBub25lOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICB3aWR0aDogMTAwJTsKICAgIG1pbi1oZWlnaHQ6IDMwcHg7CiAgICBtYXJnaW46IDAgMCA4cHg7CiAgICBwYWRkaW5nOiA1cHggOXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSh2YXIoLS1tanItd29ya2Zsb3ctZ3JvdXAtYWNjZW50LXJnYiwgOTUsIDE3OSwgMjU1KSwgMC40Mik7CiAgICBib3JkZXItcmFkaXVzOiA3cHg7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgKICAgICAgICAgICAgMTM1ZGVnLAogICAgICAgICAgICByZ2JhKHZhcigtLW1qci13b3JrZmxvdy1ncm91cC1hY2NlbnQtcmdiLCA5NSwgMTc5LCAyNTUpLCAwLjIyKSwKICAgICAgICAgICAgcmdiYSh2YXIoLS1tanItd29ya2Zsb3ctZ3JvdXAtYWNjZW50LXJnYiwgOTUsIDE3OSwgMjU1KSwgMC4wOCkKICAgICAgICApLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA3OCUsIHRyYW5zcGFyZW50KTsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2ZmZikgOTIlLCB0cmFuc3BhcmVudCk7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmb250OiBpbmhlcml0OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZ3JpZCAubWpyLWdyaWQtZ3JvdXAtc2VwYXJhdG9yOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSh2YXIoLS1tanItd29ya2Zsb3ctZ3JvdXAtYWNjZW50LXJnYiwgOTUsIDE3OSwgMjU1KSwgMC42Nik7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgKICAgICAgICAgICAgMTM1ZGVnLAogICAgICAgICAgICByZ2JhKHZhcigtLW1qci13b3JrZmxvdy1ncm91cC1hY2NlbnQtcmdiLCA5NSwgMTc5LCAyNTUpLCAwLjMpLAogICAgICAgICAgICByZ2JhKHZhcigtLW1qci13b3JrZmxvdy1ncm91cC1hY2NlbnQtcmdiLCA5NSwgMTc5LCAyNTUpLCAwLjEyKQogICAgICAgICksCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDg0JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZ3JpZCAubWpyLWdyaWQtZ3JvdXAtc2VwYXJhdG9yOmZvY3VzLXZpc2libGUgewogICAgb3V0bGluZTogMnB4IHNvbGlkIHJnYmEodmFyKC0tbWpyLXdvcmtmbG93LWdyb3VwLWFjY2VudC1yZ2IsIDk1LCAxNzksIDI1NSksIDAuNTUpOwogICAgb3V0bGluZS1vZmZzZXQ6IDJweDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQgLm1qci1ncmlkLWdyb3VwLXNlcGFyYXRvci0tYWNjZW50LTAgewogICAgLS1tanItd29ya2Zsb3ctZ3JvdXAtYWNjZW50LXJnYjogOTUsIDE3OSwgMjU1Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZ3JpZCAubWpyLWdyaWQtZ3JvdXAtc2VwYXJhdG9yLS1hY2NlbnQtMSB7CiAgICAtLW1qci13b3JrZmxvdy1ncm91cC1hY2NlbnQtcmdiOiA1NSwgMjExLCAxNTY7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkIC5tanItZ3JpZC1ncm91cC1zZXBhcmF0b3ItLWFjY2VudC0yIHsKICAgIC0tbWpyLXdvcmtmbG93LWdyb3VwLWFjY2VudC1yZ2I6IDI0NiwgMTc3LCA3NTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQgLm1qci1ncmlkLWdyb3VwLXNlcGFyYXRvci0tYWNjZW50LTMgewogICAgLS1tanItd29ya2Zsb3ctZ3JvdXAtYWNjZW50LXJnYjogMjM4LCAxMDQsIDEzNjsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQgLm1qci1ncmlkLWdyb3VwLXNlcGFyYXRvci0tYWNjZW50LTQgewogICAgLS1tanItd29ya2Zsb3ctZ3JvdXAtYWNjZW50LXJnYjogMTU3LCAxMzIsIDIzODsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQgLm1qci1ncmlkLWdyb3VwLXNlcGFyYXRvci0tYWNjZW50LTUgewogICAgLS1tanItd29ya2Zsb3ctZ3JvdXAtYWNjZW50LXJnYjogNzEsIDE5NywgMjIyOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZ3JpZCAubWpyLWdyaWQtZ3JvdXAtc2VwYXJhdG9yLS1hY2NlbnQtNiB7CiAgICAtLW1qci13b3JrZmxvdy1ncm91cC1hY2NlbnQtcmdiOiAxNDksIDIwNywgODE7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkIC5tanItZ3JpZC1ncm91cC1zZXBhcmF0b3ItLWFjY2VudC03IHsKICAgIC0tbWpyLXdvcmtmbG93LWdyb3VwLWFjY2VudC1yZ2I6IDI0MiwgMTMwLCA3ODsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQgLm1qci1ncmlkLWdyb3VwLXNlcGFyYXRvci1jaGV2cm9uIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZmxleDogMCAwIGF1dG87CiAgICB3aWR0aDogMThweDsKICAgIGhlaWdodDogMThweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgY29sb3I6IHJnYih2YXIoLS1tanItd29ya2Zsb3ctZ3JvdXAtYWNjZW50LXJnYiwgOTUsIDE3OSwgMjU1KSk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLW1qci13b3JrZmxvdy1ncm91cC1hY2NlbnQtcmdiLCA5NSwgMTc5LCAyNTUpLCAwLjE0KTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQgLm1qci1ncmlkLWdyb3VwLXNlcGFyYXRvci1jaGV2cm9uID4gLnBpIHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZ3JpZCAubWpyLWdyaWQtZ3JvdXAtc2VwYXJhdG9yLXRpdGxlIHsKICAgIG1pbi13aWR0aDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LXdlaWdodDogODAwOwp9CgoubWpyLXdvcmtmbG93LXBpY2tlci1iYWNrZHJvcCB7CiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICBpbnNldDogMDsKICAgIHotaW5kZXg6IDk5OTk5OTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBwYWRkaW5nOiAyNHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjU4KTsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWRpYWxvZyB7CiAgICB3aWR0aDogbWluKDkyMHB4LCA5NnZ3KTsKICAgIG1heC1oZWlnaHQ6IG1pbig3NjBweCwgOTJ2aCk7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpOwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wLCAjMTExNDE4KSA5NiUsICMwMDApOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNmNWY1ZjUpOwogICAgYm94LXNoYWRvdzogMCAxOHB4IDYwcHggcmdiYSgwLCAwLCAwLCAwLjQ4KTsKfQoKLm1qci13b3JrZmxvdy1pbmZvLWRpYWxvZyB7CiAgICB3aWR0aDogbWluKDU2MHB4LCA5NnZ3KTsKfQoKLm1qci13b3JrZmxvdy1pbmZvLWZvcm0gewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIG1pbm1heCgwLCAxZnIpKTsKICAgIGdhcDogMTJweDsKICAgIHBhZGRpbmc6IDE0cHggMThweCA0cHg7Cn0KCi5tanItd29ya2Zsb3ctaW5mby1mb3JtIGxhYmVsIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiA2cHg7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItd29ya2Zsb3ctaW5mby1mb3JtIGxhYmVsLmlzLXdpZGUgewogICAgZ3JpZC1jb2x1bW46IDEgLyAtMTsKfQoKLm1qci13b3JrZmxvdy1pbmZvLWZvcm0gc3BhbiB7CiAgICBjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjY0KTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA3NTA7CiAgICBsZXR0ZXItc3BhY2luZzogLjA0ZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwp9CgoubWpyLXdvcmtmbG93LWluZm8tZm9ybSBpbnB1dCwKLm1qci13b3JrZmxvdy1pbmZvLWZvcm0gc2VsZWN0LAoubWpyLXdvcmtmbG93LWluZm8tZm9ybSB0ZXh0YXJlYSB7CiAgICB3aWR0aDogMTAwJTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMik7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMjYpOwogICAgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC45Mik7CiAgICBmb250OiBpbmhlcml0OwogICAgZm9udC1zaXplOiAxM3B4OwogICAgcGFkZGluZzogOXB4IDEwcHg7CiAgICBvdXRsaW5lOiBub25lOwp9CgoubWpyLXdvcmtmbG93LWluZm8tZm9ybSB0ZXh0YXJlYSB7CiAgICByZXNpemU6IHZlcnRpY2FsOwogICAgbWluLWhlaWdodDogOTZweDsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItaGVhZGVyLAoubWpyLXdvcmtmbG93LXBpY2tlci1mb290ZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBnYXA6IDEycHg7CiAgICBwYWRkaW5nOiAxMnB4IDE0cHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwp9CgoubWpyLXdvcmtmbG93LXBpY2tlci1mb290ZXIgewogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICBib3JkZXItYm90dG9tOiAwOwp9CgoubWpyLXdvcmtmbG93LXBpY2tlci10aXRsZSB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDlweDsKICAgIG1pbi13aWR0aDogMDsKICAgIGZvbnQtc2l6ZTogMTVweDsKICAgIGZvbnQtd2VpZ2h0OiA4MDA7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWljb24tYnRuLAoubWpyLXdvcmtmbG93LXBpY2tlci1idG4gewogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xOCk7CiAgICBib3JkZXItcmFkaXVzOiA3cHg7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMiwgIzI1MjgyZCkgODglLCB0cmFuc3BhcmVudCk7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2Y1ZjVmNSk7CiAgICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWljb24tYnRuIHsKICAgIHdpZHRoOiAzMnB4OwogICAgaGVpZ2h0OiAzMnB4Owp9CgoubWpyLXdvcmtmbG93LXBpY2tlci1idG4gewogICAgbWluLWhlaWdodDogMzJweDsKICAgIHBhZGRpbmc6IDAgMTJweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWJ0bi5pcy1wcmltYXJ5IHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSg3NywgMTcxLCAyNDcsIDAuNyk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDc3LCAxNzEsIDI0NywgMC4yMik7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWJ0bjpkaXNhYmxlZCB7CiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgb3BhY2l0eTogMC40NTsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItc291cmNlIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBnYXA6IDhweDsKICAgIHBhZGRpbmc6IDhweCAxNHB4OwogICAgY29sb3I6IHZhcigtLW1qci1tdXRlZCwgI2FlYjNiZCk7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItc291cmNlIHN0cm9uZyB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNmNWY1ZjUpOwp9CgoubWpyLXdvcmtmbG93LXBpY2tlci10b29sYmFyIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgxODBweCwgMWZyKSByZXBlYXQoMywgbWlubWF4KDExMHB4LCAxNTBweCkpOwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nOiAxMnB4IDE0cHg7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLWRpYWxvZy5pcy1hc3NldC1tb2RlIC5tanItd29ya2Zsb3ctcGlja2VyLXRvb2xiYXIgewogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMTgwcHgsIDFmcik7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLXNlYXJjaCwKLm1qci13b3JrZmxvdy1waWNrZXItdG9vbGJhciBzZWxlY3QgewogICAgbWluLWhlaWdodDogMzRweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCk7CiAgICBib3JkZXItcmFkaXVzOiA3cHg7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSwgIzE3MWExZikgOTIlLCAjMDAwKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZjVmNWY1KTsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItc2VhcmNoIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nOiAwIDEwcHg7Cn0KCi5tanItd29ya2Zsb3ctcGlja2VyLXNlYXJjaCBpbnB1dCB7CiAgICB3aWR0aDogMTAwJTsKICAgIG1pbi13aWR0aDogMDsKICAgIGJvcmRlcjogMDsKICAgIG91dGxpbmU6IDA7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGNvbG9yOiBpbmhlcml0Owp9CgoubWpyLXdvcmtmbG93LXBpY2tlci10b29sYmFyIHNlbGVjdCB7CiAgICBwYWRkaW5nOiAwIDhweDsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItYm9keSB7CiAgICBmbGV4OiAxIDEgYXV0bzsKICAgIG1pbi1oZWlnaHQ6IDI2MHB4OwogICAgb3ZlcmZsb3c6IGF1dG87CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTgwcHgsIDFmcikpOwogICAgYWxpZ24tY29udGVudDogc3RhcnQ7CiAgICBnYXA6IDEwcHg7CiAgICBwYWRkaW5nOiAwIDE0cHggMTRweDsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItY2FyZCB7CiAgICBhcHBlYXJhbmNlOiBub25lOwogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogNjhweCBtaW5tYXgoMCwgMWZyKTsKICAgIGdhcDogMTBweDsKICAgIG1pbi1oZWlnaHQ6IDg0cHg7CiAgICBwYWRkaW5nOiA4cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEsICMxNzFhMWYpIDkyJSwgdHJhbnNwYXJlbnQpOwogICAgY29sb3I6IGluaGVyaXQ7CiAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgY3Vyc29yOiBwb2ludGVyOwp9CgoubWpyLXdvcmtmbG93LXBpY2tlci1kaWFsb2cuaXMtYXNzZXQtbW9kZSAubWpyLXdvcmtmbG93LXBpY2tlci1jYXJkIHsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogNzZweCBtaW5tYXgoMCwgMWZyKTsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItY2FyZDpob3ZlciwKLm1qci13b3JrZmxvdy1waWNrZXItY2FyZC5pcy1zZWxlY3RlZCB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoNzcsIDE3MSwgMjQ3LCAwLjcyKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzcsIDE3MSwgMjQ3LCAwLjEyKTsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItdGh1bWIgewogICAgd2lkdGg6IDY4cHg7CiAgICBhc3BlY3QtcmF0aW86IDEgLyAxOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwp9CgoubWpyLXdvcmtmbG93LXBpY2tlci10aHVtYiBpbWcgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBvYmplY3QtZml0OiBjb3ZlcjsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItY2FyZC1pbmZvIHsKICAgIG1pbi13aWR0aDogMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDRweDsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItY2FyZC1pbmZvIHN0cm9uZywKLm1qci13b3JrZmxvdy1waWNrZXItY2FyZC1pbmZvIHNwYW4sCi5tanItd29ya2Zsb3ctcGlja2VyLWNhcmQtaW5mbyBzbWFsbCB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoubWpyLXdvcmtmbG93LXBpY2tlci1jYXJkLWluZm8gc3Ryb25nIHsKICAgIGZvbnQtc2l6ZTogMTNweDsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItY2FyZC1pbmZvIHNwYW4sCi5tanItd29ya2Zsb3ctcGlja2VyLWNhcmQtaW5mbyBzbWFsbCB7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkLCAjYWViM2JkKTsKICAgIGZvbnQtc2l6ZTogMTFweDsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItZW1wdHkgewogICAgZ3JpZC1jb2x1bW46IDEgLyAtMTsKICAgIHBhZGRpbmc6IDMycHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkLCAjYWViM2JkKTsKfQoKLm1qci13b3JrZmxvdy1waWNrZXItZW1wdHkuaXMtZXJyb3IgewogICAgY29sb3I6ICNmZmI0YjQ7Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiA3MjBweCkgewogICAgLm1qci13b3JrZmxvdy1waWNrZXItYmFja2Ryb3AgewogICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICB9CgogICAgLm1qci13b3JrZmxvdy1waWNrZXItdG9vbGJhciB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOwogICAgfQoKICAgIC5tanItd29ya2Zsb3ctcGlja2VyLXNlYXJjaCB7CiAgICAgICAgZ3JpZC1jb2x1bW46IDEgLyAtMTsKICAgIH0KfQoKLyogS2VlcCBnZW5lcmF0aW9uLXRpbWUgYmFkZ2UgcGlubmVkIHRvIHRoZSB0aHVtYm5haWwgY29ybmVyIGFjcm9zcyBncmlkL2ZlZWQgdmFyaWFudHMuICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci10aHVtYiA+IC5tanItZ2VudGltZS1iYWRnZSwKLm1qci1ib3R0b20tZmVlZCAubWpyLXRodW1iID4gLm1qci1nZW50aW1lLWJhZGdlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50OwogICAgcmlnaHQ6IDZweCAhaW1wb3J0YW50OwogICAgYm90dG9tOiA2cHggIWltcG9ydGFudDsKICAgIGxlZnQ6IGF1dG8gIWltcG9ydGFudDsKICAgIHRvcDogYXV0byAhaW1wb3J0YW50OwogICAgei1pbmRleDogMTAgIWltcG9ydGFudDsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDJweCA2cHggIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IDRweCAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjU1KSAhaW1wb3J0YW50OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSAhaW1wb3J0YW50OwogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDgwMCAhaW1wb3J0YW50OwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDE1ZW07CiAgICBsaW5lLWhlaWdodDogMS4xOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBib3gtc2hhZG93OiAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjMpOwogICAgdGV4dC1zaGFkb3c6CiAgICAgICAgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC45KSwKICAgICAgICAwIDAgMTBweCBjb2xvci1taXgoaW4gc3JnYiwgY3VycmVudENvbG9yIDM1JSwgdHJhbnNwYXJlbnQpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDJweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cigycHgpOwp9CgovKiBLZWVwIHJhdGluZy90YWdzIGJhZGdlcyBhbmNob3JlZC4gRG8gbm90IGZvcmNlIGRpc3BsYXkgaGVyZSBzbyBncmlkIHZpc2liaWxpdHkgdG9nZ2xlcyBzdGlsbCBjb250cm9sIHNob3cvaGlkZS4gKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXRodW1iID4gLm1qci1yYXRpbmctYmFkZ2UsCi5tanItYm90dG9tLWZlZWQgLm1qci10aHVtYiA+IC5tanItcmF0aW5nLWJhZGdlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50OwogICAgdG9wOiA2cHggIWltcG9ydGFudDsKICAgIHJpZ2h0OiA2cHggIWltcG9ydGFudDsKICAgIGxlZnQ6IGF1dG8gIWltcG9ydGFudDsKICAgIGJvdHRvbTogYXV0byAhaW1wb3J0YW50OwogICAgei1pbmRleDogMTAgIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC41NSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOwogICAgcGFkZGluZzogMnB4IDZweDsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGxldHRlci1zcGFjaW5nOiAxcHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgYm94LXNoYWRvdzogMCA2cHggMThweCByZ2JhKDAsIDAsIDAsIDAuMjUpOwogICAgdGV4dC1zaGFkb3c6IDAgMnB4IDZweCByZ2JhKDAsIDAsIDAsIDAuNik7CiAgICBhbmltYXRpb246IG1qci1mYWRlLWluIDAuMnMgZWFzZS1vdXQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci10aHVtYiA+IC5tanItdGFncy1iYWRnZSwKLm1qci1ib3R0b20tZmVlZCAubWpyLXRodW1iID4gLm1qci10YWdzLWJhZGdlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50OwogICAgbGVmdDogNnB4ICFpbXBvcnRhbnQ7CiAgICBib3R0b206IDZweCAhaW1wb3J0YW50OwogICAgcmlnaHQ6IGF1dG8gIWltcG9ydGFudDsKICAgIHRvcDogYXV0byAhaW1wb3J0YW50OwogICAgei1pbmRleDogMTAgIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDNweCA2cHg7CiAgICBmb250LXNpemU6IDlweDsKICAgIG1heC13aWR0aDogY2FsYygxMDAlIC0gNTZweCk7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOCk7CiAgICBib3gtc2hhZG93OiAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjMpOwogICAgYW5pbWF0aW9uOiBtanItZmFkZS1pbiAwLjJzIGVhc2Utb3V0Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItdGh1bWItcGxheSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBwbGFjZS1pdGVtczogY2VudGVyOwogICAgZm9udC1zaXplOiAyOHB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKICAgIHRleHQtc2hhZG93OiAwIDAgMTBweCByZ2JhKDAsIDAsIDAsIDAuNyk7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMTIwbXMgZWFzZTsKfQoKLyogLS0tIEhvdmVyIGluZm8gb3ZlcmxheSAocG9zaXRpdmUgcHJvbXB0ICsgZ2VuIHRpbWUpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIFNsaWRlcyB1cCBmcm9tIHRoZSBib3R0b20gb2YgLm1qci10aHVtYiBvbiBjYXJkIGhvdmVyLgogICBwb2ludGVyLWV2ZW50czogbm9uZSAgLT4gbmV2ZXIgYmxvY2tzIHZpZGVvIG1vdXNlZW50ZXIgLyBwbGF5LW9uLWhvdmVyLgogICB6LWluZGV4OiAyICAgICAgICAgICAtPiBzaXRzIGFib3ZlIHRoZSB0aHVtYm5haWwgaW1hZ2UsIGJlbG93IHRoZSBwbGF5IGljb24uCiAgIENvbnRyb2xsZWQgYnkgdGhlIC5tanItc2hvdy1ob3Zlci1pbmZvIGNsYXNzIG9uIHRoZSBncmlkIGNvbnRhaW5lciwgd2hpY2gKICAgaXMgdG9nZ2xlZCB2aWEgdGhlICJTaG93IHByb21wdCBvbiBob3ZlciIgc2V0dGluZy4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1jYXJkLWhvdmVyLWluZm8gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgYm90dG9tOiAwOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgcGFkZGluZzogMjJweCA4cHggN3B4OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgdHJhbnNwYXJlbnQgMCUsIHJnYmEoMCwgMCwgMCwgMC43OCkgMTAwJSk7CiAgICBjb2xvcjogI2ZmZjsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIG9wYWNpdHk6IDA7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNXB4KTsKICAgIHRyYW5zaXRpb246CiAgICAgICAgb3BhY2l0eSAxNTBtcyBlYXNlLAogICAgICAgIHRyYW5zZm9ybSAxNTBtcyBlYXNlOwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDNweDsKICAgIHotaW5kZXg6IDI7Cn0KLyogT25seSByZXZlYWwgb24gaG92ZXIgd2hlbiB0aGUgc2V0dGluZyBpcyBlbmFibGVkIChjbGFzcyBvbiBncmlkIGNvbnRhaW5lcikgKi8KLm1qci1ncmlkLm1qci1zaG93LWhvdmVyLWluZm8gLm1qci1jYXJkOmhvdmVyIC5tanItY2FyZC1ob3Zlci1pbmZvIHsKICAgIG9wYWNpdHk6IDE7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7Cn0KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQtaG92ZXItaW5mbyAubWpyLWhvdmVyLXByb21wdCB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgZGlzcGxheTogLXdlYmtpdC1ib3g7CiAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDI7CiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsOwogICAgd29yZC1icmVhazogYnJlYWstd29yZDsKICAgIG9wYWNpdHk6IDAuOTsKICAgIGZvbnQtc2l6ZTogOS41cHg7Cn0KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQtaG92ZXItaW5mbyAubWpyLWhvdmVyLWdlbnRpbWUgewogICAgY29sb3I6IHJnYmEoMjU1LCAyMTAsIDEyMCwgMC45NSk7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgZm9udC1zaXplOiA5cHg7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMmVtOwp9CkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7CiAgICAubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZC1ob3Zlci1pbmZvIHsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDBtczsKICAgICAgICB0cmFuc2Zvcm06IG5vbmU7CiAgICB9Cn0KCi8qIC0tLSBDYXJkIGRldGFpbHMgcGFuZWwgc2hvdy9oaWRlIHZpYSBncmlkIGNvbnRhaW5lciBjbGFzcyAtLS0tLS0tLS0tLS0tLS0tCiAgIC5tanItc2hvdy1kZXRhaWxzIGlzIHRvZ2dsZWQgYnkgYXBwbHlHcmlkU2V0dGluZ3NDbGFzc2VzKCkgd2hlbiB0aGUKICAgIlNob3cgbWV0YWRhdGEgcGFuZWwiIHNldHRpbmcgY2hhbmdlcy4gIERlZmF1bHQgPSBPRkYg4oaSIHBhbmVsIGhpZGRlbi4KICAgSGlkaW5nIGhlcmUga2VlcHMgYWN0dWFsIHJvdyBoZWlnaHQgPSBlc3RpbWF0ZVJvd0hlaWdodChtZXRhSGVpZ2h0PTApLAogICBwcmV2ZW50aW5nIHRoZSB2aXJ0dWFsaXplciBmcm9tIHJlcG9zaXRpb25pbmcgYWxsIHJvd3Mgb24gbWVhc3VyZQogICAod2hpY2ggd2FzIHRoZSByb290IGNhdXNlIG9mIHRoZSAicmVsb2FkIGltcHJlc3Npb24iIGJsaW5rKS4KICAgTWF0Y2ggdGhlIGJvdHRvbS1mZWVkIHBhdHRlcm4gYXQgLm1qci1ib3R0b20tZmVlZCAubWpyLWNhcmQtaW5mby4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1ncmlkIC5tanItY2FyZC1pbmZvIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWdyaWQubWpyLXNob3ctZGV0YWlscyAubWpyLWNhcmQtaW5mbyB7CiAgICBkaXNwbGF5OiBibG9jazsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQtbWV0YSB7CiAgICBwYWRkaW5nOiA4cHggMTBweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQtZmlsZW5hbWUgewogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgbWluLXdpZHRoOiAwOwogICAgbWFyZ2luLWJvdHRvbTogMnB4Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItY2FyZC1kZXRhaWxzIHsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIG9wYWNpdHk6IDAuODsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWNhcmQtZmlsZW5hbWUtdGV4dCB7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgbWluLXdpZHRoOiAwOwp9CgovKiBSYXRpbmcgJiBUYWdzIEVkaXRvcnMgKi8KQGtleWZyYW1lcyBmYWRlSW4gewogICAgZnJvbSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTRweCk7CiAgICB9CiAgICB0byB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICB9Cn0KLyoqCiAqIEFyY2hpdmVkIENTUyBTdHlsZXMgLSBSYXRpbmcgYW5kIFRhZ3MKICogVGhlc2Ugc3R5bGVzIHdlcmUgcmVtb3ZlZCBmcm9tIHRoZW1lLWNvbWZ5LmNzcwogKi8KCi8qIEFuaW1hdGlvbnMgKi8KQGtleWZyYW1lcyBzbGlkZUluUmlnaHQgewogICAgZnJvbSB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICB9CiAgICB0byB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApOwogICAgICAgIG9wYWNpdHk6IDE7CiAgICB9Cn0KCi8qIFBvcG92ZXJzICovCi5tanItcmF0aW5nLXBvcG92ZXIsCi5tanItdGFncy1wb3BvdmVyIHsKICAgIGFuaW1hdGlvbjogZmFkZUluIDAuMnMgZWFzZTsKfQoKLm1qci1yYXRpbmctcG9wb3ZlciwKLm1qci10YWdzLXBvcG92ZXIgewogICAgYmFja2dyb3VuZDogdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnLCAwLjVyZW0pOwogICAgYm94LXNoYWRvdzogMCAxMnB4IDI4cHggcmdiYSgwLCAwLCAwLCAwLjM1KTsKICAgIHBhZGRpbmc6IDhweDsKfQoKLyogUmF0aW5nIEVkaXRvciAqLwoubWpyLXJhdGluZy1lZGl0b3IgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBwYWRkaW5nOiAycHg7Cn0KCi5tanItcmF0aW5nLXN0YXIgewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIGZvbnQtc2l6ZTogMjBweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHBhZGRpbmc6IDRweCA2cHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIGNvbG9yOiB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKTsKICAgIHRyYW5zaXRpb246CiAgICAgICAgdHJhbnNmb3JtIDEyMG1zIGVhc2UsCiAgICAgICAgYmFja2dyb3VuZC1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlLAogICAgICAgIGNvbG9yIDEyMG1zIGVhc2U7CiAgICBvdXRsaW5lOiBub25lOwp9CgoubWpyLXJhdGluZy1zdGFyOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbWZ5LWFjY2VudCwgIzVmYjNmZikgMzUlLCB0cmFuc3BhcmVudCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29tZnktbWVudS1zZWNvbmRhcnktYmcsICMzMzMpIDY1JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLXJhdGluZy1lZGl0b3IgLm1qci1yYXRpbmctc3Rhcjpob3ZlciB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMikgIWltcG9ydGFudDsKfQoKLm1qci1yYXRpbmctZWRpdG9yIC5tanItcmF0aW5nLXN0YXI6Zm9jdXMtdmlzaWJsZSB7CiAgICBvdXRsaW5lOiAycHggc29saWQgdmFyKC0tZm9jdXMtb3V0bGluZS1jb2xvciwgIzRkYWJmNyk7CiAgICBvdXRsaW5lLW9mZnNldDogMnB4OwogICAgYm9yZGVyLXJhZGl1czogMnB4Owp9CgoubWpyLXJhdGluZy1lZGl0b3IgLm1qci1yYXRpbmctc3RhcjphY3RpdmUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk1KSAhaW1wb3J0YW50Owp9CgovKiBUYWdzIEVkaXRvciAqLwoubWpyLXRhZ3MtZWRpdG9yIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiA4cHg7CiAgICBwYWRkaW5nOiAxMnB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSwgdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSkpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1zbSk7CiAgICBib3gtc2hhZG93OiAwIDEycHggMjhweCByZ2JhKDAsIDAsIDAsIDAuNDUpOwogICAgbWluLXdpZHRoOiAyNTBweDsKICAgIG1heC13aWR0aDogbWluKDM1MHB4LCBjYWxjKDEwMHZ3IC0gMjBweCkpOwogICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7Cn0KCi5tanItdGFncy1lZGl0b3IuaXMtZGlzYWJsZWQgewogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBvcGFjaXR5OiAwLjc7Cn0KCi5tanItdGFncy1kaXNwbGF5IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICBnYXA6IDZweDsKICAgIG1pbi1oZWlnaHQ6IDMycHg7Cn0KCi5tanItdGFncy1lbXB0eSB7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkKTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQoKLm1qci10YWctY2hpcCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDRweDsKICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXRhZy1jb2xvcikgMjQlLCB0cmFuc3BhcmVudCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXRhZy1jb2xvcikgNDAlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHZhcigtLW1qci10YWctY29sb3IpOwogICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKfQoKLm1qci10YWctY2hpcC1yZW1vdmUgewogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICBib3JkZXI6IDA7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgYm94LXNoYWRvdzogbm9uZTsKICAgIGNvbG9yOiBpbmhlcml0OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMDsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgb3BhY2l0eTogMC43Owp9CgoubWpyLXRhZy1jaGlwLXJlbW92ZTpkaXNhYmxlZCB7CiAgICBjdXJzb3I6IGRlZmF1bHQ7Cn0KCi5tanItdGFncy1pbnB1dC13cmFwIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLm1qci10YWctaW5wdXQgewogICAgd2lkdGg6IDEwMCU7CiAgICBwYWRkaW5nOiA2cHggOHB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDc1JSwgdHJhbnNwYXJlbnQpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZyk7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBvdXRsaW5lOiBub25lOwp9CgoubWpyLXRhZy1pbnB1dDpmb2N1cyB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODglLCB0cmFuc3BhcmVudCkgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tbWpyLWFjY2VudCkgIWltcG9ydGFudDsKfQoKLm1qci10YWctY2hpcDpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXRhZy1jb2xvcikgMzQlLCB0cmFuc3BhcmVudCkgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDYwJSwgdmFyKC0tbWpyLWJvcmRlcikpICFpbXBvcnRhbnQ7Cn0KCi5tanItdGFncy1kcm9wZG93biB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDEwMCU7CiAgICBsZWZ0OiAwOwogICAgcmlnaHQ6IDA7CiAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xLCB2YXIoLS1jb21meS1tZW51LWJnLCAjMmEyYTJhKSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIG1heC1oZWlnaHQ6IDE1MHB4OwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIHotaW5kZXg6IDEwMDA7Cn0KCi5tanItdGFncy1kcm9wZG93biBbZGF0YS1wYy1zZWN0aW9uPSJsaXN0Il0gewogICAgbGlzdC1zdHlsZTogbm9uZTsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7Cn0KCi5tanItdGFncy1kcm9wZG93biBbZGF0YS1wYy1zZWN0aW9uPSJvcHRpb24iXSB7CiAgICBsaXN0LXN0eWxlOiBub25lOwp9CgoubWpyLXRhZy1zdWdnZXN0aW9uIHsKICAgIHBhZGRpbmc6IDZweCA4cHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGNvbG9yOiB2YXIoLS1tanItdGFnLWNvbG9yKTsKICAgIGZvbnQtc2l6ZTogMTJweDsKfQoKLm1qci10YWctc3VnZ2VzdGlvbi5pcy1hY3RpdmUsCi5tanItdGFnLXN1Z2dlc3Rpb246aG92ZXIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci10YWctY29sb3IpIDI4JSwgdHJhbnNwYXJlbnQpICFpbXBvcnRhbnQ7Cn0KCi8qIEJhZGdlcyBJbnRlcmFjdGl2ZSAqLwoubWpyLXJhdGluZy1iYWRnZSwKLm1qci10YWdzLWJhZGdlIHsKICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7Cn0KCi5tanItcmF0aW5nLWJhZGdlIHsKICAgIGNvbG9yOiB2YXIoLS1tanItcmF0aW5nLWNvbG9yKSAhaW1wb3J0YW50Owp9CgoubWpyLXRhZ3MtYmFkZ2UgewogICAgY29sb3I6IHZhcigtLW1qci10YWctY29sb3IpICFpbXBvcnRhbnQ7Cn0KCi5tanItcmF0aW5nLWJhZGdlOmhvdmVyLAoubWpyLXRhZ3MtYmFkZ2U6aG92ZXIgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KTsKICAgIGJveC1zaGFkb3c6IDAgNHB4IDhweCByZ2JhKDAsIDAsIDAsIDAuNSk7Cn0KCi8qIFNjcm9sbGJhciBmb3IgdGFncyBkcm9wZG93biAqLwoubWpyLXRhZ3MtZHJvcGRvd246Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIHdpZHRoOiA2cHg7Cn0KCi5tanItdGFncy1kcm9wZG93bjo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDY1JSwgdHJhbnNwYXJlbnQpOwogICAgYm9yZGVyLXJhZGl1czogM3B4Owp9CgoubWpyLXRhZ3MtZHJvcGRvd246Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItdGFnLWNvbG9yKSA0OCUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKfQoKLm1qci10YWdzLWRyb3Bkb3duOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXRhZy1jb2xvcikgNjUlLCB2YXIoLS1tanItYm9yZGVyKSk7Cn0KCi8qIFNpZGViYXIgKGNhbiBiZSBsZWZ0IG9yIHJpZ2h0KSAqLwoubWpyLXNpZGViYXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgei1pbmRleDogMzsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsKfQoKLm1qci13b3JrZmxvdy10cmVlLXdyYXAgewogICAgbWFyZ2luOiAwIDAgMTJweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA4MiUsIHRyYW5zcGFyZW50KTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLW1kLCA4cHgpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDcyJSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLXdvcmtmbG93LXRyZWUgewogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNlYWVhZWEpOwogICAgZm9udC1zaXplOiAxMnB4Owp9CgoubWpyLXdvcmtmbG93LXRyZWUtc2Nyb2xsIHsKICAgIG92ZXJmbG93OiBhdXRvOwogICAgcGFkZGluZzogMnB4IDRweCA2cHg7Cn0KCi5tanItd29ya2Zsb3ctdHJlZS1saXN0IHsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOiAwOwp9CgoubWpyLXdvcmtmbG93LXRyZWUtbm9kZS1jb250ZW50IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICBtaW4taGVpZ2h0OiAyOHB4OwogICAgcGFkZGluZzogNHB4IDZweDsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLXNtLCA2cHgpOwp9CgoubWpyLXdvcmtmbG93LXRyZWUtbm9kZS1jb250ZW50OmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA1OCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci13b3JrZmxvdy10cmVlLXRvZ2dsZSB7CiAgICB3aWR0aDogMTRweDsKICAgIGhlaWdodDogMjBweDsKICAgIHBhZGRpbmc6IDA7CiAgICBib3JkZXI6IDA7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42NCkpOwp9CgoubWpyLXdvcmtmbG93LXRyZWUtdG9nZ2xlW2RhdGEtcC1sZWFmPSJ0cnVlIl0gewogICAgdmlzaWJpbGl0eTogaGlkZGVuOwp9CgoubWpyLXdvcmtmbG93LXRyZWUtaWNvbiB7CiAgICB3aWR0aDogOHB4OwogICAgZmxleDogMCAwIDhweDsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNzAlLCB2YXIoLS1jb250ZW50LWZnKSk7CiAgICBmb250LXNpemU6IDdweDsKfQoKLm1qci13b3JrZmxvdy10cmVlLWxhYmVsIHsKICAgIG1pbi13aWR0aDogMDsKICAgIGZsZXg6IDEgMSBhdXRvOwp9CgoubWpyLXdvcmtmbG93LXRyZWUtbm9kZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXdvcmtmbG93LXRyZWUtbm9kZS1uYW1lIHsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5tanItd29ya2Zsb3ctdHJlZS1ub2RlLXR5cGUgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItbXV0ZWQpIDc1JSwgdmFyKC0tY29udGVudC1mZykpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci1zaWRlYmFyLmlzLW9wZW4gewogICAgLyogQm9yZGVyIGlzIHNldCBkeW5hbWljYWxseSBiYXNlZCBvbiBwb3NpdGlvbiAqLwp9CgoubWpyLXNpZGViYXIgLm1qci1zaWRlYmFyLWhlYWRlciB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0yLCAjMzMzKTsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKfQoKLm1qci1zaWRlYmFyIC5tanItc2lkZWJhci1jb250ZW50IHsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEsICMyYTJhMmEpOwp9CgoubWpyLXNpZGViYXIgLm1qci1zaWRlYmFyLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIHdpZHRoOiA4cHg7Cn0KCi5tanItc2lkZWJhciAubWpyLXNpZGViYXItY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjMpOwp9CgoubWpyLXNpZGViYXIgLm1qci1zaWRlYmFyLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKfQoKLm1qci1zaWRlYmFyIC5tanItc2lkZWJhci1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7Cn0KCi8qIEN1c3RvbSBSb290cyBQb3BvdmVyIFN0eWxpbmcgKi8KLm1qci1jdXN0b20tcG9wb3ZlciB7CiAgICBtaW4td2lkdGg6IDMwMHB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSwgdmFyKC0tY29tZnktbWVudS1iZywgIzJhMmEyYSkpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgdmFyKC0tYm9yZGVyLWNvbG9yLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKSk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcsIDAuNXJlbSk7CiAgICBib3gtc2hhZG93OiAwIDEycHggMjhweCByZ2JhKDAsIDAsIDAsIDAuMzUpOwogICAgei1pbmRleDogdmFyKC0tbWpyLXBvcG92ZXItei1pbmRleCk7CiAgICBwYWRkaW5nOiAxMnB4Owp9CgoubWpyLWN1c3RvbS1wb3BvdmVyIC5tanItcG9wb3Zlci1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgZmxleC13cmFwOiB3cmFwOwp9CgoubWpyLWN1c3RvbS1wb3BvdmVyIC5tanItcG9wb3Zlci1yb3c6bGFzdC1jaGlsZCB7CiAgICBtYXJnaW4tYm90dG9tOiAwOwp9CgoubWpyLWN1c3RvbS1wb3BvdmVyIC5tanItcG9wb3Zlci1sYWJlbCB7CiAgICB3aWR0aDogNjBweDsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHZhcigtLWRlc2NyaXAtdGV4dCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjY1KSkpOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDUwMDsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLXNlbGVjdCB7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWN1c3RvbS1wb3BvdmVyIC5tanItYnRuIHsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDA7CiAgICBtYXJnaW4tcmlnaHQ6IDVweDsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLWJ0bjpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1yaWdodDogMDsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLWJ0bi5tanItcHJpbWFyeSB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMTglLCB2YXIoLS1tanItc3VyZmFjZS0yKSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA2MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKfQoKLm1qci1jdXN0b20tcG9wb3ZlciAubWpyLWJ0bi5tanItcHJpbWFyeTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMjUlLCB2YXIoLS1tanItc3VyZmFjZS0yKSk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA4MCUsIHZhcigtLW1qci1ib3JkZXIpKTsKfQoKLm1qci1zaWRlYmFyIC5tanItc2lkZWJhci1zZWN0aW9uIHsKICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7Cn0KCi5tanItc2lkZWJhciAubWpyLXNpZGViYXItc2VjdGlvbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMykgIWltcG9ydGFudDsKfQoKLyogSW5saW5lIFNpZGViYXIgKHdpZHRoLWJhc2VkIHRyYW5zaXRpb25zIGxpa2UgYXJjaGl2ZWQgdmVyc2lvbikgKi8KLm1qci1pbmxpbmUtc2lkZWJhciB7CiAgICB3aWR0aDogMDsKICAgIG1pbi13aWR0aDogMDsKICAgIG1heC13aWR0aDogNDgwcHg7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSwgIzJhMmEyYSk7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIHRyYW5zaXRpb246CiAgICAgICAgd2lkdGggMC4zcyBlYXNlLAogICAgICAgIG1pbi13aWR0aCAwLjNzIGVhc2U7Cn0KCi5tanItaW5saW5lLXNpZGViYXIuaXMtb3BlbiB7CiAgICB3aWR0aDogNDAwcHg7CiAgICBtaW4td2lkdGg6IDI2MHB4Owp9CgovKiBTcGFjZSBiZXR3ZWVuIHNpZGViYXIgYW5kIGdyaWQgKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFtLWJyb3dzZSB7CiAgICBnYXA6IDA7Cn0KCi8qIEJvcmRlciBiYXNlZCBvbiBwb3NpdGlvbiAqLwoubWpyLWlubGluZS1zaWRlYmFyW2RhdGEtcG9zaXRpb249ImxlZnQiXSB7CiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKfQoKLm1qci1pbmxpbmUtc2lkZWJhcltkYXRhLXBvc2l0aW9uPSJyaWdodCJdIHsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7Cn0KCi8qIFNpZGViYXIgcGxhY2Vob2xkZXIgKi8KLm1qci1zaWRlYmFyLXBsYWNlaG9sZGVyIHsKICAgIHBhZGRpbmc6IDIwcHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKTsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KCi8qID09PT09PT09PT0gVmlld2VyIENvbXBvbmVudCA9PT09PT09PT09ICovCi5tanItdmlld2VyLW92ZXJsYXkgewogICAgcG9zaXRpb246IGZpeGVkOwogICAgdG9wOiAwOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgYm90dG9tOiAwOwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjk1KTsKICAgIC8qIFNpdCBhYm92ZSBNRlYgKDEwMDAwKSBzbyB0aGUgZnVsbCB2aWV3ZXIgYWx3YXlzIGNvdmVycyB0aGUgZmxvYXRpbmcgcGFuZWwgKi8KICAgIHotaW5kZXg6IDEwMDAxOwogICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICBkaXNwbGF5OiBub25lOwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKfQovKiBGYWRlLWluOiBhbmltYXRpb24gcmUtdHJpZ2dlcnMgZWFjaCB0aW1lIEpTIHN3aXRjaGVzIGRpc3BsYXkgYmFjayB0byBmbGV4ICovCi5tanItdmlld2VyLW92ZXJsYXlbc3R5bGUqPSJmbGV4Il0gewogICAgYW5pbWF0aW9uOiBtanItZmFkZS1pbiAwLjE4cyBlYXNlLW91dDsKfQoKQGtleWZyYW1lcyBtanItZmFkZS1pbiB7CiAgICBmcm9tIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OTUpOwogICAgfQogICAgdG8gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgIH0KfQoKLm1qci12aWV3ZXItaGVhZGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgcGFkZGluZzogMTJweCAyMHB4OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE3MGRlZywgcmdiYSgyNCwgMjcsIDMzLCAwLjk2KSwgcmdiYSgxNywgMTksIDI1LCAwLjk3KSk7CiAgICBib3JkZXItYm90dG9tOiAwLjhweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMik7CiAgICBjb2xvcjogd2hpdGU7Cn0KCi5tanItdmlld2VyLWZpbGVuYW1lIHsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICBtYXgtd2lkdGg6IDQwMHB4OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci12aWV3ZXItbW9kZS1idXR0b25zIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBnYXA6IDZweDsKfQoKLm1qci12aWV3ZXItbW9kZS1idXR0b25zIGJ1dHRvbiB7CiAgICBwYWRkaW5nOiA0cHggMTJweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjA2LCAyMTEsIDIxOCwgMC4xKSwgcmdiYSgyMDYsIDIxMSwgMjE4LCAwLjAzKSk7CiAgICBib3JkZXI6IDAuOHB4IHNvbGlkIHJnYmEoMTk2LCAyMDIsIDIxMCwgMC4zKTsKICAgIGNvbG9yOiByZ2JhKDIzMCwgMjMzLCAyMzgsIDAuOTUpOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgdHJhbnNpdGlvbjogYWxsIDAuMTZzOwp9CgoubWpyLXZpZXdlci1tb2RlLWJ1dHRvbnMgYnV0dG9uOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjEwLCAyMTQsIDIyMCwgMC4xNCksIHJnYmEoMjEwLCAyMTQsIDIyMCwgMC4wNikpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIxNCwgMjE4LCAyMjQsIDAuNDIpOwp9CgovKiBWaWV3ZXIgY2xvc2UgYnV0dG9uIHBpbm5lZCB0byBvdmVybGF5IGNvcm5lciAqLwoubWpyLXZpZXdlci1jbG9zZSwKLm1qci12aWV3ZXItZnMgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMjYpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItd2lkdGg6IDAuOHB4ICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjA2LCAyMTEsIDIxOCwgMC4wOCksIHJnYmEoMjA2LCAyMTEsIDIxOCwgMC4wMikpLAogICAgICAgIHJnYmEoMjAsIDIzLCAyOSwgMC45NCkgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci1jbG9zZSB7CiAgICBjb2xvcjogI2ZmZjRmNCAhaW1wb3J0YW50OwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIwNSwgODIsIDgyLCAwLjUpICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjA1LCA4MiwgODIsIDAuMyksIHJnYmEoMjA1LCA4MiwgODIsIDAuMTIpKSwKICAgICAgICByZ2JhKDU4LCAxOCwgMTgsIDAuOTQpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDIxOSwgMjE5LCAwLjE2KSwKICAgICAgICAwIDAgMCAxcHggcmdiYSgyMDUsIDgyLCA4MiwgMC4wOCkgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItY2xvc2U6aG92ZXIgewogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIzNSwgMTEwLCAxMTAsIDAuMzgpLCByZ2JhKDIzNSwgMTEwLCAxMTAsIDAuMTYpKSwKICAgICAgICByZ2JhKDcwLCAxOCwgMTgsIDAuOTcpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjM1LCAxMzgsIDEzOCwgMC42NCkgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItZnM6aG92ZXIgewogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIxMCwgMjE0LCAyMjAsIDAuMTQpLCByZ2JhKDIxMCwgMjE0LCAyMjAsIDAuMDYpKSwKICAgICAgICByZ2JhKDIzLCAyNiwgMzIsIDAuOTUpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjE0LCAyMTgsIDIyNCwgMC4zOCkgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItY2xvc2UgLnBpIHsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgoubWpyLXZpZXdlci1jb250ZW50IHsKICAgIGZsZXg6IDE7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKfQoKLm1qci12aWV3ZXItc2luZ2xlLAoubWpyLXZpZXdlci1hYiwKLm1qci12aWV3ZXItc2lkZWJ5c2lkZSB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKfQoKLm1qci12aWV3ZXItc2luZ2xlIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Cn0KCi5tanItdmlld2VyLXNpbmdsZSBpbWcsCi5tanItdmlld2VyLXNpbmdsZSB2aWRlbyB7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBtYXgtaGVpZ2h0OiAxMDAlOwogICAgb2JqZWN0LWZpdDogY29udGFpbjsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzOwp9CgoubWpyLXZpZXdlci1hdWRpby1zaGVsbCB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAxNHB4OwogICAgcGFkZGluZzogMThweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgMTglIDIyJSwgcmdiYSg3OCwgMTg0LCAyNTUsIDAuMiksIHRyYW5zcGFyZW50IDMyJSksCiAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4MiUgNzQlLCByZ2JhKDgyLCAyMjAsIDE1NiwgMC4xNSksIHRyYW5zcGFyZW50IDM2JSksCiAgICAgICAgbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgxMiwgMTgsIDI2LCAwLjk4KSwgcmdiYSg0LCA3LCAxMSwgMC45OSkpOwp9CgoubWpyLXZpZXdlci1hdWRpby1oZWFkZXIgewogICAgd2lkdGg6IG1pbigxMDgwcHgsIDg4JSk7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiAxMXB4OwogICAgbWluLXdpZHRoOiAwOwogICAgcGFkZGluZzogMCA4cHg7Cn0KCi5tanItdmlld2VyLWF1ZGlvLWljb24gewogICAgd2lkdGg6IDM0cHg7CiAgICBoZWlnaHQ6IDM0cHg7CiAgICBmbGV4OiAwIDAgYXV0bzsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpOwogICAgYm94LXNoYWRvdzogMCA4cHggMjJweCByZ2JhKDAsIDAsIDAsIDAuMjYpOwp9CgoubWpyLXZpZXdlci1hdWRpby10aXRsZS13cmFwIHsKICAgIG1pbi13aWR0aDogMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAycHg7Cn0KCi5tanItdmlld2VyLWF1ZGlvLXRpdGxlIHsKICAgIG1heC13aWR0aDogbWluKDc2MHB4LCA3MnZ3KTsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBmb250LXdlaWdodDogODAwOwogICAgbGluZS1oZWlnaHQ6IDEuMjU7Cn0KCi5tanItdmlld2VyLWF1ZGlvLW1ldGEgewogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41OCk7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogODAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDA7Cn0KCi5tanItdmlld2VyLWF1ZGlvLXZpeiB7CiAgICB3aWR0aDogbWluKDE5MjBweCwgOTYlKTsKICAgIGFzcGVjdC1yYXRpbzogMTYgLyA5OwogICAgaGVpZ2h0OiBhdXRvOwogICAgbWF4LWhlaWdodDogbWluKDEwODBweCwgNjh2aCk7CiAgICBtaW4taGVpZ2h0OiAyNjBweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOSk7CiAgICBib3JkZXItcmFkaXVzOiAxNnB4OwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDEpKSwKICAgICAgICByZ2JhKDIsIDUsIDksIDAuMjIpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSksCiAgICAgICAgMCAxOHB4IDcwcHggcmdiYSgwLCAwLCAwLCAwLjMpOwp9CgoubWpyLXZpZXdlci1hdWRpby1zcmMgewogICAgd2lkdGg6IG1pbig2ODBweCwgOTAlKTsKfQoKLm1qci12aWV3ZXItYWIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZGlzcGxheTogbm9uZTsKfQoKLm1qci12aWV3ZXItc2lkZWJ5c2lkZSB7CiAgICBkaXNwbGF5OiBub25lOwogICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgIGdhcDogMnB4Owp9CgoubWpyLXZpZXdlci1zaWRlYnlzaWRlID4gZGl2IHsKICAgIGZsZXg6IDE7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKfQoKLm1qci12aWV3ZXItc2lkZWJ5c2lkZSBpbWcsCi5tanItdmlld2VyLXNpZGVieXNpZGUgdmlkZW8gewogICAgbWF4LXdpZHRoOiAxMDAlOwogICAgbWF4LWhlaWdodDogMTAwJTsKICAgIG9iamVjdC1maXQ6IGNvbnRhaW47Cn0KCi5tanItdmlld2VyLWZvb3RlciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgcGFkZGluZzogMTJweCAyMHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpOwogICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgIGNvbG9yOiB3aGl0ZTsKICAgIGdhcDogMjBweDsKfQoKLm1qci12aWV3ZXItZm9vdGVyIGJ1dHRvbiB7CiAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpOwogICAgY29sb3I6IHdoaXRlOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgZm9udC1zaXplOiAxNHB4OwogICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7Cn0KCi5tanItdmlld2VyLWZvb3RlciBidXR0b246aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwp9CgoubWpyLXZpZXdlci1uYXYgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDE0cHg7Cn0KCi5tanItdmlld2VyLW5hdi1idG4gewogICAgd2lkdGg6IDQwcHggIWltcG9ydGFudDsKICAgIGhlaWdodDogNDBweCAhaW1wb3J0YW50OwogICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgYm9yZGVyLXJhZGl1czogMTBweCAhaW1wb3J0YW50OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxOTYsIDIwMiwgMjEwLCAwLjQyKSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDE5NCwgMjAwLCAyMDgsIDAuMTgpLCByZ2JhKDE5NCwgMjAwLCAyMDgsIDAuMDcpKSwKICAgICAgICByZ2JhKDM0LCAzOCwgNDQsIDAuOTIpICFpbXBvcnRhbnQ7CiAgICBjb2xvcjogcmdiYSgyMzQsIDIzNiwgMjQwLCAwLjk2KSAhaW1wb3J0YW50OwogICAgZm9udC1zaXplOiAyMHB4ICFpbXBvcnRhbnQ7CiAgICBmb250LXdlaWdodDogNzAwICFpbXBvcnRhbnQ7CiAgICBsaW5lLWhlaWdodDogMSAhaW1wb3J0YW50OwogICAgdGV4dC1zaGFkb3c6IG5vbmU7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCk7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIHRyYW5zZm9ybSAwLjE0cyBlYXNlLAogICAgICAgIGJhY2tncm91bmQtY29sb3IgMC4xNHMgZWFzZSwKICAgICAgICBib3JkZXItY29sb3IgMC4xNHMgZWFzZSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci1uYXYtYnRuOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMTQsIDIxOCwgMjI0LCAwLjU2KSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIwNywgMjEyLCAyMTksIDAuMiksIHJnYmEoMjA3LCAyMTIsIDIxOSwgMC4xKSksCiAgICAgICAgcmdiYSgzOSwgNDMsIDQ5LCAwLjk0KSAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7Cn0KCi5tanItdmlld2VyLW5hdi1idG46YWN0aXZlOm5vdCg6ZGlzYWJsZWQpIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKSBzY2FsZSgwLjk4KTsKICAgIGZpbHRlcjogbm9uZTsKfQoKLm1qci12aWV3ZXItbmF2LWJ0bjpkaXNhYmxlZCB7CiAgICBvcGFjaXR5OiAwLjM0ICFpbXBvcnRhbnQ7CiAgICBmaWx0ZXI6IGdyYXlzY2FsZSgwLjI1KTsKICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCkgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItaW5kZXggewogICAgZm9udC1zaXplOiAxM3B4OwogICAgbWluLXdpZHRoOiA3NHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsKICAgIGxldHRlci1zcGFjaW5nOiAwLjA0ZW07CiAgICBjb2xvcjogcmdiYSgyMjYsIDIyOCwgMjMzLCAwLjk0KTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMTk3LCAyMDMsIDIxMSwgMC4xNSksIHJnYmEoMTk3LCAyMDMsIDIxMSwgMC4wNikpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxOTcsIDIwMywgMjExLCAwLjM0KTsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgcGFkZGluZzogNXB4IDExcHg7CiAgICB0ZXh0LXNoYWRvdzogbm9uZTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KTsKfQoKLm1qci12aWV3ZXItcGxheWVyYmFyIHsKICAgIGJvcmRlci1yYWRpdXM6IDE4cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE5NCwgMjAwLCAyMDgsIDAuMTYpOwogICAgYmFja2dyb3VuZDoKICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IHRvcCBsZWZ0LCByZ2JhKDkwLCAxNTAsIDI1NSwgMC4wOCksIHRyYW5zcGFyZW50IDM2JSksCiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE2MGRlZywgcmdiYSgyMCwgMjQsIDMwLCAwLjk0KSwgcmdiYSgxMiwgMTUsIDIxLCAwLjk4KSk7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KSwKICAgICAgICAwIDE2cHggMzZweCByZ2JhKDAsIDAsIDAsIDAuMjIpOwogICAgLyogb3ZlcmZsb3cgbXVzdCBzdGF5IHZpc2libGUgc28gdGhlIHNlZWsgcnVsZXIgdGlja3MvbGFiZWxzICh0b3A6LTE2cHggLyB0b3A6LTM0cHgpCiAgICAgICB0aGF0IGFyZSBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgYWJvdmUgdGhlIHNlZWsgYmFyIGFyZSBub3QgY2xpcHBlZC4gKi8KICAgIG92ZXJmbG93OiB2aXNpYmxlOwp9CgoubWpyLXZpZXdlci10b29scyB7CiAgICBhbGlnbi1pdGVtczogc3RhcnQ7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHN0cmV0Y2g7CiAgICBnYXA6IDhweDsKfQoKLm1qci12aWV3ZXItaGVhZGVyIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKLm1qci12aWV3ZXItaGVhZGVyOjphZnRlciB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDE4cHg7CiAgICByaWdodDogMThweDsKICAgIHRvcDogNDRweDsKICAgIGhlaWdodDogMXB4OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCB0cmFuc3BhcmVudCwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSwgdHJhbnNwYXJlbnQpOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBvcGFjaXR5OiAwLjc7Cn0KCi5tanItdmlld2VyLWhlYWRlci1tZXRhIHsKICAgIG1pbi1oZWlnaHQ6IDMwcHg7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMzUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKfQoKLm1qci12aWV3ZXItaGVhZGVyLXRvcCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgcGFkZGluZy1yaWdodDogODRweDsKICAgIHBhZGRpbmctbGVmdDogMTJweDsKfQoKLm1qci12aWV3ZXItaGVhZGVyLWFyZWEtLWxlZnQgewogICAgZGlzcGxheTogbm9uZTsKICAgIGZsZXg6IDEgMSAwOwogICAgbWluLXdpZHRoOiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm1qci12aWV3ZXItaGVhZGVyLWFyZWEtLWNlbnRlciB7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmbGV4OiAxIDEgYXV0bzsKfQoKLm1qci12aWV3ZXItaGVhZGVyLWFyZWEtLXJpZ2h0IHsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICBmbGV4OiAxIDEgMDsKICAgIG1pbi13aWR0aDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5tanItdmlld2VyLXRpdGxlLXdyYXAgewogICAgd2lkdGg6IGF1dG87CiAgICBtaW4td2lkdGg6IDA7CiAgICBtYXgtd2lkdGg6IG1pbigxMDAlLCBjYWxjKDEwMHZ3IC0gMjIwcHgpKTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDEycHg7Cn0KCi5tanItdmlld2VyLXRpdGxlLWxpbmUgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgbWluLXdpZHRoOiAwOwogICAgZmxleC13cmFwOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgoubWpyLXZpZXdlci1maWxlbmFtZSB7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDFlbTsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgbWFyZ2luOiAwIGF1dG87CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCi5tanItdmlld2VyLWJhZGdlcyB7CiAgICBnYXA6IDRweDsKfQoKLm1qci12aWV3ZXItdGl0bGUtbGluZSAubWpyLXZpZXdlci1iYWRnZXMgewogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci12aWV3ZXItaGVhZGVyLW1ldGEtLWxlZnQgewogICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgd2lkdGg6IGZpdC1jb250ZW50OwogICAgbWF4LXdpZHRoOiAxMDAlOwp9CgoubWpyLXZpZXdlci1oZWFkZXItbWV0YS0tbGVmdDplbXB0eSB7CiAgICBkaXNwbGF5OiBub25lOwp9CgoubWpyLXZpZXdlci1oZWFkZXItbWV0YS0tcmlnaHQgewogICAganVzdGlmeS1zZWxmOiBlbmQ7CiAgICB3aWR0aDogZml0LWNvbnRlbnQ7CiAgICBtYXgtd2lkdGg6IDEwMCU7Cn0KCi5tanItdmlld2VyLW1vZGUtYnV0dG9ucyB7CiAgICBmbGV4OiAwIDAgYXV0bzsKICAgIHBhZGRpbmc6IDNweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7Cn0KCi5tanItdmlld2VyLXRvb2xzLWRlY2sgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtd3JhcDogbm93cmFwOwogICAgZ2FwOiA4cHg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgbWluLXdpZHRoOiAwOwogICAgb3ZlcmZsb3cteDogYXV0bzsKICAgIG92ZXJmbG93LXk6IGhpZGRlbjsKICAgIHNjcm9sbGJhci13aWR0aDogdGhpbjsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWwgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgbWluLXdpZHRoOiBhdXRvOwogICAgbWluLWhlaWdodDogMDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDIpKSwKICAgICAgICByZ2JhKDEwLCAxMiwgMTYsIDAuMjQpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCksCiAgICAgICAgMCA2cHggMTZweCByZ2JhKDAsIDAsIDAsIDAuMTIpOwogICAgcGFkZGluZzogNXB4IDZweDsKICAgIGZsZXg6IDAgMCBhdXRvOwp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbDo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDAgMCBhdXRvIDA7CiAgICBoZWlnaHQ6IDFweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgdHJhbnNwYXJlbnQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNiksIHRyYW5zcGFyZW50KTsKICAgIG9wYWNpdHk6IDAuNzsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbC1oZWFkIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCi5tanItdmlld2VyLXRvb2xzLXBhbmVsLWhlYWRpbmcgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDFweDsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtZXllYnJvdyB7CiAgICBmb250LXNpemU6IDlweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC4xNGVtOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNDYpOwp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbC10aXRsZSB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDFlbTsKICAgIGNvbG9yOiByZ2JhKDI0OCwgMjUwLCAyNTIsIDAuOTYpOwp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbC1ib2R5IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZmxleC13cmFwOiBub3dyYXA7CiAgICBnYXA6IDZweDsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci12aWV3ZXItdG9vbHMtcGFuZWxbZGF0YS1wYW5lbD0iZ3JhZGUiXSAubWpyLXZpZXdlci10b29scy1wYW5lbC1ib2R5IHsKICAgIGRpc3BsYXk6IGZsZXg7Cn0KCi5tanItdmlld2VyLXRvb2xzLXBhbmVsW2RhdGEtcGFuZWw9Im92ZXJsYXkiXSAubWpyLXZpZXdlci10b29scy1wYW5lbC1ib2R5IHsKICAgIGRpc3BsYXk6IGZsZXg7Cn0KCi5tanItdmlld2VyLXRvb2xzLXBhbmVsW2RhdGEtcGFuZWw9Imluc3BlY3QiXSAubWpyLXZpZXdlci10b29scy1wYW5lbC1ib2R5LAoubWpyLXZpZXdlci10b29scy1wYW5lbFtkYXRhLXBhbmVsPSJhY3Rpb25zIl0gLm1qci12aWV3ZXItdG9vbHMtcGFuZWwtYm9keSwKLm1qci12aWV3ZXItdG9vbHMtcGFuZWxbZGF0YS1wYW5lbD0iaW5mbyJdIC5tanItdmlld2VyLXRvb2xzLXBhbmVsLWJvZHkgewogICAgZGlzcGxheTogZmxleDsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXAgewogICAgd2lkdGg6IGF1dG87CiAgICBtaW4taGVpZ2h0OiAzMHB4OwogICAgcGFkZGluZzogNXB4IDdweDsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgIGdhcDogNnB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxOTYsIDIwMiwgMjEwLCAwLjEyKTsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMzUpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDIpKSwKICAgICAgICByZ2JhKDEwLCAxMiwgMTYsIDAuMTgpOwogICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDMpOwogICAgbWluLXdpZHRoOiBmaXQtY29udGVudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXAtbGFiZWwgewogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43NSk7CiAgICBsZXR0ZXItc3BhY2luZzogMC4xNXB4OwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC1zaXplOiAxMHB4Owp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtzdHlsZSo9Ii0tbWpyLWdyb3VwLWFjY2VudCJdIC5tanItdmlld2VyLXRvb2xzLWdyb3VwLWxhYmVsIHsKICAgIGNvbG9yOiByZ2JhKHZhcigtLW1qci1ncm91cC1hY2NlbnQpLCAwLjkpOwp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtzdHlsZSo9Ii0tbWpyLWdyb3VwLWFjY2VudCJdIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSh2YXIoLS1tanItZ3JvdXAtYWNjZW50KSwgMC4zNSk7Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9ImNoYW5uZWwiXSAubWpyLXZpZXdlci10b29scy1ncm91cC1sYWJlbCwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iYW5hbHlzaXMiXSAubWpyLXZpZXdlci10b29scy1ncm91cC1sYWJlbCwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1ndWlkZXMiXSAubWpyLXZpZXdlci10b29scy1ncm91cC1sYWJlbCwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1pbnNwZWN0Il0gLm1qci12aWV3ZXItdG9vbHMtZ3JvdXAtbGFiZWwgewogICAgbWluLXdpZHRoOiA0MnB4Owp9CgoubWpyLXZpZXdlci10b29scy1wYW5lbFtkYXRhLXBhbmVsPSJvdmVybGF5Il0gLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1ndWlkZXMiXSB7CiAgICBmbGV4OiAwIDAgYXV0bzsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1ndWlkZXMiXSwKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1pbnNwZWN0Il0gewogICAgZmxleC13cmFwOiB3cmFwOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iY2hhbm5lbCJdLAoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJleHBvc3VyZSJdLAoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJnYW1tYSJdLAoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJhbmFseXNpcyJdLAoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJjb21wYXJlIl0sCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9ImF1ZGlvLXZpeiJdIHsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKfQoKLm1qci12aWV3ZXItdG9vbHMtYWN0aW9ucywKLm1qci12aWV3ZXItdG9vbHMtbWV0YSB7CiAgICB3aWR0aDogYXV0bzsKICAgIG1pbi1oZWlnaHQ6IDMwcHg7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgcGFkZGluZzogNXB4IDdweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzKTsKfQoKLm1qci12aWV3ZXItdG9vbHMtYWN0aW9ucyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgIGdhcDogNnB4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLXZpZXdlci10b29scy1tZXRhIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZ2FwOiA2cHg7CiAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItdmlld2VyLXRvb2xzLWFjdGlvbi0tcHJpbWFyeSB7CiAgICBtYXJnaW4tbGVmdDogMDsKfQoKLm1qci12aWV3ZXItdG9vbHMtYWN0aW9uICsgLm1qci12aWV3ZXItdG9vbHMtYWN0aW9uIHsKICAgIG1hcmdpbi1sZWZ0OiA0cHg7Cn0KCi5tanItdmlld2VyLXRvb2xzLXNlbGVjdCB7CiAgICBtaW4taGVpZ2h0OiAyNHB4Owp9CgoubWpyLXZpZXdlci10b29scy1yYW5nZS1pbnB1dCB7CiAgICB3aWR0aDogOTJweCAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29scy1yYW5nZSBzcGFuIHsKICAgIGZvbnQtc2l6ZTogMTFweDsKfQoKQG1lZGlhIChtYXgtd2lkdGg6IDE0ODBweCkgewogICAgLm1qci12aWV3ZXItdG9vbHMtZGVjayB7CiAgICAgICAgZ2FwOiA2cHg7CiAgICB9Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiAxMjIwcHgpIHsKICAgIC5tanItdmlld2VyLWhlYWRlci10b3AgewogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiA4NHB4OwogICAgICAgIHBhZGRpbmctbGVmdDogMDsKICAgIH0KCiAgICAubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tY2VudGVyLAogICAgLm1qci12aWV3ZXItaGVhZGVyLWFyZWEtLXJpZ2h0IHsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIH0KCiAgICAubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tY2VudGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4OiAxIDEgMTAwJTsKICAgIH0KCiAgICAubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tcmlnaHQgewogICAgICAgIHBvc2l0aW9uOiBzdGF0aWM7CiAgICAgICAgdHJhbnNmb3JtOiBub25lOwogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmbGV4OiAxIDEgMTAwJTsKICAgIH0KCiAgICAubWpyLXZpZXdlci1oZWFkZXItbWV0YS0tcmlnaHQgewogICAgICAgIGp1c3RpZnktc2VsZjogY2VudGVyOwogICAgfQoKICAgIC5tanItdmlld2VyLXRvb2xzLWRlY2sgewogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBvdmVyZmxvdy14OiB2aXNpYmxlOwogICAgfQoKICAgIC5tanItdmlld2VyLXRvb2xzLXBhbmVsLAogICAgLm1qci12aWV3ZXItdG9vbHMtYWN0aW9ucywKICAgIC5tanItdmlld2VyLXRvb2xzLW1ldGEsCiAgICAubWpyLXZpZXdlci10b29scy1wYW5lbC1ib2R5IHsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICB9CgogICAgLm1qci12aWV3ZXItdG9vbHMtbWV0YSB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgfQp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJjb21wYXJlIl1bZGF0YS1hY3RpdmU9IjEiXSB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLW1qci1ncm91cC1hY2NlbnQpLCAwLjEpOwogICAgYm9yZGVyLWxlZnQtY29sb3I6IHJnYmEodmFyKC0tbWpyLWdyb3VwLWFjY2VudCksIDAuNik7CiAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggcmdiYSh2YXIoLS1tanItZ3JvdXAtYWNjZW50KSwgMC4yMik7Cn0KCi5tanItdmlld2VyLXRvb2xzLWdyb3VwW2RhdGEtZ3JvdXA9ImNvbXBhcmUiXVtkYXRhLWFjdGl2ZT0iMSJdIC5tanItdmlld2VyLXRvb2xzLXNlbGVjdCB7CiAgICBib3JkZXItY29sb3I6IHJnYmEodmFyKC0tbWpyLWdyb3VwLWFjY2VudCksIDAuNik7CiAgICBib3gtc2hhZG93OiAwIDAgMCAycHggcmdiYSh2YXIoLS1tanItZ3JvdXAtYWNjZW50KSwgMC4xOCk7Cn0KCi5tanItdmlld2VyLXRvb2xzLXNlbGVjdDpmb2N1cyB7CiAgICBvdXRsaW5lOiBub25lOwogICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHJnYmEoNjQsIDE2MCwgMjU1LCAwLjIyKTsKfQoKLyogTmF0aXZlIGRyb3Bkb3duczogaGludCBkYXJrIFVJIGFuZCBzdHlsZSBvcHRpb25zIHdoZW4gdGhlIGJyb3dzZXIgYWxsb3dzIGl0LiAqLwoubWpyLXZpZXdlci1oZWFkZXIgewogICAgY29sb3Itc2NoZW1lOiBkYXJrOwp9CgoubWpyLXZpZXdlci10b29scy1zZWxlY3QgewogICAgbWluLWhlaWdodDogMjRweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC40NikgIWltcG9ydGFudDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTIpICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCkgIWltcG9ydGFudDsKICAgIGJvcmRlci1yYWRpdXM6IDhweCAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29scy1zZWxlY3Qgb3B0aW9uIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsIHZhcigtLWlucHV0LXRleHQsICNkZGQpKTsKfQoKLm1qci12aWV3ZXItdG9vbHMtcmFuZ2UtaW5wdXQ6Zm9jdXMgewogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci12aWV3ZXItdG9vbC1idG4tLXJlc2V0IHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIyKSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29sLWJ0biB7CiAgICBtaW4taGVpZ2h0OiAyNHB4ICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmFkaXVzOiA4cHggIWltcG9ydGFudDsKICAgIGJvcmRlci13aWR0aDogMXB4ICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIHJnYmEoMjEwLCAyMTQsIDIyMCwgMC4wNzUpLAogICAgICAgIHJnYmEoMjEwLCAyMTQsIDIyMCwgMC4wMjUpCiAgICApICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMTk2LCAyMDIsIDIxMCwgMC4xNikgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKICAgIGZvbnQtc2l6ZTogMTFweCAhaW1wb3J0YW50OwogICAgcGFkZGluZzogMCA4cHggIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbC1idG46aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIyMCwgMjI0LCAyMzAsIDAuMjQpICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIHJnYmEoMjIwLCAyMjQsIDIzMCwgMC4xKSwKICAgICAgICByZ2JhKDIyMCwgMjI0LCAyMzAsIDAuMDM1KQogICAgKSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJhbmFseXNpcyJdIC5tanItdmlld2VyLXRvb2wtYnRuW2RhdGEtYWN0aXZlPSIxIl0gewogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDE4MGRlZywKICAgICAgICByZ2JhKDI1NSwgMTY2LCA5MiwgMC4yMiksCiAgICAgICAgcmdiYSgyNTUsIDExNiwgNjQsIDAuMDgpCiAgICApICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAxNjAsIDkyLCAwLjM0KSAhaW1wb3J0YW50OwogICAgY29sb3I6IHJnYmEoMjU1LCAyMzYsIDIyNCwgMC45NikgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0iYW5hbHlzaXMiXSAubWpyLXZpZXdlci10b29sLWJ0bltkYXRhLWFjdGl2ZT0iMSJdOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgcmdiYSgyNTUsIDE4MCwgMTA4LCAwLjI4KSwKICAgICAgICByZ2JhKDI1NSwgMTI4LCA3MiwgMC4xNCkKICAgICkgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDE4NCwgMTE2LCAwLjQ2KSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJvdmVybGF5LWd1aWRlcyJdIC5tanItdmlld2VyLXRvb2wtYnRuW2RhdGEtYWN0aXZlPSIxIl0gewogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDE4MGRlZywKICAgICAgICByZ2JhKDkyLCAyMTksIDE4NiwgMC4yMiksCiAgICAgICAgcmdiYSg0NCwgMTcwLCAxNDQsIDAuMDgpCiAgICApICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoOTIsIDIxOSwgMTg2LCAwLjM0KSAhaW1wb3J0YW50OwogICAgY29sb3I6IHJnYmEoMjI0LCAyNTUsIDI0OCwgMC45NikgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1ndWlkZXMiXSAubWpyLXZpZXdlci10b29sLWJ0bltkYXRhLWFjdGl2ZT0iMSJdOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgcmdiYSgxMDIsIDIzMCwgMTk2LCAwLjI4KSwKICAgICAgICByZ2JhKDUyLCAxODIsIDE1NiwgMC4xNCkKICAgICkgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgxMTAsIDIzNiwgMjAyLCAwLjQ2KSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci10b29scy1ncm91cFtkYXRhLWdyb3VwPSJvdmVybGF5LWluc3BlY3QiXSAubWpyLXZpZXdlci10b29sLWJ0bltkYXRhLWFjdGl2ZT0iMSJdIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgcmdiYSgxMjQsIDE2NiwgMjU1LCAwLjIyKSwKICAgICAgICByZ2JhKDEwOSwgODgsIDIyMiwgMC4wOCkKICAgICkgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgxMzIsIDE3MCwgMjU1LCAwLjM2KSAhaW1wb3J0YW50OwogICAgY29sb3I6IHJnYmEoMjM2LCAyNDIsIDI1NSwgMC45NykgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbHMtZ3JvdXBbZGF0YS1ncm91cD0ib3ZlcmxheS1pbnNwZWN0Il0gLm1qci12aWV3ZXItdG9vbC1idG5bZGF0YS1hY3RpdmU9IjEiXTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIHJnYmEoMTM4LCAxODAsIDI1NSwgMC4zKSwKICAgICAgICByZ2JhKDEyNCwgMTAwLCAyMzIsIDAuMTQpCiAgICApICFpbXBvcnRhbnQ7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMTQ4LCAxODgsIDI1NSwgMC40OCkgIWltcG9ydGFudDsKfQoKLm1qci12aWV3ZXItdG9vbC1idG5bZGF0YS1hY3RpdmU9IjEiXSB7CiAgICBmaWx0ZXI6IHNhdHVyYXRlKDEuMTIpIGJyaWdodG5lc3MoMS4wNCk7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpLAogICAgICAgIDAgMCAwIDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpLAogICAgICAgIDAgOHB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjE2KSAhaW1wb3J0YW50Owp9CgoubWpyLXZpZXdlci1oZWxwIHsKICAgIGJvcmRlci1yYWRpdXM6IDE0cHggIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMTMsIDE3LCAyMiwgMC45NiksIHJnYmEoOCwgMTEsIDE2LCAwLjk4KSkgIWltcG9ydGFudDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6IDAgMThweCAzNHB4IHJnYmEoMCwgMCwgMCwgMC4zNCkgIWltcG9ydGFudDsKfQoKQG1lZGlhIChtYXgtd2lkdGg6IDEyMjBweCkgewogICAgLm1qci12aWV3ZXItdG9vbHMgewogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgfQoKICAgIC5tanItdmlld2VyLXRvb2xzLWFjdGlvbnMgewogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgIH0KCiAgICAubWpyLXZpZXdlci1oZWFkZXItdG9wIHsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICBqdXN0aWZ5LWl0ZW1zOiBjZW50ZXI7CiAgICB9CgogICAgLm1qci12aWV3ZXItaGVhZGVyLWFyZWEtLWxlZnQsCiAgICAubWpyLXZpZXdlci1oZWFkZXItYXJlYS0tY2VudGVyLAogICAgLm1qci12aWV3ZXItaGVhZGVyLWFyZWEtLXJpZ2h0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIH0KCiAgICAubWpyLXZpZXdlci1oZWFkZXItbWV0YS0tbGVmdCwKICAgIC5tanItdmlld2VyLWhlYWRlci1tZXRhLS1yaWdodCB7CiAgICAgICAganVzdGlmeS1zZWxmOiBjZW50ZXI7CiAgICB9CgogICAgLm1qci12aWV3ZXItdG9vbHMtYm9keSB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgyMjBweCwgMWZyKSk7CiAgICB9Cn0KCi8qID09PT09PT09PT0gQ3VzdG9tIFZpZGVvIENvbnRyb2xzIChubyBuYXRpdmUgYmFyKSA9PT09PT09PT09ICovCi5tanItdmlkZW8taG9zdCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5tanItdmlkZW8tY29udHJvbHMgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMTJweDsKICAgIHJpZ2h0OiAxMnB4OwogICAgYm90dG9tOiAxMnB4OwogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDhweDsKICAgIHBhZGRpbmc6IDhweCAxMHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjYpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7CiAgICBvcGFjaXR5OiAwOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGVhc2U7CiAgICB6LWluZGV4OiA1Owp9CgoubWpyLXZpZGVvLXJvdyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci12aWRlby1yb3ctLXRvcCB7CiAgICBnYXA6IDEycHg7CiAgICBkaXNwbGF5OiBncmlkOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byBhdXRvIDFmciBhdXRvIGF1dG87Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXJvdy0tdG9wIHsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byBhdXRvIDFmciBhdXRvIGF1dG87Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXByZXZpZXcgLm1qci12aWRlby1yb3ctLXRvcCB7CiAgICBkaXNwbGF5OiBmbGV4Owp9CgoubWpyLXZpZGVvLXJvdy0tYm90dG9tIHsKICAgIGdhcDogOHB4Owp9CgoubWpyLXZpZGVvLWdyb3VwIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgbWluLXdpZHRoOiAwOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44NSk7CiAgICBmb250LXNpemU6IDEycHg7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLm1qci12aWRlby1udW0gewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xOCk7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk1KTsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIHBhZGRpbmc6IDVweCA4cHg7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIG91dGxpbmU6IG5vbmU7Cn0KCi5tanItdmlkZW8tbnVtOmZvY3VzIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjM4KTsKfQoKLm1qci12aWRlby1udW0tLWZwcy5pcy1vdmVycmlkZGVuIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNDUsIDE1OCwgMTEsIDAuODIpOwogICAgY29sb3I6ICNmYmJmMjQ7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI0NSwgMTU4LCAxMSwgMC4xNCk7Cn0KCi5tanItdmlkZW8tbnVtLS1mcHMuaXMtb3ZlcnJpZGRlbjpmb2N1cyB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjUxLCAxOTEsIDM2LCAwLjk2KTsKfQoKLm1qci12aWRlby1udW0tLXNwZWVkIHsKICAgIGNvbG9yLXNjaGVtZTogZGFyazsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC42Mik7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk1KTsKfQoKLm1qci12aWRlby1udW0tLXNwZWVkIG9wdGlvbiB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1tZW51LWJnLCAjMmEyYTJhKTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKfQoKLm1qci12aWRlby1mcmFtZSB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgbWluLXdpZHRoOiA1MnB4OwogICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLm1qci12aWRlby1mcmFtZS5pcy1zdGVwIHsKICAgIGNvbG9yOiAjZmZkMjRkOwp9CgoubWpyLXZpZGVvLWJvdHRvbSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgbWluLXdpZHRoOiAwOwogICAgZmxleDogMTsKfQoKLm1qci12aWRlby1ib3R0b20tLWxlZnQgewogICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0Owp9CgoubWpyLXZpZGVvLWJvdHRvbS0tcmlnaHQgewogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKfQoKLm1qci12aWRlby10cmFuc3BvcnQgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIGZsZXg6IDAgMCBhdXRvOwp9CgovKiBTaG93IGNvbnRyb2xzIG9uIGhvdmVyL2ZvY3VzICh2aWV3ZXIpLiAqLwoubWpyLXZpZGVvLWhvc3Q6aG92ZXIgLm1qci12aWRlby1jb250cm9scywKLm1qci12aWRlby1jb250cm9sczpmb2N1cy13aXRoaW4gewogICAgb3BhY2l0eTogMTsKICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwp9CgovKiBQcmV2aWV3OiBrZWVwIGNvbnRyb2xzIHZpc2libGUgYmVjYXVzZSB0aGUgYXJlYSBpcyBzbWFsbC4gKi8KLm1qci12aWRlby1jb250cm9scy0tcHJldmlldyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiBhdXRvOwogICAgcmlnaHQ6IDEwcHg7CiAgICB0b3A6IGF1dG87CiAgICBib3R0b206IDEwcHg7CiAgICBvcGFjaXR5OiAxOwogICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGJvcmRlcjogbm9uZTsKICAgIHBhZGRpbmc6IDA7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIHdpZHRoOiBhdXRvOwogICAgaGVpZ2h0OiBhdXRvOwogICAgYmFja2Ryb3AtZmlsdGVyOiBub25lOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IG5vbmU7Cn0KCi5tanItdmlkZW8tcHJldmlldy1idG4gewogICAgd2lkdGg6IDM4cHg7CiAgICBoZWlnaHQ6IDM4cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yMik7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNDIpOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45Mik7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKfQoKLm1qci12aWRlby1wcmV2aWV3LWJ0bjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNSk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yOCk7Cn0KCi5tanItdmlkZW8tcHJldmlldy1idG4gLnBpIHsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgoubWpyLXZpZGVvLWJ0biB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KTsKICAgIGNvbG9yOiAjZmZmOwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLm1qci12aWRlby1idG46aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKfQoKLm1qci12aWRlby1idG4uaXMtb24gewogICAgYmFja2dyb3VuZDogcmdiYSg2NCwgMTYwLCAyNTUsIDAuMjUpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDY0LCAxNjAsIDI1NSwgMC41NSk7Cn0KCi5tanItdmlkZW8tYnRuLS1pbiB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoNzAsIDI1NSwgMTIwLCAwLjU1KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzAsIDI1NSwgMTIwLCAwLjEyKTsKfQoKLm1qci12aWRlby1idG4tLWluOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzAsIDI1NSwgMTIwLCAwLjE4KTsKfQoKLm1qci12aWRlby1idG4tLW91dCB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCA3MCwgNzAsIDAuNTUpOwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDcwLCA3MCwgMC4xKTsKfQoKLm1qci12aWRlby1idG4tLW91dDpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgNzAsIDcwLCAwLjE2KTsKfQoKLm1qci12aWRlby10aW1lIHsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7CiAgICBtaW4td2lkdGg6IDkycHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLm1qci12aWRlby10aW1lZ3JvdXAgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgIGdhcDogMTBweDsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci12aWRlby1yYW5nZS1jb3VudCB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogcmdiYSg2NCwgMTkwLCAyNTUsIDAuOTIpOwogICAgYmFja2dyb3VuZDogcmdiYSg2NCwgMTkwLCAyNTUsIDAuMSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDY0LCAxOTAsIDI1NSwgMC4yNSk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIHBhZGRpbmc6IDFweCA4cHg7CiAgICBsaW5lLWhlaWdodDogMTZweDsKICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKfQoKLm1qci12aWRlby1yYW5nZSB7CiAgICBhY2NlbnQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKfQoKLm1qci12aWRlby1yYW5nZS0tc2VlayB7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiA4MHB4OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgei1pbmRleDogMTsKICAgIC8qIFdlIGRyYXcgb3VyIG93biBwbGF5aGVhZC9tYXJrZXJzOyBoaWRlIHRoZSBuYXRpdmUgdGh1bWIgImRvdCIuICovCiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICBhcHBlYXJhbmNlOiBub25lOwp9CgoubWpyLXZpZGVvLXJhbmdlLS1zZWVrOjotd2Via2l0LXNsaWRlci10aHVtYiB7CiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICBhcHBlYXJhbmNlOiBub25lOwogICAgd2lkdGg6IDA7CiAgICBoZWlnaHQ6IDA7CiAgICBib3JkZXI6IDA7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGJveC1zaGFkb3c6IG5vbmU7Cn0KCi5tanItdmlkZW8tcmFuZ2UtLXNlZWs6Oi1tb3otcmFuZ2UtdGh1bWIgewogICAgd2lkdGg6IDA7CiAgICBoZWlnaHQ6IDA7CiAgICBib3JkZXI6IDA7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGJveC1zaGFkb3c6IG5vbmU7Cn0KCi5tanItdmlkZW8tc2Vlay13cmFwIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1pbi13aWR0aDogODBweDsKICAgIGZsZXg6IDE7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKfQoKLm1qci12aWRlby1zZWVrLXpvbmVzIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDA7CiAgICByaWdodDogMDsKICAgIHRvcDogNTAlOwogICAgaGVpZ2h0OiAxMHB4OwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAyOwp9CgoubWpyLXZpZGVvLXNlZWstem9uZSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDA7CiAgICBib3R0b206IDA7Cn0KCi8qIDAuLkluOiB0cmltbWVkLW91dCByYW5nZS4gKi8KLm1qci12aWRlby1zZWVrLXpvbmUtLWxlZnRUcmltIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCA3MCwgNzAsIDAuMTgpOwp9CgovKiBJbi4uT3V0OiBzZWxlY3RlZCBwbGF5YmFjayByYW5nZSBoaWdobGlnaHQuICovCi5tanItdmlkZW8tc2Vlay16b25lLS1zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDY0LCAxOTAsIDI1NSwgMC41NSk7Cn0KCi5tanItdmlkZW8tc2Vlay16b25lcy5pcy1mdWxscmFuZ2UgLm1qci12aWRlby1zZWVrLXpvbmUtLXNlbGVjdGVkIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7Cn0KCi8qIE91dC4uRW5kOiBzaG93IG91dC1vZi1yYW5nZSBmcmFtZXMgYXMgYSBkaWZmZXJlbnQgY29sb3IuICovCi5tanItdmlkZW8tc2Vlay16b25lLS1yaWdodFRyaW0gewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDcwLCA3MCwgMC4yKTsKfQoKLm1qci12aWRlby1zZWVrLW92ZXJsYXkgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgdG9wOiA1MCU7CiAgICBoZWlnaHQ6IDA7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDM7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiA1MCU7CiAgICB3aWR0aDogMTZweDsKICAgIGhlaWdodDogMzJweDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgY3Vyc29yOiBldy1yZXNpemU7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIHRvdWNoLWFjdGlvbjogbm9uZTsKICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgei1pbmRleDogNDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpOwogICAgYm94LXNoYWRvdzogMCA0cHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMzUpOwp9CgoubWpyLXZpZGVvLXNlZWstaGFuZGxlOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI0KTsKfQoKLm1qci12aWRlby1zZWVrLWhhbmRsZS0taW46OmFmdGVyLAoubWpyLXZpZGVvLXNlZWstaGFuZGxlLS1vdXQ6OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogNTAlOwogICAgdG9wOiA1MCU7CiAgICB3aWR0aDogMnB4OwogICAgaGVpZ2h0OiAxOHB4OwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgNzAsIDcwLCAwLjk1KTsKICAgIGJvcmRlci1yYWRpdXM6IDJweDsKfQoKLm1qci12aWRlby1zZWVrLWhhbmRsZS0taW46OmFmdGVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzAsIDI1NSwgMTIwLCAwLjk1KTsKfQoKLm1qci12aWRlby1zZWVrLWhhbmRsZS0taW46OmJlZm9yZSwKLm1qci12aWRlby1zZWVrLWhhbmRsZS0tb3V0OjpiZWZvcmUgewogICAgY29udGVudDogIiI7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiA1MCU7CiAgICB3aWR0aDogMDsKICAgIGhlaWdodDogMDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKfQoKLm1qci12aWRlby1zZWVrLWhhbmRsZS0taW46OmJlZm9yZSB7CiAgICB0b3A6IDRweDsKICAgIGJvcmRlci1sZWZ0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItcmlnaHQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJvcmRlci1ib3R0b206IDZweCBzb2xpZCByZ2JhKDcwLCAyNTUsIDEyMCwgMC45NSk7Cn0KCi5tanItdmlkZW8tc2Vlay1oYW5kbGUtLW91dDo6YmVmb3JlIHsKICAgIGJvdHRvbTogNHB4OwogICAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJvcmRlci1yaWdodDogNXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYm9yZGVyLXRvcDogNnB4IHNvbGlkIHJnYmEoMjU1LCA3MCwgNzAsIDAuOTUpOwp9CgoubWpyLXZpZGVvLXNlZWstdGlja3MgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgdG9wOiAtMTZweDsKICAgIGhlaWdodDogMTJweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICBvcGFjaXR5OiAwLjk7Cn0KCi5tanItdmlkZW8tc2Vlay1sYWJlbHMgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgdG9wOiAtMzRweDsKICAgIGhlaWdodDogMTRweDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgbGluZS1oZWlnaHQ6IDE0cHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcyKTsKICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7CiAgICB0ZXh0LXNoYWRvdzogMCAxcHggMCByZ2JhKDAsIDAsIDAsIDAuNTUpOwp9CgoubWpyLXZpZGVvLXNlZWstbGFiZWwgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci12aWRlby1zZWVrLXBsYXloZWFkLWxhYmVsIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMTJweDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgIHBhZGRpbmc6IDFweCA2cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC41NSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45Mik7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBsaW5lLWhlaWdodDogMTRweDsKICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKfQoKLm1qci12aWRlby1zZWVrLW1hcmsgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAtMTBweDsKICAgIHdpZHRoOiAxNHB4OwogICAgaGVpZ2h0OiAyMHB4OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICBjdXJzb3I6IGV3LXJlc2l6ZTsKICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgdG91Y2gtYWN0aW9uOiBub25lOwogICAgei1pbmRleDogNDsKICAgIC0tbWpyLW1hcmstY29sb3I6IHJnYmEoMjU1LCA3MCwgNzAsIDAuOTUpOwp9CgoubWpyLXZpZGVvLXNlZWstbWFyay0taW4gewogICAgLS1tanItbWFyay1jb2xvcjogcmdiYSg3MCwgMjU1LCAxMjAsIDAuOTUpOwp9CgoubWpyLXZpZGVvLXNlZWstbWFyazo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogNTAlOwogICAgdG9wOiAwOwogICAgYm90dG9tOiAwOwogICAgd2lkdGg6IDJweDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1tYXJrLWNvbG9yKTsKICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCByZ2JhKDAsIDAsIDAsIDAuMzUpOwp9CgoubWpyLXZpZGVvLXNlZWstbWFyazo6YWZ0ZXIgewogICAgY29udGVudDogIiI7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IC01cHg7CiAgICBsZWZ0OiA1MCU7CiAgICB3aWR0aDogMDsKICAgIGhlaWdodDogMDsKICAgIGJvcmRlci1sZWZ0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItcmlnaHQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJvcmRlci1ib3R0b206IDZweCBzb2xpZCB2YXIoLS1tanItbWFyay1jb2xvcik7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7Cn0KCi5tanItdmlkZW8tc2Vlay1tYXJrLS1pbjo6YWZ0ZXIgewogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdmFyKC0tbWpyLW1hcmstY29sb3IpOwp9CgoubWpyLXZpZGVvLXNlZWstbWFyay0tb3V0OjphZnRlciB7CiAgICB0b3A6IGF1dG87CiAgICBib3R0b206IC01cHg7CiAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgYm9yZGVyLXRvcDogNnB4IHNvbGlkIHZhcigtLW1qci1tYXJrLWNvbG9yKTsKfQoKLm1qci12aWRlby1zZWVrLXBsYXloZWFkIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogLTEycHg7CiAgICB3aWR0aDogMnB4OwogICAgaGVpZ2h0OiAyNHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDIwMCwgNzAsIDAuOTUpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHJnYmEoMCwgMCwgMCwgMC4zNSk7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTFweCk7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciB7CiAgICBwb3NpdGlvbjogc3RhdGljOwogICAgbGVmdDogYXV0bzsKICAgIHJpZ2h0OiBhdXRvOwogICAgYm90dG9tOiBhdXRvOwogICAgb3BhY2l0eTogMTsKICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgd2lkdGg6IDEwMCU7CiAgICBtYXgtd2lkdGg6IG5vbmU7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOiAxNHB4OwogICAgYm9yZGVyLXJhZGl1czogMThweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTk2LCAyMDIsIDIxMCwgMC4xMik7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgdG9wIGxlZnQsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMyksIHRyYW5zcGFyZW50IDM0JSksCiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgxOTgsIDIwMywgMjEwLCAwLjAyNSksIHJnYmEoMTk4LCAyMDMsIDIxMCwgMC4wMDgpKSwKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTY1ZGVnLCByZ2JhKDE4LCAyMiwgMjgsIDAuODIpLCByZ2JhKDEyLCAxNSwgMjEsIDAuOSkpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCksCiAgICAgICAgMCAxMHB4IDMwcHggcmdiYSgwLCAwLCAwLCAwLjE0KTsKICAgIGJhY2tkcm9wLWZpbHRlcjogbm9uZTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBub25lOwogICAgZ2FwOiAxMnB4Owp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1idG4gewogICAgbWluLWhlaWdodDogMzhweDsKICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjEwLCAyMTQsIDIyMCwgMC4wNyksIHJnYmEoMjEwLCAyMTQsIDIyMCwgMC4wMikpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE5NCwgMjAxLCAyMDgsIDAuMTgpOwogICAgYm9yZGVyLXdpZHRoOiAxcHg7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIHRyYW5zZm9ybSAwLjEycyBlYXNlLAogICAgICAgIGJhY2tncm91bmQtY29sb3IgMC4xMnMgZWFzZSwKICAgICAgICBib3JkZXItY29sb3IgMC4xMnMgZWFzZSwKICAgICAgICBib3gtc2hhZG93IDAuMTJzIGVhc2U7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJ0bjpob3ZlciB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjIwLCAyMjQsIDIzMCwgMC4yNik7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSwKICAgICAgICAwIDhweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xNCk7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJ0bi5pcy1vbiB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDEwMCwgMTcwLCAyNTUsIDAuMiksIHJnYmEoMTAwLCAxNzAsIDI1NSwgMC4wOCkpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDEyMCwgMTg2LCAyNTUsIDAuNDIpOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHJnYmEoMTIwLCAxODYsIDI1NSwgMC4xMikgaW5zZXQ7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJ0biAucGkgewogICAgZm9udC1zaXplOiAxNHB4OwogICAgbGluZS1oZWlnaHQ6IDE7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1oZWFkLAoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1iYXItYWN0aW9ucyB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKSBhdXRvIG1pbm1heCgwLCAxZnIpOwogICAgZ2FwOiAxMnB4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLXN0YXR1cywKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLXNpZGUgewogICAgbWluLXdpZHRoOiAwOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDEwcHg7CiAgICBmbGV4LXdyYXA6IHdyYXA7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1jZW50ZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLWhlYWQgewogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLXNpZGUtLXJpZ2h0IHsKICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci10aW1lbGluZSB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIG1pbm1heCgwLCAxZnIpIGF1dG87CiAgICBnYXA6IDEycHg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgYm9yZGVyLXJhZGl1czogMTZweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIubWpyLXZpZGVvLWNvbnRyb2xzLS1hdWRpbyAubWpyLXZpZGVvLWJhci10aW1lbGluZSB7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgwLCAxZnIpIGF1dG8gYXV0bzsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyLm1qci12aWRlby1jb250cm9scy0tYXVkaW8gLm1qci12aWRlby1zZWVrLXdyYXAgewogICAgZ3JpZC1jb2x1bW46IDEgLyAtMTsKICAgIGdyaWQtcm93OiAxOwogICAgd2lkdGg6IDEwMCU7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhci5tanItdmlkZW8tY29udHJvbHMtLWF1ZGlvIC5tanItdmlkZW8tZ3JvdXAtLWluLAoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIubWpyLXZpZGVvLWNvbnRyb2xzLS1hdWRpbyAubWpyLXZpZGVvLWdyb3VwLS1vdXQgewogICAgZ3JpZC1yb3c6IDI7CiAgICB3aWR0aDogbWF4LWNvbnRlbnQ7CiAgICBtYXgtd2lkdGg6IDEwMCU7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLW1lZGlhLWJhZGdlIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgbWluLWhlaWdodDogMjhweDsKICAgIHBhZGRpbmc6IDAgMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSg3OCwgMjI0LCAxOTYsIDAuMTIpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSg3OCwgMjI0LCAxOTYsIDAuMjIpOwogICAgY29sb3I6IHJnYmEoMjIwLCAyNDcsIDI0MSwgMC45Nik7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXRpbWVncm91cCB7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7CiAgICBnYXA6IDhweDsKICAgIHBhZGRpbmc6IDVweCAxMHB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQ1KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXRpbWUsCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWZyYW1lIHsKICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7CiAgICBjb2xvcjogcmdiYSgyMjgsIDIzMCwgMjM0LCAwLjkyKTsKICAgIHRleHQtc2hhZG93OiBub25lOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1mcmFtZSB7CiAgICBtaW4td2lkdGg6IDk0cHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBwYWRkaW5nOiA1cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0NSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby10aW1lIHsKICAgIG1pbi13aWR0aDogYXV0bzsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXJhbmdlLS1zZWVrIHsKICAgIGhlaWdodDogMjJweDsKICAgIGFjY2VudC1jb2xvcjogcmdiYSgyMTQsIDIxOCwgMjI0LCAwLjkyKTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tcmFuZ2UtY291bnQgewogICAgY29sb3I6IHJnYmEoMjIyLCAyMjUsIDIzMCwgMC45NSk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMTk0LCAyMDEsIDIwOSwgMC4yNik7CiAgICBib3JkZXItd2lkdGg6IDAuOHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgxOTQsIDIwMSwgMjA5LCAwLjA4KTsKICAgIHRleHQtc2hhZG93OiBub25lOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1ncm91cCB7CiAgICBtaW4taGVpZ2h0OiAzNnB4OwogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDM1KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWdyb3VwLS1hZGp1c3QtbGVmdCwKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tZ3JvdXAtLWFkanVzdC1yaWdodCwKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tZ3JvdXAtLXNwZWVkIHsKICAgIGdhcDogOHB4Owp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1udW0gewogICAgbWluLWhlaWdodDogMzRweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDksIDEyLCAxNiwgMC41NSk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tdHJhbnNwb3J0IHsKICAgIGdhcDogMTBweDsKICAgIHBhZGRpbmc6IDZweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0NSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1idG4tLXBsYXkgewogICAgbWluLXdpZHRoOiA4OHB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tc2Vlay13cmFwIHsKICAgIG1pbi1oZWlnaHQ6IDQ0cHg7Cn0KCi5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLXNlZWstem9uZXMgewogICAgaGVpZ2h0OiAxMnB4Owp9CgoubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1zZWVrLWhhbmRsZSB7CiAgICB3aWR0aDogMThweDsKICAgIGhlaWdodDogMzRweDsKICAgIGJvcmRlci1yYWRpdXM6IDhweDsKfQoKLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tdm9sdW1lLXdyYXAgewogICAgcGFkZGluZzogMCA0cHg7Cn0KCi5tanItdmlkZW8tcmFuZ2UtLXZvbHVtZSB7CiAgICB3aWR0aDogOTBweDsKfQoKQG1lZGlhIChtYXgtd2lkdGg6IDk4MHB4KSB7CiAgICAubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1iYXItaGVhZCwKICAgIC5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlcmJhciAubWpyLXZpZGVvLWJhci1hY3Rpb25zLAogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLXRpbWVsaW5lIHsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgIH0KCiAgICAubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1iYXItY2VudGVyLAogICAgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyYmFyIC5tanItdmlkZW8tYmFyLXNpZGUtLXJpZ2h0IHsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIH0KCiAgICAubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1iYXItdGltZWxpbmUgewogICAgICAgIGdhcDogMTBweDsKICAgIH0KCiAgICAubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby10cmFuc3BvcnQgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBib3JkZXItcmFkaXVzOiAxNnB4OwogICAgfQp9CgovKiA9PT09PT09PT09IENvbnRleHQgTWVudSBDb21wb25lbnQgPT09PT09PT09PSAqLwoubWpyLWNvbnRleHQtbWVudSB7CiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1tZW51LWJnKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvcik7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBib3gtc2hhZG93OiAwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgIG1pbi13aWR0aDogMjAwcHg7CiAgICAvKiBBYm92ZSB2aWV3ZXIgb3ZlcmxheSAoMTAwMDEpIGFuZCBNRlYgZGlhbG9nICgxMDAwMCkgKi8KICAgIHotaW5kZXg6IDEwMDAyOwogICAgZGlzcGxheTogbm9uZTsKICAgIHBhZGRpbmc6IDRweCAwOwogICAgYW5pbWF0aW9uOiBtanItY29udGV4dC1tZW51LWluIDAuMTVzIGVhc2Utb3V0Owp9CgoubWpyLWNvbnRleHQtbWVudSwKLm1qci1jb250ZXh0LW1lbnUgKiB7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Owp9CgpAa2V5ZnJhbWVzIG1qci1jb250ZXh0LW1lbnUtaW4gewogICAgZnJvbSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTVweCk7CiAgICB9CiAgICB0byB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICB9Cn0KCi5tanItY29udGV4dC1tZW51LWl0ZW0gewogICAgYXBwZWFyYW5jZTogbm9uZTsKICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAgIHBhZGRpbmc6IDhweCAxNHB4OwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICB3aWR0aDogMTAwJTsKICAgIGJvcmRlcjogMDsKICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICBtYXJnaW46IDA7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBjb2xvcjogdmFyKC0tZmctY29sb3IpOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICBmb250LXdlaWdodDogNDAwOwogICAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgIHRleHQtdHJhbnNmb3JtOiBub25lOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1czsKICAgIHVzZXItc2VsZWN0OiBub25lOwp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtOjotbW96LWZvY3VzLWlubmVyIHsKICAgIGJvcmRlcjogMDsKICAgIHBhZGRpbmc6IDA7Cn0KCi5tanItY29udGV4dC1tZW51LWl0ZW06aG92ZXIsCi5tanItY29udGV4dC1tZW51LWl0ZW06Zm9jdXMtdmlzaWJsZSB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1pbnB1dC1iZyk7CiAgICBvdXRsaW5lOiBub25lOwp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtLmlzLXRvbmUtZ3JhcGgtbWFwIHsKICAgIGNvbG9yOiAjZjVjNTQyOwp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtLmlzLXRvbmUtcmVuYW1lIHsKICAgIGNvbG9yOiAjNWRhOWZmOwp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtLmlzLXRvbmUtZGVsZXRlIHsKICAgIGNvbG9yOiAjZmY1ZjVmOwp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtLmlzLXRvbmUtZmxvYXRpbmctdmlld2VyIHsKICAgIGNvbG9yOiAjNWZkMzhkOwp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtLmlzLXRvbmUtZ3JhcGgtbWFwOmhvdmVyLAoubWpyLWNvbnRleHQtbWVudS1pdGVtLmlzLXRvbmUtZ3JhcGgtbWFwOmZvY3VzLXZpc2libGUgewogICAgYmFja2dyb3VuZDogcmdiYSgyNDUsIDE5NywgNjYsIDAuMTQpOwp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtLmlzLXRvbmUtcmVuYW1lOmhvdmVyLAoubWpyLWNvbnRleHQtbWVudS1pdGVtLmlzLXRvbmUtcmVuYW1lOmZvY3VzLXZpc2libGUgewogICAgYmFja2dyb3VuZDogcmdiYSg5MywgMTY5LCAyNTUsIDAuMTQpOwp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtLmlzLXRvbmUtZGVsZXRlOmhvdmVyLAoubWpyLWNvbnRleHQtbWVudS1pdGVtLmlzLXRvbmUtZGVsZXRlOmZvY3VzLXZpc2libGUgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDk1LCA5NSwgMC4xNCk7Cn0KCi5tanItY29udGV4dC1tZW51LWl0ZW0uaXMtdG9uZS1mbG9hdGluZy12aWV3ZXI6aG92ZXIsCi5tanItY29udGV4dC1tZW51LWl0ZW0uaXMtdG9uZS1mbG9hdGluZy12aWV3ZXI6Zm9jdXMtdmlzaWJsZSB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDk1LCAyMTEsIDE0MSwgMC4xNCk7Cn0KCi5tanItY29udGV4dC1tZW51LWl0ZW0uaXMtZGlzYWJsZWQgewogICAgY3Vyc29yOiBkZWZhdWx0OwogICAgb3BhY2l0eTogMC40NTsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy1kaXNhYmxlZDpob3ZlciwKLm1qci1jb250ZXh0LW1lbnUtaXRlbS5pcy1kaXNhYmxlZDpmb2N1cy12aXNpYmxlIHsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Owp9CgoubWpyLWNvbnRleHQtbWVudS1zZXBhcmF0b3IgewogICAgaGVpZ2h0OiAxcHg7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ib3JkZXItY29sb3IpOwogICAgbWFyZ2luOiA0cHggMDsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS1sZWZ0LAoubWpyLWNvbnRleHQtbWVudS1pdGVtLXJpZ2h0IHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKfQoKLm1qci1jb250ZXh0LW1lbnUtaXRlbS1sZWZ0IHsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWNvbnRleHQtbWVudS1pdGVtLXJpZ2h0IHsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgbWFyZ2luLWxlZnQ6IDE2cHg7Cn0KCi5tanItY29udGV4dC1tZW51LWl0ZW0tbGVmdCBpIHsKICAgIHdpZHRoOiAxNnB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgb3BhY2l0eTogMC44MjsKfQoKLm1qci1jb250ZXh0LW1lbnUtaGludCB7CiAgICBvcGFjaXR5OiAwLjU4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci1jb250ZXh0LW1lbnUtc3VibWVudS1hcnJvdyB7CiAgICBvcGFjaXR5OiAwLjcyOwogICAgZm9udC1zaXplOiAxNnB4OwogICAgbGluZS1oZWlnaHQ6IDE7Cn0KCi5tanItYWRkLXRvLWNvbGxlY3Rpb24tbWVudSB7CiAgICBtaW4td2lkdGg6IDI2MHB4OwogICAgbWF4LXdpZHRoOiBtaW4oMzYwcHgsIGNhbGMoMTAwdncgLSAxNnB4KSk7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTJweCk7Cn0KCi5tanItY29udGV4dC1tZW51LXRpdGxlIHsKICAgIHBhZGRpbmc6IDhweCAxNHB4IDEwcHg7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yKTsKICAgIG9wYWNpdHk6IDAuOTI7Cn0KCi5tanItY29udGV4dC1tZW51LW5vdGUgewogICAgcGFkZGluZzogMTBweCAxNHB4OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnKSA3MiUsIHZhcigtLW1qci1tdXRlZCkpOwogICAgbGluZS1oZWlnaHQ6IDEuNDU7Cn0KCi5tanItZ3JpZC1wb3BvdmVyLAoubWpyLXZpZXdlci1wb3BvdmVyIHsKICAgIG1pbi13aWR0aDogMjUwcHg7CiAgICBtYXgtd2lkdGg6IG1pbigzNjBweCwgY2FsYygxMDB2dyAtIDE2cHgpKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1zbSk7CiAgICBib3gtc2hhZG93OiAwIDEycHggMjhweCByZ2JhKDAsIDAsIDAsIDAuMzUpOwp9CgpAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkgewogICAgLm1qci12aWV3ZXItb3ZlcmxheSAqLAogICAgLm1qci12aWRlby1jb250cm9scywKICAgIC5tanItY29udGV4dC1tZW51IHsKICAgICAgICBhbmltYXRpb246IG5vbmUgIWltcG9ydGFudDsKICAgICAgICB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7CiAgICAgICAgc2Nyb2xsLWJlaGF2aW9yOiBhdXRvICFpbXBvcnRhbnQ7CiAgICB9Cn0KCi8qIEhpZGUgaGVhZGVyICh0b29sYmFyKSB3aGVuIHZpZXdlciBvdmVybGF5IGlzIGluIGZ1bGxzY3JlZW4gKi8KLm1qci12aWV3ZXItb3ZlcmxheTpmdWxsc2NyZWVuIC5tanItdmlld2VyLWhlYWRlciB7CiAgICBkaXNwbGF5OiBub25lOwp9CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBNYWpvb3IgRmxvYXRpbmcgVmlld2VyIChNRlYpIC0gcG9ydGFsZWQgdG8gZG9jdW1lbnQuYm9keQogICBSZWRlY2xhcmVzIENTUyB2YXJpYWJsZXMgc28gdGhlIHBhbmVsIHdvcmtzIG91dHNpZGUgLm1qci1hc3NldHMtbWFuYWdlcgogICAoc2FtZSBwYXR0ZXJuIGFzIC5tanItcG9wb3ZlcikKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCi5tanItbWZ2IHsKICAgIC0tbWpyLXN1cmZhY2UtMDogdmFyKC0tY29udGVudC1iZywgIzFlMWUxZSk7CiAgICAtLW1qci1zdXJmYWNlLTE6IHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpOwogICAgLS1tanItc3VyZmFjZS0yOiB2YXIoLS1jb21meS1tZW51LXNlY29uZGFyeS1iZywgIzMzMyk7CiAgICAtLW1qci1ib3JkZXI6IHZhcigtLWJvcmRlci1jb2xvciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7CiAgICAtLW1qci1tdXRlZDogdmFyKC0tZGVzY3JpcC10ZXh0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKTsKICAgIC0tbWpyLWFjY2VudDogdmFyKC0tY29tZnktYWNjZW50LCAjNWZiM2ZmKTsKICAgIC0tbWpyLXN0YXR1cy1zdWNjZXNzOiB2YXIoLS1jb21meS1zdGF0dXMtc3VjY2VzcywgIzRjYWY1MCk7CgogICAgZm9udC1mYW1pbHk6IHZhcigKICAgICAgICAtLWNvbWZ5LWZvbnQsCiAgICAgICAgdWktc2Fucy1zZXJpZiwKICAgICAgICBzeXN0ZW0tdWksCiAgICAgICAgLWFwcGxlLXN5c3RlbSwKICAgICAgICAiU2Vnb2UgVUkiLAogICAgICAgIFJvYm90bywKICAgICAgICBBcmlhbCwKICAgICAgICBzYW5zLXNlcmlmCiAgICApOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgbGluZS1oZWlnaHQ6IDEuMzU7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgdmFyKC0taW5wdXQtdGV4dCwgI2RkZCkpOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKCiAgICAvKiBWaXN1YWwgY2hyb21lICovCiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgYm94LXNoYWRvdzoKICAgICAgICAwIDhweCAzMnB4IHJnYmEoMCwgMCwgMCwgMC41NSksCiAgICAgICAgMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKfQoKLm1qci1tZnYgKiB7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Owp9CgpodG1sLm1qci1tZnYtcG9wb3V0LWRvY3VtZW50IHsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgcmFkaWFsLWdyYWRpZW50KAogICAgICAgICAgICAxMjAwcHggNDIwcHggYXQgNTAlIDAlLAogICAgICAgICAgICBjb2xvci1taXgoCiAgICAgICAgICAgICAgICBpbiBzcmdiLAogICAgICAgICAgICAgICAgdmFyKC0tcHJpbWFyeS1iYWNrZ3JvdW5kLCB2YXIoLS1jb21meS1hY2NlbnQsICM1ZmIzZmYpKSAxMCUsCiAgICAgICAgICAgICAgICB0cmFuc3BhcmVudAogICAgICAgICAgICApLAogICAgICAgICAgICB0cmFuc3BhcmVudCA2MiUKICAgICAgICApLAogICAgICAgIGxpbmVhci1ncmFkaWVudCgKICAgICAgICAgICAgMTgwZGVnLAogICAgICAgICAgICBjb2xvci1taXgoCiAgICAgICAgICAgICAgICBpbiBzcmdiLAogICAgICAgICAgICAgICAgdmFyKC0taW50ZXJmYWNlLXBhbmVsLXN1cmZhY2UsIHZhcigtLWNvbnRlbnQtYmcsICMxNjE5MWYpKSA4MiUsCiAgICAgICAgICAgICAgICAjMDAwIDE4JQogICAgICAgICAgICApLAogICAgICAgICAgICBjb2xvci1taXgoCiAgICAgICAgICAgICAgICBpbiBzcmdiLAogICAgICAgICAgICAgICAgdmFyKC0taW50ZXJmYWNlLW1lbnUtc3VyZmFjZSwgdmFyKC0tY29tZnktbWVudS1iZywgIzFmMjIyNykpIDg0JSwKICAgICAgICAgICAgICAgICMwMDAgMTYlCiAgICAgICAgICAgICkKICAgICAgICApOwp9Cgpib2R5Lm1qci1tZnYtcG9wb3V0LWJvZHkgewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCiNtanItbWZ2LXBvcG91dC1yb290LAoubWpyLW1mdi1wb3BvdXQtcm9vdCB7CiAgICBpc29sYXRpb246IGlzb2xhdGU7Cn0KCi8qIC0tIEhlYWRlciAoZHJhZyBoYW5kbGUpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5tanItbWZ2LWhlYWRlciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSk7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBjdXJzb3I6IG1vdmU7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgZ2FwOiA2cHg7CiAgICBtaW4taGVpZ2h0OiAzNHB4Owp9CgoubWpyLW1mdi1oZWFkZXItdGl0bGUgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMHB4OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIG9wYWNpdHk6IDAuNzg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICBmbGV4OiAxOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMjhweDsKfQoKLyogLS0gVG9vbGJhciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoubWpyLW1mdi10b29sYmFyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDUwJSwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgNTAlKTsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgbWluLWhlaWdodDogMzZweDsKICAgIGZsZXgtd3JhcDogbm93cmFwOwogICAgb3ZlcmZsb3cteDogYXV0bzsKICAgIG92ZXJmbG93LXk6IGhpZGRlbjsKICAgIHNjcm9sbGJhci13aWR0aDogbm9uZTsKfQoubWpyLW1mdi10b29sYmFyOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICBkaXNwbGF5OiBub25lOwp9CgoubWpyLW1mdi10b29sYmFyLXNlcCB7CiAgICB3aWR0aDogMXB4OwogICAgaGVpZ2h0OiAxOHB4OwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLWJvcmRlcik7CiAgICBtYXJnaW46IDAgM3B4OwogICAgZmxleC1zaHJpbms6IDA7Cn0KCi5tanItbWZ2LXByb2dyZXNzIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBoZWlnaHQ6IDIycHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlcik7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgNzIlLCAjMDAwIDI4JSk7CiAgICBmbGV4LXNocmluazogMDsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKLm1qci1tZnYtcHJvZ3Jlc3MuaXMtY2xpY2thYmxlIHsKICAgIGN1cnNvcjogcG9pbnRlcjsKfQoKLm1qci1tZnYtcHJvZ3Jlc3MuaXMtY2xpY2thYmxlOmhvdmVyIHsKICAgIGZpbHRlcjogYnJpZ2h0bmVzcygxLjAzKTsKfQoKLm1qci1tZnYtcHJvZ3Jlc3MtYmFyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDA7CiAgICB3aWR0aDogMCU7CiAgICB0cmFuc2l0aW9uOiB3aWR0aCA3MG1zIGVhc2UtaW4tb3V0Owp9CgoubWpyLW1mdi1wcm9ncmVzcy1iYXItLW5vZGVzIHsKICAgIHRvcDogMDsKICAgIGhlaWdodDogNTAlOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcykgNjglLCAjMGIzNTEzIDMyJSk7Cn0KCi5tanItbWZ2LXByb2dyZXNzLWJhci0tc3RlcHMgewogICAgdG9wOiA1MCU7CiAgICBoZWlnaHQ6IDUwJTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA2NCUsICMwYjIzNDAgMzYlKTsKfQoKLm1qci1tZnYtcHJvZ3Jlc3MuaXMtZXJyb3IgLm1qci1tZnYtcHJvZ3Jlc3MtYmFyLS1ub2RlcywKLm1qci1tZnYtcHJvZ3Jlc3MuaXMtZXJyb3IgLm1qci1tZnYtcHJvZ3Jlc3MtYmFyLS1zdGVwcyB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgI2Q5NTM0ZiA3OCUsICM0YTE0MTQgMjIlKTsKfQoKLm1qci1tZnYtcHJvZ3Jlc3Mtb3ZlcmxheSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xOCksIHJnYmEoMCwgMCwgMCwgMC4xOCkpOwogICAgbWl4LWJsZW5kLW1vZGU6IHNjcmVlbjsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoubWpyLW1mdi1wcm9ncmVzcy10ZXh0IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDI7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGhlaWdodDogMTAwJTsKICAgIHBhZGRpbmc6IDAgOHB4OwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIHRleHQtc2hhZG93OiAwIDAgMnB4IHJnYmEoMCwgMCwgMCwgMC45KTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cn0KCi5tanItbWZ2LXBpbi1ncm91cCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiAycHg7CiAgICBmbGV4LXNocmluazogMDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7Cn0KLm1qci1tZnYtcGluLWJ0biB7CiAgICB3aWR0aDogMjZweDsKICAgIGhlaWdodDogMjZweDsKICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIpOwogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMik7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgcGFkZGluZzogMDsKICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yIDEyMG1zIGVhc2UsCiAgICAgICAgYm9yZGVyLWNvbG9yIDEyMG1zIGVhc2UsCiAgICAgICAgY29sb3IgMTIwbXMgZWFzZSwKICAgICAgICBib3gtc2hhZG93IDEyMG1zIGVhc2U7Cn0KLm1qci1tZnYtcGluLWJ0bjpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA0NSUsIHZhcigtLW1qci1ib3JkZXIpKTsKICAgIGJhY2tncm91bmQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4MCUsIHZhcigtLW1qci1hY2NlbnQpIDglKTsKfQoubWpyLW1mdi1waW4tYnRuLmlzLXBpbm5lZCB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1OCUsICNmZmZmZmYgMTIlKTsKICAgIGJhY2tncm91bmQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA0MiUsIHZhcigtLW1qci1hY2NlbnQpIDU4JSk7CiAgICBjb2xvcjogI2VlZjdmZjsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMjQlLCB0cmFuc3BhcmVudCk7Cn0KCi8qIC0tIFBpbiBncm91cDogbm93IGEgZHJvcGRvd24gbWVudSAoZGlzcGxheTpub25lIGJ5IGRlZmF1bHQsIGZsZXggd2hlbiAuaXMtb3BlbikgLS0gKi8KLm1qci1tZnYtcGluLWdyb3VwIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAycHg7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IGNhbGMoMTAwJSArIDRweCk7CiAgICBsZWZ0OiAwOwogICAgei1pbmRleDogMTAwMTA7CiAgICBtaW4td2lkdGg6IDcwcHg7CiAgICBwYWRkaW5nOiA0cHg7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1tZW51LWJnLCAjMmEyYTJhKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgYm94LXNoYWRvdzogMCA4cHggMjRweCByZ2JhKDAsIDAsIDAsIDAuNTUpOwp9Ci5tanItbWZ2LXBpbi1ncm91cC5pcy1vcGVuIHsKICAgIGRpc3BsYXk6IGZsZXg7Cn0KLm1qci1tZnYtcGluLWJ0biB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDMwcHg7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgcGFkZGluZzogMCAxMHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBiYWNrZ3JvdW5kIDEyMG1zIGVhc2UsCiAgICAgICAgYm9yZGVyLWNvbG9yIDEyMG1zIGVhc2UsCiAgICAgICAgY29sb3IgMTIwbXMgZWFzZTsKfQoubWpyLW1mdi1waW4tYnRuOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAzNSUsIHRyYW5zcGFyZW50KTsKfQoubWpyLW1mdi1waW4tYnRuLmlzLXBpbm5lZCB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1OCUsICNmZmZmZmYgMTIlKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yLCAjMzMzKSA0MiUsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpIDU4JSk7CiAgICBjb2xvcjogI2VlZjdmZjsKfQoKLyogLS0gSWNvbiBEcm9wZG93biBjb21wb25lbnQgKC5tanItbWZ2LWlkcm9wKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLm1qci1tZnYtaWRyb3AgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZmxleC1zaHJpbms6IDA7Cn0KCi5tanItbWZ2LWlkcm9wLW1lbnUgewogICAgZGlzcGxheTogbm9uZTsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDJweDsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHotaW5kZXg6IDEwMDEwOwogICAgbWluLXdpZHRoOiAxMTBweDsKICAgIHBhZGRpbmc6IDRweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LW1lbnUtYmcsICMyYTJhMmEpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBib3gtc2hhZG93OiAwIDhweCAyNHB4IHJnYmEoMCwgMCwgMCwgMC41NSk7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9Ci5tanItbWZ2LWlkcm9wLW1lbnUuaXMtb3BlbiB7CiAgICBkaXNwbGF5OiBmbGV4Owp9CgoubWpyLW1mdi1pZHJvcC1pdGVtIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICB3aWR0aDogMTAwJTsKICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgYmFja2dyb3VuZDogbm9uZTsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGNvbG9yOiB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMXMgZWFzZTsKfQoubWpyLW1mdi1pZHJvcC1pdGVtOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7Cn0KLm1qci1tZnYtaWRyb3AtaXRlbS5pcy1zZWxlY3RlZCB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDk1LCAxNzksIDI1NSwgMC4xNik7CiAgICBjb2xvcjogI2E4ZDhmZjsKfQoubWpyLW1mdi1pZHJvcC10cmlnZ2VyW2FyaWEtZXhwYW5kZWQ9InRydWUiXSB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpICFpbXBvcnRhbnQ7Cn0KLyogQ2hhbm5lbCB0cmlnZ2VyOiBzbGlnaHRseSB3aWRlciB0byBmaXQgIlJHQiIgKi8KLm1qci1tZnYtY2gtbGFiZWwgewogICAgZm9udC1zaXplOiAxMnB4OwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDRlbTsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgovKiBUb29sYmFyIGljb24tYnV0dG9uIHBvcG92ZXJzIChjaGFubmVsLCBndWlkZXMsIHBpbiwgZm9ybWF0IC0gc29ydC1zdHlsZSBjb250ZXh0IG1lbnVzKSAqLwoubWpyLW1mdi1jaC1wb3BvdmVyLAoubWpyLW1mdi1ndWlkZXMtcG9wb3ZlciwKLm1qci1tZnYtcGluLXBvcG92ZXIsCi5tanItbWZ2LWZvcm1hdC1wb3BvdmVyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIG1pbi13aWR0aDogMTIwcHg7CiAgICBwYWRkaW5nOiA2cHg7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcsIDAuNXJlbSk7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tanItc3VyZmFjZS0xLCB2YXIoLS1jb21meS1tZW51LWJnLCAjMmEyYTJhKSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDI0cHggcmdiYSgwLCAwLCAwLCAwLjU1KTsKICAgIHotaW5kZXg6IDEwMDEwOwogICAgZGlzcGxheTogbm9uZTsKfQoubWpyLW1mdi1jaC1wb3BvdmVyLmlzLW9wZW4sCi5tanItbWZ2LWd1aWRlcy1wb3BvdmVyLmlzLW9wZW4sCi5tanItbWZ2LXBpbi1wb3BvdmVyLmlzLW9wZW4sCi5tanItbWZ2LWZvcm1hdC1wb3BvdmVyLmlzLW9wZW4gewogICAgZGlzcGxheTogYmxvY2s7Cn0KLyogVG9vbGJhciBpY29uIGltYWdlcyAtIGNoIGljb24gaXMgYmxhY2sgKGludmVydGVkKSwgZ3VpZGVzIGljb24gaXMgbmF0aXZlIHdoaXRlICovCi5tanItbWZ2LWNoLWljb24gewogICAgd2lkdGg6IDE4cHg7CiAgICBoZWlnaHQ6IDE4cHg7CiAgICBmaWx0ZXI6IGludmVydCgxKTsKICAgIG9wYWNpdHk6IDAuODU7CiAgICBkaXNwbGF5OiBibG9jazsKfQoubWpyLW1mdi1ndWlkZXMtaWNvbiB7CiAgICB3aWR0aDogMThweDsKICAgIGhlaWdodDogMThweDsKICAgIG9wYWNpdHk6IDAuODU7CiAgICBkaXNwbGF5OiBibG9jazsKfQoubWpyLW1mdi1jaC10cmlnZ2VyW2FyaWEtZXhwYW5kZWQ9InRydWUiXSwKLm1qci1tZnYtZ3VpZGVzLXRyaWdnZXJbYXJpYS1leHBhbmRlZD0idHJ1ZSJdLAoubWpyLW1mdi1waW4tdHJpZ2dlclthcmlhLWV4cGFuZGVkPSJ0cnVlIl0sCi5tanItbWZ2LWZvcm1hdC10cmlnZ2VyW2FyaWEtZXhwYW5kZWQ9InRydWUiXSB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpICFpbXBvcnRhbnQ7Cn0KLyogUGluIHNsb3QgYWN0aXZlIHN0YXRlICovCi5tanItbWZ2LXBpbi1wb3BvdmVyIC5tanItbWVudS1pdGVtLmlzLXBpbm5lZCB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDk1LCAxNzksIDI1NSwgMC4xNik7CiAgICBjb2xvcjogI2E4ZDhmZjsKfQoubWpyLW1mdi1waW4tcG9wb3ZlciAubWpyLW1lbnUtaXRlbS5pcy1waW5uZWQgLm1qci1tZW51LWl0ZW0tY2hlY2sgewogICAgb3BhY2l0eTogMSAhaW1wb3J0YW50Owp9Ci8qIEZvcm1hdCBwb3BvdmVyOiBzZXBhcmF0b3IgKyBvcGFjaXR5IHNsaWRlciByb3cgKi8KLm1qci1tZnYtZm9ybWF0LXNlcCB7CiAgICBoZWlnaHQ6IDFweDsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSk7CiAgICBtYXJnaW46IDRweCAycHg7Cn0KLm1qci1tZnYtZm9ybWF0LXNsaWRlci1yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDZweDsKICAgIHBhZGRpbmc6IDRweCA4cHggMnB4Owp9Ci5tanItbWZ2LWZvcm1hdC1zbGlkZXItbGFiZWwgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHZhcigtLWlucHV0LXRleHQsICNkZGQpOwogICAgb3BhY2l0eTogMC42NTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmbGV4LXNocmluazogMDsKfQoubWpyLW1mdi1mb3JtYXQtcG9wb3ZlciBpbnB1dFt0eXBlPSJyYW5nZSJdIHsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDcwcHg7CiAgICBhY2NlbnQtY29sb3I6IHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpOwp9Ci5tanItbWZ2LWZvcm1hdC1wb3BvdmVyIC5tanItbWZ2LXRvb2xiYXItcmFuZ2Utb3V0IHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGNvbG9yOiB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKTsKICAgIG9wYWNpdHk6IDAuNjU7CiAgICBtaW4td2lkdGg6IDMwcHg7CiAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgIGZsZXgtc2hyaW5rOiAwOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuIHsKICAgIHdpZHRoOiAzMHB4OwogICAgaGVpZ2h0OiAzMHB4OwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBib3JkZXItcmFkaXVzOiA3cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyKTsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTIpOwogICAgY29sb3I6IHZhcigtLWNvbnRlbnQtZmcsICNkZGQpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgcGFkZGluZzogMDsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgdHJhbnNpdGlvbjoKICAgICAgICB0cmFuc2Zvcm0gMTIwbXMgZWFzZSwKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yIDEyMG1zIGVhc2UsCiAgICAgICAgYm9yZGVyLWNvbG9yIDEyMG1zIGVhc2UsCiAgICAgICAgY29sb3IgMTIwbXMgZWFzZSwKICAgICAgICBib3gtc2hhZG93IDEyMG1zIGVhc2U7Cn0KCi5tanItbWZ2IC5tanItaWNvbi1idG46aG92ZXIgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNDUlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgODAlLCB2YXIoLS1tanItYWNjZW50KSA4JSk7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7Cn0KCi5tanItbWZ2IC5tanItaWNvbi1idG46Zm9jdXMtdmlzaWJsZSB7CiAgICBvdXRsaW5lOiBub25lOwogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgNTglLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAycHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDI0JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuIC5waSB7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIG9wYWNpdHk6IDAuOTsKfQoKLyogVW5pdmVyc2FsIGFjdGl2ZSBoaWdobGlnaHQgLSBhbnkgYXJpYS1wcmVzc2VkPSJ0cnVlIiBidXR0b24gZ2V0cyBhY2NlbnQgZ2xvdy4KICAgUGxhY2VkIGJlZm9yZSB0aGUgY29sb3JlZCBhY3RpdmUgY2xhc3NlcyBzbyB0aGV5IGNhbiBvdmVycmlkZSB3aXRoIHRoZWlyIG93biBjb2xvci4gKi8KLm1qci1tZnYgLm1qci1pY29uLWJ0blthcmlhLXByZXNzZWQ9InRydWUiXSB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoOTUsIDE3OSwgMjU1LCAwLjU1KTsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yLCAjMzMzKSA4MCUsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpIDE1JSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpIDI1JSwgdHJhbnNwYXJlbnQpOwp9Ci5tanItbWZ2IC5tanItaWNvbi1idG5bYXJpYS1wcmVzc2VkPSJ0cnVlIl0gLnBpIHsKICAgIG9wYWNpdHk6IDE7Cn0KCi5tanItbWZ2IC5tanItaWNvbi1idG4ubWpyLWxpdmUtYWN0aXZlIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcykgNjAlLCB2YXIoLS1tanItYm9yZGVyKSk7CiAgICBjb2xvcjogdmFyKC0tbWpyLXN0YXR1cy1zdWNjZXNzKTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4MCUsIHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcykgMTIlKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy1zdWNjZXNzKSAyNSUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1tZnYgLm1qci1pY29uLWJ0bi5tanItbGl2ZS1hY3RpdmUgLnBpIHsKICAgIG9wYWNpdHk6IDE7Cn0KCi5tanItbWZ2IC5tanItaWNvbi1idG4ubWpyLXByZXZpZXctYWN0aXZlIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDYwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgY29sb3I6IHZhcigtLW1qci1hY2NlbnQpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDgwJSwgdmFyKC0tbWpyLWFjY2VudCkgMTIlKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCkgMjUlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWZ2IC5tanItaWNvbi1idG4ubWpyLXByZXZpZXctYWN0aXZlIC5waSB7CiAgICBvcGFjaXR5OiAxOwp9CgoubWpyLW1mdiAubWpyLWljb24tYnRuLm1qci1ub2Rlc3RyZWFtLWFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZjk4MDApIDYwJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgY29sb3I6IHZhcigtLW1qci1zdGF0dXMtd2FybmluZywgI2ZmOTgwMCk7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoCiAgICAgICAgaW4gc3JnYiwKICAgICAgICB2YXIoLS1tanItc3VyZmFjZS0yKSA4MCUsCiAgICAgICAgdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCAjZmY5ODAwKSAxMiUKICAgICk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtd2FybmluZywgI2ZmOTgwMCkgMjUlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWZ2IC5tanItaWNvbi1idG4ubWpyLW5vZGVzdHJlYW0tYWN0aXZlIC5waSB7CiAgICBvcGFjaXR5OiAxOwp9CgovKiBQb3AtaW4gbW9kZSAodmlld2VyIHBvcHBlZCBvdXQpOiByYWlzZSBidXR0b24gY29udHJhc3QvYnJpZ2h0bmVzcyAqLwoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgewogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDE4MGRlZywKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgOTIlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgOTIlLCByZ2JhKDAsIDAsIDAsIDAuMTgpKQogICAgKTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc0JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KSk7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KSwKICAgICAgICAwIDI0cHggNTZweCByZ2JhKDAsIDAsIDAsIDAuNDIpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1tZnYtaGVhZGVyIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDg4JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSksCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDkwJSwgcmdiYSgwLCAwLCAwLCAwLjI0KSkKICAgICk7CiAgICBib3JkZXItYm90dG9tLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNzglLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQpKTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItbWZ2LWhlYWRlci10aXRsZSB7CiAgICBvcGFjaXR5OiAwLjk4OwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZWVmNGZmKSA5NCUsICNmZmZmZmYgNiUpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1tZnYtdG9vbGJhciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA4OCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCkpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA5MCUsIHJnYmEoMCwgMCwgMCwgMC4yNCkpCiAgICApOwogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc4JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi10b29sYmFyLXNlcCB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNzglLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItbWZ2LXByb2dyZXNzIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDgyJSwgIzBhMTExOCAxOCUpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA5MiUsICMwMDAgOCUpCiAgICApOwogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc4JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1wcm9ncmVzcy10ZXh0IHsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY29udGVudC1mZywgI2VlZjRmZikgOTQlLCAjZmZmZmZmIDYlKTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItbWZ2LWNvbnRlbnQgewogICAgYmFja2dyb3VuZDoKICAgICAgICByYWRpYWwtZ3JhZGllbnQoCiAgICAgICAgICAgIGNpcmNsZSBhdCB0b3AsCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAxMCUsIHRyYW5zcGFyZW50KSAwJSwKICAgICAgICAgICAgdHJhbnNwYXJlbnQgNDIlCiAgICAgICAgKSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCkgODIlLCAjMDAwIDE4JSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLWljb24tYnRuIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc2JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KSk7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4NiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA5MiUsIHJnYmEoMCwgMCwgMCwgMC4xOCkpCiAgICApOwogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZGRkKSA5MiUsICNmZmZmZmYgOCUpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KSwKICAgICAgICAwIDhweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xOCk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLWljb24tYnRuOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDUyJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDE4MGRlZywKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTglLCB2YXIoLS1tanItYWNjZW50KSA0MiUpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA2MiUsIHZhcigtLW1qci1hY2NlbnQpIDM4JSkKICAgICk7CiAgICBjb2xvcjogI2Y0ZjhmZiAhaW1wb3J0YW50Owp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1pY29uLWJ0biAucGkgewogICAgb3BhY2l0eTogMTsKICAgIGNvbG9yOiBpbmhlcml0ICFpbXBvcnRhbnQ7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLWljb24tYnRuLm1qci1saXZlLWFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MpIDYwJSwgI2ZmZmZmZiA0MCUpOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDE4MGRlZywKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy1zdWNjZXNzKSA2MiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXN1Y2Nlc3MpIDM2JSwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgNjQlKQogICAgKTsKICAgIGNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSwKICAgICAgICAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcykgMjQlLCB0cmFuc3BhcmVudCksCiAgICAgICAgMCAwIDE4cHggcmdiYSg3NiwgMTc1LCA4MCwgMC4xOCk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLWljb24tYnRuLm1qci1wcmV2aWV3LWFjdGl2ZSB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1OCUsICNmZmZmZmYgNDIlKTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDYyJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSksCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDM2JSwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgNjQlKQogICAgKTsKICAgIGNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSwKICAgICAgICAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDI0JSwgdHJhbnNwYXJlbnQpLAogICAgICAgIDAgMCAxOHB4IHJnYmEoOTUsIDE3OSwgMjU1LCAwLjE4KTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItaWNvbi1idG4ubWpyLW5vZGVzdHJlYW0tYWN0aXZlIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtd2FybmluZywgI2ZmOTgwMCkgNTglLCAjZmZmZmZmIDQyJSk7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZjk4MDApIDYyJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSksCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdGF0dXMtd2FybmluZywgI2ZmOTgwMCkgMzYlLCB2YXIoLS1tanItc3VyZmFjZS0xKSA2NCUpCiAgICApOwogICAgY29sb3I6ICNmZmZmZmYgIWltcG9ydGFudDsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpLAogICAgICAgIDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCAjZmY5ODAwKSAyNCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAwIDAgMThweCByZ2JhKDI1NSwgMTUyLCAwLCAwLjE4KTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItbWZ2LXBpbi1idG4gewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWJvcmRlcikgNzYlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpKTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDg0JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSksCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDkyJSwgcmdiYSgwLCAwLCAwLCAwLjE4KSkKICAgICk7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcsICNkZGQpIDkyJSwgI2ZmZmZmZiA4JSk7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1waW4tYnRuOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDUyJSwgdmFyKC0tbWpyLWJvcmRlcikpOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDE4MGRlZywKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMikgNTYlLCB2YXIoLS1tanItYWNjZW50KSA0NCUpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA2NCUsIHZhcigtLW1qci1hY2NlbnQpIDM2JSkKICAgICk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1waW4tYnRuLmlzLXBpbm5lZCB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSA1OCUsICNmZmZmZmYgNDIlKTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDYyJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSksCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDM2JSwgdmFyKC0tbWpyLXN1cmZhY2UtMSkgNjQlKQogICAgKTsKICAgIGNvbG9yOiAjZmZmZmZmOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy1zaWRlYmFyIHsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICAxODBkZWcsCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEpIDk0JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSksCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDk0JSwgcmdiYSgwLCAwLCAwLCAwLjE4KSkKICAgICk7CiAgICBib3JkZXItbGVmdC1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc4JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KSk7CiAgICBib3gtc2hhZG93OiBpbnNldCAxcHggMCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMyk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0ibGVmdCJdIC5tanItd3Mtc2lkZWJhciB7CiAgICBib3JkZXItcmlnaHQtY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyKSA3OCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNikpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci13cy1zaWRlYmFyLWhlYWRlciB7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgMTgwZGVnLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yKSA4NCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSkpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA5MiUsIHJnYmEoMCwgMCwgMCwgMC4xOCkpCiAgICApOwogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc2JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLXNpZGViYXItdGl0bGUgewogICAgY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb250ZW50LWZnLCAjZWVmNGZmKSA4MiUsIHZhcigtLW1qci1tdXRlZCkgMTglKTsKICAgIG9wYWNpdHk6IDAuODg7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLW5vZGUgewogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDcyJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLW5vZGUtaGVhZGVyIHsKICAgIGJhY2tncm91bmQ6CiAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwKSksCiAgICAgICAgbGluZWFyLWdyYWRpZW50KAogICAgICAgICAgICAxODBkZWcsCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA4NiUsIHZhcigtLW1qci1hY2NlbnQpIDE0JSksCiAgICAgICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA4NiUsIHJnYmEoMCwgMCwgMCwgMC4xNCkpCiAgICAgICAgKTsKICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KTsKfQoKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItd3Mtbm9kZS10aXRsZSB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbnRlbnQtZmcsICNlZWY0ZmYpIDk0JSwgI2ZmZmZmZiA2JSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLXdpZGdldC1sYWJlbCwKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItd3Mtc2lkZWJhci1lbXB0eSwKLm1qci1tZnYubWpyLW1mdi0tcG9wcGVkIC5tanItd3Mtbm9kZS1lbXB0eSB7CiAgICBjb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1tdXRlZCkgODQlLCAjZmZmZmZmIDE2JSk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLWlucHV0IHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA3NCUsICMwNTA3MGEgMjYlKTsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1ib3JkZXIpIDc0JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KSk7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7Cn0KCi5tanItbWZ2Lm1qci1tZnYtLXBvcHBlZCAubWpyLXdzLWlucHV0OmZvY3VzIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU4JSwgI2ZmZmZmZiAxMCUpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCksCiAgICAgICAgMCAwIDAgMnB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50KSAxOCUsIHRyYW5zcGFyZW50KTsKfQoKLm1qci1tZnYgLm1qci1pY29uLWJ0bi5tanItcG9waW4tYWN0aXZlIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQpIDU4JSwgI2ZmZmZmZiA0MiUpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIpIDQ1JSwgdmFyKC0tbWpyLWFjY2VudCkgNTUlKTsKICAgIGNvbG9yOiAjZWVmN2ZmOwp9CgovKiAtLSBDb250ZW50IHdyYXBwZXIgKGhvcml6b250YWwgZmxleDogY29udGVudCArIHNpZGViYXIpIC0tLS0tLS0tLS0tLS0tICovCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleDogMTsKICAgIG1pbi1oZWlnaHQ6IDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgovKiAtLSBTaWRlYmFyIHBvc2l0aW9uIHZhcmlhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImxlZnQiXSB7CiAgICBmbGV4LWRpcmVjdGlvbjogcm93Owp9Ci5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJsZWZ0Il0gLm1qci13cy1zaWRlYmFyIHsKICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7Cn0KLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImJvdHRvbSJdIHsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47Cn0KLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImJvdHRvbSJdIC5tanItd3Mtc2lkZWJhciB7CiAgICBib3JkZXItbGVmdDogbm9uZTsKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAwOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBoZWlnaHQgMC4ycyBlYXNlLAogICAgICAgIHdpZHRoIDBzOwp9Ci5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLXdzLXNpZGViYXIub3BlbiB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMjIwcHg7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgbWluLWhlaWdodDogMTIwcHg7CiAgICBtYXgtaGVpZ2h0OiA2NSU7Cn0KCi8qIC0tIENvbnRlbnQgYXJlYSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLm1qci1tZnYtY29udGVudCB7CiAgICBmbGV4OiAxOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGJhY2tncm91bmQ6ICMwZDBkMGQ7CiAgICBtaW4taGVpZ2h0OiAwOwp9CgoubWpyLW1mdi1nZW4tc2lkZWJhciB7CiAgICBkaXNwbGF5OiBub25lOwogICAgZmxleDogMCAwIDMyMHB4OwogICAgd2lkdGg6IDMyMHB4OwogICAgbWluLXdpZHRoOiAyMTBweDsKICAgIG1heC13aWR0aDogbWluKDQyJSwgNDIwcHgpOwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgIHBhZGRpbmc6IDEwcHg7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwogICAgYmFja2dyb3VuZDogcmdiYSgxOCwgMTgsIDIwLCAwLjk2KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODgpOwp9CgoubWpyLW1mdi1nZW4tc2lkZWJhci5vcGVuIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAxMHB4Owp9CgoubWpyLW1mdi1jb250ZW50LXdyYXBwZXJbZGF0YS1zaWRlYmFyLXBvcz0ibGVmdCJdIC5tanItbWZ2LWdlbi1zaWRlYmFyIHsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7CiAgICBib3JkZXItcmlnaHQ6IG5vbmU7Cn0KCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJib3R0b20iXSAubWpyLW1mdi1nZW4tc2lkZWJhciB7CiAgICBmbGV4OiAwIDAgMTgwcHg7CiAgICB3aWR0aDogMTAwJTsKICAgIG1heC13aWR0aDogbm9uZTsKICAgIG1pbi13aWR0aDogMDsKICAgIG1heC1oZWlnaHQ6IDQwJTsKICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwp9CgoubWpyLW1mdi1nZW4tc2lkZWJhci10aXRsZSB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDA7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk0KTsKfQoKLm1qci1tZnYtZ2VuLXNpZGViYXItc2VjdGlvbiB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogNnB4OwogICAgcGFkZGluZy10b3A6IDhweDsKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7Cn0KCi5tanItbWZ2LWdlbi1zaWRlYmFyLXNlY3Rpb246Zmlyc3Qtb2YtdHlwZSB7CiAgICBwYWRkaW5nLXRvcDogMDsKICAgIGJvcmRlci10b3A6IG5vbmU7Cn0KCi5tanItbWZ2LWdlbi1zaWRlYmFyLWhlYWRpbmcgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzIpOwp9CgoubWpyLW1mdi1nZW4tc2lkZWJhci1ib2R5IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAxMHB4OwogICAgZm9udC1zaXplOiAxMnB4OwogICAgbGluZS1oZWlnaHQ6IDEuNDU7CiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwp9CgoubWpyLW1mdi1nZW4tdGltZS1iYWRnZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGdhcDogMTJweDsKICAgIHBhZGRpbmc6IDhweCAxMHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyMjQsIDI1NSwgMTIyLCAwLjQyKTsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgyMjQsIDI1NSwgMTIyLCAwLjE2KSwgcmdiYSg3NiwgMTc1LCA4MCwgMC4xKSk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgyMjQsIDI1NSwgMTIyLCAwLjEyKSBpbnNldDsKICAgIGN1cnNvcjogY29weTsKICAgIHRyYW5zaXRpb246CiAgICAgICAgYmFja2dyb3VuZCAwLjE2cyBlYXNlLAogICAgICAgIGJvcmRlci1jb2xvciAwLjE2cyBlYXNlLAogICAgICAgIGJveC1zaGFkb3cgMC4xNnMgZWFzZTsKfQoKLm1qci1tZnYtZ2VuLXRpbWUtbGFiZWwgewogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43Mik7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjVweDsKfQoKLm1qci1tZnYtZ2VuLXRpbWUtdmFsdWUgewogICAgY29sb3I6ICNlMGZmN2E7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBmb250LXdlaWdodDogODAwOwogICAgZm9udC1mYW1pbHk6IENvbnNvbGFzLCBNb25hY28sIG1vbm9zcGFjZTsKfQoKLm1qci1tZnYtZ2VuLWNhcmQgewogICAgLS1tanItbWZ2LWdlbi1hY2NlbnQ6ICMyMTk2ZjM7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZzogMTJweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItbWZ2LWdlbi1hY2NlbnQpIDQ1JSwgdHJhbnNwYXJlbnQpOwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KAogICAgICAgIDEzNWRlZywKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLW1mdi1nZW4tYWNjZW50KSAxNiUsIHRyYW5zcGFyZW50KSAwJSwKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLW1mdi1nZW4tYWNjZW50KSA4JSwgdHJhbnNwYXJlbnQpIDEwMCUKICAgICk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1tZnYtZ2VuLWFjY2VudCkgMTQlLCB0cmFuc3BhcmVudCkgaW5zZXQ7CiAgICBjdXJzb3I6IGNvcHk7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIGJhY2tncm91bmQgMC4xNnMgZWFzZSwKICAgICAgICBib3JkZXItY29sb3IgMC4xNnMgZWFzZSwKICAgICAgICBib3gtc2hhZG93IDAuMTZzIGVhc2U7Cn0KCi5tanItbWZ2LWdlbi1jYXJkLS1zZWVkIHsKICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgYm9yZGVyLXdpZHRoOiAycHg7Cn0KCi5tanItbWZ2LWdlbi1jYXJkLS1jb21wYWN0IHsKICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZ2FwOiAxMnB4Owp9CgoubWpyLW1mdi1nZW4tY2FyZC0tY29tcGFjdCAubWpyLW1mdi1nZW4tY2FyZC10aXRsZSwKLm1qci1tZnYtZ2VuLWNhcmQtLWNvbXBhY3QgLm1qci1tZnYtZ2VuLWNhcmQtdmFsdWUgewogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLm1qci1tZnYtZ2VuLWNhcmQ6aG92ZXIsCi5tanItbWZ2LWdlbi10aW1lLWJhZGdlOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1tZnYtZ2VuLWFjY2VudCwgI2UwZmY3YSkgNzAlLCB0cmFuc3BhcmVudCk7CiAgICBib3gtc2hhZG93OiAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1tZnYtZ2VuLWFjY2VudCwgI2UwZmY3YSkgMjQlLCB0cmFuc3BhcmVudCkKICAgICAgICBpbnNldDsKfQoKLm1qci1tZnYtZ2VuLWNvcHktZmxhc2ggewogICAgYmFja2dyb3VuZDogcmdiYSg3NiwgMTc1LCA4MCwgMC4yOCkgIWltcG9ydGFudDsKfQoKLm1qci1tZnYtZ2VuLWNhcmQtdGl0bGUgewogICAgY29sb3I6IHZhcigtLW1qci1tZnYtZ2VuLWFjY2VudCk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjVweDsKfQoKLm1qci1tZnYtZ2VuLWNhcmQtdmFsdWUgewogICAgY29sb3I6IHZhcigtLWZnLWNvbG9yLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTIpKTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIG1pbi13aWR0aDogMDsKICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7Cn0KCi5tanItbWZ2LWdlbi1jYXJkLXZhbHVlLmlzLWNvbXBhY3QgewogICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICBmb250LXdlaWdodDogNzAwOwp9CgoubWpyLW1mdi1nZW4tY2FyZC12YWx1ZS5pcy1tdWx0aWxpbmUgewogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwp9CgoubWpyLW1mdi1nZW4tY2FyZC0tc2VlZCAubWpyLW1mdi1nZW4tY2FyZC12YWx1ZSB7CiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgZm9udC1mYW1pbHk6IENvbnNvbGFzLCBNb25hY28sIG1vbm9zcGFjZTsKICAgIGxldHRlci1zcGFjaW5nOiAxcHg7CiAgICBjb2xvcjogI2ZmZjsKfQoKLm1qci1tZnYtZ2VuLWNhcmQtdmFsdWUuaXMtZmllbGRzIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgIGdhcDogOHB4Owp9CgoubWpyLW1mdi1nZW4tZmllbGQgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDc4cHgsIGF1dG8pIDFmcjsKICAgIGdhcDogMTBweDsKICAgIGFsaWduLWl0ZW1zOiBzdGFydDsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1tZnYtZ2VuLWZpZWxkLWxhYmVsIHsKICAgIGNvbG9yOiB2YXIoLS1tanItbXV0ZWQsIHJnYmEoMTgwLCAxODAsIDE4MCwgMC43MikpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKfQoKLm1qci1tZnYtZ2VuLWZpZWxkLXZhbHVlIHsKICAgIGNvbG9yOiB2YXIoLS1mZy1jb2xvciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk1KSk7CiAgICBtaW4td2lkdGg6IDA7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwp9CgoubWpyLW1mdi1nZW4tc2lkZWJhci1ib2R5IHN0cm9uZyB7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbWFyZ2luLXJpZ2h0OiA0cHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk1KTsKfQoKLm1qci1tZnYtZ2VuLXNpZGViYXItYm9keSBbZGF0YS1maWVsZD0icHJvbXB0Il0gc3Ryb25nIHsKICAgIGNvbG9yOiAjN2VjOGZmOwp9Ci5tanItbWZ2LWdlbi1zaWRlYmFyLWJvZHkgW2RhdGEtZmllbGQ9InNlZWQiXSBzdHJvbmcgewogICAgY29sb3I6ICNmZmQ0N2E7Cn0KLm1qci1tZnYtZ2VuLXNpZGViYXItYm9keSBbZGF0YS1maWVsZD0ibW9kZWwiXSBzdHJvbmcgewogICAgY29sb3I6ICM3ZGRhOGE7Cn0KLm1qci1tZnYtZ2VuLXNpZGViYXItYm9keSBbZGF0YS1maWVsZD0ibG9yYSJdIHN0cm9uZyB7CiAgICBjb2xvcjogI2Q0OGNmZjsKfQoubWpyLW1mdi1nZW4tc2lkZWJhci1ib2R5IFtkYXRhLWZpZWxkPSJzYW1wbGVyIl0gc3Ryb25nIHsKICAgIGNvbG9yOiAjZmY5ZjdhOwp9Ci5tanItbWZ2LWdlbi1zaWRlYmFyLWJvZHkgW2RhdGEtZmllbGQ9InNjaGVkdWxlciJdIHN0cm9uZyB7CiAgICBjb2xvcjogI2ZmN2E5ZjsKfQoubWpyLW1mdi1nZW4tc2lkZWJhci1ib2R5IFtkYXRhLWZpZWxkPSJjZmciXSBzdHJvbmcgewogICAgY29sb3I6ICM3YTlmZmY7Cn0KLm1qci1tZnYtZ2VuLXNpZGViYXItYm9keSBbZGF0YS1maWVsZD0ic3RlcCJdIHN0cm9uZyB7CiAgICBjb2xvcjogIzdhZmZkNDsKfQoubWpyLW1mdi1nZW4tc2lkZWJhci1ib2R5IFtkYXRhLWZpZWxkPSJnZW5UaW1lIl0gc3Ryb25nIHsKICAgIGNvbG9yOiAjZTBmZjdhOwp9CgoubWpyLW1mdi1nZW4tc2lkZWJhci1ib2R5IGRpdiB7CiAgICBtYXJnaW4tYm90dG9tOiA1cHg7Cn0KCi5tanItbWZ2LWdlbi1zaWRlYmFyLWJvZHkgZGl2Omxhc3QtY2hpbGQgewogICAgbWFyZ2luLWJvdHRvbTogMDsKfQoKLm1qci1tZnYtb3ZlcmxheS1jYW52YXMgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgei1pbmRleDogMTI7Cn0KCi5tanItbWZ2LXRvb2xiYXItc2VsZWN0IHsKICAgIGhlaWdodDogMjRweDsKICAgIHBhZGRpbmc6IDAgNnB4OwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgYm9yZGVyOiAwLjhweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMjQpOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyMTAsIDIxNCwgMjIwLCAwLjA2KSwgcmdiYSgyMTAsIDIxNCwgMjIwLCAwLjAyKSk7CiAgICBjb2xvcjogcmdiYSgyMzAsIDIzMywgMjM4LCAwLjkyKTsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIG91dGxpbmU6IG5vbmU7Cn0KCi5tanItbWZ2LXRvb2xiYXItcmFuZ2UgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7Cn0KCi5tanItbWZ2LXRvb2xiYXItcmFuZ2UgaW5wdXRbdHlwZT0icmFuZ2UiXSB7CiAgICB3aWR0aDogNzJweDsKICAgIGFjY2VudC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg1KTsKfQoKLm1qci1tZnYtdG9vbGJhci1yYW5nZS1vdXQgewogICAgbWluLXdpZHRoOiAzMHB4OwogICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwp9CgovKiBFViBzbGlkZXIgYWN0aXZlIHN0YXRlICh2YWx1ZSAhPSAwKSAqLwoubWpyLW1mdi10b29sYmFyLXJhbmdlLmlzLWFjdGl2ZSBpbnB1dFt0eXBlPSJyYW5nZSJdIHsKICAgIGFjY2VudC1jb2xvcjogI2Y1Yzg0MjsKfQoubWpyLW1mdi10b29sYmFyLXJhbmdlLmlzLWFjdGl2ZSAubWpyLW1mdi10b29sYmFyLXJhbmdlLW91dCB7CiAgICBjb2xvcjogI2Y1Yzg0MjsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7Cn0KCi5tanItbWZ2LW1lZGlhLXByb2dyZXNzIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMTBweDsKICAgIGxlZnQ6IDEwcHg7CiAgICB6LWluZGV4OiA2OwogICAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAyMHB4KTsKICAgIHBhZGRpbmc6IDVweCA5cHg7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpKSA4OCUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCByZ2JhKDUsIDgsIDE0LCAwLjg2KSA4NiUsIHZhcigtLW1qci1zdXJmYWNlLTAsICMxMTEpIDE0JSk7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2Y1ZjdmYSk7CiAgICBib3gtc2hhZG93OiAwIDJweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4yOCk7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIG9wYWNpdHk6IDA7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTRweCk7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIG9wYWNpdHkgMC4xNnMgZWFzZSwKICAgICAgICB0cmFuc2Zvcm0gMC4xNnMgZWFzZTsKfQoKLm1qci1tZnYtbWVkaWEtcHJvZ3Jlc3MuaXMtdmlzaWJsZSB7CiAgICBvcGFjaXR5OiAxOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwp9CgoubWpyLW1mdi1tZWRpYS1wcm9ncmVzcy5pcy1lcnJvciB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3RhdHVzLWVycm9yLCAjZmY1YzdhKSA3MiUsIHRyYW5zcGFyZW50KTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCByZ2JhKDYwLCAxMCwgMTgsIDAuOSkgODIlLCB2YXIoLS1tanItc3VyZmFjZS0wLCAjMTExKSAxOCUpOwp9CgoubWpyLW1mdi1tZWRpYS1wcm9ncmVzcy10ZXh0IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBsaW5lLWhlaWdodDogMS4yOwp9CgovKiAtLSBXb3JrZmxvdyBTaWRlYmFyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5tanItd3Mtc2lkZWJhciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIHdpZHRoOiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJhY2tncm91bmQ6IHZhcigtLW1qci1zdXJmYWNlLTEsICMyYTJhMmEpOwogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKICAgIHRyYW5zaXRpb246IHdpZHRoIDAuMnMgZWFzZTsKICAgIGZsZXgtc2hyaW5rOiAwOwp9CgoubWpyLXdzLXNpZGViYXIub3BlbiB7CiAgICB3aWR0aDogMjYwcHg7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgbWluLXdpZHRoOiAxODBweDsKICAgIG1heC13aWR0aDogNjUlOwogICAgdHJhbnNpdGlvbjogbm9uZTsKfQoKLm1qci13cy1zaWRlYmFyLWhlYWRlciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwogICAgZmxleC1zaHJpbms6IDA7CiAgICBtaW4taGVpZ2h0OiAzNHB4Owp9Ci5tanItd3Mtc2lkZWJhci10aXRsZSB7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjVweDsKICAgIG9wYWNpdHk6IDAuNjU7Cn0KLm1qci13cy1zaWRlYmFyLWJvZHkgewogICAgZmxleDogMTsKICAgIG1pbi1oZWlnaHQ6IDA7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgcGFkZGluZzogMDsKfQoubWpyLXdzLXNpZGViYXItZW1wdHkgewogICAgcGFkZGluZzogMjRweCAxNnB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBsaW5lLWhlaWdodDogMS41Owp9CgovKiAtLSBUYWIgYmFyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoubWpyLXdzLXRhYi1iYXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgZ2FwOiAycHg7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjE4KTsKfQoKLm1qci13cy10YWIgewogICAgZmxleDogMTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDVweDsKICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICBib3JkZXI6IG5vbmU7CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNDUpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRyYW5zaXRpb246CiAgICAgICAgYmFja2dyb3VuZCAwLjE1cywKICAgICAgICBjb2xvciAwLjE1czsKfQoKLm1qci13cy10YWI6aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA3KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzUpOwp9CgoubWpyLXdzLXRhYi5pcy1hY3RpdmUgewogICAgYmFja2dyb3VuZDogcmdiYSg5OSwgMTU1LCAyNTUsIDAuMTUpOwogICAgY29sb3I6ICM2MzliZmY7Cn0KCi8qIC0tIE5vZGVzIHRhYiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5tanItd3Mtbm9kZXMtdGFiIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZmxleDogMTsKICAgIG1pbi1oZWlnaHQ6IDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgovKiBHcmFwaCBNYXAgdGFiICovCi5tanItd2dtIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgbWluLWhlaWdodDogMTAwJTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODIpOwp9CgoubWpyLXdnbS1tYXAtd3JhcCB7CiAgICBoZWlnaHQ6IDE5MHB4OwogICAgbWluLWhlaWdodDogMTUwcHg7CiAgICBtYXJnaW46IDhweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIyKTsKfQoKLm1qci13Z20tcHJldmlldyB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMzIpOwp9CgoubWpyLXdnbS1wcmV2aWV3IC5tanItbWZ2LW1lZGlhLAoubWpyLXdnbS1wcmV2aWV3IC5tanItbWZ2LXBsYXllci1ob3N0LAoubWpyLXdnbS1wcmV2aWV3IC5tanItbW9kZWwzZC1ob3N0LAoubWpyLXdnbS1wcmV2aWV3LW1lZGlhIHsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIG1heC1oZWlnaHQ6IDEwMCU7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIG9iamVjdC1maXQ6IGNvbnRhaW47Cn0KCi5tanItd2dtLXByZXZpZXctZW1wdHkgewogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zNCk7CiAgICBmb250LXNpemU6IDExcHg7Cn0KCi5tanItd2dtLWNhbnZhcyB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgY3Vyc29yOiBncmFiOwogICAgdG91Y2gtYWN0aW9uOiBub25lOwp9CgoubWpyLXdnbS1jYW52YXM6YWN0aXZlIHsKICAgIGN1cnNvcjogZ3JhYmJpbmc7Cn0KCi5tanItd2dtLS1sYXJnZSB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIG1pbi1oZWlnaHQ6IDA7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMTgpOwp9CgoubWpyLXdnbS0tbGFyZ2UgLm1qci13Z20tbWFwLXdyYXAgewogICAgZmxleDogMTsKICAgIGhlaWdodDogYXV0bzsKICAgIG1pbi1oZWlnaHQ6IDA7CiAgICBtYXJnaW46IDA7CiAgICBib3JkZXI6IG5vbmU7CiAgICBib3JkZXItcmFkaXVzOiAwOwp9CgoubWpyLXdnbS0tbGFyZ2UgLm1qci13Z20tc3RhdHVzIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDEwcHg7CiAgICB0b3A6IDEwcHg7CiAgICB6LWluZGV4OiAyOwogICAgbWF4LXdpZHRoOiBtaW4oNDIwcHgsIGNhbGMoMTAwJSAtIDIwcHgpKTsKICAgIHBhZGRpbmc6IDVweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjUyKTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzQpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDhweCk7Cn0KCi5tanItd2dtLXRvb2xiYXIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMTBweDsKICAgIHRvcDogNDZweDsKICAgIHotaW5kZXg6IDI7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGdhcDogNnB4OwogICAgbWF4LXdpZHRoOiBtaW4oNDIwcHgsIGNhbGMoMTAwJSAtIDIwcHgpKTsKfQoKLm1qci13Z20tbW9kZSB7CiAgICBtaW4taGVpZ2h0OiAyNnB4OwogICAgcGFkZGluZzogM3B4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC41KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzIpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgY3Vyc29yOiBwb2ludGVyOwp9CgoubWpyLXdnbS1tb2RlOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgxNDksIDE4MywgMjU1LCAwLjQ1KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7Cn0KCi5tanItd2dtLW1vZGUuaXMtYWN0aXZlIHsKICAgIGJvcmRlci1jb2xvcjogcmdiYSgxMjQsIDE4NiwgMjU1LCAwLjYyKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoNzksIDEyMywgMjE0LCAwLjI2KTsKICAgIGNvbG9yOiByZ2JhKDIzNSwgMjQ1LCAyNTUsIDAuOTYpOwp9CgoubWpyLXdnbS0tbGFyZ2UgLm1qci13Z20tZGV0YWlscyB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICByaWdodDogMTBweDsKICAgIHRvcDogMTBweDsKICAgIGJvdHRvbTogMTBweDsKICAgIHotaW5kZXg6IDI7CiAgICB3aWR0aDogbWluKDMyMHB4LCAzOCUpOwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIHBhZGRpbmc6IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOwogICAgYmFja2dyb3VuZDogcmdiYSgxOCwgMjAsIDI2LCAwLjg0KTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigxMHB4KTsKfQoKLm1qci13Z20tLWxhcmdlIC5tanItd2dtLWFjdGlvbiB7CiAgICBtaW4taGVpZ2h0OiAzMHB4Owp9CgoubWpyLXdnbS0tbGFyZ2UgLm1qci13Z20tcGFyYW0gewogICAgZm9udC1zaXplOiAxMXB4Owp9CgoubWpyLXdnbS1zdGF0dXMgewogICAgcGFkZGluZzogMCAxMHB4IDhweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNDIpOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgbGluZS1oZWlnaHQ6IDEuMzU7Cn0KCi5tanItd2dtLWRldGFpbHMgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICBnYXA6IDZweDsKICAgIHBhZGRpbmc6IDAgOHB4IDEwcHg7Cn0KCi5tanItd2dtLW5vZGUtdGl0bGUgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwp9CgoubWpyLXdnbS1ub2RlLW1ldGEgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG1hcmdpbi10b3A6IC00cHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQyKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKfQoKLm1qci13Z20tYWN0aW9ucyB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICBnYXA6IDRweDsKfQoKLm1qci13Z20tYWN0aW9uIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA3cHg7CiAgICBtaW4taGVpZ2h0OiAyOHB4OwogICAgcGFkZGluZzogNXB4IDhweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7CiAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43Nik7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi5tanItd2dtLWFjdGlvbjpob3ZlciB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoOTksIDE1NSwgMjU1LCAwLjQ1KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoOTksIDE1NSwgMjU1LCAwLjEyKTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTIpOwp9CgoubWpyLXdnbS1hY3Rpb24uaXMtb2sgewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDc2LCAxNzUsIDgwLCAwLjU1KTsKICAgIGNvbG9yOiByZ2JhKDE5MCwgMjU1LCAxOTYsIDAuOTYpOwp9CgoubWpyLXdnbS1wYXJhbXMgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdhcDogNHB4OwogICAgbWFyZ2luLXRvcDogMnB4Owp9CgoubWpyLXdnbS1wYXJhbSB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoNjRweCwgMC40MmZyKSBtaW5tYXgoMCwgMWZyKTsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZzogNXB4IDdweDsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4xOCk7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBsaW5lLWhlaWdodDogMS4zNTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgdHJhbnNpdGlvbjoKICAgICAgICBiYWNrZ3JvdW5kIDEyMG1zIGVhc2UsCiAgICAgICAgYm9yZGVyLWNvbG9yIDEyMG1zIGVhc2U7Cn0KCi5tanItd2dtLXBhcmFtOmhvdmVyLAoubWpyLXdnbS1wYXJhbTpmb2N1cy12aXNpYmxlIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xOCk7CiAgICBvdXRsaW5lOiBub25lOwp9CgoubWpyLXdnbS1wYXJhbS5pcy1vayB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoNzksIDIxMCwgMTI1LCAwLjcpOwogICAgYmFja2dyb3VuZDogcmdiYSg3OSwgMjEwLCAxMjUsIDAuMTYpOwp9CgoubWpyLXdnbS1wYXJhbS5pcy1lcnJvciB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCA5MCwgOTAsIDAuNyk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgOTAsIDkwLCAwLjE2KTsKfQoKLm1qci13Z20tcGFyYW0ta2V5IHsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQ4KTsKfQoKLm1qci13Z20tcGFyYW0tdmFsdWUgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODIpOwp9CgoubWpyLXdnbS1ub2RlLXZpc3VhbCB7CiAgICAtLW1qci13Z20tbm9kZS1hY2NlbnQ6IHJnYmEoMTE1LCAxNTUsIDI1NSwgMC44OCk7CiAgICAtLW1qci13Z20tbm9kZS1hY2NlbnQtc29mdDogcmdiYSgxMTUsIDE1NSwgMjU1LCAwLjIyKTsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDhweDsKICAgIG1hcmdpbi10b3A6IDJweDsKICAgIHBhZGRpbmc6IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItd2dtLW5vZGUtYWNjZW50KSAzNCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSk7CiAgICBib3gtc2hhZG93OgogICAgICAgIGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSwKICAgICAgICAwIDEwcHggMjRweCByZ2JhKDAsIDAsIDAsIDAuMjQpOwogICAgYmFja2dyb3VuZDoKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXdnbS1ub2RlLWFjY2VudC1zb2Z0KSAxMDAlLCB0cmFuc3BhcmVudCksIHJnYmEoNDQsIDU2LCA4OCwgMC4yKSksCiAgICAgICAgcmdiYSgxMywgMTYsIDI0LCAwLjg1KTsKfQoKLm1qci13Z20tbm9kZS12aXN1YWw6OmJlZm9yZSB7CiAgICBjb250ZW50OiAiIjsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgaGVpZ2h0OiAycHg7CiAgICBtYXJnaW46IC04cHggLThweCA2cHg7CiAgICBib3JkZXItcmFkaXVzOiA2cHggNnB4IDAgMDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgdmFyKC0tbWpyLXdnbS1ub2RlLWFjY2VudCksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwp9CgoubWpyLXdnbS1ub2RlLXZpc3VhbC5pcy1tb2RlbCB7CiAgICAtLW1qci13Z20tbm9kZS1hY2NlbnQ6IHJnYmEoMTI0LCAxODYsIDI1NSwgMC45KTsKICAgIC0tbWpyLXdnbS1ub2RlLWFjY2VudC1zb2Z0OiByZ2JhKDcwLCAxMjMsIDE4MSwgMC4zNCk7Cn0KCi5tanItd2dtLW5vZGUtdmlzdWFsLmlzLXNhbXBsZXIgewogICAgLS1tanItd2dtLW5vZGUtYWNjZW50OiByZ2JhKDE0MywgMjI4LCAxNjcsIDAuOSk7CiAgICAtLW1qci13Z20tbm9kZS1hY2NlbnQtc29mdDogcmdiYSg2NCwgMTMzLCA4OCwgMC4zNCk7Cn0KCi5tanItd2dtLW5vZGUtdmlzdWFsLmlzLXRleHQgewogICAgLS1tanItd2dtLW5vZGUtYWNjZW50OiByZ2JhKDI1NSwgMTkyLCAxMTQsIDAuOSk7CiAgICAtLW1qci13Z20tbm9kZS1hY2NlbnQtc29mdDogcmdiYSgxNTQsIDEwMiwgNDksIDAuMzQpOwp9CgoubWpyLXdnbS1ub2RlLXZpc3VhbC5pcy1tZWRpYSB7CiAgICAtLW1qci13Z20tbm9kZS1hY2NlbnQ6IHJnYmEoMTU0LCAxNzAsIDI1NSwgMC45KTsKICAgIC0tbWpyLXdnbS1ub2RlLWFjY2VudC1zb2Z0OiByZ2JhKDgzLCA5MywgMTY1LCAwLjM0KTsKfQoKLm1qci13Z20tbm9kZS12aXN1YWwuaXMtY29udHJvbCB7CiAgICAtLW1qci13Z20tbm9kZS1hY2NlbnQ6IHJnYmEoMjU1LCAxMzksIDE2OSwgMC45KTsKICAgIC0tbWpyLXdnbS1ub2RlLWFjY2VudC1zb2Z0OiByZ2JhKDE0NSwgNzAsIDk1LCAwLjM0KTsKfQoKLm1qci13Z20tbm9kZS12aXN1YWwuaXMtbG9naWMgewogICAgLS1tanItd2dtLW5vZGUtYWNjZW50OiByZ2JhKDE4OCwgMTY4LCAyNTUsIDAuOSk7CiAgICAtLW1qci13Z20tbm9kZS1hY2NlbnQtc29mdDogcmdiYSgxMDUsIDg2LCAxNTMsIDAuMzQpOwp9CgoubWpyLXdnbS1ub2RlLXZpc3VhbC1oZWFkZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICBnYXA6IDhweDsKICAgIHBhZGRpbmctYm90dG9tOiA2cHg7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci13Z20tbm9kZS1hY2NlbnQpIDI1JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KSk7Cn0KCi5tanItd2dtLW5vZGUtdmlzdWFsLXR5cGUgewogICAgZm9udC1zaXplOiAxMXB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGNvbG9yOiByZ2JhKDIzNiwgMjQ0LCAyNTUsIDAuOTQpOwogICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjM1KTsKfQoKLm1qci13Z20tbm9kZS12aXN1YWwtaWQgewogICAgZm9udC1zaXplOiAxMHB4OwogICAgY29sb3I6IHJnYmEoMTk0LCAyMTMsIDI1NSwgMC43OCk7Cn0KCi5tanItd2dtLW5vZGUtcG9ydHMgewogICAgZGlzcGxheTogZ3JpZDsKICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsKICAgIGdhcDogOHB4Owp9CgoubWpyLXdnbS1ub2RlLXBvcnRzLWNvbCB7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItd2dtLW5vZGUtcG9ydHMtdGl0bGUgewogICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgZm9udC1zaXplOiAxMHB4OwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQ1KTsKfQoKLm1qci13Z20tbm9kZS1wb3J0cy1saXN0IHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDNweDsKfQoKLm1qci13Z20tbm9kZS1wb3J0LAoubWpyLXdnbS1ub2RlLXBvcnQtZW1wdHkgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDZweDsKICAgIG1pbi1oZWlnaHQ6IDE4cHg7CiAgICBwYWRkaW5nOiAycHggNnB4OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yNCk7Cn0KCi5tanItd2dtLW5vZGUtcG9ydC1lbXB0eSB7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI2KTsKfQoKLm1qci13Z20tbm9kZS1wb3J0LWRvdCB7CiAgICB3aWR0aDogOHB4OwogICAgaGVpZ2h0OiA4cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xOCkgaW5zZXQ7Cn0KCi5tanItd2dtLW5vZGUtcG9ydC1kb3QuaXMtaW4gewogICAgYmFja2dyb3VuZDogcmdiYSgxMzUsIDE5NiwgMjU1LCAwLjkpOwp9CgoubWpyLXdnbS1ub2RlLXBvcnQtZG90LmlzLW91dCB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDE0NCwgMjM4LCAxNzQsIDAuOSk7Cn0KCi5tanItd2dtLW5vZGUtcG9ydC1uYW1lIHsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC1zaXplOiAxMHB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43OCk7Cn0KCi5tanItd2dtLW5vZGUtcG9ydC10eXBlIHsKICAgIGZsZXg6IDAgMCBhdXRvOwogICAgbWF4LXdpZHRoOiA0NSU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC1zaXplOiA5cHg7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMmVtOwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIHBhZGRpbmc6IDFweCA1cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgY29sb3I6IHJnYmEoMjI0LCAyMzYsIDI1NSwgMC45KTsKfQoKLm1qci13Z20tbm9kZS13aWRnZXRzIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBnYXA6IDRweDsKfQoKLm1qci13Z20tbm9kZS13aWRnZXRzLXRpdGxlIHsKICAgIG1hcmdpbi1ib3R0b206IDJweDsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjAyZW07CiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40NSk7Cn0KCi5tanItd2dtLW5vZGUtd2lkZ2V0LAoubWpyLXdnbS1ub2RlLXdpZGdldC1lbXB0eSB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoNzBweCwgMC40MmZyKSBtaW5tYXgoMCwgMWZyKTsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZzogNHB4IDZweDsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7Cn0KCi5tanItd2dtLW5vZGUtd2lkZ2V0IHsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRyYW5zaXRpb246CiAgICAgICAgYmFja2dyb3VuZCAxMjBtcyBlYXNlLAogICAgICAgIGJvcmRlci1jb2xvciAxMjBtcyBlYXNlOwp9CgoubWpyLXdnbS1ub2RlLXdpZGdldDpob3ZlciwKLm1qci13Z20tbm9kZS13aWRnZXQ6Zm9jdXMtdmlzaWJsZSB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDkpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7CiAgICBvdXRsaW5lOiBub25lOwp9CgoubWpyLXdnbS1ub2RlLXdpZGdldC5pcy1vayB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoNzksIDIxMCwgMTI1LCAwLjcpOwogICAgYmFja2dyb3VuZDogcmdiYSg3OSwgMjEwLCAxMjUsIDAuMTYpOwp9CgoubWpyLXdnbS1ub2RlLXdpZGdldC5pcy1lcnJvciB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCA5MCwgOTAsIDAuNyk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgOTAsIDkwLCAwLjE2KTsKfQoKLm1qci13Z20tbm9kZS13aWRnZXQtZW1wdHkgewogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjM0KTsKfQoKLm1qci13Z20tbm9kZS13aWRnZXQta2V5IHsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUyKTsKfQoKLm1qci13Z20tbm9kZS13aWRnZXQtdmFsdWUgewogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODgpOwp9CgoubWpyLXdnbS1ub2RlLXdpZGdldC5pcy1tdWx0aWxpbmUgewogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICBhbGlnbi1pdGVtczogc3RhcnQ7CiAgICBnYXA6IDRweDsKfQoKLm1qci13Z20tbm9kZS13aWRnZXQuaXMtbXVsdGlsaW5lIC5tanItd2dtLW5vZGUtd2lkZ2V0LWtleSB7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwp9CgoubWpyLXdnbS1ub2RlLXdpZGdldC5pcy1tdWx0aWxpbmUgLm1qci13Z20tbm9kZS13aWRnZXQtdmFsdWUgewogICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgd29yZC1icmVhazogYnJlYWstd29yZDsKICAgIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlOwogICAgbGluZS1oZWlnaHQ6IDEuMzU7CiAgICBtYXgtaGVpZ2h0OiA5LjJlbTsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICBwYWRkaW5nLXJpZ2h0OiAycHg7Cn0KCi5tanItd2dtLW5vZGUtd2lkZ2V0LmlzLW11bHRpbGluZS5pcy10ZXh0LWZpZWxkIC5tanItd2dtLW5vZGUtd2lkZ2V0LXZhbHVlIHsKICAgIG1heC1oZWlnaHQ6IDE2ZW07CiAgICBsaW5lLWhlaWdodDogMS40Owp9CgoubWpyLXdnbS1ub2RlLXdpZGdldC1tb3JlIHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNDYpOwogICAgdGV4dC1hbGlnbjogcmlnaHQ7Cn0KCkBtZWRpYSAobWF4LXdpZHRoOiA4MjBweCkgewogICAgLm1qci13Z20tLWxhcmdlIC5tanItd2dtLWRldGFpbHMgewogICAgICAgIHdpZHRoOiBtaW4oMzgwcHgsIGNhbGMoMTAwJSAtIDIwcHgpKTsKICAgIH0KCiAgICAubWpyLXdnbS1ub2RlLXBvcnRzIHsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgIH0KfQoKLm1qci13cy1zZWFyY2gtd3JhcCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGZsZXgtc2hyaW5rOiAwOwogICAgcGFkZGluZzogNnB4IDhweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpKTsKfQoKLm1qci13cy1zZWFyY2gtaWNvbiB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiAxNnB4OwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoubWpyLXdzLXNlYXJjaCB7CiAgICBmbGV4OiAxOwogICAgcGFkZGluZzogNHB4IDI4cHggNHB4IDI2cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMzUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODUpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgb3V0bGluZTogbm9uZTsKfQoKLm1qci13cy1zZWFyY2g6OnBsYWNlaG9sZGVyIHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjgpOwp9CgoubWpyLXdzLXNlYXJjaDpmb2N1cyB7CiAgICBib3JkZXItY29sb3I6IHJnYmEoOTksIDE1NSwgMjU1LCAwLjUpOwp9CgoubWpyLXdzLXNlYXJjaC1jbGVhciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICByaWdodDogMTRweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICB3aWR0aDogMThweDsKICAgIGhlaWdodDogMThweDsKICAgIHBhZGRpbmc6IDA7CiAgICBib3JkZXI6IG5vbmU7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7Cn0KCi5tanItd3Mtc2VhcmNoLWNsZWFyOmhvdmVyIHsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwp9CgoubWpyLXdzLW5vZGVzLWxpc3QgewogICAgZmxleDogMTsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICBwYWRkaW5nOiA0cHggMDsKfQoKLm1qci13cy1ub2RlLXJvdyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogNnB4OwogICAgcGFkZGluZzogNXB4IDEwcHggNXB4IDEycHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKICAgIG1pbi1oZWlnaHQ6IDMycHg7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMXM7Cn0KCi5tanItd3Mtbm9kZS1yb3c6aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KTsKfQoKLm1qci13cy1ub2RlLXJvdy10eXBlIHsKICAgIGZsZXg6IDE7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc4KTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cn0KCi5tanItd3Mtbm9kZS1yb3ctdGl0bGUgewogICAgZm9udC1zaXplOiAxMHB4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40KTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICBtYXgtd2lkdGg6IDgwcHg7CiAgICBmbGV4LXNocmluazogMDsKfQoKLm1qci13cy1ub2RlLWxvY2F0ZSB7CiAgICBmbGV4LXNocmluazogMDsKICAgIHdpZHRoOiAyMnB4OwogICAgaGVpZ2h0OiAyMnB4OwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIHBhZGRpbmc6IDA7CiAgICBib3JkZXI6IG5vbmU7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBvcGFjaXR5OiAwOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBvcGFjaXR5IDAuMXMsCiAgICAgICAgY29sb3IgMC4xcywKICAgICAgICBiYWNrZ3JvdW5kIDAuMXM7Cn0KCi5tanItd3Mtbm9kZS1yb3c6aG92ZXIgLm1qci13cy1ub2RlLWxvY2F0ZSB7CiAgICBvcGFjaXR5OiAxOwp9CgoubWpyLXdzLW5vZGUtbG9jYXRlOmhvdmVyIHsKICAgIGNvbG9yOiAjNjM5YmZmOwogICAgYmFja2dyb3VuZDogcmdiYSg5OSwgMTU1LCAyNTUsIDAuMTUpOwp9CgovKiAtLSBOb2RlIHNlY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoubWpyLXdzLXRyZWUtaXRlbSB7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7Cn0KLm1qci13cy10cmVlLWl0ZW0gPiAubWpyLXdzLW5vZGUgewogICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKfQoubWpyLXdzLXRyZWUtaXRlbS0tc3ViZ3JhcGggewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsICM1YjhhZjApIDQlLCB0cmFuc3BhcmVudCA5NiUpOwp9Ci5tanItd3Mtbm9kZSB7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSk7Cn0KLyogU3VidGxlIGhpZ2hsaWdodCB3aGVuIHRoaXMgbm9kZSBtYXRjaGVzIHRoZSBjdXJyZW50IGdyYXBoIHNlbGVjdGlvbi4gKi8KLm1qci13cy1ub2RlLmlzLXNlbGVjdGVkLWZyb20tZ3JhcGggewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDIxMCwgOTAsIDAuMDgpOwogICAgYm94LXNoYWRvdzogaW5zZXQgMnB4IDAgMCAwIHJnYmEoMjU1LCAyMTAsIDkwLCAwLjc1KTsKfQoubWpyLXdzLW5vZGUuaXMtc2VsZWN0ZWQtZnJvbS1ncmFwaCAubWpyLXdzLW5vZGUtaGVhZGVyIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCAjZmZkNDVhIDE4JSwgdmFyKC0tbWpyLXN1cmZhY2UtMSwgIzJhMmEyYSkgODIlKTsKfQoubWpyLXdzLW5vZGUuaXMtc2VsZWN0ZWQtZnJvbS1ncmFwaCAubWpyLXdzLW5vZGUtdHlwZSB7CiAgICBjb2xvcjogI2ZmZDQ1YTsKfQoubWpyLXdzLW5vZGUuaXMtc2VsZWN0ZWQtZnJvbS1ncmFwaCAubWpyLXdzLW5vZGUtdGl0bGUgewogICAgY29sb3I6IHJnYmEoMjU1LCAyMjQsIDEzMCwgMC44OCk7Cn0KLm1qci13cy1ub2RlLmlzLXNlbGVjdGVkLWZyb20tZ3JhcGggLm1qci13cy1ub2RlLXRvZ2dsZSwKLm1qci13cy1ub2RlLmlzLXNlbGVjdGVkLWZyb20tZ3JhcGggLm1qci13cy1sb2NhdGUsCi5tanItd3Mtbm9kZS5pcy1zZWxlY3RlZC1mcm9tLWdyYXBoIC5tanItd3Mtbm9kZS1raW5kIHsKICAgIGNvbG9yOiAjZmZkNDVhOwp9Ci5tanItd3Mtc2lkZWJhci1yZXNpemVyIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMDsKICAgIGJvdHRvbTogMDsKICAgIHdpZHRoOiAxNHB4OwogICAgei1pbmRleDogMjsKICAgIGN1cnNvcjogZXctcmVzaXplOwogICAgcG9pbnRlci1ldmVudHM6IGF1dG87Cn0KCi5tanItd3Mtc2lkZWJhci1yZXNpemVyOjpiZWZvcmUgewogICAgY29udGVudDogIiI7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDUwJTsKICAgIGxlZnQ6IDUwJTsKICAgIHdpZHRoOiA0cHg7CiAgICBoZWlnaHQ6IDU2cHg7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwogICAgb3BhY2l0eTogMDsKICAgIHRyYW5zaXRpb246CiAgICAgICAgb3BhY2l0eSAwLjE1cyBlYXNlLAogICAgICAgIGJhY2tncm91bmQgMC4xNXMgZWFzZTsKfQoKLm1qci13cy1zaWRlYmFyLm9wZW46aG92ZXIgLm1qci13cy1zaWRlYmFyLXJlc2l6ZXI6OmJlZm9yZSwKLm1qci13cy1zaWRlYmFyLmlzLXJlc2l6aW5nIC5tanItd3Mtc2lkZWJhci1yZXNpemVyOjpiZWZvcmUsCi5tanItd3Mtc2lkZWJhci1yZXNpemVyLmlzLWRyYWdnaW5nOjpiZWZvcmUgewogICAgb3BhY2l0eTogMTsKfQoKLm1qci13cy1zaWRlYmFyLmlzLXJlc2l6aW5nIC5tanItd3Mtc2lkZWJhci1yZXNpemVyOjpiZWZvcmUsCi5tanItd3Mtc2lkZWJhci1yZXNpemVyOmhvdmVyOjpiZWZvcmUsCi5tanItd3Mtc2lkZWJhci1yZXNpemVyLmlzLWRyYWdnaW5nOjpiZWZvcmUgewogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjM0KTsKfQoKLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9InJpZ2h0Il0gLm1qci13cy1zaWRlYmFyLXJlc2l6ZXIgewogICAgcmlnaHQ6IDA7Cn0KCi5tanItbWZ2LWNvbnRlbnQtd3JhcHBlcltkYXRhLXNpZGViYXItcG9zPSJsZWZ0Il0gLm1qci13cy1zaWRlYmFyLXJlc2l6ZXIgewogICAgbGVmdDogMDsKfQoKLm1qci1tZnYtY29udGVudC13cmFwcGVyW2RhdGEtc2lkZWJhci1wb3M9ImJvdHRvbSJdIC5tanItd3Mtc2lkZWJhci1yZXNpemVyIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KLm1qci13cy1ub2RlLWhlYWRlciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoCiAgICAgICAgaW4gc3JnYiwKICAgICAgICB2YXIoLS1tanItc3VyZmFjZS0wLCAjMWUxZTFlKSA0MCUsCiAgICAgICAgdmFyKC0tbWpyLXN1cmZhY2UtMSwgIzJhMmEyYSkgNjAlCiAgICApOwogICAgY3Vyc29yOiBkZWZhdWx0OwogICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTJzIGVhc2U7Cn0KLm1qci13cy1ub2RlLmlzLWNvbGxhcHNpYmxlIC5tanItd3Mtbm9kZS1oZWFkZXIgewogICAgY3Vyc29yOiBwb2ludGVyOwp9Ci5tanItd3Mtbm9kZS5pcy1jb2xsYXBzaWJsZSAubWpyLXdzLW5vZGUtaGVhZGVyOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peCgKICAgICAgICBpbiBzcmdiLAogICAgICAgIHZhcigtLW1qci1zdXJmYWNlLTAsICMxZTFlMWUpIDI4JSwKICAgICAgICB2YXIoLS1tanItc3VyZmFjZS0xLCAjMmEyYTJhKSA3MiUKICAgICk7Cn0KLm1qci13cy1ub2RlLmlzLWNvbGxhcHNpYmxlLmlzLWNvbGxhcHNlZCAubWpyLXdzLW5vZGUtaGVhZGVyOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peCgKICAgICAgICBpbiBzcmdiLAogICAgICAgIHZhcigtLW1qci1hY2NlbnQsICM1YjhhZjApIDglLAogICAgICAgIHZhcigtLW1qci1zdXJmYWNlLTEsICMyYTJhMmEpIDkyJQogICAgKTsKfQoubWpyLXdzLW5vZGUtdG9nZ2xlIHsKICAgIGZsZXg6IDAgMCBhdXRvOwp9Ci5tanItd3Mtbm9kZS10aXRsZS13cmFwIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiAwOwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMXB4Owp9Ci5tanItd3Mtbm9kZS10eXBlIHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogdmFyKC0tY29udGVudC1mZywgI2RkZCk7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwp9Ci5tanItd3Mtbm9kZS10aXRsZSB7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQ4KTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cn0KLm1qci13cy1ub2RlLWtpbmQgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBmbGV4OiAwIDAgYXV0bzsKICAgIG1heC13aWR0aDogMTEwcHg7CiAgICBwYWRkaW5nOiAycHggNnB4OwogICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsICM1YjhhZjApIDM4JSwgdHJhbnNwYXJlbnQgNjIlKTsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsICM1YjhhZjApIDEyJSwgdHJhbnNwYXJlbnQgODglKTsKICAgIGNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCwgIzViOGFmMCkgNzglLCAjZmZmZmZmIDIyJSk7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGluZS1oZWlnaHQ6IDEuMjsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cn0KLm1qci13cy1ub2RlLWtpbmQgLnBpIHsKICAgIGZvbnQtc2l6ZTogMTBweDsKfQoubWpyLXdzLW5vZGUta2luZC1jb3VudCB7CiAgICBtaW4td2lkdGg6IDE0cHg7CiAgICBwYWRkaW5nOiAwIDNweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODIpOwogICAgdGV4dC1hbGlnbjogY2VudGVyOwp9Ci5tanItd3Mtbm9kZS5pcy1jb2xsYXBzZWQgLm1qci13cy1ub2RlLWJvZHkgewogICAgZGlzcGxheTogbm9uZTsKfQoubWpyLXdzLW5vZGUtYm9keSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogNHB4OwogICAgcGFkZGluZzogNnB4IDEwcHg7Cn0KLm1qci13cy1ub2RlLWVtcHR5IHsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7CiAgICBwYWRkaW5nOiA0cHggMDsKfQoKLyogLS0gTmVzdGVkIG5vZGVzIChpbnNpZGUgc3ViZ3JhcGhzKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoubWpyLXdzLW5vZGUtLW5lc3RlZCB7CiAgICBib3JkZXItbGVmdDogMnB4IHNvbGlkIHJnYmEoOTEsIDEzOCwgMjQwLCAwLjM1KTsKfQoubWpyLXdzLW5vZGUtLW5lc3RlZCAubWpyLXdzLW5vZGUtaGVhZGVyIHsKICAgIHBhZGRpbmctbGVmdDogMTZweDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peCgKICAgICAgICBpbiBzcmdiLAogICAgICAgIHZhcigtLW1qci1hY2NlbnQsICM1YjhhZjApIDUlLAogICAgICAgIHZhcigtLW1qci1zdXJmYWNlLTEsICMyYTJhMmEpIDk1JQogICAgKTsKfQoubWpyLXdzLW5vZGUtLW5lc3RlZC5pcy1jb2xsYXBzaWJsZSAubWpyLXdzLW5vZGUtaGVhZGVyOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peCgKICAgICAgICBpbiBzcmdiLAogICAgICAgIHZhcigtLW1qci1hY2NlbnQsICM1YjhhZjApIDEwJSwKICAgICAgICB2YXIoLS1tanItc3VyZmFjZS0xLCAjMmEyYTJhKSA5MCUKICAgICk7Cn0KCi8qIC0tIFN1YmdyYXBoIGNoaWxkcmVuIGdyb3VwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5tanItd3MtY2hpbGRyZW4tdG9nZ2xlIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA2cHg7CiAgICB3aWR0aDogMTAwJTsKICAgIHBhZGRpbmc6IDVweCAxMHB4IDVweCAyMHB4OwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KAogICAgICAgIGluIHNyZ2IsCiAgICAgICAgdmFyKC0tbWpyLWFjY2VudCwgIzViOGFmMCkgNiUsCiAgICAgICAgdmFyKC0tbWpyLXN1cmZhY2UtMCwgIzFlMWUxZSkgOTQlCiAgICApOwogICAgYm9yZGVyOiBub25lOwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwogICAgY29sb3I6IHZhcigtLW1qci1hY2NlbnQsICM1YjhhZjApOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIG9wYWNpdHk6IDAuODsKICAgIHRyYW5zaXRpb246CiAgICAgICAgb3BhY2l0eSAwLjFzIGVhc2UsCiAgICAgICAgYmFja2dyb3VuZCAwLjFzIGVhc2U7Cn0KLm1qci13cy1jaGlsZHJlbi10b2dnbGUtLW5lc3RlZCB7CiAgICBwYWRkaW5nLWxlZnQ6IDI4cHg7Cn0KLm1qci13cy1jaGlsZHJlbi10b2dnbGU6aG92ZXIgewogICAgb3BhY2l0eTogMTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peCgKICAgICAgICBpbiBzcmdiLAogICAgICAgIHZhcigtLW1qci1hY2NlbnQsICM1YjhhZjApIDEyJSwKICAgICAgICB2YXIoLS1tanItc3VyZmFjZS0wLCAjMWUxZTFlKSA4OCUKICAgICk7Cn0KLm1qci13cy1jaGlsZHJlbi10b2dnbGVbYXJpYS1leHBhbmRlZD0idHJ1ZSJdIHsKICAgIG9wYWNpdHk6IDE7Cn0KLm1qci13cy1jaGlsZHJlbiB7CiAgICBib3JkZXItbGVmdDogMnB4IHNvbGlkIHJnYmEoOTEsIDEzOCwgMjQwLCAwLjI1KTsKICAgIG1hcmdpbi1sZWZ0OiA2cHg7CiAgICBwYWRkaW5nLWxlZnQ6IDZweDsKfQoKLm1qci13cy13aWRnZXQtcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgIGdhcDogOHB4Owp9Ci5tanItd3Mtd2lkZ2V0LXJvdy0tYmxvY2sgewogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMnB4Owp9Ci5tanItd3Mtd2lkZ2V0LXJvdy0tYmxvY2sgLm1qci13cy13aWRnZXQtbGFiZWwgewogICAgZmxleDogbm9uZTsKICAgIHBhZGRpbmctdG9wOiAwOwp9Ci5tanItd3Mtd2lkZ2V0LXJvdy0tYmxvY2sgLm1qci13cy13aWRnZXQtaW5wdXQgewogICAgd2lkdGg6IDEwMCU7Cn0KLm1qci13cy13aWRnZXQtbGFiZWwgewogICAgZmxleDogMCAwIDgwcHg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBjb2xvcjogdmFyKC0tZGVzY3JpcC10ZXh0LCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTUpKTsKICAgIHBhZGRpbmctdG9wOiA1cHg7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwp9Ci5tanItd3Mtd2lkZ2V0LWlucHV0IHsKICAgIGZsZXg6IDE7CiAgICBtaW4td2lkdGg6IDA7Cn0KLm1qci13cy1pbnB1dCB7CiAgICB3aWR0aDogMTAwJTsKICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbWZ5LWlucHV0LWJnLCAjMjIyKTsKICAgIGNvbG9yOiB2YXIoLS1pbnB1dC10ZXh0LCAjZGRkKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLW1qci1ib3JkZXIsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikpOwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgcGFkZGluZzogNHB4IDZweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgb3V0bGluZTogbm9uZTsKICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAxMjBtcyBlYXNlOwp9Ci5tanItd3MtaW5wdXQ6Zm9jdXMgewogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKfQoubWpyLXdzLXRleHRhcmVhIHsKICAgIHJlc2l6ZTogbm9uZTsKICAgIG1pbi1oZWlnaHQ6IDI4cHg7CiAgICBsaW5lLWhlaWdodDogMS40OwogICAgb3ZlcmZsb3cteTogaGlkZGVuOwp9Ci5tanItd3MtdGV4dC13cmFwcGVyIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAycHg7CiAgICBmbGV4OiAxOwogICAgbWluLXdpZHRoOiAwOwp9Ci5tanItd3MtdGV4dC13cmFwcGVyIC5tanItd3MtdGV4dGFyZWEgewogICAgd2lkdGg6IDEwMCU7Cn0KLm1qci13cy1leHBhbmQtYnRuIHsKICAgIGFsaWduLXNlbGY6IGZsZXgtZW5kOwogICAgYmFja2dyb3VuZDogbm9uZTsKICAgIGJvcmRlcjogbm9uZTsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHBhZGRpbmc6IDAgNHB4OwogICAgb3BhY2l0eTogMC44Owp9Ci5tanItd3MtZXhwYW5kLWJ0bjpob3ZlciB7CiAgICBvcGFjaXR5OiAxOwogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0KLm1qci13cy1yZWFkb25seSB7CiAgICBvcGFjaXR5OiAwLjU7CiAgICBjdXJzb3I6IGRlZmF1bHQ7Cn0KLm1qci13cy1jaGVja2JveCB7CiAgICBhY2NlbnQtY29sb3I6IHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpOwogICAgd2lkdGg6IDE2cHg7CiAgICBoZWlnaHQ6IDE2cHg7CiAgICBtYXJnaW4tdG9wOiA0cHg7Cn0KLm1qci13cy10b2dnbGUtbGFiZWwgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7Cn0KCi8qIC0tIExvY2F0ZSBidXR0b24gaW5zaWRlIG5vZGUgaGVhZGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5tanItd3MtbG9jYXRlIHsKICAgIHdpZHRoOiAyNHB4ICFpbXBvcnRhbnQ7CiAgICBoZWlnaHQ6IDI0cHggIWltcG9ydGFudDsKICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKICAgIG9wYWNpdHk6IDAuNTsKfQoubWpyLXdzLWxvY2F0ZTpob3ZlciB7CiAgICBvcGFjaXR5OiAxOwp9CgovKiAtLSBSdW4gYnV0dG9uIHN0YXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoubWpyLW1mdi1ydW4tY29udHJvbHMgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA0cHg7Cn0KLm1qci1tZnYtcnVuLWJ0biAucGkgewogICAgY29sb3I6IHZhcigtLW1qci1zdGF0dXMtc3VjY2VzcywgIzRjYWY1MCk7Cn0KLm1qci1tZnYtcnVuLWJ0bi5ydW5uaW5nIC5waSB7CiAgICBjb2xvcjogdmFyKC0tbWpyLW11dGVkLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjUpKTsKfQoubWpyLW1mdi1ydW4tYnRuLnN0b3BwaW5nIC5waSB7CiAgICBjb2xvcjogdmFyKC0tbWpyLXN0YXR1cy13YXJuaW5nLCAjZmZhNzI2KTsKfQoubWpyLW1mdi1ydW4tYnRuLmVycm9yIC5waSB7CiAgICBjb2xvcjogI2Y0NDMzNjsKfQoKLm1qci1tZnYtc3RvcC1idG4gLnBpIHsKICAgIGNvbG9yOiAjZWY1MzUwOwp9Ci5tanItbWZ2LXN0b3AtYnRuLmFjdGl2ZSAucGkgewogICAgY29sb3I6ICNmZjhhNjU7Cn0KLm1qci1tZnYtc3RvcC1idG4uc3RvcHBpbmcgLnBpIHsKICAgIGNvbG9yOiB2YXIoLS1tanItc3RhdHVzLXdhcm5pbmcsICNmZmE3MjYpOwp9CgovKiAtLSBGbG9hdGluZyBWaWV3ZXIgc2ltcGxlIHZpZGVvIHBsYXllciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci5pcy1hdWRpbyB7CiAgICBiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDIwJSAyMCUsIHJnYmEoOTUsIDE3OSwgMjU1LCAwLjIpLCByZ2JhKDE4LCAyMCwgMjgsIDAuOTUpKTsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci1hdWRpby1iYWNrZHJvcCB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgZm9udC1zaXplOiAxM3B4OwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxldHRlci1zcGFjaW5nOiAwLjJweDsKICAgIHRleHQtc2hhZG93OiAwIDJweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC40NSk7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHBhZGRpbmc6IDE4cHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItY29udHJvbHMgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMTJweDsKICAgIHJpZ2h0OiAxMnB4OwogICAgYm90dG9tOiAxMnB4OwogICAgei1pbmRleDogMzA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogOHB4OwogICAgcGFkZGluZzogOXB4IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiAxNHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byB0b3AsIHJnYmEoMTAsIDEwLCAxNCwgMC43NiksIHJnYmEoMTYsIDE2LCAyNCwgMC41NSkpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci1yb3cgewogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7Cn0KCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItc2VlayB7CiAgICAtLW1qci1zZWVrLXBjdDogMCU7CiAgICBhcHBlYXJhbmNlOiBub25lOwogICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDZweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgb3V0bGluZTogbm9uZTsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgKICAgICAgICB0byByaWdodCwKICAgICAgICAjZmYyZjUyIDAlLAogICAgICAgICNmZjJmNTIgdmFyKC0tbWpyLXNlZWstcGN0KSwKICAgICAgICByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjQpIHZhcigtLW1qci1zZWVrLXBjdCksCiAgICAgICAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI0KSAxMDAlCiAgICApOwogICAgY3Vyc29yOiBwb2ludGVyOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLXNlZWs6Oi13ZWJraXQtc2xpZGVyLXRodW1iIHsKICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKICAgIHdpZHRoOiAxMnB4OwogICAgaGVpZ2h0OiAxMnB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzUpOwogICAgYmFja2dyb3VuZDogI2ZmMmY1MjsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci1zZWVrOjotbW96LXJhbmdlLXRodW1iIHsKICAgIHdpZHRoOiAxMnB4OwogICAgaGVpZ2h0OiAxMnB4OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzUpOwogICAgYmFja2dyb3VuZDogI2ZmMmY1MjsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci1idG4gewogICAgd2lkdGg6IDMwcHg7CiAgICBoZWlnaHQ6IDMwcHg7CiAgICBtaW4td2lkdGg6IDMwcHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yMik7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLWJ0biAucGkgewogICAgZm9udC1zaXplOiAxM3B4OwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSk7Cn0KCi5tanItbWZ2LXNpbXBsZS1wbGF5ZXItYnRuLmlzLWRpc2FibGVkLAoubWpyLW1mdi1zaW1wbGUtcGxheWVyLXNlZWsuaXMtZGlzYWJsZWQgewogICAgb3BhY2l0eTogMC40NTsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKLm1qci1tZnYtc2ltcGxlLXBsYXllci10aW1lIHsKICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45Mik7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwp9CgoubWpyLW1mdi1zaW1wbGUtcGxheWVyLWZyYW1lIHsKICAgIG1hcmdpbi1yaWdodDogMnB4OwogICAgcGFkZGluZzogM3B4IDhweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE2KTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgZm9udC1zaXplOiAxMXB4OwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGNvbnRhaW5lci10eXBlOiBpbmxpbmUtc2l6ZTsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9scyB7CiAgICB6LWluZGV4OiAzMDsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXSwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSB7CiAgICBsZWZ0OiA4cHg7CiAgICByaWdodDogOHB4OwogICAgYm90dG9tOiA4cHg7CiAgICBwYWRkaW5nOiA4cHg7CiAgICBnYXA6IDZweDsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXSAubWpyLXZpZGVvLXJvdy0tdG9wLAoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0ic3RhY2tlZCJdIC5tanItdmlkZW8tcm93LS10b3AgewogICAgZ2FwOiA4cHg7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0gLm1qci12aWRlby10aW1lZ3JvdXAsCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0gLm1qci12aWRlby10aW1lZ3JvdXAgewogICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgZ2FwOiA2cHg7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0gLm1qci12aWRlby1yb3ctLWJvdHRvbSwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLXJvdy0tYm90dG9tIHsKICAgIGZsZXgtd3JhcDogbm93cmFwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGdhcDogNnB4Owp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0iY29tcGFjdCJdIC5tanItdmlkZW8tYm90dG9tLAoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0ic3RhY2tlZCJdIC5tanItdmlkZW8tYm90dG9tIHsKICAgIGZsZXgtc2hyaW5rOiAxOwogICAgZmxleC13cmFwOiBub3dyYXA7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0gLm1qci12aWRlby10cmFuc3BvcnQsCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0gLm1qci12aWRlby10cmFuc3BvcnQgewogICAgZmxleC13cmFwOiBub3dyYXA7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0gLm1qci12aWRlby1ncm91cCwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLWdyb3VwIHsKICAgIGZsZXgtd3JhcDogbm93cmFwOwp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0iY29tcGFjdCJdIC5tanItdmlkZW8tc2Vlay13cmFwLAoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0ic3RhY2tlZCJdIC5tanItdmlkZW8tc2Vlay13cmFwIHsKICAgIG1pbi13aWR0aDogMDsKfQoKLyogVGhlIE1GViB1c2VzIHRoZSAiLS12aWV3ZXIiIGNvbnRyb2wgdmFyaWFudCwgd2hpY2ggKHVubGlrZSAiLS12aWV3ZXJiYXIiKQogICBkb2VzIG5vdCBzaXplIHRoZSBuYXRpdmUgc2VlayBpbnB1dCBhbmQgcGFja3MgZnJhbWUvaW4vc2Vlay9vdXQvdGltZSBpbnRvIGEKICAgc2luZ2xlIHJvdy4gSW4gdGhlIG5hcnJvdyBNRlYgdGhlIHNlZWsgd3JhcCB0aGVuIGNvbGxhcHNlcyB0byB+MHB4IHdpZGUgYW5kCiAgIHRoZSBuYXRpdmUgaW5wdXQgdG8gMHB4IHRhbGwsIGxlYXZpbmcgYWxtb3N0IG5vIGNsaWNrIC8gZHJhZyB0YXJnZXQgZm9yCiAgIHNjcnViYmluZy4gR2l2ZSB0aGUgc2VlayBpdHMgb3duIGZ1bGwtd2lkdGggcm93IHdpdGggYSB1c2FibGUgaGl0IGFyZWEuICovCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlciAubWpyLXZpZGVvLXJvdy0tdG9wIHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgcm93LWdhcDogNDJweDsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9scy0tdmlld2VyIC5tanItdmlkZW8tcm93LS10b3AgLm1qci12aWRlby1zZWVrLXdyYXAgewogICAgb3JkZXI6IDEwOwogICAgZmxleDogMSAxIDEwMCU7CiAgICB3aWR0aDogMTAwJTsKICAgIG1pbi13aWR0aDogMDsKICAgIG1pbi1oZWlnaHQ6IDQycHg7CiAgICBwYWRkaW5nLXRvcDogNnB4Owp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXIgLm1qci12aWRlby1yYW5nZS0tc2VlayB7CiAgICBoZWlnaHQ6IDIwcHg7CiAgICBhY2NlbnQtY29sb3I6IHJnYmEoMjE0LCAyMTgsIDIyNCwgMC45Mik7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHMtLXZpZXdlciAubWpyLXZpZGVvLXNlZWstem9uZXMgewogICAgaGVpZ2h0OiAxMHB4Owp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXIgLm1qci12aWRlby1zZWVrLWhhbmRsZSB7CiAgICB3aWR0aDogMTZweDsKICAgIGhlaWdodDogMjhweDsKICAgIHRvcDogMjBweDsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXSAubWpyLXZpZGVvLWJhci10aW1lbGluZSwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLWJhci10aW1lbGluZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QKICAgIC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0KICAgIC5tanItdmlkZW8tYmFyLXRpbWVsaW5lCiAgICAubWpyLXZpZGVvLXNlZWstd3JhcCwKLm1qci1tZnYtcGxheWVyLWhvc3QKICAgIC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0KICAgIC5tanItdmlkZW8tYmFyLXRpbWVsaW5lCiAgICAubWpyLXZpZGVvLXNlZWstd3JhcCB7CiAgICBvcmRlcjogLTE7CiAgICBmbGV4OiAxIDEgMTAwJTsKICAgIHdpZHRoOiAxMDAlOwp9CgoubWpyLW1mdi1wbGF5ZXItaG9zdAogICAgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXQogICAgLm1qci12aWRlby1iYXItdGltZWxpbmUKICAgIC5tanItdmlkZW8tZ3JvdXAtLWluLAoubWpyLW1mdi1wbGF5ZXItaG9zdAogICAgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXQogICAgLm1qci12aWRlby1iYXItdGltZWxpbmUKICAgIC5tanItdmlkZW8tZ3JvdXAtLW91dCwKLm1qci1tZnYtcGxheWVyLWhvc3QKICAgIC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0KICAgIC5tanItdmlkZW8tYmFyLXRpbWVsaW5lCiAgICAubWpyLXZpZGVvLWdyb3VwLS1pbiwKLm1qci1tZnYtcGxheWVyLWhvc3QKICAgIC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0KICAgIC5tanItdmlkZW8tYmFyLXRpbWVsaW5lCiAgICAubWpyLXZpZGVvLWdyb3VwLS1vdXQgewogICAgZmxleDogMCAxIGF1dG87Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJjb21wYWN0Il0gLm1qci12aWRlby1yYW5nZS1jb3VudCwKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9ImNvbXBhY3QiXSAubWpyLXZpZGVvLWZyYW1lIHsKICAgIG1pbi13aWR0aDogYXV0bzsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLXJhbmdlLWNvdW50IHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQoKLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1jb250cm9sc1tkYXRhLW1qci1sYXlvdXQ9InN0YWNrZWQiXSAubWpyLXZpZGVvLWZyYW1lIHsKICAgIG1pbi13aWR0aDogYXV0bzsKICAgIHBhZGRpbmc6IDNweCA2cHg7Cn0KCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0gLm1qci12aWRlby1idG4tLWluLAoubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzW2RhdGEtbWpyLWxheW91dD0ic3RhY2tlZCJdIC5tanItdmlkZW8tYnRuLS1vdXQsCi5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHNbZGF0YS1tanItbGF5b3V0PSJzdGFja2VkIl0gLm1qci12aWRlby1idG4tLW1hcmsgewogICAgbWluLXdpZHRoOiAzMnB4Owp9CgpAY29udGFpbmVyIChtYXgtd2lkdGg6IDkwMHB4KSB7CiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzIHsKICAgICAgICBsZWZ0OiA4cHg7CiAgICAgICAgcmlnaHQ6IDhweDsKICAgICAgICBib3R0b206IDhweDsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgZ2FwOiA2cHg7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1yb3ctLXRvcCB7CiAgICAgICAgZ2FwOiA4cHg7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby10aW1lZ3JvdXAgewogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgICAgICBnYXA6IDZweDsKICAgIH0KCiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLXJvdy0tYm90dG9tIHsKICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGdhcDogNnB4OwogICAgfQoKICAgIC5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tYm90dG9tIHsKICAgICAgICBmbGV4LXNocmluazogMTsKICAgICAgICBmbGV4LXdyYXA6IG5vd3JhcDsKICAgIH0KCiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLXRyYW5zcG9ydCB7CiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1ncm91cCB7CiAgICAgICAgZmxleC13cmFwOiBub3dyYXA7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1zZWVrLXdyYXAgewogICAgICAgIG1pbi13aWR0aDogMDsKICAgIH0KCiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIgLm1qci12aWRlby1iYXItdGltZWxpbmUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QKICAgICAgICAubWpyLXZpZGVvLWNvbnRyb2xzLS12aWV3ZXJiYXIKICAgICAgICAubWpyLXZpZGVvLWJhci10aW1lbGluZQogICAgICAgIC5tanItdmlkZW8tc2Vlay13cmFwIHsKICAgICAgICBvcmRlcjogLTE7CiAgICAgICAgZmxleDogMSAxIDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICB9Cn0KCkBjb250YWluZXIgKG1heC13aWR0aDogNjgwcHgpIHsKICAgIC5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tY29udHJvbHMgewogICAgICAgIHBhZGRpbmc6IDZweDsKICAgIH0KCiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLWJ0biB7CiAgICAgICAgcGFkZGluZzogNXB4IDhweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICB9CgogICAgLm1qci1tZnYtcGxheWVyLWhvc3QgLm1qci12aWRlby1udW0gewogICAgICAgIHBhZGRpbmc6IDRweCA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgfQoKICAgIC5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tdGltZSwKICAgIC5tanItbWZ2LXBsYXllci1ob3N0IC5tanItdmlkZW8tZnJhbWUsCiAgICAubWpyLW1mdi1wbGF5ZXItaG9zdCAubWpyLXZpZGVvLXJhbmdlLWNvdW50IHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICB9Cn0KCi8qIC0tIFNldHRpbmdzIGJ1dHRvbiBhY3RpdmUgc3RhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi5tanItbWZ2LXNldHRpbmdzLWJ0bi5hY3RpdmUgewogICAgYm9yZGVyLWNvbG9yOiBjb2xvci1taXgoCiAgICAgICAgaW4gc3JnYiwKICAgICAgICB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKSA1NSUsCiAgICAgICAgdmFyKC0tbWpyLWJvcmRlciwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKSkKICAgICk7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvci1taXgoCiAgICAgICAgaW4gc3JnYiwKICAgICAgICB2YXIoLS1tanItc3VyZmFjZS0yLCAjMzMzKSA3MCUsCiAgICAgICAgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZikgMTglCiAgICApOwp9Ci5tanItbWZ2LXNldHRpbmdzLWJ0bi5hY3RpdmUgLnBpIHsKICAgIGNvbG9yOiB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKTsKfQoKLyogLS0gQ2xvc2UgYnV0dG9uIChyZWQpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoubWpyLW1mdiAubWpyLW1mdi1jbG9zZS1idG4gewogICAgY29sb3I6ICNlODUwNTA7Cn0KLm1qci1tZnYgLm1qci1tZnYtY2xvc2UtYnRuOmhvdmVyIHsKICAgIGNvbG9yOiAjZmY2YjZiOwogICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyMzIsIDgwLCA4MCwgMC4xNSk7Cn0KCi8qIC0tIEVtcHR5IHN0YXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLm1qci1tZnYtZW1wdHkgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSk7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIHBhZGRpbmc6IDEycHg7Cn0KCi8qIC0tIENvbXBhcmUgbGFiZWxzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLm1qci1tZnYtbGFiZWwgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiA4cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNTgpOwogICAgY29sb3I6ICNmZmY7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgcGFkZGluZzogMnB4IDdweDsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgei1pbmRleDogMjA7CiAgICBsZXR0ZXItc3BhY2luZzogMC40cHg7Cn0KCi5tanItbWZ2LWxhYmVsLmxhYmVsLWxlZnQgewogICAgbGVmdDogOHB4Owp9Ci5tanItbWZ2LWxhYmVsLmxhYmVsLXJpZ2h0IHsKICAgIHJpZ2h0OiA4cHg7Cn0KCi8qIC0tIEFCIGRpdmlkZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLm1qci1tZnYtYWItZGl2aWRlciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDA7CiAgICBib3R0b206IDA7CiAgICB3aWR0aDogMC41cHg7CiAgICBjdXJzb3I6IGNvbC1yZXNpemU7CiAgICB6LWluZGV4OiAxMDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44OCk7CiAgICBib3gtc2hhZG93OgogICAgICAgIDAgMCAwIDAuNXB4IHJnYmEoMCwgMCwgMCwgMC40KSwKICAgICAgICAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAxMDBtcyBlYXNlOwp9CgoubWpyLW1mdi1hYi1kaXZpZGVyOjpiZWZvcmUgewogICAgY29udGVudDogIiI7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDA7CiAgICBib3R0b206IDA7CiAgICBsZWZ0OiA1MCU7CiAgICB3aWR0aDogMTJweDsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKfQoKLm1qci1tZnYtYWItZGl2aWRlcjpob3ZlciwKLm1qci1tZnYtYWItZGl2aWRlcjphY3RpdmUgewogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIE1GViBHZW9tZXRyeSAmIExheW91dCBDbGFzc2VzIChyZXBsYWNlcyBpbmxpbmUgc3R5bGVzIGluIEZsb2F0aW5nVmlld2VyLmpzKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKLyogTWFpbiBNRlYgY29udGFpbmVyIGdlb21ldHJ5ICovCi5tanItbWZ2IHsKICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgIHRvcDogdmFyKC0tbWpyLW1mdi10b3Atb2Zmc2V0LCA2MHB4KTsKICAgIHJpZ2h0OiAyMHB4OwogICAgd2lkdGg6IDY0MHB4OwogICAgaGVpZ2h0OiAzNjBweDsKICAgIG1pbi13aWR0aDogMjIwcHg7CiAgICBtaW4taGVpZ2h0OiAxNjBweDsKICAgIC8qIEFsd2F5cyBmbGV4OyB2aXNpYmlsaXR5ICsgb3BhY2l0eSBjb250cm9sIHNob3cvaGlkZSBzbyBDU1MgdHJhbnNpdGlvbnMgd29yay4KICAgICAgIHBvaW50ZXItZXZlbnRzOm5vbmUgd2hpbGUgaGlkZGVuIHByZXZlbnRzIGFjY2lkZW50YWwgaW50ZXJhY3Rpb24uICovCiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIHJlc2l6ZTogYm90aDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB6LWluZGV4OiAxMDAwMDsKICAgIC8qIEhpZGRlbiBzdGF0ZSAqLwogICAgb3BhY2l0eTogMDsKICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC02cHgpIHNjYWxlKDAuOTgpOwogICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIHJpZ2h0OwogICAgdHJhbnNpdGlvbjoKICAgICAgICBvcGFjaXR5IDAuMThzIGVhc2Utb3V0LAogICAgICAgIHRyYW5zZm9ybSAwLjE4cyBlYXNlLW91dCwKICAgICAgICB2aXNpYmlsaXR5IDBzIGxpbmVhciAwLjE4czsKfQoKLm1qci1tZnYubWpyLW1mdi0tcmVzaXppbmcgewogICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5tanItbWZ2LmlzLXZpc2libGUgewogICAgb3BhY2l0eTogMTsKICAgIHZpc2liaWxpdHk6IHZpc2libGU7CiAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKSBzY2FsZSgxKTsKICAgIHRyYW5zaXRpb246CiAgICAgICAgb3BhY2l0eSAwLjE4cyBlYXNlLW91dCwKICAgICAgICB0cmFuc2Zvcm0gMC4xOHMgZWFzZS1vdXQsCiAgICAgICAgdmlzaWJpbGl0eSAwcyBsaW5lYXIgMHM7Cn0KCi8qIE1lZGlhIGVsZW1lbnRzIChpbWcvdmlkZW8pIHNpemluZyB2YXJpYW50cyAqLwoubWpyLW1mdi1tZWRpYSB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgbWF4LXdpZHRoOiAxMDAlOwogICAgbWF4LWhlaWdodDogMTAwJTsKICAgIG9iamVjdC1maXQ6IGNvbnRhaW47CiAgICBvYmplY3QtcG9zaXRpb246IGNlbnRlcjsKfQoKLm1qci1tZnYtbWVkaWEtLWZpdC1oZWlnaHQgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBtYXgtaGVpZ2h0OiAxMDAlOwogICAgb2JqZWN0LWZpdDogY29udGFpbjsKICAgIG9iamVjdC1wb3NpdGlvbjogY2VudGVyOwp9CgoubWpyLW1mdi1tZWRpYS0tZmlsbCB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIG1heC1oZWlnaHQ6IDEwMCU7CiAgICBvYmplY3QtZml0OiBjb250YWluOwogICAgb2JqZWN0LXBvc2l0aW9uOiBjZW50ZXI7CiAgICBkaXNwbGF5OiBibG9jazsKfQoKLyogQXVkaW8gY2FyZCBpbnNpZGUgTUZWICovCi5tanItbWZ2LWF1ZGlvLWNhcmQgewogICAgd2lkdGg6IG1pbig5MiUsIDU2MHB4KTsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgZ2FwOiAxMHB4OwogICAgcGFkZGluZzogMTJweDsKICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE2MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAyKSk7CiAgICBib3gtc2hhZG93OiAwIDZweCAxNnB4IHJnYmEoMCwgMCwgMCwgMC4zNSk7Cn0KCi5tanItbWZ2LWF1ZGlvLWhlYWQgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIG1pbi13aWR0aDogMDsKfQoKLm1qci1tZnYtYXVkaW8taWNvbiB7CiAgICBjb2xvcjogdmFyKC0tbWpyLWJhZGdlLWF1ZGlvLCAjZmY5ODAwKTsKICAgIG9wYWNpdHk6IDAuOTU7Cn0KCi5tanItbWZ2LWF1ZGlvLXRpdGxlIHsKICAgIG1pbi13aWR0aDogMDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwp9CgoubWpyLW1mdi1hdWRpby1wbGF5ZXIgewogICAgd2lkdGg6IDEwMCU7Cn0KCi5tanItbWZ2LXNpZGUtcGFuZWwgLm1qci1tZnYtYXVkaW8tY2FyZCwKLm1qci1tZnYtYWItbGF5ZXIgLm1qci1tZnYtYXVkaW8tY2FyZCwKLm1qci1tZnYtZ3JpZC1jZWxsIC5tanItbWZ2LWF1ZGlvLWNhcmQgewogICAgd2lkdGg6IGNhbGMoMTAwJSAtIDIwcHgpOwp9CgovKiBWaWRlbyBlbGVtZW50IHNwZWNpZmljIHN0eWxlcyAqLwoubWpyLW1mdi1tZWRpYS12aWRlbyB7CiAgICAvKiBJbmhlcml0cyBmcm9tIC5tanItbWZ2LW1lZGlhIG9yIC5tanItbWZ2LW1lZGlhLS1maWxsICovCn0KCi8qIE5vZGUgU3RyZWFtIC0gY3VycmVudGx5LXN0cmVhbWVkIG5vZGUgYmFkZ2UgKHRvcC1sZWZ0IG9mIGNvbnRlbnQgYXJlYSwKICAgZm9sbG93aW5nIHRoZSBzYW1lIG92ZXJsYXkgcGF0dGVybiBhcyAubWpyLW1mdi1nZW5pbmZvKS4gKi8KLm1qci1tZnYtbm9kZS1vdmVybGF5IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogOHB4OwogICAgbGVmdDogOHB4OwogICAgei1pbmRleDogMTI7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGluZS1oZWlnaHQ6IDEuMzsKICAgIGNvbG9yOiAjZTZmM2ZmOwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjY1KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTIwLCAxNzAsIDI0MCwgMC40NSk7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAxNnB4KTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7Cn0KLyogR2VuIGluZm8gb3ZlcmxheSAtIGFsbCBtb2RlcyBzaGFyZSBiYXNlIGxheW91dCAqLwoubWpyLW1mdi1nZW5pbmZvLAoubWpyLW1mdi1nZW5pbmZvLWEsCi5tanItbWZ2LWdlbmluZm8tYiB7CiAgICBkaXNwbGF5OiBub25lOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogOHB4OwogICAgcmlnaHQ6IDhweDsKICAgIGJvdHRvbTogOHB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjY1KTsKICAgIGNvbG9yOiAjZmZmOwogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICBmb250LXNpemU6IDExcHg7CiAgICBtYXgtaGVpZ2h0OiA0MCU7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgb3ZlcnNjcm9sbC1iZWhhdmlvci15OiBjb250YWluOwogICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgdG91Y2gtYWN0aW9uOiBwYW4teTsKICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7CiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOwogICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC40KTsKfQoKLyogS2VlcCBHZW4gSW5mbyBhYm92ZSBjdXN0b20gc2ltcGxlLXBsYXllciBjb250cm9scyB3aGVuIHByZXNlbnQuICovCi5tanItbWZ2LWdlbmluZm8ubWpyLW1mdi1nZW5pbmZvLS1hYm92ZS1wbGF5ZXIsCi5tanItbWZ2LWdlbmluZm8tYS5tanItbWZ2LWdlbmluZm8tLWFib3ZlLXBsYXllciwKLm1qci1tZnYtZ2VuaW5mby1iLm1qci1tZnYtZ2VuaW5mby0tYWJvdmUtcGxheWVyIHsKICAgIHRvcDogOHB4OwogICAgYm90dG9tOiBhdXRvOwogICAgbWF4LWhlaWdodDogbWluKDQ1JSwgY2FsYygxMDAlIC0gMTI0cHgpKTsKfQoKLyogRmFsbGJhY2s6IHdoZW4gc2ltcGxlLXBsYXllciBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIGdlbmluZm8gb3ZlcmxheSwKICAgbW92ZSBpdCB1cCBldmVuIGlmIHRoZSBtb2RpZmllciBjbGFzcyB3YXMgbm90IGF0dGFjaGVkLiAqLwoubWpyLW1mdi1zaW1wbGUtcGxheWVyICsgLm1qci1tZnYtZ2VuaW5mbywKLm1qci1tZnYtc2ltcGxlLXBsYXllciArIC5tanItbWZ2LWdlbmluZm8tYSwKLm1qci1tZnYtc2ltcGxlLXBsYXllciArIC5tanItbWZ2LWdlbmluZm8tYiB7CiAgICB0b3A6IDhweDsKICAgIGJvdHRvbTogYXV0bzsKICAgIG1heC1oZWlnaHQ6IG1pbig0NSUsIGNhbGMoMTAwJSAtIDEyNHB4KSk7Cn0KCi8qIEFCIG1vZGUgb3ZlcmxheXMgYXJlIGF0dGFjaGVkIGF0IGNvbnRhaW5lciBsZXZlbDsgc2hpZnQgdGhlbSB3aGVuIEFCIGxheWVycyB1c2Ugc2ltcGxlLXBsYXllci4gKi8KLm1qci1tZnYtYWItY29udGFpbmVyOmhhcygubWpyLW1mdi1hYi1sYXllciAubWpyLW1mdi1zaW1wbGUtcGxheWVyKSAubWpyLW1mdi1nZW5pbmZvLWEsCi5tanItbWZ2LWFiLWNvbnRhaW5lcjpoYXMoLm1qci1tZnYtYWItbGF5ZXIgLm1qci1tZnYtc2ltcGxlLXBsYXllcikgLm1qci1tZnYtZ2VuaW5mby1iIHsKICAgIHRvcDogOHB4OwogICAgYm90dG9tOiBhdXRvOwogICAgbWF4LWhlaWdodDogbWluKDQ1JSwgY2FsYygxMDAlIC0gMTI0cHgpKTsKfQoKLyogU2hhcmVkIHN0eWxlIGZvciBhbGwgZ2VuIGluZm8gb3ZlcmxheSB2YXJpYW50cyAqLwoubWpyLW1mdi1nZW5pbmZvIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1hIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1iIHN0cm9uZyB7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbWFyZ2luLXJpZ2h0OiA0cHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk1KTsgLyogZGVmYXVsdCAtIG92ZXJyaWRkZW4gcGVyIGZpZWxkIGJlbG93ICovCn0KCi8qIFBlci1maWVsZCBsYWJlbCBjb2xvcnMgKi8KLm1qci1tZnYtZ2VuaW5mbyBbZGF0YS1maWVsZD0icHJvbXB0Il0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWEgW2RhdGEtZmllbGQ9InByb21wdCJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1iIFtkYXRhLWZpZWxkPSJwcm9tcHQiXSBzdHJvbmcgewogICAgY29sb3I6ICM3ZWM4ZmY7Cn0gLyogYmx1ZSAgIC0gUHJvbXB0ICovCgoubWpyLW1mdi1nZW5pbmZvIFtkYXRhLWZpZWxkPSJzZWVkIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWEgW2RhdGEtZmllbGQ9InNlZWQiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYiBbZGF0YS1maWVsZD0ic2VlZCJdIHN0cm9uZyB7CiAgICBjb2xvcjogI2ZmZDQ3YTsKfSAvKiBhbWJlciAgLSBTZWVkICAgKi8KCi5tanItbWZ2LWdlbmluZm8gW2RhdGEtZmllbGQ9Im1vZGVsIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWEgW2RhdGEtZmllbGQ9Im1vZGVsIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgW2RhdGEtZmllbGQ9Im1vZGVsIl0gc3Ryb25nIHsKICAgIGNvbG9yOiAjN2RkYThhOwp9IC8qIGdyZWVuICAtIE1vZGVsICAqLwoKLm1qci1tZnYtZ2VuaW5mbyBbZGF0YS1maWVsZD0ibG9yYSJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1hIFtkYXRhLWZpZWxkPSJsb3JhIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgW2RhdGEtZmllbGQ9ImxvcmEiXSBzdHJvbmcgewogICAgY29sb3I6ICNkNDhjZmY7Cn0gLyogdmlvbGV0IC0gTG9SQSAgICovCgoubWpyLW1mdi1nZW5pbmZvIFtkYXRhLWZpZWxkPSJzYW1wbGVyIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWEgW2RhdGEtZmllbGQ9InNhbXBsZXIiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYiBbZGF0YS1maWVsZD0ic2FtcGxlciJdIHN0cm9uZyB7CiAgICBjb2xvcjogI2ZmOWY3YTsKfSAvKiBvcmFuZ2UgLSBTYW1wbGVyICovCgoubWpyLW1mdi1nZW5pbmZvIFtkYXRhLWZpZWxkPSJzY2hlZHVsZXIiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYSBbZGF0YS1maWVsZD0ic2NoZWR1bGVyIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgW2RhdGEtZmllbGQ9InNjaGVkdWxlciJdIHN0cm9uZyB7CiAgICBjb2xvcjogI2ZmN2E5ZjsKfSAvKiBwaW5rICAgLSBTY2hlZHVsZXIgKi8KCi5tanItbWZ2LWdlbmluZm8gW2RhdGEtZmllbGQ9ImNmZyJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1hIFtkYXRhLWZpZWxkPSJjZmciXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tYiBbZGF0YS1maWVsZD0iY2ZnIl0gc3Ryb25nIHsKICAgIGNvbG9yOiAjN2E5ZmZmOwp9IC8qIGluZGlnbyAtIENGRyAqLwoKLm1qci1tZnYtZ2VuaW5mbyBbZGF0YS1maWVsZD0ic3RlcCJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1hIFtkYXRhLWZpZWxkPSJzdGVwIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgW2RhdGEtZmllbGQ9InN0ZXAiXSBzdHJvbmcgewogICAgY29sb3I6ICM3YWZmZDQ7Cn0gLyogdGVhbCAgIC0gU3RlcCAqLwoKLm1qci1tZnYtZ2VuaW5mbyBbZGF0YS1maWVsZD0iZ2VuVGltZSJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1hIFtkYXRhLWZpZWxkPSJnZW5UaW1lIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWIgW2RhdGEtZmllbGQ9ImdlblRpbWUiXSBzdHJvbmcgewogICAgY29sb3I6ICNlMGZmN2E7Cn0gLyogbGltZSAgIC0gR2VuIFRpbWUgKi8KCi5tanItbWZ2LWdlbmluZm8gZGl2LAoubWpyLW1mdi1nZW5pbmZvLWEgZGl2LAoubWpyLW1mdi1nZW5pbmZvLWIgZGl2IHsKICAgIGxpbmUtaGVpZ2h0OiAxLjM1OwogICAgbWFyZ2luLWJvdHRvbTogM3B4Owp9CgoubWpyLW1mdi1nZW5pbmZvIGRpdjpsYXN0LWNoaWxkLAoubWpyLW1mdi1nZW5pbmZvLWEgZGl2Omxhc3QtY2hpbGQsCi5tanItbWZ2LWdlbmluZm8tYiBkaXY6bGFzdC1jaGlsZCB7CiAgICBtYXJnaW4tYm90dG9tOiAwOwp9CgovKiBTaW1wbGUgbW9kZSBjb250YWluZXIgKi8KLm1qci1tZnYtc2ltcGxlLWNvbnRhaW5lciB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgovKiBBQiBtb2RlIGNvbnRhaW5lciAqLwoubWpyLW1mdi1hYi1jb250YWluZXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYmFja2dyb3VuZDogIzAwMDsKfQoKLyogQUIgbW9kZSBsYXllcnMgKi8KLm1qci1tZnYtYWItbGF5ZXIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwp9CgoubWpyLW1mdi1hYi1sYXllci0tYiB7CiAgICAvKiBjbGlwLXBhdGggYXBwbGllZCBpbmxpbmUgZm9yIGR5bmFtaWMgZGl2aWRlciBwb3NpdGlvbiAqLwp9CgovKiBTaWRlLWJ5LXNpZGUgbW9kZSBjb250YWluZXIgKi8KLm1qci1tZnYtc2lkZS1jb250YWluZXIgewogICAgZGlzcGxheTogZmxleDsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgZ2FwOiAycHg7CiAgICBiYWNrZ3JvdW5kOiAjMTExOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLyogU2lkZS1ieS1zaWRlIGhhbGYgcGFuZWxzICovCi5tanItbWZ2LXNpZGUtcGFuZWwgewogICAgZmxleDogMTsKICAgIG1pbi13aWR0aDogMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgYmFja2dyb3VuZDogIzBkMGQwZDsKfQoKLyogR3JpZCBjb21wYXJlICgyLTIpIGNvbnRhaW5lciAqLwoubWpyLW1mdi1ncmlkLWNvbnRhaW5lciB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOwogICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAxZnIgMWZyOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBnYXA6IDJweDsKICAgIGJhY2tncm91bmQ6ICMxMTE7CiAgICBvdmVyZmxvdzogaGlkZGVuOwp9CgovKiBHcmlkIGNlbGxzICovCi5tanItbWZ2LWdyaWQtY2VsbCB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJhY2tncm91bmQ6ICMwZDBkMGQ7CiAgICBtaW4td2lkdGg6IDA7CiAgICBtaW4taGVpZ2h0OiAwOwp9CgovKiBHZW4gaW5mbyBvdmVybGF5cyBmb3IgZ3JpZCBjZWxscyBDIGFuZCBEICovCi5tanItbWZ2LWdlbmluZm8tYywKLm1qci1tZnYtZ2VuaW5mby1kIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBsZWZ0OiA4cHg7CiAgICByaWdodDogOHB4OwogICAgYm90dG9tOiA4cHg7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNjUpOwogICAgY29sb3I6ICNmZmY7CiAgICBwYWRkaW5nOiA4cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIG1heC1oZWlnaHQ6IDQwJTsKICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yLXk6IGNvbnRhaW47CiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7CiAgICB0b3VjaC1hY3Rpb246IHBhbi15OwogICAgd29yZC1icmVhazogYnJlYWstd29yZDsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMik7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjQpOwp9CgoubWpyLW1mdi1nZW5pbmZvLWMgc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgc3Ryb25nIHsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICBtYXJnaW4tcmlnaHQ6IDRweDsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpOwp9CgovKiBQZXItZmllbGQgbGFiZWwgY29sb3JzIGZvciBDL0QgZ2VuIGluZm8gb3ZlcmxheXMgKi8KLm1qci1tZnYtZ2VuaW5mby1jIFtkYXRhLWZpZWxkPSJwcm9tcHQiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tZCBbZGF0YS1maWVsZD0icHJvbXB0Il0gc3Ryb25nIHsKICAgIGNvbG9yOiAjN2VjOGZmOwp9Ci5tanItbWZ2LWdlbmluZm8tYyBbZGF0YS1maWVsZD0ic2VlZCJdIHN0cm9uZywKLm1qci1tZnYtZ2VuaW5mby1kIFtkYXRhLWZpZWxkPSJzZWVkIl0gc3Ryb25nIHsKICAgIGNvbG9yOiAjZmZkNDdhOwp9Ci5tanItbWZ2LWdlbmluZm8tYyBbZGF0YS1maWVsZD0ibW9kZWwiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tZCBbZGF0YS1maWVsZD0ibW9kZWwiXSBzdHJvbmcgewogICAgY29sb3I6ICM3ZGRhOGE7Cn0KLm1qci1tZnYtZ2VuaW5mby1jIFtkYXRhLWZpZWxkPSJsb3JhIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgW2RhdGEtZmllbGQ9ImxvcmEiXSBzdHJvbmcgewogICAgY29sb3I6ICNkNDhjZmY7Cn0KLm1qci1tZnYtZ2VuaW5mby1jIFtkYXRhLWZpZWxkPSJzYW1wbGVyIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgW2RhdGEtZmllbGQ9InNhbXBsZXIiXSBzdHJvbmcgewogICAgY29sb3I6ICNmZjlmN2E7Cn0KLm1qci1tZnYtZ2VuaW5mby1jIFtkYXRhLWZpZWxkPSJzY2hlZHVsZXIiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tZCBbZGF0YS1maWVsZD0ic2NoZWR1bGVyIl0gc3Ryb25nIHsKICAgIGNvbG9yOiAjZmY3YTlmOwp9Ci5tanItbWZ2LWdlbmluZm8tYyBbZGF0YS1maWVsZD0iY2ZnIl0gc3Ryb25nLAoubWpyLW1mdi1nZW5pbmZvLWQgW2RhdGEtZmllbGQ9ImNmZyJdIHN0cm9uZyB7CiAgICBjb2xvcjogIzdhOWZmZjsKfQoubWpyLW1mdi1nZW5pbmZvLWMgW2RhdGEtZmllbGQ9InN0ZXAiXSBzdHJvbmcsCi5tanItbWZ2LWdlbmluZm8tZCBbZGF0YS1maWVsZD0ic3RlcCJdIHN0cm9uZyB7CiAgICBjb2xvcjogIzdhZmZkNDsKfQoKLyogR2VuIGluZm8gYWN0aXZlIHN0YXRlIC0gYnV0dG9uIGdsb3dzIHdoZW4gYXQgbGVhc3Qgb25lIGZpZWxkIGlzIHNlbGVjdGVkICovCi5tanItbWZ2IC5tanItaWNvbi1idG4uaXMtb24gewogICAgYm9yZGVyLWNvbG9yOiByZ2JhKHZhcigtLW1qci1ncm91cC1hY2NlbnQsIDk1LCAxNzksIDI1NSksIDAuNTUpOwogICAgY29sb3I6IHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpOwogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIsICMzMzMpIDgwJSwgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZikgMTUlKTsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZikgMjUlLCB0cmFuc3BhcmVudCk7Cn0KCi5tanItbWZ2IC5tanItaWNvbi1idG4uaXMtb3BlbiB7CiAgICBib3JkZXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItYWNjZW50LCAjNWZiM2ZmKSA2MiUsICNmZmZmZmYgMTIlKTsKICAgIGNvbG9yOiAjZWVmN2ZmOwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSg5NSwgMTc5LCAyNTUsIDAuMjgpLCByZ2JhKDk1LCAxNzksIDI1NSwgMC4xNCkpOwogICAgYm94LXNoYWRvdzoKICAgICAgICBpbnNldCAwIDAgMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSwKICAgICAgICAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1hY2NlbnQsICM1ZmIzZmYpIDI2JSwgdHJhbnNwYXJlbnQpOwp9CgoubWpyLW1mdi5tanItbWZ2LS1wb3BwZWQgLm1qci1pY29uLWJ0bi5pcy1vcGVuIHsKICAgIGNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7Cn0KCi8qIEdlbiBpbmZvIGRyb3Bkb3duIHBhbmVsICovCi5tanItbWZ2LWdlbi1kcm9wZG93biB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB6LWluZGV4OiAxMDAwMTsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xLCAjMmEyYTJhKSA5NiUsIHRyYW5zcGFyZW50KTsKICAgIGNvbG9yOiB2YXIoLS1jb250ZW50LWZnLCAjZGRkKTsKICAgIHBhZGRpbmc6IDZweCA0cHg7CiAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMTgpOwogICAgYm94LXNoYWRvdzoKICAgICAgICAwIDhweCAyNHB4IHJnYmEoMCwgMCwgMCwgMC41NSksCiAgICAgICAgMCAycHggNnB4IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgIGRpc3BsYXk6IG5vbmU7CiAgICBtaW4td2lkdGg6IDE1MHB4OwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDhweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig4cHgpOwp9CgoubWpyLW1mdi1nZW4tZHJvcGRvd246OmJlZm9yZSB7CiAgICBjb250ZW50OiAiR0VOIElORk8iOwogICAgZGlzcGxheTogYmxvY2s7CiAgICBmb250LXNpemU6IDlweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsZXR0ZXItc3BhY2luZzogMC44cHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjM1KTsKICAgIHBhZGRpbmc6IDJweCAxMHB4IDZweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDE5NiwgMjAyLCAyMTAsIDAuMSk7CiAgICBtYXJnaW4tYm90dG9tOiA0cHg7Cn0KCi5tanItbWZ2LWdlbi1kcm9wZG93bi5pcy12aXNpYmxlIHsKICAgIGRpc3BsYXk6IGJsb2NrOwp9CgoubWpyLW1mdi1nZW4tZHJvcGRvd24tcm93IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBwYWRkaW5nOiA1cHggMTBweDsKICAgIGJvcmRlci1yYWRpdXM6IDVweDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMTAwbXMgZWFzZTsKICAgIHVzZXItc2VsZWN0OiBub25lOwp9CgoubWpyLW1mdi1nZW4tZHJvcGRvd24tcm93OmhvdmVyIHsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNyk7Cn0KCi5tanItbWZ2LWdlbi1kcm9wZG93bi1yb3cgaW5wdXRbdHlwZT0iY2hlY2tib3giXSB7CiAgICB3aWR0aDogMTNweDsKICAgIGhlaWdodDogMTNweDsKICAgIGFjY2VudC1jb2xvcjogdmFyKC0tbWpyLWFjY2VudCwgIzVmYjNmZik7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBmbGV4LXNocmluazogMDsKfQoKLyogVHJhbnNmb3JtIGZvciBwYW4vem9vbSAtIGFwcGxpZWQgaW5saW5lIGZvciBkeW5hbWljIHZhbHVlcyAqLwoubWpyLW1mdi1tZWRpYS0tdHJhbnNmb3JtIHsKICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjsKfQoKLyogQ3Vyc29yIGZlZWRiYWNrIGZvciBwYW4vem9vbSBpbnRlcmFjdGlvbnMgKi8KLm1qci1tZnYtY29udGVudC0tZ3JhYiB7CiAgICBjdXJzb3I6IGdyYWI7Cn0KCi5tanItbWZ2LWNvbnRlbnQtLWdyYWJiaW5nIHsKICAgIGN1cnNvcjogZ3JhYmJpbmc7Cn0KCi8qIFNpZGViYXIgdGFiIGJ1dHRvbjogYWxsb3cgMi1saW5lIGxhYmVsIHZpYSBcbiBpbiBsYWJlbCBzdHJpbmcgKi8KLm1ham9vci1hc3NldHMtdGFiLWJ1dHRvbiAuc2lkZS1iYXItYnV0dG9uLWxhYmVsIHsKICAgIHdoaXRlLXNwYWNlOiBwcmUtbGluZTsKfQoKLyogQm90dG9tLXBhbmVsIGdlbmVyYXRlZCBmZWVkOiBjb21wYWN0IGNhcmRzIHdpdGggb25seSB0aGUgZ2VuZXJhdGlvbi10aW1lIHBpbGwgKi8KLm1qci1ib3R0b20tZmVlZCB7CiAgICBtaW4taGVpZ2h0OiAwOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWFtLWdyaWQtc2Nyb2xsIHsKICAgIGZsZXg6IDEgMSBhdXRvOwogICAgbWluLWhlaWdodDogMDsKICAgIGhlaWdodDogMTAwJTsKICAgIG92ZXJmbG93OiBhdXRvOwogICAgc2Nyb2xsYmFyLWd1dHRlcjogc3RhYmxlOwogICAgb3ZlcnNjcm9sbC1iZWhhdmlvci15OiBjb250YWluOwogICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgdG91Y2gtYWN0aW9uOiBwYW4teTsKICAgIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoOwogICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluOwogICAgc2Nyb2xsYmFyLWNvbG9yOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMiwgIzJmMzU0MCkgNzAlLCAjN2Y4ZWEzIDMwJSkKICAgICAgICBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMCwgIzE2MTkxZikgODglLCAjMDAwIDEyJSk7Cn0KCi5tanItYm90dG9tLWZlZWQgLm1qci1hbS1ncmlkLXNjcm9sbDo6LXdlYmtpdC1zY3JvbGxiYXIsCi5tanItZmVlZC1ncm91cC1wb3BvdmVyLWdyaWQ6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgIHdpZHRoOiAxMHB4OwogICAgaGVpZ2h0OiAxMHB4Owp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItYW0tZ3JpZC1zY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iLAoubWpyLWZlZWQtZ3JvdXAtcG9wb3Zlci1ncmlkOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLXN1cmZhY2UtMiwgIzJmMzU0MCkgNzAlLCAjN2Y4ZWEzIDMwJSk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMnB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWFtLWdyaWQtc2Nyb2xsOjotd2Via2l0LXNjcm9sbGJhci10cmFjaywKLm1qci1mZWVkLWdyb3VwLXBvcG92ZXItZ3JpZDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTAsICMxNjE5MWYpIDg4JSwgIzAwMCAxMiUpOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7Cn0KCi5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkIHsKICAgIGdhcDogNnB4ICFpbXBvcnRhbnQ7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heChtaW4oMTAwJSwgMTMycHgpLCAxZnIpKSAhaW1wb3J0YW50OwogICAgbWluLWhlaWdodDogMDsKICAgIGhlaWdodDogYXV0bzsKICAgIGFsaWduLWNvbnRlbnQ6IHN0YXJ0Owp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZCwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmQgewogICAgYm9yZGVyLXJhZGl1czogMTJweCAhaW1wb3J0YW50OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0xKSA5MiUsICMwMDAgOCUpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4yMikgIWltcG9ydGFudDsKICAgIHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50Owp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZDpob3ZlciwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmQ6aG92ZXIgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpICFpbXBvcnRhbnQ7CiAgICBib3gtc2hhZG93OiAwIDEwcHggMjRweCByZ2JhKDAsIDAsIDAsIDAuMjgpICFpbXBvcnRhbnQ7CgogICAgLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmQuaXMtc2VsZWN0ZWQgewogICAgICAgIGJveC1zaGFkb3c6CiAgICAgICAgICAgIDAgMCAwIDNweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKSA4MCUsIHZhcigtLWNvbnRlbnQtZmcpKSwKICAgICAgICAgICAgMCAwIDAgNnB4IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItY2FyZC1zZWxlY3Rpb24tY29sb3IpIDMwJSwgdHJhbnNwYXJlbnQpLAogICAgICAgICAgICAwIDAgMjBweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tbWpyLWNhcmQtc2VsZWN0aW9uLWNvbG9yKSA0MCUsIHRyYW5zcGFyZW50KSwKICAgICAgICAgICAgMCAxMHB4IDI4cHggcmdiYSgwLCAwLCAwLCAwLjI4KSAhaW1wb3J0YW50OwogICAgICAgIG91dGxpbmU6IDJweCBzb2xpZCB2YXIoLS1tanItY2FyZC1zZWxlY3Rpb24tY29sb3IpICFpbXBvcnRhbnQ7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDsKICAgIH0KfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gewogICAgb3ZlcmZsb3c6IHZpc2libGUgIWltcG9ydGFudDsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIC5tanItdGh1bWIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iIHsKICAgIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7CiAgICBpc29sYXRpb246IGlzb2xhdGU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iOjpiZWZvcmUsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLXRodW1iOjphZnRlciwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIC5tanItdGh1bWI6OmJlZm9yZSwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIC5tanItdGh1bWI6OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICB6LWluZGV4OiAtMTsKICAgIHRyYW5zaXRpb246CiAgICAgICAgdHJhbnNmb3JtIDE0MG1zIGVhc2UsCiAgICAgICAgb3BhY2l0eSAxNDBtcyBlYXNlOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci10aHVtYjo6YmVmb3JlLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci10aHVtYjo6YmVmb3JlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDVweCwgNXB4KSBzY2FsZSgwLjk4NSk7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzKSksCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTEsICMyMDI0MmIpIDg0JSwgIzAwMCAxNiUpOwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDE4cHggcmdiYSgwLCAwLCAwLCAwLjE2KTsKICAgIG9wYWNpdHk6IDAuOTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdIC5tanItdGh1bWI6OmFmdGVyLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci10aHVtYjo6YWZ0ZXIgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMTBweCwgMTBweCkgc2NhbGUoMC45Nyk7CiAgICBiYWNrZ3JvdW5kOgogICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNiksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMikpLAogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wLCAjMTYxOTFmKSA4MiUsICMwMDAgMTglKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7CiAgICBib3gtc2hhZG93OiAwIDEycHggMjJweCByZ2JhKDAsIDAsIDAsIDAuMTQpOwogICAgb3BhY2l0eTogMC43NTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOmhvdmVyIC5tanItdGh1bWI6OmJlZm9yZSwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOmhvdmVyIC5tanItdGh1bWI6OmJlZm9yZSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg2cHgsIDZweCkgc2NhbGUoMC45ODUpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl06aG92ZXIgLm1qci10aHVtYjo6YWZ0ZXIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTpob3ZlciAubWpyLXRodW1iOjphZnRlciB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgxMnB4LCAxMnB4KSBzY2FsZSgwLjk3KTsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLXRodW1iIHsKICAgIGFzcGVjdC1yYXRpbzogMC45NSAvIDEgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA3MiUsICMwMDAgMjglKSAhaW1wb3J0YW50Owp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItdGh1bWItcGxheSB7CiAgICBiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQoCiAgICAgICAgY2lyY2xlIGF0IGNlbnRlciwKICAgICAgICByZ2JhKDAsIDAsIDAsIDAuMTgpLAogICAgICAgIHJnYmEoMCwgMCwgMCwgMC4wNCkgMzglLAogICAgICAgIHRyYW5zcGFyZW50IDcwJQogICAgKTsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWJhZGdlLWV4dCwKLm1qci1ib3R0b20tZmVlZCAubWpyLWJhZGdlLXJhdGluZywKLm1qci1ib3R0b20tZmVlZCAubWpyLWJhZGdlLXRhZ3MgewogICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkyKTsKICAgIHRyYW5zZm9ybS1vcmlnaW46IHRvcCBsZWZ0Owp9CgovKiAtLSBGZWVkIGNhcmQgaW5mbzogZGVmYXVsdCBoaWRkZW4sIHRvZ2dsZWQgdmlhIG1qci1mZWVkLXNob3ctKiBjbGFzc2VzIG9uIC5tanItZ3JpZCAtLSAqLwoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZC1pbmZvIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDRweCA2cHggIWltcG9ydGFudDsKICAgIG1pbi13aWR0aDogMDsKfQoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZC5tanItZmVlZC1zaG93LWluZm8gLm1qci1jYXJkLWluZm8gewogICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKfQoKLyogRmVlZCBmaWxlbmFtZSAqLwoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZC1maWxlbmFtZSB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1maWxlbmFtZSAubWpyLWNhcmQtZmlsZW5hbWUgewogICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsKfQoKLyogRmVlZCBkaW1lbnNpb25zIC8gZHVyYXRpb24gKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLW1ldGEtcmVzLAoubWpyLWJvdHRvbS1mZWVkIC5tanItbWV0YS1kdXJhdGlvbiB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1kaW1lbnNpb25zIC5tanItbWV0YS1yZXMsCi5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctZGltZW5zaW9ucyAubWpyLW1ldGEtZHVyYXRpb24gewogICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7Cn0KCi8qIEZlZWQgZGF0ZS90aW1lICovCi5tanItYm90dG9tLWZlZWQgLm1qci1tZXRhLWRhdGUsCi5tanItYm90dG9tLWZlZWQgLm1qci1tZXRhLXRpbWUtdmFsIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZC5tanItZmVlZC1zaG93LWRhdGUgLm1qci1tZXRhLWRhdGUsCi5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctZGF0ZSAubWpyLW1ldGEtdGltZS12YWwgewogICAgZGlzcGxheTogaW5saW5lICFpbXBvcnRhbnQ7Cn0KCi8qIEZlZWQgZ2VuZXJhdGlvbiB0aW1lIGJhZGdlICovCi5tanItYm90dG9tLWZlZWQgLm1qci1tZXRhLWdlbnRpbWUgewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9Ci5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctZ2VudGltZSAubWpyLW1ldGEtZ2VudGltZSB7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleCAhaW1wb3J0YW50Owp9CgovKiBGZWVkIHdvcmtmbG93IGRvdCAqLwoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZC1kb3Qtd3JhcHBlciB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1kb3QgLm1qci1jYXJkLWRvdC13cmFwcGVyIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4ICFpbXBvcnRhbnQ7Cn0KCi8qIEZlZWQgYmFkZ2VzICovCi5tanItYm90dG9tLWZlZWQgLm1qci1iYWRnZS1leHQgewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9Ci5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctYmFkZ2VzLWV4dCAubWpyLWJhZGdlLWV4dCB7CiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7Cn0KCi5tanItYm90dG9tLWZlZWQgLm1qci1iYWRnZS1yYXRpbmcgewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9Ci5tanItYm90dG9tLWZlZWQgLm1qci1ncmlkLm1qci1mZWVkLXNob3ctYmFkZ2VzLXJhdGluZyAubWpyLWJhZGdlLXJhdGluZyB7CiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7Cn0KCi5tanItYm90dG9tLWZlZWQgLm1qci1iYWRnZS10YWdzIHsKICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKfQoubWpyLWJvdHRvbS1mZWVkIC5tanItZ3JpZC5tanItZmVlZC1zaG93LWJhZGdlcy10YWdzIC5tanItYmFkZ2UtdGFncyB7CiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7Cn0KCi8qIEZlZWQgbWV0YSByb3cgc3R5bGluZyAtIGZsZXggbGF5b3V0IHNvIHZpc2libGUgaXRlbXMgc3RheSBzZXBhcmF0ZWQgKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLWNhcmQtbWV0YS1yb3cgewogICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50OwogICAgZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDsKICAgIGdhcDogNXB4ICFpbXBvcnRhbnQ7CiAgICBvdmVyZmxvdzogaGlkZGVuICFpbXBvcnRhbnQ7CiAgICBtaW4td2lkdGg6IDAgIWltcG9ydGFudDsKICAgIHBhZGRpbmctcmlnaHQ6IDAgIWltcG9ydGFudDsKICAgIGxpbmUtaGVpZ2h0OiAxLjMgIWltcG9ydGFudDsKICAgIG9wYWNpdHk6IDAuNzggIWltcG9ydGFudDsKICAgIGZvbnQtc2l6ZTogMC44ZW0gIWltcG9ydGFudDsKICAgIC8qIHRleHQtb3ZlcmZsb3cgZWxsaXBzaXMgZG9lc24ndCBhcHBseSBvbiBhIGZsZXggY29udGFpbmVyIGl0c2VsZiAqLwp9Ci8qIEVhY2ggbWV0YSBzcGFuIHRydW5jYXRlcyBpbmRpdmlkdWFsbHkgaWYgdG9vIGxvbmcgKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLWNhcmQtbWV0YS1yb3cgPiBzcGFuIHsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICBtaW4td2lkdGg6IDA7CiAgICBmbGV4LXNocmluazogMTsKfQovKiBHZW50aW1lIGJhZGdlIGFuZCB0aW1lIHZhbHVlIHNob3VsZCBzdGF5IHZpc2libGUgKGRvbid0IHNocmluayBhd2F5KSAqLwoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZC1tZXRhLXJvdyA+IC5tanItbWV0YS1nZW50aW1lLAoubWpyLWJvdHRvbS1mZWVkIC5tanItY2FyZC1tZXRhLXJvdyA+IC5tanItbWV0YS10aW1lLXZhbCB7CiAgICBmbGV4LXNocmluazogMDsKfQoKLm1qci1ib3R0b20tZmVlZCAubWpyLWdyaWQubWpyLWZlZWQtc2hvdy1nZW50aW1lIC5tanItbWV0YS1nZW50aW1lIHsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBnYXA6IDNweDsKICAgIHBhZGRpbmc6IDNweCA3cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTAsIDE0LCAyMCwgMC43NCk7CiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpOwogICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4yMik7CiAgICBmb250LXNpemU6IDEwcHg7CiAgICBmb250LXdlaWdodDogODAwICFpbXBvcnRhbnQ7CiAgICBsZXR0ZXItc3BhY2luZzogMC4wMTVlbTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTgpOwogICAgdGV4dC1zaGFkb3c6CiAgICAgICAgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC45KSwKICAgICAgICAwIDAgMTBweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTYpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwp9CgovKiAtLSBBdWRpbyAvIDNEIHBsYWNlaG9sZGVyIHRodW1ibmFpbHMgaW4gdGhlIGZlZWQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKLyogQXVkaW8gY2FyZHMgc2hvdyB0aGUgd2F2ZWZvcm0gc3ByaXRlOyBnaXZlIGl0IGEgZGlzdGluY3QgYmFja2dyb3VuZCBzbyBpdAogICBkb2Vzbid0IGxvb2sgbGlrZSBhIGJyb2tlbiBpbWFnZSBwbGFjZWhvbGRlciBpbiB0aGUgZmVlZC4gKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanIta2luZD0iYXVkaW8iXSAubWpyLXRodW1iLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1leHQ9Im1wMyJdIC5tanItdGh1bWIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWV4dD0id2F2Il0gLm1qci10aHVtYiwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZXh0PSJvZ2ciXSAubWpyLXRodW1iLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1leHQ9ImZsYWMiXSAubWpyLXRodW1iIHsKICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wKSA2MCUsICMxYTFmMmIgNDAlKSAhaW1wb3J0YW50Owp9CgovKiAzRCBtb2RlbCBjYXJkcyB1c2UgYW4gaWNvbiBwbGFjZWhvbGRlciAtIGFkZCBhIHN1YnRsZSBncmFkaWVudCBzbyB0aGV5IHJlYWQKICAgYXMgaW50ZW50aW9uYWwgcmF0aGVyIHRoYW4gbWlzc2luZy4gKi8KLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanIta2luZD0ibW9kZWwzZCJdIC5tanItdGh1bWIsCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLWV4dD0iZ2xiIl0gLm1qci10aHVtYiwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZXh0PSJnbHRmIl0gLm1qci10aHVtYiwKLm1qci1ib3R0b20tZmVlZCAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZXh0PSJvYmoiXSAubWpyLXRodW1iLAoubWpyLWJvdHRvbS1mZWVkIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1leHQ9ImZieCJdIC5tanItdGh1bWIgewogICAgYmFja2dyb3VuZDogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTApIDUwJSwgIzBkMTExNyA1MCUpICFpbXBvcnRhbnQ7Cn0KCi8qIC0tIEZlZWQgZ3JvdXAgYnV0dG9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKLm1qci1ib3R0b20tZmVlZCAubWpyLWZlZWQtZ3JvdXAtYnV0dG9uIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMzRweDsKICAgIHJpZ2h0OiA2cHg7CiAgICB6LWluZGV4OiAxMTsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA0cHg7CiAgICBtaW4td2lkdGg6IDI4cHg7CiAgICBtaW4taGVpZ2h0OiAyOHB4OwogICAgcGFkZGluZzogNHB4IDhweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTAsIDE0LCAyMCwgMC43NCk7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk2KTsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMTsKICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMjQpOwogICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDZweCk7CiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247CiAgICB0cmFuc2l0aW9uOgogICAgICAgIGJhY2tncm91bmQgMTIwbXMgZWFzZSwKICAgICAgICB0cmFuc2Zvcm0gODBtcyBlYXNlOwp9CgoubWpyLWJvdHRvbS1mZWVkIC5tanItZmVlZC1ncm91cC1idXR0b246aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgxOCwgMjQsIDM0LCAwLjkpOwp9CgoubWpyLWZlZWQtZ3JvdXAtYnV0dG9uLWljb24gewogICAgZm9udC1zaXplOiAxMXB4OwogICAgb3BhY2l0eTogMC45Owp9CgoubWpyLWZlZWQtZ3JvdXAtYnV0dG9uLWNvdW50IHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLyogLS0gRmVlZCBncm91cCBwb3BvdmVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgoubWpyLWZlZWQtZ3JvdXAtcG9wb3ZlciB7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1tZW51LWJnLCAjMjIyKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1jb2xvciwgIzNhM2EzYSk7CiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1tanItci1sZywgOHB4KTsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDI4cHggcmdiYSgwLCAwLCAwLCAwLjQ1KTsKICAgIG92ZXJmbG93OiBoaWRkZW47Cn0KCi5tanItZmVlZC1ncm91cC1wb3BvdmVyLXRpdGxlIHsKICAgIHBhZGRpbmc6IDhweCAxMHB4IDRweDsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpOwogICAgbWFyZ2luLWJvdHRvbTogOHB4Owp9CgoubWpyLWZlZWQtZ3JvdXAtcG9wb3Zlci1ncmlkIHsKICAgIHBhZGRpbmc6IDRweCA4cHggMTBweDsKICAgIG1heC1oZWlnaHQ6IDM2MHB4OwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICBzY3JvbGxiYXItZ3V0dGVyOiBzdGFibGU7CiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47CiAgICBzY3JvbGxiYXItY29sb3I6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0yLCAjMmYzNTQwKSA3MCUsICM3ZjhlYTMgMzAlKQogICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1tanItc3VyZmFjZS0wLCAjMTYxOTFmKSA4OCUsICMwMDAgMTIlKTsKfQoKLm1qci1mZWVkLWdyb3VwLWJ1dHRvbi1pY29uLAoubWpyLWZlZWQtZ3JvdXAtYnV0dG9uLWNvdW50IHsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoubWpyLWZlZWQtZ3JvdXAtbWVtYmVyLWNhcmQgewogICAgbWluLXdpZHRoOiAwOwp9CgoubWpyLWZlZWQtZ3JvdXAtbWVtYmVyLWNhcmQgLm1qci10aHVtYiB7CiAgICBhc3BlY3QtcmF0aW86IDEgLyAxICFpbXBvcnRhbnQ7Cn0KCi5tanItZmVlZC1ncm91cC1tZW1iZXItY2FyZCAubWpyLWNhcmQtaW5mbyB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1zdGFjay1ncm91cC1idXR0b24gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAzNHB4OwogICAgcmlnaHQ6IDZweDsKICAgIHotaW5kZXg6IDExOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDRweDsKICAgIG1pbi13aWR0aDogMjhweDsKICAgIG1pbi1oZWlnaHQ6IDI4cHg7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE0KTsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgxMCwgMTQsIDIwLCAwLjc0KTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTYpOwogICAgbGluZS1oZWlnaHQ6IDE7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjI0KTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVaKDApOwogICAgdHJhbnNpdGlvbjoKICAgICAgICBiYWNrZ3JvdW5kIDEyMG1zIGVhc2UsCiAgICAgICAgdHJhbnNmb3JtIDgwbXMgZWFzZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLXN0YWNrLWdyb3VwLWJ1dHRvbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDE4LCAyNCwgMzQsIDAuOSk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1zdGFjay1ncm91cC1idXR0b24gPiAqIHsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwp9CgoubWpyLWZpbG1zdHJpcDo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgd2lkdGg6IDRweDsKICAgIGhlaWdodDogNHB4Owp9CgoubWpyLWZpbG1zdHJpcDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCi5tanItZmlsbXN0cmlwOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNCk7Cn0KCi5tanItZmlsbXN0cmlwOmhvdmVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjIpOwp9CgoubWpyLWZpbG1zdHJpcC1hdWRpby10aHVtYiB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA1cHg7CiAgICBwYWRkaW5nOiA3cHg7CiAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgyKTsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgYmFja2dyb3VuZDoKICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDI0JSAyNCUsIHJnYmEoNzgsIDE4NCwgMjU1LCAwLjI4KSwgdHJhbnNwYXJlbnQgNDIlKSwKICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDg0JSA3MCUsIHJnYmEoODIsIDIyMCwgMTU2LCAwLjE4KSwgdHJhbnNwYXJlbnQgNDAlKSwKICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDE4LCAyNSwgMzUsIDAuOTYpLCByZ2JhKDcsIDEwLCAxNSwgMC45OCkpOwp9CgoubWpyLWZpbG1zdHJpcC1hdWRpby13YXZlZm9ybSB7CiAgICB3aWR0aDogNzYlOwogICAgaGVpZ2h0OiAyNHB4OwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogMnB4Owp9CgoubWpyLWZpbG1zdHJpcC1hdWRpby13YXZlZm9ybSBzcGFuIHsKICAgIHdpZHRoOiAycHg7CiAgICBtaW4taGVpZ2h0OiA0cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NCksIHJnYmEoMTQ4LCAyMTgsIDI1NSwgMC42OCkpOwp9CgoubWpyLWZpbG1zdHJpcC1hdWRpby1sYWJlbCB7CiAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgcGFkZGluZzogMnB4IDVweDsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjI4KTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgIGZvbnQtc2l6ZTogN3B4OwogICAgZm9udC13ZWlnaHQ6IDgwMDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItc3RhY2stZ3JvdXAtYnV0dG9uLWNvdW50IHsKICAgIGZvbnQtc2l6ZTogMTBweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBsaW5lLWhlaWdodDogMTsKfQoKLyogLS0gRHVwbGljYXRlIHN0YWNrIGJ1dHRvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogU2hvd3Mgb24gdGhlIHByaW1hcnkgY2FyZCB3aGVuIHNhbWUtZmlsZW5hbWUgZHVwbGljYXRlcyBleGlzdC4gICAgICAgICAgICAgKi8KLyogUG9zaXRpb25lZCBhdCBib3R0b20tcmlnaHQgdG8gbm90IG92ZXJsYXAgdGhlIHN0YWNrLWdyb3VwIGJ1dHRvbiAodG9wLXJpZ2h0KS4gKi8KLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWR1cC1zdGFjay1idXR0b24gewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgYm90dG9tOiAzMHB4OwogICAgcmlnaHQ6IDZweDsKICAgIHotaW5kZXg6IDExOwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDRweDsKICAgIG1pbi13aWR0aDogMjhweDsKICAgIG1pbi1oZWlnaHQ6IDI4cHg7CiAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsIDE4MCwgMCwgMC4zOCk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMzAsIDE4LCAwLCAwLjgyKTsKICAgIGNvbG9yOiByZ2JhKDI1NSwgMjAwLCA2MCwgMC45Nik7CiAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjMyKTsKICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig2cHgpOwogICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNnB4KTsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7CiAgICB0cmFuc2l0aW9uOgogICAgICAgIGJhY2tncm91bmQgMC4xNXMsCiAgICAgICAgdHJhbnNmb3JtIDgwbXMgZWFzZTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWR1cC1zdGFjay1idXR0b246aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSg1MCwgMzAsIDAsIDAuOTQpOwogICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwgMTgwLCAwLCAwLjYpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItZHVwLXN0YWNrLWJ1dHRvbiA+ICogewogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1kdXAtc3RhY2stY291bnQgewogICAgZm9udC1zaXplOiAxMHB4OwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxpbmUtaGVpZ2h0OiAxOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1kdXAtc3RhY2tlZD0idHJ1ZSJdIC5tanItZHVwLXN0YWNrLWJ1dHRvbiB7CiAgICBib3gtc2hhZG93OgogICAgICAgIDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMzIpLAogICAgICAgIDAgMCAwIDFweCByZ2JhKDI1NSwgMTgwLCAwLCAwLjIpOwp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gLm1qci1zdGFjay1ncm91cC1idXR0b24sCi5tanItYm90dG9tLWZlZWQgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXSAubWpyLWZlZWQtZ3JvdXAtYnV0dG9uIHsKICAgIGJveC1zaGFkb3c6CiAgICAgICAgMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4yNCksCiAgICAgICAgMCAwIDAgMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNCk7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTpob3ZlciwKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItZHVwLXN0YWNrZWQ9InRydWUiXTpob3ZlciB7CiAgICB0cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDsKfQoKLyogLS0gVmlzdWFsIHN0YWNraW5nIGVmZmVjdCAtIGxheWVyZWQgY2FyZHMgYmVoaW5kIHRoZSBtYWluIGNhcmQgLS0tLS0tLS0tLS0tICovCi8qIENyZWF0ZXMgcHNldWRvLWVsZW1lbnQgImNhcmRzIiBvZmZzZXQgYmVoaW5kIHRoZSBwcmltYXJ5IGNhcmQgdG8gdmlzdWFsbHkgICAgKi8KLyogY29tbXVuaWNhdGUgdGhhdCB0aGlzIGNhcmQgcmVwcmVzZW50cyBhIGdyb3VwIG9mIG11bHRpcGxlIGltYWdlcy4gICAgICAgICAgICAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl0gewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgei1pbmRleDogMTsKfQoKLm1qci1hc3NldHMtbWFuYWdlciAubWpyLWFzc2V0LWNhcmRbZGF0YS1tanItc3RhY2tlZD0idHJ1ZSJdOjpiZWZvcmUsCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTo6YWZ0ZXIgewogICAgY29udGVudDogIiI7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBpbnNldDogMDsKICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb21meS1tZW51LWJnLCAjMWExYTJlKTsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNik7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IC0xOwogICAgdHJhbnNpdGlvbjoKICAgICAgICB0cmFuc2Zvcm0gMTgwbXMgZWFzZSwKICAgICAgICBvcGFjaXR5IDE4MG1zIGVhc2U7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTo6YmVmb3JlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDNweCwgM3B4KSByb3RhdGUoMWRlZyk7CiAgICBvcGFjaXR5OiAwLjQ1Owp9CgoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYXNzZXQtY2FyZFtkYXRhLW1qci1zdGFja2VkPSJ0cnVlIl06OmFmdGVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDZweCwgNnB4KSByb3RhdGUoMi4yZGVnKTsKICAgIG9wYWNpdHk6IDAuMjU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTpob3Zlcjo6YmVmb3JlIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDRweCwgNHB4KSByb3RhdGUoMS41ZGVnKTsKICAgIG9wYWNpdHk6IDAuNTU7Cn0KCi5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hc3NldC1jYXJkW2RhdGEtbWpyLXN0YWNrZWQ9InRydWUiXTpob3Zlcjo6YWZ0ZXIgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoOHB4LCA4cHgpIHJvdGF0ZSgzZGVnKTsKICAgIG9wYWNpdHk6IDAuMzU7Cn0KCi5tanItc3RhY2stZ3JvdXAtcG9wb3ZlciB7CiAgICB3aWR0aDogbWluKDQ0MHB4LCA5MnZ3KTsKfQoKLm1qci1zdGFjay1ncm91cC1tZW1iZXItY2FyZCB7CiAgICBtaW4td2lkdGg6IDA7Cn0KCi5tanItc3RhY2stZ3JvdXAtbWVtYmVyLWNhcmQgLm1qci10aHVtYiB7CiAgICBhc3BlY3QtcmF0aW86IDEgLyAxICFpbXBvcnRhbnQ7Cn0KCi5tanItc3RhY2stZ3JvdXAtbWVtYmVyLWNhcmQgLm1qci1jYXJkLWluZm8gewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Owp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogTGlnaHQgbW9kZSBvdmVycmlkZXMgKENvbWZ5VUkgdjEuNDIrIGltcHJvdmVkIGxpZ2h0IHRoZW1lKQogKiBVc2VzIENvbWZ5VUkgZGF0YS10aGVtZSBhdHRyaWJ1dGUgd2hlbiBzZXQsIHdpdGgKICogcHJlZmVycy1jb2xvci1zY2hlbWUgYXMgYSBmYWxsYmFjayBmb3Igb2xkZXIgdmVyc2lvbnMuCiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKLyogQ29tZnlVSSBzZXRzIGRhdGEtdGhlbWU9ImxpZ2h0IiBvbiA8aHRtbD4gb3IgPGJvZHk+ICovCjppcyhbZGF0YS10aGVtZT0ibGlnaHQiXSwgW2RhdGEtY29sb3Itc2NoZW1lPSJsaWdodCJdKSAubWpyLWFzc2V0cy1tYW5hZ2VyLAo6aXMoW2RhdGEtdGhlbWU9ImxpZ2h0Il0sIFtkYXRhLWNvbG9yLXNjaGVtZT0ibGlnaHQiXSkgLm1qci1wb3BvdmVyIHsKICAgIC0tbWpyLXN1cmZhY2UtMDogdmFyKC0taW50ZXJmYWNlLXBhbmVsLXN1cmZhY2UsICNmMGYwZjApOwogICAgLS1tanItc3VyZmFjZS0xOiB2YXIoLS1pbnRlcmZhY2UtbWVudS1zdXJmYWNlLCAjZmFmYWZhKTsKICAgIC0tbWpyLXN1cmZhY2UtMjogdmFyKC0taW50ZXJmYWNlLXBhbmVsLWhvdmVyLXN1cmZhY2UsICNlOGU4ZTgpOwogICAgLS1tanItc3VyZmFjZS0zOiB2YXIoLS1tb2RhbC1jYXJkLWJhY2tncm91bmQsICNmZmZmZmYpOwogICAgLS1tanItYm9yZGVyOiB2YXIoLS1ib3JkZXItZGVmYXVsdCwgcmdiYSgwLCAwLCAwLCAwLjE0KSk7CiAgICAtLW1qci1tdXRlZDogdmFyKC0tbXV0ZWQtZm9yZWdyb3VuZCwgcmdiYSgwLCAwLCAwLCAwLjU1KSk7CiAgICAtLW1qci1jYXJkLWhvdmVyLWNvbG9yOiB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtaG92ZXItc3VyZmFjZSwgI2UwZTBlMCk7Cn0KCkBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSB7CiAgICAvKiBGYWxsYmFjazogb25seSBhcHBseSBpZiBDb21meVVJIGhhc24ndCBzZXQgYW4gZXhwbGljaXQgZGF0YS10aGVtZSAqLwogICAgLm1qci1hc3NldHMtbWFuYWdlcjpub3QoW2RhdGEtdGhlbWUtYXBwbGllZF0pLAogICAgLm1qci1wb3BvdmVyOm5vdChbZGF0YS10aGVtZS1hcHBsaWVkXSkgewogICAgICAgIC0tbWpyLXN1cmZhY2UtMDogdmFyKC0taW50ZXJmYWNlLXBhbmVsLXN1cmZhY2UsICNmMGYwZjApOwogICAgICAgIC0tbWpyLXN1cmZhY2UtMTogdmFyKC0taW50ZXJmYWNlLW1lbnUtc3VyZmFjZSwgI2ZhZmFmYSk7CiAgICAgICAgLS1tanItc3VyZmFjZS0yOiB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtaG92ZXItc3VyZmFjZSwgI2U4ZThlOCk7CiAgICAgICAgLS1tanItc3VyZmFjZS0zOiB2YXIoLS1tb2RhbC1jYXJkLWJhY2tncm91bmQsICNmZmZmZmYpOwogICAgICAgIC0tbWpyLWJvcmRlcjogdmFyKC0tYm9yZGVyLWRlZmF1bHQsIHJnYmEoMCwgMCwgMCwgMC4xNCkpOwogICAgICAgIC0tbWpyLW11dGVkOiB2YXIoLS1tdXRlZC1mb3JlZ3JvdW5kLCByZ2JhKDAsIDAsIDAsIDAuNTUpKTsKICAgICAgICAtLW1qci1jYXJkLWhvdmVyLWNvbG9yOiB2YXIoLS1pbnRlcmZhY2UtcGFuZWwtaG92ZXItc3VyZmFjZSwgI2UwZTBlMCk7CiAgICB9Cn0KCi8qIC0tLSBTa2VsZXRvbiBsb2FkZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgoubWpyLWNhcmQtc2tlbGV0b24gewogICAgYmFja2dyb3VuZDogdmFyKC0tbWpyLXN1cmZhY2UtMSwgIzJhMmEyYSk7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1tanItYm9yZGVyLCAjM2EzYTNhKTsKICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLW1qci1yLWxnLCA4cHgpOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIC8qIE1hdGNoIC5tanItdGh1bWIgYXNwZWN0IHJhdGlvIHNvIHNrZWxldG9ucyBoYXZlIHRoZSBzYW1lIGZvb3RwcmludCBhcyByZWFsIGNhcmRzLiAqLwogICAgYXNwZWN0LXJhdGlvOiAxIC8gMTsKfQoKLyogU2hpbW1lciBzd2VlcCAqLwoubWpyLWNhcmQtc2tlbGV0b246OmFmdGVyIHsKICAgIGNvbnRlbnQ6ICIiOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgaW5zZXQ6IDA7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoCiAgICAgICAgOTBkZWcsCiAgICAgICAgdHJhbnNwYXJlbnQgMCUsCiAgICAgICAgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLW1qci1zdXJmYWNlLTIsICMzYTNhM2EpIDgwJSwgdHJhbnNwYXJlbnQpIDUwJSwKICAgICAgICB0cmFuc3BhcmVudCAxMDAlCiAgICApOwogICAgYW5pbWF0aW9uOiBtanItc2hpbW1lciAxLjRzIGVhc2UtaW4tb3V0IGluZmluaXRlOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0xMDAlKTsKfQoKQGtleWZyYW1lcyBtanItc2hpbW1lciB7CiAgICBmcm9tIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpOwogICAgfQogICAgdG8gewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTsKICAgIH0KfQoKQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHsKICAgIC5tanItY2FyZC1za2VsZXRvbjo6YWZ0ZXIgewogICAgICAgIGFuaW1hdGlvbjogbm9uZTsKICAgIH0KfQoKLyogLS0tIFJlc3BvbnNpdmUgc3VtbWFyeSBiYXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCi8qCiAqIEVuYWJsZSBjb250YWluZXIgcXVlcmllcyBvbiB0aGUgc3VtbWFyeSBiYXIgc28gY2hpbGRyZW4gY2FuIHJlc3BvbmQgdG8gaXRzCiAqIGFjdHVhbCByZW5kZXJlZCB3aWR0aCAoZS5nLiB3aGVuIHRoZSBwYW5lbCBpcyBkb2NrZWQgaW4gYSBuYXJyb3cgc2lkZWJhcikuCiAqLwoubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc3VtbWFyeSB7CiAgICBjb250YWluZXItdHlwZTogaW5saW5lLXNpemU7CiAgICBjb250YWluZXItbmFtZTogbWpyLXN1bW1hcnktYmFyOwp9CgovKiBCZWxvdyB+MzgwIHB4OiBoaWRlIHRoZSBwaWxscy9yaWdodCBzZWN0aW9uIHRvIHByZXZlbnQgb3ZlcmZsb3cuICovCkBjb250YWluZXIgbWpyLXN1bW1hcnktYmFyIChtYXgtd2lkdGg6IDM4MHB4KSB7CiAgICAubWpyLWFzc2V0cy1tYW5hZ2VyIC5tanItYW0tc3VtbWFyeS1yaWdodCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KICAgIC5tanItYXNzZXRzLW1hbmFnZXIgLm1qci1hbS1zdW1tYXJ5LXRleHQgewogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgIH0KfQo=", "" + 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(); @@ -983,7 +983,7 @@ var ui = { } }, di = null; function fi() { - return di ||= import("./chunks/viewerOpenRequest-NfPVAV86.js"), di; + return di ||= import("./chunks/viewerOpenRequest-B2J_WEEB.js"), di; } function pi(e) { if (!e) return ""; @@ -2146,10 +2146,10 @@ function Va() { //#region ui/features/contextmenu/GridContextMenu.ts var Ha = 1, Ua = null, Wa = null; function Ga() { - return Ua ||= import("./chunks/viewerOpenRequest-NfPVAV86.js"), Ua; + return Ua ||= import("./chunks/viewerOpenRequest-B2J_WEEB.js"), Ua; } function Ka() { - return Wa ||= import("./chunks/floatingViewerManager-pz1ceTHv.js").then((e) => e.n), Wa; + return Wa ||= import("./chunks/floatingViewerManager-tOuaq4XR.js").then((e) => e.n), Wa; } function qa(e) { let t = String(e || "").trim().toLowerCase(); @@ -8105,10 +8105,10 @@ var Od = { X(!0); let a = X(0), o = X(0), s = /* @__PURE__ */ new WeakMap(), c = 0, l = 0, u = 0, d = 0, f = 0, p = /* @__PURE__ */ new Map(), m = null, h = null; function g() { - return m ||= import("./chunks/viewerOpenRequest-NfPVAV86.js"), m; + return m ||= import("./chunks/viewerOpenRequest-B2J_WEEB.js"), m; } function _() { - return h ||= import("./chunks/floatingViewerManager-pz1ceTHv.js").then((e) => e.n), h; + return h ||= import("./chunks/floatingViewerManager-tOuaq4XR.js").then((e) => e.n), h; } function v(e) { return (Array.isArray(e) ? e : []).slice().sort((e, t) => { @@ -9397,10 +9397,10 @@ var Od = { } }, Ud = 240, Wd = 120, Gd = 80, Kd = null, qd = null; function Jd() { - return Kd ||= import("./chunks/viewerOpenRequest-NfPVAV86.js"), Kd; + return Kd ||= import("./chunks/viewerOpenRequest-B2J_WEEB.js"), Kd; } function Yd() { - return qd ||= import("./chunks/floatingViewerManager-pz1ceTHv.js").then((e) => e.n), qd; + return qd ||= import("./chunks/floatingViewerManager-tOuaq4XR.js").then((e) => e.n), qd; } function Xd(e) { let t = document.createElement("button"); @@ -11644,7 +11644,7 @@ function Tm() { var Em = { __name: "GlobalRuntime", setup(e) { - let t = wn(() => import("./chunks/ViewerPortal-CafMImU6.js")), n = X(!1), r = [ + let t = wn(() => import("./chunks/ViewerPortal-CH9H0gfB.js")), n = X(!1), r = [ R.OPEN_VIEWER, R.MFV_OPEN, R.MFV_TOGGLE, @@ -16896,12 +16896,12 @@ function N_({ container: e, state: t, sidebar: n, browseSection: r, gridWrapper: console.debug?.(e); } }, v = (e) => { - let t = String(e || "right").toLowerCase() === "left" ? "left" : "right"; - if (m === t) return; + let t = String(e || "right").toLowerCase() === "left" ? "left" : "right", a = t === "left" ? n?.nextElementSibling === i : i?.nextElementSibling === n; + if (m === t && a) return; m = t; - let a = 0, o = 0; + let o = 0, s = 0; try { - a = Number(i?.scrollTop || 0) || 0, o = Number(i?.scrollLeft || 0) || 0; + o = Number(i?.scrollTop || 0) || 0, s = Number(i?.scrollLeft || 0) || 0; } catch (e) { console.debug?.(e); } @@ -16920,14 +16920,14 @@ function N_({ container: e, state: t, sidebar: n, browseSection: r, gridWrapper: try { requestAnimationFrame(() => { try { - i.scrollTop = a, i.scrollLeft = o; + i.scrollTop = o, i.scrollLeft = s; } catch (e) { console.debug?.(e); } }); } catch { try { - i.scrollTop = a, i.scrollLeft = o; + i.scrollTop = o, i.scrollLeft = s; } catch (e) { console.debug?.(e); } @@ -18841,11 +18841,7 @@ function sv(e = null) { } //#endregion //#region ui/vue/components/panel/SearchBar.vue -var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-search-tools" }, dv = { class: "mjr-popover-anchor" }, fv = { style: { - "font-size": "10px", - "font-weight": "700", - "letter-spacing": "0" -} }, pv = { class: "mjr-popover-anchor" }, mv = { class: "mjr-popover-anchor" }, hv = "Ctrl/Cmd+F, Ctrl/Cmd+K, Ctrl/Cmd+H", gv = { +var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-search-tools" }, dv = { class: "mjr-popover-anchor" }, fv = { class: "mjr-popover-anchor" }, pv = "Ctrl/Cmd+F, Ctrl/Cmd+K, Ctrl/Cmd+H", mv = "AND", hv = { __name: "SearchBar", props: { onSimilarSearch: { type: Function, @@ -18853,7 +18849,7 @@ var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-sea } }, emits: ["similar", "search-change"], setup(e, { expose: t, emit: n }) { - let r = e, i = n, a = eg(), o = X(null), s = X(null), c = X(null), l = X(null), u = X(null), d = dt("mjr-search-autocomplete-", 8), f = (e) => e?.$el || e || null, p = () => f(s.value), m = X(!1), h = X(!0), g = X(String(a.metadataSearchMode || "AND").toUpperCase() === "OR" ? "OR" : "AND"), _ = null, v = null, y = W(() => m.value ? I("search.semanticPlaceholder", "Describe what you're looking for...") : I("search.placeholder", "Search assets...")), b = W(() => m.value ? er(I("search.semanticTitle", "AI semantic search — describe your image in natural language"), hv) : er(I("search.title", "Search by filename, tags, or attributes (e.g. rating:5, ext:png)"), hv)), x = W(() => m.value ? { + let r = e, i = n, a = eg(), o = X(null), s = X(null), c = X(null), l = X(null), u = X(null), d = dt("mjr-search-autocomplete-", 8), f = (e) => e?.$el || e || null, p = () => f(s.value), m = X(!1), h = X(!0), g = X(mv), _ = null, v = null, y = W(() => m.value ? I("search.semanticPlaceholder", "Describe what you're looking for...") : I("search.placeholder", "Search assets...")), b = W(() => m.value ? er(I("search.semanticTitle", "AI semantic search — describe your image in natural language"), pv) : er(I("search.title", "Search by filename, tags, or attributes (e.g. rating:5, ext:png)"), pv)), x = W(() => m.value ? { background: "rgba(0, 188, 212, 0.2)", borderColor: "rgba(0, 188, 212, 0.6)", color: "#00BCD4", @@ -18863,7 +18859,7 @@ var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-sea borderColor: "rgba(0, 188, 212, 0.25)", color: "rgba(0, 188, 212, 0.5)", boxShadow: "none" - }), S = W(() => g.value === "OR" ? I("search.metadataModeOr", "Metadata prefix terms match any tag (OR)") : I("search.metadataModeAnd", "Metadata prefix terms must all match (AND)")), C = () => { + }), S = () => { try { let e = p(); if (!e) return; @@ -18871,63 +18867,56 @@ var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-sea } catch (e) { console.debug?.(e); } - }, w = (e = {}) => { + }, C = (e = {}) => { i("search-change", { query: p()?.value || "", semantic: m.value, metadataMode: g.value, ...e }); - }, T = () => { + }, w = () => { if (h.value) { - m.value = !m.value, C(); + m.value = !m.value, S(); try { p()?.dispatchEvent?.(new Event("input", { bubbles: !0 })); } catch (e) { console.debug?.(e); } - w({ semantic: m.value }); + C({ semantic: m.value }); } - }, E = async (e) => { + }, T = async (e) => { let t = e.target.value || ""; - a.searchQuery = t, a.metadataSearchMode = g.value, C(), w({ query: t }), await M(); - }, D = () => { - g.value = g.value === "OR" ? "AND" : "OR", a.metadataSearchMode = g.value, C(), w({ metadataMode: g.value }); - try { - p()?.dispatchEvent?.(new Event("input", { bubbles: !0 })); - } catch (e) { - console.debug?.(e); - } - }, O = (e) => { + a.searchQuery = t, a.metadataSearchMode = mv, S(), C({ query: t }), await A(); + }, E = (e) => { let t = String(e || "").split(/\s+/); return t[t.length - 1] || ""; }; - async function k() { + async function D() { return _ || (v ||= pe(z.METADATA_KEYS, { limit: 600 }).then((e) => { let t = e?.data || {}; return _ = t, t; }), v); } - function A(e, t) { + function O(e, t) { let n = String(e || "").match(/^(.*?)(\S*)$/); return `${n ? n[1] : ""}${t}`.trimStart(); } - function j(e, t) { - let n = O(e), r = n.replace(/^-/, ""), i = en(); + function k(e, t) { + let n = E(e), r = n.replace(/^-/, ""), i = en(); if (!r.includes(":")) { let t = r.toLowerCase(); - return Object.keys(i).filter((e) => e.startsWith(t)).slice(0, 12).map((t) => A(e, `${n.startsWith("-") ? "-" : ""}${t}:`)); + return Object.keys(i).filter((e) => e.startsWith(t)).slice(0, 12).map((t) => O(e, `${n.startsWith("-") ? "-" : ""}${t}:`)); } let [a, o = ""] = r.split(/:(.*)/s); if (!Gt(a)) return []; let s = o.toLowerCase(), c = Array.isArray(t?.keys) ? t.keys : [], l = t?.workflow_nodes || {}; - return [...c, ...Object.keys(l).flatMap((e) => (l[e] || []).map((t) => `workflow_nodes.${e}.${t}`))].filter((e) => String(e || "").toLowerCase().includes(s)).slice(0, 16).map((t) => A(e, `${n.startsWith("-") ? "-" : ""}${a}:${t}`)); + return [...c, ...Object.keys(l).flatMap((e) => (l[e] || []).map((t) => `workflow_nodes.${e}.${t}`))].filter((e) => String(e || "").toLowerCase().includes(s)).slice(0, 16).map((t) => O(e, `${n.startsWith("-") ? "-" : ""}${a}:${t}`)); } - let M = nn(async () => { + let A = nn(async () => { let e = (p()?.value || "").trim(); if (!(m.value || e.length < 1)) try { - let t = [], n = await k(); - if (t.push(...j(e, n)), !e.includes(":") && e.length >= 2) { + let t = [], n = await D(); + if (t.push(...k(e, n)), !e.includes(":") && e.length >= 2) { let n = await pe("/mjr/am/autocomplete", { q: e, limit: 10 @@ -18939,27 +18928,26 @@ var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-sea t.value = e, c.value.appendChild(t); })); } catch {} - }, 300), N = () => { + }, 300), j = () => { i("similar"), r.onSimilarSearch?.(); }; return vn(() => a.searchQuery, (e) => { let t = p(); t && t.value !== e && (t.value = e); }), vn(h, (e) => { - !e && m.value && (m.value = !1), C(); + !e && m.value && (m.value = !1), S(); }), vn(m, () => { - C(); + S(); }), vn(() => a.metadataSearchMode, (e) => { - let t = String(e || "AND").toUpperCase() === "OR" ? "OR" : "AND"; - g.value !== t && (g.value = t), C(); + String(e || "").toUpperCase() !== mv && (a.metadataSearchMode = mv), g.value !== mv && (g.value = mv), S(); }), En(() => { try { let e = p(); - e && (e.value = a.searchQuery || ""); + e && (e.value = a.searchQuery || ""), a.metadataSearchMode = mv; } catch (e) { console.debug?.(e); } - C(); + S(); }), t({ get searchSection() { return o.value; @@ -18974,7 +18962,7 @@ var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-sea return f(u.value); }, setSemanticEnabled: (e) => { - h.value = !!e, C(); + h.value = !!e, S(); } }), (e, t) => { let n = An("MInputText"), r = An("MButton"); @@ -18993,7 +18981,7 @@ var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-sea placeholder: y.value, title: b.value, list: G(d), - onInput: E + onInput: T }, null, 8, [ "placeholder", "title", @@ -19006,19 +18994,6 @@ var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-sea }, null, 8, lv) ]), H("div", uv, [ H("div", dv, [q(r, { - type: "button", - class: "mjr-icon-btn mjr-ai-control", - severity: "secondary", - text: "", - rounded: "", - title: S.value, - "aria-label": S.value, - onClick: D - }, { - default: Z(() => [H("span", fv, K(g.value), 1)]), - _: 1 - }, 8, ["title", "aria-label"])]), - H("div", pv, [q(r, { ref_key: "semanticBtnRef", ref: u, type: "button", @@ -19030,7 +19005,7 @@ var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-sea "aria-disabled": !h.value, title: h.value ? G(I)("search.semanticToggle", "Toggle AI semantic search (CLIP-based)") : G(I)("search.semanticDisabled", "AI semantic search is disabled in settings"), style: Ln(x.value), - onClick: T + onClick: w }, { default: Z(() => [...t[1] ||= [H("i", { class: "pi pi-sparkles" }, null, -1)]]), _: 1 @@ -19040,7 +19015,7 @@ var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-sea "title", "style" ])]), - H("div", mv, [q(r, { + H("div", fv, [q(r, { ref_key: "similarBtnRef", ref: l, type: "button", @@ -19049,7 +19024,7 @@ var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-sea text: "", rounded: "", title: G(I)("search.findSimilar", "Find Similar"), - onClick: N + onClick: j }, { default: Z(() => [...t[2] ||= [H("i", { class: "pi pi-search" }, null, -1)]]), _: 1 @@ -19061,10 +19036,10 @@ var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-sea ])], 512); }; } -}, _v = { +}, gv = { class: "mjr-popover mjr-sort-popover", style: { display: "none" } -}, vv = { class: "mjr-menu-item-label" }, yv = { +}, _v = { class: "mjr-menu-item-label" }, vv = { __name: "SortPopover", setup(e) { let t = eg(), n = W(() => t.sort || "mtime_desc"), r = (e) => { @@ -19117,12 +19092,12 @@ var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-sea }))); return (e, t) => { let r = An("MMenu"); - return B(), J("div", _v, [q(r, { + return B(), J("div", gv, [q(r, { model: i.value, class: "mjr-menu mjr-prime-menu mjr-sort-menu", pt: { list: { class: "mjr-menu mjr-prime-menu-list" } } }, { - item: Z(({ item: e }) => [H("div", { class: Y(["mjr-menu-item", { "is-active": n.value === e.key }]) }, [H("span", vv, K(e.label), 1), H("i", { + item: Z(({ item: e }) => [H("div", { class: Y(["mjr-menu-item", { "is-active": n.value === e.key }]) }, [H("span", _v, K(e.label), 1), H("i", { class: Y([e.icon, "mjr-menu-item-check"]), style: Ln({ opacity: +(n.value === e.key) }) }, null, 6)], 2)]), @@ -19130,16 +19105,16 @@ var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-sea }, 8, ["model"])]); }; } -}, bv = { class: "mjr-popover mjr-filter-popover mjr-popover--hidden" }, xv = { class: "mjr-filter-head" }, Sv = { class: "mjr-filter-head-left" }, Cv = { class: "mjr-filter-kicker" }, wv = { class: "mjr-filter-subtitle" }, Tv = { class: "mjr-filter-head-actions" }, Ev = { class: "mjr-filter-active-count" }, Dv = { class: "mjr-filter-group-title" }, Ov = { +}, yv = { class: "mjr-popover mjr-filter-popover mjr-popover--hidden" }, bv = { class: "mjr-filter-head" }, xv = { class: "mjr-filter-head-left" }, Sv = { class: "mjr-filter-kicker" }, Cv = { class: "mjr-filter-subtitle" }, wv = { class: "mjr-filter-head-actions" }, Tv = { class: "mjr-filter-active-count" }, Ev = { class: "mjr-filter-group-title" }, Dv = { class: "mjr-filter-group-chevron", "aria-hidden": "true" -}, kv = { class: "mjr-filter-group-body" }, Av = { class: "mjr-filter-card" }, jv = { class: "mjr-popover-row" }, Mv = { class: "mjr-popover-label" }, Nv = { class: "mjr-popover-row" }, Pv = { class: "mjr-popover-label" }, Fv = ["title"], Iv = { class: "mjr-filter-card" }, Lv = { class: "mjr-popover-row" }, Rv = { class: "mjr-popover-label" }, zv = { class: "mjr-popover-row" }, Bv = { class: "mjr-popover-label" }, Vv = { class: "mjr-popover-row" }, Hv = { class: "mjr-popover-label" }, Uv = { class: "mjr-filter-stack" }, Wv = { class: "mjr-popover-row" }, Gv = { class: "mjr-popover-label" }, Kv = { class: "mjr-popover-row" }, qv = { class: "mjr-popover-label" }, Jv = { class: "mjr-filter-group-title" }, Yv = { +}, Ov = { class: "mjr-filter-group-body" }, kv = { class: "mjr-filter-card" }, Av = { class: "mjr-popover-row" }, jv = { class: "mjr-popover-label" }, Mv = { class: "mjr-popover-row" }, Nv = { class: "mjr-popover-label" }, Pv = ["title"], Fv = { class: "mjr-filter-card" }, Iv = { class: "mjr-popover-row" }, Lv = { class: "mjr-popover-label" }, Rv = { class: "mjr-popover-row" }, zv = { class: "mjr-popover-label" }, Bv = { class: "mjr-popover-row" }, Vv = { class: "mjr-popover-label" }, Hv = { class: "mjr-filter-stack" }, Uv = { class: "mjr-popover-row" }, Wv = { class: "mjr-popover-label" }, Gv = { class: "mjr-popover-row" }, Kv = { class: "mjr-popover-label" }, qv = { class: "mjr-filter-group-title" }, Jv = { class: "mjr-filter-group-chevron", "aria-hidden": "true" -}, Xv = { class: "mjr-filter-group-body" }, Zv = { class: "mjr-filter-card" }, Qv = { class: "mjr-popover-row mjr-popover-row--3col" }, $v = { class: "mjr-popover-label" }, ey = { class: "mjr-popover-row" }, ty = { class: "mjr-popover-label" }, ny = { class: "mjr-popover-row mjr-popover-row--3col" }, ry = { class: "mjr-popover-label" }, iy = { class: "mjr-popover-row mjr-popover-row--3col" }, ay = { class: "mjr-popover-label" }, oy = { class: "mjr-filter-group-title" }, sy = { +}, Yv = { class: "mjr-filter-group-body" }, Xv = { class: "mjr-filter-card" }, Zv = { class: "mjr-popover-row mjr-popover-row--3col" }, Qv = { class: "mjr-popover-label" }, $v = { class: "mjr-popover-row" }, ey = { class: "mjr-popover-label" }, ty = { class: "mjr-popover-row mjr-popover-row--3col" }, ny = { class: "mjr-popover-label" }, ry = { class: "mjr-popover-row mjr-popover-row--3col" }, iy = { class: "mjr-popover-label" }, ay = { class: "mjr-filter-group-title" }, oy = { class: "mjr-filter-group-chevron", "aria-hidden": "true" -}, cy = { class: "mjr-filter-group-body" }, ly = { class: "mjr-filter-card mjr-filter-card--agenda" }, uy = { class: "mjr-popover-row" }, dy = { class: "mjr-popover-label" }, fy = { class: "mjr-popover-row" }, py = { class: "mjr-popover-label" }, my = { +}, sy = { class: "mjr-filter-group-body" }, cy = { class: "mjr-filter-card mjr-filter-card--agenda" }, ly = { class: "mjr-popover-row" }, uy = { class: "mjr-popover-label" }, dy = { class: "mjr-popover-row" }, fy = { class: "mjr-popover-label" }, py = { __name: "FilterPopover", setup(e, { expose: t }) { let n = eg(), r = X(null), i = X(null), a = X(null), o = X(null), s = X(null), c = X(null), l = X(null), u = X(null), d = X(null), f = X(null), p = X([{ @@ -19507,8 +19482,8 @@ var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-sea } }), (e, t) => { let p = An("MButton"), m = An("MSelect"), h = An("MCheckbox"), g = An("MInputText"); - return B(), J("div", bv, [ - H("div", xv, [H("div", Sv, [H("div", Cv, K(G(I)("label.filters", "Filters")), 1), H("div", wv, K(G(I)("label.refineResults", "Refine your results")), 1)]), H("div", Tv, [H("span", Ev, K(xe.value), 1), q(p, { + return B(), J("div", yv, [ + H("div", bv, [H("div", xv, [H("div", Sv, K(G(I)("label.filters", "Filters")), 1), H("div", Cv, K(G(I)("label.refineResults", "Refine your results")), 1)]), H("div", wv, [H("span", Tv, K(xe.value), 1), q(p, { type: "button", class: "mjr-filter-clear-all", severity: "secondary", @@ -19527,9 +19502,9 @@ var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-sea "aria-expanded": String(le("core")), onClick: t[0] ||= (e) => ce("core") }, { - default: Z(() => [H("span", Dv, K(G(I)("group.core", "Core")), 1), H("span", Ov, K(le("core") ? "▾" : "▸"), 1)]), + default: Z(() => [H("span", Ev, K(G(I)("group.core", "Core")), 1), H("span", Dv, K(le("core") ? "▾" : "▸"), 1)]), _: 1 - }, 8, ["aria-expanded"]), xn(H("div", kv, [H("div", Av, [H("div", jv, [H("div", Mv, K(G(I)("label.type")), 1), q(m, { + }, 8, ["aria-expanded"]), xn(H("div", Ov, [H("div", kv, [H("div", Av, [H("div", jv, K(G(I)("label.type")), 1), q(m, { class: "mjr-select mjr-filter-select", "panel-class": "mjr-filter-select-panel", title: G(I)("tooltip.filterByFileType", "Filter by file type"), @@ -19542,7 +19517,7 @@ var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-sea "title", "model-value", "options" - ])]), H("div", Nv, [H("div", Pv, K(G(I)("label.workflow")), 1), H("label", { + ])]), H("div", Mv, [H("div", Nv, K(G(I)("label.workflow")), 1), H("label", { class: "mjr-popover-toggle", title: G(I)("tooltip.filterWorkflowOnly", "Show only assets with embedded workflow data") }, [q(h, { @@ -19550,8 +19525,8 @@ var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-sea "model-value": !!G(n).workflowOnly, binary: "", "onUpdate:modelValue": M - }, null, 8, ["model-value"]), H("span", null, K(G(I)("filter.onlyWithWorkflow")), 1)], 8, Fv)])]), H("div", Iv, [ - H("div", Lv, [H("div", Rv, K(G(I)("label.workflowType", "Workflow type")), 1), q(m, { + }, null, 8, ["model-value"]), H("span", null, K(G(I)("filter.onlyWithWorkflow")), 1)], 8, Pv)])]), H("div", Fv, [ + H("div", Iv, [H("div", Lv, K(G(I)("label.workflowType", "Workflow type")), 1), q(m, { class: "mjr-select mjr-filter-select", "panel-class": "mjr-filter-select-panel", "model-value": String(G(n).workflowType || "").trim().toUpperCase(), @@ -19560,7 +19535,7 @@ var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-sea "option-value": "value", "onUpdate:modelValue": N }, null, 8, ["model-value", "options"])]), - H("div", zv, [H("div", Bv, K(G(I)("label.sameWorkflow", "Generated with Same Workflow")), 1), q(g, { + H("div", Rv, [H("div", zv, K(G(I)("label.sameWorkflow", "Generated with Same Workflow")), 1), q(g, { ref_key: "workflowIdInputRef", ref: d, class: "mjr-input", @@ -19574,7 +19549,7 @@ var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-sea "placeholder", "model-value" ])]), - H("div", Vv, [H("div", Hv, K(G(I)("label.workflowModelFamily", "Model family")), 1), H("div", Uv, [q(m, { + H("div", Bv, [H("div", Vv, K(G(I)("label.workflowModelFamily", "Model family")), 1), H("div", Hv, [q(m, { class: "mjr-select mjr-filter-select", "panel-class": "mjr-filter-select-panel", "model-value": String(G(n).workflowModelFilter || ""), @@ -19591,7 +19566,7 @@ var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-sea "onUpdate:modelValue": te, onChange: t[2] ||= (e) => te(e?.target?.value) }, null, 8, ["placeholder", "model-value"])])]), - H("div", Wv, [H("div", Gv, K(G(I)("label.workflowRunsOn", "Runs on")), 1), q(m, { + H("div", Uv, [H("div", Wv, K(G(I)("label.workflowRunsOn", "Runs on")), 1), q(m, { class: "mjr-select mjr-filter-select", "panel-class": "mjr-filter-select-panel", "model-value": String(G(n).workflowRunsOnFilter || "").trim().toLowerCase(), @@ -19600,7 +19575,7 @@ var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-sea "option-value": "value", "onUpdate:modelValue": ne }, null, 8, ["model-value", "options"])]), - H("div", Kv, [H("div", qv, K(G(I)("label.rating")), 1), q(m, { + H("div", Gv, [H("div", Kv, K(G(I)("label.rating")), 1), q(m, { class: "mjr-select mjr-filter-select", "panel-class": "mjr-filter-select-panel", title: G(I)("tooltip.filterMinRating", "Filter by minimum rating"), @@ -19623,11 +19598,11 @@ var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-sea "aria-expanded": String(le("media")), onClick: t[3] ||= (e) => ce("media") }, { - default: Z(() => [H("span", Jv, K(G(I)("group.media", "Media")), 1), H("span", Yv, K(le("media") ? "▾" : "▸"), 1)]), + default: Z(() => [H("span", qv, K(G(I)("group.media", "Media")), 1), H("span", Jv, K(le("media") ? "▾" : "▸"), 1)]), _: 1 - }, 8, ["aria-expanded"]), xn(H("div", Xv, [H("div", Zv, [ - H("div", Qv, [ - H("div", $v, K(G(I)("label.fileSizeMB", "File size (MB)")), 1), + }, 8, ["aria-expanded"]), xn(H("div", Yv, [H("div", Xv, [ + H("div", Zv, [ + H("div", Qv, K(G(I)("label.fileSizeMB", "File size (MB)")), 1), q(g, { ref_key: "minSizeInputRef", ref: r, @@ -19651,7 +19626,7 @@ var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-sea onChange: re }, null, 8, ["placeholder", "value"]) ]), - H("div", ey, [H("div", ty, K(G(I)("label.resolutionPx", "Resolution (px)")), 1), q(m, { + H("div", $v, [H("div", ey, K(G(I)("label.resolutionPx", "Resolution (px)")), 1), q(m, { class: "mjr-select mjr-filter-select", "panel-class": "mjr-filter-select-panel", "model-value": E.value, @@ -19660,8 +19635,8 @@ var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-sea "option-value": "value", "onUpdate:modelValue": ae }, null, 8, ["model-value", "options"])]), - H("div", ny, [ - H("div", ry, K(G(I)("label.resolutionMinWxH", "Min WxH (px)")), 1), + H("div", ty, [ + H("div", ny, K(G(I)("label.resolutionMinWxH", "Min WxH (px)")), 1), q(g, { ref_key: "minWidthInputRef", ref: a, @@ -19695,8 +19670,8 @@ var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-sea "value" ]) ]), - H("div", iy, [ - H("div", ay, K(G(I)("label.resolutionMaxWxH", "Max WxH (px)")), 1), + H("div", ry, [ + H("div", iy, K(G(I)("label.resolutionMaxWxH", "Max WxH (px)")), 1), q(g, { ref_key: "maxWidthInputRef", ref: s, @@ -19739,9 +19714,9 @@ var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-sea "aria-expanded": String(le("time")), onClick: t[4] ||= (e) => ce("time") }, { - default: Z(() => [H("span", oy, K(G(I)("group.time", "Time")), 1), H("span", sy, K(le("time") ? "▾" : "▸"), 1)]), + default: Z(() => [H("span", ay, K(G(I)("group.time", "Time")), 1), H("span", oy, K(le("time") ? "▾" : "▸"), 1)]), _: 1 - }, 8, ["aria-expanded"]), xn(H("div", cy, [H("div", ly, [H("div", uy, [H("div", dy, K(G(I)("label.dateRange")), 1), q(m, { + }, 8, ["aria-expanded"]), xn(H("div", sy, [H("div", cy, [H("div", ly, [H("div", uy, K(G(I)("label.dateRange")), 1), q(m, { class: "mjr-select mjr-filter-select", "panel-class": "mjr-filter-select-panel", title: G(I)("tooltip.filterByDateRange", "Filter by date range"), @@ -19754,7 +19729,7 @@ var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-sea "title", "model-value", "options" - ])]), H("div", fy, [H("div", py, K(G(I)("label.agenda")), 1), H("div", { + ])]), H("div", dy, [H("div", fy, K(G(I)("label.agenda")), 1), H("div", { ref_key: "agendaContainerRef", ref: l, class: "mjr-agenda-container" @@ -19769,7 +19744,7 @@ var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-sea ]); }; } -}, hy = 128, gy = Object.freeze([ +}, my = 128, hy = Object.freeze([ { key: "portraits", label: "Portraits", @@ -19807,10 +19782,10 @@ var cv = { class: "mjr-am-search-pill" }, lv = ["id"], uv = { class: "mjr-am-sea iconClass: "pi pi-circle" } ]); -function _y(e) { +function gy(e) { try { let t = String(e ?? "").trim(); - if (!t || t.length > hy || t.includes("\0")) return ""; + if (!t || t.length > my || t.includes("\0")) return ""; for (let e = 0; e < t.length; e += 1) { let n = t.charCodeAt(e); if (n <= 31 || n === 127) return ""; @@ -19820,7 +19795,7 @@ function _y(e) { return ""; } } -function vy(e) { +function _y(e) { if (!e || typeof e != "object") return null; let t = String(e.filepath || "").trim(); return t ? { @@ -19832,10 +19807,10 @@ function vy(e) { root_id: String(e.root_id || e.rootId || e.custom_root_id || "").trim() || void 0 } : null; } -function yy(e) { +function vy(e) { let t = [], n = [], r = /* @__PURE__ */ new Set(); for (let i of Array.isArray(e) ? e : []) { - let e = vy(i); + let e = _y(i); if (e?.filepath) { let n = e.filepath.toLowerCase(); if (r.has(n)) continue; @@ -19850,7 +19825,7 @@ function yy(e) { missingIds: n }; } -async function by(e) { +async function yy(e) { let t = Array.from(new Set((Array.isArray(e) ? e : []).map((e) => Number(e)).filter((e) => Number.isFinite(e) && e > 0))); if (!t.length) return { ok: !0, @@ -19861,13 +19836,13 @@ async function by(e) { ok: !1, error: String(n?.error || "Failed to fetch assets") }; - let { assets: r } = yy(Array.isArray(n?.data) ? n.data : Array.isArray(n?.data?.assets) ? n.data.assets : []); + let { assets: r } = vy(Array.isArray(n?.data) ? n.data : Array.isArray(n?.data?.assets) ? n.data.assets : []); return { ok: !0, data: r }; } -function xy(e) { +function by(e) { let t = String(e?.label || "").trim(); if (!(!t || /^group\b/i.test(t))) return t; let n = (Array.isArray(e?.dominant_tags) ? e.dominant_tags : []).map((e) => String(e || "").trim()).filter(Boolean); @@ -19885,7 +19860,7 @@ function xy(e) { let s = Object.entries(o).sort((e, t) => t[1] - e[1])[0]?.[0] || "other", c = s === "image" ? "Images" : s === "video" ? "Videos" : s === "audio" ? "Audio" : "Media", l = Number(e?.cluster_id), u = Number.isFinite(l) ? ` ${l + 1}` : ""; return a ? `${a} - ${c}` : `${c} Cluster${u}`; } -function Sy() { +function xy() { try { return !!(Bt()?.ai?.vectorSearchEnabled ?? !0); } catch { @@ -19894,25 +19869,25 @@ function Sy() { } //#endregion //#region ui/vue/components/panel/CollectionsPopover.vue -var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-item-label" }, Ty = { class: "mjr-menu-item-label" }, Ey = { class: "mjr-menu-item-right" }, Dy = { +var Sy = { class: "mjr-menu mjr-collections-menu" }, Cy = { class: "mjr-menu-item-label" }, wy = { class: "mjr-menu-item-label" }, Ty = { class: "mjr-menu-item-right" }, Ey = { key: 0, class: "mjr-menu-item-hint" -}, Oy = { +}, Dy = { key: 1, class: "mjr-muted" -}, ky = { +}, Oy = { key: 2, class: "mjr-state-block is-error" -}, Ay = { +}, ky = { key: 3, class: "mjr-muted" -}, jy = { class: "mjr-collection-row" }, My = { class: "mjr-menu-item-label" }, Ny = { class: "mjr-menu-item-right" }, Py = { +}, Ay = { class: "mjr-collection-row" }, jy = { class: "mjr-menu-item-label" }, My = { class: "mjr-menu-item-right" }, Ny = { key: 0, class: "mjr-menu-item-hint" -}, Fy = { class: "mjr-state-block" }, Iy = { class: "mjr-section-title mjr-section-title--cyan" }, Ly = { class: "mjr-section-hint" }, Ry = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, zy = { class: "mjr-section-title mjr-section-title--violet" }, By = { class: "mjr-section-hint" }, Vy = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, Hy = { +}, Py = { class: "mjr-state-block" }, Fy = { class: "mjr-section-title mjr-section-title--cyan" }, Iy = { class: "mjr-section-hint" }, Ly = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, Ry = { class: "mjr-section-title mjr-section-title--violet" }, zy = { class: "mjr-section-hint" }, By = { class: "mjr-menu-item-label mjr-menu-item-label--icon" }, Vy = { key: 0, class: "mjr-state-block is-error" -}, Uy = { class: "mjr-cluster-thumbs" }, Wy = ["src", "alt"], Gy = { class: "mjr-cluster-info" }, Ky = ["title"], qy = { class: "mjr-cluster-count" }, Jy = "mjr:collections-changed", Yy = { +}, Hy = { class: "mjr-cluster-thumbs" }, Uy = ["src", "alt"], Wy = { class: "mjr-cluster-info" }, Gy = ["title"], Ky = { class: "mjr-cluster-count" }, qy = "mjr:collections-changed", Jy = { __name: "CollectionsPopover", setup(e, { expose: t }) { let i = eg(), a = X(null), o = X([]), s = X(!1), c = X(""), l = X(!1), u = X(!0), d = X(!1), p = X(!1), m = X(!1), h = X([]), g = X(""), v = X(""), y = 0, b = null, x = !1, S = W(() => String(i.collectionId || "").trim()), C = W(() => String(i.collectionName || "").trim()), w = W(() => !!S.value), T = W(() => !u.value || p.value), D = W(() => u.value && d.value), k = W(() => `${Math.max(1, Math.min(o.value.length, 6)) * 48}px`); @@ -19922,7 +19897,7 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite } function j({ collectionId: e = S.value, collectionName: t = C.value, close: n = !0, reload: r = !0 } = {}) { try { - window.dispatchEvent(new CustomEvent(Jy, { detail: { + window.dispatchEvent(new CustomEvent(qy, { detail: { collectionId: String(e || ""), collectionName: String(t || ""), close: n !== !1, @@ -19940,7 +19915,7 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite } } async function N() { - if (!Sy()) return { + if (!xy()) return { enabled: !1, vectorAvailable: !1, vectorDisabled: !1 @@ -19997,7 +19972,7 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite let P = ne("create", async () => { let e = await At(I("dialog.createCollection", "Create collection"), I("dialog.collectionPlaceholder", "Collection name")); if (!e) return; - let t = _y(e); + let t = gy(e); if (!t) { O(I("toast.invalidCollectionName", "Invalid collection name"), "error"); return; @@ -20061,9 +20036,9 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite if (!r) return; let i = await je(String(e?.query || ""), 50); if (i?.ok && Array.isArray(i?.data) && i.data.length > 0) { - let e = yy(i.data), n = e.assets; + let e = vy(i.data), n = e.assets; if (e.missingIds.length) { - let t = await by(e.missingIds); + let t = await yy(e.missingIds); t.ok && Array.isArray(t.data) && (n = ee(n, t.data)); } if (n.length) { @@ -20108,7 +20083,7 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite } h.value = e.data.map((e) => ({ ...e, - _label: xy(e) + _label: by(e) })); } catch (e) { console.error("[Majoor] Discover groups failed:", e), g.value = I("toast.clusterAnalysisFailed", "Cluster analysis failed"), O(I("toast.clusterAnalysisFailed", "Cluster analysis failed"), "error"); @@ -20122,7 +20097,7 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite if (!v.value) { v.value = t; try { - let t = String(e?._label || xy(e) || "").trim(); + let t = String(e?._label || by(e) || "").trim(); if (!t) return; let n = await f(t); if (!n?.ok) { @@ -20131,7 +20106,7 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite } let r = String(n?.data?.id || ""), i = Array.isArray(e?.all_asset_ids) ? e.all_asset_ids : []; if (r && i.length) { - let e = await by(i); + let e = await yy(i); if (!e.ok) { O(e.error || I("toast.failedLoadClusterAssets", "Failed to load cluster assets"), "error"); return; @@ -20180,7 +20155,7 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite ref: a, class: "mjr-popover mjr-collections-popover", style: { display: "none" } - }, [H("div", Cy, [ + }, [H("div", Sy, [ q(n, { type: "button", class: "mjr-menu-item", @@ -20189,7 +20164,7 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite disabled: v.value !== "", onClick: G(P) }, { - default: Z(() => [H("span", wy, K(G(I)("ctx.createCollection", "Create collection")), 1), t[0] ||= H("i", { class: "pi pi-plus mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1)]), + default: Z(() => [H("span", Cy, K(G(I)("ctx.createCollection", "Create collection")), 1), t[0] ||= H("i", { class: "pi pi-plus mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1)]), _: 1 }, 8, ["disabled", "onClick"]), w.value ? (B(), gn(n, { @@ -20201,11 +20176,11 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite disabled: v.value !== "", onClick: G(re) }, { - default: Z(() => [H("span", Ty, K(G(I)("ctx.exitCollection", "Exit collection")), 1), H("span", Ey, [C.value ? (B(), J("span", Dy, K(C.value), 1)) : U("", !0), t[1] ||= H("i", { class: "pi pi-times mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1)])]), + default: Z(() => [H("span", wy, K(G(I)("ctx.exitCollection", "Exit collection")), 1), H("span", Ty, [C.value ? (B(), J("span", Ey, K(C.value), 1)) : U("", !0), t[1] ||= H("i", { class: "pi pi-times mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1)])]), _: 1 }, 8, ["disabled", "onClick"])) : U("", !0), t[9] ||= H("div", { class: "mjr-menu-divider" }, null, -1), - s.value ? (B(), J("div", Oy, K(G(I)("label.loading", "Loading...")), 1)) : c.value ? (B(), J("div", ky, K(c.value), 1)) : o.value.length ? (B(), gn(r, { + s.value ? (B(), J("div", Dy, K(G(I)("label.loading", "Loading...")), 1)) : c.value ? (B(), J("div", Oy, K(c.value), 1)) : o.value.length ? (B(), gn(r, { key: 4, items: o.value, "item-size": 48, @@ -20213,7 +20188,7 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite "num-tolerated-items": 4, class: "mjr-collections-virtual-list" }, { - item: Z(({ item: e }) => [H("div", jy, [q(n, { + item: Z(({ item: e }) => [H("div", Ay, [q(n, { type: "button", class: Y(["mjr-menu-item", { "is-active": S.value === String(e.id || "") }]), severity: "secondary", @@ -20221,7 +20196,7 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite disabled: v.value !== "", onClick: (t) => G(ie)(e) }, { - default: Z(() => [H("span", My, K(e.name || e.id), 1), H("span", Ny, [Number(e.count || 0) ? (B(), J("span", Py, K(Number(e.count || 0)), 1)) : U("", !0), t[2] ||= H("i", { class: "pi pi-check mjr-menu-item-check" }, null, -1)])]), + default: Z(() => [H("span", jy, K(e.name || e.id), 1), H("span", My, [Number(e.count || 0) ? (B(), J("span", Ny, K(Number(e.count || 0)), 1)) : U("", !0), t[2] ||= H("i", { class: "pi pi-check mjr-menu-item-check" }, null, -1)])]), _: 2 }, 1032, [ "class", @@ -20244,13 +20219,13 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite "onClick" ])])]), _: 1 - }, 8, ["items", "scroll-height"])) : (B(), J("div", Ay, K(G(I)("msg.noCollections", "No collections yet")), 1)), - !l.value && T.value ? (B(), J(V, { key: 5 }, [t[4] ||= H("div", { class: "mjr-menu-divider" }, null, -1), H("div", Fy, K(u.value ? "AI Smart Collections are disabled (enable vector search env var)." : "AI Smart Collections are disabled in settings."), 1)], 64)) : U("", !0), + }, 8, ["items", "scroll-height"])) : (B(), J("div", ky, K(G(I)("msg.noCollections", "No collections yet")), 1)), + !l.value && T.value ? (B(), J(V, { key: 5 }, [t[4] ||= H("div", { class: "mjr-menu-divider" }, null, -1), H("div", Py, K(u.value ? "AI Smart Collections are disabled (enable vector search env var)." : "AI Smart Collections are disabled in settings."), 1)], 64)) : U("", !0), !l.value && D.value ? (B(), J(V, { key: 6 }, [ t[7] ||= H("div", { class: "mjr-menu-divider" }, null, -1), - H("div", Iy, K(G(I)("label.smartSuggestions", "Smart Suggestions")), 1), - H("div", Ly, K(G(I)("label.smartCollectionsHint", "Create collections from AI-detected themes")), 1), - (B(!0), J(V, null, yn(G(gy), (e) => (B(), gn(n, { + H("div", Fy, K(G(I)("label.smartSuggestions", "Smart Suggestions")), 1), + H("div", Iy, K(G(I)("label.smartCollectionsHint", "Create collections from AI-detected themes")), 1), + (B(!0), J(V, null, yn(G(hy), (e) => (B(), gn(n, { key: e.key, type: "button", class: "mjr-menu-item mjr-menu-item--smart", @@ -20259,12 +20234,12 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite disabled: v.value !== "", onClick: (t) => se(e) }, { - default: Z(() => [H("span", Ry, [H("i", { class: Y(e.iconClass) }, null, 2), H("span", null, K(e.label), 1)]), t[5] ||= H("i", { class: "pi pi-plus mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1)]), + default: Z(() => [H("span", Ly, [H("i", { class: Y(e.iconClass) }, null, 2), H("span", null, K(e.label), 1)]), t[5] ||= H("i", { class: "pi pi-plus mjr-menu-item-check mjr-menu-item-check--visible" }, null, -1)]), _: 2 }, 1032, ["disabled", "onClick"]))), 128)), t[8] ||= H("div", { class: "mjr-menu-divider" }, null, -1), - H("div", zy, K(G(I)("label.discoverGroups", "Discover Groups")), 1), - H("div", By, K(G(I)("label.discoverGroupsHint", "AI clusters assets by visual similarity")), 1), + H("div", Ry, K(G(I)("label.discoverGroups", "Discover Groups")), 1), + H("div", zy, K(G(I)("label.discoverGroupsHint", "AI clusters assets by visual similarity")), 1), q(n, { type: "button", class: "mjr-menu-item mjr-menu-item--cluster", @@ -20273,25 +20248,25 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite disabled: m.value || v.value !== "", onClick: ce }, { - default: Z(() => [H("span", Vy, [t[6] ||= H("i", { class: "pi pi-search" }, null, -1), H("span", null, K(m.value ? G(I)("label.analyzing", "Analyzing...") : G(I)("label.analyzeLibrary", "Analyze library")), 1)])]), + default: Z(() => [H("span", By, [t[6] ||= H("i", { class: "pi pi-search" }, null, -1), H("span", null, K(m.value ? G(I)("label.analyzing", "Analyzing...") : G(I)("label.analyzeLibrary", "Analyze library")), 1)])]), _: 1 }, 8, ["disabled"]), - g.value ? (B(), J("div", Hy, K(g.value), 1)) : U("", !0), + g.value ? (B(), J("div", Vy, K(g.value), 1)) : U("", !0), (B(!0), J(V, null, yn(h.value, (e) => (B(), J("div", { key: e.cluster_id, class: "mjr-cluster-row" }, [ - H("div", Uy, [(B(!0), J(V, null, yn(Array.isArray(e.sample_assets) ? e.sample_assets.slice(0, 3) : [], (t, n) => (B(), J("img", { + H("div", Hy, [(B(!0), J(V, null, yn(Array.isArray(e.sample_assets) ? e.sample_assets.slice(0, 3) : [], (t, n) => (B(), J("img", { key: `${e.cluster_id}-${n}`, class: "mjr-cluster-thumb", src: M(t), alt: String(t?.filename || e._label || ""), loading: "lazy" - }, null, 8, Wy))), 128))]), - H("div", Gy, [H("div", { + }, null, 8, Uy))), 128))]), + H("div", Wy, [H("div", { class: "mjr-cluster-name", title: e._label - }, K(e._label), 9, Ky), H("div", qy, K(Number(e.size || 0)) + " " + K(G(I)("label.assets", "assets")), 1)]), + }, K(e._label), 9, Gy), H("div", Ky, K(Number(e.size || 0)) + " " + K(G(I)("label.assets", "assets")), 1)]), q(n, { type: "button", class: "mjr-cluster-create-btn", @@ -20312,16 +20287,16 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite ])], 512); }; } -}, Xy = { class: "mjr-popover mjr-pinned-folders-popover mjr-popover--hidden" }, Zy = { +}, Yy = { class: "mjr-popover mjr-pinned-folders-popover mjr-popover--hidden" }, Xy = { key: 0, class: "mjr-muted mjr-pinned-folders-empty" -}, Qy = { +}, Zy = { key: 1, class: "mjr-muted mjr-pinned-folders-empty" -}, $y = { class: "mjr-pinned-folder-label" }, eb = { +}, Qy = { class: "mjr-pinned-folder-label" }, $y = { key: 0, class: "mjr-menu-item-hint mjr-pinned-folder-path" -}, tb = { +}, eb = { __name: "PinnedFoldersPopover", setup(e, { expose: t }) { let n = X(null), r = X([]), i = X(!1), a = X("No pinned folders"), o = X("Loading..."), s = X("Unpin folder"), c = X(null), l = X(null); @@ -20353,12 +20328,12 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite setPinnedFoldersLoading: f }), (e, t) => { let c = An("MButton"); - return B(), J("div", Xy, [H("div", { + return B(), J("div", Yy, [H("div", { ref_key: "menuRef", ref: n, class: "mjr-menu mjr-pinned-folders-menu", role: "menu" - }, [i.value ? (B(), J("div", Zy, K(o.value), 1)) : r.value.length ? (B(!0), J(V, { key: 2 }, yn(r.value, (e) => (B(), J("div", { + }, [i.value ? (B(), J("div", Xy, K(o.value), 1)) : r.value.length ? (B(!0), J(V, { key: 2 }, yn(r.value, (e) => (B(), J("div", { key: e.id, class: "mjr-pinned-folder-row" }, [q(c, { @@ -20368,7 +20343,7 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite severity: "secondary", onClick: (t) => p(e) }, { - default: Z(() => [H("span", $y, K(e.label), 1), e.path ? (B(), J("span", eb, K(e.path), 1)) : U("", !0)]), + default: Z(() => [H("span", Qy, K(e.label), 1), e.path ? (B(), J("span", $y, K(e.path), 1)) : U("", !0)]), _: 2 }, 1032, ["onClick"]), q(c, { type: "button", @@ -20388,13 +20363,13 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite "title", "aria-label", "onClick" - ])]))), 128)) : (B(), J("div", Qy, K(a.value), 1))], 512)]); + ])]))), 128)) : (B(), J("div", Zy, K(a.value), 1))], 512)]); }; } -}, nb = { +}, tb = { class: "mjr-popover mjr-custom-popover", style: { display: "none" } -}, rb = { class: "mjr-popover-row" }, ib = { class: "mjr-popover-label" }, ab = { class: "mjr-popover-row mjr-popover-row--actions" }, ob = { +}, nb = { class: "mjr-popover-row" }, rb = { class: "mjr-popover-label" }, ib = { class: "mjr-popover-row mjr-popover-row--actions" }, ab = { __name: "CustomRootsPopover", setup(e, { expose: t }) { let n = X([{ @@ -20478,7 +20453,7 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite } }), (e, t) => { let s = An("MSelect"), c = An("MButton"); - return B(), J("div", nb, [H("div", rb, [H("div", ib, K(G(I)("label.folder")), 1), q(s, { + return B(), J("div", tb, [H("div", nb, [H("div", rb, K(G(I)("label.folder")), 1), q(s, { class: "mjr-select", "model-value": r.value, options: n.value, @@ -20490,7 +20465,7 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite "model-value", "options", "disabled" - ])]), H("div", ab, [q(c, { + ])]), H("div", ib, [q(c, { ref_key: "customAddBtnRef", ref: a, type: "button", @@ -20512,10 +20487,10 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite }, 512)])]); }; } -}, sb = ["aria-label"], cb = { class: "mjr-messages-head" }, lb = { class: "mjr-messages-actions" }, ub = ["title"], db = { class: "mjr-messages-star-label" }, fb = { +}, ob = ["aria-label"], sb = { class: "mjr-messages-head" }, cb = { class: "mjr-messages-actions" }, lb = ["title"], ub = { class: "mjr-messages-star-label" }, db = { class: "mjr-messages-tabs", role: "tablist" -}, pb = { class: "mjr-messages-panels" }, mb = { class: "mjr-messages-empty" }, hb = "https://github.com/MajoorWaldi/ComfyUI-Majoor-AssetsManager", gb = { +}, fb = { class: "mjr-messages-panels" }, pb = { class: "mjr-messages-empty" }, mb = "https://github.com/MajoorWaldi/ComfyUI-Majoor-AssetsManager", hb = { __name: "MessagePopover", setup(e, { expose: t }) { let n = X(null), r = X(null), i = X(null), a = X(null), o = X(null), s = X(null), c = X(null), l = X(null), u = X(null), d = X(null), f = X(null), p = (e) => e?.$el || e || null; @@ -20580,12 +20555,12 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite } }, { default: Z(() => [ - H("div", cb, [H("div", { + H("div", sb, [H("div", { ref_key: "titleRef", ref: n, class: "mjr-messages-title" - }, K(G(I)("label.messages", "Messages")), 513), H("div", lb, [H("a", { - href: hb, + }, K(G(I)("label.messages", "Messages")), 513), H("div", cb, [H("a", { + href: mb, target: "_blank", rel: "noopener noreferrer", class: "mjr-btn mjr-messages-star-link", @@ -20593,7 +20568,7 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite }, [t[0] ||= H("span", { class: "mjr-messages-star-icon", "aria-hidden": "true" - }, "★", -1), H("span", db, K(G(I)("btn.giveStar", "Give a star")), 1)], 8, ub), q(p, { + }, "★", -1), H("span", ub, K(G(I)("btn.giveStar", "Give a star")), 1)], 8, lb), q(p, { ref_key: "markReadBtnRef", ref: r, type: "button", @@ -20604,7 +20579,7 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite default: Z(() => [hn(K(G(I)("btn.markAllRead", "Mark all read")), 1)]), _: 1 }, 8, ["title"])])]), - H("div", fb, [ + H("div", db, [ q(p, { ref_key: "messageTabBtnRef", ref: i, @@ -20673,7 +20648,7 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite _: 1 }, 512) ]), - H("div", pb, [ + H("div", fb, [ H("div", { ref_key: "messageListRef", ref: u, @@ -20681,7 +20656,7 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite id: "mjr-messages-panel", role: "tabpanel", "aria-labelledby": "mjr-messages-tab" - }, [H("div", mb, K(G(I)("msg.noMessages", "No messages for now.")), 1)], 512), + }, [H("div", pb, K(G(I)("msg.noMessages", "No messages for now.")), 1)], 512), H("div", { ref_key: "historyPanelRef", ref: d, @@ -20703,13 +20678,13 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite ]) ]), _: 1 - })], 8, sb); + })], 8, ob); }; } -}, _b = { class: "mjr-am-header-row" }, vb = { class: "mjr-am-header-left" }, yb = { class: "mjr-am-header-title" }, bb = ["data-mjr-version-channel", "title"], xb = { class: "mjr-tabs" }, Sb = { class: "mjr-am-header-tools" }, Cb = { +}, gb = { class: "mjr-am-header-row" }, _b = { class: "mjr-am-header-left" }, vb = { class: "mjr-am-header-title" }, yb = ["data-mjr-version-channel", "title"], bb = { class: "mjr-tabs" }, xb = { class: "mjr-am-header-tools" }, Sb = { class: "mjr-popover-anchor", style: { display: "none" } -}, wb = { class: "mjr-popover-anchor" }, Tb = { class: "mjr-popover-anchor" }, Eb = { class: "mjr-popover-anchor" }, Db = { class: "mjr-popover-anchor" }, Ob = { class: "mjr-popover-anchor" }, kb = "mjr-am-version-badge-label", Ab = "V", jb = { +}, Cb = { class: "mjr-popover-anchor" }, wb = { class: "mjr-popover-anchor" }, Tb = { class: "mjr-popover-anchor" }, Eb = { class: "mjr-popover-anchor" }, Db = { class: "mjr-popover-anchor" }, Ob = "mjr-am-version-badge-label", kb = "V", Ab = { __name: "HeaderSection", setup(e, { expose: t }) { let n = null; @@ -20926,7 +20901,7 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite } function Ae() { try { - nr(P(v.value), ve.value, Ab); + nr(P(v.value), ve.value, kb); } catch (e) { console.debug?.(e); } @@ -21153,12 +21128,12 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite ref_key: "headerRef", ref: u, class: "mjr-am-header" - }, [H("div", _b, [H("div", vb, [ + }, [H("div", gb, [H("div", _b, [ t[2] ||= H("i", { class: "mjr-am-header-icon pi pi-folder", "aria-hidden": "true" }, null, -1), - H("div", yb, K(G(I)("manager.title")), 1), + H("div", vb, K(G(I)("manager.title")), 1), H("a", { href: "https://ko-fi.com/majoorwaldi", target: "_blank", @@ -21169,7 +21144,7 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite style: Ln(_e.value), onMouseenter: t[0] ||= (e) => oe.value = !0, onMouseleave: t[1] ||= (e) => oe.value = !1 - }, [H("span", { class: Y(kb) }, K(re.value), 1), H("span", { + }, [H("span", { class: Y(Ob) }, K(re.value), 1), H("span", { "aria-hidden": "true", style: Ln({ position: "absolute", @@ -21183,12 +21158,12 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite display: ae.value ? "block" : "none", pointerEvents: "none" }) - }, null, 4)], 44, bb) + }, null, 4)], 44, yb) ]), H("div", { ref_key: "headerActionsRef", ref: d, class: "mjr-am-header-actions" - }, [H("div", xb, [ + }, [H("div", bb, [ q(n, { ref_key: "tabAllRef", ref: j, @@ -21272,7 +21247,7 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite "style", "title" ]) - ]), H("div", Sb, [ + ]), H("div", xb, [ le.value === "workflow" ? (B(), gn(n, { key: 0, ref_key: "saveWorkflowBtnRef", @@ -21337,7 +21312,7 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite style: { display: "none" }, onChange: Te }, null, 544), - H("div", Cb, [q(n, { + H("div", Sb, [q(n, { ref_key: "customMenuBtnRef", ref: f, type: "button", @@ -21353,7 +21328,7 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite "aria-hidden": "true" }, null, -1)]]), _: 1 - }, 8, ["title", "aria-label"]), q(ob, { + }, 8, ["title", "aria-label"]), q(ab, { ref_key: "customPopoverRef", ref: k }, null, 512)]), @@ -21379,7 +21354,7 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite "title", "aria-label" ]), - H("div", wb, [q(n, { + H("div", Cb, [q(n, { ref_key: "messageBtnRef", ref: y, type: "button", @@ -21399,7 +21374,7 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite "aria-hidden": "true" }, null, -1)]]), _: 1 - }, 8, ["title", "aria-label"]), q(gb, { + }, 8, ["title", "aria-label"]), q(hb, { ref_key: "messagePopoverRef", ref: A }, null, 512)]), @@ -21419,11 +21394,11 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite }, null, -1)]]), _: 1 }, 8, ["title", "aria-label"]) - ])], 512)])], 512), q(gv, { + ])], 512)])], 512), q(hv, { ref_key: "searchBarRef", ref: C }, { - "filter-anchor": Z(() => [H("div", Tb, [q(n, { + "filter-anchor": Z(() => [H("div", wb, [q(n, { ref_key: "filterBtnRef", ref: p, type: "button", @@ -21439,11 +21414,11 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite "aria-hidden": "true" }, null, -1)]]), _: 1 - }, 8, ["title", "aria-label"]), q(my, { + }, 8, ["title", "aria-label"]), q(py, { ref_key: "filterPopoverRef", ref: T }, null, 512)])]), - "sort-anchor": Z(() => [H("div", Eb, [q(n, { + "sort-anchor": Z(() => [H("div", Tb, [q(n, { ref_key: "sortBtnRef", ref: m, type: "button", @@ -21459,11 +21434,11 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite "aria-hidden": "true" }, null, 2)]), _: 1 - }, 8, ["title", "aria-label"]), q(yv, { + }, 8, ["title", "aria-label"]), q(vv, { ref_key: "sortPopoverRef", ref: w }, null, 512)])]), - "collections-anchor": Z(() => [H("div", Db, [q(n, { + "collections-anchor": Z(() => [H("div", Eb, [q(n, { ref_key: "collectionsBtnRef", ref: g, type: "button", @@ -21479,11 +21454,11 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite "aria-hidden": "true" }, null, -1)]]), _: 1 - }, 8, ["title", "aria-label"]), q(Yy, { + }, 8, ["title", "aria-label"]), q(Jy, { ref_key: "collectionsPopoverRef", ref: E }, null, 512)])]), - "pinned-folders-anchor": Z(() => [H("div", Ob, [q(n, { + "pinned-folders-anchor": Z(() => [H("div", Db, [q(n, { ref_key: "pinnedFoldersBtnRef", ref: _, type: "button", @@ -21499,7 +21474,7 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite "aria-hidden": "true" }, null, -1)]]), _: 1 - }, 8, ["title", "aria-label"]), q(tb, { + }, 8, ["title", "aria-label"]), q(eb, { ref_key: "pinnedFoldersPopoverRef", ref: D }, null, 512)])]), @@ -21507,20 +21482,20 @@ var Cy = { class: "mjr-menu mjr-collections-menu" }, wy = { class: "mjr-menu-ite }, 512)], 64); }; } -}, Mb = (e) => { +}, jb = (e) => { try { return String(e ?? ""); } catch { return ""; } -}, Nb = (e) => { +}, Mb = (e) => { let t = String(e || ""); return I(t === "name_asc" ? "sort.nameAZ" : t === "name_desc" ? "sort.nameZA" : t === "mtime_asc" ? "sort.oldest" : "sort.newest"); -}, Pb = (e) => { +}, Nb = (e) => { let t = String(e || "").toLowerCase(); return t === "similar" ? I("scope.similar", "Similar") : t === "custom" ? I("scope.customBrowser") : t === "workflow" ? I("scope.workflow", "Workflow") : I(t === "all" ? "tab.all" : t === "input" || t === "inputs" ? "scope.input" : "scope.output"); }; -function Fb({ label: e, value: t, onClear: n } = {}) { +function Pb({ label: e, value: t, onClear: n } = {}) { let r = document.createElement("div"); r.className = "mjr-context-pill"; let i = document.createElement("span"); @@ -21541,69 +21516,69 @@ function Fb({ label: e, value: t, onClear: n } = {}) { } return r; } -function Ib() { +function Fb() { let e = document.createElement("div"); return e.className = "mjr-am-context-pills", { wrap: e, update: ({ state: t, rawQuery: n = "", actions: r = null } = {}) => { - let i = r && typeof r == "object" ? r : {}, a = Mb(n || "").trim(), o = a.length > 0 && a !== "*", s = !!(Mb(t?.kindFilter || "").trim() || t?.workflowOnly || (Number(t?.minRating || 0) || 0) > 0 || (Number(t?.minSizeMB || 0) || 0) > 0 || (Number(t?.maxSizeMB || 0) || 0) > 0 || (Number(t?.minWidth || 0) || 0) > 0 || (Number(t?.minHeight || 0) || 0) > 0 || (Number(t?.maxWidth || 0) || 0) > 0 || (Number(t?.maxHeight || 0) || 0) > 0 || Mb(t?.workflowType || "").trim() || Mb(t?.workflowId || "").trim() || Mb(t?.workflowModelFilter || "").trim() || Mb(t?.workflowRunsOnFilter || "").trim() || Mb(t?.dateRangeFilter || "").trim() || Mb(t?.dateExactFilter || "").trim()), c = Mb(t?.sort || "mtime_desc").trim() !== "mtime_desc", l = Mb(t?.collectionId || "").trim().length > 0, u = String(t?.viewScope || t?.scope || "output").toLowerCase(), d = u === "similar", f = u === "custom", p = u !== "output", m = Mb(t?.similarSourceAssetId || "").trim(); + let i = r && typeof r == "object" ? r : {}, a = jb(n || "").trim(), o = a.length > 0 && a !== "*", s = !!(jb(t?.kindFilter || "").trim() || t?.workflowOnly || (Number(t?.minRating || 0) || 0) > 0 || (Number(t?.minSizeMB || 0) || 0) > 0 || (Number(t?.maxSizeMB || 0) || 0) > 0 || (Number(t?.minWidth || 0) || 0) > 0 || (Number(t?.minHeight || 0) || 0) > 0 || (Number(t?.maxWidth || 0) || 0) > 0 || (Number(t?.maxHeight || 0) || 0) > 0 || jb(t?.workflowType || "").trim() || jb(t?.workflowId || "").trim() || jb(t?.workflowModelFilter || "").trim() || jb(t?.workflowRunsOnFilter || "").trim() || jb(t?.dateRangeFilter || "").trim() || jb(t?.dateExactFilter || "").trim()), c = jb(t?.sort || "mtime_desc").trim() !== "mtime_desc", l = jb(t?.collectionId || "").trim().length > 0, u = String(t?.viewScope || t?.scope || "output").toLowerCase(), d = u === "similar", f = u === "custom", p = u !== "output", m = jb(t?.similarSourceAssetId || "").trim(); if (!(!(o || s || c || l || p || d) && !e.childElementCount)) { try { e.replaceChildren(); } catch (e) { console.debug?.(e); } - if (!f && l && e.appendChild(Fb({ + if (!f && l && e.appendChild(Pb({ label: I("label.collections"), - value: Mb(t?.collectionName || t?.collectionId || "").trim(), + value: jb(t?.collectionName || t?.collectionId || "").trim(), onClear: () => i?.clearCollection?.() - })), d && e.appendChild(Fb({ + })), d && e.appendChild(Pb({ label: I("search.findSimilar", "Find Similar"), value: m ? I("search.similarReference", "Reference #{id}", { id: m }) : I("scope.similar", "Similar"), onClear: () => i?.clearSimilarScope?.() - })), p && e.appendChild(Fb({ + })), p && e.appendChild(Pb({ label: I("label.scope"), - value: Pb(u || "output"), + value: Nb(u || "output"), onClear: () => d ? i?.clearSimilarScope?.() : i?.clearScope?.() - })), o && e.appendChild(Fb({ + })), o && e.appendChild(Pb({ label: I("label.query"), value: a, onClear: () => i?.clearQuery?.() - })), Mb(t?.kindFilter || "").trim() && e.appendChild(Fb({ + })), jb(t?.kindFilter || "").trim() && e.appendChild(Pb({ label: I("label.type"), - value: Mb(t?.kindFilter || "").trim(), + value: jb(t?.kindFilter || "").trim(), onClear: () => i?.clearKind?.() - })), Number(t?.minRating || 0) > 0 && e.appendChild(Fb({ + })), Number(t?.minRating || 0) > 0 && e.appendChild(Pb({ label: I("label.rating"), value: `>= ${Number(t?.minRating || 0)}`, onClear: () => i?.clearMinRating?.() - })), t?.workflowOnly && e.appendChild(Fb({ + })), t?.workflowOnly && e.appendChild(Pb({ label: I("label.workflow"), value: I("label.only"), onClear: () => i?.clearWorkflowOnly?.() - })), Mb(t?.workflowType || "").trim() && e.appendChild(Fb({ + })), jb(t?.workflowType || "").trim() && e.appendChild(Pb({ label: I("label.workflowType"), - value: Mb(t?.workflowType || "").trim(), + value: jb(t?.workflowType || "").trim(), onClear: () => i?.clearWorkflowType?.() - })), Mb(t?.workflowId || "").trim()) { - let n = Mb(t?.workflowId || "").trim(); - e.appendChild(Fb({ + })), jb(t?.workflowId || "").trim()) { + let n = jb(t?.workflowId || "").trim(); + e.appendChild(Pb({ label: I("label.sameWorkflow", "Generated with Same Workflow"), value: n.length > 18 ? `${n.slice(0, 8)}...${n.slice(-6)}` : n, onClear: () => i?.clearWorkflowId?.() })); } - if (Mb(t?.workflowModelFilter || "").trim() && e.appendChild(Fb({ + if (jb(t?.workflowModelFilter || "").trim() && e.appendChild(Pb({ label: I("label.workflowModelFamily", "Model family"), - value: Mb(t?.workflowModelFilter || "").trim(), + value: jb(t?.workflowModelFilter || "").trim(), onClear: () => i?.clearWorkflowModel?.() - })), Mb(t?.workflowRunsOnFilter || "").trim() && e.appendChild(Fb({ + })), jb(t?.workflowRunsOnFilter || "").trim() && e.appendChild(Pb({ label: I("label.workflowRunsOn", "Runs on"), - value: Mb(t?.workflowRunsOnFilter || "").trim(), + value: jb(t?.workflowRunsOnFilter || "").trim(), onClear: () => i?.clearWorkflowRunsOn?.() })), (Number(t?.minSizeMB || 0) || 0) > 0 || (Number(t?.maxSizeMB || 0) || 0) > 0) { let n = Number(t?.minSizeMB || 0) || 0, r = Number(t?.maxSizeMB || 0) || 0, a = n > 0 && r > 0 ? `${n}-${r} MB` : n > 0 ? `>= ${n} MB` : `<= ${r} MB`; - e.appendChild(Fb({ + e.appendChild(Pb({ label: I("sidebar.size"), value: a, onClear: () => i?.clearSize?.() @@ -21611,23 +21586,23 @@ function Ib() { } if ((Number(t?.minWidth || 0) || 0) > 0 || (Number(t?.minHeight || 0) || 0) > 0 || (Number(t?.maxWidth || 0) || 0) > 0 || (Number(t?.maxHeight || 0) || 0) > 0) { let n = String(t?.resolutionCompare || "gte") === "lte", r = Number(n ? t?.maxWidth : t?.minWidth || 0) || 0, a = Number(n ? t?.maxHeight : t?.minHeight || 0) || 0; - e.appendChild(Fb({ + e.appendChild(Pb({ label: I("label.resolution"), value: `${n ? "<=" : ">="} ${r || 0}x${a || 0} px`, onClear: () => i?.clearResolution?.() })); } - Mb(t?.dateRangeFilter || "").trim() && e.appendChild(Fb({ + jb(t?.dateRangeFilter || "").trim() && e.appendChild(Pb({ label: I("sidebar.date"), - value: Mb(t?.dateRangeFilter || "").trim(), + value: jb(t?.dateRangeFilter || "").trim(), onClear: () => i?.clearDateRange?.() - })), Mb(t?.dateExactFilter || "").trim() && e.appendChild(Fb({ + })), jb(t?.dateExactFilter || "").trim() && e.appendChild(Pb({ label: I("label.day"), - value: Mb(t?.dateExactFilter || "").trim(), + value: jb(t?.dateExactFilter || "").trim(), onClear: () => i?.clearDateExact?.() - })), c && e.appendChild(Fb({ + })), c && e.appendChild(Pb({ label: I("label.sort"), - value: Nb(t?.sort), + value: Mb(t?.sort), onClear: () => i?.clearSort?.() })); } @@ -21636,17 +21611,17 @@ function Ib() { } //#endregion //#region ui/vue/components/panel/summaryBarState.ts -var Lb = (e, t = "") => I(e, t, void 0), Rb = (e) => { +var Ib = (e, t = "") => I(e, t, void 0), Lb = (e) => { try { return String(e ?? ""); } catch { return ""; } -}, zb = (e) => { +}, Rb = (e) => { let t = String(e || "").toLowerCase(); - return t === "similar" ? Lb("scope.similar", "Similar") : t === "workflow" ? Lb("scope.workflow", "Workflow") : Lb(t === "input" || t === "inputs" ? "scope.input" : t === "custom" ? "scope.customBrowser" : t === "all" ? "tab.all" : "scope.output"); + return t === "similar" ? Ib("scope.similar", "Similar") : t === "workflow" ? Ib("scope.workflow", "Workflow") : Ib(t === "input" || t === "inputs" ? "scope.input" : t === "custom" ? "scope.customBrowser" : t === "all" ? "tab.all" : "scope.output"); }; -function Bb(e) { +function zb(e) { try { let t = e?._mjrGetRenderedCards; if (typeof t == "function") { @@ -21658,7 +21633,7 @@ function Bb(e) { } return []; } -function Vb(e) { +function Bb(e) { try { let t = String(e?.dataset?.mjrSelectedAssetIds || "").trim(); if (t) { @@ -21675,8 +21650,8 @@ function Vb(e) { } return 0; } -function Hb({ state: e, gridContainer: t, context: n = null } = {}) { - let r = Bb(t), i = (() => { +function Vb({ state: e, gridContainer: t, context: n = null } = {}) { + let r = zb(t), i = (() => { try { let e = 0; for (let t of r) String(t?._mjrAsset?.kind || "").toLowerCase() === "folder" && (e += 1); @@ -21697,12 +21672,12 @@ function Hb({ state: e, gridContainer: t, context: n = null } = {}) { } catch (e) { console.debug?.(e); } - return Vb(t); - })(), s = Number(t?.dataset?.mjrTotal || 0) || Math.max(0, Number(e?.lastGridTotal ?? 0) || 0), c = Number(t?.dataset?.mjrShown || 0) || Math.max(0, Number(e?.lastGridCount ?? 0) || 0) || a, l = String(e?.viewScope || e?.scope || t?.dataset?.mjrScope || "output").toLowerCase(), u = s && s >= c ? `${c}/${s}` : `${c}`, d = [`${c > 0 && i.total > 0 && i.folders === i.total ? Lb("summary.folders") : Lb("summary.assets")}: ${u}`]; - o > 0 && d.push(`${Lb("summary.selected")}: ${o}`), d.push(zb(l)); + return Bb(t); + })(), s = Number(t?.dataset?.mjrTotal || 0) || Math.max(0, Number(e?.lastGridTotal ?? 0) || 0), c = Number(t?.dataset?.mjrShown || 0) || Math.max(0, Number(e?.lastGridCount ?? 0) || 0) || a, l = String(e?.viewScope || e?.scope || t?.dataset?.mjrScope || "output").toLowerCase(), u = s && s >= c ? `${c}/${s}` : `${c}`, d = [`${c > 0 && i.total > 0 && i.folders === i.total ? Ib("summary.folders") : Ib("summary.assets")}: ${u}`]; + o > 0 && d.push(`${Ib("summary.selected")}: ${o}`), d.push(Rb(l)); try { let e = Number(t?.dataset?.mjrHiddenPngSiblings || 0) || 0; - String(t?.dataset?.mjrHidePngSiblingsEnabled || "") === "1" && e > 0 && d.push(`${Lb("summary.hidden")}: ${e}`); + String(t?.dataset?.mjrHidePngSiblingsEnabled || "") === "1" && e > 0 && d.push(`${Ib("summary.hidden")}: ${e}`); } catch (e) { console.debug?.(e); } @@ -21712,23 +21687,23 @@ function Hb({ state: e, gridContainer: t, context: n = null } = {}) { total: s, activeScope: l, summaryText: d.filter(Boolean).join(" | "), - duplicateText: h ? `${Lb("summary.duplicates")}: ${p} | ${Lb("summary.similar")}: ${m}` : "", + duplicateText: h ? `${Ib("summary.duplicates")}: ${p} | ${Ib("summary.similar")}: ${m}` : "", showDuplicates: h, - rawQuery: Rb(n?.rawQuery || "").trim() + rawQuery: Lb(n?.rawQuery || "").trim() }; } //#endregion //#region ui/vue/components/panel/SummaryBarSection.vue -var Ub = { +var Hb = { key: 2, class: "mjr-folder-breadcrumb-separator" -}, Wb = { +}, Ub = { key: 0, class: "mjr-folder-breadcrumb-separator" -}, Gb = { class: "mjr-am-summary-left" }, Kb = { class: "mjr-am-summary-text" }, qb = { class: "mjr-am-summary-right" }, Jb = ["aria-label"], Yb = { +}, Wb = { class: "mjr-am-summary-left" }, Gb = { class: "mjr-am-summary-text" }, Kb = { class: "mjr-am-summary-right" }, qb = ["aria-label"], Jb = { __name: "SummaryBarSection", setup(e, { expose: t }) { - let n = eg(), r = X(null), i = X(null), a = X(null), o = X(""), s = X(""), c = X(!1), l = X(!1), u = X(null), d = X(null), f = X([]), p = Ib(), m = W(() => String(n.kindFilter || "").trim().toLowerCase()), h = W(() => { + let n = eg(), r = X(null), i = X(null), a = X(null), o = X(""), s = X(""), c = X(!1), l = X(!1), u = X(null), d = X(null), f = X([]), p = Fb(), m = W(() => String(n.kindFilter || "").trim().toLowerCase()), h = W(() => { let e = I("label.type", "Type"); return [ { @@ -21775,7 +21750,7 @@ var Ub = { t && (n.kindFilter = v(t) ? "" : t, y()); } function x({ state: e, gridContainer: t, context: r = null, actions: i = null } = {}) { - let a = Hb({ + let a = Vb({ state: e, gridContainer: t, context: r @@ -21856,8 +21831,8 @@ var Ub = { default: Z(() => [hn(K(d.value.label), 1)]), _: 1 }, 8, ["disabled"])) : U("", !0), - u.value || d.value ? (B(), J("span", Ub, " | ")) : U("", !0), - (B(!0), J(V, null, yn(f.value, (e, t) => (B(), J(V, { key: `${e.target}:${t}` }, [t > 0 ? (B(), J("span", Wb, "/")) : U("", !0), q(n, { + u.value || d.value ? (B(), J("span", Hb, " | ")) : U("", !0), + (B(!0), J(V, null, yn(f.value, (e, t) => (B(), J(V, { key: `${e.target}:${t}` }, [t > 0 ? (B(), J("span", Ub, "/")) : U("", !0), q(n, { type: "button", class: Y(["mjr-btn-link mjr-folder-breadcrumb-segment", { "is-current": e.current }]), severity: "secondary", @@ -21877,7 +21852,7 @@ var Ub = { ref: r, class: "mjr-am-summary", "aria-live": "polite" - }, [H("div", Gb, [H("div", Kb, K(o.value), 1)]), H("div", qb, [ + }, [H("div", Wb, [H("div", Gb, K(o.value), 1)]), H("div", Kb, [ H("div", { class: "mjr-media-shortcuts", "aria-label": G(I)("label.type", "Type"), @@ -21905,7 +21880,7 @@ var Ub = { "aria-pressed", "class", "onClick" - ]))), 128))], 8, Jb), + ]))), 128))], 8, qb), c.value ? (B(), gn(n, { key: 0, type: "button", @@ -21928,7 +21903,7 @@ var Ub = { }; //#endregion //#region ui/vue/composables/useGridContextMenu.ts -function Xb(e, t) { +function Yb(e, t) { let n = null; function r(e) { if (!(!e || e._mjrGridContextMenuBound)) try { @@ -21952,7 +21927,7 @@ function Xb(e, t) { } //#endregion //#region ui/vue/composables/useGridKeyboard.ts -function Zb(e) { +function Xb(e) { if (!e) return () => {}; let t = e; try { @@ -21991,7 +21966,7 @@ function Zb(e) { return console.debug?.("[useGridKeyboard] bind failed", e), () => {}; } } -function Qb(e) { +function Zb(e) { let t = null, n = () => { try { t?.(); @@ -22001,13 +21976,13 @@ function Qb(e) { t = null; }; vn(e, (e, r) => { - r && n(), e && (t = Zb(e)); + r && n(), e && (t = Xb(e)); }, { immediate: !0 }), Hn(n); } //#endregion //#region ui/vue/components/grid/assetsGridHostState.ts -function $b() {} -function ex() { +function Qb() {} +function $b() { return new Promise((e) => { try { if (typeof requestAnimationFrame == "function") { @@ -22020,7 +21995,7 @@ function ex() { e(); }); } -function tx(e, ...t) { +function ex(e, ...t) { try { return typeof e == "function" ? e(...t) : void 0; } catch (e) { @@ -22028,21 +22003,21 @@ function tx(e, ...t) { return; } } -function nx(e = {}) { +function tx(e = {}) { let t = Array.isArray(e.selectedIds) ? e.selectedIds.map(String).filter(Boolean) : []; return { ids: t, activeId: String(e.activeId || t[0] || "").trim() }; } -function rx(e, t = {}, n = null) { +function nx(e, t = {}, n = null) { return { count: Number(t.count ?? t.shown ?? e?.dataset?.mjrShown ?? n?.lastGridCount ?? 0) || 0, total: Number(t.total ?? e?.dataset?.mjrTotal ?? n?.lastGridTotal ?? 0) || 0 }; } -function ix(e, t = tg()) { - if (!e || !t) return $b; +function rx(e, t = tg()) { + if (!e || !t) return Qb; let n = 0, r = () => { if (!n) try { n = requestAnimationFrame(() => { @@ -22068,8 +22043,8 @@ function ix(e, t = tg()) { } }; } -function ax(e, { panelStore: t = tg(), onContextChanged: n = null, markUserInteraction: r = null } = {}) { - if (!e) return $b; +function ix(e, { panelStore: t = tg(), onContextChanged: n = null, markUserInteraction: r = null } = {}) { + if (!e) return Qb; let i = 0, a = () => { if (i) try { cancelAnimationFrame(i); @@ -22078,24 +22053,24 @@ function ax(e, { panelStore: t = tg(), onContextChanged: n = null, markUserInter } try { i = requestAnimationFrame(() => { - i = 0, tx(n); + i = 0, ex(n); }); } catch (e) { - console.debug?.(e), i = 0, tx(n); + console.debug?.(e), i = 0, ex(n); } }, o = (r) => { let i = r?.detail || {}; if (t) { - let { count: n, total: r } = rx(e, i, t); + let { count: n, total: r } = nx(e, i, t); t.lastGridCount = n, t.lastGridTotal = r; } - tx(n); + ex(n); }, s = (e) => { - if (tx(r), t) { - let { ids: n, activeId: r } = nx(e?.detail || {}); + if (ex(r), t) { + let { ids: n, activeId: r } = tx(e?.detail || {}); t.selectedAssetIds = n, t.activeAssetId = r; } - tx(n); + ex(n); }; e.addEventListener("mjr:grid-stats", o), e.addEventListener("mjr:selection-changed", s); try { @@ -22143,14 +22118,14 @@ function ax(e, { panelStore: t = tg(), onContextChanged: n = null, markUserInter } }; } -async function ox({ initialLoadPromise: e, gridWrapper: t, gridContainer: n, panelStore: r = tg(), onRestoreSidebar: i = null } = {}) { +async function ax({ initialLoadPromise: e, gridWrapper: t, gridContainer: n, panelStore: r = tg(), onRestoreSidebar: i = null } = {}) { if (!t || !n || !r) return; try { await e; } catch (e) { console.debug?.(e); } - await ex(); + await $b(); let a = Number(r.scrollTop || 0) || 0; if (a > 0) try { t.scrollTop = a; @@ -22178,11 +22153,11 @@ async function ox({ initialLoadPromise: e, gridWrapper: t, gridContainer: n, pan e(), setTimeout(e, 160); } } - r.sidebarOpen && s && tx(i); + r.sidebarOpen && s && ex(i); } //#endregion //#region ui/vue/components/grid/AssetsGrid.vue -var sx = { +var ox = { __name: "AssetsGrid", setup(e, { expose: t }) { let n = X(null), r = X(null), i = X(null), a = eg(), o = W(() => i.value?.gridContainer ?? null), s = null, c = null, l = null, u = null; @@ -22279,7 +22254,7 @@ var sx = { } }; } - kn("mjr-grid-container-ref", o), Xb(o, () => a), Qb(o); + kn("mjr-grid-container-ref", o), Yb(o, () => a), Zb(o); function m() { return o.value || null; } @@ -22291,14 +22266,14 @@ var sx = { } catch (e) { console.debug?.(e); } - c = ax(t, { + c = ix(t, { panelStore: a, ...e }); } } return En(() => { - s = ix(r.value, a), r.value && Number(a.scrollTop || 0) > 0 && (r.value.scrollTop = Number(a.scrollTop || 0)), p(); + s = rx(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); } catch (e) { @@ -22375,7 +22350,7 @@ var sx = { }; }, restoreGridUiState(e, t = {}) { - return ox({ + return ax({ initialLoadPromise: e, gridWrapper: r.value, gridContainer: m(), @@ -22452,7 +22427,7 @@ var sx = { "scroll-element": r.value }, null, 8, ["scroll-element"])], 512)], 512)); } -}, cx = { +}, sx = { class: "mjr-sidebar-header", style: { display: "flex", @@ -22463,7 +22438,7 @@ var sx = { "flex-shrink": "0", background: "var(--mjr-surface-2,#2e2e2e)" } -}, lx = ["title"], ux = { +}, cx = ["title"], lx = { __name: "SidebarHeaderSection", props: { asset: { type: Object, @@ -22474,7 +22449,7 @@ var sx = { let n = t; return (t, r) => { let i = An("MButton"); - return B(), J("div", cx, [H("div", { + return B(), J("div", sx, [H("div", { class: "mjr-sidebar-filename", title: e.asset.filename, style: { @@ -22487,7 +22462,7 @@ var sx = { "min-width": "0", "padding-right": "8px" } - }, K(e.asset.filename), 9, lx), q(i, { + }, K(e.asset.filename), 9, cx), q(i, { type: "button", class: "mjr-sidebar-close", severity: "secondary", @@ -22519,14 +22494,14 @@ var sx = { }; //#endregion //#region ui/components/sidebar/utils/format.ts -function dx(e) { +function ux(e) { if (!e) return "Unknown"; let t = e / 1024; if (t < 1024) return `${t.toFixed(1)} KB`; let n = t / 1024; return n < 1024 ? `${n.toFixed(1)} MB` : `${(n / 1024).toFixed(2)} GB`; } -function fx(e) { +function dx(e) { if (!e) return ""; let t = /* @__PURE__ */ new Date(Number(e) * 1e3); if (Number.isNaN(t.getTime())) return ""; @@ -22535,13 +22510,13 @@ function fx(e) { } //#endregion //#region ui/vue/components/panel/sidebar/SidebarPreviewSection.vue -var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["src"], _x = { +var fx = { class: "mjr-sidebar-preview" }, px = ["src"], mx = ["src"], hx = ["src"], gx = { key: 3, style: { color: "rgba(255, 255, 255, 0.4)", "font-size": "14px" } -}, vx = { +}, _x = { class: "mjr-sidebar-preview-meta", style: { "margin-top": "10px", @@ -22555,7 +22530,7 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr "padding-bottom": "12px", "border-bottom": "1px solid var(--mjr-border, rgba(255, 255, 255, 0.12))" } -}, yx = { +}, vx = { __name: "SidebarPreviewSection", props: { asset: { @@ -22574,9 +22549,9 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr }), o = W(() => { let e = []; a.value && e.push(a.value), t.asset?.kind && e.push(String(t.asset.kind).toLowerCase()); - let n = dx(t.asset?.size); + let n = ux(t.asset?.size); n && e.push(n); - let r = fx(t.asset?.mtime); + let r = dx(t.asset?.mtime); return r && e.push(r), e.join(" | "); }); function s() { @@ -22620,7 +22595,7 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr l(); }), Cn(() => { s(); - }), (t, r) => (B(), J("div", px, [e.showPreviewThumb ? (B(), J("div", { + }), (t, r) => (B(), J("div", fx, [e.showPreviewThumb ? (B(), J("div", { key: 0, ref_key: "previewContainerRef", ref: n, @@ -22643,7 +22618,7 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr "max-height": "100%", "object-fit": "contain" } - }, null, 8, mx)) : e.asset.kind === "video" ? (B(), J("video", { + }, null, 8, px)) : e.asset.kind === "video" ? (B(), J("video", { key: 1, src: i.value, muted: !0, @@ -22656,7 +22631,7 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr "max-height": "100%", "object-fit": "contain" } - }, null, 8, hx)) : e.asset.kind === "audio" ? (B(), J("audio", { + }, null, 8, mx)) : e.asset.kind === "audio" ? (B(), J("audio", { key: 2, src: i.value, controls: "", @@ -22665,9 +22640,9 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr width: "92%", "max-width": "560px" } - }, null, 8, gx)) : (B(), J("div", _x, K(String(e.asset.kind || "PREVIEW").toUpperCase()), 1))], 512)) : U("", !0), H("div", vx, K(o.value), 1)])); + }, null, 8, hx)) : (B(), J("div", gx, K(String(e.asset.kind || "PREVIEW").toUpperCase()), 1))], 512)) : U("", !0), H("div", _x, K(o.value), 1)])); } -}, bx = { +}, yx = { class: "mjr-sidebar-section", style: { background: "rgba(255, 255, 255, 0.03)", @@ -22675,22 +22650,22 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr "border-radius": "8px", padding: "10px" } -}, xx = { style: { +}, bx = { style: { "font-size": "12px", "font-weight": "700", color: "#26a69a", "margin-bottom": "8px", "text-transform": "uppercase", "letter-spacing": "0.4px" -} }, Sx = { style: { +} }, xx = { style: { display: "flex", "flex-direction": "column", gap: "6px" -} }, Cx = { style: { +} }, Sx = { style: { "font-size": "12px", opacity: "0.68", "min-width": "92px" -} }, wx = ["title"], Tx = { +} }, Cx = ["title"], wx = { __name: "SidebarFolderSection", props: { asset: { type: Object, @@ -22746,7 +22721,7 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr valueStyle: "color:#FFB74D;font-weight:600;" }), f; }); - return (e, t) => (B(), J("div", bx, [H("div", xx, K(G(I)("sidebar.folder.details", "Folder Details")), 1), H("div", Sx, [(B(!0), J(V, null, yn(r.value, (e) => (B(), J("div", { + return (e, t) => (B(), J("div", yx, [H("div", bx, K(G(I)("sidebar.folder.details", "Folder Details")), 1), H("div", xx, [(B(!0), J(V, null, yn(r.value, (e) => (B(), J("div", { key: e.label, style: { display: "flex", @@ -22754,18 +22729,18 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr "align-items": "flex-start", "justify-content": "space-between" } - }, [H("div", Cx, K(e.label), 1), H("div", { + }, [H("div", Sx, K(e.label), 1), H("div", { style: Ln(e.valueStyle || "font-size: 12px; text-align: right; word-break: break-word"), title: String(e.value || "") - }, K(e.value), 13, wx)]))), 128))])])); + }, K(e.value), 13, Cx)]))), 128))])])); } -}, Ex = [ +}, Tx = [ "aria-busy", "aria-disabled", "aria-label", "aria-valuenow", "tabindex" -], Dx = { +], Ex = { __name: "RatingEditor", props: { asset: { @@ -22779,6 +22754,10 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr disabled: { type: Boolean, default: !1 + }, + size: { + type: [Number, String], + default: 16 } }, emits: ["update:modelValue", "rating-change"], @@ -22786,16 +22765,19 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr function n(e) { return Math.max(0, Math.min(5, Number(e) || 0)); } - let r = e, i = t, a = n(r.asset?.rating ?? r.modelValue), o = X(a), s = X(0), c = X(!1), l = a, u = a, d = null, f = W(() => s.value > 0 ? s.value : o.value), m = (e) => e <= f.value ? "#FFD45A" : "#555", h = (e) => e <= f.value ? "scale(1.1)" : "scale(1)", g = (e) => Math.min(100 * 2 ** Math.max(0, e - 1), 2e3), _ = (e) => new Promise((t) => setTimeout(t, e)); - function v(e) { + let r = e, i = t, a = n(r.asset?.rating ?? r.modelValue), o = X(a), s = X(0), c = X(!1), l = a, u = a, d = null, f = W(() => s.value > 0 ? s.value : o.value), m = (e) => e <= f.value ? "#FFD45A" : "#555", h = (e) => e <= f.value ? "scale(1.1)" : "scale(1)", g = W(() => { + let e = r.size; + return typeof e == "number" ? `${Math.max(8, e)}px` : String(e || "").trim() || "16px"; + }), _ = (e) => Math.min(100 * 2 ** Math.max(0, e - 1), 2e3), v = (e) => new Promise((t) => setTimeout(t, e)); + function y(e) { if (c.value) return; let t = n(e); l = t, u = t, t !== o.value && (o.value = t); } - function y(e = null) { + function b(e = null) { o.value = l, u = l, i("update:modelValue", l), e && O(e, "error"); } - async function b() { + async function x() { if (c.value) return; c.value = !0; let e = Date.now(); @@ -22803,10 +22785,10 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr let t = 0; for (; t < 10;) { if (Date.now() - e > 3e4) { - y(I("toast.ratingUpdateFailed", "Rating update failed")); + b(I("toast.ratingUpdateFailed", "Rating update failed")); break; } - t > 0 && await _(g(t)), t += 1; + t > 0 && await v(_(t)), t += 1; let a = n(u), s = typeof AbortController < "u" ? new AbortController() : null; d = s; let c = null; @@ -22817,7 +22799,7 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr } if (!c?.ok) { if (c?.code === "ABORTED" && u !== a) continue; - y(c?.error || I("toast.ratingUpdateFailed", "Rating update failed")); + b(c?.error || I("toast.ratingUpdateFailed", "Rating update failed")); break; } try { @@ -22843,12 +22825,12 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr break; } } - t >= 10 && y(I("toast.ratingUpdateFailed", "Rating update failed")); + t >= 10 && b(I("toast.ratingUpdateFailed", "Rating update failed")); } finally { d = null, c.value = !1; } } - function x(e) { + function S(e) { if (r.disabled) return; let t = n(e); u = t, o.value = t, s.value = 0, i("update:modelValue", t); @@ -22857,18 +22839,18 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr } catch (e) { console.debug?.(e); } - b(); - } - function S(e) { - x(e); + x(); } function C(e) { + S(e); + } + function w(e) { r.disabled || (s.value = e); } - function w() { + function T() { s.value = 0; } - function T(e) { + function E(e) { if (r.disabled) return; let t = null; switch (e.key) { @@ -22888,7 +22870,7 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr break; default: e.key >= "0" && e.key <= "5" && (e.preventDefault(), t = parseInt(e.key, 10)); } - t !== null && t !== o.value && x(t); + t !== null && t !== o.value && S(t); } return Cn(() => { try { @@ -22897,9 +22879,9 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr console.debug?.(e); } }), vn(() => r.modelValue, (e) => { - v(e); + y(e); }), vn(() => r.asset?.rating, (e) => { - v(e); + y(e); }), (t, n) => { let r = An("MButton"); return B(), J("div", { @@ -22918,7 +22900,7 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr "aria-valuemax": 5, "aria-valuenow": o.value, tabindex: e.disabled ? -1 : 0, - onKeydown: T + onKeydown: E }, [(B(), J(V, null, yn(5, (t) => q(r, { key: t, type: "button", @@ -22929,7 +22911,7 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr style: Ln({ color: m(t), transform: h(t), - fontSize: "16px", + fontSize: g.value, background: "none", border: "none", cursor: e.disabled ? "default" : "pointer", @@ -22939,9 +22921,9 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr "aria-label": G(I)("rating.setN", { n: t }), "aria-pressed": t <= o.value, disabled: e.disabled, - onClick: (e) => S(t), - onMouseenter: (e) => C(t), - onMouseleave: w + onClick: (e) => C(t), + onMouseenter: (e) => w(t), + onMouseleave: T }, { default: Z(() => [...n[0] ||= [hn(" ★ ", -1)]]), _: 1 @@ -22952,10 +22934,10 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr "disabled", "onClick", "onMouseenter" - ])), 64))], 44, Ex); + ])), 64))], 44, Tx); }; } -}, Ox = { +}, Dx = { class: "mjr-sidebar-content", style: { flex: "1", @@ -22965,29 +22947,29 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr "flex-direction": "column", gap: "16px" } -}, kx = { +}, Ox = { class: "mjr-sidebar-rating-tags", style: { display: "flex", "flex-direction": "column", gap: "10px" } -}, Ax = { style: { +}, kx = { style: { display: "flex", "align-items": "center", gap: "8px" -} }, jx = { style: { +} }, Ax = { style: { "font-size": "0.8em", opacity: "0.6", "min-width": "44px" -} }, Mx = { style: { +} }, jx = { style: { display: "flex", "flex-direction": "column", gap: "4px" -} }, Nx = { style: { +} }, Mx = { style: { "font-size": "0.8em", opacity: "0.6" -} }, Px = { +} }, Nx = { __name: "AssetSidebarContent", props: { asset: { @@ -23023,21 +23005,22 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr } else r("close"); } - return (t, n) => (B(), J(V, null, [q(ux, { + return (t, n) => (B(), J(V, null, [q(lx, { asset: e.asset, onClose: l - }, null, 8, ["asset"]), H("div", Ox, [i.value ? (B(), gn(Tx, { + }, null, 8, ["asset"]), H("div", Dx, [i.value ? (B(), gn(wx, { key: 0, asset: e.asset }, null, 8, ["asset"])) : (B(), J(V, { key: 1 }, [a.value ? U("", !0) : (B(), J(V, { key: 0 }, [ - q(yx, { + q(vx, { asset: e.asset, "show-preview-thumb": c.value }, null, 8, ["asset", "show-preview-thumb"]), - H("div", kx, [H("div", Ax, [H("span", jx, K(G(I)("sidebar.rating", "Rating")), 1), q(Dx, { + H("div", Ox, [H("div", kx, [H("span", Ax, K(G(I)("sidebar.rating", "Rating")), 1), q(Ex, { asset: e.asset, - "model-value": o.value - }, null, 8, ["asset", "model-value"])]), H("div", Mx, [H("span", Nx, K(G(I)("sidebar.tags", "Tags")), 1), q(ir, { + "model-value": o.value, + size: 60 + }, null, 8, ["asset", "model-value"])]), H("div", jx, [H("span", Mx, K(G(I)("sidebar.tags", "Tags")), 1), q(ir, { asset: e.asset, "model-value": s.value }, null, 8, ["asset", "model-value"])])]), @@ -23045,7 +23028,7 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr q(Qt, { asset: e.asset }, null, 8, ["asset"]) ], 64)), q($t, { asset: e.asset }, null, 8, ["asset"])], 64))])], 64)); } -}, Fx = { +}, Px = { key: 1, class: "mjr-sidebar-placeholder", style: { @@ -23058,7 +23041,7 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr "font-size": "0.85em", "text-align": "center" } -}, Ix = { +}, Fx = { __name: "SidebarSection", setup(e, { expose: t }) { let n = X(null), { activeAsset: r, onUpdateCallback: i } = jh(); @@ -23134,7 +23117,7 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr transition: "width 140ms ease,max-width 140ms ease,flex-basis 140ms ease,border-color 140ms ease", contain: "layout paint style" } - }, [G(r) ? (B(), gn(Px, { + }, [G(r) ? (B(), gn(Nx, { key: 0, asset: G(r), "on-update": G(i), @@ -23143,21 +23126,21 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr "asset", "on-update", "sidebar" - ])) : (B(), J("div", Fx, K(G(I)("sidebar.placeholderSelectAsset", "Select an asset to view details")), 1))], 512)); + ])) : (B(), J("div", Px, K(G(I)("sidebar.placeholderSelectAsset", "Select an asset to view details")), 1))], 512)); } -}, Lx = ["aria-label"], Rx = { class: "mjr-context-menu-title" }, zx = { class: "mjr-context-menu-item-left" }, Bx = { +}, Ix = ["aria-label"], Lx = { class: "mjr-context-menu-title" }, Rx = { class: "mjr-context-menu-item-left" }, zx = { key: 0, class: "mjr-context-menu-note" -}, Vx = { +}, Bx = { key: 1, class: "mjr-context-menu-note is-error" -}, Hx = { +}, Vx = { key: 2, class: "mjr-context-menu-note" -}, Ux = { class: "mjr-context-menu-item-left" }, Wx = { +}, Hx = { class: "mjr-context-menu-item-left" }, Ux = { key: 0, class: "mjr-context-menu-hint" -}, Gx = { +}, Wx = { __name: "AddToCollectionMenu", setup(e) { let t = X(null), n = X(!1), r = X([]), i = X(""), a = 0, o = null, s = W(() => ({ @@ -23279,7 +23262,7 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr role: "menu", "aria-label": l.value }, [ - H("div", Rx, K(l.value), 1), + H("div", Lx, K(l.value), 1), q(o, { type: "button", class: "mjr-context-menu-item", @@ -23288,11 +23271,11 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr role: "menuitem", onClick: h }, { - default: Z(() => [H("span", zx, [a[0] ||= H("i", { class: "pi pi-plus" }, null, -1), H("span", null, K(G(I)("dialog.createCollection", "Create collection")) + "...", 1)])]), + default: Z(() => [H("span", Rx, [a[0] ||= H("i", { class: "pi pi-plus" }, null, -1), H("span", null, K(G(I)("dialog.createCollection", "Create collection")) + "...", 1)])]), _: 1 }), a[2] ||= H("div", { class: "mjr-context-menu-separator" }, null, -1), - n.value ? (B(), J("div", Bx, K(G(I)("msg.loadingCollections", "Loading collections...")), 1)) : i.value ? (B(), J("div", Vx, K(i.value), 1)) : r.value.length ? U("", !0) : (B(), J("div", Hx, K(G(I)("msg.noCollections", "No collections yet.")), 1)), + n.value ? (B(), J("div", zx, K(G(I)("msg.loadingCollections", "Loading collections...")), 1)) : i.value ? (B(), J("div", Bx, K(i.value), 1)) : r.value.length ? U("", !0) : (B(), J("div", Vx, K(G(I)("msg.noCollections", "No collections yet.")), 1)), (B(!0), J(V, null, yn(r.value, (e) => (B(), gn(o, { key: String(e?.id || ""), type: "button", @@ -23302,28 +23285,28 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr role: "menuitem", onClick: (t) => m(String(e?.id || ""), String(e?.name || e?.id || "")) }, { - default: Z(() => [H("span", Ux, [a[1] ||= H("i", { class: "pi pi-bookmark" }, null, -1), H("span", null, K(String(e?.name || e?.id || "")), 1)]), Number(e?.count || 0) > 0 ? (B(), J("span", Wx, K(Number(e?.count || 0)), 1)) : U("", !0)]), + default: Z(() => [H("span", Hx, [a[1] ||= H("i", { class: "pi pi-bookmark" }, null, -1), H("span", null, K(String(e?.name || e?.id || "")), 1)]), Number(e?.count || 0) > 0 ? (B(), J("span", Ux, K(Number(e?.count || 0)), 1)) : U("", !0)]), _: 2 }, 1032, ["onClick"]))), 128)) - ], 12, Lx)) : U("", !0)]); + ], 12, Ix)) : U("", !0)]); }; } -}, Kx = { +}, Gx = { key: 0, class: "mjr-context-menu-separator" -}, qx = { class: "mjr-context-menu-item-left" }, Jx = { class: "mjr-context-menu-item-right" }, Yx = { +}, Kx = { class: "mjr-context-menu-item-left" }, qx = { class: "mjr-context-menu-item-right" }, Jx = { key: 0, class: "mjr-context-menu-hint" -}, Xx = { +}, Yx = { key: 1, class: "mjr-context-menu-submenu-arrow" -}, Zx = { +}, Xx = { key: 0, class: "mjr-context-menu-separator" -}, Qx = { class: "mjr-context-menu-item-left" }, $x = { +}, Zx = { class: "mjr-context-menu-item-left" }, Qx = { key: 0, class: "mjr-context-menu-hint" -}, eS = { +}, $x = { __name: "GridContextMenu", setup(e) { let t = X(null), n = X(null), r = X(null), i = null, a = null, o = W(() => l(Q.main, 10031)), s = W(() => l(Q.submenu, 10032)), c = W(() => l(Q.tags, 10033)); @@ -23468,7 +23451,7 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr style: Ln(o.value), role: "menu", "aria-label": "Grid context menu" - }, [(B(!0), J(V, null, yn(G(Q).main.items, (e) => (B(), J(V, { key: e.id }, [e.type === "separator" ? (B(), J("div", Kx)) : (B(), gn(a, { + }, [(B(!0), J(V, null, yn(G(Q).main.items, (e) => (B(), J(V, { key: e.id }, [e.type === "separator" ? (B(), J("div", Gx)) : (B(), gn(a, { key: 1, type: "button", class: Y(["mjr-context-menu-item", { @@ -23488,10 +23471,10 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr onMouseenter: (t) => _(e, t), onMouseleave: (t) => v(e) }, { - default: Z(() => [H("span", qx, [e.iconClass ? (B(), J("i", { + default: Z(() => [H("span", Kx, [e.iconClass ? (B(), J("i", { key: 0, class: Y(e.iconClass) - }, null, 2)) : U("", !0), H("span", null, K(e.label), 1)]), H("span", Jx, [e.rightHint ? (B(), J("span", Yx, K(e.rightHint), 1)) : U("", !0), Array.isArray(e.submenu) && e.submenu.length ? (B(), J("span", Xx, " > ")) : U("", !0)])]), + }, null, 2)) : U("", !0), H("span", null, K(e.label), 1)]), H("span", qx, [e.rightHint ? (B(), J("span", Jx, K(e.rightHint), 1)) : U("", !0), Array.isArray(e.submenu) && e.submenu.length ? (B(), J("span", Yx, " > ")) : U("", !0)])]), _: 2 }, 1032, [ "class", @@ -23511,7 +23494,7 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr "aria-label": "Grid context submenu", onMouseenter: y, onMouseleave: b - }, [(B(!0), J(V, null, yn(G(Q).submenu.items, (e) => (B(), J(V, { key: e.id }, [e.type === "separator" ? (B(), J("div", Zx)) : (B(), gn(a, { + }, [(B(!0), J(V, null, yn(G(Q).submenu.items, (e) => (B(), J(V, { key: e.id }, [e.type === "separator" ? (B(), J("div", Xx)) : (B(), gn(a, { key: 1, type: "button", class: Y(["mjr-context-menu-item", { @@ -23528,10 +23511,10 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr tabindex: e.disabled ? -1 : 0, onClick: (t) => g(e, t, "submenu") }, { - default: Z(() => [H("span", Qx, [e.iconClass ? (B(), J("i", { + default: Z(() => [H("span", Zx, [e.iconClass ? (B(), J("i", { key: 0, class: Y(e.iconClass) - }, null, 2)) : U("", !0), H("span", null, K(e.label), 1)]), e.rightHint ? (B(), J("span", $x, K(e.rightHint), 1)) : U("", !0)]), + }, null, 2)) : U("", !0), H("span", null, K(e.label), 1)]), e.rightHint ? (B(), J("span", Qx, K(e.rightHint), 1)) : U("", !0)]), _: 2 }, 1032, [ "class", @@ -23554,7 +23537,7 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr ]); }; } -}, 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: "mjr-workflow-picker-footer" }, cS = { +}, eS = { class: "mjr-workflow-picker-dialog mjr-workflow-info-dialog" }, tS = { class: "mjr-workflow-picker-header" }, nS = { class: "mjr-workflow-picker-title" }, rS = { class: "mjr-workflow-picker-subtitle" }, iS = { class: "mjr-workflow-info-form" }, aS = { class: "is-wide" }, oS = { class: "mjr-workflow-picker-footer" }, sS = { __name: "WorkflowInfoDialog", setup(t) { let n = In({ @@ -23592,13 +23575,13 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr key: 0, class: "mjr-workflow-picker-backdrop", onClick: Dn(a, ["self"]) - }, [H("section", tS, [ - H("header", nS, [H("div", null, [H("div", rS, K(G(I)("ctx.editWorkflowInfo", "Edit infos")), 1), H("div", iS, K(i.value), 1)]), H("button", { + }, [H("section", eS, [ + H("header", tS, [H("div", null, [H("div", nS, K(G(I)("ctx.editWorkflowInfo", "Edit infos")), 1), H("div", rS, K(i.value), 1)]), H("button", { type: "button", class: "mjr-workflow-picker-close", onClick: a }, [...t[5] ||= [H("i", { class: "pi pi-times" }, null, -1)]])]), - H("div", aS, [ + H("div", iS, [ H("label", null, [t[6] ||= H("span", null, "Task", -1), xn(H("input", { "onUpdate:modelValue": t[0] ||= (e) => n.task = e, type: "text", @@ -23620,13 +23603,13 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr H("option", { value: "api" }, "api", -1), H("option", { value: "cloud" }, "cloud", -1) ]], 512), [[Rn, n.runs_on]])]), - H("label", oS, [t[11] ||= H("span", null, "Notes", -1), xn(H("textarea", { + H("label", aS, [t[11] ||= H("span", null, "Notes", -1), xn(H("textarea", { "onUpdate:modelValue": t[4] ||= (e) => n.notes = e, rows: "5", placeholder: "Notes displayed on workflow hover" }, null, 512), [[Vn, n.notes]])]) ]), - H("footer", sS, [H("button", { + H("footer", oS, [H("button", { type: "button", class: "mjr-workflow-picker-secondary", onClick: a @@ -23637,22 +23620,22 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr }, K(G(I)("btn.apply", "Apply")), 1)]) ])])) : U("", !0)])); } -}, lS = { class: "mjr-workflow-picker-header" }, uS = { class: "mjr-workflow-picker-title" }, dS = { +}, cS = { class: "mjr-workflow-picker-header" }, lS = { class: "mjr-workflow-picker-title" }, uS = { key: 0, class: "mjr-workflow-picker-source" -}, fS = { class: "mjr-workflow-picker-toolbar" }, pS = { class: "mjr-workflow-picker-search" }, mS = ["placeholder"], hS = { value: "" }, gS = ["value"], _S = { value: "" }, vS = ["value"], yS = { value: "" }, bS = ["value"], xS = { class: "mjr-workflow-picker-body" }, SS = { +}, dS = { class: "mjr-workflow-picker-toolbar" }, fS = { class: "mjr-workflow-picker-search" }, pS = ["placeholder"], mS = { value: "" }, hS = ["value"], gS = { value: "" }, _S = ["value"], vS = { value: "" }, yS = ["value"], bS = { class: "mjr-workflow-picker-body" }, xS = { key: 0, class: "mjr-workflow-picker-empty" -}, CS = { +}, SS = { key: 1, class: "mjr-workflow-picker-empty is-error" -}, wS = { +}, CS = { key: 2, class: "mjr-workflow-picker-empty" -}, TS = ["onClick"], ES = { class: "mjr-workflow-picker-thumb" }, DS = ["src", "alt"], OS = { +}, wS = ["onClick"], TS = { class: "mjr-workflow-picker-thumb" }, ES = ["src", "alt"], DS = { key: 1, class: "pi pi-sitemap" -}, kS = { class: "mjr-workflow-picker-card-info" }, AS = ["disabled"], jS = { class: "mjr-workflow-picker-card-info" }, MS = { class: "mjr-workflow-picker-footer" }, NS = ["disabled"], PS = 120, FS = { +}, OS = { class: "mjr-workflow-picker-card-info" }, kS = ["disabled"], AS = { class: "mjr-workflow-picker-card-info" }, jS = { class: "mjr-workflow-picker-footer" }, MS = ["disabled"], NS = 120, PS = { __name: "WorkflowPickerDialog", setup(e) { let t = X(""), n = X(!1), r = X(!1), i = X(""), a = X([]), o = X(""), s = X(0), c = X(!1), l = 0, u = W(() => rn.sourceAsset || null), d = W(() => rn.workflow || null), f = W(() => String(rn.mode || "") === "asset"), p = W(() => String(u.value?.filename || u.value?.display_name || d.value?.display_name || d.value?.filename || u.value?.filepath || d.value?.filepath || "")), m = W(() => b("task")), h = W(() => b("model_family")), g = W(() => b("runs_on")), _ = X(""), v = X(""), y = X(""); @@ -23704,7 +23687,7 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr } let n = await Ee({ q: "*", - limit: PS, + limit: NS, offset: u, sort: "mtime" }, { timeoutMs: 2e4 }); @@ -23714,7 +23697,7 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr return; } let r = (Array.isArray(n?.data?.assets) ? n.data.assets : Array.isArray(n?.data) ? n.data : []).filter((e) => String(e?.filepath || "").trim()); - a.value = e ? r : [...a.value, ...r], s.value = u + r.length, c.value = r.length >= PS, !o.value && a.value[0]?.filepath && (o.value = String(a.value[0].filepath)); + a.value = e ? r : [...a.value, ...r], s.value = u + r.length, c.value = r.length >= NS, !o.value && a.value[0]?.filepath && (o.value = String(a.value[0].filepath)); } catch (e) { t === l && (i.value = String(e?.message || e || "Failed to load workflows"), a.value = []); } finally { @@ -23760,67 +23743,67 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr role: "dialog", "aria-modal": "true" }, [ - H("header", lS, [H("div", uS, [a[4] ||= H("i", { class: "pi pi-sitemap" }, null, -1), H("span", null, K(G(rn).title), 1)]), H("button", { + H("header", cS, [H("div", lS, [a[4] ||= H("i", { class: "pi pi-sitemap" }, null, -1), H("span", null, K(G(rn).title), 1)]), H("button", { class: "mjr-workflow-picker-icon-btn", type: "button", onClick: A }, [...a[5] ||= [H("i", { class: "pi pi-times" }, null, -1)]])]), - p.value ? (B(), J("div", dS, [H("span", null, K(f.value ? G(I)("tab.workflow", "Workflow") : G(I)("dialog.workflowThumbnailSource", "Source")), 1), H("strong", null, K(p.value), 1)])) : U("", !0), - H("div", fS, [ - H("label", pS, [a[6] ||= H("i", { class: "pi pi-search" }, null, -1), xn(H("input", { + p.value ? (B(), J("div", uS, [H("span", null, K(f.value ? G(I)("tab.workflow", "Workflow") : G(I)("dialog.workflowThumbnailSource", "Source")), 1), H("strong", null, K(p.value), 1)])) : U("", !0), + H("div", dS, [ + H("label", fS, [a[6] ||= H("i", { class: "pi pi-search" }, null, -1), xn(H("input", { "onUpdate:modelValue": a[0] ||= (e) => t.value = e, type: "search", placeholder: G(I)("search.workflows", "Search workflows...") - }, null, 8, mS), [[Vn, t.value]])]), + }, null, 8, pS), [[Vn, t.value]])]), f.value ? U("", !0) : xn((B(), J("select", { key: 0, "onUpdate:modelValue": a[1] ||= (e) => _.value = e - }, [H("option", hS, K(G(I)("filter.task", "Task")), 1), (B(!0), J(V, null, yn(m.value, (e) => (B(), J("option", { + }, [H("option", mS, K(G(I)("filter.task", "Task")), 1), (B(!0), J(V, null, yn(m.value, (e) => (B(), J("option", { key: e, value: e - }, K(e), 9, gS))), 128))], 512)), [[Rn, _.value]]), + }, K(e), 9, hS))), 128))], 512)), [[Rn, _.value]]), f.value ? U("", !0) : xn((B(), J("select", { key: 1, "onUpdate:modelValue": a[2] ||= (e) => v.value = e - }, [H("option", _S, K(G(I)("filter.model", "Model")), 1), (B(!0), J(V, null, yn(h.value, (e) => (B(), J("option", { + }, [H("option", gS, K(G(I)("filter.model", "Model")), 1), (B(!0), J(V, null, yn(h.value, (e) => (B(), J("option", { key: e, value: e - }, K(e), 9, vS))), 128))], 512)), [[Rn, v.value]]), + }, K(e), 9, _S))), 128))], 512)), [[Rn, v.value]]), f.value ? U("", !0) : xn((B(), J("select", { key: 2, "onUpdate:modelValue": a[3] ||= (e) => y.value = e - }, [H("option", yS, K(G(I)("filter.runsOn", "Runs on")), 1), (B(!0), J(V, null, yn(g.value, (e) => (B(), J("option", { + }, [H("option", vS, K(G(I)("filter.runsOn", "Runs on")), 1), (B(!0), J(V, null, yn(g.value, (e) => (B(), J("option", { key: e, value: e - }, K(e), 9, bS))), 128))], 512)), [[Rn, y.value]]) + }, K(e), 9, yS))), 128))], 512)), [[Rn, y.value]]) ]), - H("div", xS, [n.value ? (B(), J("div", SS, K(G(I)("status.loading", "Loading...")), 1)) : i.value ? (B(), J("div", CS, K(i.value), 1)) : x.value.length ? (B(), J(V, { key: 3 }, [(B(!0), J(V, null, yn(x.value, (e) => (B(), J("button", { + H("div", bS, [n.value ? (B(), J("div", xS, K(G(I)("status.loading", "Loading...")), 1)) : i.value ? (B(), J("div", SS, K(i.value), 1)) : x.value.length ? (B(), J(V, { key: 3 }, [(B(!0), J(V, null, yn(x.value, (e) => (B(), J("button", { key: e.filepath, type: "button", class: Y(["mjr-workflow-picker-card", { "is-selected": o.value === String(e.filepath || "") }]), onClick: (t) => o.value = String(e.filepath || ""), onDblclick: k - }, [H("div", ES, [T(e) ? (B(), J("img", { + }, [H("div", TS, [T(e) ? (B(), J("img", { key: 0, src: T(e), alt: C(e), loading: "lazy" - }, null, 8, DS)) : (B(), J("i", OS))]), H("div", kS, [ + }, null, 8, ES)) : (B(), J("i", DS))]), H("div", OS, [ H("strong", null, K(C(e)), 1), H("span", null, K(w(e)), 1), H("small", null, K(e.filename), 1) - ])], 42, TS))), 128)), !f.value && c.value ? (B(), J("button", { + ])], 42, wS))), 128)), !f.value && c.value ? (B(), J("button", { key: 0, type: "button", class: "mjr-workflow-picker-card mjr-workflow-picker-load-more", disabled: r.value, onClick: O - }, [a[7] ||= H("div", { class: "mjr-workflow-picker-thumb" }, [H("i", { class: "pi pi-angle-down" })], -1), H("div", jS, [ + }, [a[7] ||= H("div", { class: "mjr-workflow-picker-thumb" }, [H("i", { class: "pi pi-angle-down" })], -1), H("div", AS, [ H("strong", null, K(r.value ? G(I)("status.loading", "Loading...") : G(I)("action.loadMore", "Load more")), 1), H("span", null, K(G(I)("tab.workflow", "Workflow")), 1), H("small", null, K(s.value) + " loaded", 1) - ])], 8, AS)) : U("", !0)], 64)) : (B(), J("div", wS, K(G(I)("toast.noWorkflowsFound", "No workflows found.")), 1))]), - H("footer", MS, [H("button", { + ])], 8, kS)) : U("", !0)], 64)) : (B(), J("div", CS, K(G(I)("toast.noWorkflowsFound", "No workflows found.")), 1))]), + H("footer", jS, [H("button", { type: "button", class: "mjr-workflow-picker-btn", onClick: A @@ -23829,10 +23812,10 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr class: "mjr-workflow-picker-btn is-primary", disabled: !S.value, onClick: k - }, K(G(I)("action.apply", "Apply")), 9, NS)]) + }, K(G(I)("action.apply", "Apply")), 9, MS)]) ], 2)], 32)) : U("", !0)])); } -}, IS = { class: "mjr-workflow-picker-dialog mjr-workflow-info-dialog" }, LS = { class: "mjr-workflow-picker-header" }, RS = { class: "mjr-workflow-picker-title" }, zS = { class: "mjr-workflow-picker-subtitle" }, BS = { class: "mjr-workflow-info-form" }, VS = { class: "is-wide" }, HS = { class: "is-wide" }, US = { class: "mjr-workflow-picker-footer" }, WS = { +}, FS = { class: "mjr-workflow-picker-dialog mjr-workflow-info-dialog" }, IS = { class: "mjr-workflow-picker-header" }, LS = { class: "mjr-workflow-picker-title" }, RS = { class: "mjr-workflow-picker-subtitle" }, zS = { class: "mjr-workflow-info-form" }, BS = { class: "is-wide" }, VS = { class: "is-wide" }, HS = { class: "mjr-workflow-picker-footer" }, US = { __name: "WorkflowSaveInfoDialog", setup(e) { let t = In({ @@ -23868,8 +23851,8 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr key: 0, class: "mjr-workflow-picker-backdrop", onClick: Dn(a, ["self"]) - }, [H("section", IS, [ - H("header", LS, [H("div", null, [H("div", RS, K(r.value), 1), H("div", zS, K(i.value), 1)]), q(s, { + }, [H("section", FS, [ + H("header", IS, [H("div", null, [H("div", LS, K(r.value), 1), H("div", RS, K(i.value), 1)]), q(s, { type: "button", class: "mjr-workflow-picker-close", onClick: a @@ -23877,8 +23860,8 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr default: Z(() => [...n[6] ||= [H("i", { class: "pi pi-times" }, null, -1)]]), _: 1 })]), - H("div", BS, [ - H("label", VS, [H("span", null, K(G(I)("dialog.workflowSaveName", "Workflow name")), 1), q(c, { + H("div", zS, [ + H("label", BS, [H("span", null, K(G(I)("dialog.workflowSaveName", "Workflow name")), 1), q(c, { modelValue: t.name, "onUpdate:modelValue": n[0] ||= (e) => t.name = e, type: "text", @@ -23928,14 +23911,14 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr "option-value": "value", placeholder: "Auto" }, null, 8, ["modelValue"])]), - H("label", HS, [n[11] ||= H("span", null, "Notes", -1), q(u, { + H("label", VS, [n[11] ||= H("span", null, "Notes", -1), q(u, { modelValue: t.notes, "onUpdate:modelValue": n[5] ||= (e) => t.notes = e, rows: "5", placeholder: "Notes displayed on workflow hover" }, null, 8, ["modelValue"])]) ]), - H("footer", US, [q(s, { + H("footer", HS, [q(s, { type: "button", class: "mjr-workflow-picker-secondary", onClick: a @@ -23954,7 +23937,7 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr ])])) : U("", !0)]); }; } -}, GS = { +}, WS = { __name: "ContextMenuPortal", setup(e) { let t = X(""), n = W(() => Ti(t.value)); @@ -23963,14 +23946,14 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr }), Hn(() => { wi(t.value), t.value = ""; }), (e, t) => n.value ? (B(), J(V, { key: 0 }, [ - q(eS), - q(Gx), - q(FS), - q(cS), - q(WS) + q($x), + q(Wx), + q(PS), + q(sS), + q(US) ], 64)) : U("", !0); } -}, KS = { +}, GS = { __name: "App", setup(e) { let t = X(null), n = X(null), r = X(null), i = X(null), a = X(null), o = X(null), s = null; @@ -23999,23 +23982,23 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr ref_key: "statusSectionRef", ref: n }, null, 512), - q(jb, { + q(Ab, { ref_key: "headerSectionRef", ref: r }, null, 512), - q(Yb, { + q(Jb, { ref_key: "summaryBarSectionRef", ref: i }, null, 512), - q(sx, { + q(ox, { ref_key: "assetsGridRef", ref: a }, null, 512), - q(Ix, { + q(Fx, { ref_key: "sidebarSectionRef", ref: o }, null, 512), - q(GS), + q(WS), H("div", { ref_key: "containerRef", ref: t, @@ -24029,7 +24012,7 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr }, null, 512) ], 64)); } -}, qS = { +}, KS = { __name: "GeneratedFeedApp", setup(e) { let t = X(null), n = null; @@ -24060,7 +24043,7 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr Vf(n); } catch {} n = null; - }), (e, n) => (B(), J(V, null, [q(GS), H("div", { + }), (e, n) => (B(), J(V, null, [q(WS), H("div", { ref_key: "containerRef", ref: t, class: "mjr-vue-feed-root", @@ -24075,64 +24058,64 @@ var px = { class: "mjr-sidebar-preview" }, mx = ["src"], hx = ["src"], gx = ["sr } }, null, 512)], 64)); } -}, JS = "data-mjr-topbar-mfv-host", YS = "data-mjr-topbar-mfv-button", XS = "data-mjr-topbar-mfv-slot", ZS = "label.floatingViewer", QS = "Viewer", $S = "V", eC = [ +}, qS = "data-mjr-topbar-mfv-host", JS = "data-mjr-topbar-mfv-button", YS = "data-mjr-topbar-mfv-slot", XS = "label.floatingViewer", ZS = "Viewer", QS = "V", $S = [ ".actionbar-container", "[data-testid='actionbar-container']", "[data-testid='topbar']", ".comfyui-topbar" -], tC = [ +], eC = [ ".queue-button-group", ".comfyui-button-group", "[role='toolbar']" -], nC = [".topbar"], rC = null, iC = null, aC = null, oC = null, sC = null, cC = !1, lC = null, uC = !1, dC = !1; -function fC(e) { - if (!(rC && iC === e)) { +], tC = [".topbar"], nC = null, rC = null, iC = null, aC = null, oC = null, sC = !1, cC = null, lC = !1, uC = !1; +function dC(e) { + if (!(nC && rC === e)) { if (!e) { - pC(); + fC(); return; } try { - rC?.disconnect?.(); + nC?.disconnect?.(); } catch {} - rC = new MutationObserver(() => kC()), rC.observe(e, { + nC = new MutationObserver(() => OC()), nC.observe(e, { childList: !0, subtree: !0 - }), iC = e, pC(); + }), rC = e, fC(); } } -function pC() { - aC || typeof MutationObserver > "u" || !document.body || (aC = new MutationObserver(() => kC()), aC.observe(document.body, { +function fC() { + iC || typeof MutationObserver > "u" || !document.body || (iC = new MutationObserver(() => OC()), iC.observe(document.body, { childList: !0, subtree: !0 })); } -function mC(e) { +function pC(e) { return !!(e?.isConnected || e && document.body?.contains?.(e)); } -function hC(e) { +function mC(e) { if (!e?.querySelector) return null; - for (let t of tC) { + for (let t of eC) { let n = e.querySelector(t); if (n) return n; } return null; } -function gC(e, { allowFallback: t = !1 } = {}) { - return e ? t ? !!hC(e) : !0 : !1; +function hC(e, { allowFallback: t = !1 } = {}) { + return e ? t ? !!mC(e) : !0 : !1; } -function _C() { +function gC() { if (typeof document > "u") return null; - for (let e of eC) { + for (let e of $S) { let t = document.querySelector(e); - if (gC(t)) return t; + if (hC(t)) return t; } - for (let e of nC) { - let t = Array.from(document.querySelectorAll(e)).find((e) => gC(e, { allowFallback: !0 })); + for (let e of tC) { + let t = Array.from(document.querySelectorAll(e)).find((e) => hC(e, { allowFallback: !0 })); if (t) return t; } return null; } -function vC(e = _C()) { +function _C(e = gC()) { if (typeof document > "u") return; let t = document.documentElement?.style; if (!t) return; @@ -24143,131 +24126,131 @@ function vC(e = _C()) { let n = e.getBoundingClientRect(), r = Math.max(60, Math.ceil(n.bottom + 12)); t.setProperty("--mjr-mfv-top-offset", `${r}px`); } -function yC(e) { - return e ? hC(e) || e : null; +function vC(e) { + return e ? mC(e) || e : null; } -function bC(e) { +function yC(e) { if (!e) return null; - let t = e.querySelector(`[${XS}]`); - t || (t = document.createElement("div"), t.setAttribute(XS, "1"), t.className = "flex h-full items-center pointer-events-auto", t.style.position = "relative", t.style.zIndex = "10030", t.style.padding = "0 4px"); - let n = yC(e); + let t = e.querySelector(`[${YS}]`); + t || (t = document.createElement("div"), t.setAttribute(YS, "1"), t.className = "flex h-full items-center pointer-events-auto", t.style.position = "relative", t.style.zIndex = "10030", t.style.padding = "0 4px"); + let n = vC(e); return t.parentElement === n ? n && t !== n.lastElementChild && n.appendChild(t) : n && n.appendChild(t), t; } -function xC() { +function bC() { let e = document.createElement("i"); return e.className = "mjr-topbar-mfv-icon pi pi-eye", e.setAttribute("aria-hidden", "true"), e; } -function SC(e = "Viewer") { +function xC(e = "Viewer") { let t = document.createElement("span"); return t.className = "mjr-topbar-mfv-label", t.textContent = e, t; } -function CC(e) { +function SC(e) { if (!e) return; - let t = uC ? I("tooltip.closeMFV", "Close Majoor Floating Viewer") : I("tooltip.openMFV", "Open Majoor Floating Viewer"); - nr(e, t, $S, { ariaLabel: t }), e.setAttribute("aria-pressed", uC ? "true" : "false"), e.classList.toggle("primary", uC), e.classList.toggle("mjr-topbar-mfv-active", uC), e.replaceChildren(xC(), SC(I(ZS, QS))); + let t = lC ? I("tooltip.closeMFV", "Close Majoor Floating Viewer") : I("tooltip.openMFV", "Open Majoor Floating Viewer"); + nr(e, t, QS, { ariaLabel: t }), e.setAttribute("aria-pressed", lC ? "true" : "false"), e.classList.toggle("primary", lC), e.classList.toggle("mjr-topbar-mfv-active", lC), e.replaceChildren(bC(), xC(I(XS, ZS))); } -function wC() { +function CC() { try { window.dispatchEvent(new Event(R.MFV_TOGGLE)); } catch (e) { console.debug?.("[Majoor] top bar MFV launch failed", e); } - kC(); + OC(); +} +function wC() { + let e = document.createElement("button"); + return e.type = "button", e.setAttribute(JS, "1"), e.setAttribute("data-command-id", "mjr.toggleFloatingViewer"), e.className = "comfyui-button p-button p-component mjr-topbar-mfv-button", e.style.position = "relative", e.style.zIndex = "10030", e.style.width = "auto", e.style.height = "32px", e.style.minWidth = "32px", e.style.padding = "0 8px", e.style.gap = "8px", e.style.display = "inline-flex", e.style.alignItems = "center", e.style.justifyContent = "center", e.style.whiteSpace = "nowrap", e.addEventListener("click", CC), SC(e), e; } function TC() { - let e = document.createElement("button"); - return e.type = "button", e.setAttribute(YS, "1"), e.setAttribute("data-command-id", "mjr.toggleFloatingViewer"), e.className = "comfyui-button p-button p-component mjr-topbar-mfv-button", e.style.position = "relative", e.style.zIndex = "10030", e.style.width = "auto", e.style.height = "32px", e.style.minWidth = "32px", e.style.padding = "0 8px", e.style.gap = "8px", e.style.display = "inline-flex", e.style.alignItems = "center", e.style.justifyContent = "center", e.style.whiteSpace = "nowrap", e.addEventListener("click", wC), CC(e), e; + let e = document.createElement("div"); + return e.setAttribute(qS, "1"), e.className = "mjr-topbar-mfv-button-host", e.style.position = "relative", e.appendChild(wC()), e; } function EC() { - let e = document.createElement("div"); - return e.setAttribute(JS, "1"), e.className = "mjr-topbar-mfv-button-host", e.style.position = "relative", e.appendChild(TC()), e; -} -function DC() { if (typeof document > "u") return; let e = document.querySelector(".mjr-mfv"); - if (dC && !e) return; + if (uC && !e) return; let t = !!e?.classList?.contains?.("is-visible"); - uC !== t && (uC = t); + lC !== t && (lC = t); } -function OC() { - let e = _C(); - if (!e) return vC(null), fC(null), null; - if (iC && !mC(iC)) { +function DC() { + let e = gC(); + if (!e) return _C(null), dC(null), null; + if (rC && !pC(rC)) { try { - rC?.disconnect?.(); + nC?.disconnect?.(); } catch (e) { console.debug?.(e); } - rC = null, iC = null; + nC = null, rC = null; } - fC(e), DC(); - let t = bC(e); - if (!t) return vC(e), null; - let n = t.querySelector(`[${JS}]`); - return n ||= EC(), n.parentElement !== t && t.replaceChildren(n), vC(e), CC(n.querySelector(`[${YS}]`)), t; + dC(e), EC(); + let t = yC(e); + if (!t) return _C(e), null; + let n = t.querySelector(`[${qS}]`); + return n ||= TC(), n.parentElement !== t && t.replaceChildren(n), _C(e), SC(n.querySelector(`[${JS}]`)), t; } -function kC() { - cC || (cC = !0, lC = window.setTimeout(() => { - cC = !1, lC = null, OC(); +function OC() { + sC || (sC = !0, cC = window.setTimeout(() => { + sC = !1, cC = null, DC(); }, 32)); } -function AC() { - return typeof window > "u" || typeof document > "u" || !document.body ? !1 : (kC(), oC || (oC = (e) => { - uC = !!e?.detail?.visible, dC = !0, kC(); - }, window.addEventListener(R.MFV_VISIBILITY_CHANGED, oC)), sC || (sC = () => kC(), window.addEventListener("resize", sC)), fC(_C()), !0); +function kC() { + return typeof window > "u" || typeof document > "u" || !document.body ? !1 : (OC(), aC || (aC = (e) => { + lC = !!e?.detail?.visible, uC = !0, OC(); + }, window.addEventListener(R.MFV_VISIBILITY_CHANGED, aC)), oC || (oC = () => OC(), window.addEventListener("resize", oC)), dC(gC()), !0); } -function jC() { +function AC() { try { - rC?.disconnect?.(); + nC?.disconnect?.(); } catch (e) { console.debug?.(e); } - rC = null, iC = null; + nC = null, rC = null; try { - aC?.disconnect?.(); + iC?.disconnect?.(); } catch (e) { console.debug?.(e); } - aC = null; + iC = null; try { - lC && window.clearTimeout(lC); + cC && window.clearTimeout(cC); } catch (e) { console.debug?.(e); } - lC = null, oC && typeof window < "u" && window.removeEventListener(R.MFV_VISIBILITY_CHANGED, oC), oC = null, sC && typeof window < "u" && window.removeEventListener("resize", sC), sC = null, cC = !1, uC = !1, dC = !1; + cC = null, aC && typeof window < "u" && window.removeEventListener(R.MFV_VISIBILITY_CHANGED, aC), aC = null, oC && typeof window < "u" && window.removeEventListener("resize", oC), oC = null, sC = !1, lC = !1, uC = !1; try { - document.documentElement?.style?.setProperty("--mjr-mfv-top-offset", "60px"), document.querySelectorAll(`[${JS}]`).forEach((e) => e.remove?.()), document.querySelectorAll(`[${XS}]`).forEach((e) => e.remove?.()); + document.documentElement?.style?.setProperty("--mjr-mfv-top-offset", "60px"), document.querySelectorAll(`[${qS}]`).forEach((e) => e.remove?.()), document.querySelectorAll(`[${YS}]`).forEach((e) => e.remove?.()); } catch (e) { console.debug?.(e); } } //#endregion //#region ui/features/runtime/entryUiRegistration.ts -var MC = "mjr-global-runtime-root", NC = "_mjrGlobalRuntimeVueApp", PC = "_mjrSidebarVueApp", FC = "_mjrFeedVueApp", IC = "majoor-generated-feed", LC = null; -function RC() { +var jC = "mjr-global-runtime-root", MC = "_mjrGlobalRuntimeVueApp", NC = "_mjrSidebarVueApp", PC = "_mjrFeedVueApp", FC = "majoor-generated-feed", IC = null; +function LC() { if (typeof document > "u" || !document?.body) return null; - let e = document.getElementById(MC); - return e || (e = document.createElement("div"), e.id = MC, e.setAttribute("role", "presentation"), e.style.cssText = "position:fixed;inset:0;overflow:visible;pointer-events:none;z-index:10020;", document.body.appendChild(e), e); + let e = document.getElementById(jC); + return e || (e = document.createElement("div"), e.id = jC, e.setAttribute("role", "presentation"), e.style.cssText = "position:fixed;inset:0;overflow:visible;pointer-events:none;z-index:10020;", document.body.appendChild(e), e); } -function zC() { +function RC() { try { - let e = RC(); + let e = LC(); if (!e) return !1; - let t = !!qt(e, Em, NC); - return AC(), t; + let t = !!qt(e, Em, MC); + return kC(), t; } catch { return !1; } } -function BC() { +function zC() { try { - jC(); - let e = document.getElementById(MC); + AC(); + let e = document.getElementById(jC); if (!e) return; - Ut(e, NC), e.remove?.(); + Ut(e, MC), e.remove?.(); } catch {} } -function VC(e, t) { +function BC(e, t) { let n = We(e, t); if (kp(), !n) try { window.dispatchEvent(new Event(R.OPEN_ASSETS_MANAGER)); @@ -24276,15 +24259,15 @@ function VC(e, t) { } return n; } -function HC() { +function VC() { try { window.dispatchEvent(new CustomEvent(R.RELOAD_GRID, { detail: { reason: "command" } })); } catch (e) { console.debug?.(e); } } -function UC(e) { - let t = F(e, IC); +function HC(e) { + let t = F(e, FC); if (!t) try { wf(); } catch (e) { @@ -24292,7 +24275,7 @@ function UC(e) { } return t; } -async function WC() { +async function UC() { try { let e = await a(z.BROWSE_FOLDER, {}); if (e?.ok) return String(e?.data?.path || "").trim(); @@ -24303,8 +24286,8 @@ async function WC() { } return ""; } -async function GC(e, { settingId: t, settingsPathKey: n, save: r, successMessage: i, restartRequired: a = !1 }) { - let o = await WC(); +async function WC(e, { settingId: t, settingsPathKey: n, save: r, successMessage: i, restartRequired: a = !1 }) { + let o = await UC(); if (!o) return !1; let s = await r(o); if (!s?.ok) return O(s?.error || I("toast.settingsPathSaveFailed", "Failed to save path"), "error"), !1; @@ -24319,10 +24302,10 @@ async function GC(e, { settingId: t, settingsPathKey: n, save: r, successMessage } return O(a ? `${i} ${I("toast.restartComfyUiToApply", "Restart ComfyUI to apply.")}` : i, "success", 2800), !0; } -function KC(e) { - return dw(e).find(uw) || null; +function GC(e) { + return uw(e).find(lw) || null; } -function qC(e) { +function KC(e) { let t = String(e?.id ?? e?.nodeId ?? e?.node_id ?? "").trim(); if (!t) return null; let n = String(e?.comfyClass || e?.type || e?.constructor?.type || "").trim(); @@ -24334,10 +24317,10 @@ function qC(e) { title: String(e?.title || e?.properties?.title || e?.properties?.name || n || "").trim() }; } -function JC(e, t) { - let n = qC(LC); +function qC(e, t) { + let n = KC(IC); if (!n) return O(I("toast.nodeContextMissing", "Select an output node first."), "info", 2200), !1; - VC(e, t); + BC(e, t); try { typeof window < "u" && (window.MajoorAssetsManager = window.MajoorAssetsManager || {}, window.MajoorAssetsManager.pendingNodeContext = n, window.dispatchEvent(new CustomEvent(R.OPEN_NODE_CONTEXT, { detail: n }))); } catch (e) { @@ -24345,7 +24328,7 @@ function JC(e, t) { } return !0; } -function YC(e, { sidebarTabId: t, triggerStartupScan: n }) { +function JC(e, { sidebarTabId: t, triggerStartupScan: n }) { return [ { id: "mjr.openAssetsManager", @@ -24354,7 +24337,7 @@ function YC(e, { sidebarTabId: t, triggerStartupScan: n }) { title: I("tooltip.openAssetsManager", "Open Majoor Assets Manager"), description: I("tooltip.openAssetsManager", "Open Majoor Assets Manager"), icon: "pi pi-folder-open", - function: () => VC(e, t) + function: () => BC(e, t) }, { id: "mjr.scanAssets", @@ -24378,7 +24361,7 @@ function YC(e, { sidebarTabId: t, triggerStartupScan: n }) { id: "mjr.refreshAssetsGrid", label: I("command.refreshAssetsGrid", "Refresh assets grid"), icon: "pi pi-sync", - function: () => HC() + function: () => VC() }, { id: "mjr.openFloatingViewer", @@ -24402,7 +24385,7 @@ function YC(e, { sidebarTabId: t, triggerStartupScan: n }) { title: I("tooltip.openGeneratedFeed", "Open the Majoor generated feed panel"), description: I("tooltip.openGeneratedFeed", "Open the Majoor generated feed panel"), icon: "pi pi-list", - function: () => UC(e) + function: () => HC(e) }, { id: "mjr.openSettings", @@ -24417,7 +24400,7 @@ function YC(e, { sidebarTabId: t, triggerStartupScan: n }) { title: I("tooltip.pickOutputDirectory", "Use the native folder browser to set Majoor's generation output directory"), description: I("tooltip.pickOutputDirectory", "Use the native folder browser to set Majoor's generation output directory"), icon: "pi pi-folder", - function: () => GC(e, { + function: () => WC(e, { settingId: "Majoor.Paths.OutputDirectory", settingsPathKey: "outputDirectory", save: S, @@ -24431,7 +24414,7 @@ function YC(e, { sidebarTabId: t, triggerStartupScan: n }) { title: I("tooltip.pickIndexDirectory", "Use the native folder browser to set Majoor's index database directory"), description: I("tooltip.pickIndexDirectory", "Use the native folder browser to set Majoor's index database directory"), icon: "pi pi-database", - function: () => GC(e, { + function: () => WC(e, { settingId: "Majoor.Paths.IndexDirectory", settingsPathKey: "indexDirectory", save: ke, @@ -24446,11 +24429,11 @@ function YC(e, { sidebarTabId: t, triggerStartupScan: n }) { title: I("tooltip.openNodeContext", "Show the latest indexed assets produced by this node"), description: I("tooltip.openNodeContext", "Show the latest indexed assets produced by this node"), icon: "pi pi-sitemap", - function: () => JC(e, t) + function: () => qC(e, t) } ]; } -function XC() { +function YC() { return [{ combo: { alt: !0, @@ -24467,7 +24450,7 @@ function XC() { commandId: "mjr.toggleFloatingViewer" }]; } -function ZC() { +function XC() { return [{ path: ["Extensions", "Majoor Assets Manager"], commands: [ @@ -24482,13 +24465,13 @@ function ZC() { ] }]; } -function QC(e, { sidebarTabId: t, triggerStartupScan: n }) { +function ZC(e, { sidebarTabId: t, triggerStartupScan: n }) { return [null, { content: "Majoor Assets Manager", submenu: { options: [ { content: I("tooltip.openAssetsManager", "Open Majoor Assets Manager"), - callback: () => VC(e, t) + callback: () => BC(e, t) }, { content: I("command.openFloatingViewer", "Open floating viewer"), @@ -24502,12 +24485,12 @@ function QC(e, { sidebarTabId: t, triggerStartupScan: n }) { }, { content: I("command.openGeneratedFeed", "Open generated feed"), - callback: () => UC(e) + callback: () => HC(e) }, null, { content: I("command.refreshAssetsGrid", "Refresh assets grid"), - callback: () => HC() + callback: () => VC() }, { content: I("command.scanAssets", "Scan assets"), @@ -24520,7 +24503,7 @@ function QC(e, { sidebarTabId: t, triggerStartupScan: n }) { ] } }]; } -function $C() { +function QC() { return [ { label: "Majoor Assets Manager", @@ -24537,13 +24520,13 @@ function $C() { } ]; } -function ew(e, t) { - for (let n of YC(e, t)) Ie(e, n); +function $C(e, t) { + for (let n of JC(e, t)) Ie(e, n); } -function tw(e) { - for (let t of XC()) Be(e, t); +function ew(e) { + for (let t of YC()) Be(e, t); } -function nw(e, { sidebarTabId: t }) { +function tw(e, { sidebarTabId: t }) { return Dp({ sidebarTabId: t }), Ve(e, { id: t, icon: "pi pi-folder", @@ -24552,7 +24535,7 @@ function nw(e, { sidebarTabId: t }) { tooltip: I("tooltip.sidebarTab"), type: "custom", render(e) { - kp(), Sr({ idleOnly: !0 }).catch(() => null), qt(e, KS, PC), setTimeout(() => { + kp(), Sr({ idleOnly: !0 }).catch(() => null), qt(e, GS, NC), setTimeout(() => { let e = Mp(); if (e) try { window.dispatchEvent(new CustomEvent(R.RELOAD_GRID, { detail: { @@ -24567,75 +24550,75 @@ function nw(e, { sidebarTabId: t }) { destroy(e) {} }); } -function rw() { +function nw() { try { - Ut(null, PC); + Ut(null, NC); } catch {} } -var iw = !1, aw = "mjr-sidebar-prewarm-host"; -function ow() { - if (iw || typeof document > "u" || !document?.body) return !1; - iw = !0; +var rw = !1, iw = "mjr-sidebar-prewarm-host"; +function aw() { + if (rw || typeof document > "u" || !document?.body) return !1; + rw = !0; try { - let e = document.getElementById(aw); - return e || (e = document.createElement("div"), e.id = aw, e.style.cssText = "position:fixed;left:-99999px;top:0;width:360px;height:600px;overflow:hidden;visibility:hidden;pointer-events:none;contain:strict;", e.setAttribute("aria-hidden", "true"), document.body.appendChild(e)), qt(e, KS, PC), !0; + let e = document.getElementById(iw); + return e || (e = document.createElement("div"), e.id = iw, e.style.cssText = "position:fixed;left:-99999px;top:0;width:360px;height:600px;overflow:hidden;visibility:hidden;pointer-events:none;contain:strict;", e.setAttribute("aria-hidden", "true"), document.body.appendChild(e)), qt(e, GS, NC), !0; } catch (e) { - return console.debug?.(e), iw = !1, !1; + return console.debug?.(e), rw = !1, !1; } } -function sw() { +function ow() { return { - id: IC, + id: FC, title: I("bottomFeed.title", "Generated Feed"), icon: "pi pi-images", type: "custom", render(e) { - qt(e, qS, FC); + qt(e, KS, PC); }, destroy(e) {} }; } -function cw() { - return [sw()]; +function sw() { + return [ow()]; } -function lw() { +function cw() { try { - Ut(null, FC); + Ut(null, PC); } catch {} } -function uw(e) { +function lw(e) { let t = String(e?.comfyClass || e?.type || e?.constructor?.type || "").trim(); return t ? /save|load|preview/i.test(t) : !1; } -function dw(e) { +function uw(e) { return e ? Array.isArray(e) ? e.filter(Boolean) : e instanceof Set ? Array.from(e).filter(Boolean) : e instanceof Map ? Array.from(e.values()).filter(Boolean) : Array.isArray(e?.items) ? e.items.filter(Boolean) : Array.isArray(e?.nodes) ? e.nodes.filter(Boolean) : [e] : []; } -function fw(e) { - return LC = KC(e), LC ? [ +function dw(e) { + return IC = GC(e), IC ? [ "mjr.openNodeContext", "mjr.openAssetsManager", "mjr.openFloatingViewer" ] : []; } -function pw(e, t) { +function fw(e, t) { return { content: e, callback: t }; } -function mw(e, t, { sidebarTabId: n }) { - return uw(e) ? [ - pw("View in Assets Manager", () => VC(t, n)), - pw("Open in Floating Viewer", () => { +function pw(e, t, { sidebarTabId: n }) { + return lw(e) ? [ + fw("View in Assets Manager", () => BC(t, n)), + fw("Open in Floating Viewer", () => { try { window.dispatchEvent(new Event(R.MFV_OPEN)); } catch (e) { console.debug?.(e); } }), - pw("Index Output", () => { + fw("Index Output", () => { try { - HC(), O(I("toast.rescanningFile", "Rescanning file..."), "info", 1800); + VC(), O(I("toast.rescanningFile", "Rescanning file..."), "info", 1800); } catch (e) { console.debug?.(e); } @@ -24644,15 +24627,15 @@ function mw(e, t, { sidebarTabId: n }) { } //#endregion //#region ui/features/runtime/entryRuntimeLifecycle.ts -var hw = "__MJR_ENTRY_RUNTIME__"; -function gw(e, t) { +var mw = "__MJR_ENTRY_RUNTIME__"; +function hw(e, t) { if (e) try { e._mjrAssetUpdateReloadTimer &&= (clearTimeout(e._mjrAssetUpdateReloadTimer), null), e._mjrExecutedHandler && e.removeEventListener("executed", e._mjrExecutedHandler), e._mjrAssetAddedHandler && e.removeEventListener("mjr-asset-added", e._mjrAssetAddedHandler), e._mjrAssetUpdatedHandler && e.removeEventListener("mjr-asset-updated", e._mjrAssetUpdatedHandler), e._mjrStructuredEventHandler && e.removeEventListener(R.STRUCTURED_EVENT, e._mjrStructuredEventHandler), e._mjrScanCompleteHandler && e.removeEventListener(R.SCAN_COMPLETE, e._mjrScanCompleteHandler), e._mjrScanProgressHandler && e.removeEventListener(R.SCAN_PROGRESS, e._mjrScanProgressHandler), e._mjrAssetIndexingHandler && e.removeEventListener(R.ASSET_INDEXING, e._mjrAssetIndexingHandler), e._mjrAssetIndexedHandler && e.removeEventListener(R.ASSET_INDEXED, e._mjrAssetIndexedHandler), e._mjrExecutionStartHandler && e.removeEventListener("execution_start", e._mjrExecutionStartHandler), e._mjrExecutionEndHandler && (e.removeEventListener("execution_success", e._mjrExecutionEndHandler), e.removeEventListener("execution_error", e._mjrExecutionEndHandler), e.removeEventListener("execution_interrupted", e._mjrExecutionEndHandler)), e._mjrStacksUpdatedHandler && e.removeEventListener("mjr.stacks.updated", e._mjrStacksUpdatedHandler), e._mjrEnrichmentStatusHandler && e.removeEventListener(R.ENRICHMENT_STATUS, e._mjrEnrichmentStatusHandler), e._mjrDbRestoreStatusHandler && e.removeEventListener(R.DB_RESTORE_STATUS, e._mjrDbRestoreStatusHandler), e._mjrRuntimeStatusHandler && (e.removeEventListener("progress", e._mjrRuntimeStatusHandler), e.removeEventListener("status", e._mjrRuntimeStatusHandler), e.removeEventListener(R.RUNTIME_STATUS, e._mjrRuntimeStatusHandler), e.removeEventListener("execution_cached", e._mjrExecutionCachedHandler)); } catch (e) { t?.(e, "entry.removeApiHandlers"); } } -function _w(e, t) { +function gw(e, t) { try { let t = e?.assetsDeletedHandler; t && typeof window < "u" && window.removeEventListener(R.ASSETS_DELETED, t); @@ -24660,7 +24643,7 @@ function _w(e, t) { t?.(e, "entry.removeRuntimeWindowHandlers"); } } -function vw(e, { reportError: t } = {}) { +function _w(e, { reportError: t } = {}) { if (!(!e || typeof e != "object")) { try { let t = Array.isArray(e._listenerCleanupFns) ? e._listenerCleanupFns : []; @@ -24685,13 +24668,13 @@ function vw(e, { reportError: t } = {}) { console.warn("[MJR teardown]", e); } try { - gw(e.api || null, t), _w(e, t); + hw(e.api || null, t), gw(e, t); } catch (e) { console.warn("[MJR teardown]", e); } } } -function yw(e, t, n, r, i = void 0) { +function vw(e, t, n, r, i = void 0) { if (!e || !t?.addEventListener || typeof r != "function") return null; let a = i && typeof i == "object" ? { ...i } : i; if (typeof AbortController < "u") try { @@ -24711,11 +24694,11 @@ function yw(e, t, n, r, i = void 0) { } }), null; } -function bw({ cleanupEntryRuntimeFn: e = vw, teardownLiveStreamTracker: t, teardownNodeStream: n, teardownFloatingViewerManager: r, teardownGeneratedFeed: i, teardownAssetsSidebar: a, teardownGlobalRuntime: o, teardownTopBarMfvButton: s, reportError: c }) { +function yw({ cleanupEntryRuntimeFn: e = _w, teardownLiveStreamTracker: t, teardownNodeStream: n, teardownFloatingViewerManager: r, teardownGeneratedFeed: i, teardownAssetsSidebar: a, teardownGlobalRuntime: o, teardownTopBarMfvButton: s, reportError: c }) { try { if (typeof window < "u") { try { - let t = window[hw]; + let t = window[mw]; e(t, { reportError: c }); } catch (e) { console.warn("[MJR teardown]", e); @@ -24755,7 +24738,7 @@ function bw({ cleanupEntryRuntimeFn: e = vw, teardownLiveStreamTracker: t, teard } catch (e) { console.warn("[MJR teardown]", e); } - window[hw] = { + window[mw] = { api: null, assetsDeletedHandler: null, _cleanupControllers: [], @@ -24768,42 +24751,42 @@ function bw({ cleanupEntryRuntimeFn: e = vw, teardownLiveStreamTracker: t, teard } //#endregion //#region ui/entry.ts -var xw = null, Sw = null, Cw = null; +var bw = null, xw = null, Sw = null; +function Cw() { + return Sw ||= import("./chunks/floatingViewerManager-tOuaq4XR.js").then((e) => e.n), Sw; +} function ww() { - return Cw ||= import("./chunks/floatingViewerManager-pz1ceTHv.js").then((e) => e.n), Cw; + Sw && Sw.then((e) => e?.teardownFloatingViewerManager?.()).catch((e) => console.debug?.("[Majoor] MFV teardown skipped", e)); } -function Tw() { - Cw && Cw.then((e) => e?.teardownFloatingViewerManager?.()).catch((e) => console.debug?.("[Majoor] MFV teardown skipped", e)); -} -var Ew = "majoor-assets", Dw = "__MJR_EXECUTION_RUNTIME__", Ow = "Majoor.AssetsManager", kw = { +var Tw = "majoor-assets", Ew = "__MJR_EXECUTION_RUNTIME__", Dw = "Majoor.AssetsManager", Ow = { active: null, promptId: "" -}, Aw = null, jw = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i, Mw = /^[0-9a-f]{20,}$/i; -function Nw(...e) { +}, kw = null, Aw = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i, jw = /^[0-9a-f]{20,}$/i; +function Mw(...e) { for (let t of e) { let e = String(t || "").trim(); if (e) return e; } return ""; } -function Pw(e) { +function Nw(e) { let t = String(e || "").trim(); - return jw.test(t) || Mw.test(t); + return Aw.test(t) || jw.test(t); +} +function Pw(e) { + return Mw(e?.title, e?.properties?.title, e?.properties?.name, e?.properties?.label, e?.name); } function Fw(e) { - return Nw(e?.title, e?.properties?.title, e?.properties?.name, e?.properties?.label, e?.name); -} -function Iw(e) { if (!e || typeof e != "object") return []; if (Array.isArray(e.nodes)) return e.nodes.filter(Boolean); if (Array.isArray(e._nodes)) return e._nodes.filter(Boolean); let t = e._nodes_by_id ?? e.nodes_by_id ?? null; return t instanceof Map ? Array.from(t.values()).filter(Boolean) : t && typeof t == "object" ? Object.values(t).filter(Boolean) : []; } -function Lw(e) { - return Iw(e).length > 0; +function Iw(e) { + return Fw(e).length > 0; } -function Rw(e) { +function Lw(e) { return !e || typeof e != "object" ? !1 : [ e.subgraph, e._subgraph, @@ -24814,13 +24797,13 @@ function Rw(e) { e.subgraph_instance?.graph, e.inner_graph, e.subgraph_graph - ].some(Lw) || Array.isArray(e.nodes) && e.nodes.length > 0 && e.nodes !== e.graph?.nodes ? !0 : Pw(e.type) && !!Fw(e); + ].some(Iw) || Array.isArray(e.nodes) && e.nodes.length > 0 && e.nodes !== e.graph?.nodes ? !0 : Nw(e.type) && !!Pw(e); } -function zw(e, t) { - let n = String(e?.type || t || "").trim(), r = Fw(e); - return Pw(n) ? r || "Subgraph" : n || r || "Node"; +function Rw(e, t) { + let n = String(e?.type || t || "").trim(), r = Pw(e); + return Nw(n) ? r || "Subgraph" : n || r || "Node"; } -function Bw() { +function zw() { try { return typeof window > "u" ? { active_prompt_id: null, @@ -24829,30 +24812,30 @@ function Bw() { progress_value: null, progress_max: null, cached_nodes: [] - } : ((!window[Dw] || typeof window[Dw] != "object") && (window[Dw] = { + } : ((!window[Ew] || typeof window[Ew] != "object") && (window[Ew] = { active_prompt_id: null, queue_remaining: null, progress_node: null, progress_value: null, progress_max: null, cached_nodes: [] - }), window[Dw]); + }), window[Ew]); } catch (e) { return console.debug?.(e), {}; } } -function Vw(e = {}) { +function Bw(e = {}) { try { - let t = Bw(); + let t = zw(); Object.assign(t, e || {}), window.dispatchEvent(new CustomEvent(R.RUNTIME_STATUS, { detail: { ...t } })); } catch (e) { console.debug?.(e); } } -async function Hw({ active: e, promptId: t = "" } = {}) { +async function Vw({ active: e, promptId: t = "" } = {}) { let n = !!e, r = String(t || "").trim(); - if (!(kw.active === n && kw.promptId === r)) { - kw = { + if (!(Ow.active === n && Ow.promptId === r)) { + Ow = { active: n, promptId: r }; @@ -24867,49 +24850,49 @@ async function Hw({ active: e, promptId: t = "" } = {}) { } } } -function Uw() { +function Hw() { try { - return !!String(Bw()?.active_prompt_id || "").trim(); + return !!String(zw()?.active_prompt_id || "").trim(); } catch (e) { return console.debug?.(e), !1; } } -function Ww(e = 1200) { +function Uw(e = 1200) { try { - Aw && clearTimeout(Aw); + kw && clearTimeout(kw); } catch (e) { console.debug?.(e); } - Aw = setTimeout(() => { - if (Aw = null, Uw()) { - Ww(e); + kw = setTimeout(() => { + if (kw = null, Hw()) { + Uw(e); return; } let t = dn(); t && Qr(t); }, Math.max(250, Number(e) || 0)); } -function Gw(e) { - import("./chunks/LiveStreamTracker-DuvUAl7N.js").then((t) => { - xw = t; +function Ww(e) { + import("./chunks/LiveStreamTracker-Cc-aAK4I.js").then((t) => { + bw = t; try { t.initLiveStreamTracker(e); } catch (e) { console.warn("[MJR setup] initLiveStreamTracker failed:", e); } }).catch((e) => console.warn("[MJR setup] LiveStreamTracker load failed:", e)), import("./chunks/NodeStreamController-EQygLyLg.js").then((t) => { - Sw = t; + xw = t; try { t.initNodeStream({ app: e, onOutput: (e) => { - ww().then((t) => t?.floatingViewerManager?.feedNodeStream?.(e)).catch((e) => console.debug?.("[NodeStream] MFV output failed", e)); + Cw().then((t) => t?.floatingViewerManager?.feedNodeStream?.(e)).catch((e) => console.debug?.("[NodeStream] MFV output failed", e)); }, onStatus: (t, n) => { try { - let r = (e?.graph ?? e?.canvas?.graph ?? null)?.getNodeById?.(Number(t)), i = Rw(r), a = Fw(r), o = i ? "Subgraph" : zw(r, n); - ww().then((e) => { - e?.floatingViewerManager?.setNodeStreamSelection?.(t, o, i ? a || zw(r, n) : a); + let r = (e?.graph ?? e?.canvas?.graph ?? null)?.getNodeById?.(Number(t)), i = Lw(r), a = Pw(r), o = i ? "Subgraph" : Rw(r, n); + Cw().then((e) => { + e?.floatingViewerManager?.setNodeStreamSelection?.(t, o, i ? a || Rw(r, n) : a); }).catch((e) => console.debug?.("[NodeStream] MFV status failed", e)); } catch (e) { console.debug?.("[NodeStream] onStatus failed", e); @@ -24921,7 +24904,7 @@ function Gw(e) { } }).catch((e) => console.warn("[MJR setup] NodeStream load failed:", e)); } -async function Kw(e, t) { +async function Gw(e, t) { let n = await Me({ app: e, timeoutMs: 4e3 @@ -24940,14 +24923,14 @@ async function Kw(e, t) { } catch (e) { console.debug?.(e); } - gw(r?.api || null, ee), n !== r?.api && gw(n, ee), _w(r, ee), await Gp({ + hw(r?.api || null, ee), n !== r?.api && hw(n, ee), gw(r, ee), await Gp({ api: n, runtime: r, executionRuntime: t, appRef: ar, - liveStreamModule: xw, - ensureExecutionRuntime: Bw, - emitRuntimeStatus: Vw, + liveStreamModule: bw, + ensureExecutionRuntime: zw, + emitRuntimeStatus: Bw, getActiveGridContainer: dn, pushGeneratedAsset: zf, upsertAsset: oi, @@ -24958,41 +24941,41 @@ async function Kw(e, t) { comfyToast: O, t: I, reportError: ee, - registerCleanableListener: yw, - syncExecutionBackendState: Hw + registerCleanableListener: vw, + syncExecutionBackendState: Vw }); } -var qw = sp({ +var Kw = sp({ post: a, ENDPOINTS: z, reportError: ee, extractOutputFiles: cp, - ensureExecutionRuntime: Bw, - emitRuntimeStatus: Vw, + ensureExecutionRuntime: zw, + emitRuntimeStatus: Bw, refreshGeneratedFeedHosts: wf, getActiveGridContainer: dn }); ar.registerExtension({ - name: Ow, + name: Dw, settings: Vt(ar), - commands: YC(ar, { - sidebarTabId: Ew, + commands: JC(ar, { + sidebarTabId: Tw, triggerStartupScan: br }), - keybindings: XC(), - menuCommands: ZC(), - aboutPageBadges: $C(), - bottomPanelTabs: cw(), + keybindings: YC(), + menuCommands: XC(), + aboutPageBadges: QC(), + bottomPanelTabs: sw(), async setup() { - bw({ - cleanupEntryRuntimeFn: vw, - teardownLiveStreamTracker: (e) => xw?.teardownLiveStreamTracker(e), - teardownNodeStream: (e) => Sw?.teardownNodeStream(e), - teardownFloatingViewerManager: Tw, - teardownGeneratedFeed: lw, - teardownAssetsSidebar: rw, - teardownGlobalRuntime: BC, - teardownTopBarMfvButton: jC, + yw({ + cleanupEntryRuntimeFn: _w, + teardownLiveStreamTracker: (e) => bw?.teardownLiveStreamTracker(e), + teardownNodeStream: (e) => xw?.teardownNodeStream(e), + teardownFloatingViewerManager: ww, + teardownGeneratedFeed: cw, + teardownAssetsSidebar: nw, + teardownGlobalRuntime: zC, + teardownTopBarMfvButton: AC, reportError: ee }), Yp(), ze(ar); let e = await Xe({ timeoutMs: 12e3 }) || ar; @@ -25002,25 +24985,25 @@ ar.registerExtension({ } catch (e) { console.debug?.(e); } - wr(), Kr({ enabled: !0 }), zC(), Gw(e), Rt(e, () => { + wr(), Kr({ enabled: !0 }), RC(), Ww(e), Rt(e, () => { let e = dn(); if (e) { - if (L.DEFER_GRID_FETCH_DURING_EXECUTION && Uw()) { - Ww(); + if (L.DEFER_GRID_FETCH_DURING_EXECUTION && Hw()) { + Uw(); return; } Qr(e); } - }), ew(e, { - sidebarTabId: Ew, + }), $C(e, { + sidebarTabId: Tw, triggerStartupScan: br - }), tw(e), setTimeout(() => { + }), ew(e), setTimeout(() => { Wr(); - }, 5e3), Kw(e, qw).catch((e) => ee(e, "entry.api_setup")), nw(e, { sidebarTabId: Ew }) ? Ce("[Majoor] Sidebar tab registered (Vue)") : console.warn("Majoor Assets Manager: extensionManager.registerSidebarTab is unavailable"); + }, 5e3), Gw(e, Kw).catch((e) => ee(e, "entry.api_setup")), tw(e, { sidebarTabId: Tw }) ? Ce("[Majoor] Sidebar tab registered (Vue)") : console.warn("Majoor Assets Manager: extensionManager.registerSidebarTab is unavailable"); try { let e = typeof window < "u" ? window.requestIdleCallback : null, t = () => { try { - ow(); + aw(); } catch (e) { console.debug?.(e); } @@ -25029,26 +25012,26 @@ ar.registerExtension({ } catch (e) { console.debug?.(e); } - Kp({ resolveNodeStreamModule: async () => (Sw ||= await import("./chunks/NodeStreamController-EQygLyLg.js"), Sw) }); + Kp({ resolveNodeStreamModule: async () => (xw ||= await import("./chunks/NodeStreamController-EQygLyLg.js"), xw) }); }, onNodeOutputsUpdated(e) { try { - qw.handleNodeOutputsUpdated(e); + Kw.handleNodeOutputsUpdated(e); } catch (e) { console.debug?.("[Majoor] onNodeOutputsUpdated error", e); } }, getNodeMenuItems(e) { - return mw(e, ar, { sidebarTabId: Ew }); + return pw(e, ar, { sidebarTabId: Tw }); }, getCanvasMenuItems(e) { - return QC(ar, { - sidebarTabId: Ew, + return ZC(ar, { + sidebarTabId: Tw, triggerStartupScan: br }); }, getSelectionToolboxCommands(e) { - return fw(e); + return dw(e); } }); //#endregion diff --git a/ui/features/panel/panelSettingsSync.ts b/ui/features/panel/panelSettingsSync.ts index 57857483..e4d6489d 100644 --- a/ui/features/panel/panelSettingsSync.ts +++ b/ui/features/panel/panelSettingsSync.ts @@ -71,7 +71,11 @@ export function createSettingsSync({ const applySidebarPosition = (nextPosition: any) => { const pos = String(nextPosition || "right").toLowerCase() === "left" ? "left" : "right"; - if (_sidebarPosition === pos) return; + const isAlreadyOrdered = + pos === "left" + ? sidebar?.nextElementSibling === gridWrapper + : gridWrapper?.nextElementSibling === sidebar; + if (_sidebarPosition === pos && isAlreadyOrdered) return; _sidebarPosition = pos; let scrollTop = 0; diff --git a/ui/tests/sidebar_workflow_section.vitest.ts b/ui/tests/sidebar_workflow_section.vitest.ts index e91bc2cb..7ec47e33 100644 --- a/ui/tests/sidebar_workflow_section.vitest.ts +++ b/ui/tests/sidebar_workflow_section.vitest.ts @@ -2,6 +2,7 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; import { mount } from "@vue/test-utils"; +import { nextTick } from "vue"; const drawWorkflowMinimap = vi.fn(); const synthesizeWorkflowFromPromptGraph = vi.fn(() => null); @@ -281,4 +282,45 @@ describe("SidebarWorkflowSection", () => { wrapper.unmount(); }); + + it("shows a compact workflow category label for deep paths", async () => { + const { default: SidebarWorkflowSection } = + await import("../vue/components/panel/sidebar/SidebarWorkflowSection.vue"); + + const wrapper = mount(SidebarWorkflowSection, { + props: { + asset: { + filepath: "F:/workflows/demo.json", + category: "PROJECTS/PERSONAL/02_OUT/VIDEOS/260513/Atopi", + has_generation_data: true, + workflow: { + nodes: [{ id: 1, pos: [0, 0], size: [180, 80], type: "KSampler" }], + links: [], + groups: [], + extra: {}, + }, + }, + }, + attachTo: document.body, + global: { + stubs: { + MButton: MButtonStub, + MTree: MTreeStub, + }, + }, + }); + await nextTick(); + + const categoryBlock = wrapper + .findAll("div") + .find((node) => node.text().includes("Category") && node.text().includes("Atopi")); + + expect(categoryBlock?.text()).toContain("Atopi"); + expect(categoryBlock?.text()).not.toContain("PROJECTS"); + + const input = wrapper.find('input[placeholder="Workflow category"]'); + expect(input.element.value).toBe("PROJECTS/PERSONAL/02_OUT/VIDEOS/260513/Atopi"); + + wrapper.unmount(); + }); }); diff --git a/ui/theme/theme-comfy.css b/ui/theme/theme-comfy.css index b77fbbed..200a0ed2 100644 --- a/ui/theme/theme-comfy.css +++ b/ui/theme/theme-comfy.css @@ -1287,8 +1287,11 @@ } .mjr-assets-manager .mjr-am-browse { + display: flex; + align-items: stretch; flex: 1; min-height: 0; + min-width: 0; overflow: hidden; border-top: 1px solid color-mix(in srgb, var(--mjr-border) 75%, transparent); padding-top: 4px; @@ -1296,6 +1299,8 @@ /* Scrollbars (match ComfyUI feel) */ .mjr-assets-manager .mjr-am-grid-scroll { + flex: 1 1 auto; + min-width: 0; min-height: 0; height: 100%; overflow: auto; @@ -3714,6 +3719,9 @@ /* Sidebar (can be left or right) */ .mjr-sidebar { + position: relative; + z-index: 3; + flex: 0 0 auto; transition: all 0.3s ease; } diff --git a/ui/vue/components/common/RatingEditor.vue b/ui/vue/components/common/RatingEditor.vue index d42cc22b..c3ddb4c6 100644 --- a/ui/vue/components/common/RatingEditor.vue +++ b/ui/vue/components/common/RatingEditor.vue @@ -30,6 +30,10 @@ const props = defineProps({ type: Boolean, default: false, }, + size: { + type: [Number, String], + default: 16, + }, }); const emit = defineEmits(["update:modelValue", "rating-change"]); @@ -51,6 +55,13 @@ const starColor = (starValue) => (starValue <= displayRating.value ? "#FFD45A" : const starTransform = (starValue) => (starValue <= displayRating.value ? "scale(1.1)" : "scale(1)"); +const starSize = computed(() => { + const raw = props.size; + if (typeof raw === "number") return `${Math.max(8, raw)}px`; + const text = String(raw || "").trim(); + return text || "16px"; +}); + const retryDelay = (attemptIndex) => Math.min(100 * 2 ** Math.max(0, attemptIndex - 1), 2000); const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); @@ -264,7 +275,7 @@ watch( :style="{ color: starColor(i), transform: starTransform(i), - fontSize: '16px', + fontSize: starSize, background: 'none', border: 'none', cursor: disabled ? 'default' : 'pointer', diff --git a/ui/vue/components/panel/SearchBar.vue b/ui/vue/components/panel/SearchBar.vue index 555e1a1d..1a992bfe 100644 --- a/ui/vue/components/panel/SearchBar.vue +++ b/ui/vue/components/panel/SearchBar.vue @@ -35,6 +35,7 @@ const dataListRef = ref(null); const similarBtnRef = ref(null); const semanticBtnRef = ref(null); const dataListId = createUniqueId("mjr-search-autocomplete-", 8); +const METADATA_SEARCH_MODE = "AND"; const resolveDomElement = (value) => value?.$el || value || null; const getSearchInputEl = () => resolveDomElement(searchInputRef.value); @@ -42,7 +43,7 @@ const getSearchInputEl = () => resolveDomElement(searchInputRef.value); // Local semantic mode state (synced with settings, not persisted) const semanticMode = ref(false); const semanticEnabled = ref(true); -const metadataMode = ref(String(panelStore.metadataSearchMode || "AND").toUpperCase() === "OR" ? "OR" : "AND"); +const metadataMode = ref(METADATA_SEARCH_MODE); let metadataKeysCache = null; let metadataKeysPromise = null; @@ -90,12 +91,6 @@ const semanticBtnStyle = computed(() => { }; }); -const metadataModeTitle = computed(() => - metadataMode.value === "OR" - ? t("search.metadataModeOr", "Metadata prefix terms match any tag (OR)") - : t("search.metadataModeAnd", "Metadata prefix terms must all match (AND)"), -); - const syncSemanticDataset = () => { try { const input = getSearchInputEl(); @@ -133,24 +128,12 @@ const toggleSemanticMode = () => { const handleSearchInput = async (e) => { const value = e.target.value || ""; panelStore.searchQuery = value; - panelStore.metadataSearchMode = metadataMode.value; + panelStore.metadataSearchMode = METADATA_SEARCH_MODE; syncSemanticDataset(); emitSearchChange({ query: value }); await handleAutocomplete(); }; -const toggleMetadataMode = () => { - metadataMode.value = metadataMode.value === "OR" ? "AND" : "OR"; - panelStore.metadataSearchMode = metadataMode.value; - syncSemanticDataset(); - emitSearchChange({ metadataMode: metadataMode.value }); - try { - getSearchInputEl()?.dispatchEvent?.(new Event("input", { bubbles: true })); - } catch (e) { - console.debug?.(e); - } -}; - const getLastSearchToken = (value) => { const parts = String(value || "").split(/\s+/); return parts[parts.length - 1] || ""; @@ -261,8 +244,10 @@ watch(semanticMode, () => { watch( () => panelStore.metadataSearchMode, (newVal) => { - const next = String(newVal || "AND").toUpperCase() === "OR" ? "OR" : "AND"; - if (metadataMode.value !== next) metadataMode.value = next; + if (String(newVal || "").toUpperCase() !== METADATA_SEARCH_MODE) { + panelStore.metadataSearchMode = METADATA_SEARCH_MODE; + } + if (metadataMode.value !== METADATA_SEARCH_MODE) metadataMode.value = METADATA_SEARCH_MODE; syncSemanticDataset(); }, ); @@ -273,6 +258,7 @@ onMounted(() => { if (input) { input.value = panelStore.searchQuery || ""; } + panelStore.metadataSearchMode = METADATA_SEARCH_MODE; } catch (e) { console.debug?.(e); } @@ -319,20 +305,6 @@ defineExpose({