import { template as _$template } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { delegateEvents as _$delegateEvents } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { memo as _$memo } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { className as _$className } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { effect as _$effect } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { insert as _$insert } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
import { createComponent as _$createComponent } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
const _tmpl$ = /*#__PURE__*/_$template(`<div class="flex h-full flex-col gap-2"><div class="flex items-center gap-2"><div class="tabs-boxed tabs gap-2"></div><div class=ml-auto></div></div><div class="flex-1 overflow-y-auto">`),
|
_tmpl$2 = /*#__PURE__*/_$template(`<button><span></span><div class="badge badge-sm">`),
|
_tmpl$3 = /*#__PURE__*/_$template(`<div class="flex items-center justify-between pr-8"><div class="flex items-center gap-2"><span></span><div class="badge badge-sm">`),
|
_tmpl$4 = /*#__PURE__*/_$template(`<div class="text-sm text-slate-500"> `),
|
_tmpl$5 = /*#__PURE__*/_$template(`<div class="flex items-center justify-between pr-8"><div class="flex items-center gap-2"><span></span><div class="badge badge-sm"></div></div><div class="flex items-center gap-2">`),
|
_tmpl$6 = /*#__PURE__*/_$template(`<div class="text-sm text-slate-500"> :: <!> `);
|
import { IconBrandSpeedtest, IconReload, IconSettings } from "/node_modules/.vite/deps/@tabler_icons-solidjs.js?v=000c47cd";
|
import { For, Show, createMemo, createSignal, onMount } from "/node_modules/.vite/deps/solid-js.js?v=93754656";
|
import { twMerge } from "/node_modules/.vite/deps/tailwind-merge.js?v=d1b42b68";
|
import { Button, Collapse, ProxiesSettingsModal, ProxyNodeCard, ProxyNodePreview, RenderInTwoColumns, SubscriptionInfo } from "/src/components/index.ts";
|
import { filterProxiesByAvailability, sortProxiesByOrderingType } from "/src/helpers/index.ts";
|
import { useI18n } from "/src/i18n/index.tsx";
|
import { formatTimeFromNow, hideUnAvailableProxies, proxiesOrderingType, useProxies } from "/src/signals/index.ts";
|
var ActiveTab = /*#__PURE__*/function (ActiveTab) {
|
ActiveTab["proxyProviders"] = "proxyProviders";
|
ActiveTab["proxies"] = "proxies";
|
return ActiveTab;
|
}(ActiveTab || {});
|
export default (() => {
|
let proxiesSettingsModalRef;
|
const [t] = useI18n();
|
const {
|
fetchProxies,
|
proxies,
|
selectProxyInGroup,
|
latencyMap,
|
proxyProviders,
|
updateProviderByProviderName,
|
updateAllProvider,
|
proxyGroupLatencyTest,
|
proxyProviderLatencyTest,
|
collapsedMap,
|
setCollapsedMap,
|
proxyGroupLatencyTestingMap,
|
proxyProviderLatencyTestingMap,
|
isAllProviderUpdating,
|
updatingMap
|
} = useProxies();
|
onMount(fetchProxies);
|
const onProxyGroupLatencyTestClick = async (e, groupName) => {
|
e.stopPropagation();
|
void proxyGroupLatencyTest(groupName);
|
};
|
const onProxyProviderLatencyTestClick = (e, providerName) => {
|
e.stopPropagation();
|
void proxyProviderLatencyTest(providerName);
|
};
|
const onUpdateProxyProviderClick = (e, providerName) => {
|
e.stopPropagation();
|
void updateProviderByProviderName(providerName);
|
};
|
const onUpdateAllProviderClick = async e => {
|
e.stopPropagation();
|
void updateAllProvider();
|
};
|
const [activeTab, setActiveTab] = createSignal(ActiveTab.proxies);
|
const tabs = () => [{
|
type: ActiveTab.proxies,
|
name: t('proxies'),
|
count: proxies().length
|
}, {
|
type: ActiveTab.proxyProviders,
|
name: t('proxyProviders'),
|
count: proxyProviders().length
|
}];
|
return (() => {
|
const _el$ = _tmpl$(),
|
_el$2 = _el$.firstChild,
|
_el$3 = _el$2.firstChild,
|
_el$4 = _el$3.nextSibling,
|
_el$5 = _el$2.nextSibling;
|
_$insert(_el$3, _$createComponent(For, {
|
get each() {
|
return tabs();
|
},
|
children: tab => (() => {
|
const _el$6 = _tmpl$2(),
|
_el$7 = _el$6.firstChild,
|
_el$8 = _el$7.nextSibling;
|
_el$6.$$click = () => setActiveTab(tab.type);
|
_$insert(_el$7, () => tab.name);
|
_$insert(_el$8, () => tab.count);
|
_$effect(() => _$className(_el$6, twMerge(activeTab() === tab.type && 'tab-active', 'tab tab-sm gap-2 px-2 sm:tab-md')));
|
return _el$6;
|
})()
|
}));
|
_$insert(_el$2, _$createComponent(Show, {
|
get when() {
|
return activeTab() === ActiveTab.proxyProviders;
|
},
|
get children() {
|
return _$createComponent(Button, {
|
"class": "btn btn-circle btn-sm",
|
get disabled() {
|
return isAllProviderUpdating();
|
},
|
onClick: e => onUpdateAllProviderClick(e),
|
get icon() {
|
return _$createComponent(IconReload, {
|
get ["class"]() {
|
return twMerge(isAllProviderUpdating() && 'animate-spin text-success');
|
}
|
});
|
}
|
});
|
}
|
}), _el$4);
|
_$insert(_el$4, _$createComponent(Button, {
|
"class": "btn-circle btn-sm sm:btn-md",
|
onClick: () => proxiesSettingsModalRef?.showModal(),
|
get icon() {
|
return _$createComponent(IconSettings, {});
|
}
|
}));
|
_$insert(_el$5, _$createComponent(Show, {
|
get when() {
|
return activeTab() === ActiveTab.proxies;
|
},
|
get children() {
|
return _$createComponent(RenderInTwoColumns, {
|
get children() {
|
return _$createComponent(For, {
|
get each() {
|
return proxies();
|
},
|
children: proxyGroup => {
|
const sortedProxyNames = createMemo(() => filterProxiesByAvailability(sortProxiesByOrderingType(proxyGroup.all ?? [], latencyMap(), proxiesOrderingType()), latencyMap(), hideUnAvailableProxies()));
|
const title = [(() => {
|
const _el$9 = _tmpl$3(),
|
_el$10 = _el$9.firstChild,
|
_el$11 = _el$10.firstChild,
|
_el$12 = _el$11.nextSibling;
|
_$insert(_el$11, () => proxyGroup.name);
|
_$insert(_el$12, () => proxyGroup.all?.length);
|
_$insert(_el$9, _$createComponent(Button, {
|
"class": "btn-circle btn-sm",
|
get disabled() {
|
return proxyGroupLatencyTestingMap()[proxyGroup.name];
|
},
|
onClick: e => onProxyGroupLatencyTestClick(e, proxyGroup.name),
|
get icon() {
|
return _$createComponent(IconBrandSpeedtest, {
|
get ["class"]() {
|
return twMerge(proxyGroupLatencyTestingMap()[proxyGroup.name] && 'animate-pulse text-success');
|
}
|
});
|
}
|
}), null);
|
return _el$9;
|
})(), (() => {
|
const _el$13 = _tmpl$4(),
|
_el$14 = _el$13.firstChild;
|
_$insert(_el$13, () => proxyGroup.type, _el$14);
|
_$insert(_el$13, () => proxyGroup.now?.length > 0 && ` :: ${proxyGroup.now}`, null);
|
return _el$13;
|
})(), _$createComponent(Show, {
|
get when() {
|
return !collapsedMap()[proxyGroup.name];
|
},
|
get children() {
|
return _$createComponent(ProxyNodePreview, {
|
get proxyNameList() {
|
return sortedProxyNames();
|
},
|
get now() {
|
return proxyGroup.now;
|
}
|
});
|
}
|
})];
|
return _$createComponent(Collapse, {
|
get isOpen() {
|
return collapsedMap()[proxyGroup.name];
|
},
|
title: title,
|
onCollapse: val => setCollapsedMap(proxyGroup.name, val),
|
get children() {
|
return _$createComponent(For, {
|
get each() {
|
return sortedProxyNames();
|
},
|
children: proxyName => _$createComponent(ProxyNodeCard, {
|
proxyName: proxyName,
|
get isSelected() {
|
return proxyGroup.now === proxyName;
|
},
|
onClick: () => void selectProxyInGroup(proxyGroup, proxyName)
|
})
|
});
|
}
|
});
|
}
|
});
|
}
|
});
|
}
|
}), null);
|
_$insert(_el$5, _$createComponent(Show, {
|
get when() {
|
return activeTab() === ActiveTab.proxyProviders;
|
},
|
get children() {
|
return _$createComponent(RenderInTwoColumns, {
|
get children() {
|
return _$createComponent(For, {
|
get each() {
|
return proxyProviders();
|
},
|
children: proxyProvider => {
|
const sortedProxyNames = createMemo(() => sortProxiesByOrderingType(proxyProvider.proxies.map(i => i.name) ?? [], latencyMap(), proxiesOrderingType()));
|
const title = [(() => {
|
const _el$15 = _tmpl$5(),
|
_el$16 = _el$15.firstChild,
|
_el$17 = _el$16.firstChild,
|
_el$18 = _el$17.nextSibling,
|
_el$19 = _el$16.nextSibling;
|
_$insert(_el$17, () => proxyProvider.name);
|
_$insert(_el$18, () => proxyProvider.proxies.length);
|
_$insert(_el$19, _$createComponent(Button, {
|
"class": "btn btn-circle btn-sm",
|
get disabled() {
|
return updatingMap()[proxyProvider.name];
|
},
|
onClick: e => onUpdateProxyProviderClick(e, proxyProvider.name),
|
get icon() {
|
return _$createComponent(IconReload, {
|
get ["class"]() {
|
return twMerge(updatingMap()[proxyProvider.name] && 'animate-spin text-success');
|
}
|
});
|
}
|
}), null);
|
_$insert(_el$19, _$createComponent(Button, {
|
"class": "btn btn-circle btn-sm",
|
get disabled() {
|
return proxyProviderLatencyTestingMap()[proxyProvider.name];
|
},
|
onClick: e => onProxyProviderLatencyTestClick(e, proxyProvider.name),
|
get icon() {
|
return _$createComponent(IconBrandSpeedtest, {
|
get ["class"]() {
|
return twMerge(proxyProviderLatencyTestingMap()[proxyProvider.name] && 'animate-pulse text-success');
|
}
|
});
|
}
|
}), null);
|
return _el$15;
|
})(), _$createComponent(SubscriptionInfo, {
|
get subscriptionInfo() {
|
return proxyProvider.subscriptionInfo;
|
}
|
}), (() => {
|
const _el$20 = _tmpl$6(),
|
_el$21 = _el$20.firstChild,
|
_el$23 = _el$21.nextSibling,
|
_el$22 = _el$23.nextSibling;
|
_$insert(_el$20, () => proxyProvider.vehicleType, _el$21);
|
_$insert(_el$20, () => t('updated'), _el$23);
|
_$insert(_el$20, () => formatTimeFromNow(proxyProvider.updatedAt), null);
|
return _el$20;
|
})(), _$createComponent(Show, {
|
get when() {
|
return !collapsedMap()[proxyProvider.name];
|
},
|
get children() {
|
return _$createComponent(ProxyNodePreview, {
|
get proxyNameList() {
|
return sortedProxyNames();
|
}
|
});
|
}
|
})];
|
return _$createComponent(Collapse, {
|
get isOpen() {
|
return collapsedMap()[proxyProvider.name];
|
},
|
title: title,
|
onCollapse: val => setCollapsedMap(proxyProvider.name, val),
|
get children() {
|
return _$createComponent(For, {
|
get each() {
|
return sortedProxyNames();
|
},
|
children: proxyName => _$createComponent(ProxyNodeCard, {
|
proxyName: proxyName
|
})
|
});
|
}
|
});
|
}
|
});
|
}
|
});
|
}
|
}), null);
|
_$insert(_el$, _$createComponent(ProxiesSettingsModal, {
|
ref: el => proxiesSettingsModalRef = el
|
}), null);
|
return _el$;
|
})();
|
});
|
_$delegateEvents(["click"]);
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJY29uQnJhbmRTcGVlZHRlc3QiLCJJY29uUmVsb2FkIiwiSWNvblNldHRpbmdzIiwiRm9yIiwiU2hvdyIsImNyZWF0ZU1lbW8iLCJjcmVhdGVTaWduYWwiLCJvbk1vdW50IiwidHdNZXJnZSIsIkJ1dHRvbiIsIkNvbGxhcHNlIiwiUHJveGllc1NldHRpbmdzTW9kYWwiLCJQcm94eU5vZGVDYXJkIiwiUHJveHlOb2RlUHJldmlldyIsIlJlbmRlckluVHdvQ29sdW1ucyIsIlN1YnNjcmlwdGlvbkluZm8iLCJmaWx0ZXJQcm94aWVzQnlBdmFpbGFiaWxpdHkiLCJzb3J0UHJveGllc0J5T3JkZXJpbmdUeXBlIiwidXNlSTE4biIsImZvcm1hdFRpbWVGcm9tTm93IiwiaGlkZVVuQXZhaWxhYmxlUHJveGllcyIsInByb3hpZXNPcmRlcmluZ1R5cGUiLCJ1c2VQcm94aWVzIiwiQWN0aXZlVGFiIiwicHJveGllc1NldHRpbmdzTW9kYWxSZWYiLCJ0IiwiZmV0Y2hQcm94aWVzIiwicHJveGllcyIsInNlbGVjdFByb3h5SW5Hcm91cCIsImxhdGVuY3lNYXAiLCJwcm94eVByb3ZpZGVycyIsInVwZGF0ZVByb3ZpZGVyQnlQcm92aWRlck5hbWUiLCJ1cGRhdGVBbGxQcm92aWRlciIsInByb3h5R3JvdXBMYXRlbmN5VGVzdCIsInByb3h5UHJvdmlkZXJMYXRlbmN5VGVzdCIsImNvbGxhcHNlZE1hcCIsInNldENvbGxhcHNlZE1hcCIsInByb3h5R3JvdXBMYXRlbmN5VGVzdGluZ01hcCIsInByb3h5UHJvdmlkZXJMYXRlbmN5VGVzdGluZ01hcCIsImlzQWxsUHJvdmlkZXJVcGRhdGluZyIsInVwZGF0aW5nTWFwIiwib25Qcm94eUdyb3VwTGF0ZW5jeVRlc3RDbGljayIsImUiLCJncm91cE5hbWUiLCJzdG9wUHJvcGFnYXRpb24iLCJvblByb3h5UHJvdmlkZXJMYXRlbmN5VGVzdENsaWNrIiwicHJvdmlkZXJOYW1lIiwib25VcGRhdGVQcm94eVByb3ZpZGVyQ2xpY2siLCJvblVwZGF0ZUFsbFByb3ZpZGVyQ2xpY2siLCJhY3RpdmVUYWIiLCJzZXRBY3RpdmVUYWIiLCJ0YWJzIiwidHlwZSIsIm5hbWUiLCJjb3VudCIsImxlbmd0aCIsIl9lbCQiLCJfdG1wbCQiLCJfZWwkMiIsImZpcnN0Q2hpbGQiLCJfZWwkMyIsIl9lbCQ0IiwibmV4dFNpYmxpbmciLCJfZWwkNSIsIl8kaW5zZXJ0IiwiXyRjcmVhdGVDb21wb25lbnQiLCJlYWNoIiwiY2hpbGRyZW4iLCJ0YWIiLCJfZWwkNiIsIl90bXBsJDIiLCJfZWwkNyIsIl9lbCQ4IiwiJCRjbGljayIsIl8kZWZmZWN0IiwiXyRjbGFzc05hbWUiLCJ3aGVuIiwiZGlzYWJsZWQiLCJvbkNsaWNrIiwiaWNvbiIsImNsYXNzIiwic2hvd01vZGFsIiwicHJveHlHcm91cCIsInNvcnRlZFByb3h5TmFtZXMiLCJhbGwiLCJ0aXRsZSIsIl9lbCQ5IiwiX3RtcGwkMyIsIl9lbCQxMCIsIl9lbCQxMSIsIl9lbCQxMiIsIl9lbCQxMyIsIl90bXBsJDQiLCJfZWwkMTQiLCJub3ciLCJwcm94eU5hbWVMaXN0IiwiaXNPcGVuIiwib25Db2xsYXBzZSIsInZhbCIsInByb3h5TmFtZSIsImlzU2VsZWN0ZWQiLCJwcm94eVByb3ZpZGVyIiwibWFwIiwiaSIsIl9lbCQxNSIsIl90bXBsJDUiLCJfZWwkMTYiLCJfZWwkMTciLCJfZWwkMTgiLCJfZWwkMTkiLCJzdWJzY3JpcHRpb25JbmZvIiwiX2VsJDIwIiwiX3RtcGwkNiIsIl9lbCQyMSIsIl9lbCQyMyIsIl9lbCQyMiIsInZlaGljbGVUeXBlIiwidXBkYXRlZEF0IiwicmVmIiwiZWwiLCJfJGRlbGVnYXRlRXZlbnRzIl0sInNvdXJjZXMiOlsiUHJveGllcy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBJY29uQnJhbmRTcGVlZHRlc3QsXHJcbiAgSWNvblJlbG9hZCxcclxuICBJY29uU2V0dGluZ3MsXHJcbn0gZnJvbSAnQHRhYmxlci9pY29ucy1zb2xpZGpzJ1xyXG5pbXBvcnQgeyBGb3IsIFNob3csIGNyZWF0ZU1lbW8sIGNyZWF0ZVNpZ25hbCwgb25Nb3VudCB9IGZyb20gJ3NvbGlkLWpzJ1xyXG5pbXBvcnQgeyB0d01lcmdlIH0gZnJvbSAndGFpbHdpbmQtbWVyZ2UnXHJcbmltcG9ydCB7XHJcbiAgQnV0dG9uLFxyXG4gIENvbGxhcHNlLFxyXG4gIFByb3hpZXNTZXR0aW5nc01vZGFsLFxyXG4gIFByb3h5Tm9kZUNhcmQsXHJcbiAgUHJveHlOb2RlUHJldmlldyxcclxuICBSZW5kZXJJblR3b0NvbHVtbnMsXHJcbiAgU3Vic2NyaXB0aW9uSW5mbyxcclxufSBmcm9tICd+L2NvbXBvbmVudHMnXHJcbmltcG9ydCB7XHJcbiAgZmlsdGVyUHJveGllc0J5QXZhaWxhYmlsaXR5LFxyXG4gIHNvcnRQcm94aWVzQnlPcmRlcmluZ1R5cGUsXHJcbn0gZnJvbSAnfi9oZWxwZXJzJ1xyXG5pbXBvcnQgeyB1c2VJMThuIH0gZnJvbSAnfi9pMThuJ1xyXG5pbXBvcnQge1xyXG4gIGZvcm1hdFRpbWVGcm9tTm93LFxyXG4gIGhpZGVVbkF2YWlsYWJsZVByb3hpZXMsXHJcbiAgcHJveGllc09yZGVyaW5nVHlwZSxcclxuICB1c2VQcm94aWVzLFxyXG59IGZyb20gJ34vc2lnbmFscydcclxuXHJcbmVudW0gQWN0aXZlVGFiIHtcclxuICBwcm94eVByb3ZpZGVycyA9ICdwcm94eVByb3ZpZGVycycsXHJcbiAgcHJveGllcyA9ICdwcm94aWVzJyxcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xyXG4gIGxldCBwcm94aWVzU2V0dGluZ3NNb2RhbFJlZjogSFRNTERpYWxvZ0VsZW1lbnQgfCB1bmRlZmluZWRcclxuXHJcbiAgY29uc3QgW3RdID0gdXNlSTE4bigpXHJcblxyXG4gIGNvbnN0IHtcclxuICAgIGZldGNoUHJveGllcyxcclxuICAgIHByb3hpZXMsXHJcbiAgICBzZWxlY3RQcm94eUluR3JvdXAsXHJcbiAgICBsYXRlbmN5TWFwLFxyXG4gICAgcHJveHlQcm92aWRlcnMsXHJcbiAgICB1cGRhdGVQcm92aWRlckJ5UHJvdmlkZXJOYW1lLFxyXG4gICAgdXBkYXRlQWxsUHJvdmlkZXIsXHJcbiAgICBwcm94eUdyb3VwTGF0ZW5jeVRlc3QsXHJcbiAgICBwcm94eVByb3ZpZGVyTGF0ZW5jeVRlc3QsXHJcbiAgICBjb2xsYXBzZWRNYXAsXHJcbiAgICBzZXRDb2xsYXBzZWRNYXAsXHJcbiAgICBwcm94eUdyb3VwTGF0ZW5jeVRlc3RpbmdNYXAsXHJcbiAgICBwcm94eVByb3ZpZGVyTGF0ZW5jeVRlc3RpbmdNYXAsXHJcbiAgICBpc0FsbFByb3ZpZGVyVXBkYXRpbmcsXHJcbiAgICB1cGRhdGluZ01hcCxcclxuICB9ID0gdXNlUHJveGllcygpXHJcblxyXG4gIG9uTW91bnQoZmV0Y2hQcm94aWVzKVxyXG5cclxuICBjb25zdCBvblByb3h5R3JvdXBMYXRlbmN5VGVzdENsaWNrID0gYXN5bmMgKFxyXG4gICAgZTogTW91c2VFdmVudCxcclxuICAgIGdyb3VwTmFtZTogc3RyaW5nLFxyXG4gICkgPT4ge1xyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxyXG4gICAgdm9pZCBwcm94eUdyb3VwTGF0ZW5jeVRlc3QoZ3JvdXBOYW1lKVxyXG4gIH1cclxuXHJcbiAgY29uc3Qgb25Qcm94eVByb3ZpZGVyTGF0ZW5jeVRlc3RDbGljayA9IChcclxuICAgIGU6IE1vdXNlRXZlbnQsXHJcbiAgICBwcm92aWRlck5hbWU6IHN0cmluZyxcclxuICApID0+IHtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcclxuICAgIHZvaWQgcHJveHlQcm92aWRlckxhdGVuY3lUZXN0KHByb3ZpZGVyTmFtZSlcclxuICB9XHJcblxyXG4gIGNvbnN0IG9uVXBkYXRlUHJveHlQcm92aWRlckNsaWNrID0gKGU6IE1vdXNlRXZlbnQsIHByb3ZpZGVyTmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXHJcbiAgICB2b2lkIHVwZGF0ZVByb3ZpZGVyQnlQcm92aWRlck5hbWUocHJvdmlkZXJOYW1lKVxyXG4gIH1cclxuXHJcbiAgY29uc3Qgb25VcGRhdGVBbGxQcm92aWRlckNsaWNrID0gYXN5bmMgKGU6IE1vdXNlRXZlbnQpID0+IHtcclxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcclxuICAgIHZvaWQgdXBkYXRlQWxsUHJvdmlkZXIoKVxyXG4gIH1cclxuXHJcbiAgY29uc3QgW2FjdGl2ZVRhYiwgc2V0QWN0aXZlVGFiXSA9IGNyZWF0ZVNpZ25hbChBY3RpdmVUYWIucHJveGllcylcclxuXHJcbiAgY29uc3QgdGFicyA9ICgpID0+IFtcclxuICAgIHtcclxuICAgICAgdHlwZTogQWN0aXZlVGFiLnByb3hpZXMsXHJcbiAgICAgIG5hbWU6IHQoJ3Byb3hpZXMnKSxcclxuICAgICAgY291bnQ6IHByb3hpZXMoKS5sZW5ndGgsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0eXBlOiBBY3RpdmVUYWIucHJveHlQcm92aWRlcnMsXHJcbiAgICAgIG5hbWU6IHQoJ3Byb3h5UHJvdmlkZXJzJyksXHJcbiAgICAgIGNvdW50OiBwcm94eVByb3ZpZGVycygpLmxlbmd0aCxcclxuICAgIH0sXHJcbiAgXVxyXG5cclxuICByZXR1cm4gKFxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXggaC1mdWxsIGZsZXgtY29sIGdhcC0yXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJzLWJveGVkIHRhYnMgZ2FwLTJcIj5cclxuICAgICAgICAgIDxGb3IgZWFjaD17dGFicygpfT5cclxuICAgICAgICAgICAgeyh0YWIpID0+IChcclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzcz17dHdNZXJnZShcclxuICAgICAgICAgICAgICAgICAgYWN0aXZlVGFiKCkgPT09IHRhYi50eXBlICYmICd0YWItYWN0aXZlJyxcclxuICAgICAgICAgICAgICAgICAgJ3RhYiB0YWItc20gZ2FwLTIgcHgtMiBzbTp0YWItbWQnLFxyXG4gICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldEFjdGl2ZVRhYih0YWIudHlwZSl9XHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+e3RhYi5uYW1lfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYWRnZSBiYWRnZS1zbVwiPnt0YWIuY291bnR9PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICl9XHJcbiAgICAgICAgICA8L0Zvcj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPFNob3cgd2hlbj17YWN0aXZlVGFiKCkgPT09IEFjdGl2ZVRhYi5wcm94eVByb3ZpZGVyc30+XHJcbiAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1jaXJjbGUgYnRuLXNtXCJcclxuICAgICAgICAgICAgZGlzYWJsZWQ9e2lzQWxsUHJvdmlkZXJVcGRhdGluZygpfVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4gb25VcGRhdGVBbGxQcm92aWRlckNsaWNrKGUpfVxyXG4gICAgICAgICAgICBpY29uPXtcclxuICAgICAgICAgICAgICA8SWNvblJlbG9hZFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9e3R3TWVyZ2UoXHJcbiAgICAgICAgICAgICAgICAgIGlzQWxsUHJvdmlkZXJVcGRhdGluZygpICYmICdhbmltYXRlLXNwaW4gdGV4dC1zdWNjZXNzJyxcclxuICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L1Nob3c+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtbC1hdXRvXCI+XHJcbiAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuLWNpcmNsZSBidG4tc20gc206YnRuLW1kXCJcclxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gcHJveGllc1NldHRpbmdzTW9kYWxSZWY/LnNob3dNb2RhbCgpfVxyXG4gICAgICAgICAgICBpY29uPXs8SWNvblNldHRpbmdzIC8+fVxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xIG92ZXJmbG93LXktYXV0b1wiPlxyXG4gICAgICAgIDxTaG93IHdoZW49e2FjdGl2ZVRhYigpID09PSBBY3RpdmVUYWIucHJveGllc30+XHJcbiAgICAgICAgICA8UmVuZGVySW5Ud29Db2x1bW5zPlxyXG4gICAgICAgICAgICA8Rm9yIGVhY2g9e3Byb3hpZXMoKX0+XHJcbiAgICAgICAgICAgICAgeyhwcm94eUdyb3VwKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzb3J0ZWRQcm94eU5hbWVzID0gY3JlYXRlTWVtbygoKSA9PlxyXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJQcm94aWVzQnlBdmFpbGFiaWxpdHkoXHJcbiAgICAgICAgICAgICAgICAgICAgc29ydFByb3hpZXNCeU9yZGVyaW5nVHlwZShcclxuICAgICAgICAgICAgICAgICAgICAgIHByb3h5R3JvdXAuYWxsID8/IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbGF0ZW5jeU1hcCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgcHJveGllc09yZGVyaW5nVHlwZSgpLFxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgbGF0ZW5jeU1hcCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIGhpZGVVbkF2YWlsYWJsZVByb3hpZXMoKSxcclxuICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIClcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCB0aXRsZSA9IChcclxuICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHByLThcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57cHJveHlHcm91cC5uYW1lfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhZGdlIGJhZGdlLXNtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3Byb3h5R3JvdXAuYWxsPy5sZW5ndGh9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1jaXJjbGUgYnRuLXNtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5R3JvdXBMYXRlbmN5VGVzdGluZ01hcCgpW3Byb3h5R3JvdXAubmFtZV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBvblByb3h5R3JvdXBMYXRlbmN5VGVzdENsaWNrKGUsIHByb3h5R3JvdXAubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uPXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbkJyYW5kU3BlZWR0ZXN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz17dHdNZXJnZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJveHlHcm91cExhdGVuY3lUZXN0aW5nTWFwKClbcHJveHlHcm91cC5uYW1lXSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmltYXRlLXB1bHNlIHRleHQtc3VjY2VzcycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXNtIHRleHQtc2xhdGUtNTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7cHJveHlHcm91cC50eXBlfXsnICd9XHJcbiAgICAgICAgICAgICAgICAgICAgICB7cHJveHlHcm91cC5ub3c/Lmxlbmd0aCA+IDAgJiYgYCA6OiAke3Byb3h5R3JvdXAubm93fWB9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxTaG93IHdoZW49eyFjb2xsYXBzZWRNYXAoKVtwcm94eUdyb3VwLm5hbWVdfT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxQcm94eU5vZGVQcmV2aWV3XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5TmFtZUxpc3Q9e3NvcnRlZFByb3h5TmFtZXMoKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbm93PXtwcm94eUdyb3VwLm5vd31cclxuICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9TaG93PlxyXG4gICAgICAgICAgICAgICAgICA8Lz5cclxuICAgICAgICAgICAgICAgIClcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICA8Q29sbGFwc2VcclxuICAgICAgICAgICAgICAgICAgICBpc09wZW49e2NvbGxhcHNlZE1hcCgpW3Byb3h5R3JvdXAubmFtZV19XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9e3RpdGxlfVxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ29sbGFwc2U9eyh2YWwpID0+IHNldENvbGxhcHNlZE1hcChwcm94eUdyb3VwLm5hbWUsIHZhbCl9XHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8Rm9yIGVhY2g9e3NvcnRlZFByb3h5TmFtZXMoKX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7KHByb3h5TmFtZSkgPT4gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8UHJveHlOb2RlQ2FyZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3h5TmFtZT17cHJveHlOYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ9e3Byb3h5R3JvdXAubm93ID09PSBwcm94eU5hbWV9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgc2VsZWN0UHJveHlJbkdyb3VwKHByb3h5R3JvdXAsIHByb3h5TmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvRm9yPlxyXG4gICAgICAgICAgICAgICAgICA8L0NvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIDwvRm9yPlxyXG4gICAgICAgICAgPC9SZW5kZXJJblR3b0NvbHVtbnM+XHJcbiAgICAgICAgPC9TaG93PlxyXG5cclxuICAgICAgICA8U2hvdyB3aGVuPXthY3RpdmVUYWIoKSA9PT0gQWN0aXZlVGFiLnByb3h5UHJvdmlkZXJzfT5cclxuICAgICAgICAgIDxSZW5kZXJJblR3b0NvbHVtbnM+XHJcbiAgICAgICAgICAgIDxGb3IgZWFjaD17cHJveHlQcm92aWRlcnMoKX0+XHJcbiAgICAgICAgICAgICAgeyhwcm94eVByb3ZpZGVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzb3J0ZWRQcm94eU5hbWVzID0gY3JlYXRlTWVtbygoKSA9PlxyXG4gICAgICAgICAgICAgICAgICBzb3J0UHJveGllc0J5T3JkZXJpbmdUeXBlKFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3h5UHJvdmlkZXIucHJveGllcy5tYXAoKGkpID0+IGkubmFtZSkgPz8gW10sXHJcbiAgICAgICAgICAgICAgICAgICAgbGF0ZW5jeU1hcCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3hpZXNPcmRlcmluZ1R5cGUoKSxcclxuICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIClcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCB0aXRsZSA9IChcclxuICAgICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHByLThcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57cHJveHlQcm92aWRlci5uYW1lfTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhZGdlIGJhZGdlLXNtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3Byb3h5UHJvdmlkZXIucHJveGllcy5sZW5ndGh9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tY2lyY2xlIGJ0bi1zbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3VwZGF0aW5nTWFwKClbcHJveHlQcm92aWRlci5uYW1lXX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uVXBkYXRlUHJveHlQcm92aWRlckNsaWNrKGUsIHByb3h5UHJvdmlkZXIubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj17XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvblJlbG9hZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz17dHdNZXJnZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGluZ01hcCgpW3Byb3h5UHJvdmlkZXIubmFtZV0gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmltYXRlLXNwaW4gdGV4dC1zdWNjZXNzJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1jaXJjbGUgYnRuLXNtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm94eVByb3ZpZGVyTGF0ZW5jeVRlc3RpbmdNYXAoKVtwcm94eVByb3ZpZGVyLm5hbWVdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eyhlKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Qcm94eVByb3ZpZGVyTGF0ZW5jeVRlc3RDbGljayhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJveHlQcm92aWRlci5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uQnJhbmRTcGVlZHRlc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9e3R3TWVyZ2UoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJveHlQcm92aWRlckxhdGVuY3lUZXN0aW5nTWFwKClbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm94eVByb3ZpZGVyLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdICYmICdhbmltYXRlLXB1bHNlIHRleHQtc3VjY2VzcycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8U3Vic2NyaXB0aW9uSW5mb1xyXG4gICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uSW5mbz17cHJveHlQcm92aWRlci5zdWJzY3JpcHRpb25JbmZvfVxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXNtIHRleHQtc2xhdGUtNTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7cHJveHlQcm92aWRlci52ZWhpY2xlVHlwZX0gOjoge3QoJ3VwZGF0ZWQnKX17JyAnfVxyXG4gICAgICAgICAgICAgICAgICAgICAge2Zvcm1hdFRpbWVGcm9tTm93KHByb3h5UHJvdmlkZXIudXBkYXRlZEF0KX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPFNob3cgd2hlbj17IWNvbGxhcHNlZE1hcCgpW3Byb3h5UHJvdmlkZXIubmFtZV19PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPFByb3h5Tm9kZVByZXZpZXcgcHJveHlOYW1lTGlzdD17c29ydGVkUHJveHlOYW1lcygpfSAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvU2hvdz5cclxuICAgICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICAgICApXHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgPENvbGxhcHNlXHJcbiAgICAgICAgICAgICAgICAgICAgaXNPcGVuPXtjb2xsYXBzZWRNYXAoKVtwcm94eVByb3ZpZGVyLm5hbWVdfVxyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPXt0aXRsZX1cclxuICAgICAgICAgICAgICAgICAgICBvbkNvbGxhcHNlPXsodmFsKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgc2V0Q29sbGFwc2VkTWFwKHByb3h5UHJvdmlkZXIubmFtZSwgdmFsKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxGb3IgZWFjaD17c29ydGVkUHJveHlOYW1lcygpfT5cclxuICAgICAgICAgICAgICAgICAgICAgIHsocHJveHlOYW1lKSA9PiA8UHJveHlOb2RlQ2FyZCBwcm94eU5hbWU9e3Byb3h5TmFtZX0gLz59XHJcbiAgICAgICAgICAgICAgICAgICAgPC9Gb3I+XHJcbiAgICAgICAgICAgICAgICAgIDwvQ29sbGFwc2U+XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgPC9Gb3I+XHJcbiAgICAgICAgICA8L1JlbmRlckluVHdvQ29sdW1ucz5cclxuICAgICAgICA8L1Nob3c+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPFByb3hpZXNTZXR0aW5nc01vZGFsIHJlZj17KGVsKSA9PiAocHJveGllc1NldHRpbmdzTW9kYWxSZWYgPSBlbCl9IC8+XHJcbiAgICA8L2Rpdj5cclxuICApXHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUEsU0FDRUEsa0JBQWtCLEVBQ2xCQyxVQUFVLEVBQ1ZDLFlBQVksUUFDUCx1QkFBdUI7QUFDOUIsU0FBU0MsR0FBRyxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsWUFBWSxFQUFFQyxPQUFPLFFBQVEsVUFBVTtBQUN2RSxTQUFTQyxPQUFPLFFBQVEsZ0JBQWdCO0FBQ3hDLFNBQ0VDLE1BQU0sRUFDTkMsUUFBUSxFQUNSQyxvQkFBb0IsRUFDcEJDLGFBQWEsRUFDYkMsZ0JBQWdCLEVBQ2hCQyxrQkFBa0IsRUFDbEJDLGdCQUFnQixRQUNYLGNBQWM7QUFDckIsU0FDRUMsMkJBQTJCLEVBQzNCQyx5QkFBeUIsUUFDcEIsV0FBVztB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
|