Files
backend/dev-check.txt
T
34047007@qq.com a6cd99a4ca
CI / backend (push) Canceled after 0s
CI / frontend (push) Canceled after 0s
feat: initial commit - oncology literature search platform
OncoLit: a multi-tenant oncology literature search, feed, and
collaboration platform. Built with FastAPI + Vue 3 + PostgreSQL.
Includes PubMed pipeline, drug approvals, AI summaries, and
systematic review tools.
2026-07-27 07:59:18 +08:00

899 lines
92 KiB
Plaintext

import { createHotContext as __vite__createHotContext } from "/@vite/client";import.meta.hot = __vite__createHotContext("/src/views/public/HomeView.vue?v=1");/* unplugin-vue-components disabled */import __unplugin_components_2 from "/src/components/literature/LiteraturePreviewDrawer.vue?t=1783728117686";
import __unplugin_components_1 from "/src/components/literature/LiteratureCard.vue?t=1783728117686";
import __unplugin_components_0 from "/src/components/search/AdvancedSearchPanel.vue?t=1783728117686";
import { defineComponent as _defineComponent } from "/node_modules/.vite/deps/vue.js?v=3cfd8f60";
import { ref, computed, onMounted, onBeforeUnmount, watch } from "/node_modules/.vite/deps/vue.js?v=3cfd8f60";
import { useRouter, useRoute } from "/node_modules/.vite/deps/vue-router.js?v=3cfd8f60";
import { NButton, NEmpty, NIcon } from "/node_modules/.vite/deps/naive-ui.js?v=6ae179ec";
import { ChevronDownOutline, ChevronUpOutline, CloseCircleOutline, OptionsOutline, PersonAddOutline, RefreshOutline, SearchOutline } from "/node_modules/.vite/deps/@vicons_ionicons5.js?v=78995c2b";
import { api } from "/src/api/client.ts?t=1783728117686&v=1";
import { useAuthStore } from "/src/stores/auth.ts?t=1783728117686&v=1";
import { useToast } from "/src/composables/useToast.ts?v=1";
import { useLiteraturePreview } from "/src/composables/useLiteraturePreview.ts?v=1";
import PageSkeleton from "/src/components/common/PageSkeleton.vue?v=1";
const hotPageSize = 5;
const hotMaxPage = 6;
const _sfc_main = /* @__PURE__ */ _defineComponent({
__name: "HomeView",
setup(__props, { expose: __expose }) {
__expose();
const router = useRouter();
const route = useRoute();
const auth = useAuthStore();
const toast = useToast();
const searchParams = ref({
query: "",
field: "all",
tag_ids: [],
date_from: null,
date_to: null,
retracted: "",
negative_result: "",
precision_mode: "majr",
page: 1,
page_size: 20,
sort: "date"
});
const feedItems = ref([]);
const feedTotal = ref(0);
const loading = ref(false);
const searched = ref(false);
const platformStats = ref({ literature_total: 0, journal_total: 0, daily_avg_30d: 0 });
const statsLoading = ref(true);
const hotArticles = ref([]);
const hotPage = ref(1);
const hotTotal = ref(0);
const hotAvailablePages = computed(() => Math.min(hotMaxPage, Math.ceil(hotTotal.value / hotPageSize)));
async function loadHotArticles() {
try {
const { data } = await api.get("/public/hot-articles", { params: { page: hotPage.value, page_size: hotPageSize } });
hotArticles.value = data.items || [];
hotTotal.value = data.total || 0;
} catch (e) {
}
}
function refreshHot() {
const max = Math.min(hotMaxPage, Math.ceil(hotTotal.value / hotPageSize) || 1);
hotPage.value = hotPage.value >= max ? 1 : hotPage.value + 1;
loadHotArticles();
}
async function loadStats() {
try {
const { data } = await api.get("/public/stats");
platformStats.value = data;
} catch (e) {
} finally {
statsLoading.value = false;
}
}
const allTags = ref([]);
const selectedTagIds = ref([]);
const showAllTags = ref(false);
const isMobile = ref(window.innerWidth < 768);
const showAdvanced = ref(false);
function onDocumentMouseDown(e) {
if (!showAdvanced.value) return;
if (!e.target?.closest(".adv-filter-panel")) {
showAdvanced.value = false;
}
}
const localQuery = ref("");
const { showPreview, previewPmid, openPreview: setPreviewPmid, closePreview } = useLiteraturePreview();
const saving = ref(/* @__PURE__ */ new Set());
const savedPmids = ref(/* @__PURE__ */ new Set());
const lastVisitStr = localStorage.getItem("home_last_visit");
const dividerIndex = computed(() => {
if (!lastVisitStr || !feedItems.value.length) return -1;
const lastDt = new Date(parseInt(lastVisitStr)).toLocaleDateString("sv");
const idx = feedItems.value.findIndex((item) => {
const d = item.pub_date?.slice(0, 10);
return d && d <= lastDt;
});
return idx > 0 ? idx : -1;
});
async function fetchData(resetPage = true) {
if (resetPage) searchParams.value.page = 1;
loading.value = true;
try {
const body = { page: searchParams.value.page, page_size: searchParams.value.page_size, sort: searchParams.value.sort };
if (searchParams.value.query) body.query = searchParams.value.query;
if (searchParams.value.field !== "all") body.field = searchParams.value.field;
if (searchParams.value.tag_ids.length) body.tag_ids = searchParams.value.tag_ids;
if (searchParams.value.date_from) body.date_from = searchParams.value.date_from;
if (searchParams.value.date_to) body.date_to = searchParams.value.date_to;
if (searchParams.value.retracted) body.retracted = searchParams.value.retracted;
if (searchParams.value.negative_result) body.negative_result = searchParams.value.negative_result;
if (searchParams.value.precision_mode) body.precision_mode = searchParams.value.precision_mode;
const { data } = await api.post("/features/search/advanced", body);
if (resetPage) {
feedItems.value = data.items || [];
} else {
feedItems.value.push(...data.items || []);
}
feedTotal.value = data.total || 0;
searched.value = true;
} catch (e) {
toast.apiError(e, "搜索文献失败,请重试");
} finally {
loading.value = false;
}
}
function toggleTag(tagId) {
const id = String(tagId);
const idx = selectedTagIds.value.indexOf(id);
if (idx >= 0) {
selectedTagIds.value.splice(idx, 1);
} else {
selectedTagIds.value.push(id);
}
searchParams.value.tag_ids = [...selectedTagIds.value];
fetchData();
}
const cancerTags = computed(() => allTags.value.filter((t) => t.tag_category === "cancer" && t.level === 2));
const hasMoreTags = computed(() => cancerTags.value.length > 7);
const visibleTags = computed(() => {
if (showAllTags.value) return cancerTags.value;
return cancerTags.value.slice(0, 7);
});
function doLocalSearch() {
showAdvanced.value = false;
searchParams.value.field = "all";
if (localQuery.value.trim()) {
searchParams.value.query = localQuery.value;
} else {
searchParams.value.query = "";
}
fetchData();
}
function clearSearch() {
localQuery.value = "";
searchParams.value = {
query: "",
field: "all",
tag_ids: [],
date_from: null,
date_to: null,
retracted: "",
negative_result: "",
precision_mode: "majr",
page: 1,
page_size: 20,
sort: "date"
};
selectedTagIds.value = [];
showAdvanced.value = false;
fetchData();
}
function handleAdvancedSearch(params) {
searchParams.value.query = params.query;
searchParams.value.field = params.field;
searchParams.value.date_from = params.date_from;
searchParams.value.date_to = params.date_to;
searchParams.value.tag_ids = params.tag_ids;
searchParams.value.retracted = params.retracted;
searchParams.value.negative_result = params.negative_result;
selectedTagIds.value = [...params.tag_ids];
showAdvanced.value = false;
fetchData();
}
async function saveLiterature(item) {
if (!auth.isAuthenticated) {
router.push("/auth/login");
return;
}
if (saving.value.has(item.pmid) || savedPmids.value.has(item.pmid)) return;
saving.value = new Set(saving.value).add(item.pmid);
try {
await api.post(`/literature/${item.pmid}/save`);
savedPmids.value = new Set(savedPmids.value).add(item.pmid);
toast.success("已收藏");
} catch (e) {
toast.apiError(e, "收藏文献失败,请重试");
} finally {
const s = new Set(saving.value);
s.delete(item.pmid);
saving.value = s;
}
}
function openPreview(item) {
if (item.pmid) setPreviewPmid(item.pmid);
}
function goDetail(item) {
closePreview();
const q = searchParams.value.query;
router.push(q ? `/literature/${item.pmid}?q=${encodeURIComponent(q)}` : `/literature/${item.pmid}`);
}
async function loadSavedPmids() {
if (!auth.isAuthenticated) return;
try {
const { data } = await api.get("/literature/saved");
savedPmids.value = new Set((data.items || []).map((i) => i.pmid));
} catch (e) {
toast.apiError(e, "加载收藏状态失败");
}
}
const loadingMore = ref(false);
const hasMore = computed(() => feedItems.value.length < feedTotal.value);
const showScrollTop = ref(false);
function onScroll() {
showScrollTop.value = window.scrollY > window.innerHeight;
}
function scrollToTop() {
window.scrollTo({ top: 0, behavior: "smooth" });
}
function onResize() {
isMobile.value = window.innerWidth < 768;
}
async function loadMore() {
if (loadingMore.value || !hasMore.value) return;
loadingMore.value = true;
searchParams.value.page++;
try {
const body = { page: searchParams.value.page, page_size: searchParams.value.page_size, sort: searchParams.value.sort };
if (searchParams.value.query) body.query = searchParams.value.query;
if (searchParams.value.field !== "all") body.field = searchParams.value.field;
if (searchParams.value.tag_ids.length) body.tag_ids = searchParams.value.tag_ids;
if (searchParams.value.date_from) body.date_from = searchParams.value.date_from;
if (searchParams.value.date_to) body.date_to = searchParams.value.date_to;
if (searchParams.value.retracted) body.retracted = searchParams.value.retracted;
if (searchParams.value.negative_result) body.negative_result = searchParams.value.negative_result;
if (searchParams.value.precision_mode) body.precision_mode = searchParams.value.precision_mode;
const { data } = await api.post("/features/search/advanced", body);
feedItems.value.push(...data.items || []);
feedTotal.value = data.total || 0;
} catch (e) {
toast.apiError(e, "加载更多失败,请重试");
} finally {
loadingMore.value = false;
}
}
function restoreFromUrl() {
const tag = route.query.tag;
const date = route.query.date;
const q = route.query.q;
if (tag) {
const ids = tag.split(",");
selectedTagIds.value = ids;
searchParams.value.tag_ids = ids;
}
if (date) {
searchParams.value.date_from = date;
searchParams.value.date_to = date;
}
if (q) {
searchParams.value.query = q;
localQuery.value = q;
}
const p = route.query.page;
if (p) {
searchParams.value.page = parseInt(p) || 1;
}
}
const searchKey = computed(
() => JSON.stringify([searchParams.value.query, searchParams.value.tag_ids, searchParams.value.date_from, searchParams.value.date_to, searchParams.value.page, searchParams.value.sort])
);
watch(searchKey, () => {
const query = {};
if (searchParams.value.tag_ids.length) query.tag = searchParams.value.tag_ids.join(",");
if (searchParams.value.date_from) query.date = searchParams.value.date_from;
if (searchParams.value.query) query.q = searchParams.value.query;
router.replace({ query });
});
watch(() => route.query, (q) => {
if (q && q._t) {
clearSearch();
}
});
onMounted(async () => {
restoreFromUrl();
loadStats();
loadHotArticles();
try {
const { data } = await api.get("/public/tags");
allTags.value = data.tags || [];
} catch (e) {
toast.apiError(e, "加载标签失败");
}
await fetchData();
await loadSavedPmids();
localStorage.setItem("home_last_visit", String(Date.now()));
window.addEventListener("scroll", onScroll);
window.addEventListener("resize", onResize);
document.addEventListener("mousedown", onDocumentMouseDown);
});
onBeforeUnmount(() => {
window.removeEventListener("scroll", onScroll);
window.removeEventListener("resize", onResize);
document.removeEventListener("mousedown", onDocumentMouseDown);
});
const __returned__ = { router, route, auth, toast, searchParams, feedItems, feedTotal, loading, searched, platformStats, statsLoading, hotArticles, hotPage, hotPageSize, hotTotal, hotMaxPage, hotAvailablePages, loadHotArticles, refreshHot, loadStats, allTags, selectedTagIds, showAllTags, isMobile, showAdvanced, onDocumentMouseDown, localQuery, showPreview, previewPmid, setPreviewPmid, closePreview, saving, savedPmids, lastVisitStr, dividerIndex, fetchData, toggleTag, cancerTags, hasMoreTags, visibleTags, doLocalSearch, clearSearch, handleAdvancedSearch, saveLiterature, openPreview, goDetail, loadSavedPmids, loadingMore, hasMore, showScrollTop, onScroll, scrollToTop, onResize, loadMore, restoreFromUrl, searchKey, get NButton() {
return NButton;
}, get NEmpty() {
return NEmpty;
}, get NIcon() {
return NIcon;
}, get ChevronDownOutline() {
return ChevronDownOutline;
}, get ChevronUpOutline() {
return ChevronUpOutline;
}, get CloseCircleOutline() {
return CloseCircleOutline;
}, get OptionsOutline() {
return OptionsOutline;
}, get PersonAddOutline() {
return PersonAddOutline;
}, get RefreshOutline() {
return RefreshOutline;
}, get SearchOutline() {
return SearchOutline;
}, PageSkeleton };
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
return __returned__;
}
});
import { createElementVNode as _createElementVNode, createCommentVNode as _createCommentVNode, vModelText as _vModelText, withKeys as _withKeys, withDirectives as _withDirectives, createVNode as _createVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, renderList as _renderList, Fragment as _Fragment, createElementBlock as _createElementBlock, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass } from "/node_modules/.vite/deps/vue.js?v=3cfd8f60";
const _hoisted_1 = { class: "home" };
const _hoisted_2 = { class: "content-grid" };
const _hoisted_3 = { class: "content-grid-main" };
const _hoisted_4 = { class: "section section-toolbar" };
const _hoisted_5 = { class: "search-row" };
const _hoisted_6 = { class: "search-row-left" };
const _hoisted_7 = { class: "search-input-group" };
const _hoisted_8 = { class: "search-input-top" };
const _hoisted_9 = { class: "search-input-actions" };
const _hoisted_10 = {
key: 0,
class: "section"
};
const _hoisted_11 = { class: "tag-bar" };
const _hoisted_12 = ["onClick"];
const _hoisted_13 = {
key: 0,
class: "tag-x"
};
const _hoisted_14 = { class: "section section-list" };
const _hoisted_15 = {
key: 0,
class: "read-divider"
};
const _hoisted_16 = {
key: 0,
class: "load-more"
};
const _hoisted_17 = { class: "content-grid-side" };
const _hoisted_18 = {
key: 0,
class: "section-hot-side"
};
const _hoisted_19 = { class: "hot-header" };
const _hoisted_20 = { class: "hot-header-right" };
const _hoisted_21 = { class: "hot-page-dots" };
const _hoisted_22 = { class: "hot-list" };
const _hoisted_23 = ["href"];
const _hoisted_24 = { class: "hot-content" };
const _hoisted_25 = ["title"];
const _hoisted_26 = { class: "hot-meta" };
const _hoisted_27 = {
key: 1,
class: "sidebar-stats"
};
const _hoisted_28 = { class: "sidebar-stat-item" };
const _hoisted_29 = { class: "sidebar-stat-num" };
const _hoisted_30 = { class: "sidebar-stat-item" };
const _hoisted_31 = { class: "sidebar-stat-num" };
const _hoisted_32 = { class: "sidebar-stat-item" };
const _hoisted_33 = { class: "sidebar-stat-num" };
const _hoisted_34 = {
key: 0,
class: "section section-cta"
};
const _hoisted_35 = { class: "cta-banner" };
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_AdvancedSearchPanel = __unplugin_components_0;
const _component_LiteratureCard = __unplugin_components_1;
const _component_LiteraturePreviewDrawer = __unplugin_components_2;
return _openBlock(), _createElementBlock("div", _hoisted_1, [
_cache[18] || (_cache[18] = _createElementVNode(
"h1",
{ class: "visually-hidden" },
"OncoLit 肿瘤科研文献中心——每日更新的肿瘤学文献平台",
-1
/* CACHED */
)),
_createCommentVNode(" ====== 内容网格:左侧(搜索 + 标签 + 文献)+ 右侧(热榜) ====== "),
_createElementVNode("div", _hoisted_2, [
_createElementVNode("div", _hoisted_3, [
_createCommentVNode(" 搜索工具栏 "),
_createElementVNode("section", _hoisted_4, [
_createElementVNode("div", _hoisted_5, [
_createElementVNode("div", _hoisted_6, [
_createElementVNode("div", _hoisted_7, [
_createElementVNode("div", _hoisted_8, [
_withDirectives(_createElementVNode(
"input",
{
class: "search-input",
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.localQuery = $event),
placeholder: "搜索标题、摘要、PMID、DOI...",
onKeyup: _withKeys($setup.doLocalSearch, ["enter"])
},
null,
544
/* NEED_HYDRATION, NEED_PATCH */
), [
[_vModelText, $setup.localQuery]
]),
$setup.localQuery ? (_openBlock(), _createBlock($setup["NButton"], {
key: 0,
text: "",
size: "tiny",
onClick: $setup.clearSearch,
class: "clear-search-btn",
title: "清除搜索"
}, {
icon: _withCtx(() => [
_createVNode($setup["NIcon"], { size: "16" }, {
default: _withCtx(() => [
_createVNode($setup["CloseCircleOutline"])
]),
_: 1
/* STABLE */
})
]),
_: 1
/* STABLE */
})) : _createCommentVNode("v-if", true)
]),
_createElementVNode("div", _hoisted_9, [
_createVNode($setup["NButton"], {
text: "",
size: "tiny",
onClick: _cache[1] || (_cache[1] = ($event) => $setup.showAdvanced = !$setup.showAdvanced),
title: $setup.showAdvanced ? "收起筛选" : "高级搜索",
class: "adv-icon-btn"
}, {
icon: _withCtx(() => [
_createVNode($setup["NIcon"], { size: "16" }, {
default: _withCtx(() => [
_createVNode($setup["OptionsOutline"])
]),
_: 1
/* STABLE */
})
]),
_: 1
/* STABLE */
}, 8, ["title"]),
_createVNode($setup["NButton"], {
size: "small",
type: "primary",
onClick: $setup.doLocalSearch,
class: "sky-btn search-submit-btn"
}, {
icon: _withCtx(() => [
_createVNode($setup["NIcon"], { size: "14" }, {
default: _withCtx(() => [
_createVNode($setup["SearchOutline"])
]),
_: 1
/* STABLE */
})
]),
default: _withCtx(() => [
_cache[5] || (_cache[5] = _createTextVNode(
"搜索 ",
-1
/* CACHED */
))
]),
_: 1
/* STABLE */
})
])
])
])
]),
_createVNode(_component_AdvancedSearchPanel, {
show: $setup.showAdvanced,
loading: $setup.loading,
onSearch: $setup.handleAdvancedSearch
}, null, 8, ["show", "loading"])
]),
_createCommentVNode(" 热门标签快速筛选 "),
$setup.cancerTags.length ? (_openBlock(), _createElementBlock("section", _hoisted_10, [
_createElementVNode("div", _hoisted_11, [
_cache[8] || (_cache[8] = _createElementVNode(
"span",
{ class: "tag-label" },
"热门",
-1
/* CACHED */
)),
(_openBlock(true), _createElementBlock(
_Fragment,
null,
_renderList($setup.visibleTags, (t) => {
return _openBlock(), _createElementBlock("span", {
key: t.id,
class: _normalizeClass(["tag-pill", { active: $setup.selectedTagIds.includes(String(t.id)) }]),
onClick: ($event) => $setup.toggleTag(t.id)
}, [
_createTextVNode(
_toDisplayString(t.name_zh),
1
/* TEXT */
),
$setup.selectedTagIds.includes(String(t.id)) ? (_openBlock(), _createElementBlock("span", _hoisted_13, "✕")) : _createCommentVNode("v-if", true)
], 10, _hoisted_12);
}),
128
/* KEYED_FRAGMENT */
)),
$setup.hasMoreTags && !$setup.showAllTags ? (_openBlock(), _createElementBlock("span", {
key: 0,
class: "tag-expand-btn",
onClick: _cache[2] || (_cache[2] = ($event) => $setup.showAllTags = true)
}, [
_cache[6] || (_cache[6] = _createTextVNode(
"更多 ",
-1
/* CACHED */
)),
_createVNode($setup["NIcon"], {
size: "13",
style: { "vertical-align": "-2px" }
}, {
default: _withCtx(() => [
_createVNode($setup["ChevronDownOutline"])
]),
_: 1
/* STABLE */
})
])) : _createCommentVNode("v-if", true),
$setup.showAllTags ? (_openBlock(), _createElementBlock("span", {
key: 1,
class: "tag-expand-btn",
onClick: _cache[3] || (_cache[3] = ($event) => $setup.showAllTags = false)
}, [
_cache[7] || (_cache[7] = _createTextVNode(
"收起 ",
-1
/* CACHED */
)),
_createVNode($setup["NIcon"], {
size: "13",
style: { "vertical-align": "-2px" }
}, {
default: _withCtx(() => [
_createVNode($setup["ChevronUpOutline"])
]),
_: 1
/* STABLE */
})
])) : _createCommentVNode("v-if", true)
])
])) : _createCommentVNode("v-if", true),
_createCommentVNode(" 文献列表 "),
_createElementVNode("section", _hoisted_14, [
_createVNode($setup["PageSkeleton"], {
loading: $setup.loading && !$setup.feedItems.length
}, {
default: _withCtx(() => [
!$setup.loading && !$setup.feedItems.length ? (_openBlock(), _createBlock($setup["NEmpty"], {
key: 0,
description: "暂无文献"
})) : _createCommentVNode("v-if", true),
$setup.feedItems.length ? (_openBlock(), _createElementBlock(
_Fragment,
{ key: 1 },
[
(_openBlock(true), _createElementBlock(
_Fragment,
null,
_renderList($setup.feedItems, (item, idx) => {
return _openBlock(), _createElementBlock(
_Fragment,
{
key: item.id || item.pmid
},
[
idx === $setup.dividerIndex ? (_openBlock(), _createElementBlock("div", _hoisted_15, [..._cache[9] || (_cache[9] = [
_createElementVNode(
"span",
{ class: "read-divider-line" },
null,
-1
/* CACHED */
),
_createElementVNode(
"span",
{ class: "read-divider-text" },
"—— 上次看到这里 ——",
-1
/* CACHED */
),
_createElementVNode(
"span",
{ class: "read-divider-line" },
null,
-1
/* CACHED */
)
])])) : _createCommentVNode("v-if", true),
_createVNode(_component_LiteratureCard, {
item,
showSave: $setup.auth.isAuthenticated,
savedPmids: $setup.savedPmids,
searchQuery: $setup.searchParams.query,
onDetail: $setup.goDetail,
onPreview: $setup.openPreview,
onSave: $setup.saveLiterature
}, null, 8, ["item", "showSave", "savedPmids", "searchQuery"])
],
64
/* STABLE_FRAGMENT */
);
}),
128
/* KEYED_FRAGMENT */
)),
$setup.hasMore ? (_openBlock(), _createElementBlock("div", _hoisted_16, [
_createVNode($setup["NButton"], {
class: "sky-btn",
loading: $setup.loadingMore,
onClick: $setup.loadMore,
size: "small"
}, {
icon: _withCtx(() => [
_createVNode($setup["NIcon"], { size: "14" }, {
default: _withCtx(() => [
_createVNode($setup["ChevronDownOutline"])
]),
_: 1
/* STABLE */
})
]),
default: _withCtx(() => [
_cache[10] || (_cache[10] = _createTextVNode(
"展示更多",
-1
/* CACHED */
))
]),
_: 1
/* STABLE */
}, 8, ["loading"])
])) : _createCommentVNode("v-if", true)
],
64
/* STABLE_FRAGMENT */
)) : _createCommentVNode("v-if", true)
]),
_: 1
/* STABLE */
}, 8, ["loading"])
])
]),
_createElementVNode("div", _hoisted_17, [
$setup.hotArticles.length ? (_openBlock(), _createElementBlock("section", _hoisted_18, [
_createElementVNode("div", _hoisted_19, [
_cache[12] || (_cache[12] = _createElementVNode(
"span",
null,
"🔥 热搜",
-1
/* CACHED */
)),
_createElementVNode("div", _hoisted_20, [
_createElementVNode("span", _hoisted_21, [
(_openBlock(true), _createElementBlock(
_Fragment,
null,
_renderList($setup.hotAvailablePages, (p) => {
return _openBlock(), _createElementBlock(
"span",
{
key: p,
class: _normalizeClass(["hot-page-dot", { active: $setup.hotPage === p }])
},
null,
2
/* CLASS */
);
}),
128
/* KEYED_FRAGMENT */
))
]),
_createVNode($setup["NButton"], {
text: "",
size: "tiny",
style: { "font-size": "12px", "color": "var(--text-muted)" },
onClick: $setup.refreshHot
}, {
icon: _withCtx(() => [
_createVNode($setup["NIcon"], { size: "12" }, {
default: _withCtx(() => [
_createVNode($setup["RefreshOutline"])
]),
_: 1
/* STABLE */
})
]),
default: _withCtx(() => [
_cache[11] || (_cache[11] = _createTextVNode(
"换一批 ",
-1
/* CACHED */
))
]),
_: 1
/* STABLE */
})
])
]),
_createElementVNode("div", _hoisted_22, [
(_openBlock(true), _createElementBlock(
_Fragment,
null,
_renderList($setup.hotArticles, (art, i) => {
return _openBlock(), _createElementBlock("a", {
key: art.id,
class: "hot-item",
href: `/literature/${art.pmid}`
}, [
_createElementVNode(
"span",
{
class: _normalizeClass(["hot-rank", { "hot-rank-top": ($setup.hotPage - 1) * $setup.hotPageSize + i + 1 <= 3 }])
},
_toDisplayString(($setup.hotPage - 1) * $setup.hotPageSize + i + 1),
3
/* TEXT, CLASS */
),
_createElementVNode("div", _hoisted_24, [
_createElementVNode("span", {
class: "hot-title",
title: art.title
}, _toDisplayString(art.title), 9, _hoisted_25),
_createElementVNode(
"span",
_hoisted_26,
_toDisplayString(art.journal) + " · " + _toDisplayString(art.cited_by_count ?? 0) + " 被引",
1
/* TEXT */
)
])
], 8, _hoisted_23);
}),
128
/* KEYED_FRAGMENT */
))
])
])) : _createCommentVNode("v-if", true),
!$setup.statsLoading && $setup.platformStats.literature_total > 0 ? (_openBlock(), _createElementBlock("div", _hoisted_27, [
_createElementVNode("div", _hoisted_28, [
_createElementVNode(
"span",
_hoisted_29,
_toDisplayString($setup.platformStats.literature_total.toLocaleString()),
1
/* TEXT */
),
_cache[13] || (_cache[13] = _createElementVNode(
"span",
{ class: "sidebar-stat-label" },
"文献总量",
-1
/* CACHED */
))
]),
_createElementVNode("div", _hoisted_30, [
_createElementVNode(
"span",
_hoisted_31,
_toDisplayString($setup.platformStats.journal_total),
1
/* TEXT */
),
_cache[14] || (_cache[14] = _createElementVNode(
"span",
{ class: "sidebar-stat-label" },
"收录期刊",
-1
/* CACHED */
))
]),
_createElementVNode("div", _hoisted_32, [
_createElementVNode(
"span",
_hoisted_33,
_toDisplayString($setup.platformStats.daily_avg_30d.toFixed(1)),
1
/* TEXT */
),
_cache[15] || (_cache[15] = _createElementVNode(
"span",
{ class: "sidebar-stat-label" },
"日均新增",
-1
/* CACHED */
))
])
])) : _createCommentVNode("v-if", true)
])
]),
_createCommentVNode(" ====== 注册引导 CTA(未登录) ====== "),
!$setup.auth.isAuthenticated && $setup.feedItems.length > 3 ? (_openBlock(), _createElementBlock("section", _hoisted_34, [
_createElementVNode("div", _hoisted_35, [
_cache[17] || (_cache[17] = _createElementVNode(
"div",
{ class: "cta-text" },
[
_createElementVNode("div", { class: "cta-title" }, "🔒 注册后获得完整功能"),
_createElementVNode("div", { class: "cta-desc" }, "收藏文献 · 设置关注领域 · 每日精准推送 · 团队共享")
],
-1
/* CACHED */
)),
_createVNode($setup["NButton"], {
class: "sky-btn",
type: "primary",
size: "large",
onClick: _cache[4] || (_cache[4] = ($event) => $setup.router.push("/auth/register"))
}, {
icon: _withCtx(() => [
_createVNode($setup["NIcon"], { size: "14" }, {
default: _withCtx(() => [
_createVNode($setup["PersonAddOutline"])
]),
_: 1
/* STABLE */
})
]),
default: _withCtx(() => [
_cache[16] || (_cache[16] = _createTextVNode(
"免费注册",
-1
/* CACHED */
))
]),
_: 1
/* STABLE */
})
])
])) : _createCommentVNode("v-if", true),
_createCommentVNode(" ====== 文献预览抽屉 ====== "),
_createVNode(_component_LiteraturePreviewDrawer, {
show: $setup.showPreview,
pmid: $setup.previewPmid,
onClose: $setup.closePreview,
onGoDetail: $setup.goDetail
}, null, 8, ["show", "pmid", "onClose"]),
_createCommentVNode(" 回到顶部 "),
$setup.showScrollTop ? (_openBlock(), _createElementBlock("button", {
key: 1,
class: "scroll-top",
onClick: $setup.scrollToTop
}, "↑")) : _createCommentVNode("v-if", true)
]);
}
import "/src/views/public/HomeView.vue?v=1&vue&type=style&index=0&scoped=790ec39d&lang.css";
_sfc_main.__hmrId = "790ec39d";
typeof __VUE_HMR_RUNTIME__ !== "undefined" && __VUE_HMR_RUNTIME__.createRecord(_sfc_main.__hmrId, _sfc_main);
import.meta.hot.on("file-changed", ({ file }) => {
__VUE_HMR_RUNTIME__.CHANGED_FILE = file;
});
import.meta.hot.accept((mod) => {
if (!mod) return;
const { default: updated, _rerender_only } = mod;
if (_rerender_only) {
__VUE_HMR_RUNTIME__.rerender(updated.__hmrId, updated.render);
} else {
__VUE_HMR_RUNTIME__.reload(updated.__hmrId, updated);
}
});
import _export_sfc from "/@id/__x00__plugin-vue:export-helper";
export default /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-790ec39d"], ["__file", "D:/ClaudeCode/frontend/src/views/public/HomeView.vue"]]);
//# sourceMappingURL=data:application/json;base64,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Y0FBTyxLQUFJO0FBQUE7VUFBK0IsTUFBSSxTQUFDLE1BQTZDO0FBQUEsWUFBN0MsYUFBNkMsbUJBQXRDLE1BQUssS0FBSTtBQUFBLGdDQUFDLE1BQW9CO0FBQUEsZ0JBQXBCLGFBQW9CO0FBQUE7Ozs7OzRCQUFtQixNQUFJO0FBQUE7Y0FBSjtBQUFBLGNBQUk7QUFBQTtBQUFBO0FBQUE7Ozs7OztJQUk1SztBQUFBLElBQ0EsYUFLRTtBQUFBLE1BSkMsTUFBTTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sU0FBTztBQUFBLE1BQ1AsWUFBVTtBQUFBO0lBR2I7QUFBQSxJQUNjLHNDQUFkLG9CQUErRTtBQUFBO01BQWxELE9BQU07QUFBQSxNQUFjLFNBQU87QUFBQSxPQUFhLEdBQUMiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIkhvbWVWaWV3LnZ1ZSJdLCJzb3VyY2VzQ29udGVudCI6WyI8c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgeyByZWYsIGNvbXB1dGVkLCBvbk1vdW50ZWQsIG9uQmVmb3JlVW5tb3VudCwgd2F0Y2ggfSBmcm9tICd2dWUnXHJcbmltcG9ydCB7IHVzZVJvdXRlciwgdXNlUm91dGUgfSBmcm9tICd2dWUtcm91dGVyJ1xyXG5pbXBvcnQgeyBOQnV0dG9uLCBORW1wdHksIE5JY29uIH0gZnJvbSAnbmFpdmUtdWknXHJcbmltcG9ydCB7IENoZXZyb25Eb3duT3V0bGluZSwgQ2hldnJvblVwT3V0bGluZSwgQ2xvc2VDaXJjbGVPdXRsaW5lLCBPcHRpb25zT3V0bGluZSwgUGVyc29uQWRkT3V0bGluZSwgUmVmcmVzaE91dGxpbmUsIFNlYXJjaE91dGxpbmUgfSBmcm9tICdAdmljb25zL2lvbmljb25zNSdcclxuaW1wb3J0IHsgYXBpIH0gZnJvbSAnLi4vLi4vYXBpL2NsaWVudCdcclxuaW1wb3J0IHsgdXNlQXV0aFN0b3JlIH0gZnJvbSAnLi4vLi4vc3RvcmVzL2F1dGgnXHJcbmltcG9ydCB7IHVzZVRvYXN0IH0gZnJvbSAnLi4vLi4vY29tcG9zYWJsZXMvdXNlVG9hc3QnXHJcbmltcG9ydCB7IHVzZUxpdGVyYXR1cmVQcmV2aWV3IH0gZnJvbSAnLi4vLi4vY29tcG9zYWJsZXMvdXNlTGl0ZXJhdHVyZVByZXZpZXcnXHJcbmltcG9ydCBQYWdlU2tlbGV0b24gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jb21tb24vUGFnZVNrZWxldG9uLnZ1ZSdcclxuaW1wb3J0IHR5cGUgeyBMaXRlcmF0dXJlSXRlbSwgVGFnT3B0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMnXHJcblxyXG5jb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKVxyXG5jb25zdCByb3V0ZSA9IHVzZVJvdXRlKClcclxuY29uc3QgYXV0aCA9IHVzZUF1dGhTdG9yZSgpXHJcbmNvbnN0IHRvYXN0ID0gdXNlVG9hc3QoKVxyXG5cclxuLy8g4pSA4pSAIOaQnOe0oueKtuaAge+8iOe7n+S4gOaVsOaNrua6kO+8iSDilIDilIBcclxuY29uc3Qgc2VhcmNoUGFyYW1zID0gcmVmKHtcclxuICBxdWVyeTogJycsXHJcbiAgZmllbGQ6ICdhbGwnLFxyXG4gIHRhZ19pZHM6IFtdIGFzIHN0cmluZ1tdLFxyXG4gIGRhdGVfZnJvbTogbnVsbCBhcyBzdHJpbmcgfCBudWxsLFxyXG4gIGRhdGVfdG86IG51bGwgYXMgc3RyaW5nIHwgbnVsbCxcclxuICByZXRyYWN0ZWQ6ICcnLFxyXG4gIG5lZ2F0aXZlX3Jlc3VsdDogJycsXHJcbiAgcHJlY2lzaW9uX21vZGU6ICdtYWpyJyxcclxuICBwYWdlOiAxLFxyXG4gIHBhZ2Vfc2l6ZTogMjAsXHJcbiAgc29ydDogJ2RhdGUnLFxyXG59KVxyXG5cclxuY29uc3QgZmVlZEl0ZW1zID0gcmVmPExpdGVyYXR1cmVJdGVtW10+KFtdKVxyXG5jb25zdCBmZWVkVG90YWwgPSByZWYoMClcclxuY29uc3QgbG9hZGluZyA9IHJlZihmYWxzZSlcclxuY29uc3Qgc2VhcmNoZWQgPSByZWYoZmFsc2UpXHJcblxyXG4vLyDilIDilIAg5YWs5byA57uf6K6hIOKUgOKUgFxyXG5jb25zdCBwbGF0Zm9ybVN0YXRzID0gcmVmKHsgbGl0ZXJhdHVyZV90b3RhbDogMCwgam91cm5hbF90b3RhbDogMCwgZGFpbHlfYXZnXzMwZDogMCB9KVxyXG5jb25zdCBzdGF0c0xvYWRpbmcgPSByZWYodHJ1ZSlcclxuXHJcbi8vIOKUgOKUgCDng63mkJwg4pSA4pSAXHJcbmNvbnN0IGhvdEFydGljbGVzID0gcmVmPGFueVtdPihbXSlcclxuY29uc3QgaG90UGFnZSA9IHJlZigxKVxyXG5jb25zdCBob3RQYWdlU2l6ZSA9IDVcclxuY29uc3QgaG90VG90YWwgPSByZWYoMClcclxuY29uc3QgaG90TWF4UGFnZSA9IDYgLy8g5pyA5aSaM+mhtVxyXG5cclxuY29uc3QgaG90QXZhaWxhYmxlUGFnZXMgPSBjb21wdXRlZCgoKSA9PiBNYXRoLm1pbihob3RNYXhQYWdlLCBNYXRoLmNlaWwoaG90VG90YWwudmFsdWUgLyBob3RQYWdlU2l6ZSkpKVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gbG9hZEhvdEFydGljbGVzKCkge1xyXG4gIHRyeSB7XHJcbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGFwaS5nZXQoJy9wdWJsaWMvaG90LWFydGljbGVzJywgeyBwYXJhbXM6IHsgcGFnZTogaG90UGFnZS52YWx1ZSwgcGFnZV9zaXplOiBob3RQYWdlU2l6ZSB9IH0pXHJcbiAgICBob3RBcnRpY2xlcy52YWx1ZSA9IGRhdGEuaXRlbXMgfHwgW11cclxuICAgIGhvdFRvdGFsLnZhbHVlID0gZGF0YS50b3RhbCB8fCAwXHJcbiAgfSBjYXRjaCAoZSkgeyAvKiBub24tY3JpdGljYWwgKi8gfVxyXG59XHJcblxyXG5mdW5jdGlvbiByZWZyZXNoSG90KCkge1xyXG4gIGNvbnN0IG1heCA9IE1hdGgubWluKGhvdE1heFBhZ2UsIE1hdGguY2VpbChob3RUb3RhbC52YWx1ZSAvIGhvdFBhZ2VTaXplKSB8fCAxKVxyXG4gIGhvdFBhZ2UudmFsdWUgPSBob3RQYWdlLnZhbHVlID49IG1heCA/IDEgOiBob3RQYWdlLnZhbHVlICsgMVxyXG4gIGxvYWRIb3RBcnRpY2xlcygpXHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIGxvYWRTdGF0cygpIHtcclxuICB0cnkge1xyXG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBhcGkuZ2V0KCcvcHVibGljL3N0YXRzJylcclxuICAgIHBsYXRmb3JtU3RhdHMudmFsdWUgPSBkYXRhXHJcbiAgfSBjYXRjaCAoZSkgeyAvKiBzdGF0cyBhcmUgbm9uLWNyaXRpY2FsICovIH1cclxuICBmaW5hbGx5IHsgc3RhdHNMb2FkaW5nLnZhbHVlID0gZmFsc2UgfVxyXG59XHJcblxyXG4vLyDilIDilIAg54Ot6Zeo5qCH562+IOKUgOKUgFxyXG5jb25zdCBhbGxUYWdzID0gcmVmPFRhZ09wdGlvbltdPihbXSlcclxuY29uc3Qgc2VsZWN0ZWRUYWdJZHMgPSByZWY8c3RyaW5nW10+KFtdKVxyXG5jb25zdCBzaG93QWxsVGFncyA9IHJlZihmYWxzZSlcclxuY29uc3QgaXNNb2JpbGUgPSByZWYod2luZG93LmlubmVyV2lkdGggPCA3NjgpXHJcblxyXG4vLyDilIDilIAg6auY57qn5pCc57Si5bGV5byAIOKUgOKUgFxyXG5jb25zdCBzaG93QWR2YW5jZWQgPSByZWYoZmFsc2UpXHJcblxyXG5mdW5jdGlvbiBvbkRvY3VtZW50TW91c2VEb3duKGU6IE1vdXNlRXZlbnQpIHtcclxuICBpZiAoIXNob3dBZHZhbmNlZC52YWx1ZSkgcmV0dXJuXHJcbiAgaWYgKCEoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5jbG9zZXN0KCcuYWR2LWZpbHRlci1wYW5lbCcpKSB7XHJcbiAgICBzaG93QWR2YW5jZWQudmFsdWUgPSBmYWxzZVxyXG4gIH1cclxufVxyXG5cclxuLy8g4pSA4pSAIOacrOWcsOaQnOe0ouWFs+mUruivje+8iOihjOWGheW/q+mAn+aQnOe0ou+8iSDilIDilIBcclxuY29uc3QgbG9jYWxRdWVyeSA9IHJlZignJylcclxuXHJcbi8vIOKUgOKUgCDpooTop4jmir3lsYkg4pSA4pSAXHJcbmNvbnN0IHsgc2hvd1ByZXZpZXcsIHByZXZpZXdQbWlkLCBvcGVuUHJldmlldzogc2V0UHJldmlld1BtaWQsIGNsb3NlUHJldmlldyB9ID0gdXNlTGl0ZXJhdHVyZVByZXZpZXcoKVxyXG5cclxuLy8g4pSA4pSAIOaUtuiXjyDilIDilIBcclxuY29uc3Qgc2F2aW5nID0gcmVmPFNldDxudW1iZXI+PihuZXcgU2V0KCkpXHJcbmNvbnN0IHNhdmVkUG1pZHMgPSByZWY8U2V0PG51bWJlcj4+KG5ldyBTZXQoKSlcclxuXHJcbi8vIOKUgOKUgCBcIuS4iuasoeeci+WIsOi/memHjFwiIOWIhumalOe6vyDilIDilIBcclxuY29uc3QgbGFzdFZpc2l0U3RyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2hvbWVfbGFzdF92aXNpdCcpXHJcblxyXG5jb25zdCBkaXZpZGVySW5kZXggPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgaWYgKCFsYXN0VmlzaXRTdHIgfHwgIWZlZWRJdGVtcy52YWx1ZS5sZW5ndGgpIHJldHVybiAtMVxyXG4gIGNvbnN0IGxhc3REdCA9IG5ldyBEYXRlKHBhcnNlSW50KGxhc3RWaXNpdFN0cikpLnRvTG9jYWxlRGF0ZVN0cmluZygnc3YnKVxyXG4gIGNvbnN0IGlkeCA9IGZlZWRJdGVtcy52YWx1ZS5maW5kSW5kZXgoKGl0ZW06IExpdGVyYXR1cmVJdGVtKSA9PiB7XHJcbiAgICBjb25zdCBkID0gaXRlbS5wdWJfZGF0ZT8uc2xpY2UoMCwgMTApXHJcbiAgICByZXR1cm4gZCAmJiBkIDw9IGxhc3REdFxyXG4gIH0pXHJcbiAgcmV0dXJuIGlkeCA+IDAgPyBpZHggOiAtMVxyXG59KVxyXG5cclxuLy8g4pSA4pSAIOaVsOaNruWKoOi9veaguOW/gyDilIDilIBcclxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hEYXRhKHJlc2V0UGFnZSA9IHRydWUpIHtcclxuICBpZiAocmVzZXRQYWdlKSBzZWFyY2hQYXJhbXMudmFsdWUucGFnZSA9IDFcclxuICBsb2FkaW5nLnZhbHVlID0gdHJ1ZVxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBib2R5OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0geyBwYWdlOiBzZWFyY2hQYXJhbXMudmFsdWUucGFnZSwgcGFnZV9zaXplOiBzZWFyY2hQYXJhbXMudmFsdWUucGFnZV9zaXplLCBzb3J0OiBzZWFyY2hQYXJhbXMudmFsdWUuc29ydCB9XHJcbiAgICBpZiAoc2VhcmNoUGFyYW1zLnZhbHVlLnF1ZXJ5KSBib2R5LnF1ZXJ5ID0gc2VhcmNoUGFyYW1zLnZhbHVlLnF1ZXJ5XHJcbiAgICBpZiAoc2VhcmNoUGFyYW1zLnZhbHVlLmZpZWxkICE9PSAnYWxsJykgYm9keS5maWVsZCA9IHNlYXJjaFBhcmFtcy52YWx1ZS5maWVsZFxyXG4gICAgaWYgKHNlYXJjaFBhcmFtcy52YWx1ZS50YWdfaWRzLmxlbmd0aCkgYm9keS50YWdfaWRzID0gc2VhcmNoUGFyYW1zLnZhbHVlLnRhZ19pZHNcclxuICAgIGlmIChzZWFyY2hQYXJhbXMudmFsdWUuZGF0ZV9mcm9tKSBib2R5LmRhdGVfZnJvbSA9IHNlYXJjaFBhcmFtcy52YWx1ZS5kYXRlX2Zyb21cclxuICAgIGlmIChzZWFyY2hQYXJhbXMudmFsdWUuZGF0ZV90bykgYm9keS5kYXRlX3RvID0gc2VhcmNoUGFyYW1zLnZhbHVlLmRhdGVfdG9cclxuICAgIGlmIChzZWFyY2hQYXJhbXMudmFsdWUucmV0cmFjdGVkKSBib2R5LnJldHJhY3RlZCA9IHNlYXJjaFBhcmFtcy52YWx1ZS5yZXRyYWN0ZWRcclxuICAgIGlmIChzZWFyY2hQYXJhbXMudmFsdWUubmVnYXRpdmVfcmVzdWx0KSBib2R5Lm5lZ2F0aXZlX3Jlc3VsdCA9IHNlYXJjaFBhcmFtcy52YWx1ZS5uZWdhdGl2ZV9yZXN1bHRcclxuICAgIGlmIChzZWFyY2hQYXJhbXMudmFsdWUucHJlY2lzaW9uX21vZGUpIGJvZHkucHJlY2lzaW9uX21vZGUgPSBzZWFyY2hQYXJhbXMudmFsdWUucHJlY2lzaW9uX21vZGVcclxuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgYXBpLnBvc3QoJy9mZWF0dXJlcy9zZWFyY2gvYWR2YW5jZWQnLCBib2R5KVxyXG4gICAgaWYgKHJlc2V0UGFnZSkge1xyXG4gICAgICBmZWVkSXRlbXMudmFsdWUgPSBkYXRhLml0ZW1zIHx8IFtdXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmZWVkSXRlbXMudmFsdWUucHVzaCguLi4oZGF0YS5pdGVtcyB8fCBbXSkpXHJcbiAgICB9XHJcbiAgICBmZWVkVG90YWwudmFsdWUgPSBkYXRhLnRvdGFsIHx8IDBcclxuICAgIHNlYXJjaGVkLnZhbHVlID0gdHJ1ZVxyXG4gIH0gY2F0Y2ggKGUpIHsgdG9hc3QuYXBpRXJyb3IoZSwgJ+aQnOe0ouaWh+eMruWksei0pe+8jOivt+mHjeivlScpIH1cclxuICBmaW5hbGx5IHsgbG9hZGluZy52YWx1ZSA9IGZhbHNlIH1cclxufVxyXG5cclxuLy8g4pSA4pSAIOagh+etvuetm+mAie+8iOWkmumAie+8iSDilIDilIBcclxuZnVuY3Rpb24gdG9nZ2xlVGFnKHRhZ0lkOiBzdHJpbmcgfCBudW1iZXIpIHtcclxuICBjb25zdCBpZCA9IFN0cmluZyh0YWdJZClcclxuICBjb25zdCBpZHggPSBzZWxlY3RlZFRhZ0lkcy52YWx1ZS5pbmRleE9mKGlkKVxyXG4gIGlmIChpZHggPj0gMCkge1xyXG4gICAgc2VsZWN0ZWRUYWdJZHMudmFsdWUuc3BsaWNlKGlkeCwgMSlcclxuICB9IGVsc2Uge1xyXG4gICAgc2VsZWN0ZWRUYWdJZHMudmFsdWUucHVzaChpZClcclxuICB9XHJcbiAgc2VhcmNoUGFyYW1zLnZhbHVlLnRhZ19pZHMgPSBbLi4uc2VsZWN0ZWRUYWdJZHMudmFsdWVdXHJcbiAgZmV0Y2hEYXRhKClcclxufVxyXG5cclxuLy8g4pSA4pSAIOeZjOenjeagh+etvu+8iOi/h+a7pCB0YWdfY2F0ZWdvcnkgPT09ICdjYW5jZXIn77yM5LqM57qn5qCH562+77yJIOKUgOKUgFxyXG5jb25zdCBjYW5jZXJUYWdzID0gY29tcHV0ZWQoKCkgPT4gYWxsVGFncy52YWx1ZS5maWx0ZXIoKHQ6IFRhZ09wdGlvbikgPT4gdC50YWdfY2F0ZWdvcnkgPT09ICdjYW5jZXInICYmIHQubGV2ZWwgPT09IDIpKVxyXG5cclxuLy8g6LaF6L+HIDcg5Liq5qCH562+5pe25pi+56S6XCLmm7TlpJpcIuaMiemSru+8iOS7heenu+WKqOerr+aKmOWPoO+8iVxyXG5jb25zdCBoYXNNb3JlVGFncyA9IGNvbXB1dGVkKCgpID0+IGNhbmNlclRhZ3MudmFsdWUubGVuZ3RoID4gNylcclxuXHJcbi8vIOaKmOWPoOaXtuWPquaYvuekuuesrOS4gOihjOagh+etvu+8jOWxleW8gOaXtuaYvuekuuWFqOmDqFxyXG5jb25zdCB2aXNpYmxlVGFncyA9IGNvbXB1dGVkKCgpID0+IHtcclxuICBpZiAoc2hvd0FsbFRhZ3MudmFsdWUpIHJldHVybiBjYW5jZXJUYWdzLnZhbHVlXHJcbiAgcmV0dXJuIGNhbmNlclRhZ3MudmFsdWUuc2xpY2UoMCwgNylcclxufSlcclxuXHJcbi8vIOKUgOKUgCDooYzlhoXmkJzntKIg4pSA4pSAXHJcbmZ1bmN0aW9uIGRvTG9jYWxTZWFyY2goKSB7XHJcbiAgc2hvd0FkdmFuY2VkLnZhbHVlID0gZmFsc2VcclxuICBzZWFyY2hQYXJhbXMudmFsdWUuZmllbGQgPSAnYWxsJ1xyXG4gIGlmIChsb2NhbFF1ZXJ5LnZhbHVlLnRyaW0oKSkge1xyXG4gICAgc2VhcmNoUGFyYW1zLnZhbHVlLnF1ZXJ5ID0gbG9jYWxRdWVyeS52YWx1ZVxyXG4gIH0gZWxzZSB7XHJcbiAgICBzZWFyY2hQYXJhbXMudmFsdWUucXVlcnkgPSAnJ1xyXG4gIH1cclxuICBmZXRjaERhdGEoKVxyXG59XHJcblxyXG5mdW5jdGlvbiBjbGVhclNlYXJjaCgpIHtcclxuICBsb2NhbFF1ZXJ5LnZhbHVlID0gJydcclxuICBzZWFyY2hQYXJhbXMudmFsdWUgPSB7XHJcbiAgICBxdWVyeTogJycsIGZpZWxkOiAnYWxsJywgdGFnX2lkczogW10sIGRhdGVfZnJvbTogbnVsbCwgZGF0ZV90bzogbnVsbCxcclxuICAgIHJldHJhY3RlZDogJycsIG5lZ2F0aXZlX3Jlc3VsdDogJycsIHByZWNpc2lvbl9tb2RlOiAnbWFqcicsXHJcbiAgICBwYWdlOiAxLCBwYWdlX3NpemU6IDIwLCBzb3J0OiAnZGF0ZScsXHJcbiAgfVxyXG4gIHNlbGVjdGVkVGFnSWRzLnZhbHVlID0gW11cclxuICBzaG93QWR2YW5jZWQudmFsdWUgPSBmYWxzZVxyXG4gIGZldGNoRGF0YSgpXHJcbn1cclxuXHJcbi8vIOKUgOKUgCDpq5jnuqfmkJzntKIg4pSA4pSAXHJcbmZ1bmN0aW9uIGhhbmRsZUFkdmFuY2VkU2VhcmNoKHBhcmFtczoge1xyXG4gIHF1ZXJ5OiBzdHJpbmdcclxuICBmaWVsZDogc3RyaW5nXHJcbiAgZGF0ZV9mcm9tOiBzdHJpbmcgfCBudWxsXHJcbiAgZGF0ZV90bzogc3RyaW5nIHwgbnVsbFxyXG4gIGpvdXJuYWxfdGllcnM6IHN0cmluZ1tdXHJcbiAgdGFnX2lkczogc3RyaW5nW11cclxuICByZXRyYWN0ZWQ6IHN0cmluZ1xyXG4gIG5lZ2F0aXZlX3Jlc3VsdDogc3RyaW5nXHJcbn0pIHtcclxuICBzZWFyY2hQYXJhbXMudmFsdWUucXVlcnkgPSBwYXJhbXMucXVlcnlcclxuICBzZWFyY2hQYXJhbXMudmFsdWUuZmllbGQgPSBwYXJhbXMuZmllbGRcclxuICBzZWFyY2hQYXJhbXMudmFsdWUuZGF0ZV9mcm9tID0gcGFyYW1zLmRhdGVfZnJvbVxyXG4gIHNlYXJjaFBhcmFtcy52YWx1ZS5kYXRlX3RvID0gcGFyYW1zLmRhdGVfdG9cclxuICBzZWFyY2hQYXJhbXMudmFsdWUudGFnX2lkcyA9IHBhcmFtcy50YWdfaWRzXHJcbiAgc2VhcmNoUGFyYW1zLnZhbHVlLnJldHJhY3RlZCA9IHBhcmFtcy5yZXRyYWN0ZWRcclxuICBzZWFyY2hQYXJhbXMudmFsdWUubmVnYXRpdmVfcmVzdWx0ID0gcGFyYW1zLm5lZ2F0aXZlX3Jlc3VsdFxyXG4gIHNlbGVjdGVkVGFnSWRzLnZhbHVlID0gWy4uLnBhcmFtcy50YWdfaWRzXVxyXG4gIHNob3dBZHZhbmNlZC52YWx1ZSA9IGZhbHNlXHJcbiAgZmV0Y2hEYXRhKClcclxufVxyXG5cclxuLy8g4pSA4pSAIOaUtuiXjyDilIDilIBcclxuYXN5bmMgZnVuY3Rpb24gc2F2ZUxpdGVyYXR1cmUoaXRlbTogTGl0ZXJhdHVyZUl0ZW0pIHtcclxuICBpZiAoIWF1dGguaXNBdXRoZW50aWNhdGVkKSB7XHJcbiAgICByb3V0ZXIucHVzaCgnL2F1dGgvbG9naW4nKVxyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG4gIGlmIChzYXZpbmcudmFsdWUuaGFzKGl0ZW0ucG1pZCkgfHwgc2F2ZWRQbWlkcy52YWx1ZS5oYXMoaXRlbS5wbWlkKSkgcmV0dXJuXHJcbiAgc2F2aW5nLnZhbHVlID0gbmV3IFNldChzYXZpbmcudmFsdWUpLmFkZChpdGVtLnBtaWQpXHJcbiAgdHJ5IHtcclxuICAgIGF3YWl0IGFwaS5wb3N0KGAvbGl0ZXJhdHVyZS8ke2l0ZW0ucG1pZH0vc2F2ZWApXHJcbiAgICBzYXZlZFBtaWRzLnZhbHVlID0gbmV3IFNldChzYXZlZFBtaWRzLnZhbHVlKS5hZGQoaXRlbS5wbWlkKVxyXG4gICAgdG9hc3Quc3VjY2Vzcygn5bey5pS26JePJylcclxuICB9IGNhdGNoIChlKSB7IHRvYXN0LmFwaUVycm9yKGUsICfmlLbol4/mlofnjK7lpLHotKXvvIzor7fph43or5UnKSB9XHJcbiAgZmluYWxseSB7XHJcbiAgICBjb25zdCBzID0gbmV3IFNldChzYXZpbmcudmFsdWUpXHJcbiAgICBzLmRlbGV0ZShpdGVtLnBtaWQpXHJcbiAgICBzYXZpbmcudmFsdWUgPSBzXHJcbiAgfVxyXG59XHJcblxyXG4vLyDilIDilIAg6aKE6KeIIOKUgOKUgFxyXG5mdW5jdGlvbiBvcGVuUHJldmlldyhpdGVtOiBMaXRlcmF0dXJlSXRlbSkge1xyXG4gIGlmIChpdGVtLnBtaWQpIHNldFByZXZpZXdQbWlkKGl0ZW0ucG1pZClcclxufVxyXG5mdW5jdGlvbiBnb0RldGFpbChpdGVtOiBMaXRlcmF0dXJlSXRlbSkge1xyXG4gIGNsb3NlUHJldmlldygpXHJcbiAgY29uc3QgcSA9IHNlYXJjaFBhcmFtcy52YWx1ZS5xdWVyeVxyXG4gIHJvdXRlci5wdXNoKHEgPyBgL2xpdGVyYXR1cmUvJHtpdGVtLnBtaWR9P3E9JHtlbmNvZGVVUklDb21wb25lbnQocSl9YCA6IGAvbGl0ZXJhdHVyZS8ke2l0ZW0ucG1pZH1gKVxyXG59XHJcblxyXG4vLyDilIDilIAg5pS26JeP5oyB5LmF5YyWIOKUgOKUgFxyXG5hc3luYyBmdW5jdGlvbiBsb2FkU2F2ZWRQbWlkcygpIHtcclxuICBpZiAoIWF1dGguaXNBdXRoZW50aWNhdGVkKSByZXR1cm5cclxuICB0cnkge1xyXG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBhcGkuZ2V0KCcvbGl0ZXJhdHVyZS9zYXZlZCcpXHJcbiAgICBzYXZlZFBtaWRzLnZhbHVlID0gbmV3IFNldCgoZGF0YS5pdGVtcyB8fCBbXSkubWFwKChpOiBhbnkpID0+IGkucG1pZCkpXHJcbiAgfSBjYXRjaCAoZSkgeyB0b2FzdC5hcGlFcnJvcihlLCAn5Yqg6L295pS26JeP54q25oCB5aSx6LSlJykgfVxyXG59XHJcblxyXG4vLyDilIDilIAg5Yqg6L295pu05aSa77yI6L+95Yqg5LiL5LiA6aG177yJIOKUgOKUgFxyXG5jb25zdCBsb2FkaW5nTW9yZSA9IHJlZihmYWxzZSlcclxuY29uc3QgaGFzTW9yZSA9IGNvbXB1dGVkKCgpID0+IGZlZWRJdGVtcy52YWx1ZS5sZW5ndGggPCBmZWVkVG90YWwudmFsdWUpXHJcblxyXG4vLyDilIDilIAg5Zue5Yiw6aG26YOoIOKUgOKUgFxyXG5jb25zdCBzaG93U2Nyb2xsVG9wID0gcmVmKGZhbHNlKVxyXG5mdW5jdGlvbiBvblNjcm9sbCgpIHtcclxuICBzaG93U2Nyb2xsVG9wLnZhbHVlID0gd2luZG93LnNjcm9sbFkgPiB3aW5kb3cuaW5uZXJIZWlnaHRcclxufVxyXG5mdW5jdGlvbiBzY3JvbGxUb1RvcCgpIHtcclxuICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IDAsIGJlaGF2aW9yOiAnc21vb3RoJyB9KVxyXG59XHJcbmZ1bmN0aW9uIG9uUmVzaXplKCkge1xyXG4gIGlzTW9iaWxlLnZhbHVlID0gd2luZG93LmlubmVyV2lkdGggPCA3NjhcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gbG9hZE1vcmUoKSB7XHJcbiAgaWYgKGxvYWRpbmdNb3JlLnZhbHVlIHx8ICFoYXNNb3JlLnZhbHVlKSByZXR1cm5cclxuICBsb2FkaW5nTW9yZS52YWx1ZSA9IHRydWVcclxuICBzZWFyY2hQYXJhbXMudmFsdWUucGFnZSsrXHJcbiAgdHJ5IHtcclxuICAgIGNvbnN0IGJvZHk6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7IHBhZ2U6IHNlYXJjaFBhcmFtcy52YWx1ZS5wYWdlLCBwYWdlX3NpemU6IHNlYXJjaFBhcmFtcy52YWx1ZS5wYWdlX3NpemUsIHNvcnQ6IHNlYXJjaFBhcmFtcy52YWx1ZS5zb3J0IH1cclxuICAgIGlmIChzZWFyY2hQYXJhbXMudmFsdWUucXVlcnkpIGJvZHkucXVlcnkgPSBzZWFyY2hQYXJhbXMudmFsdWUucXVlcnlcclxuICAgIGlmIChzZWFyY2hQYXJhbXMudmFsdWUuZmllbGQgIT09ICdhbGwnKSBib2R5LmZpZWxkID0gc2VhcmNoUGFyYW1zLnZhbHVlLmZpZWxkXHJcbiAgICBpZiAoc2VhcmNoUGFyYW1zLnZhbHVlLnRhZ19pZHMubGVuZ3RoKSBib2R5LnRhZ19pZHMgPSBzZWFyY2hQYXJhbXMudmFsdWUudGFnX2lkc1xyXG4gICAgaWYgKHNlYXJjaFBhcmFtcy52YWx1ZS5kYXRlX2Zyb20pIGJvZHkuZGF0ZV9mcm9tID0gc2VhcmNoUGFyYW1zLnZhbHVlLmRhdGVfZnJvbVxyXG4gICAgaWYgKHNlYXJjaFBhcmFtcy52YWx1ZS5kYXRlX3RvKSBib2R5LmRhdGVfdG8gPSBzZWFyY2hQYXJhbXMudmFsdWUuZGF0ZV90b1xyXG4gICAgaWYgKHNlYXJjaFBhcmFtcy52YWx1ZS5yZXRyYWN0ZWQpIGJvZHkucmV0cmFjdGVkID0gc2VhcmNoUGFyYW1zLnZhbHVlLnJldHJhY3RlZFxyXG4gICAgaWYgKHNlYXJjaFBhcmFtcy52YWx1ZS5uZWdhdGl2ZV9yZXN1bHQpIGJvZHkubmVnYXRpdmVfcmVzdWx0ID0gc2VhcmNoUGFyYW1zLnZhbHVlLm5lZ2F0aXZlX3Jlc3VsdFxyXG4gICAgaWYgKHNlYXJjaFBhcmFtcy52YWx1ZS5wcmVjaXNpb25fbW9kZSkgYm9keS5wcmVjaXNpb25fbW9kZSA9IHNlYXJjaFBhcmFtcy52YWx1ZS5wcmVjaXNpb25fbW9kZVxyXG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBhcGkucG9zdCgnL2ZlYXR1cmVzL3NlYXJjaC9hZHZhbmNlZCcsIGJvZHkpXHJcbiAgICBmZWVkSXRlbXMudmFsdWUucHVzaCguLi4oZGF0YS5pdGVtcyB8fCBbXSkpXHJcbiAgICBmZWVkVG90YWwudmFsdWUgPSBkYXRhLnRvdGFsIHx8IDBcclxuICB9IGNhdGNoIChlKSB7IHRvYXN0LmFwaUVycm9yKGUsICfliqDovb3mm7TlpJrlpLHotKXvvIzor7fph43or5UnKSB9XHJcbiAgZmluYWxseSB7IGxvYWRpbmdNb3JlLnZhbHVlID0gZmFsc2UgfVxyXG59XHJcblxyXG4vLyDilIDilIAg5LuOIFVSTCDmgaLlpI3nirbmgIEg4pSA4pSAXHJcbmZ1bmN0aW9uIHJlc3RvcmVGcm9tVXJsKCkge1xyXG4gIGNvbnN0IHRhZyA9IHJvdXRlLnF1ZXJ5LnRhZyBhcyBzdHJpbmdcclxuICBjb25zdCBkYXRlID0gcm91dGUucXVlcnkuZGF0ZSBhcyBzdHJpbmdcclxuICBjb25zdCBxID0gcm91dGUucXVlcnkucSBhcyBzdHJpbmdcclxuICBpZiAodGFnKSB7XHJcbiAgICBjb25zdCBpZHMgPSB0YWcuc3BsaXQoJywnKVxyXG4gICAgc2VsZWN0ZWRUYWdJZHMudmFsdWUgPSBpZHNcclxuICAgIHNlYXJjaFBhcmFtcy52YWx1ZS50YWdfaWRzID0gaWRzXHJcbiAgfVxyXG4gIGlmIChkYXRlKSB7XHJcbiAgICBzZWFyY2hQYXJhbXMudmFsdWUuZGF0ZV9mcm9tID0gZGF0ZVxyXG4gICAgc2VhcmNoUGFyYW1zLnZhbHVlLmRhdGVfdG8gPSBkYXRlXHJcbiAgfVxyXG4gIGlmIChxKSB7XHJcbiAgICBzZWFyY2hQYXJhbXMudmFsdWUucXVlcnkgPSBxXHJcbiAgICBsb2NhbFF1ZXJ5LnZhbHVlID0gcVxyXG4gIH1cclxuICBjb25zdCBwID0gcm91dGUucXVlcnkucGFnZSBhcyBzdHJpbmdcclxuICBpZiAocCkge1xyXG4gICAgc2VhcmNoUGFyYW1zLnZhbHVlLnBhZ2UgPSBwYXJzZUludChwKSB8fCAxXHJcbiAgfVxyXG59XHJcblxyXG4vLyDilIDilIAg5ZCM5q2l54q25oCB5YiwIFVSTCDilIDilIBcclxuY29uc3Qgc2VhcmNoS2V5ID0gY29tcHV0ZWQoKCkgPT5cclxuICBKU09OLnN0cmluZ2lmeShbc2VhcmNoUGFyYW1zLnZhbHVlLnF1ZXJ5LCBzZWFyY2hQYXJhbXMudmFsdWUudGFnX2lkcywgc2VhcmNoUGFyYW1zLnZhbHVlLmRhdGVfZnJvbSwgc2VhcmNoUGFyYW1zLnZhbHVlLmRhdGVfdG8sIHNlYXJjaFBhcmFtcy52YWx1ZS5wYWdlLCBzZWFyY2hQYXJhbXMudmFsdWUuc29ydF0pXHJcbilcclxuXHJcbndhdGNoKHNlYXJjaEtleSwgKCkgPT4ge1xyXG4gIGNvbnN0IHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge31cclxuICBpZiAoc2VhcmNoUGFyYW1zLnZhbHVlLnRhZ19pZHMubGVuZ3RoKSBxdWVyeS50YWcgPSBzZWFyY2hQYXJhbXMudmFsdWUudGFnX2lkcy5qb2luKCcsJylcclxuICBpZiAoc2VhcmNoUGFyYW1zLnZhbHVlLmRhdGVfZnJvbSkgcXVlcnkuZGF0ZSA9IHNlYXJjaFBhcmFtcy52YWx1ZS5kYXRlX2Zyb21cclxuICBpZiAoc2VhcmNoUGFyYW1zLnZhbHVlLnF1ZXJ5KSBxdWVyeS5xID0gc2VhcmNoUGFyYW1zLnZhbHVlLnF1ZXJ5XHJcbiAgcm91dGVyLnJlcGxhY2UoeyBxdWVyeSB9KVxyXG59KVxyXG5cclxuLy8g4pSA4pSAIOajgOa1iyBMT0dPIOeCueWHu++8iOmmlumhteWIt+aWsO+8iSDilIDilIBcclxud2F0Y2goKCkgPT4gcm91dGUucXVlcnksIChxKSA9PiB7XHJcbiAgaWYgKHEgJiYgcS5fdCkge1xyXG4gICAgY2xlYXJTZWFyY2goKVxyXG4gIH1cclxufSlcclxuXHJcbi8vIOKUgOKUgCDliJ3lp4vljJYg4pSA4pSAXHJcbm9uTW91bnRlZChhc3luYyAoKSA9PiB7XHJcbiAgcmVzdG9yZUZyb21VcmwoKVxyXG4gIGxvYWRTdGF0cygpXHJcbiAgbG9hZEhvdEFydGljbGVzKClcclxuICB0cnkge1xyXG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBhcGkuZ2V0KCcvcHVibGljL3RhZ3MnKVxyXG4gICAgYWxsVGFncy52YWx1ZSA9IChkYXRhLnRhZ3MgfHwgW10pXHJcbiAgfSBjYXRjaCAoZSkgeyB0b2FzdC5hcGlFcnJvcihlLCAn5Yqg6L295qCH562+5aSx6LSlJykgfVxyXG4gIGF3YWl0IGZldGNoRGF0YSgpXHJcbiAgYXdhaXQgbG9hZFNhdmVkUG1pZHMoKVxyXG4gIC8vIOiusOW9leacrOasoeiuv+mXruaXtumXtO+8iOeUqOS6jlwi5LiK5qyh55yL5Yiw6L+Z6YeMXCLliIbpmpTnur/vvIlcclxuICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnaG9tZV9sYXN0X3Zpc2l0JywgU3RyaW5nKERhdGUubm93KCkpKVxyXG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBvblNjcm9sbClcclxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgb25SZXNpemUpXHJcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgb25Eb2N1bWVudE1vdXNlRG93bilcclxufSlcclxuXHJcbm9uQmVmb3JlVW5tb3VudCgoKSA9PiB7XHJcbiAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIG9uU2Nyb2xsKVxyXG4gIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBvblJlc2l6ZSlcclxuICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBvbkRvY3VtZW50TW91c2VEb3duKVxyXG59KVxyXG48L3NjcmlwdD5cclxuXHJcbjx0ZW1wbGF0ZT5cclxuICA8ZGl2IGNsYXNzPVwiaG9tZVwiPlxyXG5cclxuICAgIDxoMSBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPk9uY29MaXQg6IK/55ik56eR56CU5paH54yu5Lit5b+D4oCU4oCU5q+P5pel5pu05paw55qE6IK/55ik5a2m5paH54yu5bmz5Y+wPC9oMT5cclxuXHJcbiAgICA8IS0tID09PT09PSDlhoXlrrnnvZHmoLzvvJrlt6bkvqfvvIjmkJzntKIgKyDmoIfnrb4gKyDmlofnjK7vvIkrIOWPs+S+p++8iOeDreamnO+8iSA9PT09PT0gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29udGVudC1ncmlkXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LWdyaWQtbWFpblwiPlxyXG5cclxuICAgICAgICA8IS0tIOaQnOe0ouW3peWFt+agjyAtLT5cclxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInNlY3Rpb24gc2VjdGlvbi10b29sYmFyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLXJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLXJvdy1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1pbnB1dC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1pbnB1dC10b3BcIj5cclxuICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwic2VhcmNoLWlucHV0XCIgdi1tb2RlbD1cImxvY2FsUXVlcnlcIiBwbGFjZWhvbGRlcj1cIuaQnOe0ouagh+mimOOAgeaRmOimgeOAgVBNSUTjgIFET0kuLi5cIiBAa2V5dXAuZW50ZXI9XCJkb0xvY2FsU2VhcmNoXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPE5CdXR0b24gdi1pZj1cImxvY2FsUXVlcnlcIiB0ZXh0IHNpemU9XCJ0aW55XCIgQGNsaWNrPVwiY2xlYXJTZWFyY2hcIiBjbGFzcz1cImNsZWFyLXNlYXJjaC1idG5cIiB0aXRsZT1cIua4hemZpOaQnOe0olwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSAjaWNvbj48Tkljb24gc2l6ZT1cIjE2XCI+PENsb3NlQ2lyY2xlT3V0bGluZSAvPjwvTkljb24+PC90ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgPC9OQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWlucHV0LWFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgPE5CdXR0b24gdGV4dCBzaXplPVwidGlueVwiIEBjbGljaz1cInNob3dBZHZhbmNlZCA9ICFzaG93QWR2YW5jZWRcIiA6dGl0bGU9XCJzaG93QWR2YW5jZWQ/J+aUtui1t+etm+mAiSc6J+mrmOe6p+aQnOe0oidcIiBjbGFzcz1cImFkdi1pY29uLWJ0blwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSAjaWNvbj48Tkljb24gc2l6ZT1cIjE2XCI+PE9wdGlvbnNPdXRsaW5lIC8+PC9OSWNvbj48L3RlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8L05CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxOQnV0dG9uIHNpemU9XCJzbWFsbFwiIHR5cGU9XCJwcmltYXJ5XCIgQGNsaWNrPVwiZG9Mb2NhbFNlYXJjaFwiIGNsYXNzPVwic2t5LWJ0biBzZWFyY2gtc3VibWl0LWJ0blwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSAjaWNvbj48Tkljb24gc2l6ZT1cIjE0XCI+PFNlYXJjaE91dGxpbmUgLz48L05JY29uPjwvdGVtcGxhdGU+5pCc57SiXHJcbiAgICAgICAgICAgICAgICAgIDwvTkJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPEFkdmFuY2VkU2VhcmNoUGFuZWxcclxuICAgICAgICAgICAgOnNob3c9XCJzaG93QWR2YW5jZWRcIlxyXG4gICAgICAgICAgICA6bG9hZGluZz1cImxvYWRpbmdcIlxyXG4gICAgICAgICAgICBAc2VhcmNoPVwiaGFuZGxlQWR2YW5jZWRTZWFyY2hcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L3NlY3Rpb24+XHJcblxyXG4gICAgICAgIDwhLS0g54Ot6Zeo5qCH562+5b+r6YCf562b6YCJIC0tPlxyXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwic2VjdGlvblwiIHYtaWY9XCJjYW5jZXJUYWdzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRhZy1iYXJcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWctbGFiZWxcIj7ng63pl6g8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIHYtZm9yPVwidCBpbiB2aXNpYmxlVGFnc1wiIDprZXk9XCJ0LmlkXCIgY2xhc3M9XCJ0YWctcGlsbFwiXHJcbiAgICAgICAgICAgICAgOmNsYXNzPVwieyBhY3RpdmU6IHNlbGVjdGVkVGFnSWRzLmluY2x1ZGVzKFN0cmluZyh0LmlkKSkgfVwiIEBjbGljaz1cInRvZ2dsZVRhZyh0LmlkKVwiPlxyXG4gICAgICAgICAgICAgIHt7IHQubmFtZV96aCB9fTxzcGFuIHYtaWY9XCJzZWxlY3RlZFRhZ0lkcy5pbmNsdWRlcyhTdHJpbmcodC5pZCkpXCIgY2xhc3M9XCJ0YWcteFwiPuKclTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiB2LWlmPVwiaGFzTW9yZVRhZ3MgJiYgIXNob3dBbGxUYWdzXCIgY2xhc3M9XCJ0YWctZXhwYW5kLWJ0blwiIEBjbGljaz1cInNob3dBbGxUYWdzID0gdHJ1ZVwiPuabtOWkmiA8Tkljb24gc2l6ZT1cIjEzXCIgc3R5bGU9XCJ2ZXJ0aWNhbC1hbGlnbjotMnB4XCI+PENoZXZyb25Eb3duT3V0bGluZSAvPjwvTkljb24+PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiB2LWlmPVwic2hvd0FsbFRhZ3NcIiBjbGFzcz1cInRhZy1leHBhbmQtYnRuXCIgQGNsaWNrPVwic2hvd0FsbFRhZ3MgPSBmYWxzZVwiPuaUtui1tyA8Tkljb24gc2l6ZT1cIjEzXCIgc3R5bGU9XCJ2ZXJ0aWNhbC1hbGlnbjotMnB4XCI+PENoZXZyb25VcE91dGxpbmUgLz48L05JY29uPjwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvc2VjdGlvbj5cclxuXHJcbiAgICAgICAgPCEtLSDmlofnjK7liJfooaggLS0+XHJcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZWN0aW9uIHNlY3Rpb24tbGlzdFwiPlxyXG4gICAgICAgICAgPFBhZ2VTa2VsZXRvbiA6bG9hZGluZz1cImxvYWRpbmcgJiYgIWZlZWRJdGVtcy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgPE5FbXB0eSB2LWlmPVwiIWxvYWRpbmcgJiYgIWZlZWRJdGVtcy5sZW5ndGhcIiBkZXNjcmlwdGlvbj1cIuaaguaXoOaWh+eMrlwiIC8+XHJcblxyXG4gICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cImZlZWRJdGVtcy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1mb3I9XCIoaXRlbSwgaWR4KSBpbiBmZWVkSXRlbXNcIiA6a2V5PVwiaXRlbS5pZCB8fCBpdGVtLnBtaWRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgdi1pZj1cImlkeCA9PT0gZGl2aWRlckluZGV4XCIgY2xhc3M9XCJyZWFkLWRpdmlkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVhZC1kaXZpZGVyLWxpbmVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlYWQtZGl2aWRlci10ZXh0XCI+4oCU4oCUIOS4iuasoeeci+WIsOi/memHjCDigJTigJQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlYWQtZGl2aWRlci1saW5lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxMaXRlcmF0dXJlQ2FyZFxyXG4gICAgICAgICAgICAgICAgOml0ZW09XCJpdGVtXCJcclxuICAgICAgICAgICAgICAgIDpzaG93U2F2ZT1cImF1dGguaXNBdXRoZW50aWNhdGVkXCJcclxuICAgICAgICAgICAgICAgIDpzYXZlZFBtaWRzPVwic2F2ZWRQbWlkc1wiXHJcbiAgICAgICAgICAgICAgICA6c2VhcmNoUXVlcnk9XCJzZWFyY2hQYXJhbXMucXVlcnlcIlxyXG4gICAgICAgICAgICAgICAgQGRldGFpbD1cImdvRGV0YWlsXCJcclxuICAgICAgICAgICAgICAgIEBwcmV2aWV3PVwib3BlblByZXZpZXdcIlxyXG4gICAgICAgICAgICAgICAgQHNhdmU9XCJzYXZlTGl0ZXJhdHVyZVwiXHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC90ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgdi1pZj1cImhhc01vcmVcIiBjbGFzcz1cImxvYWQtbW9yZVwiPlxyXG4gICAgICAgICAgICAgIDxOQnV0dG9uIGNsYXNzPVwic2t5LWJ0blwiIDpsb2FkaW5nPVwibG9hZGluZ01vcmVcIiBAY2xpY2s9XCJsb2FkTW9yZVwiIHNpemU9XCJzbWFsbFwiPjx0ZW1wbGF0ZSAjaWNvbj48Tkljb24gc2l6ZT1cIjE0XCI+PENoZXZyb25Eb3duT3V0bGluZSAvPjwvTkljb24+PC90ZW1wbGF0ZT7lsZXnpLrmm7TlpJo8L05CdXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC90ZW1wbGF0ZT5cclxuICAgICAgICA8L1BhZ2VTa2VsZXRvbj5cclxuICAgICAgICA8L3NlY3Rpb24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGVudC1ncmlkLXNpZGVcIj5cclxuICAgICAgICA8c2VjdGlvbiB2LWlmPVwiaG90QXJ0aWNsZXMubGVuZ3RoXCIgY2xhc3M9XCJzZWN0aW9uLWhvdC1zaWRlXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG90LWhlYWRlclwiPlxyXG4gICAgICAgICAgICA8c3Bhbj7wn5SlIOeDreaQnDwvc3Bhbj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdC1oZWFkZXItcmlnaHRcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhvdC1wYWdlLWRvdHNcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIHYtZm9yPVwicCBpbiBob3RBdmFpbGFibGVQYWdlc1wiIDprZXk9XCJwXCIgY2xhc3M9XCJob3QtcGFnZS1kb3RcIiA6Y2xhc3M9XCJ7IGFjdGl2ZTogaG90UGFnZSA9PT0gcCB9XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8TkJ1dHRvbiB0ZXh0IHNpemU9XCJ0aW55XCIgc3R5bGU9XCJmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS10ZXh0LW11dGVkKVwiIEBjbGljaz1cInJlZnJlc2hIb3RcIj5cclxuICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSAjaWNvbj48Tkljb24gc2l6ZT1cIjEyXCI+PFJlZnJlc2hPdXRsaW5lIC8+PC9OSWNvbj48L3RlbXBsYXRlPuaNouS4gOaJuVxyXG4gICAgICAgICAgICAgIDwvTkJ1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3QtbGlzdFwiPlxyXG4gICAgICAgICAgICA8YSB2LWZvcj1cIihhcnQsIGkpIGluIGhvdEFydGljbGVzXCIgOmtleT1cImFydC5pZFwiIGNsYXNzPVwiaG90LWl0ZW1cIiA6aHJlZj1cImAvbGl0ZXJhdHVyZS8ke2FydC5wbWlkfWBcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhvdC1yYW5rXCIgOmNsYXNzPVwieyAnaG90LXJhbmstdG9wJzogKGhvdFBhZ2UtMSkqaG90UGFnZVNpemUgKyBpICsgMSA8PSAzIH1cIj57eyAoaG90UGFnZS0xKSpob3RQYWdlU2l6ZSArIGkgKyAxIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3QtY29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJob3QtdGl0bGVcIiA6dGl0bGU9XCJhcnQudGl0bGVcIj57eyBhcnQudGl0bGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhvdC1tZXRhXCI+e3sgYXJ0LmpvdXJuYWwgfX0gwrcge3sgYXJ0LmNpdGVkX2J5X2NvdW50ID8/IDAgfX0g6KKr5byVPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3NlY3Rpb24+XHJcbiAgICAgICAgPGRpdiB2LWlmPVwiIXN0YXRzTG9hZGluZyAmJiBwbGF0Zm9ybVN0YXRzLmxpdGVyYXR1cmVfdG90YWwgPiAwXCIgY2xhc3M9XCJzaWRlYmFyLXN0YXRzXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2lkZWJhci1zdGF0LWl0ZW1cIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzaWRlYmFyLXN0YXQtbnVtXCI+e3sgcGxhdGZvcm1TdGF0cy5saXRlcmF0dXJlX3RvdGFsLnRvTG9jYWxlU3RyaW5nKCkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2lkZWJhci1zdGF0LWxhYmVsXCI+5paH54yu5oC76YePPC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2lkZWJhci1zdGF0LWl0ZW1cIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzaWRlYmFyLXN0YXQtbnVtXCI+e3sgcGxhdGZvcm1TdGF0cy5qb3VybmFsX3RvdGFsIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNpZGViYXItc3RhdC1sYWJlbFwiPuaUtuW9leacn+WIijwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNpZGViYXItc3RhdC1pdGVtXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2lkZWJhci1zdGF0LW51bVwiPnt7IHBsYXRmb3JtU3RhdHMuZGFpbHlfYXZnXzMwZC50b0ZpeGVkKDEpIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNpZGViYXItc3RhdC1sYWJlbFwiPuaXpeWdh+aWsOWinjwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gPT09PT09IOazqOWGjOW8leWvvCBDVEHvvIjmnKrnmbvlvZXvvIkgPT09PT09IC0tPlxyXG4gICAgPHNlY3Rpb24gdi1pZj1cIiFhdXRoLmlzQXV0aGVudGljYXRlZCAmJiBmZWVkSXRlbXMubGVuZ3RoID4gM1wiIGNsYXNzPVwic2VjdGlvbiBzZWN0aW9uLWN0YVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY3RhLWJhbm5lclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjdGEtdGV4dFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImN0YS10aXRsZVwiPvCflJIg5rOo5YaM5ZCO6I635b6X5a6M5pW05Yqf6IO9PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3RhLWRlc2NcIj7mlLbol4/mlofnjK4gwrcg6K6+572u5YWz5rOo6aKG5Z+fIMK3IOavj+aXpeeyvuWHhuaOqOmAgSDCtyDlm6LpmJ/lhbHkuqs8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8TkJ1dHRvbiBjbGFzcz1cInNreS1idG5cIiB0eXBlPVwicHJpbWFyeVwiIHNpemU9XCJsYXJnZVwiIEBjbGljaz1cInJvdXRlci5wdXNoKCcvYXV0aC9yZWdpc3RlcicpXCI+PHRlbXBsYXRlICNpY29uPjxOSWNvbiBzaXplPVwiMTRcIj48UGVyc29uQWRkT3V0bGluZSAvPjwvTkljb24+PC90ZW1wbGF0ZT7lhY3otLnms6jlhow8L05CdXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9zZWN0aW9uPlxyXG5cclxuICAgIDwhLS0gPT09PT09IOaWh+eMrumihOiniOaKveWxiSA9PT09PT0gLS0+XHJcbiAgICA8TGl0ZXJhdHVyZVByZXZpZXdEcmF3ZXJcclxuICAgICAgOnNob3c9XCJzaG93UHJldmlld1wiXHJcbiAgICAgIDpwbWlkPVwicHJldmlld1BtaWRcIlxyXG4gICAgICBAY2xvc2U9XCJjbG9zZVByZXZpZXdcIlxyXG4gICAgICBAZ29EZXRhaWw9XCJnb0RldGFpbFwiXHJcbiAgICAvPlxyXG5cclxuICAgIDwhLS0g5Zue5Yiw6aG26YOoIC0tPlxyXG4gICAgPGJ1dHRvbiB2LWlmPVwic2hvd1Njcm9sbFRvcFwiIGNsYXNzPVwic2Nyb2xsLXRvcFwiIEBjbGljaz1cInNjcm9sbFRvVG9wXCI+4oaRPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvdGVtcGxhdGU+XHJcblxyXG48c3R5bGUgc2NvcGVkPlxyXG4uaG9tZSB7IG1heC13aWR0aDogMTEwMHB4OyBtYXJnaW46IDAgYXV0bzsgcGFkZGluZzogMCAyNHB4OyBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTsgfVxyXG4uc2VjdGlvbiB7IHBhZGRpbmc6IDNweCAwOyB9XHJcbi5zZWN0aW9uLWxpc3QgeyBwYWRkaW5nLWJvdHRvbTogMTZweDsgfVxyXG4uc2VjdGlvbi1jdGEgeyBwYWRkaW5nOiAxMnB4IDAgMjRweDsgfVxyXG5cclxuLyog5YaF5a65572R5qC877ya5paH54yu5YiX6KGoICsg54Ot5qac5L6n5qCPICovXHJcbi5jb250ZW50LWdyaWQgeyBkaXNwbGF5OiBmbGV4OyBnYXA6IDI0cHg7IGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OyB9XHJcbi5jb250ZW50LWdyaWQtbWFpbiB7IGZsZXg6IDM7IG1pbi13aWR0aDogMDsgfVxyXG4uY29udGVudC1ncmlkLXNpZGUgeyBmbGV4OiAxOyBtaW4td2lkdGg6IDI2MHB4OyBtYXgtd2lkdGg6IDMwMHB4OyB9XHJcbi5zZWN0aW9uLWhvdC1zaWRlIHsgcGFkZGluZy10b3A6IDEycHg7IH1cclxuLnNlY3Rpb24taG90LXNpZGUgLmhvdC1oZWFkZXIgeyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA2MDA7IGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnkpOyBtYXJnaW4tYm90dG9tOiA4cHg7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgfVxyXG4uc2VjdGlvbi1ob3Qtc2lkZSAuaG90LWhlYWRlci1yaWdodCB7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogNnB4OyB9XHJcbi5ob3QtcGFnZS1kb3RzIHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA0cHg7IH1cclxuLmhvdC1wYWdlLWRvdCB7IHdpZHRoOiA2cHg7IGhlaWdodDogNnB4OyBib3JkZXItcmFkaXVzOiA1MCU7IGJhY2tncm91bmQ6IHZhcigtLWJvcmRlci1jb2xvcik7IHRyYW5zaXRpb246IGJhY2tncm91bmQgLjE1czsgfVxyXG4uaG90LXBhZ2UtZG90LmFjdGl2ZSB7IGJhY2tncm91bmQ6IHZhcigtLWt3LXBpbGwtY29sb3IpOyB9XHJcbmh0bWwuZGFyayAuaG90LXBhZ2UtZG90LmFjdGl2ZSB7IGJhY2tncm91bmQ6ICM2YWIwZTA7IH1cclxuLmhvdC1yYW5rLXRvcCB7IGNvbG9yOiAjZDAzMDUwICFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0OiA4MDAgIWltcG9ydGFudDsgfVxyXG4uc2VjdGlvbi1ob3Qtc2lkZSAuaG90LWxpc3QgeyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDNweDsgfVxyXG4uc2VjdGlvbi1ob3Qtc2lkZSAuaG90LWl0ZW0geyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogZmxleC1zdGFydDsgZ2FwOiAxMHB4OyBwYWRkaW5nOiA2cHggOHB4OyBib3JkZXItcmFkaXVzOiA2cHg7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAuMTJzOyB9XHJcbi5zZWN0aW9uLWhvdC1zaWRlIC5ob3QtaXRlbTpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLWJnLWhvdmVyKTsgfVxyXG4uc2VjdGlvbi1ob3Qtc2lkZSAuaG90LXJhbmsgeyBmbGV4LXNocmluazogMDsgd2lkdGg6IDIwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsgZm9udC1zaXplOiAxM3B4OyBmb250LXdlaWdodDogNzAwOyBjb2xvcjogI2QwMzA1MDsgbGluZS1oZWlnaHQ6IDEuNjsgfVxyXG4uc2VjdGlvbi1ob3Qtc2lkZSAuaG90LWNvbnRlbnQgeyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBnYXA6IDJweDsgbWluLXdpZHRoOiAwOyB9XHJcbi5zZWN0aW9uLWhvdC1zaWRlIC5ob3QtdGl0bGUgeyBmb250LXNpemU6IDE2cHg7IGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnkpOyBsaW5lLWhlaWdodDogMS40OyBkaXNwbGF5OiAtd2Via2l0LWJveDsgLXdlYmtpdC1saW5lLWNsYW1wOiAyOyAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsOyBvdmVyZmxvdzogaGlkZGVuOyB9XHJcbi5zZWN0aW9uLWhvdC1zaWRlIC5ob3QtdGl0bGU6aG92ZXIgeyBjb2xvcjogdmFyKC0ta3ctcGlsbC1jb2xvcik7IH1cclxuaHRtbC5kYXJrIC5zZWN0aW9uLWhvdC1zaWRlIC5ob3QtdGl0bGU6aG92ZXIgeyBjb2xvcjogIzZhYjBlMDsgfVxyXG4uc2VjdGlvbi1ob3Qtc2lkZSAuaG90LW1ldGEgeyBmb250LXNpemU6IDE0cHg7IGNvbG9yOiB2YXIoLS10ZXh0LW11dGVkKTsgfVxyXG5cclxuLyog54Ot6Zeo5qCH562+ICovXHJcbi50YWctYmFyIHsgZGlzcGxheTogZmxleDsgZmxleC13cmFwOiB3cmFwOyBnYXA6IDZweDsgcGFkZGluZzogMnB4IDA7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cclxuLnRhZy1sYWJlbCB7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IDYwMDsgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7IHdoaXRlLXNwYWNlOiBub3dyYXA7IG1hcmdpbi1yaWdodDogNHB4OyBmbGV4LXNocmluazogMDsgfVxyXG4udGFnLXBpbGwge1xyXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7IHBhZGRpbmc6IDVweCAxNHB4OyBib3JkZXItcmFkaXVzOiAyMHB4OyBmb250LXNpemU6IDE0cHg7IGN1cnNvcjogcG9pbnRlcjtcclxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpOyBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpOyBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1jYXJkKTsgdHJhbnNpdGlvbjogYWxsIC4xMnM7IHVzZXItc2VsZWN0OiBub25lO1xyXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDNweDtcclxufVxyXG4udGFnLXBpbGw6aG92ZXIgeyBib3JkZXItY29sb3I6IHZhcigtLWt3LXBpbGwtY29sb3IpOyBjb2xvcjogdmFyKC0ta3ctcGlsbC1jb2xvcik7IH1cclxuaHRtbC5kYXJrIC50YWctcGlsbDpob3ZlciB7IGJvcmRlci1jb2xvcjogIzZhYjBlMDsgY29sb3I6ICM2YWIwZTA7IH1cclxuLnRhZy1waWxsLmFjdGl2ZSB7IGJhY2tncm91bmQ6IHZhcigtLWt3LXBpbGwtY29sb3IpOyBjb2xvcjogI2ZmZjsgYm9yZGVyLWNvbG9yOiB2YXIoLS1rdy1waWxsLWNvbG9yKTsgfVxyXG5odG1sLmRhcmsgLnRhZy1waWxsLmFjdGl2ZSB7IGJhY2tncm91bmQ6ICMyYTVhOGE7IGNvbG9yOiAjZmZmOyBib3JkZXItY29sb3I6ICMyYTVhOGE7IH1cclxuLnRhZy14IHsgZm9udC1zaXplOiAxMXB4OyBtYXJnaW4tbGVmdDogMXB4OyBvcGFjaXR5OiAuODsgfVxyXG4udGFnLWV4cGFuZC1idG4ge1xyXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7IGZvbnQtc2l6ZTogMTNweDsgY3Vyc29yOiBwb2ludGVyOyB1c2VyLXNlbGVjdDogbm9uZTtcclxuICBwYWRkaW5nOiAzcHggMTBweDsgYm9yZGVyLXJhZGl1czogMjBweDsgYm9yZGVyOiAxcHggc29saWQgI2IzZDhmZjtcclxuICBiYWNrZ3JvdW5kOiAjZTZmNGZmOyBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTtcclxuICBhbGlnbi1zZWxmOiBjZW50ZXI7IGxpbmUtaGVpZ2h0OiAxLjU7XHJcbn1cclxuLnRhZy1leHBhbmQtYnRuOmhvdmVyIHsgYmFja2dyb3VuZDogI2QwZWJmZjsgfVxyXG5odG1sLmRhcmsgLnRhZy1leHBhbmQtYnRuIHsgYmFja2dyb3VuZDogIzFhM2E1YzsgYm9yZGVyLWNvbG9yOiAjMmE1YThhOyBjb2xvcjogIzZhYjBlMDsgfVxyXG5odG1sLmRhcmsgLnRhZy1leHBhbmQtYnRuOmhvdmVyIHsgYmFja2dyb3VuZDogIzFlNGE2YzsgfVxyXG5cclxuLyogXCLkuIrmrKHnnIvliLDov5nph4xcIiDliIbpmpTnur8gKi9cclxuLnJlYWQtZGl2aWRlciB7XHJcbiAgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiAxMnB4O1xyXG4gIHBhZGRpbmc6IDI0cHggMCAxMnB4OyB1c2VyLXNlbGVjdDogbm9uZTtcclxufVxyXG4ucmVhZC1kaXZpZGVyLWxpbmUgeyBmbGV4OiAxOyBoZWlnaHQ6IDFweDsgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCB0cmFuc3BhcmVudCwgdmFyKC0tYm9yZGVyLWNvbG9yKSAzMCUsIHZhcigtLWJvcmRlci1jb2xvcikgNzAlLCB0cmFuc3BhcmVudCk7IH1cclxuLnJlYWQtZGl2aWRlci10ZXh0IHsgZm9udC1zaXplOiAxM3B4OyBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7IHdoaXRlLXNwYWNlOiBub3dyYXA7IH1cclxuXHJcbi8qIOaQnOe0ouW3peWFt+agjyDigJQg5bCP5ZyG6KeS5bem5a+56b2QICovXHJcbi5zZWN0aW9uLXRvb2xiYXIgeyBwYWRkaW5nOiAxNnB4IDAgNHB4OyB9XHJcbi5zZWFyY2gtcm93IHtcclxuICBkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7IGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgZ2FwOiAxMnB4OyBtYXJnaW4tYm90dG9tOiA0cHg7XHJcbn1cclxuLnNlYXJjaC1yb3ctbGVmdCB7IGRpc3BsYXk6IGZsZXg7IGZsZXg6IDE7IH1cclxuLnNlYXJjaC1pbnB1dC1ncm91cCB7XHJcbiAgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgZmxleDogMTsgbWluLXdpZHRoOiAxMjBweDtcclxuICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1ib3JkZXItY29sb3IpOyBib3JkZXItcmFkaXVzOiA4cHg7XHJcbiAgYmFja2dyb3VuZDogdmFyKC0tYmctY2FyZCk7IHBhZGRpbmc6IDZweCAxMnB4IDZweDtcclxuICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgLjE1cztcclxufVxyXG4uc2VhcmNoLWlucHV0LWdyb3VwOmZvY3VzLXdpdGhpbiB7IGJvcmRlci1jb2xvcjogdmFyKC0ta3ctcGlsbC1jb2xvcik7IH1cclxuaHRtbC5kYXJrIC5zZWFyY2gtaW5wdXQtZ3JvdXA6Zm9jdXMtd2l0aGluIHsgYm9yZGVyLWNvbG9yOiAjNmFiMGUwOyB9XHJcbi5zZWFyY2gtaW5wdXQtdG9wIHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA2cHg7IGZsZXg6IDE7IH1cclxuLnNlYXJjaC1pbnB1dCB7XHJcbiAgYm9yZGVyOiBub25lOyBvdXRsaW5lOiBub25lOyBwYWRkaW5nOiA4cHggMCA0cHg7IGZvbnQtc2l6ZTogMTZweDtcclxuICBmbGV4OiAxOyBtaW4td2lkdGg6IDA7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xyXG59XHJcbi5zZWFyY2gtaW5wdXQ6OnBsYWNlaG9sZGVyIHsgZm9udC1zaXplOiAxNXB4OyBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7IH1cclxuLnNlYXJjaC1pbnB1dC1hY3Rpb25zIHsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsgZ2FwOiA4cHg7IH1cclxuLmFkdi1pY29uLWJ0biB7IGNvbG9yOiB2YXIoLS1rdy1waWxsLWNvbG9yKTsgfVxyXG5odG1sLmRhcmsgLmFkdi1pY29uLWJ0biB7IGNvbG9yOiAjNmFiMGUwOyB9XHJcbi5jbGVhci1zZWFyY2gtYnRuIHsgY29sb3I6IHZhcigtLXRleHQtbXV0ZWQpOyBmbGV4LXNocmluazogMDsgfVxyXG4uc2VhcmNoLXN1Ym1pdC1idG4geyBoZWlnaHQ6IDI4cHg7IGJvcmRlci1yYWRpdXM6IDZweDsgfVxyXG5cclxuLyog5Yqg6L295pu05aSaICovXHJcbi5sb2FkLW1vcmUgeyB0ZXh0LWFsaWduOiBjZW50ZXI7IHBhZGRpbmc6IDIwcHg7IH1cclxuXHJcbi8qIENUQSAqL1xyXG4uY3RhLWJhbm5lciB7XHJcbiAgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOyBnYXA6IDE2cHg7XHJcbiAgcGFkZGluZzogMjBweCAyNHB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1ob3Zlcik7IGJvcmRlci1yYWRpdXM6IDEwcHg7XHJcbn1cclxuLmN0YS10aXRsZSB7IGZvbnQtc2l6ZTogMTVweDsgZm9udC13ZWlnaHQ6IDYwMDsgbWFyZ2luLWJvdHRvbTogNHB4OyB9XHJcbi5jdGEtZGVzYyB7IGZvbnQtc2l6ZTogMTJweDsgY29sb3I6IHZhcigtLXRleHQtc2Vjb25kYXJ5KTsgfVxyXG5cclxuLyog5L6n5qCP57uf6K6hICovXHJcbi5zaWRlYmFyLXN0YXRzIHsgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgZ2FwOiAxMnB4OyBtYXJnaW4tdG9wOiAxMnB4OyBwYWRkaW5nOiAxMnB4OyBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1ob3Zlcik7IGJvcmRlci1yYWRpdXM6IDhweDsgfVxyXG4uc2lkZWJhci1zdGF0LWl0ZW0geyBkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGFsaWduLWl0ZW1zOiBjZW50ZXI7IH1cclxuLnNpZGViYXItc3RhdC1udW0geyBmb250LXNpemU6IDE1cHg7IGZvbnQtd2VpZ2h0OiA3MDA7IGNvbG9yOiB2YXIoLS1rdy1waWxsLWNvbG9yKTsgfVxyXG5odG1sLmRhcmsgLnNpZGViYXItc3RhdC1udW0geyBjb2xvcjogIzZhYjBlMDsgfVxyXG4uc2lkZWJhci1zdGF0LWxhYmVsIHsgZm9udC1zaXplOiAxM3B4OyBjb2xvcjogdmFyKC0tdGV4dC1tdXRlZCk7IH1cclxuXHJcblxyXG4vKiDlm57liLDpobbpg6ggKi9cclxuLnNjcm9sbC10b3Age1xyXG4gIHBvc2l0aW9uOiBmaXhlZDsgcmlnaHQ6IDMwcHg7IGJvdHRvbTogNDBweDsgei1pbmRleDogOTk5O1xyXG4gIHdpZHRoOiA0MnB4OyBoZWlnaHQ6IDQycHg7IGJvcmRlci1yYWRpdXM6IDUwJTtcclxuICBib3JkZXI6IG5vbmU7IGJhY2tncm91bmQ6IHZhcigtLWt3LXBpbGwtY29sb3IpOyBjb2xvcjogI2ZmZjtcclxuICBmb250LXNpemU6IDIwcHg7IGN1cnNvcjogcG9pbnRlcjsgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwwLDAsLjIpO1xyXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgLjJzO1xyXG59XHJcbi5zY3JvbGwtdG9wOmhvdmVyIHsgYmFja2dyb3VuZDogIzE1NDM2MDsgfVxyXG5odG1sLmRhcmsgLnNjcm9sbC10b3AgeyBiYWNrZ3JvdW5kOiAjMmE1YThhOyB9XHJcbmh0bWwuZGFyayAuc2Nyb2xsLXRvcDpob3ZlciB7IGJhY2tncm91bmQ6ICMxYTRhN2E7IH1cclxuXHJcbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xyXG4gIC5ob21lIHsgcGFkZGluZzogMCA4cHg7IG92ZXJmbG93LXg6IGhpZGRlbjsgfVxyXG4gIC5zZWFyY2gtcm93IHsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgYWxpZ24taXRlbXM6IHN0cmV0Y2g7IH1cclxuICAuc2VhcmNoLWlucHV0LWdyb3VwIHsgcGFkZGluZzogNHB4IDEwcHggNHB4OyB9XHJcbiAgLnNlYXJjaC1pbnB1dCB7IGZvbnQtc2l6ZTogMTZweDsgcGFkZGluZzogNnB4IDAgNHB4OyB9XHJcbiAgLnNlY3Rpb24tY3RhIHsgcGFkZGluZzogOHB4IDAgMjBweDsgfVxyXG4gIC5jdGEtYmFubmVyIHsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgdGV4dC1hbGlnbjogY2VudGVyOyBwYWRkaW5nOiAxNnB4OyB9XHJcbiAgLmNvbnRlbnQtZ3JpZCB7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogOHB4OyB9XHJcbiAgLmNvbnRlbnQtZ3JpZC1zaWRlIHsgbWF4LXdpZHRoOiBub25lOyBwb3NpdGlvbjogc3RhdGljOyBtYXJnaW4tdG9wOiAwOyBtaW4td2lkdGg6IDA7IH1cclxuICAuc2VjdGlvbi1ob3Qtc2lkZSB7IG1hcmdpbi10b3A6IDEycHg7IH1cclxuICAudGFnLXBpbGwgeyBwYWRkaW5nOiAzcHggMTBweDsgfVxyXG4gIC50YWctYmFyIHsgZmxleC13cmFwOiBub3dyYXA7IG92ZXJmbG93LXg6IGF1dG87IC13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOiB0b3VjaDsgc2Nyb2xsYmFyLXdpZHRoOiBub25lOyB9XHJcbiAgLnRhZy1iYXI6Oi13ZWJraXQtc2Nyb2xsYmFyIHsgZGlzcGxheTogbm9uZTsgfVxyXG4gIC5zaWRlYmFyLXN0YXRzIHsgbWFyZ2luLXRvcDogOHB4OyBmbGV4LWRpcmVjdGlvbjogcm93OyBmbGV4LXdyYXA6IHdyYXA7IGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOyBwYWRkaW5nOiAxMHB4OyB9XHJcbiAgLnNpZGViYXItc3RhdC1pdGVtIHsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgZ2FwOiAycHg7IH1cclxuICAuY29udGVudC1ncmlkLW1haW4geyBmbGV4OiAxOyB9XHJcbn1cclxuXHJcbkBtZWRpYSAobWluLXdpZHRoOiAxNDAwcHgpIHtcclxuICAuaG9tZSB7IG1heC13aWR0aDogMTIwMHB4OyBwYWRkaW5nOiAwIDMycHg7IH1cclxuICAuc2lkZWJhci1zdGF0LW51bSB7IGZvbnQtc2l6ZTogMTlweDsgfVxyXG59XHJcbjwvc3R5bGU+XHJcbiJdLCJmaWxlIjoiRDovQ2xhdWRlQ29kZS9mcm9udGVuZC9zcmMvdmlld3MvcHVibGljL0hvbWVWaWV3LnZ1ZSJ9