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 { createComponent as _$createComponent } 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 { use as _$use } from "/node_modules/.vite/deps/solid-js_web.js?v=93754656";
|
const _tmpl$ = /*#__PURE__*/_$template(`<div class="mx-auto flex max-w-screen-sm flex-col items-center gap-4 py-10"><form class=contents><div class="flex w-full flex-col gap-4"><div class=flex-1><label class=label><span class=label-text></span></label><input name=url type=url class="input input-bordered w-full"placeholder=http://127.0.0.1:9090 list=defaultEndpoints><datalist id=defaultEndpoints><option value=http://127.0.0.1:9090></option></datalist></div><div class=flex-1><label class=label><span class=label-text></span></label><input name=secret type=password class="input input-bordered w-full"placeholder=secret></div></div></form><div class="grid w-full grid-cols-2 gap-4">`),
|
_tmpl$2 = /*#__PURE__*/_$template(`<div class="badge badge-info flex w-full cursor-pointer items-center justify-between gap-4 py-4"><span class=truncate>`);
|
import { createForm } from "/node_modules/.vite/deps/@felte_solid.js?v=22df2c05";
|
import { validator } from "/node_modules/.vite/deps/@felte_validator-zod.js?v=94100efe";
|
import { useLocation, useNavigate } from "/node_modules/@solidjs/router/dist/index.jsx";
|
import { IconX } from "/node_modules/.vite/deps/@tabler_icons-solidjs.js?v=000c47cd";
|
import ky from "/node_modules/.vite/deps/ky.js?v=cbf55a96";
|
import { For, onMount } from "/node_modules/.vite/deps/solid-js.js?v=93754656";
|
import { toast } from "/node_modules/solid-toast/dist/source/index.jsx";
|
import { v4 as uuid } from "/node_modules/.vite/deps/uuid.js?v=235b79ad";
|
import { z } from "/node_modules/.vite/deps/zod.js?v=1d32e327";
|
import { Button } from "/src/components/index.ts";
|
import { transformEndpointURL } from "/src/helpers/index.ts";
|
import { useI18n } from "/src/i18n/index.tsx";
|
import { endpointList, selectedEndpoint, setEndpointList, setSelectedEndpoint } from "/src/signals/index.ts";
|
const schema = z.object({
|
url: z.string().min(1),
|
secret: z.string()
|
});
|
export default (() => {
|
const [t] = useI18n();
|
const location = useLocation();
|
const navigate = useNavigate();
|
const onSetupSuccess = id => {
|
setSelectedEndpoint(id);
|
navigate('/overview');
|
};
|
const checkEndpoint = (url, secret) => ky.get(url, {
|
headers: secret ? {
|
Authorization: `Bearer ${secret}`
|
} : {}
|
}).then(({
|
ok
|
}) => ok).catch(err => {
|
const {
|
message
|
} = err;
|
toast.error(message);
|
});
|
const onEndpointSelect = async id => {
|
const endpoint = endpointList().find(e => e.id === id);
|
if (!endpoint) {
|
return;
|
}
|
if (!(await checkEndpoint(endpoint.url, endpoint.secret))) {
|
return;
|
}
|
onSetupSuccess(id);
|
};
|
const onSubmit = async ({
|
url,
|
secret
|
}) => {
|
const transformedURL = transformEndpointURL(url);
|
if (!(await checkEndpoint(transformedURL, secret))) {
|
return;
|
}
|
const id = uuid();
|
const list = endpointList().slice();
|
const point = list.find(history => history.url === transformedURL);
|
if (!point) {
|
// new host and secret
|
setEndpointList([{
|
id,
|
url: transformedURL,
|
secret
|
}, ...list]);
|
onSetupSuccess(id);
|
return;
|
}
|
|
// exist host we update secret and id no matter if secret is equal or not
|
point.secret = secret;
|
point.id = id;
|
setEndpointList(list);
|
onSetupSuccess(id);
|
};
|
const onError = err => {
|
const {
|
message
|
} = err;
|
toast.error(message);
|
};
|
const {
|
form
|
} = createForm({
|
extend: validator({
|
schema
|
}),
|
onSubmit,
|
onError
|
});
|
const onRemove = id => {
|
if (selectedEndpoint() === id) {
|
setSelectedEndpoint('');
|
}
|
setEndpointList(endpointList().filter(e => e.id !== id));
|
};
|
onMount(() => {
|
const query = new URLSearchParams(location.search);
|
if (query.has('hostname')) {
|
void onSubmit({
|
url: `${window.location.protocol}//${query.get('hostname')}${query.get('port') ? `:${query.get('port')}` : ''}`,
|
secret: query.get('secret') ?? ''
|
});
|
} else if (endpointList().length === 0) {
|
/**
|
we only try auto login when there is nothing in endpoint list
|
or user who is using default config won't be able to switch to another endpoint ever
|
*/
|
void onSubmit({
|
url: 'http://127.0.0.1:9090',
|
secret: ''
|
});
|
}
|
});
|
return (() => {
|
const _el$ = _tmpl$(),
|
_el$2 = _el$.firstChild,
|
_el$3 = _el$2.firstChild,
|
_el$4 = _el$3.firstChild,
|
_el$5 = _el$4.firstChild,
|
_el$6 = _el$5.firstChild,
|
_el$7 = _el$4.nextSibling,
|
_el$8 = _el$7.firstChild,
|
_el$9 = _el$8.firstChild,
|
_el$10 = _el$2.nextSibling;
|
_$use(form, _el$2, () => form);
|
_$insert(_el$6, () => t('endpointURL'));
|
_$insert(_el$9, () => t('secret'));
|
_$insert(_el$3, _$createComponent(Button, {
|
type: "submit",
|
"class": "btn-primary uppercase",
|
get children() {
|
return t('add');
|
}
|
}), null);
|
_$insert(_el$10, _$createComponent(For, {
|
get each() {
|
return endpointList();
|
},
|
children: ({
|
id,
|
url
|
}) => (() => {
|
const _el$11 = _tmpl$2(),
|
_el$12 = _el$11.firstChild;
|
_el$11.$$click = () => onEndpointSelect(id);
|
_$insert(_el$12, url);
|
_$insert(_el$11, _$createComponent(Button, {
|
"class": "btn-circle btn-ghost btn-xs text-white",
|
onClick: e => {
|
e.stopPropagation();
|
onRemove(id);
|
},
|
get children() {
|
return _$createComponent(IconX, {});
|
}
|
}), null);
|
return _el$11;
|
})()
|
}));
|
return _el$;
|
})();
|
});
|
_$delegateEvents(["click"]);
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVGb3JtIiwidmFsaWRhdG9yIiwidXNlTG9jYXRpb24iLCJ1c2VOYXZpZ2F0ZSIsIkljb25YIiwia3kiLCJGb3IiLCJvbk1vdW50IiwidG9hc3QiLCJ2NCIsInV1aWQiLCJ6IiwiQnV0dG9uIiwidHJhbnNmb3JtRW5kcG9pbnRVUkwiLCJ1c2VJMThuIiwiZW5kcG9pbnRMaXN0Iiwic2VsZWN0ZWRFbmRwb2ludCIsInNldEVuZHBvaW50TGlzdCIsInNldFNlbGVjdGVkRW5kcG9pbnQiLCJzY2hlbWEiLCJvYmplY3QiLCJ1cmwiLCJzdHJpbmciLCJtaW4iLCJzZWNyZXQiLCJ0IiwibG9jYXRpb24iLCJuYXZpZ2F0ZSIsIm9uU2V0dXBTdWNjZXNzIiwiaWQiLCJjaGVja0VuZHBvaW50IiwiZ2V0IiwiaGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJ0aGVuIiwib2siLCJjYXRjaCIsImVyciIsIm1lc3NhZ2UiLCJlcnJvciIsIm9uRW5kcG9pbnRTZWxlY3QiLCJlbmRwb2ludCIsImZpbmQiLCJlIiwib25TdWJtaXQiLCJ0cmFuc2Zvcm1lZFVSTCIsImxpc3QiLCJzbGljZSIsInBvaW50IiwiaGlzdG9yeSIsIm9uRXJyb3IiLCJmb3JtIiwiZXh0ZW5kIiwib25SZW1vdmUiLCJmaWx0ZXIiLCJxdWVyeSIsIlVSTFNlYXJjaFBhcmFtcyIsInNlYXJjaCIsImhhcyIsIndpbmRvdyIsInByb3RvY29sIiwibGVuZ3RoIiwiX2VsJCIsIl90bXBsJCIsIl9lbCQyIiwiZmlyc3RDaGlsZCIsIl9lbCQzIiwiX2VsJDQiLCJfZWwkNSIsIl9lbCQ2IiwiX2VsJDciLCJuZXh0U2libGluZyIsIl9lbCQ4IiwiX2VsJDkiLCJfZWwkMTAiLCJfJHVzZSIsIl8kaW5zZXJ0IiwiXyRjcmVhdGVDb21wb25lbnQiLCJ0eXBlIiwiY2hpbGRyZW4iLCJlYWNoIiwiX2VsJDExIiwiX3RtcGwkMiIsIl9lbCQxMiIsIiQkY2xpY2siLCJvbkNsaWNrIiwic3RvcFByb3BhZ2F0aW9uIiwiXyRkZWxlZ2F0ZUV2ZW50cyJdLCJzb3VyY2VzIjpbIlNldHVwLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVGb3JtIH0gZnJvbSAnQGZlbHRlL3NvbGlkJ1xyXG5pbXBvcnQgeyB2YWxpZGF0b3IgfSBmcm9tICdAZmVsdGUvdmFsaWRhdG9yLXpvZCdcclxuaW1wb3J0IHsgdXNlTG9jYXRpb24sIHVzZU5hdmlnYXRlIH0gZnJvbSAnQHNvbGlkanMvcm91dGVyJ1xyXG5pbXBvcnQgeyBJY29uWCB9IGZyb20gJ0B0YWJsZXIvaWNvbnMtc29saWRqcydcclxuaW1wb3J0IGt5IGZyb20gJ2t5J1xyXG5pbXBvcnQgeyBGb3IsIG9uTW91bnQgfSBmcm9tICdzb2xpZC1qcydcclxuaW1wb3J0IHsgdG9hc3QgfSBmcm9tICdzb2xpZC10b2FzdCdcclxuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gJ3V1aWQnXHJcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnXHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJ34vY29tcG9uZW50cydcclxuaW1wb3J0IHsgdHJhbnNmb3JtRW5kcG9pbnRVUkwgfSBmcm9tICd+L2hlbHBlcnMnXHJcbmltcG9ydCB7IHVzZUkxOG4gfSBmcm9tICd+L2kxOG4nXHJcbmltcG9ydCB7XHJcbiAgZW5kcG9pbnRMaXN0LFxyXG4gIHNlbGVjdGVkRW5kcG9pbnQsXHJcbiAgc2V0RW5kcG9pbnRMaXN0LFxyXG4gIHNldFNlbGVjdGVkRW5kcG9pbnQsXHJcbn0gZnJvbSAnfi9zaWduYWxzJ1xyXG5cclxuY29uc3Qgc2NoZW1hID0gei5vYmplY3Qoe1xyXG4gIHVybDogei5zdHJpbmcoKS5taW4oMSksXHJcbiAgc2VjcmV0OiB6LnN0cmluZygpLFxyXG59KVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgKCkgPT4ge1xyXG4gIGNvbnN0IFt0XSA9IHVzZUkxOG4oKVxyXG4gIGNvbnN0IGxvY2F0aW9uID0gdXNlTG9jYXRpb24oKVxyXG4gIGNvbnN0IG5hdmlnYXRlID0gdXNlTmF2aWdhdGUoKVxyXG5cclxuICBjb25zdCBvblNldHVwU3VjY2VzcyA9IChpZDogc3RyaW5nKSA9PiB7XHJcbiAgICBzZXRTZWxlY3RlZEVuZHBvaW50KGlkKVxyXG4gICAgbmF2aWdhdGUoJy9vdmVydmlldycpXHJcbiAgfVxyXG5cclxuICBjb25zdCBjaGVja0VuZHBvaW50ID0gKHVybDogc3RyaW5nLCBzZWNyZXQ6IHN0cmluZykgPT5cclxuICAgIGt5XHJcbiAgICAgIC5nZXQodXJsLCB7XHJcbiAgICAgICAgaGVhZGVyczogc2VjcmV0XHJcbiAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7c2VjcmV0fWAsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDoge30sXHJcbiAgICAgIH0pXHJcbiAgICAgIC50aGVuKCh7IG9rIH0pID0+IG9rKVxyXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgbWVzc2FnZSB9ID0gZXJyIGFzIEVycm9yXHJcblxyXG4gICAgICAgIHRvYXN0LmVycm9yKG1lc3NhZ2UpXHJcbiAgICAgIH0pXHJcblxyXG4gIGNvbnN0IG9uRW5kcG9pbnRTZWxlY3QgPSBhc3luYyAoaWQ6IHN0cmluZykgPT4ge1xyXG4gICAgY29uc3QgZW5kcG9pbnQgPSBlbmRwb2ludExpc3QoKS5maW5kKChlKSA9PiBlLmlkID09PSBpZClcclxuXHJcbiAgICBpZiAoIWVuZHBvaW50KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG5cclxuICAgIGlmICghKGF3YWl0IGNoZWNrRW5kcG9pbnQoZW5kcG9pbnQudXJsLCBlbmRwb2ludC5zZWNyZXQpKSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBvblNldHVwU3VjY2VzcyhpZClcclxuICB9XHJcblxyXG4gIGNvbnN0IG9uU3VibWl0ID0gYXN5bmMgKHsgdXJsLCBzZWNyZXQgfTogeyB1cmw6IHN0cmluZzsgc2VjcmV0OiBzdHJpbmcgfSkgPT4ge1xyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRVUkwgPSB0cmFuc2Zvcm1FbmRwb2ludFVSTCh1cmwpXHJcblxyXG4gICAgaWYgKCEoYXdhaXQgY2hlY2tFbmRwb2ludCh0cmFuc2Zvcm1lZFVSTCwgc2VjcmV0KSkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaWQgPSB1dWlkKClcclxuICAgIGNvbnN0IGxpc3QgPSBlbmRwb2ludExpc3QoKS5zbGljZSgpXHJcbiAgICBjb25zdCBwb2ludCA9IGxpc3QuZmluZCgoaGlzdG9yeSkgPT4gaGlzdG9yeS51cmwgPT09IHRyYW5zZm9ybWVkVVJMKVxyXG5cclxuICAgIGlmICghcG9pbnQpIHtcclxuICAgICAgLy8gbmV3IGhvc3QgYW5kIHNlY3JldFxyXG4gICAgICBzZXRFbmRwb2ludExpc3QoW3sgaWQsIHVybDogdHJhbnNmb3JtZWRVUkwsIHNlY3JldCB9LCAuLi5saXN0XSlcclxuICAgICAgb25TZXR1cFN1Y2Nlc3MoaWQpXHJcblxyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICAvLyBleGlzdCBob3N0IHdlIHVwZGF0ZSBzZWNyZXQgYW5kIGlkIG5vIG1hdHRlciBpZiBzZWNyZXQgaXMgZXF1YWwgb3Igbm90XHJcbiAgICBwb2ludC5zZWNyZXQgPSBzZWNyZXRcclxuICAgIHBvaW50LmlkID0gaWRcclxuXHJcbiAgICBzZXRFbmRwb2ludExpc3QobGlzdClcclxuICAgIG9uU2V0dXBTdWNjZXNzKGlkKVxyXG4gIH1cclxuXHJcbiAgY29uc3Qgb25FcnJvciA9IChlcnI6IHVua25vd24pID0+IHtcclxuICAgIGNvbnN0IHsgbWVzc2FnZSB9ID0gZXJyIGFzIEVycm9yXHJcblxyXG4gICAgdG9hc3QuZXJyb3IobWVzc2FnZSlcclxuICB9XHJcblxyXG4gIGNvbnN0IHsgZm9ybSB9ID0gY3JlYXRlRm9ybTx6LmluZmVyPHR5cGVvZiBzY2hlbWE+Pih7XHJcbiAgICBleHRlbmQ6IHZhbGlkYXRvcih7IHNjaGVtYSB9KSxcclxuICAgIG9uU3VibWl0LFxyXG4gICAgb25FcnJvcixcclxuICB9KVxyXG5cclxuICBjb25zdCBvblJlbW92ZSA9IChpZDogc3RyaW5nKSA9PiB7XHJcbiAgICBpZiAoc2VsZWN0ZWRFbmRwb2ludCgpID09PSBpZCkge1xyXG4gICAgICBzZXRTZWxlY3RlZEVuZHBvaW50KCcnKVxyXG4gICAgfVxyXG5cclxuICAgIHNldEVuZHBvaW50TGlzdChlbmRwb2ludExpc3QoKS5maWx0ZXIoKGUpID0+IGUuaWQgIT09IGlkKSlcclxuICB9XHJcblxyXG4gIG9uTW91bnQoKCkgPT4ge1xyXG4gICAgY29uc3QgcXVlcnkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKGxvY2F0aW9uLnNlYXJjaClcclxuXHJcbiAgICBpZiAocXVlcnkuaGFzKCdob3N0bmFtZScpKSB7XHJcbiAgICAgIHZvaWQgb25TdWJtaXQoe1xyXG4gICAgICAgIHVybDogYCR7d2luZG93LmxvY2F0aW9uLnByb3RvY29sfS8vJHtxdWVyeS5nZXQoJ2hvc3RuYW1lJyl9JHtcclxuICAgICAgICAgIHF1ZXJ5LmdldCgncG9ydCcpID8gYDoke3F1ZXJ5LmdldCgncG9ydCcpfWAgOiAnJ1xyXG4gICAgICAgIH1gLFxyXG4gICAgICAgIHNlY3JldDogcXVlcnkuZ2V0KCdzZWNyZXQnKSA/PyAnJyxcclxuICAgICAgfSlcclxuICAgIH0gZWxzZSBpZiAoZW5kcG9pbnRMaXN0KCkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgIHdlIG9ubHkgdHJ5IGF1dG8gbG9naW4gd2hlbiB0aGVyZSBpcyBub3RoaW5nIGluIGVuZHBvaW50IGxpc3RcclxuICAgICAgICBvciB1c2VyIHdobyBpcyB1c2luZyBkZWZhdWx0IGNvbmZpZyB3b24ndCBiZSBhYmxlIHRvIHN3aXRjaCB0byBhbm90aGVyIGVuZHBvaW50IGV2ZXJcclxuICAgICAgKi9cclxuICAgICAgdm9pZCBvblN1Ym1pdCh7XHJcbiAgICAgICAgdXJsOiAnaHR0cDovLzEyNy4wLjAuMTo5MDkwJyxcclxuICAgICAgICBzZWNyZXQ6ICcnLFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH0pXHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2IGNsYXNzPVwibXgtYXV0byBmbGV4IG1heC13LXNjcmVlbi1zbSBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgZ2FwLTQgcHktMTBcIj5cclxuICAgICAgPGZvcm0gY2xhc3M9XCJjb250ZW50c1wiIHVzZTpmb3JtPXtmb3JtfT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGwgZmxleC1jb2wgZ2FwLTRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LTFcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWxcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsLXRleHRcIj57dCgnZW5kcG9pbnRVUkwnKX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbGFiZWw+XHJcblxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICBuYW1lPVwidXJsXCJcclxuICAgICAgICAgICAgICB0eXBlPVwidXJsXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImlucHV0IGlucHV0LWJvcmRlcmVkIHctZnVsbFwiXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJodHRwOi8vMTI3LjAuMC4xOjkwOTBcIlxyXG4gICAgICAgICAgICAgIGxpc3Q9XCJkZWZhdWx0RW5kcG9pbnRzXCJcclxuICAgICAgICAgICAgLz5cclxuXHJcbiAgICAgICAgICAgIDxkYXRhbGlzdCBpZD1cImRlZmF1bHRFbmRwb2ludHNcIj5cclxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiaHR0cDovLzEyNy4wLjAuMTo5MDkwXCIgLz5cclxuICAgICAgICAgICAgPC9kYXRhbGlzdD5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LTFcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWxcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsLXRleHRcIj57dCgnc2VjcmV0Jyl9PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgbmFtZT1cInNlY3JldFwiXHJcbiAgICAgICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImlucHV0IGlucHV0LWJvcmRlcmVkIHctZnVsbFwiXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJzZWNyZXRcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPEJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4tcHJpbWFyeSB1cHBlcmNhc2VcIj5cclxuICAgICAgICAgICAge3QoJ2FkZCcpfVxyXG4gICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZm9ybT5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJncmlkIHctZnVsbCBncmlkLWNvbHMtMiBnYXAtNFwiPlxyXG4gICAgICAgIDxGb3IgZWFjaD17ZW5kcG9pbnRMaXN0KCl9PlxyXG4gICAgICAgICAgeyh7IGlkLCB1cmwgfSkgPT4gKFxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvIGZsZXggdy1mdWxsIGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTQgcHktNFwiXHJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb25FbmRwb2ludFNlbGVjdChpZCl9XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRydW5jYXRlXCI+e3VybH08L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWNpcmNsZSBidG4tZ2hvc3QgYnRuLXhzIHRleHQtd2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgb25DbGljaz17KGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxyXG4gICAgICAgICAgICAgICAgICBvblJlbW92ZShpZClcclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPEljb25YIC8+XHJcbiAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgKX1cclxuICAgICAgICA8L0Zvcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICApXHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsU0FBU0EsVUFBVSxRQUFRLGNBQWM7QUFDekMsU0FBU0MsU0FBUyxRQUFRLHNCQUFzQjtBQUNoRCxTQUFTQyxXQUFXLEVBQUVDLFdBQVcsUUFBUSxpQkFBaUI7QUFDMUQsU0FBU0MsS0FBSyxRQUFRLHVCQUF1QjtBQUM3QyxPQUFPQyxFQUFFLE1BQU0sSUFBSTtBQUNuQixTQUFTQyxHQUFHLEVBQUVDLE9BQU8sUUFBUSxVQUFVO0FBQ3ZDLFNBQVNDLEtBQUssUUFBUSxhQUFhO0FBQ25DLFNBQVNDLEVBQUUsSUFBSUMsSUFBSSxRQUFRLE1BQU07QUFDakMsU0FBU0MsQ0FBQyxRQUFRLEtBQUs7QUFDdkIsU0FBU0MsTUFBTSxRQUFRLGNBQWM7QUFDckMsU0FBU0Msb0JBQW9CLFFBQVEsV0FBVztBQUNoRCxTQUFTQyxPQUFPLFFBQVEsUUFBUTtBQUNoQyxTQUNFQyxZQUFZLEVBQ1pDLGdCQUFnQixFQUNoQkMsZUFBZSxFQUNmQyxtQkFBbUIsUUFDZCxXQUFXO0FBRWxCLE1BQU1DLE1BQU0sR0FBR1IsQ0FBQyxDQUFDUyxNQUFNLENBQUM7RUFDdEJDLEdBQUcsRUFBRVYsQ0FBQyxDQUFDVyxNQUFNLENBQUMsQ0FBQyxDQUFDQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBQ3RCQyxNQUFNLEVBQUViLENBQUMsQ0FBQ1csTUFBTSxDQUFDO0FBQ25CLENBQUMsQ0FBQztBQUVGLGdCQUFlLE1BQU07RUFDbkIsTUFBTSxDQUFDRyxDQUFDLENBQUMsR0FBR1gsT0FBTyxDQUFDLENBQUM7RUFDckIsTUFBTVksUUFBUSxHQUFHeEIsV0FBVyxDQUFDLENBQUM7RUFDOUIsTUFBTXlCLFFBQVEsR0FBR3hCLFdBQVcsQ0FBQyxDQUFDO0VBRTlCLE1BQU15QixjQUFjLEdBQUlDLEVBQVUsSUFBSztJQUNyQ1gsbUJBQW1CLENBQUNXLEVBQUUsQ0FBQztJQUN2QkYsUUFBUSxDQUFDLFdBQVcsQ0FBQztFQUN2QixDQUFDO0VBRUQsTUFBTUcsYUFBYSxHQUFHQSxDQUFDVCxHQUFXLEVBQUVHLE1BQWMsS0FDaERuQixFQUFFLENBQ0MwQixHQUFHLENBQUNWLEdBQUcsRUFBRTtJQUNSVyxPQUFPLEVBQUVSLE1BQU0sR0FDWDtNQUNFUyxhQUFhLEVBQUcsVUFBU1QsTUFBTztJQUNsQyxDQUFDLEdBQ0QsQ0FBQztFQUNQLENBQUMsQ0FBQyxDQUNEVSxJQUFJLENBQUMsQ0FBQztJQUFFQztFQUFHLENBQUMsS0FBS0EsRUFBRSxDQUFDLENBQ3BCQyxLQUFLLENBQUVDLEdBQUcsSUFBSztJQUNkLE1BQU07TUFBRUM7SUFBUSxDQUFDLEdBQUdELEdBQVk7SUFFaEM3QixLQUFLLENBQUMrQixLQUFLLENBQUNELE9BQU8sQ0FBQztFQUN0QixDQUFDLENBQUM7RUFFTixNQUFNRSxnQkFBZ0IsR0FBRyxNQUFPWCxFQUFVLElBQUs7SUFDN0MsTUFBTVksUUFBUSxHQUFHMUIsWUFBWSxDQUFDLENBQUMsQ0FBQzJCLElBQUksQ0FBRUMsQ0FBQyxJQUFLQSxDQUFDLENBQUNkLEVBQUUsS0FBS0EsRUFBRSxDQUFDO0lBRXhELElBQUksQ0FBQ1ksUUFBUSxFQUFFO01BQ2I7SUFDRjtJQUVBLElBQUksRUFBRSxNQUFNWCxhQUFhLENBQUNXLFFBQVEsQ0FBQ3BCLEdBQUcsRUFBRW9CLFFBQVEsQ0FBQ2pCLE1BQU0sQ0FBQyxDQUFDLEVBQUU7TUFDekQ7SUFDRjtJQUVBSSxjQUFjLENBQUNDLEVBQUUsQ0FBQztFQUNwQixDQUFDO0VBRUQsTUFBTWUsUUFBUSxHQUFHLE1BQUFBLENBQU87SUFBRXZCLEdBQUc7SUFBRUc7RUFBd0MsQ0FBQyxLQUFLO0lBQzNFLE1BQU1xQixjQUFjLEdBQUdoQyxvQkFBb0IsQ0FBQ1EsR0FBRyxDQUFDO0lBRWhELElBQUksRUFBRSxNQUFNUyxhQUFhLENBQUNlLGNBQWMsRUFBRXJCLE1BQU0sQ0FBQyxDQUFDLEVBQUU7TUFDbEQ7SUFDRjtJQUVBLE1BQU1LLEVBQUUsR0FBR25CLElBQUksQ0FBQyxDQUFDO0lBQ2pCLE1BQU1vQyxJQUFJLEdBQUcvQixZQUFZLENBQUMsQ0FBQyxDQUFDZ0MsS0FBSyxDQUFDLENBQUM7SUFDbkMsTUFBTUMsS0FBSyxHQUFHRixJQUFJLENBQUNKLElBQUksQ0FBRU8sT0FBTyxJQUFLQSxPQUFPLENBQUM1QixHQUFHLEtBQUt3QixjQUFjLENBQUM7SUFFcEUsSUFBSSxDQUFDRyxLQUFLLEVBQUU7TUFDVjtNQUNBL0IsZUFBZSxDQUFDLENBQUM7UUFBRVksRUFBRTtRQUFFUixHQUFHLEVBQUV3QixjQUFjO1FBQUVyQjtNQUFPLENBQUMsRUFBRSxHQUFHc0IsSUFBSSxDQUFDLENBQUM7TUFDL0RsQixjQUFjLENBQUNDLEVBQUUsQ0FBQztNQUVsQjtJQUNGOztJQUVBO0lBQ0FtQixLQUFLLENBQUN4QixNQUFNLEdBQUdBLE1BQU07SUFDckJ3QixLQUFLLENBQUNuQixFQUFFLEdBQUdBLEVBQUU7SUFFYlosZUFBZSxDQUFDNkIsSUFBSSxDQUFDO0lBQ3JCbEIsY0FBYyxDQUFDQyxFQUFFLENBQUM7RUFDcEIsQ0FBQztFQUVELE1BQU1xQixPQUFPLEdBQUliLEdBQVksSUFBSztJQUNoQyxNQUFNO01BQUVDO0lBQVEsQ0FBQyxHQUFHRCxHQUFZO0lBRWhDN0IsS0FBSyxDQUFDK0IsS0FBSyxDQUFDRCxPQUFPLENBQUM7RUFDdEIsQ0FBQztFQUVELE1BQU07SUFBRWE7RUFBSyxDQUFDLEdBQUduRCxVQUFVLENBQXlCO0lBQ2xEb0QsTUFBTSxFQUFFbkQsU0FBUyxDQUFDO01BQUVrQjtJQUFPLENBQUMsQ0FBQztJQUM3QnlCLFFBQVE7SUFDUk07RUFDRixDQUFDLENBQUM7RUFFRixNQUFNRyxRQUFRLEdBQUl4QixFQUFVLElBQUs7SUFDL0IsSUFBSWIsZ0JBQWdCLENBQUMsQ0FBQyxLQUFLYSxFQUFFLEVBQUU7TUFDN0JYLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztJQUN6QjtJQUVBRCxlQUFlLENBQUNGLFlBQVksQ0FBQyxDQUFDLENBQUN1QyxNQUFNLENBQUVYLENBQUMsSUFBS0EsQ0FBQyxDQUFDZCxFQUFFLEtBQUtBLEVBQUUsQ0FBQyxDQUFDO0VBQzVELENBQUM7RUFFRHRCLE9BQU8sQ0FBQyxNQUFNO0lBQ1osTUFBTWdELEtBQUssR0FBRyxJQUFJQyxlQUFlLENBQUM5QixRQUFRLENBQUMrQixNQUFNLENBQUM7SUFFbEQsSUFBSUYsS0FBSyxDQUFDRyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUU7TUFDekIsS0FBS2QsUUFBUSxDQUFDO1FBQ1p2QixHQUFHLEVBQUcsR0FBRXNDLE1BQU0sQ0FBQ2pDLFFBQVEsQ0FBQ2tDLFFBQVMsS0FBSUwsS0FBSyxDQUFDeEIsR0FBRyxDQUFDLFVBQVUsQ0FBRSxHQUN6RHdCLEtBQUssQ0FBQ3hCLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBSSxJQUFHd0IsS0FBSyxDQUFDeEIsR0FBRyxDQUFDLE1BQU0sQ0FBRSxFQUFDLEdBQUcsRUFDL0MsRUFBQztRQUNGUCxNQUFNLEVBQUUrQixLQUFLLENBQUN4QixHQUFHLENBQUMsUUFBUSxDQUFDLElBQUk7TUFDakMsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxNQUFNLElBQUloQixZQUFZLENBQUMsQ0FBQyxDQUFDOEMsTUFBTSxLQUFLLENBQUMsRUFBRTtNQUN0QztBQUNOO0FBQ0E7QUFDQTtNQUNNLEtBQUtqQixRQUFRLENBQUM7UUFDWnZCLEdBQUcsRUFBRSx1QkFBdUI7UUFDNUJHLE1BQU0sRUFBRTtNQUNWLENBQUMsQ0FBQztJQUNKO0VBQ0YsQ0FBQyxDQUFDO0VBRUY7SUFBQSxNQUFBc0MsSUFBQSxHQUFBQyxNQUFBO01BQUFDLEtBQUEsR0FBQUYsSUFBQSxDQUFBRyxVQUFBO01BQUFDLEtBQUEsR0FBQUYsS0FBQSxDQUFBQyxVQUFBO01BQUFFLEtBQUEsR0FBQUQsS0FBQSxDQUFBRCxVQUFBO01BQUFHLEtBQUEsR0FBQUQsS0FBQSxDQUFBRixVQUFBO01BQUFJLEtBQUEsR0FBQUQsS0FBQSxDQUFBSCxVQUFBO01BQUFLLEtBQUEsR0FBQUgsS0FBQSxDQUFBSSxXQUFBO01BQUFDLEtBQUEsR0FBQUYsS0FBQSxDQUFBTCxVQUFBO01BQUFRLEtBQUEsR0FBQUQsS0FBQSxDQUFBUCxVQUFBO01BQUFTLE1BQUEsR0FBQVYsS0FBQSxDQUFBTyxXQUFBO0lBQUFJLEtBQUEsQ0FFK0J4QixJQUFJLEVBQUFhLEtBQUEsUUFBRWIsSUFBSTtJQUFBeUIsUUFBQSxDQUFBUCxLQUFBLFFBSUg1QyxDQUFDLENBQUMsYUFBYSxDQUFDO0lBQUFtRCxRQUFBLENBQUFILEtBQUEsUUFrQmhCaEQsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUFBbUQsUUFBQSxDQUFBVixLQUFBLEVBQUFXLGlCQUFBLENBV3hDakUsTUFBTTtNQUFDa0UsSUFBSTtNQUFBO01BQUEsSUFBQUMsU0FBQTtRQUFBLE9BQ1R0RCxDQUFDLENBQUMsS0FBSyxDQUFDO01BQUE7SUFBQTtJQUFBbUQsUUFBQSxDQUFBRixNQUFBLEVBQUFHLGlCQUFBLENBTVp2RSxHQUFHO01BQUEsSUFBQzBFLElBQUlBLENBQUE7UUFBQSxPQUFFakUsWUFBWSxDQUFDLENBQUM7TUFBQTtNQUFBZ0UsUUFBQSxFQUN0QkEsQ0FBQztRQUFFbEQsRUFBRTtRQUFFUjtNQUFJLENBQUM7UUFBQSxNQUFBNEQsTUFBQSxHQUFBQyxPQUFBO1VBQUFDLE1BQUEsR0FBQUYsTUFBQSxDQUFBaEIsVUFBQTtRQUFBZ0IsTUFBQSxDQUFBRyxPQUFBLEdBR0EsTUFBTTVDLGdCQUFnQixDQUFDWCxFQUFFLENBQUM7UUFBQStDLFFBQUEsQ0FBQU8sTUFBQSxFQUVYOUQsR0FBRztRQUFBdUQsUUFBQSxDQUFBSyxNQUFBLEVBQUFKLGlCQUFBLENBRTFCakUsTUFBTTtVQUFBO1VBRUx5RSxPQUFPLEVBQUcxQyxDQUFDLElBQUs7WUFDZEEsQ0FBQyxDQUFDMkMsZUFBZSxDQUFDLENBQUM7WUFDbkJqQyxRQUFRLENBQUN4QixFQUFFLENBQUM7VUFDZCxDQUFDO1VBQUEsSUFBQWtELFNBQUE7WUFBQSxPQUFBRixpQkFBQSxDQUVBekUsS0FBSztVQUFBO1FBQUE7UUFBQSxPQUFBNkUsTUFBQTtNQUFBO0lBR1g7SUFBQSxPQUFBbkIsSUFBQTtFQUFBO0FBS1gsQ0FBQztBQUFBeUIsZ0JBQUEifQ==
|