diff --git a/package-lock.json b/package-lock.json index b3443067..546e70b5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,16 +10,11 @@ "hasInstallScript": true, "license": "MIT", "dependencies": { - "@authorizerdev/authorizer-js": "2.0.0", - "cropperjs": "1.6.1", "form-data": "4.0.0", - "ga-gtag": "1.2.0", - "i18next": "22.4.15", - "i18next-icu": "2.3.0", - "intl-messageformat": "10.5.3", "mailgun.js": "8.2.1" }, "devDependencies": { + "@authorizerdev/authorizer-js": "2.0.0", "@babel/core": "7.23.3", "@biomejs/biome": "^1.5.3", "@graphql-codegen/cli": "^5.0.0", @@ -78,12 +73,17 @@ "babel-preset-solid": "1.8.4", "bootstrap": "5.3.2", "clsx": "2.0.0", + "cropperjs": "1.6.1", "fast-deep-equal": "3.1.3", + "ga-gtag": "1.2.0", "graphql": "16.8.1", "graphql-tag": "2.12.6", "husky": "8.0.3", "hygen": "6.2.11", + "i18next": "22.4.15", "i18next-http-backend": "2.2.0", + "i18next-icu": "2.3.0", + "intl-messageformat": "10.5.3", "javascript-time-ago": "2.5.9", "js-cookie": "3.0.5", "lint-staged": "15.1.0", @@ -334,6 +334,7 @@ }, "node_modules/@authorizerdev/authorizer-js": { "version": "2.0.0", + "dev": true, "license": "MIT", "dependencies": { "cross-fetch": "^3.1.5" @@ -1232,6 +1233,7 @@ }, "node_modules/@babel/runtime": { "version": "7.23.9", + "dev": true, "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" @@ -1454,6 +1456,7 @@ }, "node_modules/@formatjs/ecma402-abstract": { "version": "1.17.2", + "dev": true, "license": "MIT", "dependencies": { "@formatjs/intl-localematcher": "0.4.2", @@ -1462,6 +1465,7 @@ }, "node_modules/@formatjs/fast-memoize": { "version": "2.2.0", + "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.4.0" @@ -1469,6 +1473,7 @@ }, "node_modules/@formatjs/icu-messageformat-parser": { "version": "2.6.2", + "dev": true, "license": "MIT", "dependencies": { "@formatjs/ecma402-abstract": "1.17.2", @@ -1478,6 +1483,7 @@ }, "node_modules/@formatjs/icu-skeleton-parser": { "version": "1.6.2", + "dev": true, "license": "MIT", "dependencies": { "@formatjs/ecma402-abstract": "1.17.2", @@ -1486,6 +1492,7 @@ }, "node_modules/@formatjs/intl-localematcher": { "version": "0.4.2", + "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.4.0" @@ -5117,10 +5124,12 @@ }, "node_modules/cropperjs": { "version": "1.6.1", + "dev": true, "license": "MIT" }, "node_modules/cross-fetch": { "version": "3.1.5", + "dev": true, "license": "MIT", "dependencies": { "node-fetch": "2.6.7" @@ -5854,6 +5863,7 @@ }, "node_modules/ga-gtag": { "version": "1.2.0", + "dev": true, "license": "MIT" }, "node_modules/gensync": { @@ -6289,6 +6299,7 @@ }, "node_modules/i18next": { "version": "22.4.15", + "dev": true, "funding": [ { "type": "individual", @@ -6318,6 +6329,7 @@ }, "node_modules/i18next-icu": { "version": "2.3.0", + "dev": true, "license": "MIT", "peerDependencies": { "intl-messageformat": "^10.3.3" @@ -6503,6 +6515,7 @@ }, "node_modules/intl-messageformat": { "version": "10.5.3", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@formatjs/ecma402-abstract": "1.17.2", @@ -7882,6 +7895,7 @@ }, "node_modules/node-fetch": { "version": "2.6.7", + "dev": true, "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" @@ -8768,6 +8782,7 @@ }, "node_modules/regenerator-runtime": { "version": "0.14.1", + "dev": true, "license": "MIT" }, "node_modules/relative-time-format": { @@ -9628,6 +9643,7 @@ }, "node_modules/tr46": { "version": "0.0.3", + "dev": true, "license": "MIT" }, "node_modules/trim-newlines": { @@ -9648,6 +9664,7 @@ }, "node_modules/tslib": { "version": "2.6.2", + "dev": true, "license": "0BSD" }, "node_modules/type-fest": { @@ -10163,10 +10180,12 @@ }, "node_modules/webidl-conversions": { "version": "3.0.1", + "dev": true, "license": "BSD-2-Clause" }, "node_modules/whatwg-url": { "version": "5.0.0", + "dev": true, "license": "MIT", "dependencies": { "tr46": "~0.0.3", diff --git a/package.json b/package.json index ceba36e1..20321880 100644 --- a/package.json +++ b/package.json @@ -30,16 +30,11 @@ "typecheck:watch": "tsc --noEmit --watch" }, "dependencies": { - "@authorizerdev/authorizer-js": "2.0.0", - "cropperjs": "1.6.1", "form-data": "4.0.0", - "ga-gtag": "1.2.0", - "i18next": "22.4.15", - "i18next-icu": "2.3.0", - "intl-messageformat": "10.5.3", - "mailgun.js": "8.2.1" + "mailgun.js": "10.1.0" }, "devDependencies": { + "@authorizerdev/authorizer-js": "2.0.0", "@babel/core": "7.23.3", "@biomejs/biome": "^1.5.3", "@graphql-codegen/cli": "^5.0.0", @@ -98,12 +93,17 @@ "babel-preset-solid": "1.8.4", "bootstrap": "5.3.2", "clsx": "2.0.0", + "cropperjs": "1.6.1", "fast-deep-equal": "3.1.3", + "ga-gtag": "1.2.0", "graphql": "16.8.1", "graphql-tag": "2.12.6", "husky": "8.0.3", "hygen": "6.2.11", + "i18next": "22.4.15", "i18next-http-backend": "2.2.0", + "i18next-icu": "2.3.0", + "intl-messageformat": "10.5.3", "javascript-time-ago": "2.5.9", "js-cookie": "3.0.5", "lint-staged": "15.1.0", diff --git a/tests/basic-routes.test.js b/tests/basic-routes.test.js deleted file mode 100644 index 589b5ae0..00000000 --- a/tests/basic-routes.test.js +++ /dev/null @@ -1,37 +0,0 @@ -import { chromium } from 'playwright' -;(async () => { - const browser = await chromium.launch() - const context = await browser.newContext() - - // Define the URLs to visit - const pagesToVisit = [ - 'http://localhost:3000/', - 'http://localhost:3000/feed', - 'http://localhost:3000/create', - 'http://localhost:3000/about/donate', - 'http://localhost:3000/authors', - 'http://localhost:3000/topics', - 'http://localhost:3000/inbox', - ] - - // Loop through the pages and visit each one - for (const pageUrl of pagesToVisit) { - const page = await context.newPage() - - // Log a message before visiting the page - console.log(`Visiting page: ${pageUrl}`) - - await page.goto(pageUrl) - - // Add your test assertions here if needed - - // Log a message after visiting the page - console.log(`Finished visiting page: ${pageUrl}`) - - // Close the page before moving to the next one - await page.close() - } - - // Close the browser - await browser.close() -})() diff --git a/vite.config.ts.timestamp-1707359317919-5b880f5d04c49.mjs b/vite.config.ts.timestamp-1707359317919-5b880f5d04c49.mjs new file mode 100644 index 00000000..6d7d317a --- /dev/null +++ b/vite.config.ts.timestamp-1707359317919-5b880f5d04c49.mjs @@ -0,0 +1,105 @@ +// vite.config.ts +import ssrPlugin from "file:///Users/kindus/code/dev.discours.io/webapp/node_modules/vike/dist/esm/node/plugin/index.js"; +import { defineConfig } from "file:///Users/kindus/code/dev.discours.io/webapp/node_modules/vite/dist/node/index.js"; +import mkcert from "file:///Users/kindus/code/dev.discours.io/webapp/node_modules/vite-plugin-mkcert/dist/mkcert.mjs"; +import sassDts from "file:///Users/kindus/code/dev.discours.io/webapp/node_modules/vite-plugin-sass-dts/dist/index.js"; +import solidPlugin from "file:///Users/kindus/code/dev.discours.io/webapp/node_modules/vite-plugin-solid/dist/esm/index.mjs"; +var cssModuleHMR = () => { + return { + enforce: "post", + name: "css-module-hmr", + apply: "serve", + handleHotUpdate(context) { + const { modules } = context; + modules.forEach((module) => { + if (module.id.includes(".module.scss")) { + module.isSelfAccepting = true; + } + }); + } + }; +}; +var PATH_PREFIX = "/src/"; +var getDevCssClassPrefix = (filename) => { + return filename.slice(filename.indexOf(PATH_PREFIX) + PATH_PREFIX.length).replace(".module.scss", "").replace(/[/?\\]/g, "-"); +}; +var devGenerateScopedName = (name, filename, _css) => `${getDevCssClassPrefix(filename)}__${name}`; +var vite_config_default = defineConfig(({ mode, command }) => { + const plugins = [ + solidPlugin({ ssr: true }), + ssrPlugin({ includeAssetsImportedByServer: true }), + sassDts(), + cssModuleHMR() + ]; + if (command === "serve") { + plugins.push(mkcert()); + } + const isDev = mode === "development"; + return { + envPrefix: "PUBLIC_", + plugins, + server: { + https: true, + port: 3e3 + }, + css: { + devSourcemap: isDev, + preprocessorOptions: { + scss: { additionalData: '@import "src/styles/imports";\n' } + }, + modules: { + generateScopedName: isDev ? devGenerateScopedName : "[hash:base64:5]" + } + }, + build: { + rollupOptions: { + external: [] + }, + chunkSizeWarningLimit: 1024, + target: "esnext" + }, + ssr: { + noExternal: [ + "solid-js", + "@nanostores/solid", + "@urql/core", + "wonka", + "solid-popper", + "seroval", + "@solid-primitives/share", + "i18next", + "js-cookie", + "@solid-primitives/memo", + "@solid-primitives/media", + "@solid-primitives/storage", + "@solid-primitives/utils", + "@solid-primitives/rootless", + "solid-tiptap", + "@tiptap/extension-document", + "@tiptap/core", + "@tiptap/pm", + "prosemirror-state", + "prosemirror-model", + "prosemirror-transform", + "prosemirror-commands", + "prosemirror-schema-list", + "@tiptap/extension-text", + "@tiptap/extension-paragraph", + "@tiptap/extension-bold", + "@tiptap/extension-italic", + "@tiptap/extension-blockquote", + "@solid-primitives/upload", + "@tiptap/extension-placeholder", + "prosemirror-view", + "@tiptap/extension-link", + "@tiptap/extension-image", + "@tiptap/extension-character-count", + "clsx" + ] + } + }; +}); +export { + vite_config_default as default +}; +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCIvVXNlcnMva2luZHVzL2NvZGUvZGV2LmRpc2NvdXJzLmlvL3dlYmFwcFwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL2tpbmR1cy9jb2RlL2Rldi5kaXNjb3Vycy5pby93ZWJhcHAvdml0ZS5jb25maWcudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL1VzZXJzL2tpbmR1cy9jb2RlL2Rldi5kaXNjb3Vycy5pby93ZWJhcHAvdml0ZS5jb25maWcudHNcIjtpbXBvcnQgc3NyUGx1Z2luIGZyb20gJ3Zpa2UvcGx1Z2luJ1xuaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSAndml0ZSdcbmltcG9ydCBta2NlcnQgZnJvbSAndml0ZS1wbHVnaW4tbWtjZXJ0J1xuaW1wb3J0IHNhc3NEdHMgZnJvbSAndml0ZS1wbHVnaW4tc2Fzcy1kdHMnXG5pbXBvcnQgc29saWRQbHVnaW4gZnJvbSAndml0ZS1wbHVnaW4tc29saWQnXG5cbmNvbnN0IGNzc01vZHVsZUhNUiA9ICgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBlbmZvcmNlOiAncG9zdCcsXG4gICAgbmFtZTogJ2Nzcy1tb2R1bGUtaG1yJyxcbiAgICBhcHBseTogJ3NlcnZlJyxcbiAgICBoYW5kbGVIb3RVcGRhdGUoY29udGV4dCkge1xuICAgICAgY29uc3QgeyBtb2R1bGVzIH0gPSBjb250ZXh0XG5cbiAgICAgIG1vZHVsZXMuZm9yRWFjaCgobW9kdWxlKSA9PiB7XG4gICAgICAgIGlmIChtb2R1bGUuaWQuaW5jbHVkZXMoJy5tb2R1bGUuc2NzcycpKSB7XG4gICAgICAgICAgbW9kdWxlLmlzU2VsZkFjY2VwdGluZyA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuICB9XG59XG5cbmNvbnN0IFBBVEhfUFJFRklYID0gJy9zcmMvJ1xuXG5jb25zdCBnZXREZXZDc3NDbGFzc1ByZWZpeCA9IChmaWxlbmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIGZpbGVuYW1lXG4gICAgLnNsaWNlKGZpbGVuYW1lLmluZGV4T2YoUEFUSF9QUkVGSVgpICsgUEFUSF9QUkVGSVgubGVuZ3RoKVxuICAgIC5yZXBsYWNlKCcubW9kdWxlLnNjc3MnLCAnJylcbiAgICAucmVwbGFjZSgvWy8/XFxcXF0vZywgJy0nKVxufVxuXG5jb25zdCBkZXZHZW5lcmF0ZVNjb3BlZE5hbWUgPSAobmFtZTogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nLCBfY3NzOiBzdHJpbmcpID0+XG4gIGAke2dldERldkNzc0NsYXNzUHJlZml4KGZpbGVuYW1lKX1fXyR7bmFtZX1gXG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbmZpZygoeyBtb2RlLCBjb21tYW5kIH0pID0+IHtcbiAgY29uc3QgcGx1Z2lucyA9IFtcbiAgICBzb2xpZFBsdWdpbih7IHNzcjogdHJ1ZSB9KSxcbiAgICBzc3JQbHVnaW4oeyBpbmNsdWRlQXNzZXRzSW1wb3J0ZWRCeVNlcnZlcjogdHJ1ZSB9KSxcbiAgICBzYXNzRHRzKCksXG4gICAgY3NzTW9kdWxlSE1SKCksXG4gIF1cblxuICBpZiAoY29tbWFuZCA9PT0gJ3NlcnZlJykge1xuICAgIHBsdWdpbnMucHVzaChta2NlcnQoKSlcbiAgfVxuXG4gIGNvbnN0IGlzRGV2ID0gbW9kZSA9PT0gJ2RldmVsb3BtZW50J1xuXG4gIHJldHVybiB7XG4gICAgZW52UHJlZml4OiAnUFVCTElDXycsXG4gICAgcGx1Z2lucyxcbiAgICBzZXJ2ZXI6IHtcbiAgICAgIGh0dHBzOiB0cnVlLFxuICAgICAgcG9ydDogMzAwMCxcbiAgICB9LFxuICAgIGNzczoge1xuICAgICAgZGV2U291cmNlbWFwOiBpc0RldixcbiAgICAgIHByZXByb2Nlc3Nvck9wdGlvbnM6IHtcbiAgICAgICAgc2NzczogeyBhZGRpdGlvbmFsRGF0YTogJ0BpbXBvcnQgXCJzcmMvc3R5bGVzL2ltcG9ydHNcIjtcXG4nIH0sXG4gICAgICB9LFxuICAgICAgbW9kdWxlczoge1xuICAgICAgICBnZW5lcmF0ZVNjb3BlZE5hbWU6IGlzRGV2ID8gZGV2R2VuZXJhdGVTY29wZWROYW1lIDogJ1toYXNoOmJhc2U2NDo1XScsXG4gICAgICB9LFxuICAgIH0sXG4gICAgYnVpbGQ6IHtcbiAgICAgIHJvbGx1cE9wdGlvbnM6IHtcbiAgICAgICAgZXh0ZXJuYWw6IFtdLFxuICAgICAgfSxcbiAgICAgIGNodW5rU2l6ZVdhcm5pbmdMaW1pdDogMTAyNCxcbiAgICAgIHRhcmdldDogJ2VzbmV4dCcsXG4gICAgfSxcbiAgICBzc3I6IHtcbiAgICAgIG5vRXh0ZXJuYWw6IFtcbiAgICAgICAgJ3NvbGlkLWpzJyxcbiAgICAgICAgJ0BuYW5vc3RvcmVzL3NvbGlkJyxcbiAgICAgICAgJ0B1cnFsL2NvcmUnLFxuICAgICAgICAnd29ua2EnLFxuICAgICAgICAnc29saWQtcG9wcGVyJyxcbiAgICAgICAgJ3Nlcm92YWwnLFxuICAgICAgICAnQHNvbGlkLXByaW1pdGl2ZXMvc2hhcmUnLFxuICAgICAgICAnaTE4bmV4dCcsXG4gICAgICAgICdqcy1jb29raWUnLFxuICAgICAgICAnQHNvbGlkLXByaW1pdGl2ZXMvbWVtbycsXG4gICAgICAgICdAc29saWQtcHJpbWl0aXZlcy9tZWRpYScsXG4gICAgICAgICdAc29saWQtcHJpbWl0aXZlcy9zdG9yYWdlJyxcbiAgICAgICAgJ0Bzb2xpZC1wcmltaXRpdmVzL3V0aWxzJyxcbiAgICAgICAgJ0Bzb2xpZC1wcmltaXRpdmVzL3Jvb3RsZXNzJyxcbiAgICAgICAgJ3NvbGlkLXRpcHRhcCcsXG4gICAgICAgICdAdGlwdGFwL2V4dGVuc2lvbi1kb2N1bWVudCcsXG4gICAgICAgICdAdGlwdGFwL2NvcmUnLFxuICAgICAgICAnQHRpcHRhcC9wbScsXG4gICAgICAgICdwcm9zZW1pcnJvci1zdGF0ZScsXG4gICAgICAgICdwcm9zZW1pcnJvci1tb2RlbCcsXG4gICAgICAgICdwcm9zZW1pcnJvci10cmFuc2Zvcm0nLFxuICAgICAgICAncHJvc2VtaXJyb3ItY29tbWFuZHMnLFxuICAgICAgICAncHJvc2VtaXJyb3Itc2NoZW1hLWxpc3QnLFxuICAgICAgICAnQHRpcHRhcC9leHRlbnNpb24tdGV4dCcsXG4gICAgICAgICdAdGlwdGFwL2V4dGVuc2lvbi1wYXJhZ3JhcGgnLFxuICAgICAgICAnQHRpcHRhcC9leHRlbnNpb24tYm9sZCcsXG4gICAgICAgICdAdGlwdGFwL2V4dGVuc2lvbi1pdGFsaWMnLFxuICAgICAgICAnQHRpcHRhcC9leHRlbnNpb24tYmxvY2txdW90ZScsXG4gICAgICAgICdAc29saWQtcHJpbWl0aXZlcy91cGxvYWQnLFxuICAgICAgICAnQHRpcHRhcC9leHRlbnNpb24tcGxhY2Vob2xkZXInLFxuICAgICAgICAncHJvc2VtaXJyb3ItdmlldycsXG4gICAgICAgICdAdGlwdGFwL2V4dGVuc2lvbi1saW5rJyxcbiAgICAgICAgJ0B0aXB0YXAvZXh0ZW5zaW9uLWltYWdlJyxcbiAgICAgICAgJ0B0aXB0YXAvZXh0ZW5zaW9uLWNoYXJhY3Rlci1jb3VudCcsXG4gICAgICAgICdjbHN4JyxcbiAgICAgIF0sXG4gICAgfSxcbiAgfVxufSlcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBNlMsT0FBTyxlQUFlO0FBQ25VLFNBQVMsb0JBQW9CO0FBQzdCLE9BQU8sWUFBWTtBQUNuQixPQUFPLGFBQWE7QUFDcEIsT0FBTyxpQkFBaUI7QUFFeEIsSUFBTSxlQUFlLE1BQU07QUFDekIsU0FBTztBQUFBLElBQ0wsU0FBUztBQUFBLElBQ1QsTUFBTTtBQUFBLElBQ04sT0FBTztBQUFBLElBQ1AsZ0JBQWdCLFNBQVM7QUFDdkIsWUFBTSxFQUFFLFFBQVEsSUFBSTtBQUVwQixjQUFRLFFBQVEsQ0FBQyxXQUFXO0FBQzFCLFlBQUksT0FBTyxHQUFHLFNBQVMsY0FBYyxHQUFHO0FBQ3RDLGlCQUFPLGtCQUFrQjtBQUFBLFFBQzNCO0FBQUEsTUFDRixDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFDRjtBQUVBLElBQU0sY0FBYztBQUVwQixJQUFNLHVCQUF1QixDQUFDLGFBQTZCO0FBQ3pELFNBQU8sU0FDSixNQUFNLFNBQVMsUUFBUSxXQUFXLElBQUksWUFBWSxNQUFNLEVBQ3hELFFBQVEsZ0JBQWdCLEVBQUUsRUFDMUIsUUFBUSxXQUFXLEdBQUc7QUFDM0I7QUFFQSxJQUFNLHdCQUF3QixDQUFDLE1BQWMsVUFBa0IsU0FDN0QsR0FBRyxxQkFBcUIsUUFBUSxDQUFDLEtBQUssSUFBSTtBQUU1QyxJQUFPLHNCQUFRLGFBQWEsQ0FBQyxFQUFFLE1BQU0sUUFBUSxNQUFNO0FBQ2pELFFBQU0sVUFBVTtBQUFBLElBQ2QsWUFBWSxFQUFFLEtBQUssS0FBSyxDQUFDO0FBQUEsSUFDekIsVUFBVSxFQUFFLCtCQUErQixLQUFLLENBQUM7QUFBQSxJQUNqRCxRQUFRO0FBQUEsSUFDUixhQUFhO0FBQUEsRUFDZjtBQUVBLE1BQUksWUFBWSxTQUFTO0FBQ3ZCLFlBQVEsS0FBSyxPQUFPLENBQUM7QUFBQSxFQUN2QjtBQUVBLFFBQU0sUUFBUSxTQUFTO0FBRXZCLFNBQU87QUFBQSxJQUNMLFdBQVc7QUFBQSxJQUNYO0FBQUEsSUFDQSxRQUFRO0FBQUEsTUFDTixPQUFPO0FBQUEsTUFDUCxNQUFNO0FBQUEsSUFDUjtBQUFBLElBQ0EsS0FBSztBQUFBLE1BQ0gsY0FBYztBQUFBLE1BQ2QscUJBQXFCO0FBQUEsUUFDbkIsTUFBTSxFQUFFLGdCQUFnQixrQ0FBa0M7QUFBQSxNQUM1RDtBQUFBLE1BQ0EsU0FBUztBQUFBLFFBQ1Asb0JBQW9CLFFBQVEsd0JBQXdCO0FBQUEsTUFDdEQ7QUFBQSxJQUNGO0FBQUEsSUFDQSxPQUFPO0FBQUEsTUFDTCxlQUFlO0FBQUEsUUFDYixVQUFVLENBQUM7QUFBQSxNQUNiO0FBQUEsTUFDQSx1QkFBdUI7QUFBQSxNQUN2QixRQUFRO0FBQUEsSUFDVjtBQUFBLElBQ0EsS0FBSztBQUFBLE1BQ0gsWUFBWTtBQUFBLFFBQ1Y7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0YsQ0FBQzsiLAogICJuYW1lcyI6IFtdCn0K