diff --git a/esbuild.config.mjs b/esbuild.config.mjs
index c275170..300efb3 100644
--- a/esbuild.config.mjs
+++ b/esbuild.config.mjs
@@ -2,7 +2,7 @@ import esbuild from "esbuild";
import process from "process";
import builtins from "builtin-modules";
import { lessLoader } from "esbuild-plugin-less";
-import svg from 'esbuild-plugin-svg';
+import { svgo } from "@hyrious/esbuild-plugin-svgo";
const banner = `/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
@@ -40,7 +40,8 @@ const context = await esbuild.context({
sourcemap: prod ? false : "inline",
treeShaking: true,
outfile: "main.js",
- plugins: [lessLoader(), svg()],
+ plugins: [lessLoader(), svgo()],
+ loader: { '.svg': 'dataurl' },
});
if (prod) {
diff --git a/main.css b/main.css
index 4b83f05..dc644ce 100644
--- a/main.css
+++ b/main.css
@@ -877,7 +877,7 @@ form fieldset select {
display: inline-block;
}
.x-spreadsheet-icon .x-spreadsheet-icon-img {
- background-image: url(data:text/plain;base64,PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4xIiB4PSIwIiB5PSIwIiB3aWR0aD0iMjYycHgiIGhlaWdodD0iNzJweCIgdmlld0JveD0iMCAwIDI2MiA3MiIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwwKSI+PHBhdGggZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTEuNTY1NjM5MSw0LjQzNDM2MDg4IEw5LDcgTDE2LDcgTDE2LDAgTDEzLjA0MTg0MjQsMi45NTgxNTc1OCBDMTEuNTkzNjc4NywxLjczNjM1OTU5IDkuNzIyNjA3NzUsMSA3LjY3OTU1MDgzLDEgQzQuMjIxMjYyNTgsMSAxLjI1NTc1NTk5LDMuMTA5ODQ5MDggMCw2IEwyLDcgQzIuOTM2NTg3NzUsNC42MDk3NDQwNiA1LjEyOTQzNjk3LDMuMDgwMTEyMjkgNy42Nzk1NTA4MywzIEM5LjE0ODgxMjQ3LDMuMDUyODc0NyAxMC40OTk0NzgzLDMuNTc4NjIwNTMgMTEuNTY1NjM5MSw0LjQzNDM2MDg4IFoiIHRyYW5zZm9ybT0ibWF0cml4KC0xIDAgMCAxIDE3IDUpIi8+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxOCwwKSI+PHBhdGggZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTEuNTY1NjM5MSw0LjQzNDM2MDg4IEw5LDcgTDE2LDcgTDE2LDAgTDEzLjA0MTg0MjQsMi45NTgxNTc1OCBDMTEuNTkzNjc4NywxLjczNjM1OTU5IDkuNzIyNjA3NzUsMSA3LjY3OTU1MDgzLDEgQzQuMjIxMjYyNTgsMSAxLjI1NTc1NTk5LDMuMTA5ODQ5MDggMCw2IEwyLDcgQzIuOTM2NTg3NzUsNC42MDk3NDQwNiA1LjEyOTQzNjk3LDMuMDgwMTEyMjkgNy42Nzk1NTA4MywzIEM5LjE0ODgxMjQ3LDMuMDUyODc0NyAxMC40OTk0NzgzLDMuNTc4NjIwNTMgMTEuNTY1NjM5MSw0LjQzNDM2MDg4IFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEgNSkiLz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM2LDApIj48cGF0aCBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMywxNCBMMywxNCBMMywxMSBMMCwxMSBMMCw2LjAwNTkxOTA1IEMwLDQuODk4MDgwNTUgMC44OTQ1MTM3NTYsNCAxLjk5NDA2MDI4LDQgTDE0LjAwNTkzOTcsNCBDMTUuMTA3MjI4OCw0IDE2LDQuODg2NTU0ODQgMTYsNi4wMDU5MTkwNSBMMTYsMTEgTDEzLDExIEwxMywxNCBaIE01LDkgTDExLDkgTDExLDEyIEw1LDEyIEw1LDkgWiBNMywwIEwxMywwIEwxMywzIEwzLDMgTDMsMCBaIE0xMiw2IEwxNCw2IEwxNCw4IEwxMiw4IEwxMiw2IFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEgMikiLz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDU0LDApIj48cGF0aCBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik05LDAgTDEsMCBDMC40NSwwIDAsMC40NSAwLDEgTDAsNCBDMCw0LjU1IDAuNDUsNSAxLDUgTDksNSBDOS41NSw1IDEwLDQuNTUgMTAsNCBMMTAsMyBMMTEsMyBMMTEsNiBMNCw2IEw0LDE0IEw2LDE0IEw2LDggTDEzLDggTDEzLDIgTDEwLDIgTDEwLDEgQzEwLDAuNDUgOS41NSwwIDksMCBaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzIDIpIi8+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3MiwwKSI+PHBhdGggZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMC4yNywxLjU1IEw1LjQzLDYuNyBMMywxMiBMNS41LDEyIEw3LjE0LDguNDIgTDExLjczLDEzIEwxMywxMS43MyBMMS41NSwwLjI3IEwwLjI3LDEuNTUgTDAuMjcsMS41NSBaIE0zLjgyLDAgTDUuODIsMiBMNy41OCwyIEw3LjAzLDMuMjEgTDguNzQsNC45MiBMMTAuMDgsMiBMMTQsMiBMMTQsMCBMMy44MiwwIEwzLjgyLDAgWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMiAzKSIvPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTAsMCkiPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTksMy41IEM5LDEuNTcgNy40MywwIDUuNSwwIEwxLjc3NjM1Njg0ZS0xNSwwIEwxLjc3NjM1Njg0ZS0xNSwxMiBMNi4yNSwxMiBDOC4wNCwxMiA5LjUsMTAuNTQgOS41LDguNzUgQzkuNSw3LjQ1IDguNzMsNi4zNCA3LjYzLDUuODIgQzguNDYsNS4yNCA5LDQuMzggOSwzLjUgWiBNNSwyIEM1LjgyOTk5OTkyLDIgNi41LDIuNjcgNi41LDMuNSBDNi41LDQuMzMgNS44Mjk5OTk5Miw1IDUsNSBMMyw1IEwzLDIgTDUsMiBaIE0zLDEwIEwzLDcgTDUuNSw3IEM2LjMyOTk5OTkyLDcgNyw3LjY3IDcsOC41IEM3LDkuMzMgNi4zMjk5OTk5MiwxMCA1LjUsMTAgTDMsMTAgWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNCAzKSIvPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTA4LDApIj48cG9seWdvbiBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHBvaW50cz0iNCAwIDQgMiA2LjU4IDIgMi45MiAxMCAwIDEwIDAgMTIgOCAxMiA4IDEwIDUuNDIgMTAgOS4wOCAyIDEyIDIgMTIgMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMyAzKSIvPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTI2LDApIj48cGF0aCBmaWxsPSIjMDAwMDAwIiBkPSJNNiwxMiBDOC43NiwxMiAxMSw5Ljc2IDExLDcgTDExLDAgTDksMCBMOSw3IEM5LDguNzUwMjk5MTYgNy40OTkxMjgwNywxMCA2LDEwIEM0LjUwMDg3MTkzLDEwIDMsOC43NTgzNzQ4NiAzLDcgTDMsMCBMMSwwIEwxLDcgQzEsOS43NiAzLjI0LDEyIDYsMTIgWiBNMCwxMyBMMCwxNSBMMTIsMTUgTDEyLDEzIEwwLDEzIFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiLz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE0NCwwKSI+PHBhdGggZmlsbD0iIzAxMDEwMSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMi44ODc1LDMuMDYgQzIuODg3NSwyLjYwMjUgMi45ODUsMi4xODYyNSAzLjE4Mzc1LDEuODA3NSBDMy4zODI1LDEuNDI4NzUgMy42NiwxLjEwNjI1IDQuMDIsMC44NCBDNC4zOCwwLjU3Mzc1IDQuODAzNzUsMC4zNjc1IDUuMjk4NzUsMC4yMjEyNSBDNS43OTM3NSwwLjA3NSA2LjMzMzc1LDAgNi45MjYyNSwwIEM3LjUzMzc1LDAgOC4wODUsMC4wODI1IDguNTgsMC4yNTEyNSBDOS4wNzUsMC40MiA5LjQ5ODc1LDAuNjUyNSA5Ljg1MTI1LDAuOTU2MjUgQzEwLjIwMzc1LDEuMjU2MjUgMTAuNDczNzUsMS42MTI1IDEwLjY2NSwyLjAyODc1IEMxMC44NTYyNSwyLjQ0MTI1IDEwLjk1LDIuODk1IDEwLjk1LDMuMzg2MjUgTDguNjkyNSwzLjM4NjI1IEM4LjY5MjUsMy4xNTc1IDguNjU1LDIuOTQzNzUgOC41ODM3NSwyLjc0ODc1IEM4LjUxMjUsMi41NSA4LjQsMi4zODEyNSA4LjI1LDIuMjQyNSBDOC4xLDIuMTAzNzUgNy45MTI1LDEuOTkxMjUgNy42ODc1LDEuOTE2MjUgQzcuNDYyNSwxLjgzNzUgNy4xOTYyNSwxLjggNi44ODg3NSwxLjggQzYuNTkyNSwxLjggNi4zMzc1LDEuODMzNzUgNi4xMTYyNSwxLjg5NzUgQzUuODk4NzUsMS45NjEyNSA1LjcxODc1LDIuMDUxMjUgNS41NzYyNSwyLjE2NzUgQzUuNDMzNzUsMi4yODM3NSA1LjMyNSwyLjQxODc1IDUuMjUzNzUsMi41NzI1IEM1LjE4MjUsMi43MjYyNSA1LjE0NSwyLjg5NSA1LjE0NSwzLjA2NzUgQzUuMTQ1LDMuNDI3NSA1LjMyODc1LDMuNzMxMjUgNS42OTYyNSwzLjk3NSBDNS43MTc4MDIwMywzLjk4OTA4MDY2IDUuNzM5NDIwMTIsNC4wMDMxMTcyOCA1Ljc2MTE4MzU3LDQuMDE3MzMzMTUgQzYuMDIzNDI5MjMsNC4xODg2MzE4NSA2LjUsNC41IDcsNSBMNCw1IEM0LDUgMy4yMTM3NSw0LjM3NjI1IDMuMTc2MjUsNC4zMDg3NSBDMi45ODUsMy45NTI1IDIuODg3NSwzLjUzNjI1IDIuODg3NSwzLjA2IFogTTE0LDYgTDAsNiBMMCw4IEw3LjIxODc1LDggQzcuMzUzNzUsOC4wNTI1IDcuNTE4NzUsOC4xMDUgNy42MzEyNSw4LjE1Mzc1IEM3LjkwODc1LDguMjc3NSA4LjEyNjI1LDguNDA4NzUgOC4yODM3NSw4LjUzNjI1IEM4LjQ0MTI1LDguNjY3NSA4LjU0NjI1LDguODEgOC42MDI1LDguOTYgQzguNjU4NzUsOS4xMTM3NSA4LjY4NSw5LjI4NjI1IDguNjg1LDkuNDczNzUgQzguNjg1LDkuNjUgOC42NTEyNSw5LjgxNSA4LjU4Mzc1LDkuOTY1IEM4LjUxNjI1LDEwLjExODc1IDguNDExMjUsMTAuMjUgOC4yNzI1LDEwLjM1ODc1IEM4LjEzMzc1LDEwLjQ2NzUgNy45NTM3NSwxMC41NTM3NSA3Ljc0LDEwLjYxNzUgQzcuNTIyNSwxMC42ODEyNSA3LjI3MTI1LDEwLjcxMTI1IDYuOTc4NzUsMTAuNzExMjUgQzYuNjUyNSwxMC43MTEyNSA2LjM1NjI1LDEwLjY3NzUgNi4wOSwxMC42MTM3NSBDNS44MjM3NSwxMC41NSA1LjU5ODc1LDEwLjQ0NSA1LjQxMTI1LDEwLjMwMjUgQzUuMjIzNzUsMTAuMTYgNS4wNzc1LDkuOTcyNSA0Ljk3MjUsOS43NDM3NSBDNC44Njc1LDkuNTE1IDQuNzgxMjUsOS4xNyA0Ljc4MTI1LDkgTDIuNTUsOSBDMi41NSw5LjI1MjUgMi42MSw5LjY4NzUgMi43MjYyNSwxMC4wMjUgQzIuODQyNSwxMC4zNjI1IDMuMDA3NSwxMC42NjYyNSAzLjIxMzc1LDEwLjkzMjUgQzMuNDIsMTEuMTk4NzUgMy42Njc1LDExLjQyNzUgMy45NDg3NSwxMS42MjI1IEM0LjIzLDExLjgxNzUgNC41MzM3NSwxMS45ODI1IDQuODYzNzUsMTIuMTEgQzUuMTkzNzUsMTIuMjQxMjUgNS41MzUsMTIuMzM4NzUgNS44OTg3NSwxMi4zOTg3NSBDNi4yNTg3NSwxMi40NjI1IDYuNjIyNSwxMi40OTI1IDYuOTgyNSwxMi40OTI1IEM3LjU4MjUsMTIuNDkyNSA4LjEzLDEyLjQyNSA4LjYxNzUsMTIuMjg2MjUgQzkuMTA1LDEyLjE0NzUgOS41MjUsMTEuOTQ4NzUgOS44NywxMS42OTM3NSBDMTAuMjE1LDExLjQzNSAxMC40ODEyNSwxMS4xMiAxMC42NzI1LDEwLjc0MTI1IEMxMC44NjM3NSwxMC4zNjI1IDEwLjk1Mzc1LDkuOTM1IDEwLjk1Mzc1LDkuNDU1IEMxMC45NTM3NSw5LjAwNSAxMC44NzUsOC42IDEwLjcyMTI1LDguMjQzNzUgQzEwLjY4Mzc1LDguMTU3NSAxMC42NDI1LDguMDc1IDEwLjU5Mzc1LDcuOTkyNSBMMTQsOCBMMTQsNiBaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyIDMpIi8+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjIsMCkiPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTcsMCBMNSwwIEwwLjUsMTIgTDIuNSwxMiBMMy42Miw5IEw4LjM3LDkgTDkuNDksMTIgTDExLjQ5LDEyIEw3LDAgTDcsMCBaIE00LjM4LDcgTDYsMi42NyBMNy42Miw3IEw0LjM4LDcgTDQuMzgsNyBaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzIDEpIi8+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxODAsMCkiPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICA8cGF0aCBmaWxsPSIjMDAwMDAwIiBkPSJNMTQuNSw4Ljg3IEMxNC41LDguODcgMTMsMTAuNDkgMTMsMTEuNDkgQzEzLDEyLjMyIDEzLjY3LDEyLjk5IDE0LjUsMTIuOTkgQzE1LjMzLDEyLjk5IDE2LDEyLjMyIDE2LDExLjQ5IEMxNiwxMC41IDE0LjUsOC44NyAxNC41LDguODcgTDE0LjUsOC44NyBaIE0xMi43MSw2Ljc5IEw1LjkxLDAgTDQuODUsMS4wNiBMNi40NCwyLjY1IEwyLjI5LDYuNzkgQzEuOSw3LjE4IDEuOSw3LjgxIDIuMjksOC4yIEw2Ljc5LDEyLjcgQzYuOTksMTIuOSA3LjI0LDEzIDcuNSwxMyBDNy43NiwxMyA4LjAxLDEyLjkgOC4yMSwxMi43MSBMMTIuNzEsOC4yMSBDMTMuMSw3LjgyIDEzLjEsNy4xOCAxMi43MSw2Ljc5IEwxMi43MSw2Ljc5IFogTTQuMjEsNyBMNy41LDMuNzEgTDEwLjc5LDcgTDQuMjEsNyBMNC4yMSw3IFoiLz4KICA8L2c+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxOTgsMCkiPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTMsNiBMMSw2IEwxLDIgTDgsMiBMOCw0IEwzLDQgTDMsNiBaIE0xMCw0IEwxMCwyIEwxNywyIEwxNyw2IEwxNSw2IEwxNSw0IEwxMCw0IFogTTEwLDE0IEwxNSwxNCBMMTUsMTIgTDE3LDEyIEwxNywxNiBMMTAsMTYgTDEwLDE0IFogTTEsMTIgTDMsMTIgTDMsMTQgTDgsMTQgTDgsMTYgTDEsMTYgTDEsMTIgWiBNMSw4IEw1LDggTDUsNiBMOCw5IEw1LDEyIEw1LDEwIEwxLDEwIEwxLDggWiBNMTAsOSBMMTMsNiBMMTMsOCBMMTcsOCBMMTcsMTAgTDEzLDEwIEwxMywxMiBMMTAsOSBaIi8+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMTYsMCkiPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTAsMTQgTDEwLDE0IEwxMCwxMiBMMCwxMiBMMCwxNCBaIE0xMCw0IEwwLDQgTDAsNiBMMTAsNiBMMTAsNCBaIE0wLDAgTDAsMiBMMTQsMiBMMTQsMCBMMCwwIFogTTAsMTAgTDE0LDEwIEwxNCw4IEwwLDggTDAsMTAgWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMiAyKSIvPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjM0LDApIj48cGF0aCBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yLDEyIEwyLDE0IEwxMiwxNCBMMTIsMTIgTDIsMTIgWiBNMiw0IEwyLDYgTDEyLDYgTDEyLDQgTDIsNCBaIE0wLDEwIEwxNCwxMCBMMTQsOCBMMCw4IEwwLDEwIFogTTAsMCBMMCwyIEwxNCwyIEwxNCwwIEwwLDAgWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMiAyKSIvPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwxOCkiPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTQsMTQgTDE0LDE0IEwxNCwxMiBMNCwxMiBMNCwxNCBaIE0wLDEwIEwxNCwxMCBMMTQsOCBMMCw4IEwwLDEwIFogTTAsMCBMMCwyIEwxNCwyIEwxNCwwIEwwLDAgWiBNNCw2IEwxNCw2IEwxNCw0IEw0LDQgTDQsNiBaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyIDIpIi8+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxOCwxOCkiPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTAsMCBMMCwyIEwxMiwyIEwxMiwwIEwwLDAgTDAsMCBaIE0yLjUsNyBMNSw3IEw1LDE0IEw3LDE0IEw3LDcgTDkuNSw3IEw2LDMuNSBMMi41LDcgTDIuNSw3IFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMikiLz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM2LDE4KSI+PHBhdGggZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOS41LDMgTDcsMyBMNywwIEw1LDAgTDUsMyBMMi41LDMgTDYsNi41IEw5LjUsMyBMOS41LDMgWiBNMCw4IEwwLDEwIEwxMiwxMCBMMTIsOCBMMCw4IEwwLDggWiBNMi41LDE1IEw1LDE1IEw1LDE4IEw3LDE4IEw3LDE1IEw5LjUsMTUgTDYsMTEuNSBMMi41LDE1IEwyLjUsMTUgWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMykiLz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDU0LDE4KSI+PHBhdGggZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOS41LDcgTDcsNyBMNywwIEw1LDAgTDUsNyBMMi41LDcgTDYsMTAuNSBMOS41LDcgTDkuNSw3IFogTTAsMTIgTDAsMTQgTDEyLDE0IEwxMiwxMiBMMCwxMiBMMCwxMiBaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzIDIpIi8+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3MiwxOCkiPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTE0LDAgTDAsMCBMMCwyIEwxNCwyIEwxNCwwIFogTTAsMTIgTDQsMTIgTDQsMTAgTDAsMTAgTDAsMTIgWiBNMTEuNSw1IEwwLDUgTDAsNyBMMTEuNzUsNyBDMTIuNTgsNyAxMy4yNSw3LjY3IDEzLjI1LDguNSBDMTMuMjUsOS4zMyAxMi41OCwxMCAxMS43NSwxMCBMOSwxMCBMOSw4IEw2LDExIEw5LDE0IEw5LDEyIEwxMS41LDEyIEMxMy40MywxMiAxNSwxMC40MyAxNSw4LjUgQzE1LDYuNTcgMTMuNDMsNSAxMS41LDUgWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMiAzKSIvPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTAsMTgpIj48cGF0aCBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0wLDAgTDAsMSBMNiw3IEw2LDEyIEw4LDExIEw4LDcgTDE0LDEgTDE0LDAgTDAsMCBaIE00LDMgTDEwLDMgTDcsNiBMNCwzIFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiLz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEwOCwxOCkiPjxwb2x5Z29uIGZpbGw9IiMwMDAwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgcG9pbnRzPSIxMCAwIDAgMCAwIDEuOCA1LjUgNyAwIDEyLjIgMCAxNCAxMCAxNCAxMCAxMiAzLjEgMTIgOCA3IDMuMSAyIDEwIDIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQgMikiLz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEyNiwxOCkiPjxwb2x5Z29uIGZpbGw9IiMwMDAwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgcG9pbnRzPSIwIDAgNCA0IDggMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNSA3KSIvPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTQ0LDE4KSI+PHBvbHlnb24gZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBwb2ludHM9Ii0yIDIgMiA2IDYgMiIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDggMykiLz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MiwxOCkiPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTEuOSw0IEMxLjksMi44NCAyLjg0LDEuOSA0LDEuOSBMOCwxLjkgTDgsMCBMNCwwIEMxLjc5LDAgMCwxLjc5IDAsNCBDMCw2LjIxIDEuNzksOCA0LDggTDgsOCBMOCw2LjEgTDQsNi4xIEMyLjg0LDYuMSAxLjksNS4xNiAxLjksNCBMMS45LDQgWiBNMTQsMCBMMTAsMCBMMTAsMS45IEwxNCwxLjkgQzE1LjE2LDEuOSAxNi4xLDIuODQgMTYuMSw0IEMxNi4xLDUuMTYgMTUuMTYsNi4xIDE0LDYuMSBMMTAsNi4xIEwxMCw4IEwxNCw4IEMxNi4yMSw4IDE4LDYuMjEgMTgsNCBDMTgsMS43OSAxNi4yMSwwIDE0LDAgTDE0LDAgWiBNNiw1IEwxMiw1IEwxMiwzIEw2LDMgTDYsNSBMNiw1IFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgNSkiLz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE4MCwxOCkiPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTE1LDAgQzE1LjU1LDAgMTYsMC40NSAxNiwxIEwxNiwxNSBDMTYsMTUuNTUgMTUuNTUsMTYgMTUsMTYgTDEsMTYgQzAuNDUsMTYgMCwxNS41NSAwLDE1IEwwLDEgQzAsMC40NSAwLjQ1LDAgMSwwIEwxNSwwIFogTTIsMiBMMiwxNCBMMTQsMTQgTDE0LDIgTDIsMiBaIE02LDEyIEw0LDEyIEw0LDcgTDYsNyBMNiwxMiBMNiwxMiBaIE05LDEyIEw3LDEyIEw3LDQgTDksNCBMOSwxMiBMOSwxMiBaIE0xMiwxMiBMMTAsMTIgTDEwLDggTDEyLDggTDEyLDEyIEwxMiwxMiBaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxIDEpIi8+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxOTgsMTgpIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgPHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBkPSJNMS41IDMuNUgxNi41VjE1LjVIMS41eiIvPgogICAgPHBhdGggZmlsbD0iIzAwMDAwMCIgZD0iTTYgOEg3VjE1SDZ6Ii8+CiAgICA8cGF0aCBmaWxsPSIjRDhEOEQ4IiBkPSJNMiA0SDE2VjdIMnoiLz4KICAgIDxwYXRoIGZpbGw9IiMwMDAwMDAiIGQ9Ik0yIDdIMTZWOEgyek0yIDExSDE2VjEySDJ6Ii8+CiAgPC9nPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjE2LDE4KSI+PHBhdGggZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMiwwLjUgQzEuMTcsMC41IDAuNSwxLjE3IDAuNSwyIEMwLjUsMi44MyAxLjE3LDMuNSAyLDMuNSBDMi44MywzLjUgMy41LDIuODMgMy41LDIgQzMuNSwxLjE3IDIuODMsMC41IDIsMC41IEwyLDAuNSBaIE0xMiwwLjUgQzExLjE3LDAuNSAxMC41LDEuMTcgMTAuNSwyIEMxMC41LDIuODMgMTEuMTcsMy41IDEyLDMuNSBDMTIuODMsMy41IDEzLjUsMi44MyAxMy41LDIgQzEzLjUsMS4xNyAxMi44MywwLjUgMTIsMC41IEwxMiwwLjUgWiBNNywwLjUgQzYuMTcsMC41IDUuNSwxLjE3IDUuNSwyIEM1LjUsMi44MyA2LjE3LDMuNSA3LDMuNSBDNy44MywzLjUgOC41LDIuODMgOC41LDIgQzguNSwxLjE3IDcuODMsMC41IDcsMC41IEw3LDAuNSBaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyIDcpIi8+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMzQsMTgpIj48cGF0aCBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02LDQgTDYsMCBMNCwwIEw0LDQgTDAsNCBMMCw2IEw0LDYgTDQsMTAgTDYsMTAgTDYsNiBMMTAsNiBMMTAsNCBMNiw0IFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQgNCkiLz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMzYpIj48cGF0aCBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0wLDAgTDAsMTQgTDE0LDE0IEwxNCwwIEwwLDAgTDAsMCBaIE02LDEyIEwyLDEyIEwyLDggTDYsOCBMNiwxMiBMNiwxMiBaIE02LDYgTDIsNiBMMiwyIEw2LDIgTDYsNiBMNiw2IFogTTEyLDEyIEw4LDEyIEw4LDggTDEyLDggTDEyLDEyIEwxMiwxMiBaIE0xMiw2IEw4LDYgTDgsMiBMMTIsMiBMMTIsNiBMMTIsNiBaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyIDIpIi8+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxOCwzNikiPgogIDxnIGZpbGw9IiMwMDAwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMiAyKSI+CiAgICA8cGF0aCBkPSJNMCwxNCBMMiwxNCBMMiwxMiBMMCwxMiBMMCwxNCBMMCwxNCBaIE0yLDMgTDAsMyBMMCw1IEwyLDUgTDIsMyBMMiwzIFogTTMsMTQgTDUsMTQgTDUsMTIgTDMsMTIgTDMsMTQgTDMsMTQgWiBNMTEsMCBMOSwwIEw5LDIgTDExLDIgTDExLDAgTDExLDAgWiBNMiwwIEwwLDAgTDAsMiBMMiwyIEwyLDAgTDIsMCBaIE01LDAgTDMsMCBMMywyIEw1LDIgTDUsMCBMNSwwIFogTTAsMTEgTDIsMTEgTDIsOSBMMCw5IEwwLDExIEwwLDExIFogTTksMTQgTDExLDE0IEwxMSwxMiBMOSwxMiBMOSwxNCBMOSwxNCBaIE0xMiwwIEwxMiwyIEwxNCwyIEwxNCwwIEwxMiwwIEwxMiwwIFogTTEyLDUgTDE0LDUgTDE0LDMgTDEyLDMgTDEyLDUgTDEyLDUgWiBNMTIsMTQgTDE0LDE0IEwxNCwxMiBMMTIsMTIgTDEyLDE0IEwxMiwxNCBaIE0xMiwxMSBMMTQsMTEgTDE0LDkgTDEyLDkgTDEyLDExIEwxMiwxMSBaIiBvcGFjaXR5PSIuNTQiLz4KICAgIDxwb2x5Z29uIHBvaW50cz0iOCAwIDYgMCA2IDYgMCA2IDAgOCA2IDggNiAxNCA4IDE0IDggOCAxNCA4IDE0IDYgOCA2Ii8+CiAgPC9nPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzYsMzYpIj4KICA8ZyBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiPgogICAgPHBhdGggZD0iTTYsMTQgTDgsMTQgTDgsMTIgTDYsMTIgTDYsMTQgTDYsMTQgWiBNMywyIEw1LDIgTDUsMCBMMywwIEwzLDIgTDMsMiBaIE02LDExIEw4LDExIEw4LDkgTDYsOSBMNiwxMSBMNiwxMSBaIE0zLDE0IEw1LDE0IEw1LDEyIEwzLDEyIEwzLDE0IEwzLDE0IFogTTAsNSBMMiw1IEwyLDMgTDAsMyBMMCw1IEwwLDUgWiBNMCwxNCBMMiwxNCBMMiwxMiBMMCwxMiBMMCwxNCBMMCwxNCBaIE0wLDIgTDIsMiBMMiwwIEwwLDAgTDAsMiBMMCwyIFogTTAsMTEgTDIsMTEgTDIsOSBMMCw5IEwwLDExIEwwLDExIFogTTEyLDExIEwxNCwxMSBMMTQsOSBMMTIsOSBMMTIsMTEgTDEyLDExIFogTTEyLDE0IEwxNCwxNCBMMTQsMTIgTDEyLDEyIEwxMiwxNCBMMTIsMTQgWiBNMTIsNSBMMTQsNSBMMTQsMyBMMTIsMyBMMTIsNSBMMTIsNSBaIE0xMiwwIEwxMiwyIEwxNCwyIEwxNCwwIEwxMiwwIEwxMiwwIFogTTYsMiBMOCwyIEw4LDAgTDYsMCBMNiwyIEw2LDIgWiBNOSwyIEwxMSwyIEwxMSwwIEw5LDAgTDksMiBMOSwyIFogTTYsNSBMOCw1IEw4LDMgTDYsMyBMNiw1IEw2LDUgWiBNOSwxNCBMMTEsMTQgTDExLDEyIEw5LDEyIEw5LDE0IEw5LDE0IFoiIG9wYWNpdHk9Ii41NCIvPgogICAgPHBvbHlnb24gcG9pbnRzPSIwIDggMTQgOCAxNCA2IDAgNiIvPgogIDwvZz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDU0LDM2KSI+CiAgPGcgZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyIDIpIj4KICAgIDxwYXRoIGQ9Ik0zLDE0IEw1LDE0IEw1LDEyIEwzLDEyIEwzLDE0IEwzLDE0IFogTTAsNSBMMiw1IEwyLDMgTDAsMyBMMCw1IEwwLDUgWiBNMCwyIEwyLDIgTDIsMCBMMCwwIEwwLDIgTDAsMiBaIE0zLDggTDUsOCBMNSw2IEwzLDYgTDMsOCBMMyw4IFogTTMsMiBMNSwyIEw1LDAgTDMsMCBMMywyIEwzLDIgWiBNMCwxNCBMMiwxNCBMMiwxMiBMMCwxMiBMMCwxNCBMMCwxNCBaIE0wLDggTDIsOCBMMiw2IEwwLDYgTDAsOCBMMCw4IFogTTAsMTEgTDIsMTEgTDIsOSBMMCw5IEwwLDExIEwwLDExIFogTTEyLDAgTDEyLDIgTDE0LDIgTDE0LDAgTDEyLDAgTDEyLDAgWiBNMTIsOCBMMTQsOCBMMTQsNiBMMTIsNiBMMTIsOCBMMTIsOCBaIE0xMiwxNCBMMTQsMTQgTDE0LDEyIEwxMiwxMiBMMTIsMTQgTDEyLDE0IFogTTEyLDUgTDE0LDUgTDE0LDMgTDEyLDMgTDEyLDUgTDEyLDUgWiBNMTIsMTEgTDE0LDExIEwxNCw5IEwxMiw5IEwxMiwxMSBMMTIsMTEgWiBNOSwxNCBMMTEsMTQgTDExLDEyIEw5LDEyIEw5LDE0IEw5LDE0IFogTTksOCBMMTEsOCBMMTEsNiBMOSw2IEw5LDggTDksOCBaIE05LDIgTDExLDIgTDExLDAgTDksMCBMOSwyIEw5LDIgWiIgb3BhY2l0eT0iLjU0Ii8+CiAgICA8cG9seWdvbiBwb2ludHM9IjYgMTQgOCAxNCA4IDAgNiAwIi8+CiAgPC9nPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNzIsMzYpIj4KICA8ZyBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiPgogICAgPHBhdGggZD0iTTgsMyBMNiwzIEw2LDUgTDgsNSBMOCwzIEw4LDMgWiBNMTEsNiBMOSw2IEw5LDggTDExLDggTDExLDYgTDExLDYgWiBNOCw2IEw2LDYgTDYsOCBMOCw4IEw4LDYgTDgsNiBaIE04LDkgTDYsOSBMNiwxMSBMOCwxMSBMOCw5IEw4LDkgWiBNNSw2IEwzLDYgTDMsOCBMNSw4IEw1LDYgTDUsNiBaIiBvcGFjaXR5PSIuNTQiLz4KICAgIDxwYXRoIGQ9Ik0wLDAgTDE0LDAgTDE0LDE0IEwwLDE0IEwwLDAgWiBNMTIsMTIgTDEyLDIgTDIsMiBMMiwxMiBMMTIsMTIgWiIvPgogIDwvZz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkwLDM2KSI+CiAgPGcgZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyIDIpIj4KICAgIDxwYXRoIGQ9Ik02LDggTDgsOCBMOCw2IEw2LDYgTDYsOCBMNiw4IFogTTYsNSBMOCw1IEw4LDMgTDYsMyBMNiw1IEw2LDUgWiBNNiwxMSBMOCwxMSBMOCw5IEw2LDkgTDYsMTEgTDYsMTEgWiBNNiwxNCBMOCwxNCBMOCwxMiBMNiwxMiBMNiwxNCBMNiwxNCBaIE0zLDE0IEw1LDE0IEw1LDEyIEwzLDEyIEwzLDE0IEwzLDE0IFogTTMsMiBMNSwyIEw1LDAgTDMsMCBMMywyIEwzLDIgWiBNMyw4IEw1LDggTDUsNiBMMyw2IEwzLDggTDMsOCBaIE0xMiwxNCBMMTQsMTQgTDE0LDEyIEwxMiwxMiBMMTIsMTQgTDEyLDE0IFogTTEyLDggTDE0LDggTDE0LDYgTDEyLDYgTDEyLDggTDEyLDggWiBNMTIsMTEgTDE0LDExIEwxNCw5IEwxMiw5IEwxMiwxMSBMMTIsMTEgWiBNMTIsNSBMMTQsNSBMMTQsMyBMMTIsMyBMMTIsNSBMMTIsNSBaIE02LDIgTDgsMiBMOCwwIEw2LDAgTDYsMiBMNiwyIFogTTEyLDAgTDEyLDIgTDE0LDIgTDE0LDAgTDEyLDAgTDEyLDAgWiBNOSwxNCBMMTEsMTQgTDExLDEyIEw5LDEyIEw5LDE0IEw5LDE0IFogTTksOCBMMTEsOCBMMTEsNiBMOSw2IEw5LDggTDksOCBaIE05LDIgTDExLDIgTDExLDAgTDksMCBMOSwyIEw5LDIgWiIgb3BhY2l0eT0iLjU0Ii8+CiAgICA8cG9seWdvbiBwb2ludHM9IjAgMTQgMiAxNCAyIDAgMCAwIi8+CiAgPC9nPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTA4LDM2KSI+CiAgPGcgZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyIDIpIj4KICAgIDxwYXRoIGQ9Ik0zLDggTDUsOCBMNSw2IEwzLDYgTDMsOCBMMyw4IFogTTAsMTQgTDIsMTQgTDIsMTIgTDAsMTIgTDAsMTQgTDAsMTQgWiBNNiwxNCBMOCwxNCBMOCwxMiBMNiwxMiBMNiwxNCBMNiwxNCBaIE02LDExIEw4LDExIEw4LDkgTDYsOSBMNiwxMSBMNiwxMSBaIE0zLDE0IEw1LDE0IEw1LDEyIEwzLDEyIEwzLDE0IEwzLDE0IFogTTAsMTEgTDIsMTEgTDIsOSBMMCw5IEwwLDExIEwwLDExIFogTTYsOCBMOCw4IEw4LDYgTDYsNiBMNiw4IEw2LDggWiBNMCw1IEwyLDUgTDIsMyBMMCwzIEwwLDUgTDAsNSBaIE0wLDggTDIsOCBMMiw2IEwwLDYgTDAsOCBMMCw4IFogTTEyLDggTDE0LDggTDE0LDYgTDEyLDYgTDEyLDggTDEyLDggWiBNMTIsMTEgTDE0LDExIEwxNCw5IEwxMiw5IEwxMiwxMSBMMTIsMTEgWiBNMTIsNSBMMTQsNSBMMTQsMyBMMTIsMyBMMTIsNSBMMTIsNSBaIE02LDUgTDgsNSBMOCwzIEw2LDMgTDYsNSBMNiw1IFogTTksMTQgTDExLDE0IEwxMSwxMiBMOSwxMiBMOSwxNCBMOSwxNCBaIE05LDggTDExLDggTDExLDYgTDksNiBMOSw4IEw5LDggWiBNMTIsMTQgTDE0LDE0IEwxNCwxMiBMMTIsMTIgTDEyLDE0IEwxMiwxNCBaIiBvcGFjaXR5PSIuNTQiLz4KICAgIDxwb2x5Z29uIHBvaW50cz0iMCAwIDAgMiAxNCAyIDE0IDAiLz4KICA8L2c+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjYsMzYpIj4KICA8ZyBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiPgogICAgPHBhdGggZD0iTTAsMiBMMiwyIEwyLDAgTDAsMCBMMCwyIEwwLDIgWiBNMywyIEw1LDIgTDUsMCBMMywwIEwzLDIgTDMsMiBaIE0zLDggTDUsOCBMNSw2IEwzLDYgTDMsOCBMMyw4IFogTTMsMTQgTDUsMTQgTDUsMTIgTDMsMTIgTDMsMTQgTDMsMTQgWiBNMCw1IEwyLDUgTDIsMyBMMCwzIEwwLDUgTDAsNSBaIE0wLDggTDIsOCBMMiw2IEwwLDYgTDAsOCBMMCw4IFogTTAsMTQgTDIsMTQgTDIsMTIgTDAsMTIgTDAsMTQgTDAsMTQgWiBNMCwxMSBMMiwxMSBMMiw5IEwwLDkgTDAsMTEgTDAsMTEgWiBNOSw4IEwxMSw4IEwxMSw2IEw5LDYgTDksOCBMOSw4IFogTTYsMTQgTDgsMTQgTDgsMTIgTDYsMTIgTDYsMTQgTDYsMTQgWiBNOSwxNCBMMTEsMTQgTDExLDEyIEw5LDEyIEw5LDE0IEw5LDE0IFogTTYsMiBMOCwyIEw4LDAgTDYsMCBMNiwyIEw2LDIgWiBNOSwyIEwxMSwyIEwxMSwwIEw5LDAgTDksMiBMOSwyIFogTTYsMTEgTDgsMTEgTDgsOSBMNiw5IEw2LDExIEw2LDExIFogTTYsNSBMOCw1IEw4LDMgTDYsMyBMNiw1IEw2LDUgWiBNNiw4IEw4LDggTDgsNiBMNiw2IEw2LDggTDYsOCBaIiBvcGFjaXR5PSIuNTQiLz4KICAgIDxwb2x5Z29uIHBvaW50cz0iMTIgMCAxMiAxNCAxNCAxNCAxNCAwIi8+CiAgPC9nPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTQ0LDM2KSI+CiAgPGcgZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyIDIpIj4KICAgIDxwYXRoIGQ9Ik01LDAgTDMsMCBMMywyIEw1LDIgTDUsMCBMNSwwIFogTTgsNiBMNiw2IEw2LDggTDgsOCBMOCw2IEw4LDYgWiBNOCw5IEw2LDkgTDYsMTEgTDgsMTEgTDgsOSBMOCw5IFogTTExLDYgTDksNiBMOSw4IEwxMSw4IEwxMSw2IEwxMSw2IFogTTUsNiBMMyw2IEwzLDggTDUsOCBMNSw2IEw1LDYgWiBNMTEsMCBMOSwwIEw5LDIgTDExLDIgTDExLDAgTDExLDAgWiBNOCwzIEw2LDMgTDYsNSBMOCw1IEw4LDMgTDgsMyBaIE04LDAgTDYsMCBMNiwyIEw4LDIgTDgsMCBMOCwwIFogTTIsOSBMMCw5IEwwLDExIEwyLDExIEwyLDkgTDIsOSBaIE0xMiwxMSBMMTQsMTEgTDE0LDkgTDEyLDkgTDEyLDExIEwxMiwxMSBaIE0xMiw1IEwxNCw1IEwxNCwzIEwxMiwzIEwxMiw1IEwxMiw1IFogTTEyLDggTDE0LDggTDE0LDYgTDEyLDYgTDEyLDggTDEyLDggWiBNMTIsMCBMMTIsMiBMMTQsMiBMMTQsMCBMMTIsMCBMMTIsMCBaIE0yLDAgTDAsMCBMMCwyIEwyLDIgTDIsMCBMMiwwIFogTTIsMyBMMCwzIEwwLDUgTDIsNSBMMiwzIEwyLDMgWiBNMiw2IEwwLDYgTDAsOCBMMiw4IEwyLDYgTDIsNiBaIiBvcGFjaXR5PSIuNTQiLz4KICAgIDxwb2x5Z29uIHBvaW50cz0iMCAxNCAxNCAxNCAxNCAxMiAwIDEyIi8+CiAgPC9nPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTYyLDM2KSI+PHBhdGggZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNiwxNCBMOCwxNCBMOCwxMiBMNiwxMiBMNiwxNCBMNiwxNCBaIE0zLDggTDUsOCBMNSw2IEwzLDYgTDMsOCBMMyw4IFogTTMsMiBMNSwyIEw1LDAgTDMsMCBMMywyIEwzLDIgWiBNNiwxMSBMOCwxMSBMOCw5IEw2LDkgTDYsMTEgTDYsMTEgWiBNMywxNCBMNSwxNCBMNSwxMiBMMywxMiBMMywxNCBMMywxNCBaIE0wLDUgTDIsNSBMMiwzIEwwLDMgTDAsNSBMMCw1IFogTTAsMTQgTDIsMTQgTDIsMTIgTDAsMTIgTDAsMTQgTDAsMTQgWiBNMCwyIEwyLDIgTDIsMCBMMCwwIEwwLDIgTDAsMiBaIE0wLDggTDIsOCBMMiw2IEwwLDYgTDAsOCBMMCw4IFogTTYsOCBMOCw4IEw4LDYgTDYsNiBMNiw4IEw2LDggWiBNMCwxMSBMMiwxMSBMMiw5IEwwLDkgTDAsMTEgTDAsMTEgWiBNMTIsMTEgTDE0LDExIEwxNCw5IEwxMiw5IEwxMiwxMSBMMTIsMTEgWiBNMTIsMTQgTDE0LDE0IEwxNCwxMiBMMTIsMTIgTDEyLDE0IEwxMiwxNCBaIE0xMiw4IEwxNCw4IEwxNCw2IEwxMiw2IEwxMiw4IEwxMiw4IFogTTEyLDUgTDE0LDUgTDE0LDMgTDEyLDMgTDEyLDUgTDEyLDUgWiBNMTIsMCBMMTIsMiBMMTQsMiBMMTQsMCBMMTIsMCBMMTIsMCBaIE02LDIgTDgsMiBMOCwwIEw2LDAgTDYsMiBMNiwyIFogTTksMiBMMTEsMiBMMTEsMCBMOSwwIEw5LDIgTDksMiBaIE02LDUgTDgsNSBMOCwzIEw2LDMgTDYsNSBMNiw1IFogTTksMTQgTDExLDE0IEwxMSwxMiBMOSwxMiBMOSwxNCBMOSwxNCBaIE05LDggTDExLDggTDExLDYgTDksNiBMOSw4IEw5LDggWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMiAyKSIgb3BhY2l0eT0iLjU0Ii8+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxODAsMzYpIj48cGF0aCBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02LjUsMy42MiBMMCwxMC4xMiBMMCwxMyBMMi44OCwxMyBMOS4zOCw2LjUgTDYuNSwzLjYyIFogTTExLjg1LDQuMDIgQzEyLjA1LDMuODIgMTIuMDUsMy41MSAxMS44NSwzLjMxIEw5LjY4LDEuMTQgQzkuNDgsMC45NCA5LjE3LDAuOTQgOC45NywxLjE0IEw3LjYyLDIuNSBMMTAuNSw1LjM4IEwxMS44NSw0LjAyIEwxMS44NSw0LjAyIFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQpIi8+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxOTgsMzYpIj48cGF0aCBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0wLDAgTDE0LDAgTDE0LDIgTDAsMiBMMCwwIFogTTAsNCBMNiw0IEw2LDYgTDAsNiBMMCw0IFogTTAsOCBMMiw4IEwyLDEwIEwwLDEwIEwwLDggWiBNOCw0IEwxNCw0IEwxNCw2IEw4LDYgTDgsNCBaIE00LDggTDYsOCBMNiwxMCBMNCwxMCBMNCw4IFogTTgsOCBMMTAsOCBMMTAsMTAgTDgsMTAgTDgsOCBaIE0xMiw4IEwxNCw4IEwxNCwxMCBMMTIsMTAgTDEyLDggWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMiA0KSIvPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjE2LDM2KSI+PHBvbHlnb24gZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBwb2ludHM9Ii0yIDIgMiA2IDYgMiIgdHJhbnNmb3JtPSJyb3RhdGUoOTAgMyAxMCkiLz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIzNCwzNikiPjxwb2x5Z29uIGZpbGw9IiMwMDAwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgcG9pbnRzPSI3LjUzIDEuNTMgNi40NyAuNDcgNCAyLjk0IDEuNTMgLjQ3IC40NyAxLjUzIDIuOTQgNCAuNDcgNi40NyAxLjUzIDcuNTMgNCA1LjA2IDYuNDcgNy41MyA3LjUzIDYuNDcgNS4wNiA0IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1IDUpIi8+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDU0KSI+PHBvbHlnb24gZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBwb2ludHM9IjguNDQgLjQ0IDUgMy44OCAxLjU2IC40NCAuNSAxLjUgNSA2IDkuNSAxLjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQgNikiLz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE4LDU0KSI+PHBvbHlnb24gZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBwb2ludHM9IjUgMCAuNSA0LjUgMS41NiA1LjU2IDUgMi4xMiA4LjQ0IDUuNTYgOS41IDQuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNCA2KSIvPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzYsNTQpIj48cG9seWdvbiBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHBvaW50cz0iOC40NCAuNDQgNSAzLjg4IDEuNTYgLjQ0IC41IDEuNSA1IDYgOS41IDEuNSIgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNCA4KSIvPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNTQsNTQpIj48cG9seWdvbiBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHBvaW50cz0iNSAwIC41IDQuNSAxLjU2IDUuNTYgNSAyLjEyIDguNDQgNS41NiA5LjUgNC41IiB0cmFuc2Zvcm09InJvdGF0ZSg5MCA0IDgpIi8+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3Miw1NCkiPjxwb2x5Z29uIGZpbGw9IiMwMDAwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgcG9pbnRzPSIxMiA1IDMuMTI1IDUgNy4wNiAxLjA2IDYgMCAwIDYgNiAxMiA3LjA2IDEwLjk0IDMuMTI1IDcgMTIgNyIgdHJhbnNmb3JtPSJtYXRyaXgoLTEgMCAwIDEgMTUgMykiLz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkwLDU0KSI+PHBvbHlnb24gZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBwb2ludHM9IjEyIDUgMy4xMjUgNSA3LjA2IDEuMDYgNiAwIDAgNiA2IDEyIDcuMDYgMTAuOTQgMy4xMjUgNyAxMiA3IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzIDMpIi8+CjwvZz4KPC9zdmc+Cg==);
+ background-image: url('data:image/svg+xml,');
position: absolute;
width: 262px;
height: 444px;
diff --git a/main.ts b/main.ts
index 26e3fef..9e1894f 100644
--- a/main.ts
+++ b/main.ts
@@ -1,46 +1,139 @@
-import { App, Editor, MarkdownView, Modal, Notice, Plugin, PluginSettingTab, Setting, WorkspaceLeaf } from 'obsidian';
+import { TFile, Plugin, WorkspaceLeaf, normalizePath } from "obsidian";
+import { ExcelSettings, DEFAULT_SETTINGS } from "./src/utils/Settings";
+import {
+ emulateCTRLClickForLinks,
+ linkClickModifierType,
+ PaneTarget,
+} from "./src/utils/ModifierkeyHelper";
+import { ExcelView, VIEW_TYPE_EXCEL } from "./src/ExcelView";
+import {
+ checkAndCreateFolder,
+ getNewUniqueFilepath,
+ getExcelFilename,
+} from "./src/utils/FileUtils";
-import { ExcelView, VIEW_TYPE_EXCEL } from './src/ExcelView';
+import { getNewOrAdjacentLeaf } from "./src/utils/ObsidianUtils";
+
+declare const PLUGIN_VERSION: string;
export default class ExcelPlugin extends Plugin {
+ public settings: ExcelSettings;
async onload() {
-
- this.registerView(VIEW_TYPE_EXCEL, (leaf: WorkspaceLeaf) => new ExcelView(leaf, this));
+ this.registerView(
+ VIEW_TYPE_EXCEL,
+ (leaf: WorkspaceLeaf) => new ExcelView(leaf, this)
+ );
this.registerExtensions(["xlsx"], VIEW_TYPE_EXCEL);
// This creates an icon in the left ribbon.
- const ribbonIconEl = this.addRibbonIcon('table', 'Excel', (evt: MouseEvent) => {
- // Called when the user clicks the icon.
- new Notice('This is a notice!');
- });
+ const ribbonIconEl = this.addRibbonIcon(
+ "table",
+ "Excel",
+ (e: MouseEvent) => {
+ // Called when the user clicks the icon.
+ this.createAndOpenExcel(
+ getExcelFilename(this.settings)
+ );
+ }
+ );
// Perform additional things with the ribbon
- ribbonIconEl.addClass('my-plugin-ribbon-class');
+ ribbonIconEl.addClass("my-plugin-ribbon-class");
// This adds a status bar item to the bottom of the app. Does not work on mobile apps.
const statusBarItemEl = this.addStatusBarItem();
- statusBarItemEl.setText('Status Bar Text');
-
+ statusBarItemEl.setText("Status Bar Text");
// If the plugin hooks up any global DOM events (on parts of the app that doesn't belong to this plugin)
// Using this function will automatically remove the event listener when this plugin is disabled.
- this.registerDomEvent(document, 'click', (evt: MouseEvent) => {
- console.log('click', evt);
+ this.registerDomEvent(document, "click", (evt: MouseEvent) => {
+ console.log("click", evt);
});
// When registering intervals, this function will automatically clear the interval when the plugin is disabled.
- this.registerInterval(window.setInterval(() => console.log('setInterval'), 5 * 60 * 1000));
+ this.registerInterval(
+ window.setInterval(() => console.log("setInterval"), 5 * 60 * 1000)
+ );
}
- onunload() {
+ onunload() {}
+ async loadSettings() {
+ this.settings = Object.assign(
+ {},
+ DEFAULT_SETTINGS,
+ await this.loadData()
+ );
}
- // async loadSettings() {
- // this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
- // }
+ async saveSettings() {
+ await this.saveData(this.settings);
+ }
- // async saveSettings() {
- // await this.saveData(this.settings);
- // }
+ public async createExcel(
+ filename: string,
+ foldername?: string,
+ initData?: string
+ ): Promise {
+ // const folderpath = normalizePath(
+ // foldername ? foldername : "Excel"
+ // );
+ // await checkAndCreateFolder(folderpath); //create folder if it does not exist
+ const fname = normalizePath(filename);
+ const file = await this.app.vault.create(fname, initData ?? "{}");
+
+ return file;
+ }
+
+ public async createAndOpenExcel(
+ filename: string,
+ foldername?: string,
+ initData?: string
+ ): Promise {
+ const file = await this.createExcel(filename, foldername, initData);
+ this.openExcel(file, "new-pane", true, undefined);
+ return file.path;
+ }
+
+ public openExcel(
+ excelFile: TFile,
+ location: PaneTarget,
+ active: boolean = false,
+ subpath?: string
+ ) {
+ if (location === "md-properties") {
+ location = "new-tab";
+ }
+ var leaf: WorkspaceLeaf;
+ if (location === "popout-window") {
+ leaf = app.workspace.openPopoutLeaf();
+ }
+ if (location === "new-tab") {
+ leaf = app.workspace.getLeaf("tab");
+ }
+ if (!leaf) {
+ leaf = this.app.workspace.getLeaf(false);
+ if (
+ leaf.view.getViewType() !== "empty" &&
+ location === "new-pane"
+ ) {
+ leaf = app.workspace.getMostRecentLeaf();
+ }
+ }
+
+ leaf.openFile(
+ excelFile,
+ !subpath || subpath === ""
+ ? { active }
+ : { active, eState: { subpath } }
+ ).then(() => {});
+ }
+
+ public isExcelFile(f: TFile) {
+ if (!f) return false;
+ if (f.extension === "xlsx") {
+ return true;
+ }
+ return false
+ }
}
diff --git a/package-lock.json b/package-lock.json
index e6c4e2c..98d3d73 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -158,6 +158,15 @@
"dev": true,
"optional": true
},
+ "@hyrious/esbuild-plugin-svgo": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@hyrious/esbuild-plugin-svgo/-/esbuild-plugin-svgo-0.2.0.tgz",
+ "integrity": "sha512-wg7OTGS/eOsV/+EXsFnnfyhdjGMsLtMlgbB0fdV8fM/5BZQ0VwJ561+IwzX9xEcTrFe8UBIUAH4xb4Xf+0j+dg==",
+ "dev": true,
+ "requires": {
+ "svgo": "^3.0.2"
+ }
+ },
"@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -446,26 +455,26 @@
"integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ=="
},
"css-select": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz",
- "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
+ "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
"dev": true,
"requires": {
"boolbase": "^1.0.0",
- "css-what": "^6.0.1",
- "domhandler": "^4.3.1",
- "domutils": "^2.8.0",
+ "css-what": "^6.1.0",
+ "domhandler": "^5.0.2",
+ "domutils": "^3.0.1",
"nth-check": "^2.0.1"
}
},
"css-tree": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
- "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
+ "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
"dev": true,
"requires": {
- "mdn-data": "2.0.14",
- "source-map": "^0.6.1"
+ "mdn-data": "2.0.30",
+ "source-map-js": "^1.0.1"
}
},
"css-what": {
@@ -475,12 +484,30 @@
"dev": true
},
"csso": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz",
- "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==",
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
+ "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
"dev": true,
"requires": {
- "css-tree": "^1.1.2"
+ "css-tree": "~2.2.0"
+ },
+ "dependencies": {
+ "css-tree": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
+ "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
+ "dev": true,
+ "requires": {
+ "mdn-data": "2.0.28",
+ "source-map-js": "^1.0.1"
+ }
+ },
+ "mdn-data": {
+ "version": "2.0.28",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
+ "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
+ "dev": true
+ }
}
},
"debug": {
@@ -502,14 +529,14 @@
}
},
"dom-serializer": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
- "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+ "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
"dev": true,
"requires": {
- "domelementtype": "^2.0.1",
- "domhandler": "^4.2.0",
- "entities": "^2.0.0"
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
}
},
"domelementtype": {
@@ -519,23 +546,23 @@
"dev": true
},
"domhandler": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
- "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+ "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
"dev": true,
"requires": {
- "domelementtype": "^2.2.0"
+ "domelementtype": "^2.3.0"
}
},
"domutils": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
- "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
+ "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
"dev": true,
"requires": {
- "dom-serializer": "^1.0.1",
- "domelementtype": "^2.2.0",
- "domhandler": "^4.2.0"
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
}
},
"encoding": {
@@ -557,9 +584,9 @@
}
},
"entities": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
- "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"dev": true
},
"errno": {
@@ -612,15 +639,6 @@
"less": "^4.2.0"
}
},
- "esbuild-plugin-svg": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/esbuild-plugin-svg/-/esbuild-plugin-svg-0.1.0.tgz",
- "integrity": "sha512-/9ZhvIpl+Ovl6glVK3BedvIwrOwSQnECw4Fy6ZwysWib3Ns7UkX6WNGjMOWtvQ1Cnm0uc7sptiKGm0BthKCAJA==",
- "dev": true,
- "requires": {
- "svgo": "^2.2.2"
- }
- },
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
@@ -853,11 +871,6 @@
"integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==",
"dev": true
},
- "jquery": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.0.tgz",
- "integrity": "sha512-umpJ0/k8X0MvD1ds0P9SfowREz2LenHsQaxSohMZ5OMNEU2r0tf8pdeEFTHMFxWVxKNyU9rTtK3CWzUCTKJUeQ=="
- },
"less": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz",
@@ -911,9 +924,9 @@
}
},
"mdn-data": {
- "version": "2.0.14",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
- "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",
+ "version": "2.0.30",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
+ "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
"dev": true
},
"merge2": {
@@ -1211,12 +1224,13 @@
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
+ "dev": true,
+ "optional": true
},
- "stable": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
- "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
+ "source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
"dev": true
},
"string-width": {
@@ -1257,18 +1271,17 @@
"integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g=="
},
"svgo": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz",
- "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz",
+ "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==",
"dev": true,
"requires": {
"@trysound/sax": "0.2.0",
"commander": "^7.2.0",
- "css-select": "^4.1.3",
- "css-tree": "^1.1.3",
- "csso": "^4.2.0",
- "picocolors": "^1.0.0",
- "stable": "^0.1.8"
+ "css-select": "^5.1.0",
+ "css-tree": "^2.2.1",
+ "csso": "^5.0.5",
+ "picocolors": "^1.0.0"
}
},
"through": {
diff --git a/package.json b/package.json
index 0b8f5db..ae83df1 100644
--- a/package.json
+++ b/package.json
@@ -12,13 +12,13 @@
"author": "",
"license": "MIT",
"devDependencies": {
+ "@hyrious/esbuild-plugin-svgo": "^0.2.0",
"@types/node": "^16.11.6",
"@typescript-eslint/eslint-plugin": "5.29.0",
"@typescript-eslint/parser": "5.29.0",
"builtin-modules": "3.3.0",
"esbuild": "0.17.3",
"esbuild-plugin-less": "^1.2.4",
- "esbuild-plugin-svg": "^0.1.0",
"obsidian": "latest",
"tslib": "2.4.0",
"typescript": "4.7.4"
diff --git a/src/ExcelView.ts b/src/ExcelView.ts
index b40befa..2c20b8c 100644
--- a/src/ExcelView.ts
+++ b/src/ExcelView.ts
@@ -30,22 +30,22 @@ export class ExcelView extends TextFileView {
},
});
- console.log(this.ownerWindow.document.documentElement.clientWidth);
- const jsonData = JSON.parse(this.data || "{}") || {}
+ const jsonData = JSON.parse(this.data || "{}") || {};
+
//@ts-ignore
this.sheet = new Spreadsheet("#x-spreadsheet", {
view: {
height: () => this.contentEl.clientHeight,
width: () => this.contentEl.clientWidth,
- },
+ },
})
- .loadData(jsonData) // load data
- .change(data => {
- // save data to db
- this.data = JSON.stringify(data);
- });
+ .loadData(jsonData) // load data
+ .change((data) => {
+ // save data to db
+ this.data = JSON.stringify(data);
+ });
- this.sheet.validate()
+ this.sheet.validate();
}
onload(): void {
diff --git a/src/utils/FileUtils.ts b/src/utils/FileUtils.ts
new file mode 100644
index 0000000..bbc8213
--- /dev/null
+++ b/src/utils/FileUtils.ts
@@ -0,0 +1,124 @@
+
+import { normalizePath, Notice, TAbstractFile, TFile, TFolder, Vault } from "obsidian";
+import { ExcelSettings } from "./Settings";
+
+/**
+ * Splits a full path including a folderpath and a filename into separate folderpath and filename components
+ * @param filepath
+ */
+
+export function splitFolderAndFilename(filepath: string): {
+ folderpath: string;
+ filename: string;
+ basename: string;
+} {
+ const lastIndex = filepath.lastIndexOf("/");
+ const filename = lastIndex == -1 ? filepath : filepath.substring(lastIndex + 1);
+ return {
+ folderpath: normalizePath(filepath.substring(0, lastIndex)),
+ filename,
+ basename: filename.replace(/\.[^/.]+$/, ""),
+ };
+}
+
+/**
+ * Download data as file from Obsidian, to store on local device
+ * @param encoding
+ * @param data
+ * @param filename
+ */
+ export const download = (encoding: string, data: any, filename: string) => {
+ const element = document.createElement("a");
+ element.setAttribute("href", (encoding ? `${encoding},` : "") + data);
+ element.setAttribute("download", filename);
+ element.style.display = "none";
+ document.body.appendChild(element);
+ element.click();
+ document.body.removeChild(element);
+}
+
+/**
+ * Generates the image filename based on the excalidraw filename
+ * @param excalidrawPath - Full filepath of ExclidrawFile
+ * @param newExtension - extension of IMG file in ".extension" format
+ * @returns
+ */
+/*export function getIMGPathFromExcalidrawFile(
+ excalidrawPath: string,
+ newExtension: string,
+): string {
+ const isLegacyFile: boolean = excalidrawPath.endsWith(".excalidraw");
+ const replaceExtension: string = isLegacyFile ? ".excalidraw" : ".md";
+ return (
+ excalidrawPath.substring(0, excalidrawPath.lastIndexOf(replaceExtension)) +
+ newExtension
+ );
+}*/
+
+/**
+ * Generates the image filename based on the excalidraw filename
+ * @param path - path to the excalidraw file
+ * @param extension - extension without the preceeding "."
+ * @returns
+ */
+export function getIMGFilename(path: string, extension: string): string {
+ return `${path.substring(0, path.lastIndexOf("."))}.${extension}`;
+}
+
+/**
+ * Create new file, if file already exists find first unique filename by adding a number to the end of the filename
+ * @param filename
+ * @param folderpath
+ * @returns
+ */
+export function getNewUniqueFilepath(
+ vault: Vault,
+ filename: string,
+ folderpath: string,
+): string {
+ let fname = normalizePath(`${folderpath}/${filename}`);
+ let file: TAbstractFile = vault.getAbstractFileByPath(fname);
+ let i = 0;
+ const extension = filename.endsWith(".xlsx.md")
+ ? ".xlsx.md"
+ : filename.slice(filename.lastIndexOf("."));
+ while (file) {
+ fname = normalizePath(
+ `${folderpath}/${filename.slice(
+ 0,
+ filename.lastIndexOf(extension),
+ )}_${i}${extension}`,
+ );
+ i++;
+ file = vault.getAbstractFileByPath(fname);
+ }
+ return fname;
+}
+
+export function getExcelFilename(settings: ExcelSettings): string {
+ return (
+ "Excel " +
+ window.moment().format('YYYY-MM-DD HH.mm.ss') +
+ ".xlsx"
+ );
+}
+
+
+/**
+ * Open or create a folderpath if it does not exist
+ * @param folderpath
+ */
+export async function checkAndCreateFolder(folderpath: string) {
+ const vault = app.vault;
+ folderpath = normalizePath(folderpath);
+ //https://github.com/zsviczian/obsidian-excalidraw-plugin/issues/658
+ //@ts-ignore
+ const folder = vault.getAbstractFileByPathInsensitive(folderpath);
+ if (folder && folder instanceof TFolder) {
+ return;
+ }
+ if (folder && folder instanceof TFile) {
+ new Notice(`The folder cannot be created because it already exists as a file: ${folderpath}.`)
+ }
+ await vault.createFolder(folderpath);
+}
diff --git a/src/utils/ModifierkeyHelper.ts b/src/utils/ModifierkeyHelper.ts
new file mode 100644
index 0000000..7175e0f
--- /dev/null
+++ b/src/utils/ModifierkeyHelper.ts
@@ -0,0 +1,53 @@
+
+export type PaneTarget = "active-pane"|"new-pane"|"popout-window"|"new-tab"|"md-properties";
+export type ModifierKeys = {shiftKey:boolean, ctrlKey: boolean, metaKey: boolean, altKey: boolean};
+export type KeyEvent = PointerEvent | MouseEvent | KeyboardEvent | ModifierKeys;
+
+export type DeviceType = {
+ isDesktop: boolean,
+ isPhone: boolean,
+ isTablet: boolean,
+ isMobile: boolean,
+ isLinux: boolean,
+ isMacOS: boolean,
+ isWindows: boolean,
+ isIOS: boolean,
+ isAndroid: boolean
+};
+
+export const DEVICE: DeviceType = {
+ isDesktop: !document.body.hasClass("is-tablet") && !document.body.hasClass("is-mobile"),
+ isPhone: document.body.hasClass("is-phone"),
+ isTablet: document.body.hasClass("is-tablet"),
+ isMobile: document.body.hasClass("is-mobile"), //running Obsidian Mobile, need to also check isTablet
+ isLinux: document.body.hasClass("mod-linux") && ! document.body.hasClass("is-android"),
+ isMacOS: document.body.hasClass("mod-macos") && ! document.body.hasClass("is-ios"),
+ isWindows: document.body.hasClass("mod-windows"),
+ isIOS: document.body.hasClass("is-ios"),
+ isAndroid: document.body.hasClass("is-android")
+};
+
+export const isCTRL = (e:KeyEvent) => DEVICE.isIOS || DEVICE.isMacOS ? e.metaKey : e.ctrlKey;
+export const isALT = (e:KeyEvent) => e.altKey;
+export const isMETA = (e:KeyEvent) => DEVICE.isIOS || DEVICE.isMacOS ? e.ctrlKey : e.metaKey;
+export const isSHIFT = (e:KeyEvent) => e.shiftKey;
+export const mdPropModifier = (ev: KeyEvent): boolean => !isSHIFT(ev) && isCTRL(ev) && !isALT(ev) && isMETA(ev);
+
+export const emulateCTRLClickForLinks = (e: KeyEvent) => {
+ return {
+ shiftKey: e.shiftKey,
+ ctrlKey: e.ctrlKey || !(DEVICE.isIOS || DEVICE.isMacOS),
+ metaKey: e.metaKey || (DEVICE.isIOS || DEVICE.isMacOS),
+ altKey: e.altKey
+ }
+}
+
+export const linkClickModifierType = (ev: KeyEvent):PaneTarget => {
+ if(isCTRL(ev) && !isALT(ev) && isSHIFT(ev) && !isMETA(ev)) return "active-pane";
+ if(isCTRL(ev) && !isALT(ev) && !isSHIFT(ev) && !isMETA(ev)) return "new-tab";
+ if(isCTRL(ev) && isALT(ev) && !isSHIFT(ev) && !isMETA(ev)) return "new-pane";
+ if(DEVICE.isDesktop && isCTRL(ev) && isALT(ev) && isSHIFT(ev) && !isMETA(ev) ) return "popout-window";
+ if(isCTRL(ev) && isALT(ev) && isSHIFT(ev) && !isMETA(ev)) return "new-tab";
+ if(mdPropModifier(ev)) return "md-properties";
+ return "active-pane";
+}
\ No newline at end of file
diff --git a/src/utils/ObsidianUtils.ts b/src/utils/ObsidianUtils.ts
new file mode 100644
index 0000000..e01da81
--- /dev/null
+++ b/src/utils/ObsidianUtils.ts
@@ -0,0 +1,126 @@
+import ExcelPlugin from "main";
+import { WorkspaceLeaf } from "obsidian";
+
+const getLeafLoc = (
+ leaf: WorkspaceLeaf
+): ["main" | "popout" | "left" | "right" | "hover", any] => {
+ //@ts-ignore
+ const leafId = leaf.id;
+ const layout = app.workspace.getLayout();
+ const getLeaves = (l: any) =>
+ l.children
+ .filter((c: any) => c.type !== "leaf")
+ .map((c: any) => getLeaves(c))
+ .flat()
+ .concat(
+ l.children
+ .filter((c: any) => c.type === "leaf")
+ .map((c: any) => c.id)
+ );
+
+ const mainLeavesIds = getLeaves(layout.main);
+
+ return [
+ layout.main && mainLeavesIds.contains(leafId)
+ ? "main"
+ : layout.floating && getLeaves(layout.floating).contains(leafId)
+ ? "popout"
+ : layout.left && getLeaves(layout.left).contains(leafId)
+ ? "left"
+ : layout.right && getLeaves(layout.right).contains(leafId)
+ ? "right"
+ : "hover",
+ mainLeavesIds,
+ ];
+};
+
+/*
+| Setting | Originating Leaf |
+| | Main Workspace | Hover Editor | Popout Window |
+| ----------------------- | -------------------------------- | -------------------------------------- | -------------------------------- |
+| InMain && InAdjacent | 1.1 Reuse Leaf in Main Workspace | 1.1 Reuse Leaf in Main Workspace | 1.1 Reuse Leaf in Main Workspace |
+| InMain && !InAdjacent | 1.2 New Leaf in Main Workspace | 1.2 New Leaf in Main Workspace | 1.2 New Leaf in Main Workspace |
+| !InMain && InAdjacent | 1.1 Reuse Leaf in Main Workspace | 3 Reuse Leaf in Current Hover Editor | 4 Reuse Leaf in Current Popout |
+| !InMain && !InAdjacent | 1.2 New Leaf in Main Workspace | 2 New Leaf in Current Hover Editor | 2 New Leaf in Current Popout |
+*/
+export const getNewOrAdjacentLeaf = (
+ plugin: ExcelPlugin,
+ leaf: WorkspaceLeaf
+): WorkspaceLeaf | null => {
+ const [leafLoc, mainLeavesIds] = getLeafLoc(leaf);
+
+ const getMostRecentOrAvailableLeafInMainWorkspace = (
+ inDifferentTabGroup?: boolean
+ ): WorkspaceLeaf => {
+ let mainLeaf = app.workspace.getMostRecentLeaf();
+ if (
+ mainLeaf &&
+ mainLeaf !== leaf &&
+ mainLeaf.view?.containerEl.ownerDocument === document
+ ) {
+ //Found a leaf in the main workspace that is not the originating leaf
+ return mainLeaf;
+ }
+ //Iterate all leaves in the main workspace and find the first one that is not the originating leaf
+ mainLeaf = null;
+ mainLeavesIds.forEach((id: any) => {
+ const l = app.workspace.getLeafById(id);
+ if (
+ mainLeaf ||
+ !l.view?.navigation ||
+ leaf === l ||
+ //@ts-ignore
+ (inDifferentTabGroup && l?.parent === leaf?.parent)
+ )
+ return;
+ mainLeaf = l;
+ });
+ return mainLeaf;
+ };
+
+ //1 - In Main Workspace
+ if (["main", "left", "right"].contains(leafLoc)
+ ) {
+ //1.2 - Reuse leaf if it is adjacent
+ const ml = getMostRecentOrAvailableLeafInMainWorkspace(true);
+ return ml ?? app.workspace.createLeafBySplit(leaf); //app.workspace.getLeaf(true);
+ }
+
+ //3
+ if (leafLoc === "hover") {
+ const leaves = new Set();
+ app.workspace.iterateAllLeaves((l) => {
+ //@ts-ignore
+ if (
+ l !== leaf &&
+ leaf.containerEl.parentElement === l.containerEl.parentElement
+ )
+ leaves.add(l);
+ });
+ if (leaves.size === 0) {
+ return plugin.app.workspace.createLeafBySplit(leaf);
+ }
+ return Array.from(leaves)[0];
+ }
+
+ //4
+ if (leafLoc === "popout") {
+ const popoutLeaves = new Set();
+ app.workspace.iterateAllLeaves((l) => {
+ if (
+ l !== leaf &&
+ l.view.navigation &&
+ l.view.containerEl.ownerDocument ===
+ leaf.view.containerEl.ownerDocument
+ ) {
+ popoutLeaves.add(l);
+ }
+ });
+ if (popoutLeaves.size === 0) {
+ return app.workspace.createLeafBySplit(leaf);
+ }
+ return Array.from(popoutLeaves)[0];
+ }
+
+ return plugin.app.workspace.createLeafBySplit(leaf);
+};
diff --git a/src/utils/Settings.ts b/src/utils/Settings.ts
new file mode 100644
index 0000000..61e7f06
--- /dev/null
+++ b/src/utils/Settings.ts
@@ -0,0 +1,15 @@
+export interface ExcelSettings {
+ folder: string;
+ excelFilenamePrefix: String,
+ excelEmbedPrefixWithFilename: true,
+ excelFilnameEmbedPostfix: String,
+ excelFilenameDateTime: String,
+}
+
+export const DEFAULT_SETTINGS: ExcelSettings = {
+ folder: "Excel",
+ excelFilenamePrefix: "Excel ",
+ excelEmbedPrefixWithFilename: true,
+ excelFilnameEmbedPostfix: " ",
+ excelFilenameDateTime: "YYYY-MM-DD HH.mm.ss",
+};
diff --git a/styles.css b/styles.css
index f6defe6..e11483f 100644
--- a/styles.css
+++ b/styles.css
@@ -1,16 +1,17 @@
+.sheet-box {
+ /* position: absolute;
+ left: 0;
+ top: 40px; */
+ width: 100%;
+ height: 100%;
+ margin: -16px;
+ padding: 0;
+}
+
/* node_modules/x-data-spreadsheet/src/index.less */
body {
margin: 0;
}
-.sheet-box {
- /* position: absolute;
- left: 0;
- top: 40px; */
- width: 100%;
- height: 100%;
- margin: -16px;
- padding: 0;
-}
.x-spreadsheet {
font-size: 13px;
line-height: normal;
@@ -877,7 +878,7 @@ form fieldset select {
display: inline-block;
}
.x-spreadsheet-icon .x-spreadsheet-icon-img {
- background-image: url(data:text/plain;base64,PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4xIiB4PSIwIiB5PSIwIiB3aWR0aD0iMjYycHgiIGhlaWdodD0iNzJweCIgdmlld0JveD0iMCAwIDI2MiA3MiIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwwKSI+PHBhdGggZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTEuNTY1NjM5MSw0LjQzNDM2MDg4IEw5LDcgTDE2LDcgTDE2LDAgTDEzLjA0MTg0MjQsMi45NTgxNTc1OCBDMTEuNTkzNjc4NywxLjczNjM1OTU5IDkuNzIyNjA3NzUsMSA3LjY3OTU1MDgzLDEgQzQuMjIxMjYyNTgsMSAxLjI1NTc1NTk5LDMuMTA5ODQ5MDggMCw2IEwyLDcgQzIuOTM2NTg3NzUsNC42MDk3NDQwNiA1LjEyOTQzNjk3LDMuMDgwMTEyMjkgNy42Nzk1NTA4MywzIEM5LjE0ODgxMjQ3LDMuMDUyODc0NyAxMC40OTk0NzgzLDMuNTc4NjIwNTMgMTEuNTY1NjM5MSw0LjQzNDM2MDg4IFoiIHRyYW5zZm9ybT0ibWF0cml4KC0xIDAgMCAxIDE3IDUpIi8+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxOCwwKSI+PHBhdGggZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTEuNTY1NjM5MSw0LjQzNDM2MDg4IEw5LDcgTDE2LDcgTDE2LDAgTDEzLjA0MTg0MjQsMi45NTgxNTc1OCBDMTEuNTkzNjc4NywxLjczNjM1OTU5IDkuNzIyNjA3NzUsMSA3LjY3OTU1MDgzLDEgQzQuMjIxMjYyNTgsMSAxLjI1NTc1NTk5LDMuMTA5ODQ5MDggMCw2IEwyLDcgQzIuOTM2NTg3NzUsNC42MDk3NDQwNiA1LjEyOTQzNjk3LDMuMDgwMTEyMjkgNy42Nzk1NTA4MywzIEM5LjE0ODgxMjQ3LDMuMDUyODc0NyAxMC40OTk0NzgzLDMuNTc4NjIwNTMgMTEuNTY1NjM5MSw0LjQzNDM2MDg4IFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEgNSkiLz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM2LDApIj48cGF0aCBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMywxNCBMMywxNCBMMywxMSBMMCwxMSBMMCw2LjAwNTkxOTA1IEMwLDQuODk4MDgwNTUgMC44OTQ1MTM3NTYsNCAxLjk5NDA2MDI4LDQgTDE0LjAwNTkzOTcsNCBDMTUuMTA3MjI4OCw0IDE2LDQuODg2NTU0ODQgMTYsNi4wMDU5MTkwNSBMMTYsMTEgTDEzLDExIEwxMywxNCBaIE01LDkgTDExLDkgTDExLDEyIEw1LDEyIEw1LDkgWiBNMywwIEwxMywwIEwxMywzIEwzLDMgTDMsMCBaIE0xMiw2IEwxNCw2IEwxNCw4IEwxMiw4IEwxMiw2IFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEgMikiLz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDU0LDApIj48cGF0aCBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik05LDAgTDEsMCBDMC40NSwwIDAsMC40NSAwLDEgTDAsNCBDMCw0LjU1IDAuNDUsNSAxLDUgTDksNSBDOS41NSw1IDEwLDQuNTUgMTAsNCBMMTAsMyBMMTEsMyBMMTEsNiBMNCw2IEw0LDE0IEw2LDE0IEw2LDggTDEzLDggTDEzLDIgTDEwLDIgTDEwLDEgQzEwLDAuNDUgOS41NSwwIDksMCBaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzIDIpIi8+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3MiwwKSI+PHBhdGggZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMC4yNywxLjU1IEw1LjQzLDYuNyBMMywxMiBMNS41LDEyIEw3LjE0LDguNDIgTDExLjczLDEzIEwxMywxMS43MyBMMS41NSwwLjI3IEwwLjI3LDEuNTUgTDAuMjcsMS41NSBaIE0zLjgyLDAgTDUuODIsMiBMNy41OCwyIEw3LjAzLDMuMjEgTDguNzQsNC45MiBMMTAuMDgsMiBMMTQsMiBMMTQsMCBMMy44MiwwIEwzLjgyLDAgWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMiAzKSIvPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTAsMCkiPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTksMy41IEM5LDEuNTcgNy40MywwIDUuNSwwIEwxLjc3NjM1Njg0ZS0xNSwwIEwxLjc3NjM1Njg0ZS0xNSwxMiBMNi4yNSwxMiBDOC4wNCwxMiA5LjUsMTAuNTQgOS41LDguNzUgQzkuNSw3LjQ1IDguNzMsNi4zNCA3LjYzLDUuODIgQzguNDYsNS4yNCA5LDQuMzggOSwzLjUgWiBNNSwyIEM1LjgyOTk5OTkyLDIgNi41LDIuNjcgNi41LDMuNSBDNi41LDQuMzMgNS44Mjk5OTk5Miw1IDUsNSBMMyw1IEwzLDIgTDUsMiBaIE0zLDEwIEwzLDcgTDUuNSw3IEM2LjMyOTk5OTkyLDcgNyw3LjY3IDcsOC41IEM3LDkuMzMgNi4zMjk5OTk5MiwxMCA1LjUsMTAgTDMsMTAgWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNCAzKSIvPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTA4LDApIj48cG9seWdvbiBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHBvaW50cz0iNCAwIDQgMiA2LjU4IDIgMi45MiAxMCAwIDEwIDAgMTIgOCAxMiA4IDEwIDUuNDIgMTAgOS4wOCAyIDEyIDIgMTIgMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMyAzKSIvPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTI2LDApIj48cGF0aCBmaWxsPSIjMDAwMDAwIiBkPSJNNiwxMiBDOC43NiwxMiAxMSw5Ljc2IDExLDcgTDExLDAgTDksMCBMOSw3IEM5LDguNzUwMjk5MTYgNy40OTkxMjgwNywxMCA2LDEwIEM0LjUwMDg3MTkzLDEwIDMsOC43NTgzNzQ4NiAzLDcgTDMsMCBMMSwwIEwxLDcgQzEsOS43NiAzLjI0LDEyIDYsMTIgWiBNMCwxMyBMMCwxNSBMMTIsMTUgTDEyLDEzIEwwLDEzIFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMykiLz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE0NCwwKSI+PHBhdGggZmlsbD0iIzAxMDEwMSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMi44ODc1LDMuMDYgQzIuODg3NSwyLjYwMjUgMi45ODUsMi4xODYyNSAzLjE4Mzc1LDEuODA3NSBDMy4zODI1LDEuNDI4NzUgMy42NiwxLjEwNjI1IDQuMDIsMC44NCBDNC4zOCwwLjU3Mzc1IDQuODAzNzUsMC4zNjc1IDUuMjk4NzUsMC4yMjEyNSBDNS43OTM3NSwwLjA3NSA2LjMzMzc1LDAgNi45MjYyNSwwIEM3LjUzMzc1LDAgOC4wODUsMC4wODI1IDguNTgsMC4yNTEyNSBDOS4wNzUsMC40MiA5LjQ5ODc1LDAuNjUyNSA5Ljg1MTI1LDAuOTU2MjUgQzEwLjIwMzc1LDEuMjU2MjUgMTAuNDczNzUsMS42MTI1IDEwLjY2NSwyLjAyODc1IEMxMC44NTYyNSwyLjQ0MTI1IDEwLjk1LDIuODk1IDEwLjk1LDMuMzg2MjUgTDguNjkyNSwzLjM4NjI1IEM4LjY5MjUsMy4xNTc1IDguNjU1LDIuOTQzNzUgOC41ODM3NSwyLjc0ODc1IEM4LjUxMjUsMi41NSA4LjQsMi4zODEyNSA4LjI1LDIuMjQyNSBDOC4xLDIuMTAzNzUgNy45MTI1LDEuOTkxMjUgNy42ODc1LDEuOTE2MjUgQzcuNDYyNSwxLjgzNzUgNy4xOTYyNSwxLjggNi44ODg3NSwxLjggQzYuNTkyNSwxLjggNi4zMzc1LDEuODMzNzUgNi4xMTYyNSwxLjg5NzUgQzUuODk4NzUsMS45NjEyNSA1LjcxODc1LDIuMDUxMjUgNS41NzYyNSwyLjE2NzUgQzUuNDMzNzUsMi4yODM3NSA1LjMyNSwyLjQxODc1IDUuMjUzNzUsMi41NzI1IEM1LjE4MjUsMi43MjYyNSA1LjE0NSwyLjg5NSA1LjE0NSwzLjA2NzUgQzUuMTQ1LDMuNDI3NSA1LjMyODc1LDMuNzMxMjUgNS42OTYyNSwzLjk3NSBDNS43MTc4MDIwMywzLjk4OTA4MDY2IDUuNzM5NDIwMTIsNC4wMDMxMTcyOCA1Ljc2MTE4MzU3LDQuMDE3MzMzMTUgQzYuMDIzNDI5MjMsNC4xODg2MzE4NSA2LjUsNC41IDcsNSBMNCw1IEM0LDUgMy4yMTM3NSw0LjM3NjI1IDMuMTc2MjUsNC4zMDg3NSBDMi45ODUsMy45NTI1IDIuODg3NSwzLjUzNjI1IDIuODg3NSwzLjA2IFogTTE0LDYgTDAsNiBMMCw4IEw3LjIxODc1LDggQzcuMzUzNzUsOC4wNTI1IDcuNTE4NzUsOC4xMDUgNy42MzEyNSw4LjE1Mzc1IEM3LjkwODc1LDguMjc3NSA4LjEyNjI1LDguNDA4NzUgOC4yODM3NSw4LjUzNjI1IEM4LjQ0MTI1LDguNjY3NSA4LjU0NjI1LDguODEgOC42MDI1LDguOTYgQzguNjU4NzUsOS4xMTM3NSA4LjY4NSw5LjI4NjI1IDguNjg1LDkuNDczNzUgQzguNjg1LDkuNjUgOC42NTEyNSw5LjgxNSA4LjU4Mzc1LDkuOTY1IEM4LjUxNjI1LDEwLjExODc1IDguNDExMjUsMTAuMjUgOC4yNzI1LDEwLjM1ODc1IEM4LjEzMzc1LDEwLjQ2NzUgNy45NTM3NSwxMC41NTM3NSA3Ljc0LDEwLjYxNzUgQzcuNTIyNSwxMC42ODEyNSA3LjI3MTI1LDEwLjcxMTI1IDYuOTc4NzUsMTAuNzExMjUgQzYuNjUyNSwxMC43MTEyNSA2LjM1NjI1LDEwLjY3NzUgNi4wOSwxMC42MTM3NSBDNS44MjM3NSwxMC41NSA1LjU5ODc1LDEwLjQ0NSA1LjQxMTI1LDEwLjMwMjUgQzUuMjIzNzUsMTAuMTYgNS4wNzc1LDkuOTcyNSA0Ljk3MjUsOS43NDM3NSBDNC44Njc1LDkuNTE1IDQuNzgxMjUsOS4xNyA0Ljc4MTI1LDkgTDIuNTUsOSBDMi41NSw5LjI1MjUgMi42MSw5LjY4NzUgMi43MjYyNSwxMC4wMjUgQzIuODQyNSwxMC4zNjI1IDMuMDA3NSwxMC42NjYyNSAzLjIxMzc1LDEwLjkzMjUgQzMuNDIsMTEuMTk4NzUgMy42Njc1LDExLjQyNzUgMy45NDg3NSwxMS42MjI1IEM0LjIzLDExLjgxNzUgNC41MzM3NSwxMS45ODI1IDQuODYzNzUsMTIuMTEgQzUuMTkzNzUsMTIuMjQxMjUgNS41MzUsMTIuMzM4NzUgNS44OTg3NSwxMi4zOTg3NSBDNi4yNTg3NSwxMi40NjI1IDYuNjIyNSwxMi40OTI1IDYuOTgyNSwxMi40OTI1IEM3LjU4MjUsMTIuNDkyNSA4LjEzLDEyLjQyNSA4LjYxNzUsMTIuMjg2MjUgQzkuMTA1LDEyLjE0NzUgOS41MjUsMTEuOTQ4NzUgOS44NywxMS42OTM3NSBDMTAuMjE1LDExLjQzNSAxMC40ODEyNSwxMS4xMiAxMC42NzI1LDEwLjc0MTI1IEMxMC44NjM3NSwxMC4zNjI1IDEwLjk1Mzc1LDkuOTM1IDEwLjk1Mzc1LDkuNDU1IEMxMC45NTM3NSw5LjAwNSAxMC44NzUsOC42IDEwLjcyMTI1LDguMjQzNzUgQzEwLjY4Mzc1LDguMTU3NSAxMC42NDI1LDguMDc1IDEwLjU5Mzc1LDcuOTkyNSBMMTQsOCBMMTQsNiBaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyIDMpIi8+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxNjIsMCkiPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTcsMCBMNSwwIEwwLjUsMTIgTDIuNSwxMiBMMy42Miw5IEw4LjM3LDkgTDkuNDksMTIgTDExLjQ5LDEyIEw3LDAgTDcsMCBaIE00LjM4LDcgTDYsMi42NyBMNy42Miw3IEw0LjM4LDcgTDQuMzgsNyBaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzIDEpIi8+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxODAsMCkiPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICA8cGF0aCBmaWxsPSIjMDAwMDAwIiBkPSJNMTQuNSw4Ljg3IEMxNC41LDguODcgMTMsMTAuNDkgMTMsMTEuNDkgQzEzLDEyLjMyIDEzLjY3LDEyLjk5IDE0LjUsMTIuOTkgQzE1LjMzLDEyLjk5IDE2LDEyLjMyIDE2LDExLjQ5IEMxNiwxMC41IDE0LjUsOC44NyAxNC41LDguODcgTDE0LjUsOC44NyBaIE0xMi43MSw2Ljc5IEw1LjkxLDAgTDQuODUsMS4wNiBMNi40NCwyLjY1IEwyLjI5LDYuNzkgQzEuOSw3LjE4IDEuOSw3LjgxIDIuMjksOC4yIEw2Ljc5LDEyLjcgQzYuOTksMTIuOSA3LjI0LDEzIDcuNSwxMyBDNy43NiwxMyA4LjAxLDEyLjkgOC4yMSwxMi43MSBMMTIuNzEsOC4yMSBDMTMuMSw3LjgyIDEzLjEsNy4xOCAxMi43MSw2Ljc5IEwxMi43MSw2Ljc5IFogTTQuMjEsNyBMNy41LDMuNzEgTDEwLjc5LDcgTDQuMjEsNyBMNC4yMSw3IFoiLz4KICA8L2c+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxOTgsMCkiPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTMsNiBMMSw2IEwxLDIgTDgsMiBMOCw0IEwzLDQgTDMsNiBaIE0xMCw0IEwxMCwyIEwxNywyIEwxNyw2IEwxNSw2IEwxNSw0IEwxMCw0IFogTTEwLDE0IEwxNSwxNCBMMTUsMTIgTDE3LDEyIEwxNywxNiBMMTAsMTYgTDEwLDE0IFogTTEsMTIgTDMsMTIgTDMsMTQgTDgsMTQgTDgsMTYgTDEsMTYgTDEsMTIgWiBNMSw4IEw1LDggTDUsNiBMOCw5IEw1LDEyIEw1LDEwIEwxLDEwIEwxLDggWiBNMTAsOSBMMTMsNiBMMTMsOCBMMTcsOCBMMTcsMTAgTDEzLDEwIEwxMywxMiBMMTAsOSBaIi8+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMTYsMCkiPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTAsMTQgTDEwLDE0IEwxMCwxMiBMMCwxMiBMMCwxNCBaIE0xMCw0IEwwLDQgTDAsNiBMMTAsNiBMMTAsNCBaIE0wLDAgTDAsMiBMMTQsMiBMMTQsMCBMMCwwIFogTTAsMTAgTDE0LDEwIEwxNCw4IEwwLDggTDAsMTAgWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMiAyKSIvPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjM0LDApIj48cGF0aCBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yLDEyIEwyLDE0IEwxMiwxNCBMMTIsMTIgTDIsMTIgWiBNMiw0IEwyLDYgTDEyLDYgTDEyLDQgTDIsNCBaIE0wLDEwIEwxNCwxMCBMMTQsOCBMMCw4IEwwLDEwIFogTTAsMCBMMCwyIEwxNCwyIEwxNCwwIEwwLDAgWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMiAyKSIvPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwxOCkiPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTQsMTQgTDE0LDE0IEwxNCwxMiBMNCwxMiBMNCwxNCBaIE0wLDEwIEwxNCwxMCBMMTQsOCBMMCw4IEwwLDEwIFogTTAsMCBMMCwyIEwxNCwyIEwxNCwwIEwwLDAgWiBNNCw2IEwxNCw2IEwxNCw0IEw0LDQgTDQsNiBaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyIDIpIi8+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxOCwxOCkiPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTAsMCBMMCwyIEwxMiwyIEwxMiwwIEwwLDAgTDAsMCBaIE0yLjUsNyBMNSw3IEw1LDE0IEw3LDE0IEw3LDcgTDkuNSw3IEw2LDMuNSBMMi41LDcgTDIuNSw3IFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMgMikiLz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM2LDE4KSI+PHBhdGggZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOS41LDMgTDcsMyBMNywwIEw1LDAgTDUsMyBMMi41LDMgTDYsNi41IEw5LjUsMyBMOS41LDMgWiBNMCw4IEwwLDEwIEwxMiwxMCBMMTIsOCBMMCw4IEwwLDggWiBNMi41LDE1IEw1LDE1IEw1LDE4IEw3LDE4IEw3LDE1IEw5LjUsMTUgTDYsMTEuNSBMMi41LDE1IEwyLjUsMTUgWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMykiLz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDU0LDE4KSI+PHBhdGggZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNOS41LDcgTDcsNyBMNywwIEw1LDAgTDUsNyBMMi41LDcgTDYsMTAuNSBMOS41LDcgTDkuNSw3IFogTTAsMTIgTDAsMTQgTDEyLDE0IEwxMiwxMiBMMCwxMiBMMCwxMiBaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzIDIpIi8+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3MiwxOCkiPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTE0LDAgTDAsMCBMMCwyIEwxNCwyIEwxNCwwIFogTTAsMTIgTDQsMTIgTDQsMTAgTDAsMTAgTDAsMTIgWiBNMTEuNSw1IEwwLDUgTDAsNyBMMTEuNzUsNyBDMTIuNTgsNyAxMy4yNSw3LjY3IDEzLjI1LDguNSBDMTMuMjUsOS4zMyAxMi41OCwxMCAxMS43NSwxMCBMOSwxMCBMOSw4IEw2LDExIEw5LDE0IEw5LDEyIEwxMS41LDEyIEMxMy40MywxMiAxNSwxMC40MyAxNSw4LjUgQzE1LDYuNTcgMTMuNDMsNSAxMS41LDUgWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMiAzKSIvPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOTAsMTgpIj48cGF0aCBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0wLDAgTDAsMSBMNiw3IEw2LDEyIEw4LDExIEw4LDcgTDE0LDEgTDE0LDAgTDAsMCBaIE00LDMgTDEwLDMgTDcsNiBMNCwzIFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMykiLz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEwOCwxOCkiPjxwb2x5Z29uIGZpbGw9IiMwMDAwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgcG9pbnRzPSIxMCAwIDAgMCAwIDEuOCA1LjUgNyAwIDEyLjIgMCAxNCAxMCAxNCAxMCAxMiAzLjEgMTIgOCA3IDMuMSAyIDEwIDIiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQgMikiLz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDEyNiwxOCkiPjxwb2x5Z29uIGZpbGw9IiMwMDAwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgcG9pbnRzPSIwIDAgNCA0IDggMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNSA3KSIvPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTQ0LDE4KSI+PHBvbHlnb24gZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBwb2ludHM9Ii0yIDIgMiA2IDYgMiIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDggMykiLz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE2MiwxOCkiPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTEuOSw0IEMxLjksMi44NCAyLjg0LDEuOSA0LDEuOSBMOCwxLjkgTDgsMCBMNCwwIEMxLjc5LDAgMCwxLjc5IDAsNCBDMCw2LjIxIDEuNzksOCA0LDggTDgsOCBMOCw2LjEgTDQsNi4xIEMyLjg0LDYuMSAxLjksNS4xNiAxLjksNCBMMS45LDQgWiBNMTQsMCBMMTAsMCBMMTAsMS45IEwxNCwxLjkgQzE1LjE2LDEuOSAxNi4xLDIuODQgMTYuMSw0IEMxNi4xLDUuMTYgMTUuMTYsNi4xIDE0LDYuMSBMMTAsNi4xIEwxMCw4IEwxNCw4IEMxNi4yMSw4IDE4LDYuMjEgMTgsNCBDMTgsMS43OSAxNi4yMSwwIDE0LDAgTDE0LDAgWiBNNiw1IEwxMiw1IEwxMiwzIEw2LDMgTDYsNSBMNiw1IFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgNSkiLz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE4MCwxOCkiPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTE1LDAgQzE1LjU1LDAgMTYsMC40NSAxNiwxIEwxNiwxNSBDMTYsMTUuNTUgMTUuNTUsMTYgMTUsMTYgTDEsMTYgQzAuNDUsMTYgMCwxNS41NSAwLDE1IEwwLDEgQzAsMC40NSAwLjQ1LDAgMSwwIEwxNSwwIFogTTIsMiBMMiwxNCBMMTQsMTQgTDE0LDIgTDIsMiBaIE02LDEyIEw0LDEyIEw0LDcgTDYsNyBMNiwxMiBMNiwxMiBaIE05LDEyIEw3LDEyIEw3LDQgTDksNCBMOSwxMiBMOSwxMiBaIE0xMiwxMiBMMTAsMTIgTDEwLDggTDEyLDggTDEyLDEyIEwxMiwxMiBaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxIDEpIi8+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxOTgsMTgpIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgPHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBkPSJNMS41IDMuNUgxNi41VjE1LjVIMS41eiIvPgogICAgPHBhdGggZmlsbD0iIzAwMDAwMCIgZD0iTTYgOEg3VjE1SDZ6Ii8+CiAgICA8cGF0aCBmaWxsPSIjRDhEOEQ4IiBkPSJNMiA0SDE2VjdIMnoiLz4KICAgIDxwYXRoIGZpbGw9IiMwMDAwMDAiIGQ9Ik0yIDdIMTZWOEgyek0yIDExSDE2VjEySDJ6Ii8+CiAgPC9nPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjE2LDE4KSI+PHBhdGggZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMiwwLjUgQzEuMTcsMC41IDAuNSwxLjE3IDAuNSwyIEMwLjUsMi44MyAxLjE3LDMuNSAyLDMuNSBDMi44MywzLjUgMy41LDIuODMgMy41LDIgQzMuNSwxLjE3IDIuODMsMC41IDIsMC41IEwyLDAuNSBaIE0xMiwwLjUgQzExLjE3LDAuNSAxMC41LDEuMTcgMTAuNSwyIEMxMC41LDIuODMgMTEuMTcsMy41IDEyLDMuNSBDMTIuODMsMy41IDEzLjUsMi44MyAxMy41LDIgQzEzLjUsMS4xNyAxMi44MywwLjUgMTIsMC41IEwxMiwwLjUgWiBNNywwLjUgQzYuMTcsMC41IDUuNSwxLjE3IDUuNSwyIEM1LjUsMi44MyA2LjE3LDMuNSA3LDMuNSBDNy44MywzLjUgOC41LDIuODMgOC41LDIgQzguNSwxLjE3IDcuODMsMC41IDcsMC41IEw3LDAuNSBaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyIDcpIi8+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMzQsMTgpIj48cGF0aCBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02LDQgTDYsMCBMNCwwIEw0LDQgTDAsNCBMMCw2IEw0LDYgTDQsMTAgTDYsMTAgTDYsNiBMMTAsNiBMMTAsNCBMNiw0IFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQgNCkiLz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsMzYpIj48cGF0aCBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0wLDAgTDAsMTQgTDE0LDE0IEwxNCwwIEwwLDAgTDAsMCBaIE02LDEyIEwyLDEyIEwyLDggTDYsOCBMNiwxMiBMNiwxMiBaIE02LDYgTDIsNiBMMiwyIEw2LDIgTDYsNiBMNiw2IFogTTEyLDEyIEw4LDEyIEw4LDggTDEyLDggTDEyLDEyIEwxMiwxMiBaIE0xMiw2IEw4LDYgTDgsMiBMMTIsMiBMMTIsNiBMMTIsNiBaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyIDIpIi8+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxOCwzNikiPgogIDxnIGZpbGw9IiMwMDAwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMiAyKSI+CiAgICA8cGF0aCBkPSJNMCwxNCBMMiwxNCBMMiwxMiBMMCwxMiBMMCwxNCBMMCwxNCBaIE0yLDMgTDAsMyBMMCw1IEwyLDUgTDIsMyBMMiwzIFogTTMsMTQgTDUsMTQgTDUsMTIgTDMsMTIgTDMsMTQgTDMsMTQgWiBNMTEsMCBMOSwwIEw5LDIgTDExLDIgTDExLDAgTDExLDAgWiBNMiwwIEwwLDAgTDAsMiBMMiwyIEwyLDAgTDIsMCBaIE01LDAgTDMsMCBMMywyIEw1LDIgTDUsMCBMNSwwIFogTTAsMTEgTDIsMTEgTDIsOSBMMCw5IEwwLDExIEwwLDExIFogTTksMTQgTDExLDE0IEwxMSwxMiBMOSwxMiBMOSwxNCBMOSwxNCBaIE0xMiwwIEwxMiwyIEwxNCwyIEwxNCwwIEwxMiwwIEwxMiwwIFogTTEyLDUgTDE0LDUgTDE0LDMgTDEyLDMgTDEyLDUgTDEyLDUgWiBNMTIsMTQgTDE0LDE0IEwxNCwxMiBMMTIsMTIgTDEyLDE0IEwxMiwxNCBaIE0xMiwxMSBMMTQsMTEgTDE0LDkgTDEyLDkgTDEyLDExIEwxMiwxMSBaIiBvcGFjaXR5PSIuNTQiLz4KICAgIDxwb2x5Z29uIHBvaW50cz0iOCAwIDYgMCA2IDYgMCA2IDAgOCA2IDggNiAxNCA4IDE0IDggOCAxNCA4IDE0IDYgOCA2Ii8+CiAgPC9nPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzYsMzYpIj4KICA8ZyBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiPgogICAgPHBhdGggZD0iTTYsMTQgTDgsMTQgTDgsMTIgTDYsMTIgTDYsMTQgTDYsMTQgWiBNMywyIEw1LDIgTDUsMCBMMywwIEwzLDIgTDMsMiBaIE02LDExIEw4LDExIEw4LDkgTDYsOSBMNiwxMSBMNiwxMSBaIE0zLDE0IEw1LDE0IEw1LDEyIEwzLDEyIEwzLDE0IEwzLDE0IFogTTAsNSBMMiw1IEwyLDMgTDAsMyBMMCw1IEwwLDUgWiBNMCwxNCBMMiwxNCBMMiwxMiBMMCwxMiBMMCwxNCBMMCwxNCBaIE0wLDIgTDIsMiBMMiwwIEwwLDAgTDAsMiBMMCwyIFogTTAsMTEgTDIsMTEgTDIsOSBMMCw5IEwwLDExIEwwLDExIFogTTEyLDExIEwxNCwxMSBMMTQsOSBMMTIsOSBMMTIsMTEgTDEyLDExIFogTTEyLDE0IEwxNCwxNCBMMTQsMTIgTDEyLDEyIEwxMiwxNCBMMTIsMTQgWiBNMTIsNSBMMTQsNSBMMTQsMyBMMTIsMyBMMTIsNSBMMTIsNSBaIE0xMiwwIEwxMiwyIEwxNCwyIEwxNCwwIEwxMiwwIEwxMiwwIFogTTYsMiBMOCwyIEw4LDAgTDYsMCBMNiwyIEw2LDIgWiBNOSwyIEwxMSwyIEwxMSwwIEw5LDAgTDksMiBMOSwyIFogTTYsNSBMOCw1IEw4LDMgTDYsMyBMNiw1IEw2LDUgWiBNOSwxNCBMMTEsMTQgTDExLDEyIEw5LDEyIEw5LDE0IEw5LDE0IFoiIG9wYWNpdHk9Ii41NCIvPgogICAgPHBvbHlnb24gcG9pbnRzPSIwIDggMTQgOCAxNCA2IDAgNiIvPgogIDwvZz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDU0LDM2KSI+CiAgPGcgZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyIDIpIj4KICAgIDxwYXRoIGQ9Ik0zLDE0IEw1LDE0IEw1LDEyIEwzLDEyIEwzLDE0IEwzLDE0IFogTTAsNSBMMiw1IEwyLDMgTDAsMyBMMCw1IEwwLDUgWiBNMCwyIEwyLDIgTDIsMCBMMCwwIEwwLDIgTDAsMiBaIE0zLDggTDUsOCBMNSw2IEwzLDYgTDMsOCBMMyw4IFogTTMsMiBMNSwyIEw1LDAgTDMsMCBMMywyIEwzLDIgWiBNMCwxNCBMMiwxNCBMMiwxMiBMMCwxMiBMMCwxNCBMMCwxNCBaIE0wLDggTDIsOCBMMiw2IEwwLDYgTDAsOCBMMCw4IFogTTAsMTEgTDIsMTEgTDIsOSBMMCw5IEwwLDExIEwwLDExIFogTTEyLDAgTDEyLDIgTDE0LDIgTDE0LDAgTDEyLDAgTDEyLDAgWiBNMTIsOCBMMTQsOCBMMTQsNiBMMTIsNiBMMTIsOCBMMTIsOCBaIE0xMiwxNCBMMTQsMTQgTDE0LDEyIEwxMiwxMiBMMTIsMTQgTDEyLDE0IFogTTEyLDUgTDE0LDUgTDE0LDMgTDEyLDMgTDEyLDUgTDEyLDUgWiBNMTIsMTEgTDE0LDExIEwxNCw5IEwxMiw5IEwxMiwxMSBMMTIsMTEgWiBNOSwxNCBMMTEsMTQgTDExLDEyIEw5LDEyIEw5LDE0IEw5LDE0IFogTTksOCBMMTEsOCBMMTEsNiBMOSw2IEw5LDggTDksOCBaIE05LDIgTDExLDIgTDExLDAgTDksMCBMOSwyIEw5LDIgWiIgb3BhY2l0eT0iLjU0Ii8+CiAgICA8cG9seWdvbiBwb2ludHM9IjYgMTQgOCAxNCA4IDAgNiAwIi8+CiAgPC9nPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNzIsMzYpIj4KICA8ZyBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiPgogICAgPHBhdGggZD0iTTgsMyBMNiwzIEw2LDUgTDgsNSBMOCwzIEw4LDMgWiBNMTEsNiBMOSw2IEw5LDggTDExLDggTDExLDYgTDExLDYgWiBNOCw2IEw2LDYgTDYsOCBMOCw4IEw4LDYgTDgsNiBaIE04LDkgTDYsOSBMNiwxMSBMOCwxMSBMOCw5IEw4LDkgWiBNNSw2IEwzLDYgTDMsOCBMNSw4IEw1LDYgTDUsNiBaIiBvcGFjaXR5PSIuNTQiLz4KICAgIDxwYXRoIGQ9Ik0wLDAgTDE0LDAgTDE0LDE0IEwwLDE0IEwwLDAgWiBNMTIsMTIgTDEyLDIgTDIsMiBMMiwxMiBMMTIsMTIgWiIvPgogIDwvZz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkwLDM2KSI+CiAgPGcgZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyIDIpIj4KICAgIDxwYXRoIGQ9Ik02LDggTDgsOCBMOCw2IEw2LDYgTDYsOCBMNiw4IFogTTYsNSBMOCw1IEw4LDMgTDYsMyBMNiw1IEw2LDUgWiBNNiwxMSBMOCwxMSBMOCw5IEw2LDkgTDYsMTEgTDYsMTEgWiBNNiwxNCBMOCwxNCBMOCwxMiBMNiwxMiBMNiwxNCBMNiwxNCBaIE0zLDE0IEw1LDE0IEw1LDEyIEwzLDEyIEwzLDE0IEwzLDE0IFogTTMsMiBMNSwyIEw1LDAgTDMsMCBMMywyIEwzLDIgWiBNMyw4IEw1LDggTDUsNiBMMyw2IEwzLDggTDMsOCBaIE0xMiwxNCBMMTQsMTQgTDE0LDEyIEwxMiwxMiBMMTIsMTQgTDEyLDE0IFogTTEyLDggTDE0LDggTDE0LDYgTDEyLDYgTDEyLDggTDEyLDggWiBNMTIsMTEgTDE0LDExIEwxNCw5IEwxMiw5IEwxMiwxMSBMMTIsMTEgWiBNMTIsNSBMMTQsNSBMMTQsMyBMMTIsMyBMMTIsNSBMMTIsNSBaIE02LDIgTDgsMiBMOCwwIEw2LDAgTDYsMiBMNiwyIFogTTEyLDAgTDEyLDIgTDE0LDIgTDE0LDAgTDEyLDAgTDEyLDAgWiBNOSwxNCBMMTEsMTQgTDExLDEyIEw5LDEyIEw5LDE0IEw5LDE0IFogTTksOCBMMTEsOCBMMTEsNiBMOSw2IEw5LDggTDksOCBaIE05LDIgTDExLDIgTDExLDAgTDksMCBMOSwyIEw5LDIgWiIgb3BhY2l0eT0iLjU0Ii8+CiAgICA8cG9seWdvbiBwb2ludHM9IjAgMTQgMiAxNCAyIDAgMCAwIi8+CiAgPC9nPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTA4LDM2KSI+CiAgPGcgZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyIDIpIj4KICAgIDxwYXRoIGQ9Ik0zLDggTDUsOCBMNSw2IEwzLDYgTDMsOCBMMyw4IFogTTAsMTQgTDIsMTQgTDIsMTIgTDAsMTIgTDAsMTQgTDAsMTQgWiBNNiwxNCBMOCwxNCBMOCwxMiBMNiwxMiBMNiwxNCBMNiwxNCBaIE02LDExIEw4LDExIEw4LDkgTDYsOSBMNiwxMSBMNiwxMSBaIE0zLDE0IEw1LDE0IEw1LDEyIEwzLDEyIEwzLDE0IEwzLDE0IFogTTAsMTEgTDIsMTEgTDIsOSBMMCw5IEwwLDExIEwwLDExIFogTTYsOCBMOCw4IEw4LDYgTDYsNiBMNiw4IEw2LDggWiBNMCw1IEwyLDUgTDIsMyBMMCwzIEwwLDUgTDAsNSBaIE0wLDggTDIsOCBMMiw2IEwwLDYgTDAsOCBMMCw4IFogTTEyLDggTDE0LDggTDE0LDYgTDEyLDYgTDEyLDggTDEyLDggWiBNMTIsMTEgTDE0LDExIEwxNCw5IEwxMiw5IEwxMiwxMSBMMTIsMTEgWiBNMTIsNSBMMTQsNSBMMTQsMyBMMTIsMyBMMTIsNSBMMTIsNSBaIE02LDUgTDgsNSBMOCwzIEw2LDMgTDYsNSBMNiw1IFogTTksMTQgTDExLDE0IEwxMSwxMiBMOSwxMiBMOSwxNCBMOSwxNCBaIE05LDggTDExLDggTDExLDYgTDksNiBMOSw4IEw5LDggWiBNMTIsMTQgTDE0LDE0IEwxNCwxMiBMMTIsMTIgTDEyLDE0IEwxMiwxNCBaIiBvcGFjaXR5PSIuNTQiLz4KICAgIDxwb2x5Z29uIHBvaW50cz0iMCAwIDAgMiAxNCAyIDE0IDAiLz4KICA8L2c+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMjYsMzYpIj4KICA8ZyBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIgMikiPgogICAgPHBhdGggZD0iTTAsMiBMMiwyIEwyLDAgTDAsMCBMMCwyIEwwLDIgWiBNMywyIEw1LDIgTDUsMCBMMywwIEwzLDIgTDMsMiBaIE0zLDggTDUsOCBMNSw2IEwzLDYgTDMsOCBMMyw4IFogTTMsMTQgTDUsMTQgTDUsMTIgTDMsMTIgTDMsMTQgTDMsMTQgWiBNMCw1IEwyLDUgTDIsMyBMMCwzIEwwLDUgTDAsNSBaIE0wLDggTDIsOCBMMiw2IEwwLDYgTDAsOCBMMCw4IFogTTAsMTQgTDIsMTQgTDIsMTIgTDAsMTIgTDAsMTQgTDAsMTQgWiBNMCwxMSBMMiwxMSBMMiw5IEwwLDkgTDAsMTEgTDAsMTEgWiBNOSw4IEwxMSw4IEwxMSw2IEw5LDYgTDksOCBMOSw4IFogTTYsMTQgTDgsMTQgTDgsMTIgTDYsMTIgTDYsMTQgTDYsMTQgWiBNOSwxNCBMMTEsMTQgTDExLDEyIEw5LDEyIEw5LDE0IEw5LDE0IFogTTYsMiBMOCwyIEw4LDAgTDYsMCBMNiwyIEw2LDIgWiBNOSwyIEwxMSwyIEwxMSwwIEw5LDAgTDksMiBMOSwyIFogTTYsMTEgTDgsMTEgTDgsOSBMNiw5IEw2LDExIEw2LDExIFogTTYsNSBMOCw1IEw4LDMgTDYsMyBMNiw1IEw2LDUgWiBNNiw4IEw4LDggTDgsNiBMNiw2IEw2LDggTDYsOCBaIiBvcGFjaXR5PSIuNTQiLz4KICAgIDxwb2x5Z29uIHBvaW50cz0iMTIgMCAxMiAxNCAxNCAxNCAxNCAwIi8+CiAgPC9nPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTQ0LDM2KSI+CiAgPGcgZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyIDIpIj4KICAgIDxwYXRoIGQ9Ik01LDAgTDMsMCBMMywyIEw1LDIgTDUsMCBMNSwwIFogTTgsNiBMNiw2IEw2LDggTDgsOCBMOCw2IEw4LDYgWiBNOCw5IEw2LDkgTDYsMTEgTDgsMTEgTDgsOSBMOCw5IFogTTExLDYgTDksNiBMOSw4IEwxMSw4IEwxMSw2IEwxMSw2IFogTTUsNiBMMyw2IEwzLDggTDUsOCBMNSw2IEw1LDYgWiBNMTEsMCBMOSwwIEw5LDIgTDExLDIgTDExLDAgTDExLDAgWiBNOCwzIEw2LDMgTDYsNSBMOCw1IEw4LDMgTDgsMyBaIE04LDAgTDYsMCBMNiwyIEw4LDIgTDgsMCBMOCwwIFogTTIsOSBMMCw5IEwwLDExIEwyLDExIEwyLDkgTDIsOSBaIE0xMiwxMSBMMTQsMTEgTDE0LDkgTDEyLDkgTDEyLDExIEwxMiwxMSBaIE0xMiw1IEwxNCw1IEwxNCwzIEwxMiwzIEwxMiw1IEwxMiw1IFogTTEyLDggTDE0LDggTDE0LDYgTDEyLDYgTDEyLDggTDEyLDggWiBNMTIsMCBMMTIsMiBMMTQsMiBMMTQsMCBMMTIsMCBMMTIsMCBaIE0yLDAgTDAsMCBMMCwyIEwyLDIgTDIsMCBMMiwwIFogTTIsMyBMMCwzIEwwLDUgTDIsNSBMMiwzIEwyLDMgWiBNMiw2IEwwLDYgTDAsOCBMMiw4IEwyLDYgTDIsNiBaIiBvcGFjaXR5PSIuNTQiLz4KICAgIDxwb2x5Z29uIHBvaW50cz0iMCAxNCAxNCAxNCAxNCAxMiAwIDEyIi8+CiAgPC9nPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTYyLDM2KSI+PHBhdGggZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNiwxNCBMOCwxNCBMOCwxMiBMNiwxMiBMNiwxNCBMNiwxNCBaIE0zLDggTDUsOCBMNSw2IEwzLDYgTDMsOCBMMyw4IFogTTMsMiBMNSwyIEw1LDAgTDMsMCBMMywyIEwzLDIgWiBNNiwxMSBMOCwxMSBMOCw5IEw2LDkgTDYsMTEgTDYsMTEgWiBNMywxNCBMNSwxNCBMNSwxMiBMMywxMiBMMywxNCBMMywxNCBaIE0wLDUgTDIsNSBMMiwzIEwwLDMgTDAsNSBMMCw1IFogTTAsMTQgTDIsMTQgTDIsMTIgTDAsMTIgTDAsMTQgTDAsMTQgWiBNMCwyIEwyLDIgTDIsMCBMMCwwIEwwLDIgTDAsMiBaIE0wLDggTDIsOCBMMiw2IEwwLDYgTDAsOCBMMCw4IFogTTYsOCBMOCw4IEw4LDYgTDYsNiBMNiw4IEw2LDggWiBNMCwxMSBMMiwxMSBMMiw5IEwwLDkgTDAsMTEgTDAsMTEgWiBNMTIsMTEgTDE0LDExIEwxNCw5IEwxMiw5IEwxMiwxMSBMMTIsMTEgWiBNMTIsMTQgTDE0LDE0IEwxNCwxMiBMMTIsMTIgTDEyLDE0IEwxMiwxNCBaIE0xMiw4IEwxNCw4IEwxNCw2IEwxMiw2IEwxMiw4IEwxMiw4IFogTTEyLDUgTDE0LDUgTDE0LDMgTDEyLDMgTDEyLDUgTDEyLDUgWiBNMTIsMCBMMTIsMiBMMTQsMiBMMTQsMCBMMTIsMCBMMTIsMCBaIE02LDIgTDgsMiBMOCwwIEw2LDAgTDYsMiBMNiwyIFogTTksMiBMMTEsMiBMMTEsMCBMOSwwIEw5LDIgTDksMiBaIE02LDUgTDgsNSBMOCwzIEw2LDMgTDYsNSBMNiw1IFogTTksMTQgTDExLDE0IEwxMSwxMiBMOSwxMiBMOSwxNCBMOSwxNCBaIE05LDggTDExLDggTDExLDYgTDksNiBMOSw4IEw5LDggWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMiAyKSIgb3BhY2l0eT0iLjU0Ii8+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxODAsMzYpIj48cGF0aCBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02LjUsMy42MiBMMCwxMC4xMiBMMCwxMyBMMi44OCwxMyBMOS4zOCw2LjUgTDYuNSwzLjYyIFogTTExLjg1LDQuMDIgQzEyLjA1LDMuODIgMTIuMDUsMy41MSAxMS44NSwzLjMxIEw5LjY4LDEuMTQgQzkuNDgsMC45NCA5LjE3LDAuOTQgOC45NywxLjE0IEw3LjYyLDIuNSBMMTAuNSw1LjM4IEwxMS44NSw0LjAyIEwxMS44NSw0LjAyIFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQpIi8+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxOTgsMzYpIj48cGF0aCBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0wLDAgTDE0LDAgTDE0LDIgTDAsMiBMMCwwIFogTTAsNCBMNiw0IEw2LDYgTDAsNiBMMCw0IFogTTAsOCBMMiw4IEwyLDEwIEwwLDEwIEwwLDggWiBNOCw0IEwxNCw0IEwxNCw2IEw4LDYgTDgsNCBaIE00LDggTDYsOCBMNiwxMCBMNCwxMCBMNCw4IFogTTgsOCBMMTAsOCBMMTAsMTAgTDgsMTAgTDgsOCBaIE0xMiw4IEwxNCw4IEwxNCwxMCBMMTIsMTAgTDEyLDggWiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMiA0KSIvPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjE2LDM2KSI+PHBvbHlnb24gZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBwb2ludHM9Ii0yIDIgMiA2IDYgMiIgdHJhbnNmb3JtPSJyb3RhdGUoOTAgMyAxMCkiLz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIzNCwzNikiPjxwb2x5Z29uIGZpbGw9IiMwMDAwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgcG9pbnRzPSI3LjUzIDEuNTMgNi40NyAuNDcgNCAyLjk0IDEuNTMgLjQ3IC40NyAxLjUzIDIuOTQgNCAuNDcgNi40NyAxLjUzIDcuNTMgNCA1LjA2IDYuNDcgNy41MyA3LjUzIDYuNDcgNS4wNiA0IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1IDUpIi8+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDU0KSI+PHBvbHlnb24gZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBwb2ludHM9IjguNDQgLjQ0IDUgMy44OCAxLjU2IC40NCAuNSAxLjUgNSA2IDkuNSAxLjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQgNikiLz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE4LDU0KSI+PHBvbHlnb24gZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBwb2ludHM9IjUgMCAuNSA0LjUgMS41NiA1LjU2IDUgMi4xMiA4LjQ0IDUuNTYgOS41IDQuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNCA2KSIvPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzYsNTQpIj48cG9seWdvbiBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHBvaW50cz0iOC40NCAuNDQgNSAzLjg4IDEuNTYgLjQ0IC41IDEuNSA1IDYgOS41IDEuNSIgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNCA4KSIvPgo8L2c+CjxnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNTQsNTQpIj48cG9seWdvbiBmaWxsPSIjMDAwMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHBvaW50cz0iNSAwIC41IDQuNSAxLjU2IDUuNTYgNSAyLjEyIDguNDQgNS41NiA5LjUgNC41IiB0cmFuc2Zvcm09InJvdGF0ZSg5MCA0IDgpIi8+CjwvZz4KPGcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3Miw1NCkiPjxwb2x5Z29uIGZpbGw9IiMwMDAwMDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIgcG9pbnRzPSIxMiA1IDMuMTI1IDUgNy4wNiAxLjA2IDYgMCAwIDYgNiAxMiA3LjA2IDEwLjk0IDMuMTI1IDcgMTIgNyIgdHJhbnNmb3JtPSJtYXRyaXgoLTEgMCAwIDEgMTUgMykiLz4KPC9nPgo8ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkwLDU0KSI+PHBvbHlnb24gZmlsbD0iIzAwMDAwMCIgZmlsbC1ydWxlPSJldmVub2RkIiBwb2ludHM9IjEyIDUgMy4xMjUgNSA3LjA2IDEuMDYgNiAwIDAgNiA2IDEyIDcuMDYgMTAuOTQgMy4xMjUgNyAxMiA3IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzIDMpIi8+CjwvZz4KPC9zdmc+Cg==);
+ background-image: url('data:image/svg+xml,');
position: absolute;
width: 262px;
height: 444px;