From fbd0150f41dc3d3c769be3816781d3d83cc1d734 Mon Sep 17 00:00:00 2001 From: AxeRicin Date: Wed, 29 Nov 2023 15:27:50 +0300 Subject: [PATCH] Add LoginPage and NotfoundPage --- frontend/.eslintrc.yml | 2 + frontend/package-lock.json | 213 ++++++++++++++++++++++++++- frontend/package.json | 8 +- frontend/public/favicon.ico | Bin 3870 -> 0 bytes frontend/public/index.html | 37 +---- frontend/public/logo192.png | Bin 5347 -> 0 bytes frontend/public/logo512.png | Bin 9664 -> 0 bytes frontend/public/manifest.json | 25 ---- frontend/public/robots.txt | 3 - frontend/src/App.css | 38 ----- frontend/src/App.js | 25 ---- frontend/src/App.test.js | 8 - frontend/src/Components/App.js | 23 +++ frontend/src/Components/Layout.js | 25 ++++ frontend/src/Components/LoginForm.js | 92 ++++++++++++ frontend/src/assets/application.scss | 2 + frontend/src/assets/avatar.jpg | Bin 0 -> 8362 bytes frontend/src/assets/avatar_1.jpg | Bin 0 -> 10593 bytes frontend/src/assets/notFound.png | Bin 0 -> 45685 bytes frontend/src/hoc/AuthProvider.js | 29 ++++ frontend/src/hook/useAuth.js | 4 + frontend/src/index.css | 13 -- frontend/src/index.js | 21 +-- frontend/src/logo.svg | 1 - frontend/src/page/LoginPage.js | 29 ++++ frontend/src/page/NotfoundPage.js | 21 +++ frontend/src/reportWebVitals.js | 13 -- frontend/src/routes.js | 5 + frontend/src/setupTests.js | 5 - package-lock.json | 67 +++++---- 30 files changed, 499 insertions(+), 210 deletions(-) delete mode 100644 frontend/public/favicon.ico delete mode 100644 frontend/public/logo192.png delete mode 100644 frontend/public/logo512.png delete mode 100644 frontend/public/manifest.json delete mode 100644 frontend/public/robots.txt delete mode 100644 frontend/src/App.css delete mode 100644 frontend/src/App.js delete mode 100644 frontend/src/App.test.js create mode 100644 frontend/src/Components/App.js create mode 100644 frontend/src/Components/Layout.js create mode 100644 frontend/src/Components/LoginForm.js create mode 100644 frontend/src/assets/application.scss create mode 100644 frontend/src/assets/avatar.jpg create mode 100644 frontend/src/assets/avatar_1.jpg create mode 100644 frontend/src/assets/notFound.png create mode 100644 frontend/src/hoc/AuthProvider.js create mode 100644 frontend/src/hook/useAuth.js delete mode 100644 frontend/src/index.css delete mode 100644 frontend/src/logo.svg create mode 100644 frontend/src/page/LoginPage.js create mode 100644 frontend/src/page/NotfoundPage.js delete mode 100644 frontend/src/reportWebVitals.js create mode 100644 frontend/src/routes.js delete mode 100644 frontend/src/setupTests.js diff --git a/frontend/.eslintrc.yml b/frontend/.eslintrc.yml index cf98365..14b0cef 100644 --- a/frontend/.eslintrc.yml +++ b/frontend/.eslintrc.yml @@ -27,6 +27,7 @@ rules: functional/no-conditional-statement: 0 functional/no-conditional-statements: 0 functional/no-expression-statement: 0 + functional/no-expression-statements: 0 functional/immutable-data: 0 functional/functional-parameters: 0 functional/no-try-statement: 0 @@ -37,3 +38,4 @@ rules: [2, { "namedComponents": "arrow-function" }] testing-library/no-debug: 0 react/jsx-filename-extension: [1, { "extensions": [".js", ".jsx"] }] + jsx-a11y/label-has-associated-control: 0 diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 519d241..fd644b5 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -11,10 +11,16 @@ "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", + "axios": "^1.6.2", + "bootstrap": "^5.3.2", + "classnames": "^2.3.2", + "formik": "^2.4.5", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-router-dom": "^6.20.0", "react-scripts": "5.0.1", - "web-vitals": "^2.1.4" + "web-vitals": "^2.1.4", + "yup": "^1.3.2" }, "devDependencies": { "eslint": "^8.53.0", @@ -3270,6 +3276,24 @@ } } }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@remix-run/router": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.13.0.tgz", + "integrity": "sha512-5dMOnVnefRsl4uRnAdoWjtVTdh8e6aZqgM4puy9nmEADH72ck+uXwzpJLEKE9Q6F8ZljNewLgmTfkxUrBdv4WA==", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -4035,6 +4059,15 @@ "@types/node": "*" } }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", + "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==", + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, "node_modules/@types/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", @@ -5330,6 +5363,29 @@ "node": ">=4" } }, + "node_modules/axios": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", + "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/axobject-query": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", @@ -5735,6 +5791,24 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, + "node_modules/bootstrap": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.2.tgz", + "integrity": "sha512-D32nmNWiQHo94BKHLmOrdjlL05q1c8oxbtBphQFb9Z5to6eGRDCm0QgeaZ4zFBHzfg2++rqa2JkqCcxDy0sH0g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -6000,6 +6074,11 @@ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==" }, + "node_modules/classnames": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", + "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" + }, "node_modules/clean-css": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", @@ -8746,6 +8825,38 @@ "node": ">= 6" } }, + "node_modules/formik": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/formik/-/formik-2.4.5.tgz", + "integrity": "sha512-Gxlht0TD3vVdzMDHwkiNZqJ7Mvg77xQNfmBRrNtvzcHZs72TJppSTDKHpImCMJZwcWPBJ8jSQQ95GJzXFf1nAQ==", + "funding": [ + { + "type": "individual", + "url": "https://opencollective.com/formik" + } + ], + "dependencies": { + "@types/hoist-non-react-statics": "^3.3.1", + "deepmerge": "^2.1.1", + "hoist-non-react-statics": "^3.3.0", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "react-fast-compare": "^2.0.1", + "tiny-warning": "^1.0.2", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/formik/node_modules/deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -9150,6 +9261,19 @@ "he": "bin/he" } }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, "node_modules/hoopy": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", @@ -12492,6 +12616,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -14759,6 +14888,11 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "node_modules/property-expr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz", + "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==" + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -14779,6 +14913,11 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", @@ -15062,6 +15201,11 @@ "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" }, + "node_modules/react-fast-compare": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", + "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==" + }, "node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -15075,6 +15219,36 @@ "node": ">=0.10.0" } }, + "node_modules/react-router": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.20.0.tgz", + "integrity": "sha512-pVvzsSsgUxxtuNfTHC4IxjATs10UaAtvLGVSA1tbUE4GDaOSU1Esu2xF5nWLz7KPiMuW8BJWuPFdlGYJ7/rW0w==", + "dependencies": { + "@remix-run/router": "1.13.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.20.0.tgz", + "integrity": "sha512-CbcKjEyiSVpA6UtCHOIYLUYn/UJfwzp55va4yEfpk7JBN3GPqWfHrdLkAvNCcpXr8QoihcDMuk0dzWZxtlB/mQ==", + "dependencies": { + "@remix-run/router": "1.13.0", + "react-router": "6.20.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, "node_modules/react-scripts": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", @@ -16821,6 +16995,16 @@ "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, + "node_modules/tiny-case": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz", + "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==" + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -16853,6 +17037,11 @@ "node": ">=0.6" } }, + "node_modules/toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==" + }, "node_modules/tough-cookie": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", @@ -18267,6 +18456,28 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/yup": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/yup/-/yup-1.3.2.tgz", + "integrity": "sha512-6KCM971iQtJ+/KUaHdrhVr2LDkfhBtFPRnsG1P8F4q3uUVQ2RfEM9xekpha9aA4GXWJevjM10eDcPQ1FfWlmaQ==", + "dependencies": { + "property-expr": "^2.0.5", + "tiny-case": "^1.0.3", + "toposort": "^2.0.2", + "type-fest": "^2.19.0" + } + }, + "node_modules/yup/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } diff --git a/frontend/package.json b/frontend/package.json index 44f68f3..bf1321d 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -7,10 +7,16 @@ "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", + "axios": "^1.6.2", + "bootstrap": "^5.3.2", + "classnames": "^2.3.2", + "formik": "^2.4.5", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-router-dom": "^6.20.0", "react-scripts": "5.0.1", - "web-vitals": "^2.1.4" + "web-vitals": "^2.1.4", + "yup": "^1.3.2" }, "scripts": { "start": "react-scripts start", diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico deleted file mode 100644 index a11777cc471a4344702741ab1c8a588998b1311a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3870 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 baj7?x%VD!5Cxk2YbYLNVeiXvvpMCWYo=by@ diff --git a/frontend/public/index.html b/frontend/public/index.html index aa069f2..3371499 100644 --- a/frontend/public/index.html +++ b/frontend/public/index.html @@ -1,43 +1,18 @@ - + - - - - - React App - - -
- + +
+
+
- + \ No newline at end of file diff --git a/frontend/public/logo192.png b/frontend/public/logo192.png deleted file mode 100644 index fc44b0a3796c0e0a64c3d858ca038bd4570465d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5347 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 b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN diff --git a/frontend/public/manifest.json b/frontend/public/manifest.json deleted file mode 100644 index 080d6c7..0000000 --- a/frontend/public/manifest.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "short_name": "React App", - "name": "Create React App Sample", - "icons": [ - { - "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - }, - { - "src": "logo192.png", - "type": "image/png", - "sizes": "192x192" - }, - { - "src": "logo512.png", - "type": "image/png", - "sizes": "512x512" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/frontend/public/robots.txt b/frontend/public/robots.txt deleted file mode 100644 index e9e57dc..0000000 --- a/frontend/public/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# https://www.robotstxt.org/robotstxt.html -User-agent: * -Disallow: diff --git a/frontend/src/App.css b/frontend/src/App.css deleted file mode 100644 index 74b5e05..0000000 --- a/frontend/src/App.css +++ /dev/null @@ -1,38 +0,0 @@ -.App { - text-align: center; -} - -.App-logo { - height: 40vmin; - pointer-events: none; -} - -@media (prefers-reduced-motion: no-preference) { - .App-logo { - animation: App-logo-spin infinite 20s linear; - } -} - -.App-header { - background-color: #282c34; - min-height: 100vh; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-size: calc(10px + 2vmin); - color: white; -} - -.App-link { - color: #61dafb; -} - -@keyframes App-logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} diff --git a/frontend/src/App.js b/frontend/src/App.js deleted file mode 100644 index 3784575..0000000 --- a/frontend/src/App.js +++ /dev/null @@ -1,25 +0,0 @@ -import logo from './logo.svg'; -import './App.css'; - -function App() { - return ( - - ); -} - -export default App; diff --git a/frontend/src/App.test.js b/frontend/src/App.test.js deleted file mode 100644 index 1f03afe..0000000 --- a/frontend/src/App.test.js +++ /dev/null @@ -1,8 +0,0 @@ -import { render, screen } from '@testing-library/react'; -import App from './App'; - -test('renders learn react link', () => { - render(); - const linkElement = screen.getByText(/learn react/i); - expect(linkElement).toBeInTheDocument(); -}); diff --git a/frontend/src/Components/App.js b/frontend/src/Components/App.js new file mode 100644 index 0000000..0420327 --- /dev/null +++ b/frontend/src/Components/App.js @@ -0,0 +1,23 @@ +import { BrowserRouter, Routes, Route } from 'react-router-dom'; +import getRoutes from '../routes.js'; +import Layout from './Layout.js'; +import NotfoundPage from '../page/NotfoundPage.js'; +import LoginPage from '../page/LoginPage.js'; +import AuthProvider from '../hoc/AuthProvider.js'; + +const App = () => ( +
+ + + + }> + } /> + } /> + + + + +
+); + +export default App; diff --git a/frontend/src/Components/Layout.js b/frontend/src/Components/Layout.js new file mode 100644 index 0000000..73948b0 --- /dev/null +++ b/frontend/src/Components/Layout.js @@ -0,0 +1,25 @@ +import { + Link, Outlet, useLocation, Navigate, +} from 'react-router-dom'; +import getRoutes from '../routes'; +import useAuth from '../hook/useAuth'; + +const Layout = () => { + const location = useLocation(); + const { userToken } = useAuth(); + if (location.pathname === getRoutes.main() && !userToken) { + return ; + } + return ( + <> + + + + ); +}; + +export default Layout; diff --git a/frontend/src/Components/LoginForm.js b/frontend/src/Components/LoginForm.js new file mode 100644 index 0000000..c2eb979 --- /dev/null +++ b/frontend/src/Components/LoginForm.js @@ -0,0 +1,92 @@ +import { useFormik } from 'formik'; +import axios from 'axios'; +import cn from 'classnames'; +import { + useContext, useEffect, useRef, useState, +} from 'react'; +import { useLocation, useNavigate } from 'react-router-dom'; +import { AuthContext } from '../hoc/AuthProvider'; +import getRoutes from '../routes.js'; + +const LoginForm = () => { + const [authFailed, setAuthFailed] = useState(false); + const { signIn } = useContext(AuthContext); + const inputRef = useRef(); + const location = useLocation(); + const navigate = useNavigate(); + + const fromPage = location.state?.from?.pathname ?? getRoutes.main(); + + const formik = useFormik({ + initialValues: { + username: '', + password: '', + }, + onSubmit: async (values) => { + try { + setAuthFailed(false); + const response = (await axios.post('/api/v1/login', values)); + console.log(response); + const { token } = response.data; + signIn(token, () => navigate(fromPage, { replace: true })); + } catch (err) { + if (err.isAxiosError && err.response.status === 401) { + setAuthFailed(true); + inputRef.current.select(); + } + } + }, + }); + + useEffect(() => { + inputRef.current.select(); + }, []); + + return ( +
+

Войти

+
+ + +
+
+ + + {authFailed &&
Неверные имя пользователя или пароль
} +
+ + +
+ ); +}; + +export default LoginForm; diff --git a/frontend/src/assets/application.scss b/frontend/src/assets/application.scss new file mode 100644 index 0000000..27af558 --- /dev/null +++ b/frontend/src/assets/application.scss @@ -0,0 +1,2 @@ +@import '~bootstrap/scss/bootstrap'; +@import '~react-toastify/dist/ReactToastify.css'; diff --git a/frontend/src/assets/avatar.jpg b/frontend/src/assets/avatar.jpg new file mode 100644 index 0000000000000000000000000000000000000000..902ff57396c385434c3946d09580132b5796b5a2 GIT binary patch literal 8362 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 F{|A*VkPrX> literal 0 HcmV?d00001 diff --git a/frontend/src/assets/avatar_1.jpg b/frontend/src/assets/avatar_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7e3e653031ac6a282cc94665d7d799c90e648ae9 GIT binary patch literal 10593 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 literal 0 HcmV?d00001 diff --git a/frontend/src/assets/notFound.png b/frontend/src/assets/notFound.png new file mode 100644 index 0000000000000000000000000000000000000000..0ff70c71a0967039de119a68c8da238204ef8380 GIT binary patch literal 45685 zcma&N19WE1wl4g}>9}J%>Daby+vwP~ZQHidanc>zPRBMn{@?!gzUS<5{&UB;tHv6u zG;5Zt<}>GtP>>Uchrxyc008ik5+X_f07yLWm4$``#?TRP@&W*GLKecp3X;OYgbI#! zW){|_0Dwe9iaL~r@+f+)c4B;dFtUJv)Uhm50(`e<6~&RxWMbv?IonZ{)MV|#}fbRr`0Sn z^xZRna2BcT%k6Uq5&-~Ew<}!?0YEzF`neApfjbD}T+AR4jxpvCimX2BkcoVyxH2^C zNN5Wp5Hq$X$qdNX59Mi!&jVpS?ndH{f*@uDV9SL2I62*cBb5nR!`hG{jX!8w@E@DJ z$uiq0Bn^*a4vlqCL~7+z=qCx`K4{(uKFWdX;fs)&1gJl8*bT}9fgcDqV3{4 zXqli6ts(g#eL;OhDoU2o{2n-m&$@f$WH9BAKQslZXTUKeh6EMmL`HvG&A9Q zV}%27k)YEBAg!=Rz%&IGmgZ-`u9A8C{h^8p!Jq?*BC#+NijThzTH#WF`U#POKL_oB zqIL@@KtI<7Ro|XM&!KgPM1Eb}`7+c&h`ZnCm0^_ZKBG_%-*snjFzD`Nkn;5D zw_8pud3==dbRkp=*zR$;l9R^%(pu*mXd7 zz(wfW?7z;sRGvWAbbGHCCq!h1OM?Vd?T*v z#%(o&-`vMKoUc1J6?Y>u78xSZYm$v0zGPe35BSOvr*~uDuhDP!?^$iAUi;}{KUSCv>O^=0Fqr`Xr%RpH-oPQyQb+wF{wF=t%q zoNZjZiLR;>W)u5~gURKZRH`H=X!e;5(g((mqTS_$GU{gQ>Hy;X^porA*cl_QAPbjY zaJ!YAAuvD!z8EKpH_Vil{I{Y?RDTJ-xn4;TKV zz_$X?V{hj#S^;WB+_Rqdq@G{9V_ggBXZYX@PSf$tLOG3SqJu;YDK)srf0`MQX>h8= zEE>vQbL#)(YQR4yksHF|KyeGE=0KJ2d;UY}P2Pj4A7wXuc7y&#^#Qp0+57c7I7uK_ ze^eh?G?57sIZEW0gW#Irpx}9XdY7+TUn4|#3*l$ME`ORBp*vtZFgoBlu-||;1;bWG(tgES>bOQQ9<4M+?>l^Z+6jW_k(!Z3RuUM>D+n~RfC>BSqIj@yeG&-MMp;_S} z(Ing?A639AL@h-7LAbv?jO)dhxuL)go`fZ)5-m3mMjLK4ENam~G~K zg5+ZD+|H%RRl@bddCl3=rNu?p1;wT8SnU*l@nT`{zWSlvlhafB;qhd1=9Oj09oj40 zex#7dMYtBuqmEx?TVKCizpz*Pv-9H{SgByVU~9i)5M+>7XnR4oVf1g4!H3W?c(2e? zxCi_(0xc%z?U{A4@`P^1>RFbeNwFF+pI_v^h<+jOvHmKH_L8}md6R9FQOm?-K4CLW zf60uLQP0F@_nBHSZOq`DfH8w@TAmo8S&%Vn9j%@`Z|aEg2z=JL+dO=tp+KjJa*j$t zpG5CYEln+=Ez@4o+G-`%Zm4FeQPa+8@wBrs&N1ok>+FBYi0Oe}E*&XdI;^FgT$*-G zv}w6u<@0t5Z1UuciBy`j`n&FFPm~cvW*LbK$5U(UzZ9^@gVX1GJHNJ@vYq0b($2n$p27dhW^@@|`n68?T=x%M3f;2U zoET(WHfy89KD9cOdcm3Ja+WPz+pI0@M&@Qur&qi5=Gn#%UK(B{-bx-W4X*0%OGZna z@`2|5M>NwUxdh!C-7sB`9`6Si$2k|>gRiR;S&9RS+G4!7j8DIxt#426ODg_OXsEfbW&w6;!f&Dku|&T_hE;y?MBshp=6$rrC9yTyh;4Vf z0lAUhyCPj7A3@GUVMQJ$TO#d|hmoO@KE-ABo``0|NP@o$zg`?4E(QWCOKn+Y!=7(c5HA4(kNE9X3)aX&0S zU;}y$O7gXjNoY{`WS=DIrTtQWCp8ckanI8?@id7KeXT+39)p=&i+|wbrt;Eu^^;SY zy3}deSlAFYvTZQ476 zkNSeHhVGl5&EfHhT0^-@S)+VWMwj{0OwoSaX7PvRqxtZ}Z2m~bk0FTHcwWZDY;EFD z6TRth`ZN=d$?Fw&Ec=|ZciJUao9*eMtJp*KF6L-D_wzU{Uf(k68pW#x``rKu6MGHu!99=_=6qPABz&N1FB-Sqq+{p8Qv$UFU1dfDAT z@2!95yY$fsrUq4sz=V*xK=Pn`=7qzA!-bQCvyK>oXK8zD%jLdua@|T|CQcQ1im&S# z?P&ec@UbU4{3<6Qcb`4M@m%gx`2C(=LF zf7Hot5A<$cOkZ53T^IBGtOGz&XXYaGo!J0p5+x zF6wdkMs%5{O{ney!Qb`?8g}a)eWF-54-_g=O*JIVWMu(VKtD790t6WV2K0dd9RLIy z0P&9>0FVN~`7gf`2*tnifC2zv769;n=g|Uw|2{y004QJx8Tbb0gZ`h~ zAo2NN|K*njrU3+%g(W3{Uu9!QQ&U@~?{>~zXA}Lvh%fdMnoa-!I@#YBL{f?L8UO%Y zwouV<){vFqGPbj!Gc>U?GNp63vHx2RfXAH+=(RC*HY9Ynv9@*Ma_1%fCkGeM|2LYR znDC!0&Q`p{8nOz6!gh|Pglu#SbPU9NFocAJJdP%2TuLHh|0V~9c!|F|JKJ;7)4RF3 z(YZ0x**TiiGjeir(lap8GcnNubI>|@*g6}!)7mhKPj?u&aSp<6~oC;Q5Em|1aggEBY@=RVPzNVLKZjp)=oqkJZ14 z|1KCX{A-^56APSZ zd@wxp|21j(U>^8!4gdfFfTW0^iaW@;E|h_a>JnelmLw=qFm~n~cmfq$rPaFXY>R>Z za;uS>%Y}=}h0SIQ4O{)wN01bXAb5%T2_EQ4_s6!Ixve`E`6y{dYKE8L?N*oDHtkUl z=Qi&_t`#*cbzK5Lnyq>G7eBrn>v4sX`CyjWaf1Ck5c~>+gc}F&&8MMhqsw*z7FJgHl)1!4HY8_ zgMZu%F$^Za;_LIo;J>=3Ksq2_(NGcZ7;RZUS-UFkanNfQ9z)u7Fh#nSpc4aGwel(P z6jJ@gswQ;i#rn+cJsKs&nQ`i>gi0uF&^$Y@Ew$$Atg&WV^RnT>yLzj$+C^j9rDMs8 zXIXN&td6sXd%377%h*7P@H>E%Vbn^?lwzme#WJ)aE|US?$E~LtW?vpU^_pEBHMg#M)>^r`$Zj(a_m%o98bUn&NniR`rGaGw8*x69 z9{TSv8$>h=b^Y*gGo1+KPRz(0X$dt>1pOJz>~FX=TO7cbwE|W=t4Y+EUuN=8{VCo3 zX)Yd}{G~jfN`2+^Z_<9sKMDjCl={#VAWX%DyObdXgx(++HrY`bfbKgTkQYmu;~}Ro z2+#!}mHC6jBl&^IJi$Z20bQmv2pHjHNw&w7LLbl(4pAC()&H9w8XRVU<1H%Xrh93* zo$r&urm!u-Rj~CWN#Ixpx}_f=0S(`JQduC7ui)=5m_6go&%+}$Fo*~9bqBJbi0_X9 z0W^_!?tzNBy0ofl3fGY`%{&06V*lL)F!aj8#tIxvIEazthqukF7)Mq4mdHL05<^2n zWGt+Tbe;^}078C#{m7`OlFCLQDyk}zr(E7feycncbv0yo73JqP>hIynX(`gKajx&MqrFsR8!GBkxnaM&t1it1{&RT_ z*JJYW@iEsEE9Sw$0f;l(cqly1{_9n5T~e6-6#u6;7OQ14uJ51UjzfI`iK$EYN^$T4 zN);-)VpN>LCX+n|fa29+W<+e@8sSjR54EHMh^wfen!PVJx?S;UHhH#8Wb$fnWpb&u z+HDr%j~>qmPUW#kLgG3E7nc@OnB@f;i--gd4G&Ap$V5BMwrpEmQBYGS&CMxM($lBu z0!m|W*rn9eQYSK5rTJcti`Ke|#N$%$rnvQExj)=bax*9!8W^QS#n93~61A9EUxxq^ zO_JvLEWr6VgPQN$C$eL()@oDrc0GuAyOd=&w$b6V*m8gGoWbMK2#3d|^742=eX-sK zB^;;vr1L&&%C&7ZQknp^xU$vlWxCnv(r7Y@?6DI7Wl7Mx7t3w>7JO6gmrhDXF3}-O zTp;_a_)rnJiQFBV<@yH788Sn+x{KtckjgM~aT)%}>XL zc%pdcLZY9z%?TQr26CJE{vb%~;US-&?)+`-6HUo7;v1)H%Y@ zs6PmpC03)^c`ju1FUY};EifnqiirIbbv=+BpDKL6%V&)JKv=r?)(Xn8mFcJ+TXW-g z=!I8E0Z1SwM?{0}^nfvn{ z*n(^^a&hV+|29CdNq&-IIr(I;abc0kb0nJMRrk~AQJzob$jxb0oe-XLt5#4yY_bAq z0>~NP_brO`wvB ziV5Dgqu(4E;m%|}{|xgJ#%vH@thF!`&W!-D0T#gmhpuNuz>%Jg#mb;H-+l8&0J~o` z&nuyFKQ0JM4pX(Xw5(BA$p;H#Hmy#atLy!sa@+DKn@DFACYS9Lzz@|e^Lmn@q-0GD zXWqPb14>=UhnT=s0od&**dOS-4!3WixQdWfCw}mj#WLZZ3Xe##+Cj|=S%ds;PPm5gKGkqpz5KR=#&9q%UD ztHjai-XOM22jRjwzRpztb|VgdwxmEhMdg6TXY+V}SVnVa=p(||g^6`{KSen z>pZJfre5)QpT1_$?lCGE8t};=G)~L`6(k9;FWtXE74ZG6^vb<720TnB8Jm;Frz$7? z7TfYU!gD9rEr!vqHwcKv3m|;)r2bo zKkWGNnkBp=;3>uocdIV%3tAFaDgS40wC98=$U!scGHZC49y8)VgmkL5W6Jm?`lMw` zZN5xC4MmQF$fPfblt{u-GMaA889klJG;;0Fsk_MIftgydDusW=JhjqM)oMaL0_Q}U zK|bKwyS#S!`{*CaYyU{Iy;506?j=_SM(E!W-*S(guI*WU^=6q^1Q-H?a>!j>mawgT zAJ(jt7ktV5emt(lLm?(ktq5Sd2Tafk2PhN(%-1)fit_Una(xapH3L!(*|*$_v~(}2 zv5{ErrTj`%^A~KM>+vS`V05|`#nwciiFMBYE+8q(^;XA0_~r3|5Li`kqb=A2698$l z`1bv#LZ1)_(|8>Jhs4MG6-F^FCfQ)UQ!fIOq+O+Db$&n$SO`r=akUsslx1=Lj4usU zZ35NCjQ@ZcHA6%5wszTC{Zx7Pr|<}RX&An@!sErH5@YWIxz<)CPv1B^3`wVFMVG*L z{qFo2)=eueAC+pqu9%ko4MaVdl|`1>6@QBgI8Mv@(_;*MZz8|9J%aAa&fTl1Uft3$ zs)Wh)D%0UuOU)k@T5RXl35D6%6*T=+e<-qoha>JsnRWKV zEOI}qVoofbp_+n%08Zp6CV~5o zug6=%@c!evojUikgS_J;2k)ll2g-8qHdC&D~HXKT33pzts}{ z(I!!=>y?z4xPLoNuf8ag!=-wAdq>7Z%(O2+N&yh*HNofiJfpQX>d02`=(0;CFhj{Q zZiE7XpzyJ8@enjj@P0Y@Rw=$ATQ3}j5c$OuTj0+};PwurE$_FO|XBq;* z#t)v5%e%zj>PPv@)W)`GI`Nh#%g(Nc6s3tGA|h7UO%kbY=jHj-tiD5!72A{-=Yzy6 zU@^?g3xmij`2TYF<&nwk)k<}VeQuSTn_HWnmuu)%h@V>Ud=hYO>EY&?677$H)*mFJ z_w6tORA45@?XVMDG90aAUn8r_(IvRcU9(*V+ajq$^Lk|q?AdEr=Slr3>r178ofP%J(=kximCGKR5u26A~PU9JY%RiD+_ z%~hqTvwE^1k|U}R!|szI7F))xX^IR-j}}+)>Jw7~Xi9BUi8v@USqz)a+K8rk4%rpq zHE9tVvtT+8~pxNdM4RO|jg_k5Es_IZ7* zRNgZ1t&XZ1@zX@O87K&xQ~E+(;$@4K?x)l>@_8AR7*QrBDfY?$fj==UPvdW@&}-ju zRr=lIITAXf8)aD|)s#X5iY$#2$I@gT-TOw7Yd4%kMHaaHlB%o0sICjCSyMkQG~%X? z-Y%!Y&`!-&4}4#Y0YgE-M~FY?^U&erG1dk@G8Q^11$ccN92(xDkuGG!joWy;S!>F? zN&^Zp3nb9%DiQ{he%Hd{HuQ)$TfH^bh~alJDZLP&*Dm=}>)oHb7c^Q?;5rJRkjWj1OdLX`LHuEhZ*nK3K7F0zb_ zi~&q}nM@+jBKDGS8`XGyr|<=V#lmqvb@dEaj$!a`3;2g#smb1orEWM8?F1 z#$ceDTF4)~zEmYxW6ouynR+lQ&V@%t2BHjrt4_Y<`6kZIF&+Fa?Vrzjc>Q4wM)-jb zqTE~Hk4R|{v>PPj^4eOH*zK2>4ZMXVCL|PS?Wh9!wc>cnD|P{x!C#=ioT3ELXCW+% zd=Dlsa270GN19)L>U4%nf`tqj%>_+1{%xe{&IjhuD#U8~!M zZYV3IGLqB@!$yG6h*;GazZKS!S^0NXzX^lb8;Hf}Hkw3Kex@78Dnh!bb9u?L)dS`R zfUF$V6f98~f_6k$GwA(=m!*+< zb|b0xbK163bGY3EK^yF1s;;2UzTScSYY7E_f`6&3Yiw##{R98lp0MK^ z(<{cMXmPvF99qk#R|e{DYqBZw0pQGg=h@Z=u46Wq9ldSrNsz(!u56NaN4d$r<-FSU zN2a=2=g_S9+XWQAEe(%!vrL?IKJeP%NveZ>Y3ni7>M`oT4eCqYf)+Wc;bUpjsk&a? zV486H3uM&$Y~C}3KZIi-`rdai@jX5>6a813I)LQlcgtt#2eu2&a(@Hz(TMT ztv7o#b$Z^E}u82+23vs`YVnj;BpX}njVOOIvC5yqC-KPJK;?y4Qd~F_LP(kEeQp@Yrd)|&(9$t zU{KDOjkYL7T4w257Gz2VfYrWV8<%X{+NMN{k?M!Kw~?1j1-?{zVQf#vure^Sp_g>l z^}I7zb|N_uLnCWPK;9a_LPpfbRJ!*yP4^Om!~fLw$+yD z>B|Q!2cUAPXaJ{!TFe|A1A~@362*B;Q=3$GnY&`|pIRY0zgi_RB9kw|o!Z|tHo6(A zkci|%gAK>Ew?V>7aZX0M_cI*t997q==W^72&Gjf%p2}~EK;nN{?7POMMwe8X>*_lF zV2q89Nts=FFI_Ufg(8O-8EFUYF0a>MvssFXCtKraY_u}SYWQ)KY7kT*bk5Um zVb$^$C|iE{RwyM_y0+Xn^H=~9eB}VwzDhN;=J^sTQIJLdO+m}@MwI{LcPU75;w)ZH zA~y%Nt3yIw)<^vkNw*kC>yYHx37msiS`}Mw%R(~fr<+Q6SjSsswwHGbzRxn&$ zw8h@dR8l${wE`4BM5kC(AX4tsc}pfGSG9r2w^2@iaT3g6cM<}gQl1o5C#dU-hX#dUSl^Sh@9B2B6| z2r487NrzJxwRO7RABjdc%@IB76JTpkE%(2swZZ$hlSXxXr$CBE?VG^Ol3-Lrc>*H} zf*l%K^(K;mW+C~mn$l7NLuf#9v_-^yC!!|o@^GP?!1S9V|4SnOkDsko!A0;Rzg&N8 z;`4Yy8;gT1^{m6%J?n2yq^9nBsfVPtuJG6af$13&nD3#AA?-w_B?rh~vA)`0{#cT; zD6NQl!CzFm0U$8dUZpONe6=Ule%z+uw1~#zaprgN)hECr&y$oSkTrdu%6V|v%Tmls z5Xcl{xeG54uqqM2Q40K$3Ps05q3-s4h{u{QGv0>b zZn`sI)uWEw5#%26w`J>ic(dm;G!ePbLR_ot5ZcU>tO8?|wSfI1@(n_Meq`F@$=OZD z52d$(p=#H)pKpDqLwpg3sr0mMAnAvlD|gQB9M(7Hi=uC}@>=Rtn%1E3cLAf#~B zq8bN~H>#@p2uP*yk}Kb88kJ%k-U`+%%Zy{-+n^CbOjI;%qnY&e?7GUSY~yeqvS>m< zbBp|C3vnl61V2G(Lkwlbsnim#z!dIP%MC3GAQ-xCyqXsls+B<Aj%6>pKU_!U`QJ%(V&vr6>q)4Gm z4Pgd~?3p*;W)?TZKrMddXNto?Xpuma$CYV?ygc{ndeyxB+2dJlwoo>3g%Bt!p#ZIx z7i^6{okf5FifYR8_&_W*d>XBGAxM^{a?z9>Fn1a{!Lp)|?}18KR5eu1LBuH7>2gsC zquFMwdk1s3tK1wkB*;EM7_qTOf-Ig3i<{+6AD^hEoRX5V80es-_397FBR@9{2>(`L zF$UuS6W{CcvZq-%C(0(%=`ybJa|#HZMn*>VrB_&fiT2<#Hb669ET1fJ#Rxy2!r&B8 zo}>d>v#tfqG&NiJS~UCde7@Z|_J?3dmC4~XAa_g6Hb0ZK#(s-|FLsGevM{C2_XkCw zpN!}Ix$eRV1_iHzn#1W-dcN8u?)i9r;s=xD%7A0fTplqTEXkd2+0GA*BIG8?MSM?Q z<{r`aXqox$21L0|SNRn5MMXuq``T@_yUBP@7;Rklw6B4}0y@$(k0r&-8bzOm2Aan8 zQi~P)^Xv8}-CsO2{`so_MSueGjrlIMIqC_kiH-ec5m9NnK%(D+PbJIO@4L?hkNP zkVTD!-%h;Y+lv}IjSdZL*6yZB?$&Uo@7G$^&2208^A-^DL=3pF%GfgS~OJt>_*X#$=~@VGEW6R ztm%&u$u$QgCpbpR#$K8zdllX>EeD*RQOqIaYQ$Q9Se7)RC`KA%Vy^L}PjQ{mtXS>p zU{AjBU8%>av}J+ z;!_XprRRVllza5MtGbKa0R3b#i(P&TD5Q5Bq-vYY^a&Du^SOQpqM~*B5f#e{ebcCf z3Mv9HSX|EKZwI&IA#gW9-1*k2YNt}VR>UQ>i0nlILq9a_*4&$-rgN>=ulFxTTp42i z`HXw8D0am*$C8`~lz6di=GE(z{GD8Ft{?7aap0GgB$Sj2bsR@aDkHNPv-FzGVvK@6 z5{1fZBSR)h&_i$CgI(hW6OKkX;-HaYA1>Oq$Jn>MN!&JF+TgHF()d8hX?oc8Qa#7u z;(wQyxg0hY2mnEC(67y_N#b^i{)9qsCd+=6g1 zeN8fW5JYcdFj0;Mm#9S)e5FK5mB>xSrL`w)^RCti_H@Sh%Vy49C)w*oR!y=R<-f#^M9^$i=KEi9^?tZ<47ldm4xus` zOrjy)%P$}Cq|wS{thC22E<~W@b7uELDDqNDM##G^AyWf_-x@JVI++D0-2Op0GmOC1 z&JOnX$EfSN3Oji{ZcTcF#El8_YCf6_t0<0Ujoj;3-*=Ib+GUe4;$6pO^3+tI?*#8XuBNduu&)ql8MrT)bm zD>d!)^K;tW}xVj8a>D~g*xAH?h@0*|3 zzLBcjC(jFyU-O6Nb`)bVsW#4na@E_218=a(@&eq|V{j(Hnziw5QbCa766aCPC}uh- zu76_Wjc0Q@?I(!iCy>PPD6#UPZYt)8#{i_cW`0DTcKf}b={r6wE>lpFG7>QsU*M~0 zVUcvEU>|NM5Q0qtUPOP1nz};=C@K4NW=_=f8EBXP3gomIPAHIqB%_}5JFQ5h+#ztDBm5v6HoKq zH7nd=GMh~h@tX4GWUFdHK)WQSq?BOV$jQY<y|?H%O|rt^+6Ae&0(DOn5Gg;&nmurfWdW`~>tvbqGfAR z*ii|M%|{Za`96iFc=nt*p#%Z?J`bv7yc*hl8uC9}FA{;63PoRjSt^2d?cKw`l-E(N zTaN;^$4AG}!T}=xn}QtA&CuFyHM7^d4k7Lr+_&$28_gC;Zy3LBzva0LvD&SzUr~(G zAY=(UyoXI;K-(Y=u>lolLyC+xOsLm{5Y6`uZdZDopBql5mvK%9=9r=40&V&#D#d+) z`3=q|N@Rvz;GveXKy^~e??LgAo&KN_Z8P@K^Hjdq zeC&YTOu9p$ZNZF!KY0v=yWTq@^02D9E@heF)g6v)yCBD_9uQyQ0Q(i5K(gO%9G8?J zPC$#t?V5PG`9m7il};u+PFc{n>T8^iU9L!)ny0fv$zw9*r!vbApqjd2{I>`egMq(@ zxG@SM>13ZrZ3f45cZSZQWQ9e4AcUpE4sd}~SNiSG`i+*P=}}?f%^6l zFqeW2D=KmQ3!b{{A^p>jDMly9(@s90{BCb=*<%yIsX7m6({oxD(_u_8b4n>-Ce5nMXpJ|X zMxP|%Zsc;cCA`*bL87QY?~r#RWz8aoWS`2AIiSF*Z2oLWku1PuK4tw3{mbRjek3_P z9S~QOwg0{Rm*>+ZEfy9QG6BIhVT>jnzqPdSh2g8kd;xD*We0)pA3>0?+MS-)%d{Jm zU&gR&BxH<4dKW_@=Fv66%H=1+`JhOV>st~~-Mbehua)?A_dk=dJW&Cks8 zeFF&CmrUkv6^C%7PzWZ}DXW3ccOki2QRweV+6x{>Ip4~%9V0;#fkp}^GX+7Q+=1~Q z8iS$r)}VN*vd-O$N8GOGNL#2js% zj%x^-Yz5*8f?xzVvTof6;-)=vXsZeeCg&sgoz3fSo$)?su8=YtnlfWM_a1zf;g_d5 zZqJ7AZJeBCL74O>Hy&j42z2>p8>>3$O4bIrU_7laetIUdS}l##)r-<-x2kM;U3GJ% z*y}&a<#6@O&FihTSd}f67nhV!3iE76JsYNft(7hS>jPc@O_r)PUB-@Af27IqI1#sI z@(NX)F#T{zT4=2}{*e!l2C|2yRyJGnCkiB9400Mx87LG%&+2SE!n7CRueiy=7{Gkr zDa;I4g824TRUrdtr$R-z67nw5KEM6({%VS)Vy*A@kh0!w7`y@8CXBRK!B18ym<5V@ zo56O9%iQ9j7tmrm%X5pQ>DCQZRBe-%E~0@NGNKe9H|YIC8!$p!WGam&kYg)Lq~Ndb zutBHcRX;48kDjPXlq%!j0);4PXyRcoTP(6xe%RG%C4B|chUXn6zKQrX{9zqTYQTSM zvf? zxR{LnjCISYXX=V8ZVw-k3x{B~Laq;yuZa0~c5jgu8u?U#g0d1w9$8YEvj9>)$QGw& zWQ9`{q2P6e+3%Kv6T&#CrpnIeMXlx*gw zL7--4*?r`_`LgLS6|}pWdbB`mrMK1OT{n-Q1C^!TR}hu&tfXmyh*DSgRbym^QWc5N z*+`Q{OB&;`@hr9M?pCAB)@N|8b4mF&dK_(CEZ^QqbU%V*`bC(0-Wa?)F|F~ zkgehF|G^fhexB&?qfih(y_ZLksri=`A+R|7CF3 zECvIf0zZWFNUv_%*?Abz|D@KD`#p!rz6{WQ2tvO7z9~J5sbJRaGo`+nDmvZ? zcHsbnd;tXz2?jWc`p5pT75r*amUkvpXbzwi*HTLwkKeURX-gSU57<#ZV(B?B=WAalcL&UYnlofe>0c3% zo5gk-l}DhRrKIYsnxJRIeJX0nd({@ET+7pq*st)M{PP=E)nN}A`+hLNJpRYqF;xT^ zch}{4>GM|;Csr3%GmEgkBX?mu))k7|^Wx*QK9zPImC{EJF3xGsonymXn*}LVo;cn! z5XuVg^Eu8`44^XVaXAmEmIMPv*X1Wh^t%RvUB1^@?-n_2a+*^aH0)c~YwZ5fQ5B|A zSFM`6v4@+YL&E*ZJk;+6?xjlzBg(04Y#0_Pplx4FB1JuOynK6>CBtSj(GrrdHMLj} z)TlGZdXNp0ccpEDF#fE%K2Y5kuM_q^|du^4@ zcZR2MgAqF`BYemsV->ZWbp3C0A)mmXDd52#fs(Bh+hdc${jO+^!d3v->tZhI@BEx1 z*F`!eOZC2S$VQvYQkqzYJj_FHpv3KR$w-gW1UxM%=_tkG1(y1ykD&k|>rIUaQt~Zd zp2zF++*D;vFEp5VBuqp|h05z{CJ(&_WOL0X{^*6qVHP~D+CSiP@EiBwzYTwpr@&Kqg)~=vqiF&l;Lpi z1I_hh&%hQw|C~A?VIq@fBNX_v^bt?ck(=o_hla>Sh9~}m1{ulL!o_bFE3d)9XQ!5{ zF?H>5vfhWxhiuc8Z=kMUVw8{<4LqxF84AjW+#XY&DX<#krzD>ipF2Ocj(toF@U0r> zr#yc$A00d9bUO3Kv@}$-a4*j<9BF&`f)UpEfa6&3XFy#*co_U)-*is${#Y%e%Of=S zem#Swq@+wn&V;}})XDE9vZ=Nn$HgqYB>HQt8;50Y-ot&L*J_v5w|WlF%1Ha(sT23i ziRT;GKJVe4BC~F;HWpJ|lb&AN(je0agGb&|b`st4Ggq(not2n2sA`hg92eqvt$%>$ z)s|0fXs7%XeDzi5)bff?*iKPX6-nrH+35UY!#kZGLEhtN zUJ4fA=G%jh3VXMAJJ?2DFI_4=uP4QqLhMdwCWNU*PLviVb>1JXdh@a_kRU!eGOEnF z)IkRwX2&n(c?GAD0{K{2bx9{?g2XVX3#~TVoHs)#XfZDQk|==~7FXHs^pup6n@w{G z&L=?YMOw_$BM!06dK)WiYim4%y(V00YJuCX>S~!S?>pHRJ9lIiLm8Dj%_HdC+>*1_ zOyldnri|AyCq%rvG!~1ei;c#wt`LMB9h{LJ*27N%GViZX>d3Kb4I1kbz=b$&=ZE)~Q-f#kEzSnpqcfT`v)>Lx7pi^O7NfGhx=$+ZH&ZOD5%D053 zFrt{G535#Qbyjr+_|~*ADx6_zT4-;(SmFC@C3n4GIkBLY$AJkRg zoveJ8oa7hG#~4tdMPS;Ol);UpWwW$IK%}%}7LkJH=H^Tu&sQ~MeFSvpnO&H82mhc- z>U6ggiU(5hFImwD9Jy$w=g~FBG-E8vW*aVa8}(qpvjd$rZrfpii`$m;l562%J9ajb52uvm^~65z+!B;t6BV6}r-_HrCLu{@6PxDG>r z>g|zg-MfNuXH_d>!ktqr_>Y%kD#SX?EAFu50{Cd3=4E;A#51>^oZ-+74 z>e4UxaMO?&{v2`PcMHFsx$m^=7M-TjrZdwgGZ#JUraGKTUwX7_xtCSTy3D+1Wh!7d zTrx0&xgmS|?7@CL|VxI?1g^{r{us z9HZ;%+BLjm+qP}nJI))MjnUXf)7WZktFdj{P8zGR&h9tH`JI0&W3K(o`?>CG?RbC_ zK(Nmz#gh12zSupzKJ--5c7j&TXX}ArA1OtWbfJ-XeaYLx2IS;u#uziFa1rfu!6J+k z({(8PTz@`w-fC-`^62l&Na#@20sBb&-kJG6g)vAeV$Dxl;Vkm7- zqC>`#&)Eql8IK_&qss=Y2w@!~$T*6zwj9wQBs9gnO!i@`n|sv3} zyiehTZ3MJa1^wul{nA|qzK=hkEVjqnfkFkcr-P;F>5RP28tdQR52!P^FAdthK0EsU z@Q<^NL_=iTunw@mn6ZEzR92!lq-tn{!S(}Eoh8}7nPwD96BXz5oR$!P$&!qL0^htM zQGt6Fm2D?1tYVb}G(>nXNEm>jEh$-Qp78M8xRyoRXHw`yq&DihGyPb!tN*Z{!cTq~^SI-8C%K$nk{a}S+#Vas>}-JlY}2)A}#>|3|vv1DK6s9^xuE@`jVEBLC0A~(}(9} z^rVu?dD~Tl@Vd+DS9|-gK<6~x^Vi3Yhx5}G3K`|QI20jd$o{^XJevEkb=&Tp`pSTN zO7bd>4YA9l=V~_m;ik*i#T{NkY`h_Qowx{czD{DF{(rMI)5f#w15uZUli5}4H47&> zBvlY|O+^*pU_=w&fZCI=kw78Eg8$+G+Q0k!WJ$P;XDxh++MO~mEv8cM3W(G&+&V*L zo>IN;u>ptDbSe}`qla8V4+$&jxcEj}BYaep6*JDx#>x_PO5t}j&&~l!_8ZL;zesQ< z&Qb^x7BuV{x!GNxVfjF_!BKLOa{sVqL^=PdZq2!=pTeh(h(+zj>&h6$ws)n}NzLm? zO#4k{>+h51qTA;A24_qH!Z9t$lbJLTb7dMwMAnT_XA0EjkG7MX6g|f_sKy?{Ga3KQ z?;~PbU*$g!B&G8+a!TKp=I=N$Y;E3F9jC)DD@fLcXG_tJn7+avOFiUM+qky3mntD)nDY8{8pbYYMh$sNkvpReVIH9o+7bno#3 zDgl#HJ`%sLh@Tt9VxiZF+pZ6+*2CO$x8w}AxoR2Jx?R#>!zGG(=C9FVYHGiS3=@iE zbt7u#*_zb%O;_?igG{5Y$k684)F5bLD;oR&?G|+-N8{s2fZ|pEyZQT;aS$*EccY-$ zOvvz~)wC}5r?2-7bbtvAZ;6dIQ`fDuLCsmc`dZb06hWL(cGZ_;!xh120Jf6!QC2+J zcyw4E9aGX?Q3dl%^Z3l54Ll(atfH6#c<6m_)+YKgKlsIqG@FvMGvLrB?kSIe08Zlp zp)Bg87Se_|+oR+fRAe6J$W}bNdwx}QYE3DGV5~}S|4Fr*9;jK8d{o~xGz4Q$t;jSf z{Qdi+p)7$cu>~IomDy-W;^F~#q48J)n3WdxJFsbu5C^F{hGRnUjjCUrgk#7ylza;FtZb!^{04?m~Z0 zS>;=ad1XLlzurS}q_SY}eaOiCJ2^Ir)P+PTa-V)?A zE{I}*)E;KAj;^VskaivMV%co0EFRq~cQBpLEAECoBngJ)4x~3?KBd@>=kA&TXEnY~ zJwvyc3G5~P&SruRhJQQ|tK=i2)27&N-Wv-+!^jU#X@Quu__x%2E&9Y_@g~mX@JqkE z2$U-!U@dZk;_vMD_j^M5YYx(`<_MlOCn~w`(SIWZWHdDgObYFqBqKO!Prr^?ZPz!T+b%g$_>nqQF5*CkEei7gjR@2(II)a;|%{D){lIa zuhXMPnF+WN=gqjv-c?yNb!)l1{G!>RB?;Ul?r z=o8uR&8g+Qg}CxLRJh_hHD7F#P{Y+ztqMjHSS`sq2*+$VEe*3#l}kUG?+N32E(bZy zB9iS=h(!Tqb?U9>?H8*Xo_G=x280t(gfl7L9;?FW%Q+D5%g2!=+gFP_Y^cT(z7-cQ z1AfJ0nv~Vj>r(Dnr^&tdo>MVX{by=AQ3P+Lp=&cRZ0>m-=%ta8Og~2vs3;YtxbAU< zv@lbh*iu{@P46$eo%2Yo?pS`e8{#34{%CvBP6gg67bN%Zq92W5WMKJWP7w#WY0nP0 zQFd*vAz(9=wp0-%=prhw=l&g+lkE+EVC0CN9V0KDo6S!W#I%5F!HRj=Nk8ec zC9X1GszGSJtw;WvS2r8(1dsskQEu~yuH=(!pc zwi^*Fa`PSO7U3nGKABvE0ZVp-5z8CATD_D*rYB>rl( zf(i&Eu7wF}(7&d9E0Hg+bBpHnF3MDtCN&q};eQ1cv+_UTqM5Xs)c;PfL>+-Jc+ens z5Ss;flP+hsa#@~OV-aypD%PVFlaj~X&Nm25!4LO4pYQY%LnC`Vs-(;Z`xPlY9jIpK~BrAo)Z!Nx%7{So#`k6^3?k7C)} zh%1_yO@ho?p1L^5F87CDb6jAPNe0E1LCfIb2Ppp4XIexozqOCv26GoF15ox_5wK3> zj|Wa>+}24G2?3ib;epQ38k?YGL(S}^qdu9ota-iL4`$QqS^_qHk3JO>XN-;L*X?UZ zv44%x6#HG@MQwN#vpav)@V>}wHM*J%9Ii8#x`ev&Q14aU-4m=V)e_JmWwS(Aj*PRY zv?WABEJJY|z#Q=ucnO}P+xBvVp1W+c{1&(R3^f-}Bg{Ygltf5A~~ ziJ<=5vELDw3=Arh7xy-G(m>k37pJ_5N zNxQrEfg^f=&11MxfGhWLV^W{i5Z7h@nzG7rUiUlR5L!ejH z_r3>sS*o!}cTqaX)m>G(p?U*&)pBU=L>svab}(Dn=|De991EVJyoL#LR zC3_o+zUu_(hw&8rc)?;L13?96+2kWJY*O~yrA?C+fWUSGhV=XwawM$rNVD1p^s_`p zJ^J>8T^UncnB}V3O|o7juc;Lb2|L{`sQXO08$Kw2L>^KCByX~>_~msh*=lvAPEWc# zEY#2jJ82{rvH{}ej|$_2rBM4-o!pqhB~AbCz>I|E1+MvPCo)?WjsL$3fYMDsuD_qn zE#fjF(!3yIY1;3mJvb&G7tjDB{h+2l!Ei_}$$IhOnjdBk&ZXwypY9qA8Ca*Irj00L zESR(oOU!x z0Al6@_k0})Um*Y>XgEM}xrdxc{yrOLk5s&(Ho*%Rf=a;KnbM?}2kP`?>T+;HUzfGM zG~ZI4pj17Mx@eIcFL-5N>(vTOf9IuaV_eb2&MBK3a5=eN?tFcZ*VQ*74Rm7D*6rZr z+Y7}|rw*_Fv))wM`LykG2dc?d+O8w-wPRizZne2YfLf{$31o0)Ju?P+Ax8A5 zYi@ak;WqS?O$0<7awsEgnf-Fpb>8{!k@V!#p9sd+yHCUh3|MuC$KZney#{#w@{GUM z$5j-_HofoR?Har+TTQQIkVy~=pPV`aq6?v7uj%_9RsVa;lJww%Vc1y!fFo{!2LfdB zT_qs+#X`1C-bf=+rOL+lyJX9%V9l#Ih`I5QxpL*@o8(pToPOIT@d2SpxWt8rLxXQO z3JNazhz+=gv{pJzp3F095_!%lO6j$hI{cVGxwt<57fLYfjDcUe@`+owW7ie0OsWLB zLmRW6kq7h0OUJY&-~Qs|V1}><^~FkUu6KC5#Z}Do-wnr`1IhUc%7>wm0QalSVw*#J zD5jL>RyZ(SqG6=y&Jxp(K}$j!6SUoTPWG~vQ{yDQx08rQUv|q9r`8L03$d6%IbTY3 zX@(UkSu{$N67HM$eGYX?RrIx711J{yP<6fw^KwR=xbvDtZO`U*%w9I_g85jrqdy{5 zF%NZ&KrGd=+<7IiGrb-z!kS@i1aRXCuy`{6!ixyi>@()!!YZ&8!N7ApcMUQ4Q%X9a z>EZqUT#Kp9hjvdFMAm;vQytjtHy2ps=%}R@BO^~9qT2opt4On}%{KbKJonEbUX9aC zdd=lm=iFXN*wvMG0Q%@76SfFB&LR|n^V%L5^Ia(wGpt^#DHr@zIC^!rxfC8^=5CFf z@%_*r*l@u}_B31UR=zUYI8`l?iUQ~;S29%0+K@|HSOSyk;v_s)~nF;T}Y*<5eB3G zhLG54j&R4QNUF2xR8+2)a%&8cAQ~-b6@MGSj zN!4KFry=qoSCD%Ps-FEA=0`B3iI2D5Fjm;9r_o0zi)8%`i}#2eD1%-E$$WFr9`$4O z5uJF4WECJFOC)M3=L>C9F?iJqGglJySeGJK7V+{VAtY5OlzLz0Mh}@}Crf4rvmw=i zD3TnDNh{Tq5^Wd|p9{Lz`9gk=4mCvdP|sbh4HvHBK~3zqv@c_+xvJk3l?9caO)z~| zp@)2X17064VZNb-H9=6(lQU(p`n|dy#YjPKqbA*Hx^Qs#&*a zud4V^!6DO+DnLLjh*dY98S9x;bi)#=ZZ(ddjDWV8{v128hRFXYG;nUZSjR!83q50C zb@P;E6A^0dw*wGf+@hgHOqJ5->s1sEi<{{CpbLrilh-#|Q0(?`voYg{#Yp?D_NS}^ z!SL2KAyv$}q=rmjn}0MhTET3^-a?yRnn4CjJjPovq*bO{GEQtuyy-{;K!o)zb0{Ej zb!lvI^vr8==`%Sp;<@m>^Ryvsbv3Kapa5a5-hN~VX3R$6j(>Vfit|KbS;04p8 z5Kr->lxgv6tiMJhF#Dk*%y-ZD-t(U{v?;M87R?J~8AJibq(QQt0%Z%RA6i0rwr+lu z>1bwumO&d6&ea7cBWO7aV6|rHpx8_`J{C!3GZKJ#33~IOn~@rd_}`{2da_hj)HO;b%IS32&_X4BU;d7s1^8uT5v{e0z%|Qq9 zu7DIJ!-MBcYJgxP#;zPCz87;1qaupd{kx+Hi?KwivrHB+NqI84)s;6;=R85=Y$wFOM~dtv1YR4tZI5Q8|Ne9l0o5*RSUw>obfsSreonQdS(@`Glah`8 zV{63_Rq2pIh8Asy`OgCBeEEMeUN1*D#wZy8xkJ6CI8Vru8BjY87B&)V7C55Xl2%i* zG&MKg6ZEE;a+H6qXoMo>Y~M%kLdoj zP1Kb9`0nxb6;SF}bJb~)2nd&8NPb^Gtx!R1eyYgV3u6ZR5tUBs4NQiRPtE&@2n)nB z@Fqwe1${#S;v9td2MW#BuW<9K6EY4!CR_cHdG30kXQP%hN%$+yXfJBjD_-AEgTqj7}hg=O&sbKixc)I^eMnN3~a9;PIV;`PsgCaV=S4JY4JW>nq$7psKl+-JU-{m!FGE7$}G1HznWOKC6Eyl z3lan&))h8)ir(>TkRL{0uUdQu(Hx6zS9PPxGdV(wPau8Go{P`Zm4xJq8|&~%Z}?pl zcmWi`w`KQ2+ZBr4%M@6ZzJ9I_sP?uh*3C!}#NwJJO=aKu_zE$fnt!o|8BaZTvj}JifJ+cgS;X4+KXlK_e5E zxz3s&cYiBtpZ2;x9{X**V61XY@%D5*Qoz%p@qC=+7(PXz#O8g{JTy4i`;1>GYSA0` zY4c9ohlztT2FiL#i!UHx?FY}^EPg-J!VC3?B&L<>_$Hf0Tq@_O-VoB}W3wDr!?2_pntW`Z*x+|vC=9t-RCGX}khC%= ze|n{ZzUDy6>oc)rQ-R+MW}IYRt1PC3fMY=)@t@lAMKy#Sy4ZspiXr^a0gRkb=oM1kbRlvDJnQG|AD!Qa@nUD!UT@~8w_1V z(V|}c;!}6d={=MU$X>)W0r){KC;CyJlA2<+r~vN<@8nJt6)3mk`xfAQMn}Vdr3s>v zGu@K-YP9Rcry#qgX$=quIc5YYk~xtDE?AGKn*H9~SM5H@Svqfm6NNM9sgIkeEz856 zTB*a&YA-iD04fckfM(Mn8#{rB8CHq1Bta7&mGD|~$H7KoN6nswE zf3AzopM`twon|A*I&IFyf3J6p*e+g+;=F$fA2tZ&sRhS$p6-MGs#G@HP^TM!w_XQ7 zqET1Q=#-3ytOxY?&1KMrmh_Z(ThEfC>X+ZkT6PZKljc4kl6sh9*}K(T-007pod?8H zPq{F7FT=F=K{~4(_?}TS9}^hF1YM665dSQeE31Ee8c)0ny-i3r2u7SDB~au%#B_I1 z6?Zg3ax%d-LR>9)8vQpYAGR0dPXWLT87Yz%7GgFy?TO>@ITvN#E^No6=8|qSyI^;N zGxtCU_Wve0E6iy-0hQ#I0F53yep+%Okc|)LD`rfi0f(8kHMjWbd=T&(XM%53tjTF< z1EM`RYUBQdPk;+npPep*Xh*bZt}=7LkN@hPeDSgQ#amF+^ILF=F;ny3)=`DdHYr@f zN79+9#MxtgAOtY`XAPFbQOWM54>vlejO4Z(Tqx;H1dR*zn_}qsJ1Sxmr}JIwAP_}M zY+5Lhvfx8roqk8yM#2il1fn3AJ1-h(q%v^zh%h&HdyD7zze=^a-=$O_Jt`bKlKxZh zk;eYaU6=eeytUtYdHM0Q!xHy#u4)034~%H^uZW?IoLy=ei>`(9o3~i_bbeg3WDtPa za<|SUtz%n+N2=sE!uaXnuDM){F=HSnq`x*ZbG7ADS9TkC_fB4hs$Zh`h8{=agqaZT zciPd%MyARKf!fMdR%d5x&^{d^10++0Z4GSEkz+xu(l&rrsZ1O!{EYFN zj{w6!9e@`tMO1zOgR_Q@-m3}MD9)QI!Lc|#K^c`w)2C1tdWna>lDlz+zFr^B!07o8 zBvRUmAg#j}9Tw%9J66oS05VZc1LLC151mWp)OE~s)kjWrN77~G{DsaqMeMuD> z*EhGou=!NFKFBCOH1?bstwTUva~FAIkDsa%{|lkl z?a)ZE&y$0SK}s8>jf})38Q|Y-0su`mn<*MDrLlaH8xX{WT{=+QRBP&QZkjBO&7@nj zs5g0HL%qHEX?2rl^XGPiBn_mZk-1!%))7KF(Z3gi`{B^R@91)Vx9nn<#TSiW_ zYOf=AikT+*Foaj9H|IPse7mGo2iToS@tR|DemuMfVsA+*X!Gr zr^!l|a!?g0I>IW*VRASfklL5IS2AxiE$Q4BnT}LyU+@`G8#qyQUS6s1_B~A|U8ff2 zAMcuga;sZbv5q-t63A&eO^7Gt z{ag25tO?7W1QNA<`SE;3xv7wg4QGBKmZ3(&$k%d|b*#+A#btJeYrI+fVdecL%H*j& zV#TuC|0A59=kNz?M|(vlyZ-o3QYz_|v}CXrIq_lIUlagx4vNDc@S$a_5P4!(O47)? zWwe`gVR}8O6$W1kZTDJZ7HI|)Pg?;rnlBz|_GEq;xg`8rPL60u^lwijD%05NOW%Wz zV~IA*U%#fL{-m!}XeMwc=ETzwwVUW|Cd+Bl1al9$iE3kBIRChG9;k#bqIcw?%*DF{ z^^HyF?w&E8CWdg7#a)BkrSF_n>bVF(6G6D@odm(yq#0>g6^N;kMkFb@ApR?Evr?0- z3-ID`flVFk<4Pu`ON(Kzm!V;| z+TL73&{+{k8dwq2{B1Hls^f*;Lt5JLbh9{1J^5(B`V1%1A)uVn{SBn5hd>>sm$Fx6 zP{$%`ci{T=fhFZrBzUe>zIq>dvGE#HwMG7qgcv_OuhFyt0t1$tt#%g<3c;udfAkaI z@E2pY3!EIAPn>a`fA7{}n%1v>_kbIS4PQE%zzSq1_u(#RbZofR3hxs09z7&rj*rCn zqLm?XD*~rq-pQnfu|XAojsqz;iQk9Yl~D8P&y$peQyQl;%c9qkAwji^vd;Wg{&$cz z4!FV2Ng%GuwlU!`?oTXk7|EBsdSW@)kC&O(R+8mNq>-cO6U z9k-QnbMc&ru0oAN>KN3CQ1y<`14mTR7obVeH}IOnaa-Sx$q3&ytJsZbJN$Q;1<)e> zCRZ1Z!U<~PzaO+}vuJvyv<-B+39K6i}^A4Z_ii0C*C7n~KW(r<7D! zPJ4!N#6o%B#=`KaRH+rx^Omjug6iZ_qy=~|_Tb5!>85vLeMX2pXm4ienbTsB zf}=9=&THbCmnDz4yZtg>Sxwo67QW5oz~NU%6hSA!Vsl7KQ;mmLLy%fm4HfFkUH|eP zg{pJ=<$eaqOGgON{;d~aSl&6Z35Jq-ys2c!5P_*C0Z>h}MeHRvG7Rv8cN}Z3o-lTG zM2LufxLZ#i0VAcMb;Dh8pUrMVtemvxwQQqqVg{XKYlDNMh2=XKMU*VuNhQbDTWVb8 zG;-WM@ZvLBMMbQ2iP23w*Mzt7mgGK{;a5hk`t$CHl zzvu4@3;YDx4e2AGz1=mmG-TE7elezVK;*cnHef$SCMJ?YF>cPW@U_L5n?lqh20}lr z7~>VI>jbrf+z#Ut(tx~Yv~XMt$S*BJf2r=TD<7^@SNz@AYs_i z3d=0Dj4=X`d6d2?5btNNJ!}THhE6mZm+7FBESXS>7WP27<7%B)HD23g^F}g$Q8{Tr zF-pa-G$}StF)EN)J<{nCPNL!5Q;W&MIY{2*Nw>s$X!D;}?5FCmpPJQV31#22@lKF+ z9EpgMy`Fr|)i2tGKSM#CCvur*Plq7pNR@e)um#jrE2}T!7=)Mk3&2M&;fxF_XQjqT_oQ`7lJ}nC|i!Z6fMHy-X00?PB{xC)1{pF zQ&iDb>fJ5HV!6{KhNkugV+72!r zt44QE6y19@g@Ea|LdTH=yrXTr=H&ISyNH>%x<;$r7nd}po!534qNA1=%HwpOA#Y&E zA}vpl-OhsTPw{N4B>ZZ773QJAdCb_pqZQwGx-G5UIA*{Pbru?iMjtQSiSGWd!Pp9| zqMo^Rm%Irz+E81)*hy1CW4v)jnBiZi3_R=Aj{Nl%)YPYzFxEcGM4_%2!o5CQP!>r+ zCgKnM{R*5}hRbu!DDnPz?o?1vfLRSozDW|+#}a`|P_k@>+Ul3$`nH;rX6P+f^RdAN zRBW=Cz{V2Fz=*Ex{*<;yQ8DdLe74c{)s4H}=FWAWP(NmZj~7$z*+y_Ea#YT$z{XPx z>qjc1ja12Y164H1bLOIerY8PcXN-oWEz`EOT_u_0M9^(Mqzlz8+cv!e`DbLFDtDxw zvo1d;Gye`+KoK{7n@QLkh%iHfu}A3s;KL9#EhtR3B<>4Ar=S7+LPQn(lg$G{g)Nfu z>8FZz3j-Z@T6YVLWFLP-|Ku14Nu$OWTXr-Wje=z(kn!jbe?X(HOY+Kp^B2;i>f_8) zc_p27`f>}NAC4hd`aIS*LLZO(P40Aa|F3ionxAUz;MH#v-1qW8Mdyw>dcV|Y;XO|- z?8)lP~cqg69$F)6HC&8dahp{_HQjtds&&muV>yoTBJ!Q)FJcD{ZZr~^;@ zf&JGYMAk8IRN%UkVjxdEUpJ~zx&3gST3im)R3}#BMq=k>Ct}ACmOniJVNm}u?Pj7( z*JR+bCb*+cNiGeczDnRHX#U1wwG$$OE5l#h6(d+wTK(~D8qzbGxVrN|R@sOeiC8|3 zIf+aLNmHY=h*BO?Jqt1pqfX_frsFDD&*N97=rjJNuUwQ$?Zm36_y>}e$rl&L%f}Ov z^S0Ls8T5QDykOZh`N07=I}kTF;ImD4rtjU{Q{?Ntk+=GddG~ozIJaE3ZgpRl2nJ%89UxvEzhO27o1allc8b zllc+TWg`UW3bQ)#1j(_`ydG%x#@&E4h>_xXd>?-oj*wad6LrFWzK+woIY9|)rMXlZ zQUi%0k)R1ENjaj0P9-$RH2ec2Bu28dx^9T?yG(f#TUT)LD9LQ57*vuiB<$sf8H*?O@8D3Qp#HW9Y5t@Y7%xa>(hMj%icMKBV!D-pJE^q za7#W%y%OT!z%b->CxEdhh|V5bL_&wp-FpR;OtAC_n)eRC6JEUi)9Ze{uJj~Nh4hM* zM+X-4g(TwP*r;vEpe}RxDB=4iRMZ3Fcg3Fcy+_&Vv)`U9O@`XGtUlMzYbT22a2D6w z#N~qj4&g%D5P|Go(a{N_n*mY;nboT3`T1!bYjd*xbm=5XvHS9<`S1)ZEXsJ{ZT^Ec zZ@c%IV(mKx%Lxm3yjD-3y{%*N_)np_k*4+PBKG+oPb6N4XjCaG?3ED2qt}R}+wl&3 z#QIN-b}#U4hx<|W414psV-!L{2673tJ-5{E9GxmbF!w$Pg3*xZp4V*&qTr4Sx^7XU z@75=~w*^tmsbCP$qaZ&+)@0@jL}w*BmQ#Gfop4aNT*vL*ua#^(rrMU{!%dQkixTBr z<~X6pbkknYBo&c=-gW|qW5zxgmc~3~KB{?h1I4sT><>$f80<+IeW36Q)+wZtQ#Mmw zOsS8b*eEc9<<;)YiXSQ(az8KQ-;?mdPZV{f%d~dh(_@aVa_kXOyz#}F`&X1VSihhj}jQaFZ? zZ(vW#PdSJA0@jqMijlp1_<--xVPL3FMnDgMWSaD_xU?k3m(O)KO!=XB@dS;Pq?A<1 zi|A392Iz3OUeu4!li~@u+cCx8w0~2Xj!u38r?Q?k_Hh+}OXds@c-rz9pB4+@Jxzey zK)obHG@AtNTd7-mX=W_t(cwn(-T2-6&o0SF#+1xRAak00Hx)=)k%h{ znUH+)SipB4Ge5MikFQ%okZRgM4!42i6vMob_6)y)QT%>qGZ|Kt)EHA!Q^SazG3-Sy zniFfhTiR_op`!g6yc)*p-`B)Om8g-Z-;aN`t-E-A)j}f@uPNK=mBp@uVDI(ilrwrD zv8!7#*)P3^MB?AJP7gvDF@OF_7M?SUjjYf!GzYmBOOD=};3ocS#pB(1WedPaOJq`d zs@O|CP}b^=1Y4wI>SD5@|1j%}f!zO$+EIrKz3S5Ab_{|q>R?CZxWd}<2Ho;VD>bXt zv7WB{aB*#eOl2X_Yl!9|5zfl?3m6!dgw2=v6TI%tEVh?jvTKWFkg%7Xs~&EIE&m{% zir1xc+v96S&8V-9CAXC&_V#%iLBiH7Tbk}rEBz|d&*8go>G;Eq9G#Oa%J~61?`rcr z6Yxm^;%Mu@Ie_8GiMYx1k!B9 zMMc54>U95;_AGvrMKPr)nh}0e*edm*wcJUT#qAE^aJ$0l=k&ZWZc3QX6AMWOhACuB zPK}Rd#38D3NclU;net7~LromGU5$vn4FPd8te2} zybhA2aY+2L!TD8OQ&A=DRq>WRiO>UPSO zC}sa-#a&SU9$h|!b!J|{7&4jm7W!wZ1eVpTjy$Uw{kS+YY9&3c_uy3WG*}_0f-V@! z@(|>RSCf&RSc)XpNM?6Ml?x`&(BT(?jRY-7rq!7{R1@NPRj4y~HZCUy>rH-2a~c4p z9ZeI+HNq7hxrkw6jt+)nwB9=Zp1OG2?@C+FYNBL{kjVrELdVAw#E_n|TDC;5wma>y ztR9$!nt%I7FD)1D4Z6dPgQn(E(K!0*(H~Awl&*N$T(%{GPG28Qi@O(Th;a%TjTRN5 zR)Ndm9^WWeRi>oM%@@m5$Gb%dAbRdcn^Au}&rK%HB%s|9PaM0kI|oBelxD_EraY)H zNj+d%o=!(Lx}}OeV7&FS|F#eD0$nl9GhF*9vD}3?8U^g&5^S(%EPas(?NH8Renz7c z{B4FDpdk)W*aifmhSF)&E9&o#32(ZCn7qacC2d@r$G@Zx3Jw44>HkD52biQ1elJI9 z|D@+hS1PA}@LpC{t^QyRPLcn&&&BQ-ECK1>axm_OZ#!0XGMy2HwNA3!9Cc3FYCwMp ztL}J<2h{a4_BDT=j(o&qo;5Sfxj#T8O?GZ=4!R`0H|Nt`GG~hO14%{f?eWY9AvsbN z2RJl@`H@Jt^_4=ZcLzm&(Ly4vJE(Lzn>^AusTAX45W!hHw7@%gorAPnLsDT)K3?(N z>z{ug1+M>D@bf#5U}HZ40*cBmhzkE`smbrw57p#J$95tlXB8k^LI$Lm@M)5b<@kWm zd9zqpW*U!G)ddbq!tz>mkQS1&vZ|u5Hh49@ziyZ^c4v|0ilfwG43xwNaj@i)m7zj< z#yljQewVK9>w_n3N7RxDMhxLs!y0NByJ-Uce9>VR3pwYnIt3Yyf_~q^;O4%WBEcYj zUM?(#%crQQ&P7E6r2|+^nvLe54AoOKQW}gw-sk6ph$Dg7Bzm6aNWEF~!&bD#=i7sN z@K05|=yVI;RM!WYj_TiBCqZ&Sd61|A0u31Y8|;7U+Xi;+jI12^ru?SYOOI3c&iJ%G zObs69CbrJa1^;%N{wmFvh@h{7MTv_CNu|g%m;IbaM6Lqii~YL-xDc6s)o*}geEEdD z@k|{iFgne?ZB^Rcpz5V<#l=R)NxXwpfAg$xSID5izFopg!d|1If*=j)pTTqUx@0>} zrv&TNloW>H%(N^DEYD%SY|y6y#-Rsv1d0hOCN2`8H*9NVLhvUXY5C$L2HFVdPj`jD zsVk36m2w<|wvN9x1Qu}R8}GVv&(@!=YEJ!9&vJ;qd4KE80BeMlK>S1%I}F5{M5X*e zMP3vt_3};T#Z-zkln{>2Ss0g=8$tBJ+nW1pk>*&^U%;Lk5z*_QLx!C!K z#-Z|&C}{XR8GF%+F|uv)@LrRQFp2FCd%QhBSv`{YdsqplxdMd6fHKLtEEHWO67dg6 zPk+bR+xd8lTMzP|u_6r62an&YIWhFy4&7FERelDBd!g+gp(w)b>5N^ZVc!ON?@NS8 z?B&{q>|AXPaBmI_^K%k$FMD18YHj%2AL5QQR{c!@^{6=9Z6?U96kZ$yW}a z&`0(2KKIj_H{S&0fluEM6Oe%LdOa;gQV=f9K5`6r+fck8uZ6w8(`UM@^67T4*usD9 zhBK^@v|KoJq#{4RSat@e@%SGRcy6Juum2c3mWI+wbq=NPPo}ED-F_L^tdaW;nFtZ0 zqxk}6OlUq!2peL8BOnw&?V+PPK3@0Kd4kd(eO1(paF6yrH94Jr{Jkx&3&6<&YpyL8 zmML}pi>#)l`@w#X=-M-4h)%oys4oyJU;uyK24@t2eUa&L5ZKppLM31OX1loH1yN@L zK%QQBRo0E~?L?M2Nz1k<_M(3D%S-Tm9w6c7@zjrciPZ+ijC%nsD|zDq=9RoV`={ix zV2DQj<2+d>#C~6Imko4RX->x43=9qZ8HU^v3c{<q)+mdFLl$o`1pjZ0CHi1n?y>^K1Ov@UK=GBSW!D{ zR$0d`FERxtMAsV_<2Mzo-rKEfe;(gsj$Af?Wex1Ean8Vp5W~&$$Ie&UUI@vn@pE=d z=a8mBzMHw1KEkUSVf9oHBx$ulw_c(EB)$vWMT%%V8{Oq`EBEweYP{vwz_(BbOxHo( z`83pLEw}`z&{B97|g^g%KyLdxFr@*-cdWgte%9k>CA4$L{>z92)rY z-{Unx8j}+@N(f~E4T=ag8Ds8!6D0z%@88VuX_`%Ai8_cP^>OYP;2zS|72-k&(y+hf0B@JVZZyc<{O>}kkL~gZ>dfQd1wTO-6^96t z&oiwa_TJ-3ra%Z0MiFU-KHs~f+y;)8tL``E>d|(SiL#9*_}J$}IYMm~81%rZG_$d< zOuqOfXm{%`uy3yFS#VS{2DmkR4fvjt&jsJ>_%CV%uIq5|9>plu{=cRg;htZ$4@GzU1n$nFYHi&6Il7`(AatL)(_E6?6J?cF; z&>F}ekg+?OSF4dx%CWHritgPrsSX5kyB{Y}`vV}U`!XcJd0U5WDvdsD5`N9isrrnt z03waTi&%fPK{>G|L%~i>TeA&JinDzk(|u4P+r>k`iE@v&Vpg%kpqj!8d-q0VW3;DJ<9%Agl+rQRsdqJ{y6D`(QIcI0zT!Qmi421H$?8Uv;@mC@}6a|yz0K@B2 z5I@0w!kWWRv=Be%WM(3#F&owihyzR>=j+h!>82K1@ra0;I#ES*F(=}65CgqpQi;C$ ze74Ozyf#$<$j7qUCdE@cNMI-N7FH^NWc;_o$^d+a5*>FN@q(NK9!Aormn;- z?7PrdJ85FA5=v#4&kpCZqhpK_>D)6pyp~*;g0=7MkfF;Bj52nhZ0~#^Zr?AHIccUv(3uS zZ$ldNi0yIMat>UpFDMBLxH|TnxbEb7zY_7$YyB^R|CJbZJ_B2n?dee9voZ*V((HZA zN0ay4&b@=L+3aNMW}!&oLh6?qwX|M%Vv6i!$59W*+{N=sDg-Ki5ZC?#wte%1=PJNaTEo%91DjRpG`tRyX1X8KBB=#2$NhxucTkE{+P4buEIAH8BYCyMfN;_x-zi2_IEb zbfEit#X{3Eifs|v>A62_XFwakB4jnU(sppPL=-Xnim z@d4KMj@B^ON}qO$DJI%-mXIV^(h=~5L0{7mc)$)T(s9_Q5s+Le-#VS7AeGHs)X@?7 zTAR5XT&wlFbYz4I4-`#-0)xDVcF9yZc4j~n|22`nYB!Rht?wHqYNT#Bi;asc-fAX` z5zod{dgJ$aQC>HCEDKAE8;i#0e2)eu7s2@h*&5@P)(Zx%|K9SJUI{QoGbw}|;Qx-1 z3tJ148y3R}k@l`y%E#G{)i1(Z^=Wqka|6aGkvW4wha11|h$tPJ+^*#cFhWX+)}B5> z^7Y+wA#1ygr+bCv4$z|$mje9mz8Daubi$!(vq>Nr)eegcq4wQB z?Ag+?^a7C{=BM-5?K$WpE$h2a9nhGY(4Mt5w_CM)O=#A%A0K|lkp}O-t^{au_(|x8 zQZCS8&ZdG=1!G#a6*lbNz3NX3IDf9vYJOz@E}*54)bp5F?=Z+|w$pvSW%UYJyRIS$ zc=D_$KG>V;fh6d&NN2No(JE-)_YL%lxy3Z_wpo z+>_ViDmtmPhDH}PZ-gv-B#xxzzn^&B{jpKyyzZeUobCy4H~4VzS`N&V2g58W=G}}{ z(VcnAQcLtXDJsI%8sdvnZ9uLySMRV-MK= zzp2K;4CwgWM8*XOzP|*#xnSfJDP9vYk=ho-V}7h3j;J6ZWx$(1`wn+V)TKJ)r#Z(aX=%?-)@eY5ainJ;MejFf$E^7t-c`=fVQ{vdpu-{$yS zv9IMbg z-R(=jCOutyjSMIJmf_?Pxh>@gVCudIxIp`RN+ko-6DhK4{1njUH@ zWBMclb0`v^Qhs2Kq2v_hzE<~lL2$lO*X(r#_|p5g=K`az9Ib#N5VZMYvzV^!!GaPQ zfF0p(W)d|wG_mIN*lsg)+`q|C>EjjlY=Dkcc!sA!f&MTB{Dd!BmN69K*bl`f>xD_* zd1BCibU$xg@U!h$P(EiKh#6bm;MkI*Z*$6BtxgAe{$Nc=NFaa@#QVheI~ect7-sF(emkNTkCrj)VJGn3*C&`yNxJ>iOOco8x9TC#vM?X02R zvI*js_AAwBr{D9RHqH(HTMu>$XElI@ecC#y!$|)T_#2Lrb8J?bsLUJ~JnwrP(G_%& ze1ieF8i`Pykb0Q1pMLA&rG6V0=w<3YXsvGzgYPhn6-@Q{TsibgsZo3hGIFDG>SN=a z5`edp<5=fj>)q@v4BHlsxm6~UC#x8Qiu;KuwZYhB~n34(d~2U$x~iM) zY#^2~BUR$5G%1m-%>Ki>#b5ilvdaG^eh=|^*p7lgqc%3CgC9fARv)esgB<>lAwQg& zyssUow7b1z^5W`nkPCUsx1ovQM7GApknhpXS?US?n8C_MG)TbIfFY`L)E*}f9(dG= z!ldNp5DQ6%Xf`MJ;)`5$6NJk#|bGZSDH5sx$ywEs4-_W%)>gPXIQoD{oFx$E z23!W?S%0*VPBx{JH?;pHkX7KeEQ^y9yqcWfgVc!yC>vNw{s6V8CW22Dk zqF1(4G>gwSaZ}{nzwpcbwcIXyG1vRKYgT}rQ>Y7>lqPykG7i@>*Y4>or$}X5K2Tj> zTxo6J>QRE%IcaP4;YD=#*re5GaJZYROA+Xkc=}Q&_3gBza8LBAY3Qr9w-R9Px2E3G zXphGekCNIF`*Z$X^WbwC$>-MFs+Am%O}6**mV@)=jj;*8%^aky3Easakqtubgq>48 zgVMtM7{h-jhfJ6pM6WfN$j?Z!bofY4?6yW<__%9*uWRyM2|YCzd1COqb|l z{0+4k)G0>jYky9qqUhDkZtpVFn}6*jKi=DQYx`o?-Xnf>api0HNUdEw8OU6o5kJ0r z(~dfjTVuY-rt<2&CWCogO8xIsMd9~@tV`qJhc#U@Izt8QN!YCTR_`xH`ZzfmU`5Yy zHAc28XPnfL(H-#Cl_LIE>ndEw>oz#6T=)^U{LF9oG}~CTM!Y$s$un(}Wfhy^naqoA z?aP~JoDcI$yGf9aTlHvP&Ec)F0I-C*rnB+;cWm7+(yc1s-p1OG{L2}^sEyBvl3qK} zf2~XAkE?$)r>NJ(OwF{00uitRFOSk-n!uVcGYTXQp$u z{r)*kk$5kq82K0mpo0alBtATcNd&`dg}!WZC>iau<3so?0crL0WBrItL~@=AorTXA zysOi~mg3@h|B=VUFS#7hVm_!^badlFJ;|!I<6x4?__g1w@^7EU?VIY^p#5?PEm-Qe z|20-Evn(H?X-}=srj}zGpb~oj_piPPwggR@q48qP?b3&Nrj$;X!WD%o*RxiquYB|z z(5~~zY5A{5!u4LqmTw7g^9bkB&$g+c@MD7|lNLQzFlMUdbBLwq$VL&zcoFQ_fHM*S zNKX%G?a2+T|7HG{3R0*1CqJf%R?T`0+|u}0INh!m%nw;ZAwwapu2ik*tyfHsYg}aV zJXFGE6HmQT{%XheDk{fS@szYH7g-8}J~$az#Is3tE1cv<171+@ z3lS0$dc1oZ>0Aj2QsVfiOoz}fC(O$ZmeqfZ={IoeZ!BsnUoJBKMvsHZSLvb1)SEX5 zbC1K8v>XfYj-6GKrec! z$H&LDw2Y;>poYnR5u+S@J({*&GCf1R3TIfR`=Jnm9f@o>JMf^gekBaj9F`77W_wR@ zgRzH>sF8(dCY(N#UU9;t32g`8RXT4{b_1783MdKGFfZ7Er*$_|J3035U-v)Kxo4!II-HY^NS3!_Me;oV(gq(O=xm{- zR!IkR2>SQkzgcDe*8l_L1p6G#fH`NxiOT31Vg+!VsH*TjxSEdqM+GyQ!1hF*@9Idi zN3ve`r>?A*+dV1+N~KP9qk@r7B~+)W?1M11-;_G8(54Y;7+ za-Gkrw>X7oLo!*y;2|vv`=22#$qnhhlwBR8;n=%%Q4Q@<(>dBEVtw0a>uLh{|Im@= z%V(#vlgLfc>L@8aR64$o+1>1&SKBv!yMAt-{KQ#$Hi!PTFbUr$Nw`@Q3EB&y5Uv5Bc{&uNKWbAW z;nsL3S*}I6?{HW=H1TJ|fC9%qCgca=J!^2%Mn&}znvbi~_BnP9F5D`&gZK%Agm=u&*>RDVS68uz_xSrbS^CJ$Jaz0wMg9&d zZI}0XD{k=+$kA(NOj~tV?IjrPjijLX0Z#hgl4mv+$(`hzWBy=M0m7!H*qd44oBH=S zFwJM;kB`s!>ILwegG}mSz+J@4LzIW{2voUev1F6o!fKZ`X16U?lc-^z32J^}stF*Z zyfoJsSdKRwQTMdq{aa?{cicmu)qE9VTKcGtX48Sh<2H&LvPhBMVHlZ|z4 zp<5T8kf4Vj^S5eHFkXa#zPyC)7bn(N*A{#`+i^RV{TC{!Qp0utUBZ3BJ*OZSHo<|D zEu9YXJkJ%>QF(v3fRx4@Hx!Dbc*ekC<3)?xXQ)i?dI`Un*{HcqJYtdG?ATBSOBisP z7&CS~M)-tC^*zv>qx@WPL=PON$L+Rf3VXA(xwQ${B7EIMx&BWe8gfYuVJ7^JB7@8 zDGLLj-f>^sNDRWYnW*mC+hNu(Z=*keniqPeTuDD>evrK>f`-iQ$U~|ZAOuWtR>VSa z#5EkLG_w*ly<1xus|JifoN{s!VhR9_-?py0cEEk@)$jlb$y&@xAij@zOOnXe5NI+4J zgTf_g7AO^8bbZYi-T&3ybR6vCj7G>2uTN2U@#_%{dlc=~X1tq7KV*mI8I=PNLv8S%TmCRa_wcjO!fT<#?gNxZoi{mQO^4Oh{-Q5|ZP@o#GW!kjV~q z?edO&9|(cj<*~9isQv}x|3Wa@+MVL~(ypT*;?$7n0RgF_>pnMK;mx~={=+U5PK*7{ z4(Lm7i9zR`Z0m(FL(=p;n#M3}>*8RFFKywN zk;8F0#Hr}f;gS-@TnFGImbK%y4^*)_)`wy-Q&HNAVyvdChrVL0DhLv`G%liSJAmLu zf%CEJruL#~r?9bUoFza6J85J4c!=p#Gx6olaSr zd>2JNxD4-KDv{H0h*TQX9)(Wj+Fz<;m1E6R! z7riz9Y_&E)F~g3jWPE0mO%6zWB!NqU1!(b_rhub65g@^EZD1UnZ%FtU!Z8D@0{m#a z^;7FUpj3pu?c^T{$rJcwWWLdIQiT}O1{xqmXp1yeRv#(*0piPsga(HWyKT>vx)@o! zD5Dpn7|ys1E!yis_Q!Sidl{43Da!c5c?J0#A#!5(TVOpq)x7Uh$Zo7H_(JqpT^nRJ+8-k5njG z{@MT7Gce6(TrQJtIGngE%~b%ZCBGOEj-+s5lgU!afnTwdKR%9B66mUL`w0Wn_fScV0O*8J_*Tm0*OHqm|H7bLptH{TqPBsEUi-mJnqRb zV+Tv;7E5FXl$2J&9@lu;B%X!Erl)MT=^&b;XLx{p!gaG9>Tc??U>{pN$5eZpSM@E1^e7IR_Eq^Q5ft|9O27)Q$lpQ+| zpYR5M9Xy|&PY3*_SYz2%ywyE-!<(cY5vPVi;A(B04KKl2x?TL0kR!r=nE{^6ZTl<& zZTqYPjeh}NzVKtAq8GDBp(zBmD(N-}QM+-S*G$2mzWbXFo;h8AktBl_0}#~A_5?y_ zI5smOs~Md!gH0B?>Q!uE?`9Fy;znc?fg-ix|19pCn!j6~+bWQ}O1IYl$z0#8w|&^2 zGP%y-U5HbLW0nL(c=4Pldp>24JHh493hAXTI&>`vO8c3e{5+so1j5u^3pT*Wyusqbo0i#E!oGfR)-uw$x!9M0qcOrep?@DPof2%A>48@w7PbEea;96b)HOB{Ki z%EuTMg99PEY$PRB;wYJYYi{3$`f27W-7{nY*N8;jqgw}Vpe3DVLJKIlhQb==%x&t} zjnt)ojmCXAGGT#3Q{~aqtI}a;JnL z?xiS2yif`I3~MkpI=boN;NH@{h45aJJ#_Z%dX)nTD->ms6O403;eWmTXUCanw@k@hho`q0(JEkR^J5$Bn?(_3=6v=)suuZ47=-QvK?*jPyol1%TT^7Rw+P;PV^xCReXMUVMEG~r!hb;qB zhZ`rQU%gVkF^Yh%R9etK+a;5xjPaDO_Ob9eEjp$)izualP*Kl{Mj<~%zFEz}hk8Tn zuiH2_L1yIT(b&+9Y5Mhxl*z~-Au9tI!Sri%5jnG~noIp9bJKQd*?c0Uy%p`zVTd4x zHU$i7N!)F{H4#1@8>bSbL}$sbM0-o6_ zo}Jd}jgSS1Jk^b6u2~$sHNTP5g z+GS4l5xN-HxTMDXjVsnl7=!}CJFs9nIk(yQ>?(Mc_a;ON0PGU&Tp+$DO!G%BSg@>*MmwXtGqQACQPb*C zCK7H7O`}xLxf2RAy48Sy>sni2bcoqVH`s9ehxbby^-XVe5JwE=@>Cu=8f+Iod|hyz zpRF^|FE722F&{nA^t&#-3H;*aONBH={e>aapN*1OSP@2OzEc&3@oWfVF`JQacaq}$ zK3e|f3`ibGl9)NS+CWiQ(u8vGgucg6)3TVIE&wANI|okqk|l_!ANe=zXgL3qn$Hib zi|@(mzacKB#Fs>D%&V}CGU^(=7G111%Cj4qapDyG7K?cGGe58x&rf6d;V%{yCosjH zHeJ@)+Vr07bvgwg-Af2qpX8aJrt=?U9_kC8$6dy^!%iM$!5zerj{FY2A1zt%<8zD) z`2PDOyGC?9l>NepCR1{xs^wzihH;*x~I?G8=e;>=>D8pG{l^NbZu}g6F8Q8vlaXE zhK#oMoWnn-+l86c7P;Cn17PVY=6;6}AqFEKIk86HIk3{?Pm8*19wNUvzER225q|lt znP-z3$b#fu-`PLQC~fa319NadSbHN8N?<77sJtMU8tB)M30o=~4sC zSA#8pYG*U4ucWp-6AYa700mn)jT^i9VX?dnx*2Nn>#(l<@oR-aF2{1+DQgWaREfena=?T}&^teSzA~Dv=H*dOm`DDMe2ui*u<*yrCJ!f@Z>MmHx;xzJ$LO z)3RDD5{2&jyQ#g2j&kP97~uQ1LSU#Guw%n;eN1LPP&lFADWf6RebE&bomE)H#)LKY z`k*gWI;KaPW~7Tmg^gK$3T~^66#6yN5M}$(yGFe))=598>4VcL*LdJFam92tNW{WV z!XW^dt#PwAej2Ui@NF^lA_9c9Y*@GdL_uoGwEZ@hFRIpgrT}_#JHXc%=<~rqn5vpG zZl4fF(m{3Dv%NDi5kei8s5H8BtydM7g@cv$v=0ZcRp4HlHP`+^Lf~g@v$DlFM+!Ql zk~?kuUemI^UbM6;(&UbM{IO>J#>vdPvKbr?wA(*mB9|2m^e~h=zGze#9n)0GN=L+s z^l|FCOTRq75Vgj~@emTnYsi|b(dKFffY++V#{EB%F-uwi;H?kc$vS(~?CT^(a%{Iy zJe%i$^mj;{hN*o_7)lc?4g&FVJ|DFT8)0$2LyV>a`S?%vDEfnMv3&9O^5L~P-T66m^Cyii%79&zN>VVeVBUY$U9WJ4Z4${5sp0o@ z)M7N@Ik}btW|Ny1iwiXc;7_b4WXsio_iRy=)xq?e$9Psc`QUX*5oh0fF=bSJ(9LI^ ztjsve%xG|)=A!FXT7fY%pKtHOh~L@b=O32d%4zxeND#$eRU^!lI*6|Ki;JhQC?OEO zRikC@9Tr$*-?xo9^v;#h3U6Xq08u6q;DZQTu~wjuCX$bk%GCrd@ct;db>3F5#zpE%TTvC_l4jubhsB$P!8Ie_e)ftUc|RvjUVoKrn7?O_^eZs z#uOv2#&*?EqhbGwo8*NehGi!p4hZT25Lgn1N9rS7?QqDN#foG0SpXw7!wa7(iMUVj zK~JoTFoi=H`WIwfw?hy<9=qx+Dxg zY{_n+d*|b%U-z~LW>gdf$musiVS5nf7V~sEVv+;(?6c{Ak1bOzPf&5fM=0K7YT39!-q*@VfIa^c1?lO~lhnYHIks@=BjG)}VOrRrajyds(CechT>A7W~MO$d(rZ$Nia*S44XBuUGMB0PP~C z7DG`0OJt7zkI|~ub*B!&?x*}Nh}1}8l&C?7j7@5v4g%&wqXi(G0v-WHUH$UV-S^K= zt#St`YFr~i_jVFL61~u<{=*g{pwaH-5KHIvU3dC^ygl-l3Z>xUG}=6L(Mt0Udb1up zt_45lx41O+SAG^GdX79ax8)HC`@JHv#2Q~XUmonA0z)W_m>Z;qPn$l)(DV=Q@|?*;$up+yK76lIvcz zaDBB7p6J2e)UpG>B-__u)C_P1i;(``rn=DARa~`5hJu%o%Vm>yS?}%20>30IAQ?t| z?_I-&KycL;eCh4>v$FP1Y0(sddKS9Cma!a?r*ME};7%1ldR%U?@wcG2tu|^jFIES` z{2G}=HxI*@7?CV3*25B$_Ue2kG=aJE9xa6uEW_qwzBqb)&<5@I^%osGvM9`xYi5-L z+(fn?yq~9x)QBCH`Ev}KpXO)5qLdXtDGM~NQUiPu3#7xrnPB-rp zE<2Ho$(=|=35;)M!oHVVSbm_mnu_JHL?TzWKSj0kD;hJmeN7}sqgpMJnbF#=zV{Kt@gh#dCN!sw0I_xsKor*!Q=+IMX0+H`^EYeyAWv*vX6Q z#7U+x5kNBUm{H$pXleZ%aMkiSGWbQdw|yZ5SR1fn(Fi!=CxkX8A<{5ib~vb_zH z^X z^CQWL;cPiVlPq#{$~(@3YB8*2UYATIsVC&q$v$!7g91R)QsyqB0xV5!tdq>=bb<%~ zAhZu8Dg2c=Cpvt!VYFV*>-o`}>#pcFJOU* ze&BHj!Him0OSSqQ!DfCrLQ`+Bc*hM6CimDlY4)|R$uyVuHW;@^Ubo>$h;ljJN8R%X z7dG*5UJ1HX2bFaR{pq<;g^PsCE?%j(YRyep7w06>)wQF^m7*8y8pkNtX)qt-L(AV> zdOZ%DZ~jM*r8BNMjYmC*A7Uor{(Lt}B4MUlLSzQcS5<9lbm7joD0N+)H+c2X=;x+g z^wsfGn93C;%zv76>m+s*$rTPT$RR%*oL76(oQ1+|=AO9lDTp5eZ|9{V%Q&bzVSlt2 zw>KQmHFLsGqZe6X;j;xbW@$G-6x-i?6Hlo!J}t#5SpZ=9bfTBp>s|&=MKVkx;;udJ z!$R4%NuzIK!e2p)np}&fKNjv9TuoC;1k+*>&OLH?e-FF6au0FeksaXn87P=la1O6n@Xq**4Y&i zo?e4y3X@~?V1zG)u(6o|j1ETgqg|!(sn;Rr)o25$veAz4EAkUe0^j9#KNQuvp*BB1znE#^G1epoCtX#wr!{0GgD2LScuvb^GjqCl(QI?Wh^1Jp158{i z+(imp(HWQ3c1x3p0@}{~2@IX^{8ZXQ@Nm9mwq zQ-+esTv4x&BbCaLG1a<*w|gG;dKPPk*SVfYCV~6k%onl$uw-L*d=a#GH$5WJnO4Kd zedYYB7?#)bi*mrn$VfDfI<+1|rh)f~>+26Zhy0)Z18CtmY$E@KdUZAP%@oOb^E@%neZqO}sQP=Hf-!5y9iu8)w$hQAoa`w9R83x0VqzVDc z0g`{Bt!r~O!Dw$i3X4X@X{f~vnxji}eXBuLa#MN|zXzhfR+Bq$YQs7rc<+&u|f z?)&fywQwh$w}*htEShVI;MLB7D6Em-jRI>h=IN85roRkrKHHRXgxzF_``ztoH~z@N zZ30=kY*B->o(04#D~%melo52_3B=Vt3>L|v_PJX9P}&?-oNfcZhju8Ss-GxCCxF43 zMPMAX?1)Ixlk2;_RqxwW2zkFhs#;2RQ5SBSWd?n^PtsukcQi~8vjG78edH)beuEu_ z7zf3Rt@Bw);$7n5e+OZ|u?|>H3SsD-(B>bIMtvebstRrQMi5R}_5HV3|HQ2)fS^&w zM(CtpcqMQ5W$AM9=qOSjvTGEHNb+8D?w7Qaiq}qu6(YhhAjxQd1WR*@GDa~lQdw*$ z`@{SG6B`xaw@bmCKW5M84?`GsO5L+8d)`mDbN=YJ9}EGFZiMV>oG84iU*w&1l**2? zvfa0JuUx(b{2WqH^_`pUzD%hdk@KFNw{Evmwn^=|&M8;i%-K74GRhjqafVCQL;sdU zAA1Nfl5=hblZ1ayL-WB-^66zoyEOF5KtB%GeMx%H@mR)i)zmr57AsV+*s(oKQoRao zGW{r9kZ=;5C^bhQgwN6A>#0{9q3;XGcxh^!nsS`~Me>%VdqX|NN?L1qC-w3o7;s)|nZIFEfybG7b^o>G;$R!Pg?hmBwNq2m;dh62cjIBr`FwaRNr(7GBHy#}E|T!Mi~0+?PX3OJ3S%#z3Axqu73UY|}kYtU52xL=ytN8T%jNOEVBojKho{ zX6WNqOifnK*BpS7<+%R%M%J4aAGG9FmMkt#?m_Iyd6&T;S!6t}+`#T_0MWEB-=`xV1*kiS^2@e$?4GxH;#C`yCG(4wY@5aiA`1Fs7v}5M7P3>aolmE zBdS7wXcs{=`<1hP!sg+3k*HX+h9%@O|Ftf68u^~$R56gbi*9`=WE5&aE9rR=kaP%r zSyG81HXrHH#8{#n+pGJFW+rv#*oSwMe#zSY47-rskvD^$NEw7#4imuPk5C}1AV%V6 zfzODV4po?h7K4+PxqkUk(5gi9;~Plb8Hktew;-H_7xa(u@vl|8LU|a~X|`i(|9c$< zWxkYrj8lcO(f_p;5-3%m#UQ5a<$tevqoMR1lA)t-%K!iR|5e@PJB;}$*R}NM2n7K8 NQ;<=Wu9Gwk{U3c&E)f6# literal 0 HcmV?d00001 diff --git a/frontend/src/hoc/AuthProvider.js b/frontend/src/hoc/AuthProvider.js new file mode 100644 index 0000000..c6d90cc --- /dev/null +++ b/frontend/src/hoc/AuthProvider.js @@ -0,0 +1,29 @@ +import { createContext, useMemo, useState } from 'react'; + +export const AuthContext = createContext(null); + +const AuthProvider = ({ children }) => { + const [userToken, setUserToken] = useState(localStorage.getItem('userToken') || null); + + const signIn = (newToken, moveLocation) => { + setUserToken(newToken); + localStorage.setItem('userToken', newToken); + moveLocation(); + }; + + const signOut = (moveLocation) => { + setUserToken(null); + localStorage.removeItem('userToken'); + moveLocation(); + }; + + const value = useMemo(() => ({ + userToken, + signIn, + signOut, + }), [userToken]); + + return {children}; +}; + +export default AuthProvider; diff --git a/frontend/src/hook/useAuth.js b/frontend/src/hook/useAuth.js new file mode 100644 index 0000000..c32fffc --- /dev/null +++ b/frontend/src/hook/useAuth.js @@ -0,0 +1,4 @@ +import { useContext } from 'react'; +import { AuthContext } from '../hoc/AuthProvider'; + +export default () => useContext(AuthContext); diff --git a/frontend/src/index.css b/frontend/src/index.css deleted file mode 100644 index ec2585e..0000000 --- a/frontend/src/index.css +++ /dev/null @@ -1,13 +0,0 @@ -body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', - 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', - sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -code { - font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', - monospace; -} diff --git a/frontend/src/index.js b/frontend/src/index.js index d563c0f..a58bf85 100644 --- a/frontend/src/index.js +++ b/frontend/src/index.js @@ -1,17 +1,10 @@ -import React from 'react'; +import 'bootstrap/dist/css/bootstrap.min.css'; import ReactDOM from 'react-dom/client'; -import './index.css'; -import App from './App'; -import reportWebVitals from './reportWebVitals'; +import App from './Components/App'; -const root = ReactDOM.createRoot(document.getElementById('root')); -root.render( - - - -); +const app = () => { + const root = ReactDOM.createRoot(document.getElementById('chat')); + root.render(); +}; -// If you want to start measuring performance in your app, pass a function -// to log results (for example: reportWebVitals(console.log)) -// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals -reportWebVitals(); +app(); diff --git a/frontend/src/logo.svg b/frontend/src/logo.svg deleted file mode 100644 index 9dfc1c0..0000000 --- a/frontend/src/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/frontend/src/page/LoginPage.js b/frontend/src/page/LoginPage.js new file mode 100644 index 0000000..2393c8b --- /dev/null +++ b/frontend/src/page/LoginPage.js @@ -0,0 +1,29 @@ +import { Link } from 'react-router-dom'; +import getRoutes from '../routes.js'; +import avatar from '../assets/avatar.jpg'; +import LoginForm from '../Components/LoginForm.js'; + +const LoginPage = () => ( +
+
+
+
+
+
+ Войти +
+ +
+
+
+ Нет аккаунта? + Регистрация +
+
+
+
+
+
+); + +export default LoginPage; diff --git a/frontend/src/page/NotfoundPage.js b/frontend/src/page/NotfoundPage.js new file mode 100644 index 0000000..3e5d5a7 --- /dev/null +++ b/frontend/src/page/NotfoundPage.js @@ -0,0 +1,21 @@ +import { Link } from 'react-router-dom'; +import notFoundPNG from '../assets/notFound.png'; +import getRoutes from '../routes.js'; + +const Notfoundpage = () => ( +
+ Страница не найдена +

Страница не найдена

+

+ Но вы можете перейти + {' '} + на главную страницу +

+
+); + +export default Notfoundpage; diff --git a/frontend/src/reportWebVitals.js b/frontend/src/reportWebVitals.js deleted file mode 100644 index 5253d3a..0000000 --- a/frontend/src/reportWebVitals.js +++ /dev/null @@ -1,13 +0,0 @@ -const reportWebVitals = onPerfEntry => { - if (onPerfEntry && onPerfEntry instanceof Function) { - import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { - getCLS(onPerfEntry); - getFID(onPerfEntry); - getFCP(onPerfEntry); - getLCP(onPerfEntry); - getTTFB(onPerfEntry); - }); - } -}; - -export default reportWebVitals; diff --git a/frontend/src/routes.js b/frontend/src/routes.js new file mode 100644 index 0000000..e2cb7da --- /dev/null +++ b/frontend/src/routes.js @@ -0,0 +1,5 @@ +export default { + main: () => '/', + login: () => '/login', + signup: () => '/api/v1/login', +}; diff --git a/frontend/src/setupTests.js b/frontend/src/setupTests.js deleted file mode 100644 index 8f2609b..0000000 --- a/frontend/src/setupTests.js +++ /dev/null @@ -1,5 +0,0 @@ -// jest-dom adds custom jest matchers for asserting on DOM nodes. -// allows you to do things like: -// expect(element).toHaveTextContent(/react/i) -// learn more: https://github.com/testing-library/jest-dom -import '@testing-library/jest-dom'; diff --git a/package-lock.json b/package-lock.json index f7f780c..8c70cc1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,9 @@ "license": "ISC", "dependencies": { "@hexlet/chat-server": "^1.1.8" + }, + "engines": { + "node": "20.5.1" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -22,9 +25,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", - "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.4.tgz", + "integrity": "sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg==", "peer": true, "dependencies": { "regenerator-runtime": "^0.14.0" @@ -81,9 +84,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz", - "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==", + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz", + "integrity": "sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==", "peer": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -146,13 +149,13 @@ } }, "node_modules/@fastify/jwt": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@fastify/jwt/-/jwt-7.2.3.tgz", - "integrity": "sha512-UPHS7E6tmDWMYspq9znKZ54NwN0F+vcQ9e8okkl4iE+bDMaWCoPChL/lUmKLFepU6/Van3grjshmNviQ8oLVwA==", + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/@fastify/jwt/-/jwt-7.2.4.tgz", + "integrity": "sha512-aWJzVb3iZb9xIPjfut8YOrkNEKrZA9xyF2C2Hv9nTheFp7CQPGIZMNTyf3848BsD27nw0JLk8jVLZ2g2DfJOoQ==", "dependencies": { "@fastify/error": "^3.0.0", "@lukeed/ms": "^2.0.0", - "fast-jwt": "^3.0.0", + "fast-jwt": "^3.3.2", "fastify-plugin": "^4.0.0", "steed": "^1.1.3" } @@ -290,9 +293,9 @@ "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" }, "node_modules/@types/cors": { - "version": "2.8.16", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.16.tgz", - "integrity": "sha512-Trx5or1Nyg1Fq138PCuWqoApzvoSLWzZ25ORBiHMbbUT42g578lH1GT4TwYDbiUOLFuDsCkfLneT2105fsFWGg==", + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", "dependencies": { "@types/node": "*" } @@ -304,9 +307,9 @@ "peer": true }, "node_modules/@types/node": { - "version": "20.9.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz", - "integrity": "sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==", + "version": "20.10.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.0.tgz", + "integrity": "sha512-D0WfRmU9TQ8I9PFx9Yc+EBHw+vSpIub4IDvQivcp26PtPrdMGAq5SDcpXEo/epqa/DXotVpekHiLNTg3iaKXBQ==", "dependencies": { "undici-types": "~5.26.4" } @@ -1216,15 +1219,15 @@ } }, "node_modules/eslint": { - "version": "8.53.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz", - "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==", + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.54.0.tgz", + "integrity": "sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==", "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.3", - "@eslint/js": "8.53.0", + "@eslint/js": "8.54.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -1671,9 +1674,9 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/fast-jwt": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-jwt/-/fast-jwt-3.3.1.tgz", - "integrity": "sha512-1YuuIJeh1hEvfcYDe89P2oGACWI5hd2GadRDKHalSxkc1Z0z8I6yzuVK6SF15sW09QZngTV6d7g4+TFL9bvs5A==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-jwt/-/fast-jwt-3.3.2.tgz", + "integrity": "sha512-H+JYxaFy2LepiC1AQWM/2hzKlQOWaWUkEnu/yebhYu4+ameb3qG77WiRZ1Ct6YBk6d/ESsNguBfTT5+q0XMtKg==", "dependencies": { "@lukeed/ms": "^2.0.1", "asn1.js": "^5.4.1", @@ -2247,9 +2250,9 @@ ] }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "peer": true, "engines": { "node": ">= 4" @@ -3208,9 +3211,9 @@ } }, "node_modules/pino": { - "version": "8.16.1", - "resolved": "https://registry.npmjs.org/pino/-/pino-8.16.1.tgz", - "integrity": "sha512-3bKsVhBmgPjGV9pyn4fO/8RtoVDR8ssW1ev819FsRXlRNgW8gR/9Kx+gCK4UPWd4JjrRDLWpzd/pb1AyWm3MGA==", + "version": "8.16.2", + "resolved": "https://registry.npmjs.org/pino/-/pino-8.16.2.tgz", + "integrity": "sha512-2advCDGVEvkKu9TTVSa/kWW7Z3htI/sBKEZpqiHk6ive0i/7f5b1rsU8jn0aimxqfnSz5bj/nOYkwhBUn5xxvg==", "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.1.1", @@ -3389,9 +3392,9 @@ } }, "node_modules/process-warning": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.3.0.tgz", - "integrity": "sha512-N6mp1+2jpQr3oCFMz6SeHRGbv6Slb20bRhj4v3xR99HqNToAcOe1MFOp4tytyzOfJn+QtN8Rf7U/h2KAn4kC6g==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-2.3.1.tgz", + "integrity": "sha512-JjBvFEn7MwFbzUDa2SRtKJSsyO0LlER4V/FmwLMhBlXNbGgGxdyFCxIdMDLerWUycsVUyaoM9QFLvppFy4IWaQ==" }, "node_modules/prop-types": { "version": "15.8.1",
-
- logo -

- Edit src/App.js and save to reload. -

-
- Learn React - -
-